5 Вопрос: Как мне найти Уолдо с Mathematica?

вопрос создан в Thu, Aug 28, 2014 12:00 AM

Это меня беспокоило на выходных. Какой хороший способ решить эти Где находится Уолдо? [ «Уолли» за пределами Северной Америки], используя 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"]

(Уолдо у кассы):

Mathematica graphic

    
1535
  1. @ yoda - вверху слева, стол с множеством туфель, кассовый аппарат и Уолдо в углу стола.
    2011-12-12 18: 43: 30Z
  2. Предложение mathematica было закрыто по разным причинам, однако они позволяют нам увидеть, можем ли мы его запустить и запустить, создав новый . Мы бы хотели, чтобы вы помогли.
    2011-12-17 14: 56: 34Z
  3. Как аспирант в области компьютерного зрения, я так искушаю попробовать это, но я должен сопротивляться. Что бы это ни стоило, я бы выбрал гистограмму ориентированных градиентов + скользящее окно SVM, как в эта очень влиятельная работа (предупреждение: pdf).
    2011-12-19 03: 48: 25Z
  4. "Где Wally ." &GT;. &Л;
    2011-12-19 10: 05: 52Z
  5. @ ArnoudBuzing: В вашем вопросе вы можете найти Уолдо, посмотрев на выделение, в котором больше всего белого. : /
    2012-03-22 13: 17: 06Z
5 ответов                              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];

Я использую Binarize, чтобы выделить пиксели на изображении с достаточно высокой корреляцией и нарисовать белый круг вокруг них, чтобы подчеркнуть их, используя Dilation

pos = Dilation[ColorNegate[Binarize[corr, .12]], DiskMatrix[30]];

Мне пришлось немного поиграться с уровнем. Если уровень слишком высок, выявляется слишком много ложных срабатываний.

Наконец, я комбинирую этот результат с исходным изображением, чтобы получить результат выше

found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]
    
1634
2011-12-12 19: 32: 11Z
  1. @ MikeBantegui Несмотря на то, что решение Heike отличное, я бы не стал так быстро упаковывать его в функцию WhereIsWaldo, поскольку это не общее решение. Сама Хайке указала, что нужно пройти уровни, чтобы получить позитив. Чтобы понять, что я имею в виду, попробуйте использовать упакованные функции, как на "http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/AtTheBeach.jpg". С этим сложнее.
    2011-12-12 19: 57: 57Z
  2. Это изображение сложнее: Уолдо . Я думаю, что, имея что-то, чтоЯ могу выделить потенциальные возможности, которые Waldos по-прежнему полезен (для некоторого определения «полезный».) (Это напоминает мне о некоторых вещах, которые iPhoto иногда идентифицирует как лицо в нашей коллекции фотографий ...)
    2011-12-12 20: 21: 19Z
  3. Пожалуйста, ознакомьтесь с этой мета-публикацией: meta.stackexchange.com/questions/116401/…
    2011-12-18 15: 06: 27Z
  4. Похоже, вы неправильно поняли правила Где Уолдо. Это явно измена.
    2011-12-19 00: 37: 59Z
  5. Хотя это хороший хак, он просто не работает. Требует ручной настройки и работает только на одном изображении. Я не понимаю, почему за это проголосовали и даже выбрали в качестве ответа. Это отговаривает кого-либо еще от попыток ответить с лучшими методами работы.
    2011-12-19 16: 18: 44Z

Я думаю о «пуленепробиваемом способе сделать это» (подумайте, что ЦРУ находит Уолдо на любом спутниковом снимке в любое время, а не на одном изображении без конкурирующих элементов, таких как полосатые рубашки) ... Я бы тренировал Машина Больцмана на многих изображениях Уолдо - все его вариации сидя, стоя, окклюдированные и т. д .; рубашка, шапка, фотоаппарат и все дела. Вам не нужен большой корпус Вальдоса (возможно, 3-5 будет достаточно), но чем больше, тем лучше.

