cor*_*ion 6 wolfram-mathematica backwards-compatibility mathematica-8
我正在尝试使用Mathematica示例.这是Theo Gray博客上的那个.
我认为Mathematica自编写该代码以来一定发生了变化(2008年5月),因为尽管几乎改变了一切,但我无法从中得到任何合理的结果.我是否使用ImageData而不是Import?任何人都可以建议这个代码的版本适用于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}]
Run Code Online (Sandbox Code Playgroud)
也许稍微简化:
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}]]
Run Code Online (Sandbox Code Playgroud)

编辑
原始代码在版本8中停止工作的原因是,直到Mathematica版本6,Import["file.jpg"]才会返回一个Graphics[Raster[]]对象.要提取图像数据本身就可以了Import["file.jpg"][[1,1]].但是,在版本8(我怀疑版本7)中Image,默认情况下导入光栅图像,这意味着您需要ImageData从导入的文件中提取图像数据.您仍然可以Graphics[Raster[]]通过使用导入光栅图像,Import["file.jpg","Graphics"]因此如果您调整Import语句,原始代码仍然可以工作,但使用Image对象的优点是您可以使用诸如此类的功能ImageAssemble(以及随附的一系列其他图像处理工具) Mathematica 8).
以下作品(感谢@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}]
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
589 次 |
| 最近记录: |