Подскажите алгоритм для сравнения изображений (поворот)
Простой вариант:
Выделить связную область, посчитать ее характеристики (моменты, элонгацию, см. тут). По инвариантам классифицировать фигуру и определить угол поворота.
Тяжелая артиллерия:
http://en.wikipedia.org/wiki/Scale-invariant_feature_transfo...
Выделить связную область, посчитать ее характеристики (моменты, элонгацию, см. тут). По инвариантам классифицировать фигуру и определить угол поворота.
Тяжелая артиллерия:
http://en.wikipedia.org/wiki/Scale-invariant_feature_transfo...
Поддерживаю елрика. Для определения смещения вообще достаточно только центра масс. Для поворота эти признаки могут плохо сработать. Можно посчитать что-то типа "билинейной" регрессии. Т.е. если бы у тебя была палка, её можно было бы приблизить прямой и найти характеристики прямой минимизируя среднеквадратичное отклонение. В твоём случае можно подгонять две перпендикулярных прямых, но центр у тебя уже известен, так что найти надо только угол.
Всем спасибо!
для поворота можно использовать нормализованные гистограммы направлений градиентов.
для всех пикселей по границе объекта вычисляешь направление градиента (если граница нестабильна - делай downscale изображения строишь гистограмму углов направлений градиентов, нормализуешь по количеству пикселей. полученную гистограмму сглаживаешь, чтобы уменьшить влияние шума.
Теперь у тебя есть две гистограммы. Одной из них делаешь циклический сдвиг, считаешь скалярное произведение гистограмм. при каком сдвиге произведение получится наибольшим - то и есть угол поворота.
для всех пикселей по границе объекта вычисляешь направление градиента (если граница нестабильна - делай downscale изображения строишь гистограмму углов направлений градиентов, нормализуешь по количеству пикселей. полученную гистограмму сглаживаешь, чтобы уменьшить влияние шума.
Теперь у тебя есть две гистограммы. Одной из них делаешь циклический сдвиг, считаешь скалярное произведение гистограмм. при каком сдвиге произведение получится наибольшим - то и есть угол поворота.
Если все картинки такие, можно просто найти угловые точки (8 штук а уже по ним и центр, и угол считаются просто.
Сначала так и хотел поступить, но "зубцы" контура получаются разные. Похоже, что мой выбор-расчет характеристик связной области.
Я бы погуглил на тему optical flow и affine transformation
Оставить комментарий
VitOlya2008
Есть два похожих изображения такого вида:(фрагмент изображения)
На втором есть такая же фигура, но с небольшим смещением и поворотом.
Есть ли какой-то простой способ определить расстояние смещения и угол, на который она повернута? Допустим, я загрузил координаты черных пикселов в двумерный массив, и хочу его обработать.