Это назначит облака вероятностей различным элементам, встречающимся в любом правильном расположении, и затем установит (посредством сегментации), каков средний размер объекта, фрагментирует исходное изображение в ячейки объектов, которые больше всего напоминают отдельных людей (учитывая возможные окклюзии) и представлять изменения), но поскольку картины Уолдо обычно содержат ОДНО людей примерно в одном и том же масштабе, это должно быть очень простой задачей, а затем прокормить эти сегменты предварительно обученной машины Больцмана. Это даст вам вероятность того, что каждый из них будет Уолдо. Возьмите один с наибольшей вероятностью.

Именно так сегодня работают OCR, устройства для считывания почтовых индексов и распознавания рукописного текста. По сути, вы знаете, что ответ есть, вы более или менее знаете, как он должен выглядеть, и все остальное может иметь общие элементы, но определенно «не это», так что вы не беспокоитесь о «не это», вы просто посмотрите на вероятность «это» среди всех возможных «это вы уже видели» (например, в ZIP-кодах вы тренируете BM всего 1 с, всего 2 с, только 3 с и т. д., затем кормите каждого введите цифру для каждой машины и выберите ту, которая наиболее надежна. Это работает намного лучше, чем функции обучения всех нейронных сетей всех чисел.

    
142
2015-03-09 21: 23: 40Z
  1. Разве для этого не достаточно простых нейронных сетей? Кроме того, статья в Википедии утверждает, что машины Больцмана не практичны.
    2011-12-19 14: 44: 35Z
  2. Не пытаясь, я не уверен, но если достаточно большой и достаточно сложной нейронной сети должно быть достаточно для НИЧЕГО. Особенно с рекуррентами. Машины Больцмана работают ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ хорошо для распознавания довольно упрощенного набора данных с большим количеством шума в море данных в отличие от себя.
    2011-12-20 05: 00: 03Z
  3. Почтовые коды постоянно читаются на машинах Больцмана, и точность доставки почты достигла предела.
    2011-12-20 05: 00: 17Z

Я согласен с @GregoryKlopper, что правильный способ решитьОбщая проблема поиска Уолдо (или любого объекта интереса) в произвольном изображении состояла бы в обучении контролируемого классификатора машинного обучения. Используя множество положительных и отрицательных примеров, алгоритм, такой как Машина поддержки векторов , Boosted Decision Stump или Boltzmann Machine, вероятно, могут быть обучены для достижения высокой точности по этой проблеме. Mathematica даже включает эти алгоритмы в свою среду машинного обучения .

Две проблемы с обучением классификатора Уолдо будут:

  1. Определение правильного преобразования изображения. Вот где ответ @ Heike был бы полезен: красный фильтр и детектор полосатой структуры (например, вейвлет или декомпозиция DCT) были бы хорошим способом превратить необработанные пиксели в формат, из которого мог бы извлечь алгоритм классификации. Также потребуется блочная декомпозиция, которая оценивает все подразделы изображения ... но это облегчается тем фактом, что Уолдо а) всегда примерно одинакового размера и б) всегда присутствует ровно один раз в каждом изображении.
  2. Получение достаточного количества обучающих примеров. SVM лучше всего работают не менее чем с 100 примерами каждого класса. Коммерческие приложения повышения (например, фокусировка лица в цифровых камерах) обучаются на миллионах положительных и отрицательных примеров.

Быстрый поиск картинок Google выявляет некоторые хорошие данные - я собираюсь попробовать собрать некоторое обучение примеры и кодирование это прямо сейчас!

Однако даже подход к машинному обучению (или подход на основе правил, предложенный @iND) будет бороться за изображение, подобное Земля Вальдос !

    
46
2012-04-01 01: 23: 58Z
  1. Основанная на машинном обучении система компьютерного зрения, которая пытается решить проблему «Где Уолдо» в реальном мире (то есть, найти конкретного человека на фотографиях толпы на Flickr) был представлен на конференции Computer Vision и Pattern Recognition в прошлом году. Они немного обманывают, добавляя некоторую информацию о 3D-местоположении, используя несколько фотографий одной и той же сцены.
    2012-04-01 01: 24: 44Z
  2. 2012-04-01 01: 43: 53Z
  3. Upvote. Я тоже думал вейвлет, когда читал это.
    2012-11-10 23: 44: 17Z

