Difference Map Generative Art
Target Image
Target Image
In[]:=
Show[Image[obama=ImageData@ColorConvert[ImageResize[ImageCrop[ImageCrop[Import["https://upload.wikimedia.org/wikipedia/en/5/55/Barack_Obama_Hope_poster.jpg"],{225,235},Bottom],{225,225},Top],16],"Grayscale"]],ImageSize->300]
Out[]=
In[]:=
GraphicsRowMapThreadShow[createPict[#1,Last@#2],ImageSize300]&,,,,,,,ImageSize->900
Out[]=
Wang Tiles
Wang Tiles
In[]:=
tileDataWang=mkWangTiles[GrayLevel/@Subdivide[3]];tileValuesWang=First/@ColorConvert[tileDataWang["tileColorValue"],"Grayscale"];tileDataWang["allTilesImg"][[;;32]]
Out[]=
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
In[]:=
(*linearProgrammingSolutionWang=partitionSolve[tileDataWang,Image[obama],30];Show[createPict[tileDataWang,linearProgrammingSolutionWang],ImageSize300]*)
In[]:=
arrayWang=ConstantArray[N[RandomReal[{0,1},Append[Dimensions[obama],Length[tileDataWang["allTilesImg"]]]]],3];bestTilingErrorWang=100.;arrayToKeepWang={blockProjection[arrayWang//Mean].Range[Length[tileDataWang["allTilesImg"]]]};
In[]:=
Do[arrayWang=differenceMapIteration[0.25][tileDataWang["topologyH"],tileDataWang["topologyV"],obama][0.125,tileValuesWang][arrayWang];meanArrayWang=arrayWang//Mean;horizontalCostWang=horizontalTilingCost[tileDataWang][meanArrayWang]*100;verticalCostWang=verticalTilingCost[tileDataWang][meanArrayWang]*100;pixelValuesCostWang=pixelCost[obama,tileValuesWang][meanArrayWang]*100;If[Mean[{horizontalCostWang,verticalCostWang}]<=bestTilingErrorWang,bestTilingErrorWang=Mean[{horizontalCostWang,verticalCostWang}];bestArrayWang=meanArrayWang];If[Mod[i,20]==0,AppendTo[arrayToKeepWang,blockProjection[meanArrayWang].Range[Length[tileDataWang["allTilesImg"]]]]];errorWang=StringTemplate["Best Tiling Cost: `1` %Iteration `2`:-- Current Horizontal Tiling Cost: `3` %-- Current Vertical Tiling Cost: `4` %-- Current Pixel Values Cost: `5` %"][bestTilingErrorWang,i,horizontalCostWang,verticalCostWang,pixelValuesCostWang];,{i,100000}]
Out[]=
$Aborted
In[]:=
Dynamic[errorWang]
In[]:=
Show[createPict[tileDataWang,arrayToKeepWang[[-1]]],ImageSize300]
In[]:=
arrayToKeepWang=Import["wang-tiles_obama16x16_rrr05.mx"];
In[]:=
Export["wang-tiles_obama16x16_rrr05.mx",arrayToKeepWang]
Out[]=
wang-tiles_obama16x16_rrr05.mx
In[]:=
framesWang=Show[createPict[tileDataWang,#],ImageSize300]&/@arrayToKeepWang;
In[]:=
Export["wang-tiles_obama16x16_rrr05.gif",framesWang]
Out[]=
wang-tiles_obama16x16_rrr05.gif
In[]:=
Iconize[arrayWang,"wang-tiles_obama16x16_rrr05_final-array"]
Out[]=
Dark Tiles
Dark Tiles
In[]:=
{darkCol,backgroundCol,lightCol}={Black,Gray,White};tileDataGrayscale=mkDarkTiles[backgroundCol,{darkCol,lightCol}];tileValuesGrayscale=First/@ColorConvert[tileDataGrayscale["tileColorValue"],"Grayscale"];tileDataGrayscale["allTilesImg"]
Out[]=
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
In[]:=
linearProgrammingSolution=partitionSolve[tileDataGrayscale,Image[obama],30];Show[createPict[tileDataGrayscale,linearProgrammingSolution],ImageSize300]
Out[]=
Smith Tiles
Smith Tiles
Tiling Initialization Functions
Tiling Initialization Functions
Projection Initialization Functions
Projection Initialization Functions