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