Как обнаружить похожие объекты на этой картинке?

Я хочу найти закономерности в изображении. Говоря «находить паттерны», я имею в виду «обнаруживать похожие объекты», поэтому эти паттерны не должны быть какой-то высокочастотной информацией, такой как шум. Например, на этом изображении я хотел бы получить шаблон «окно» с ROI/эллипсом каждого объекта: введите здесь описание изображения

Я читал советы по использованию автокорреляции, FFT, DCT для этой проблемы. Насколько я понял, автокорреляция и БПФ альтернативны, а не дополняют друг друга.

Во-первых, я не знаю, возможно ли получить такую ​​высокоуровневую информацию в частотной области?

Поскольку у меня реализовано БПФ, я попытался его использовать. Это спектрограмма: введите здесь описание изображения

  1. Не подскажете, как дальше анализировать эту спектрограмму для обнаружения объектов "окна" с их пространственным расположением?
  2. Нужно ли искать самые яркие точки/линии на спектрограмме?
  3. Следует ли выполнять БПФ для фрагментов изображения, а не для всего изображения?
  4. Если при таком подходе невозможно найти такие объекты, что бы вы посоветовали?

Заранее спасибо. P.S. Извините за большой размер изображения.


person Olha    schedule 27.06.2018    source источник
comment
ДПФ (то, что вычисляет алгоритм БПФ) сообщит вам частоту, с которой повторяются шаблоны, но его нелегко использовать для определения местоположения этих шаблонов. Автокорреляция — это просто умножение ДПФ на его собственное сопряженное, а затем обратное преобразование. Опять же, он покажет вам шаблон повторений, но не будет выделять какие-либо повторяющиеся объекты. DCT ничего не добавляет к этому миксу.   -  person Cris Luengo    schedule 27.06.2018
comment
@CrisLuengo сообщит вам частоту повторения паттернов - можно ли извлечь найденную частоту и как будет выглядеть результирующее изображение (обратное преобразование только этой частоты)?   -  person Olha    schedule 27.06.2018
comment
Обратное преобразование одной частоты будет выглядеть как синусоида. Вы можете использовать эту частоту, чтобы узнать, в каком направлении происходит повторение и каков размер повторяющегося прямоугольника. Таким образом, вы можете вырезать коробку такого размера и повторить ее в этом направлении. Но это поле не будет точно одним окном, скорее всего, оно покажет части двух соседних окон.   -  person Cris Luengo    schedule 27.06.2018
comment
@CrisLuengo Спасибо, звучит очень полезно! Не могли бы вы уточнить, как получить размер/размеры коробки?   -  person Olha    schedule 27.06.2018
comment
Из автокорреляции найдите пик около начала координат (но не пик в начале координат). Его расстояние и направление от начала координат дает направление и продолжительность повторения. Но вы обнаружите, что, поскольку структура изображения меняется (направления для трех столбцов окон различны, а расстояния уменьшаются кверху, где они находятся дальше от камеры), здесь вы получаете среднее значение. . Вы также увидите, что пик автокорреляционной функции довольно широкий, что доказывает это. Извините, я не могу быть более полезным!   -  person Cris Luengo    schedule 28.06.2018
comment
@Spektre Спасибо! У меня есть несколько вопросов: 1) Допустим, SIFT нашел 100 ключевых точек, а на самом деле есть 15 похожих объектов (групп), каждая из которых содержит 5 точек (но RANSAC не знает, какая группа содержит какие точки). Что такое кросс-совпадение (и O(n)) в этом случае? 2) Можно ли заменить SIFT преобразованием Хафа (это будут просто ключевые точки, без ориентации и масштаба)?   -  person Olha    schedule 28.06.2018
comment
@Spektre Большое спасибо! Полагаю, я понял вашу идею с совпадениями ключевых точек. Если я это сделаю, RANSAC может и не понадобиться.   -  person Olha    schedule 28.06.2018
comment
@Spektre Да, ответ будет более читабельным. :) Но все равно спасибо!   -  person Olha    schedule 28.06.2018
comment
@Olia_Pavliuk Я добавил ответ и удалил устаревшие комментарии...   -  person Spektre    schedule 28.06.2018


Ответы (1)


Остерегайтесь, это не моя чашка чая, поэтому читайте с крайним предубеждением. IIRC для такой задачи обычно используются методы SIFT/SURF + RANSAC.

  1. Определите ключевые точки изображения SIFT/SURF

    Это даст вам список 2D-местоположений на вашем изображении с определенными функциями (которые вы можете обрабатывать как целочисленный хэш-код). Я думаю, что SIFT (преобразование масштабно-инвариантных функций) идеально подходит для этого. Они работают так же, как работает наше человеческое зрение (определяют конкретное изменение какой-либо функции и «игнорируют» остальную часть изображения). Таким образом, вместо того, чтобы сопоставлять все пиксели изображения, мы сопоставляем только некоторые из них.

  2. сортировать по вхождению

    каждая из найденных точек SIFT имеет некоторый список признаков. если мы сделаем гистограмму этих признаков (подсчитаем, сколько есть похожих или идентичных точек признаков), то мы можем сгруппировать точки с одинаковым появлением. Идея состоит в том, что если мы получили n размещения объекта на изображении, то каждая его ключевая точка должна быть продублирована n раза на финальном изображении.

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

  3. найти места размещения объектов

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

    Таким образом, задача состоит в том, чтобы перегруппировать наши ключевые точки в каждый объект, чтобы все объекты имели одинаковые ключевые точки и одинаковые относительные свойства.

    Это можно сделать методом грубой силы (проверив всю комбинацию и проверив свойства), с помощью RANSAC или любого другого метода.

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

    изображение

    поэтому угол такой же, и |p1-p0| / |p2-p0| тоже такой же или близкий. При группировании помните, что ключевые точки внутри объектов, скорее всего, расположены ближе друг к другу... поэтому мы можем увеличить наш поиск по расстоянию от первой выбранной ключевой точки.... чтобы решить, к какому объекту ключ точка, вероятно, принадлежит (если попробовать их первыми, мы получили высокую вероятность того, что быстро нашли нашу комбинацию). Все остальные точки pi можем добавить аналогично по одной (используя p0,p1,pi)

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

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

person Spektre    schedule 28.06.2018