2011-02-24 72 views
1

如果我有2組點,我可以使用Procrustes analysis來旋轉一個點,以便相互對齊。Procrustes分析/尋找由兩組2d點表示的兩個圖像之間的角度

但假設這兩組點分別附加到圖像上,我想旋轉圖像。有什麼辦法我也可以旋轉圖像,而不是隻旋轉點?那裏的教程使用點積旋轉(解決u, s, v = svd(p1', p2),然後做p2 . v . u',p'轉置p)

但是,這並不能告訴我圖像之間的角度是什麼。

The page on wikipedia計算我認爲的每對點之間的角度。

也許我問的是不可能的?如果我旋轉第一組點以將其與第一組對齊,那麼我是否也可以通過一個角度旋轉各自的圖像?點是,哪個角度是?

我注意到,v . u'給了我一個2 x 2矩陣似乎是旋轉矩陣(有一個維基百科頁面,但我不能鏈接那裏,因爲張貼priviledges)。我得到了第三個和第一個元素的罪和cos,然後使用了arctan2,但是我得到的結果有些奇怪。我知道他們必須從弧度轉變,但我不相信我在做什麼是對的。嘗試旋轉讓我在gimp上使它看起來不是我想要的,但我會再測試一些。

回答

1

看來你的方法大多是正確的。想到兩件事:

1)鏈接到(Procrustes分析)的論文除了旋轉之外,還涉及到平移和縮放。根據這些操作是否也在您的圖像上執行,最終可能會出現看起來不匹配的奇怪結果。

2)我認爲你可能會過度複雜你的角度計算。 v * u'似乎是正確的旋轉矩陣,但我相信正確的角度只需要2x2矩陣中的一個矩陣條目。例如,只需使用第一個矩陣條目的acos()。正如你已經注意到的,這將(根據程序)給你一個弧度的答案,如果你想試試gimp中的旋轉,你將不得不轉換成度。

+0

我認爲atan2/arctan2更好,因爲它告訴我與正確象限的角度。 – 2011-02-24 06:11:14

+0

這很好,但我的觀點是你不會考慮第一個和第三個元素的cos或sin,然後使用atan。如果你想得到正確的象限,取Q(2,1)/ Q(1,1)的atan2,其中Q是旋轉矩陣,括號內的數字分別表示行和列。直接取矩陣值即可。 – aardvarkk 2011-02-24 15:35:30

+0

如果他們幫助你,請將答案標記爲有用。 – aardvarkk 2011-02-24 15:39:06