Подсчет объекта по алгоритму изображения - PullRequest
5 голосов
/ 27 декабря 2011

Я снова получил школьное задание.На этот раз мой учитель дал мне задание создать алгоритм для подсчета количества уток на картинке.

Изображение похоже на это:

Я думаю,Я должен использовать распознавание образов для поиска, сколько уток на нем.Но я не знаю, какой шаблон соответствует каждой утке.

Ответы [ 3 ]

6 голосов
/ 27 декабря 2011

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

Чтобы сегментировать клювы уток, сначала преобразуйте изображение в цветовое пространство HSV , а затем выполните бинаризацию с использованием компонента оттенка. Обратите внимание, что оттенок клювов уток отличается от других частей изображения.

2 голосов
/ 28 декабря 2011

Вот один из способов:

Преобразование Хафа для кругов:

  • Инициализация массива аккумуляторов с индексом (x, y, радиус)
  • Для каждого пикселя:
    • вычисляет границу (например, оператор Собеля будет предоставлять как величину, так и направление), если величина превышает некоторый порог, то:
      • увеличивает каждый аккумулятор, для которого этот край может предоставить свидетельство (только (x, y) в направлении края, только радиусы между min_duck_radius и max_duck_radius)
  • Теперь сглаживание и порог массива аккумуляторов, и координаты старших аккумуляторов показываютты где головы.Пороговое значение может выпасть у вас, если вы гистограммируете значения в аккумуляторах (может быть четкое различие между «большим количеством доказательств» и «шумом»).

Так что это очень кратко, но этомогу начать.

2 голосов
/ 27 декабря 2011

Это может быть только потому, что я сейчас работаю с SIFT, но мне кажется, что это может помочь вашей проблеме.

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

Я бы предложил найти хорошее четкое изображение резиновой уточки (: D), а затем использовать некоторую реализацию SIFT ( Библиотека VLFeat - C с SIFT, но без визуализации , SIFT ++ - на основе VLFeat, но в C ++ , Роб Хесс в C с OpenCV ...).

Следует помнить, что сопоставление с SIFT (и всем остальным) не является идеальным - поэтому вы можете не получить точное количество резиновых уточек на рисунке.

...