Wolfram的Blog上更新了一段非常牛的Mathematica代码,真的让我大开眼界。只需要三行代码,你就可以自己做一个马赛克拼图。
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["MasterImage.tif"][[1, 1]], {2}]], Spacings -> {0, 0}]
其中,"Pool/*.jpg"是你的图库,我估计最少也得有几百张吧。我用Photoshop把我的collection全部处理成了35x35的小图;为了让最终效果更佳,我特地把它们全部处理成单色的,并且减小了对比度。"MasterImage.tif"是你的目标图片,Mathematica会把这个图片中的每一个像素用图库中一个合适的图来代替。我把我的照片剪裁了一下,然后压成19x22的大小。Mathematica首先把所有照片以及每个照片的RGB值的中位数存成一个list,函数closeMatch将图片按照RGB值的均方根排序,然后随机从头20个中选出一个。第三行用Grid函数输出我们所要的马赛克拼图。最后我们就得到了——由众MM图所组成的Matrix67的肖像画!!如果你还看不出来的话,站远点儿眯着眼睛就能看出来了。

Mathematica 5.0貌似没有SortBy和Grid等函数,因此这段代码在5.0下面不能用。为此我专门把Mathematica升到了6.0,改进不小,建议还在用5.x的朋友都去试一试。起初在网上找Mathematica 6.0的下载找了半天,结果在北大数院的FTP里找到了,下载速度贼快。












很黄很暴力的沙发。
板凳一个!
美图!
拼的是什么 小狼狗吗
说实话 我想要你的collection
似乎是他本人……
强烈要求重开留言板……
看了半天,到是很养眼.
全了..
交图不杀
代码没看懂,MatheMatica和MM都很黄很好。。
RandomChoice[Take[SortBy[imagePool, Norm[c - #[[2]]] &], 20]][[1]];
Grid[Reverse[Map[closeMatch, Import["MasterImage.tif"][[1, 1]], {2}]], Spacings -> {0, 0}]真简短啊。
搜狐网友 在上文中提到:
一个唐山人的建议: 我曾亲历过唐山大地震,我现在发现汶川的救人方式有点问题,请大家帮着转:急!!!急!!!急!!!急!!!急!!! 救灾技巧1、希望尽快组织大量生理盐水到救援现场! 女孩被救出10分钟去世,是可以避免的. 肢体被挤压超过24小时后开始出现肌肉坏死.一旦移开重压,坏死肌肉会释放大量的肌红素,蛋白,钾等电解质.迅速引起心肾衰竭而死.这就是很多被救人员在被挤压中还能说话,而救出几分钟后死亡的原因. 因此在移开重物前就要为伤者滴注生理盐水,让伤者进行有效代谢,把血液中这些东西排出后再移开重物.否则一旦移开重物,死亡的机率很高. 希望尽快组织大量生理盐水到救援现场! 如果采用我的建议会有更多的人挽回生命: 从废墟中救出的人有些好像已经死亡,但其实是长时间埋在地下造成的窒息.如果抬出来后先不用布盖住,让其置于室外并洒些水淋一淋有可能会复活.唐山大地震时我的哥哥被挖出来后就已经没有一点气了,我们都以为他已经死了,就放在地上,但由于震后下了雨,被雨水淋过以后,过了十多分钟,我哥哥奇迹般地的有了呼吸.这几天我一直在打红十字会的电话想把这个建议转达灾区救援队,但一直占线,请相信我,我是唐山人,是亲历者. 请大家帮忙转发! 希望这条建议发出去后,能够通过专家和重要媒体的核实、关注和行动,如果能起到作用,不让那些本可以救活的无辜的同胞死去的话,也算是尽了一份本人的力
又忍不住从Google Reader里面跳过来留言了……
居然收集了这么多图片…大赞
为什么自己弄就一直running然后没有下文了呢?
我也是忍不住从reader跳过来的……
Matrix67牛,我觉得不应该在这个时候发篇文章,因为组成图片的图片太不严肃了,不管你最后组成的是肖像还是汶川,都很不严肃……
还是关心地震赈灾情况吧。
Ai,我和BillyLinux都觉得你因该说 “交图不和”...hexie...
不要这样子
我是很纯洁的……
果然是色狼~~~~
。。Mathematica 6.0。。
67牛你有直接安装的程序吗,本人目前只有5.0的
5.0比6.0差太多了
最后一行第二张...
Matrix67的MM真多- -
一张一张的看……
No more memory available.
Mathematica kernel has shut down.
我用就出现这个 ???