Подскажите алгоритм для сравнения изображений (поворот)

VitOlya2008

Есть два похожих изображения такого вида:

(фрагмент изображения)
На втором есть такая же фигура, но с небольшим смещением и поворотом.
Есть ли какой-то простой способ определить расстояние смещения и угол, на который она повернута? Допустим, я загрузил координаты черных пикселов в двумерный массив, и хочу его обработать.

tima56

Простой вариант:
Выделить связную область, посчитать ее характеристики (моменты, элонгацию, см. тут). По инвариантам классифицировать фигуру и определить угол поворота.
Тяжелая артиллерия:
http://en.wikipedia.org/wiki/Scale-invariant_feature_transfo...

Serpent555

Поддерживаю елрика. Для определения смещения вообще достаточно только центра масс. Для поворота эти признаки могут плохо сработать. Можно посчитать что-то типа "билинейной" регрессии. Т.е. если бы у тебя была палка, её можно было бы приблизить прямой и найти характеристики прямой минимизируя среднеквадратичное отклонение. В твоём случае можно подгонять две перпендикулярных прямых, но центр у тебя уже известен, так что найти надо только угол.

VitOlya2008

Всем спасибо!

5777

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

durka82

Если все картинки такие, можно просто найти угловые точки (8 штук а уже по ним и центр, и угол считаются просто.

VitOlya2008

Сначала так и хотел поступить, но "зубцы" контура получаются разные. Похоже, что мой выбор-расчет характеристик связной области.

kiracher

Я бы погуглил на тему optical flow и affine transformation
Оставить комментарий
Имя или ник:
Комментарий: