牛!Mathematica还能这样用!自己制作马赛克拼图
icon2 Tough Computer | icon4 2008-05-19 1:03| icon325 Comments | 本文内容遵从CC版权协议 转载请注明出自matrix67.com

    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里找到了,下载速度贼快。

25 条回复

  • 楼层: 沙发 | | dd 说:

    很黄很暴力的沙发。

  • 楼层: 板凳 | | oldherl 说:

    板凳一个!

  • 楼层: 地毯 | | Franklin 说:

    美图!

  • 楼层: 地板 | | welco 说:

    拼的是什么 小狼狗吗

  • 楼层: 地下室 | | sjjs 说:

    说实话 我想要你的collection

  • 楼层: 地基 | | Nova 说:

    似乎是他本人……
    强烈要求重开留言板……

  • 楼层: 地壳 | | dahe_1984 说:

    看了半天,到是很养眼.

  • 楼层: 地幔 | | pongba 说:

    全了..

  • 楼层: 地核 | | Ai.Freedom 说:

    交图不杀

  • 楼层: 10楼 | | Gohan 说:

    代码没看懂,MatheMatica和MM都很黄很好。。
    RandomChoice[Take[SortBy[imagePool, Norm[c - #[[2]]] &], 20]][[1]];
    Grid[Reverse[Map[closeMatch, Import["MasterImage.tif"][[1, 1]], {2}]], Spacings -> {0, 0}]真简短啊。

  • 楼层: 11楼 | | w 说:

    搜狐网友 在上文中提到:
    一个唐山人的建议: 我曾亲历过唐山大地震,我现在发现汶川的救人方式有点问题,请大家帮着转:急!!!急!!!急!!!急!!!急!!! 救灾技巧1、希望尽快组织大量生理盐水到救援现场! 女孩被救出10分钟去世,是可以避免的. 肢体被挤压超过24小时后开始出现肌肉坏死.一旦移开重压,坏死肌肉会释放大量的肌红素,蛋白,钾等电解质.迅速引起心肾衰竭而死.这就是很多被救人员在被挤压中还能说话,而救出几分钟后死亡的原因. 因此在移开重物前就要为伤者滴注生理盐水,让伤者进行有效代谢,把血液中这些东西排出后再移开重物.否则一旦移开重物,死亡的机率很高. 希望尽快组织大量生理盐水到救援现场! 如果采用我的建议会有更多的人挽回生命: 从废墟中救出的人有些好像已经死亡,但其实是长时间埋在地下造成的窒息.如果抬出来后先不用布盖住,让其置于室外并洒些水淋一淋有可能会复活.唐山大地震时我的哥哥被挖出来后就已经没有一点气了,我们都以为他已经死了,就放在地上,但由于震后下了雨,被雨水淋过以后,过了十多分钟,我哥哥奇迹般地的有了呼吸.这几天我一直在打红十字会的电话想把这个建议转达灾区救援队,但一直占线,请相信我,我是唐山人,是亲历者. 请大家帮忙转发! 希望这条建议发出去后,能够通过专家和重要媒体的核实、关注和行动,如果能起到作用,不让那些本可以救活的无辜的同胞死去的话,也算是尽了一份本人的力

  • 楼层: 12楼 | | Moony Chou 说:

    又忍不住从Google Reader里面跳过来留言了……

    居然收集了这么多图片…大赞

  • 楼层: 12a楼 | | 浅海里的鱼 说:

    为什么自己弄就一直running然后没有下文了呢?

  • 楼层: 14楼 | | lias 说:

    我也是忍不住从reader跳过来的……

  • 楼层: 15楼 | | Freeze 说:

    Matrix67牛,我觉得不应该在这个时候发篇文章,因为组成图片的图片太不严肃了,不管你最后组成的是肖像还是汶川,都很不严肃……

  • 楼层: 16楼 | | dahe_1984 说:

    还是关心地震赈灾情况吧。

  • 楼层: 17楼 | | NomadThanatos 说:

    Ai,我和BillyLinux都觉得你因该说 “交图不和”...hexie...

  • 楼层: 18楼 | | sinya 说:

    不要这样子
    我是很纯洁的……

  • 楼层: 19楼 | | cc 说:

    果然是色狼~~~~

  • 楼层: 20楼 | | 75249 说:

    。。Mathematica 6.0。。
    67牛你有直接安装的程序吗,本人目前只有5.0的

  • 楼层: 21楼 | | a691662 说:

    5.0比6.0差太多了

  • 楼层: 22楼 | | 5142 说:

    最后一行第二张...

  • 楼层: 23楼 | | Zx.MYS 说:

    Matrix67的MM真多- -

  • 楼层: 24楼 | | will 说:

    一张一张的看……

  • 楼层: 25楼 | | 0_0 说:

    No more memory available.
    Mathematica kernel has shut down.
    我用就出现这个 ???

您也随便说几句吧:

请注意:如果您是第一次在本站发表评论,您的评论需要通过管理员的审核。

您可以在Gravatar设置您的头像。