Procrustes分析/找到由两组2d点表示的两个图像之间的角度

时间:2011-02-24 03:52:42

标签: algorithm image math image-processing image-manipulation

如果我有2组点,我可以用Procrustes analysis旋转一个点,使其与另一组对齐。

但是假设这两组点都附加到图像上,我也想旋转图像。有什么方法我可以旋转图像,而不是只旋转点?该教程使用点积进行轮换(求解u, s, v = svd(p1', p2)然后做p2 . v . u',p'换位p)

然而,这并没有告诉我图像之间的角度是什么。

The page on wikipedia计算我认为的每对点之间的角度。

也许我问的是不可能的?如果我旋转第一组点以使其与第一组对齐,我是否也可以将相应的图像旋转一个角度?重点是,哪个角度是?

我注意到v . u'给了我一个2 x 2的矩阵,这似乎是一个旋转矩阵(有一个维基百科页面,但由于发布了特权,我无法链接到那里)。我得到了第三个和第一个元素的罪和cos然后使用arctan2,但我得到的结果有点奇怪。我知道他们必须从弧度转变,但我不相信我所做的是对的。尝试旋转它让我看起来像gimp使它看起来不是我想要的,但我会测试更多。

1 个答案:

答案 0 :(得分:1)

看起来你的方法大多是正确的。想到两件事:

1)您链接到的文章(Procrustes分析)除旋转外还涉及平移和缩放。根据这些操作是否也对您的图像执行,您可能会得到看似不匹配的奇怪结果。

2)我认为你的角度计算可能过于复杂。 v * u'似乎是正确的旋转矩阵,但我相信正确的角度只需要2x2矩阵中的一个矩阵条目。例如,只需使用第一个矩阵条目的acos()。正如你已经注意到的,这将(根据程序)给你一个弧度的答案,如果你想在gimp等尝试旋转,你必须转换为度。

希望这有帮助!