Рассчитать гомографию только с переводом, вращением и масштабированием в Opencv
У меня есть два набора точек, и я хочу найти лучшее преобразование между ними. В OpenCV у вас есть следующая функция:
Mat H = Calib3d.findHomography(src_points, dest_points);
который возвращает вам матрицу гомографии 3x3, используя RANSAC. Моя проблема сейчас в том, что мне нужен только перевод и ротация (и, возможно, масштаб), мне не нужны аффинность и перспектива.
Дело в том, что мои очки только в 2D.
(1) Есть ли функция для вычисления чего-то вроде гомографии, но с меньшей степенью свободы?
(2) Если их нет, возможно ли извлечь матрицу 3x3, которая выполняет только перемещение и поворот из матрицы гомографии 3x3?
Заранее благодарю за любую помощь!
Это
2 ответа
Функция OpenCV valuRigidTransform - это именно то, что вам нужно: она возвращает перевод, вращение и масштаб (используйте значение false для флага fullAffine). И он использует RANSAC (см. Исходный код, чтобы быть уверенным в этом).
Гомография предназначена для двумерных точек, третье измерение предназначено только для приведения точек в 3 одинаковых однородных координатах и выполнения эффектов перспективы. Вы всегда можете отбрасывать очки назад:
однородный [x, y, w] декартовой [x/w, y/w]
Однако, поскольку вы вычисляете 6DOF вместо 4DOF (сходство), ваш результат довольно сильно отличается от того, что вы ожидаете от 4DOF. Более гибкое преобразование будет соответствовать большему количеству точек в RANSAC за счет искажений в преобразованиях, которые вас интересуют. Итог - не пытайтесь разложить H, вместо этого подберите сходство или изометрию (также называемую жесткой или евклидовой). Причина, по которой они отсутствуют в библиотеке - они выражены в замкнутой форме даже с правильной метрикой наименьшего квадрата в точечных координатах и, следовательно, не требуют нелинейной оптимизации. Другими словами, они очень просты.
Если у вас есть только ротация и перевод, я написал быстрые функции для их поиска (хотя RANSAC нет). Это, вероятно, похоже на жесткое преобразование, но более понятно (надеюсь) /questions/38065447/est-li-prostoj-sposob-algoritm-dlya-sopostavleniya-2-oblakov-2d-tochek/38065459#38065459
С масштабом все еще есть решение в закрытой форме, но немного другие формулы для перевода и масштабирования. См. Изучение параметров подобия, стр. 25