Mathematica中的Photo Mosaic:2008年的一个例子在Mathematica 9中不起作用

时间:2013-11-25 06:16:02

标签: wolfram-mathematica mosaic

我正在尝试使用Mathematica示例。这是Theo Gray's blog上的那个。在Mathematica 9.0中它不起作用。我已经在stackoverflow in mathematica 8.0上搜索了答案。我使用heike给出的代码。

imagePool =Map[With[{i = Import[#]}, {i, N@Mean[Flatten[ImageData[i], 1]]}] &,FileNames["/Users/xunyanan/Desktop/webwx_img/*.jpg"]];
closeMatch[c_] :=RandomChoice[Nearest[imagePool[[All, 2]] -> imagePool[[All, 1]], c, 20]]
ImageAssemble[Map[closeMatch, ImageData[Import["/Users/xunyanan/Desktop/me.tif"]], {2}]]

我认为它几乎成功运行。 响应截图: out content

当我点击“显示完整输出”时。我会得到如下结果或Mathematica 9.0退出正常 截图:

enter image description here

我现在使用Mathematica 9.0,没有经验。那么有人可以推荐一个适用于Mathematica 9的代码版本吗?我很感激你能给我一些建议。

谢谢你们编辑这个问题。 我的PC ENV:mac OS X版本10.9和Mathematica 9.0

1 个答案:

答案 0 :(得分:1)

正如评论所指出的那样,您的问题是因为您用于imagePool的图片的通道数量并不完全相同,这会让Nearest功能感到不安。解决这个问题的简单方法可能是:

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

即。导入图像时应用RemoveAlphaChannel。将相同的预防措施应用于您的源图像也是明智的。

发现差异:

之前(没有RemoveAlphaChannel):

before

后:

after