【问题标题】:Procrustes analysis / Finding the Angle Between two images represented by two sets of 2d pointsProcrustes 分析/寻找由两组 2d 点表示的两个图像之间的角度
【发布时间】:2011-07-03 06:41:30
【问题描述】:

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

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

但这并不能告诉我图像之间的角度是多少。

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    希望这会有所帮助!

    【讨论】:

    • 我认为 atan2/arctan2 更好,因为它告诉我正确象限的角度。
    • 没关系,但我的意思是,你不要取第一个和第三个元素的 cos 或 sin,然后使用 atan。如果您想要正确的象限,请取 Q(2,1) / Q(1,1) 的 atan2,其中 Q 是旋转矩阵,括号中的数字分别表示行和列。直接取矩阵值即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多