如何用Mathematica找到Waldo?
这在周末给我带来了麻烦:什么是解决问题的好方法Waldo在哪里? [北美以外的'Wally']使用Mathematica(图像处理和其他功能)的困惑?
这是我迄今为止的功能,通过调暗一些非红色的颜色来减少视觉复杂度:
whereIsWaldo[url_] := Module[{waldo, waldo2, waldoMask},
waldo = Import[url];
waldo2 = Image[ImageData[
waldo] /. {{r_, g_, b_} /;
Not[r > .7 && g < .3 && b < .3] :> {0, 0,
0}, {r_, g_, b_} /; (r > .7 && g < .3 && b < .3) :> {1, 1,
1}}];
waldoMask = Closing[waldo2, 4];
ImageCompose[waldo, {waldoMask, .5}]
]
以及这个“有效”的URL的例子:
whereIsWaldo["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"]
(沃尔多是由收银机):
我找到了沃尔多!
我是如何做到的
首先,我滤出所有不是红色的颜色
waldo = Import["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"];
red = Fold[ImageSubtract, #[[1]], Rest[#]] &@ColorSeparate[waldo];
接下来,我正在计算这个图像与简单的黑白图案的相关性,以发现衬衫中的红色和白色过渡。
corr = ImageCorrelate[red,
Image@Join[ConstantArray[1, {2, 4}], ConstantArray[0, {2, 4}]],
NormalizedSquaredEuclideanDistance];
我使用Binarize
以足够高的相关性挑出图像中的像素,并在它们周围绘制白色圆圈,以使用Dilation
强调它们
pos = Dilation[ColorNegate[Binarize[corr, .12]], DiskMatrix[30]];
我必须在关卡上玩一下。 如果级别太高,则会选择太多的误报。
最后,我将这个结果与原始图像结合起来得到上面的结果
found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]
我猜想采用“防弹的方式来做到这一点”(想想中情局在任何时候都可以找到任何卫星图像中的沃尔多,而不是像没有竞争性元素的单幅图像,比如条纹衬衫)......我会在沃尔多的许多图像上训练玻尔兹曼机器 - 他坐着,站立,遮挡等各种变化; 衬衫,帽子,相机和所有作品。 你不需要大量的瓦尔多斯语料库(可能有3-5个就足够了),但越多越好。
这将把概率云分配给发生在任何正确布置中的各种元素,然后建立(通过分割)什么是平均对象大小,将源图像分成与个人最相似的对象的细胞(考虑可能的遮挡和姿势改变),但是由于沃尔多的照片通常包含大量相同规模的人,因此这应该是一件非常简单的任务,然后将这些预先训练好的玻尔兹曼机器的部分进行喂食。 它会给你每个人作为Waldo的可能性。 以最高的概率取一个。
这就是OCR,ZIP代码阅读器和无笔迹手写识别如何在今天工作。 基本上你知道答案就在那里,你或多或少地知道它应该是什么样子,其他所有东西都可能有共同的元素,但肯定是“不是”,所以你不用为“不是”而烦恼,你只是看看你以前见过的所有可能的“它”之间的“it”的可能性(例如在邮政编码中,例如,你只需训练BM 1s,2s,3s等等,然后每个然后选择一个最有信心的数字),这比单个神经网络学习所有数字的特征要好得多。
我同意@GregoryKlopper说,解决在任意图像中找到Waldo(或任何感兴趣对象)的一般问题的正确方法是训练监督机器学习分类器。 使用许多正面和负面的标记示例,支持向量机,Boosted Decision Stump或Boltzmann Machine等算法可能会被训练以在此问题上实现高精度。 Mathematica甚至在其机器学习框架中包含这些算法。
培训Waldo分类器的两个挑战是:
一个快速的谷歌图片搜索提供了一些很好的数据 - 我将去收集一些培训示例,并立即编码!
然而,即使是机器学习方法(或者@iND提出的基于规则的方法)也会为像沃尔多斯之地这样的形象而奋斗!
链接地址: http://www.djcxy.com/p/6053.html