Беззастенчиво прыгает на подножку :-)
Вдохновленный « Как мне найти Уолдо с помощью Mathematica» и последующей статьей « Как найти Уолдо с помощью R» , я, как новый пользователь Python, хотел бы увидеть, как это можно сделать. Кажется, что для этого лучше подходит python, чем R, и нам не нужно беспокоиться о лицензиях, как в случае с Mathematica или Matlab.
В примере, подобном приведенному ниже, очевидно, что простое использование полос не сработает. Было бы интересно, если бы простой подход, основанный на правилах, мог бы работать для таких сложных примеров, как этот.
Я добавил тег [машинное обучение], так как считаю, что для правильного ответа необходимо использовать методы машинного обучения, такие как подход с ограниченными машинами Больцмана (RBM), предложенный Грегори Клоппером в исходном потоке. В python доступен некоторый код RBM, который может быть хорошим местом для начала, но, очевидно, для этого подхода необходимы данные обучения.
На международном семинаре IEEE 2009 г. по машинному обучению для обработки сигналов (MLSP 2009) они провели конкурс анализа данных: Где Уолли? . Данные обучения предоставляются в формате Matlab. Обратите внимание, что ссылки на этом веб-сайте мертвы, но данные (вместе с источником подхода, принятого Шоном Маклоуном и его коллегами, можно найти здесь (см. Ссылку на SCM). Похоже, с чего можно начать.
Ответы:
Вот реализация с махотами
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 на вертикальной оси. Это рубашка Уолли.
Сверните красный минус белый. Это даст сильный отклик там, где находится рубашка.
mask = (v == v.max()) mask = mahotas.dilate(mask, np.ones((48,24)))
Найдите максимальное значение и увеличьте его, чтобы было видно. Теперь мы смягчаем все изображение, кроме области или интереса:
wally -= .8*wally * ~mask[:,:,None] imshow(wally)
И получаем !
источник
Вы можете попробовать сопоставление шаблонов, а затем выбрать тот, который дает наибольшее сходство, а затем использовать машинное обучение, чтобы сузить его. Это также очень сложно, и с точностью сопоставления с шаблоном он может просто вернуть каждое лицо или изображение, похожее на лицо. Я думаю, вам понадобится нечто большее, чем просто машинное обучение, если вы надеетесь делать это постоянно.
источник
возможно, вам стоит начать с разбивки проблемы на две более мелкие:
это все еще две очень большие проблемы, которые нужно решить ...
Кстати, я бы выбрал c ++ и открыл CV, кажется, он для этого больше подходит.
источник
Это не невозможно, но очень сложно, потому что у вас действительно нет примера успешного матча. Часто существует несколько состояний (в данном случае - больше примеров рисунков поиска кошельков), затем вы можете передать несколько изображений в программу реконструкции изображений и рассматривать их как скрытую марковскую модель и использовать что-то вроде алгоритма Витерби для вывода ( http: / /en.wikipedia.org/wiki/Viterbi_algorithm ).
Я бы подошел именно так, но если у вас есть несколько изображений, вы можете дать ему примеры правильного ответа, чтобы он мог учиться. Если у вас есть только одна фотография, извините, может быть, вам нужен другой подход.
источник
Я понял, что есть две основные особенности, которые почти всегда видны:
Поэтому я бы сделал это следующим образом:
поиск полосатых рубашек:
Если имеется более одной «рубашки», скажем, более одного кластера положительной корреляции, поищите другие особенности, такие как темно-каштановые волосы:
поиск каштановых волос
источник
Вот решение с использованием нейронных сетей, которое отлично работает.
Нейронная сеть обучается на нескольких решенных примерах, которые отмечены ограничивающими рамками, указывающими, где на картинке появляется Уолли. Цель сети - минимизировать ошибку между предсказанным блоком и фактическим блоком из данных обучения / проверки.
В приведенной выше сети используется API обнаружения объектов Tensorflow для обучения и прогнозирования.
источник