Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 我如何找到Mathematica的Waldo?_Image Processing_Wolfram Mathematica - Fatal编程技术网

Image processing 我如何找到Mathematica的Waldo?

Image processing 我如何找到Mathematica的Waldo?,image-processing,wolfram-mathematica,Image Processing,Wolfram Mathematica,这个周末我一直在担心:使用Mathematica(图像处理和其他功能)解决那些北美以外的[沃利]难题的好方法是什么 到目前为止,我已经有了一个功能,它通过调暗稍微降低了视觉复杂性 一些非红色的颜色: whereIsWaldo[url_] := Module[{waldo, waldo2, waldoMask}, waldo = Import[url]; waldo2 = Image[ImageData[ waldo] /. {{r_, g_, b_} /;

这个周末我一直在担心:使用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}]
]
(沃尔多在收银机旁):

我找到了沃尔多

我是怎么做到的

首先,我过滤掉所有不是红色的颜色

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];
我使用
二值化
来挑选图像中具有足够高相关性的像素,并在其周围绘制白色圆圈,以使用
放大

pos = Dilation[ColorNegate[Binarize[corr, .12]], DiskMatrix[30]];
我不得不在关卡上玩一点。如果级别太高,则会发现太多的误报

最后,我将这个结果与原始图像相结合,得到上面的结果

found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]
我猜想这是一种“防弹的方法”(想想中央情报局在任何时候都能在任何卫星图像中找到沃尔多,而不仅仅是一张没有竞争元素的图像,比如条纹衬衫)。。。我会对沃尔多的许多形象进行训练——他坐着、站着、被遮挡等等的各种变化。;衬衫、帽子、照相机和所有的作品。你不需要大量的瓦尔多语语料库(也许3-5个就足够了),但越多越好

这将为以任何正确排列方式出现的各种元素分配概率云,然后(通过分割)确定平均对象大小,将源图像分割成最像个人的对象单元(考虑可能的遮挡和姿势变化),但是,由于沃尔多图片通常包括很多人在大约相同的规模,这应该是一个非常简单的任务,然后饲料预训练玻尔兹曼机器的这些部分。它会给你每个人都是沃尔多的可能性。拿一个概率最高的


这就是OCR、邮政编码阅读器和无笔划手写识别如今的工作原理。基本上,你知道答案就在那里,你或多或少知道它应该是什么样子,其他一切可能都有共同的元素,但肯定是“不是它”,所以你不必为“不是它”而烦恼,你只需在你以前见过的所有可能的“它”中寻找“它”的可能性(例如,在邮政编码中,你只需训练BM 1秒、2秒、3秒等,然后将每个数字输入每台机器,然后选择一个最有信心的数字)。这比单一的神经网络学习所有数字的特征要有效得多。

我不懂数学……太糟糕了。但我大体上喜欢上面的答案

然而,仅仅依靠条纹来收集答案仍然存在一个重大缺陷(我个人对一次手动调整没有任何问题)。有一个例子(由Brett Champion列出)表明,他们有时会打破衬衫图案。因此,这就变成了一个更复杂的图案

我会尝试一种形状id和颜色以及空间关系的方法。就像人脸识别一样,你可以从彼此之间寻找一定比例的几何图案。需要注意的是,通常一个或多个形状被遮挡

在图像上获得白平衡,从图像中获得红平衡。我相信Waldo始终是相同的值/色调,但图像可能来自扫描,或者是一个坏的副本。然后始终参考Waldo实际是的一系列颜色:红色、白色、深棕色、蓝色、桃色、{shoe color}

有一个衬衫图案,还有裤子、眼镜、头发、脸、鞋子和帽子,它们定义了沃尔多。另外,相对于图片中的其他人,沃尔多是瘦的一面

所以,找一个随机的人来获得这张图片中人的身高。在图片中的随机点测量一堆东西的平均高度(一个简单的轮廓会产生很多人)。如果每件事物彼此之间的标准偏差不在某个范围内,则暂时忽略它们。将平均高度与图像的高度进行比较。如果比例太大(例如,1:2、1:4或类似比例),则重试。运行10(?)确保所有样本都非常接近的次数,不包括任何超出标准偏差的平均值。在Mathematica中可能吗

这是你的Waldo尺寸。Walso很瘦,所以你要找的是5:1或6:1(或其他)ht:wd。但是,这还不够。如果Waldo部分隐藏,高度可能会改变。因此,你要找的是一块2:1的红白相间。但必须有更多的指示器

  • 沃尔多戴着眼镜。在红白相间的上方搜索两个0.5:1的圆圈
  • 蓝色裤子。在红白相间的末端到他脚的任何距离内,在相同宽度的任何数量的蓝色。注意,他穿的衬衫很短,所以脚不会太近
  • 这顶帽子是红白相间的,距离是他头顶的两倍。注意它下面一定有黑发,可能还有眼镜
  • 长袖。红白与主红白有一定角度
  • 黑发
  • 鞋子的颜色,我不知道颜色
  • 以上任何一项都适用。这些都是针对照片中类似人群的阴性检查——例如,2否定穿着红白围裙(离鞋子太近),#5消除浅色头发。此外,形状只是这些测试的一个指标……仅在指定距离内的颜色就可以给出良好的结果

    这将缩小要处理的区域

    存储这些结果将生成一组应该包含Waldo的区域。排除所有其他区域(例如,对于每个区域,选择一个比平均人大小大两倍的圆),然后运行@Heike使用的流程
    found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]