Вот реализация с 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))
Разделить на красный, зеленый и синий каналы. Лучше использовать арифметику с плавающей точкой ниже, поэтому мы конвертируем сверху.
w = wfloat.mean(2)
w
- это белый канал.
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)
И мы получаем !