найти поворот одного изображения относительно другого - PullRequest
3 голосов
/ 21 декабря 2010

У меня 2 изображения.Одним из них является эталонным изображением, а другая повернутой версия эталонного изображения.Я хотел бы узнать, на какой угол поворачивается 2-е изображение относительно 1-го. Я хочу сделать это автоматически.

Ответы [ 5 ]

4 голосов
/ 21 декабря 2010

Общий метод для этого:

  • Используйте алгоритм, такой как SIFT , чтобы получить список дескрипторов точек интереса. Эти дескрипторы предоставляют масштаб, направление и геометрию точек интереса. Информация о геометрии не зависит от масштаба и вращения.

  • Используйте алгоритм ближайшего соседа для сопоставления точек интереса на каждом из изображений путем сравнения геометрий.

  • для каждой пары совпадающих точек интереса, сравните их масштаб и вращение.

В идеале все совпадающие точки интереса должны иметь одинаковый относительный масштаб и вращение. Однако изменчивость в том, как были сделаны снимки, и неточность на предыдущих этапах привнесут переменные масштабы и повороты, поэтому:

  • используйте алгоритм, такой как RANSAC , чтобы определить наиболее подходящую шкалу и вращение.

QED

4 голосов
/ 21 декабря 2010

Грубая сила это!Напишите функцию для сравнения пересечений повернутых изображений (сумма разности или сумма квадратов разности между каждой точкой), а затем выполните итерацию по углам поворота, чтобы найти угол, соответствующий минимальной разнице.зная matlab, вероятно, есть функция, которая просто сообщает вам вращение, но она называется чем-то странным.

2 голосов
/ 21 декабря 2010

ПРИМЕЧАНИЕ: Поскольку вопрос изначально не задавался для автоматизированного решения, я опубликовал это решение, которое требует, чтобы пользователь выбирал набор контрольных точек для каждого изображения,Хотя требования в вопросе были обновлены, я думаю, что этот ответ может быть полезен для всех, кто хочет зарегистрироваться в MATLAB, поэтому я оставляю его здесь ...

Неавтоматизированный подход:

То, о чем вы спрашиваете, известно как регистрация изображения , и у вас есть один вариант - использовать функцию CP2TFORM из Image Processing Toolbox .

На самом деле, в документации к этой функции есть очень хороший пример , который, похоже, решает ту же самую проблему, которую вы пытаетесь решить.

0 голосов
/ 14 ноября 2013

Вот пример того, как восстановить преобразование между двумя изображениями с использованием локальных функций и RANSAC из панели инструментов системы Computer Vision.

0 голосов
/ 22 декабря 2010

Вот код.

http://www.mathworks.com/matlabcentral/fileexchange/1713-three-dimensional-reconstruction-from-planar-slices

Этот алгоритм использует apriori знание того, что два объекта округлены.YMMV

...