Я нашел контуры на двух изображениях с одним и тем же объектом и хочу найти смещение и вращение этого объекта. Я пробовал вращать ограничивающие рамки этих контуров, а затем их углы и центральные точки, но повороты ограничивающих рамок не дают правильного представления о вращении контура, потому что это одинаково для углов a + 0, a + 90, a + 180 и т. Д. градусов. Есть ли другой хороший способ найти вращение и смещение контуров? Может быть, какое-то использование выпуклой оболочки, дефектов выпуклости? Я читал в Изучении OpenCv о соответствующих контурах, но это не помогло. Может ли кто-нибудь привести пример?
Примеры:
Я хочу обнаружить, например, розовый квадрат, а во втором случае ручку. Другими примерами могут быть квадраты с дырками, звездами и т. Д. Как я уже сказал, я хочу сделать нечто универсальное. Любые предложения приветствуются, потому что я хочу протестировать как можно больше методов.
Ответы:
Вам нужно беспокоиться о разнице в масштабе между контурами? Если нет, то вы можете просто найти центр тяжести каждого контура и вычислить смещение, вычтя одно из другого. Затем вы можете рассчитать главные оси контуров и найти угол поворота между ними.
Если используется масштабирование, то вы можете рассчитать масштабный коэффициент, взяв соотношение соответствующих главных осей.
источник
Если вам не нужно беспокоиться о масштабах или проективных искажениях, здесь могут помочь цепочки кодов. Если у вас есть цепочечные коды примерно одинаковой формы с одинаковым масштабом, вы можете найти перевод с одномерной фазовой корреляцией БПФ http://en.wikipedia.org/wiki/Phase_correlation
Если вам необходимо учесть проективное искажение, вы также можете рассмотреть возможность использования характерных точек (например, углов) вместо контуров.
источник
В вопросе вы говорите
но, боюсь, довольно сложно найти «универсальное» решение проблемы.
Вы можете купить имеющееся в продаже программное обеспечение для поиска шаблонов и интегрировать его в свое приложение, как правило, оно работает достаточно хорошо для широкого спектра приложений. Просто чтобы дать вам представление, это справочное руководство для такого продукта http://www.lmi3d.com/sites/default/files/support/4.2.0.70-hexsight_user_guide.pdf
Кроме того, вы можете разработать специальное решение для определенного случая (например, для ручки на вашем изображении).
В противном случае вы можете усердно изучить проблему, начиная с самых базовых основ, основанных на вычислительной геометрии ( http://www.cs.sunysb.edu/~algorith/files/shape-s Similarity.shtml ), где называются ваши «контуры» "многоугольник", читая такие вещи, как:
М. де Берг, О. Девиллерс, М. Кревельд, О. Шварцкопф и М. Тейло. Вычисление максимального перекрытия двух выпуклых многоугольников при переводах. Теоретическая информатика, 31: 613–628, 1998.
и
Х. Ан, О. Чеонг, К. Парк, С. Шин и А. Вигнерон. Максимизация перекрытия двух плоских выпуклых множеств при жестких движениях. Вычислительная геометрия: теория и приложения, 37: 3–15, 2007.
и заканчивая «Иерархическим распознаванием составных объектов в изображениях в реальном времени» Маркуса Ульриха, который сотрудничает с MVTec , еще одной компанией, продающей инструменты для распознавания объектов.
источник