Я не знаю Mathematica. , , очень плохо. Но мне нравится ответ выше, по большей части.

Тем не менее, есть большой недостаток в использовании одних полос для получения ответа (лично у меня нет проблем с ручной настройкой one ). Существует пример (приведенный Бреттом Чемпионом, здесь ), представленный что показывает, что они порой ломают рубашку. Так что это становится более сложной моделью.

Я бы попробовал подход идентификатора формы и цвета, а также пространственные отношения. Подобно распознаванию лиц, вы можете искать геометрические узоры в определенных соотношениях друг от друга. Предостережение заключается в том, что обычно одна или несколько из этих форм закрыты.

Получите баланс белого на изображении, а красный - на красном. Я считаю, что Уолдо всегда имеет одно и то же значение /оттенок, но изображение может быть отсканированным или плохой копии. Затем всегда обращайтесь к массиву цветов, которыми на самом деле является Уолдо: красный, белый, темно-коричневый, синий, персиковый, {цвет обуви}.

Есть рисунок рубашки, а также брюки, очки, волосы, лицо, обувь и шляпа, которыеЭфина Уолдо. Кроме того, по отношению к другим людям в изображении, Уолдо на худой стороне.

Итак, найдите случайных людей, чтобы получить рост людей на этой картинке. Измерьте среднюю высоту группы вещей в случайных точках на изображении (простой контур даст довольно много отдельных людей). Если каждая вещь не находится в пределах стандартного отклонения друг от друга, они пока игнорируются. Сравните средние высоты с высотой изображения. Если соотношение слишком велико (например, 1: 2, 1: 4 или аналогично близко), попробуйте еще раз. Запустите его 10 (?) Раз, чтобы убедиться, что все сэмплы довольно близки друг к другу, исключая любое среднее значение, выходящее за пределы стандартного отклонения. Возможно в Mathematica?

Это ваш размер Уолдо. Уолсо тощий, поэтому вы ищете что-то 5: 1 или 6: 1 (или что-то еще) ht: wd. Однако этого недостаточно. Если Уолдо частично скрыт, высота может измениться. Итак, вы ищете блок красно-белого цвета, который ~ 2: 1. Но должно быть больше показателей.

  1. У Уолдо есть очки. Найдите два кружка 0,5: 1 над красно-белым.
  2. Синие штаны. Любое количество синего на той же ширине в пределах любого расстояния между концом красно-белого и расстоянием до его ног. Обратите внимание, что он носит короткую рубашку, поэтому ноги не слишком близко.
  3. Шляпа. Красно-белый на любом расстоянии до макушки головы. Обратите внимание, что у него должны быть темные волосы внизу и, вероятно, очки.
  4. Длинные рукава. красно-белый под некоторым углом от основного красно-белого.
  5. Темные волосы.
  6. Цвет обуви. Я не знаю цвет.

Может подойти любой из них. Это также негативные проверки против похожих людей на картинке - например, № 2 запрещает носить красно-белый фартук (слишком близко к обуви), № 5 устраняет светлые волосы. Кроме того, форма является только одним показателем для каждого из этих испытаний. , , один только цвет в пределах указанного расстояния может дать хорошие результаты.

Это сузит области для обработки.

Хранение этих результатов приведет к набору областей, в которых должен содержать Waldo. Исключите все остальные области (например, для каждой области выберите круг, в два раза превышающий средний размер человека), а затем запустите процесс, который выложил @Heike, удалив все, кроме красного, и так далее.

Есть мысли о том, как это закодировать?

Edit:

