6

Mathematicaの例を機能させようとしています。セオドア・グレイのブログにあるものです。

Mathematicaは、彼がそのコードを書いたとき(2008年5月)から変わったに違いないと思います。ほとんどすべてを変えたにもかかわらず、私はそれから合理的なものを何も得ることができないからです。インポートの代わりにImageDataを使用しますか?Mathematica 8で動作するこのコードのバージョンを誰かが提案できますか?

imagePool = 
 Map[With[{i = Import[#]}, {i, Mean[Flatten[N[i[[1, 1]]], 1]]}] &, 
  FileNames["Pool/*.jpg"]];
closeMatch[c_] := 
  RandomChoice[Take[SortBy[imagePool, Norm[c - #[[2]]] &], 20]][[1]];
Grid[Reverse[
  Map[closeMatch, Import["MendeleevIcon.tif"][[1, 1]], {2}]], 
  Spacings -> {0, 0}]
4

2 に答える 2

7

たぶんもう少し合理化されています:

imagePool = Map[With[{i = Import[#]}, {i, N@Mean[Flatten[ImageData[i], 1]]}] &, 
   FileNames["Pool/*.jpg"]];

closeMatch[c_] := RandomChoice[
   Nearest[imagePool[[All, 2]] -> imagePool[[All, 1]], c, 20]]

ImageAssemble[Map[closeMatch, ImageData[Import["mendeleevIcon.tif"]], {2}]]

モザイク

編集

元のコードがバージョン8で機能しなくなった理由は、バージョン6まではMathematicaがオブジェクトImport["file.jpg"]を返すからです。Graphics[Raster[]]画像データ自体を抽出するには、簡単に行うことができますImport["file.jpg"][[1,1]]。ただし、バージョン8(およびバージョン7の疑い)では、ラスターイメージはデフォルトでインポートされます。つまり、インポートされたファイルからイメージデータを抽出するImage必要があります。を使用してImageDataラスター画像をインポートすることもできるので、ステートメントを適応させても元のコードは機能しますが、オブジェクトを使用する利点は、次のような関数を使用できることです(さらに、付属のその他の画像処理ツール全体) Mathematica 8)。Graphics[Raster[]]Import["file.jpg","Graphics"]ImportImageImageAssemble

于 2011-10-22T16:44:42.093 に答える
5

次の作品(コメントで指摘してくれた@yodaに感謝しReverse[]ます):

f = FileNames["*.jpg", {"c:\\test\\pool\\Pool"}];
m = Import["c:\\test\\pool\\Pool\\MendeleevIcon.tif"];
imagePool =
  Map[
   With[{i = Import[#]},
     {i, Mean[Flatten[ImageData@i, 1]]}] &, f];
closeMatch[c_] := 
  RandomChoice[Take[SortBy[imagePool, Norm[c - #[[2]]] &], 20]][[1]];
Grid[Map[closeMatch, ImageData@m, {2}], Spacings -> {0, 0}]

ここに画像の説明を入力してください

于 2011-10-22T16:15:05.120 に答える