gpt4 book ai didi

python - 如何使用 Python 找到 Wally?

转载 作者:IT老高 更新时间:2023-10-28 21:12:44 24 4
gpt4 key购买 nike

无耻地跟风:-)

灵感来自 How do I find Waldo with Mathematica和后续How to find Waldo with R ,作为一个新的python用户,我很想看看如何做到这一点。似乎 python 比 R 更适合这个,而且我们不必像使用 Mathematica 或 Matlab 那样担心许可证问题。

在像下面这样的示例中,显然简单地使用条纹是行不通的。如果可以使用基于规则的简单方法来处理诸如此类的困难示例,那将会很有趣。

At the beach

我添加了 [machine-learning] 标签,因为我相信正确答案必须使用 ML 技术,例如 Gregory Klopper 在原始线程中提倡的受限玻尔兹曼机 (RBM) 方法。有一些RBM code available in python这可能是一个很好的起点,但显然这种方法需要训练数据。

2009 IEEE International Workshop on MACHINE LEARNING FOR SIGNAL PROCESSING (MLSP 2009)他们跑了Data Analysis Competition: Where's Wally? .训练数据以 matlab 格式提供。请注意,该网站上的链接已失效,但可以找到数据(以及 Sean McLoone 和同事采用的方法的来源 here(参见 SCM 链接)。似乎是一个起点。

最佳答案

这是一个带有 mahotas 的实现

from pylab import imshow
import numpy as np
import mahotas
wally = mahotas.imread('DepartmentStore.jpg')

wfloat = wally.astype(float)
r,g,b = wfloat.transpose((2,0,1))

分成红色、绿色和蓝色 channel 。下面最好使用浮点运算,所以我们在顶部进行转换。

w = wfloat.mean(2)

w 是白色 channel 。

pattern = np.ones((24,16), float)
for i in xrange(2):
pattern[i::4] = -1

在垂直轴上构建 +1,+1,-1,-1 的模式。这是沃利的衬衫。

v = mahotas.convolve(r-w, pattern)

用红色减去白色进行卷积。这将在衬衫所在的位置给出强烈的响应。

mask = (v == v.max())
mask = mahotas.dilate(mask, np.ones((48,24)))

寻找最大值并将其放大以使其可见。现在,我们调低整个图像,除了区域或兴趣:

wally -= .8*wally * ~mask[:,:,None]
imshow(wally)

我们得到 waldo !

关于python - 如何使用 Python 找到 Wally?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8849869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com