Мысли о том, как это кодировать. , , исключите все области, кроме красного Уолдо, скелетируйте красные области и обрежьте их до одной точки. Сделайте то же самое для волос Waldo коричневого цвета, брюк Waldo синего цвета, цвета обуви Waldo. Для цвета кожи Уолдо исключите, затем найдите контур.

Затем исключите не красные, расширьте (много) все красные области, затем скелетируйте и обрежьте. Эта часть даст список возможных точек центра Уолдо. Это будет маркер для сравнения всех других цветовых срезов Уолдо.

Отсюда, используя скелетонизированные красные области (не расширенные), подсчитайте линии в каждой области. Если есть правильное число (четыре, верно?), Это, безусловно, возможная область. Если нет, то, я думаю, просто исключаю это (как центр Уолдо ... это все еще может быть его шляпа).

Затем проверьте, есть ли форма лица сверху, точка волос выше, брюки ниже, ботинки внизу и т. д.

Нет кода - все еще читаете документы.

    
40
2012-01-11 00: 22: 12Z
  1. Возможно, вы сможете показать подтверждение концепции в любой системе /языке, с которыми вы знакомы. Это также даст вам представление о возможных трудностях.
    2012-01-11 08: 55: 43Z
  2. О, я просто наслаждаюсь вызовом в его нынешнем виде. Это дает мне занятие между прогулками по пляжу и переодеванием к ужину.
    2012-01-11 18: 09: 10Z
  3. Итак. , , почему отрицательные? Чем это отличается от другого спекулятивного ответа здесь? Это предположение, что к этому вопросу следует относиться более серьезно? Или просто, что я должен казаться более серьезным в моем расследовании? Мой подход на самом деле неправильный?
    2012-01-12 05: 54: 52Z
  4. Я не отрицал вас и не думаю, что отрицательные голоса подходят для честных попыток ответить (если они не дают дезинформации). Наиболее вероятной причиной отрицательных голосов является то, что вы, похоже, не испытали (qЭто довольно сложное звучание), и нахождение хорошего решения, вероятно, потребовало бы большого количества практических экспериментов и исключения многих идей. В другом умозрительном ответе предлагается общий метод (в качестве отправной точки), который использовался в прошлом для решения аналогичных проблем, и о нем имеется достаточно литературы. Просто пытаюсь объяснить, что случилось.
    2012-01-12 10: 49: 33Z
  5. Спасибо за объяснение. Я думаю, что я не фокусируюсь на истории идей.
    2012-01-12 18: 15: 09Z

У меня есть быстрое решение для поиска Уолдо с помощью OpenCV.

Я использовал функцию сопоставления с шаблоном , доступную в OpenCV, чтобы найти Уолдо.

Для этого нужен шаблон. Поэтому я обрезал Уолдо из исходного изображения и использовал его в качестве шаблона.

 введите описание изображения здесь

Затем я вызвал функцию cv2.matchTemplate() вместе с нормализованным коэффициентом корреляции в качестве используемого метода. Он возвратил высокую вероятность в одной области, как показано белым цветом ниже (где-то в верхней левой области):

 введите описание изображения здесь

Положение самой высокой вероятной области было найдено с помощью функции cv2.minMaxLoc(), которую я затем использовал, чтобы нарисовать прямоугольник, чтобы выделить Уолдо:

 введите описание изображения здесь

    
2
2018-04-21 21: 12: 37Z
  1. Пытаетесь решить самые известные вопросы SO по обработке изображений? ;) Ваше решение приятно и просто, но a /работает только для этого конкретного изображения и b /нуждается в точном изображении Уолдо, которое вы хотите найти заранее, в то время как я думаю, что вопрос был в том, чтобы найти любого Уолдо в любом "образе Уолдо", например Вы бы играли в обычную игру: не зная, как он выглядит заранее. В любом случае, этот вопрос очень веселый
    2017-04-11 11: 16: 30Z
  2. @ Солитус точно! Я работал только для этого изображения в частности. Работать с разными изображениями было бы непросто!
    2017-04-11 11: 24: 49Z
источник размещен Вот
Другие вопросы