1

У меня есть 5 точек по кругу: .......... 1
..................... .............. ......... 2 ....... 3MATLAB вычислить угол поворота

     4  5 

Теперь у меня есть свое повернутое изображение: .............

.................. ........................................... 1. ....... 3

      2   5 

          4   

Примечание: точки не пронумерованы.

У меня в основном есть 5 наборов координат, которые при построении выглядят следующим образом.

Мне нужно вычислить сумму, на которую я должен наклонить изображение таким образом, чтобы сделать его похожим на картинку

+0

@Andrey: Он вращается только. и я не знаю координат (xt, yt). Я просто знаю, что координаты при повороте должны выглядеть так, как показано выше. – user1471216

+0

В этом случае вы должны начать с поиска координат некоторых точек входа и выхода. –

+0

Являются ли ваши данные * image * или набором * точек *? –

ответ

1

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

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

Пусть x, y будут вашими исходными точками и xt, yt точками результата.

tform = cp2tform([x,y],[xt,yt],'linear conformal'); 

Это преобразование может быть применен на изображении с помощью imtransform


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

(x1 y1 1 0)      (x1t) 
    (-y1 x1 0 1)      (y1t) 
    (x2 y2 1 0)      (x2t) 
    (-y2 x2 0 1) * (cos(theta))  (y1t) 
      ...   (sin(theta)) = 
      ...   ( xc  ) 
      ...   ( yc  ) 

    (xn yn 1 0) 
    (-yn xn 0 1)      (ynt) 

Очевидно, что вы не можете заставить Cos (Theta) и грех (тета), чтобы иметь такую ​​же тета, поэтому решение является приближенным. Он может служить в качестве исходного решения и уточняться методом градиентного спуска.

0

Если я правильно понял ваш вопрос, это проблема абсолютной ориентации . Вы можете найти несколько решений для него (, например Решение Хорна с использованием кватернионов). Аналогичный вопрос можно найти here.

1

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

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

Смежные вопросы