Matlab 查找一个图像相对于另一个图像的旋转

Matlab 查找一个图像相对于另一个图像的旋转,matlab,matlab-cvst,Matlab,Matlab Cvst,我有两张照片。一个是参考图像,另一个是参考图像的旋转版本。我想知道第二个图像相对于第一个图像旋转的角度是多少。我想自动完成这项工作。暴力!编写一个函数来比较旋转图像的交点(每个点之间的差值之和或差值平方之和),然后迭代旋转角度以找到与最小差值对应的一个 虽然知道matlab,可能有一个函数只是告诉你旋转,但它被称为奇怪的东西。注意:因为这个问题最初并没有要求自动解决,所以我发布了这个解决方案,它要求用户为每个图像选择一组控制点。虽然问题中的要求已经更新,但我认为这个答案对于任何想在MATLAB中

我有两张照片。一个是参考图像,另一个是参考图像的旋转版本。我想知道第二个图像相对于第一个图像旋转的角度是多少。我想自动完成这项工作。

暴力!编写一个函数来比较旋转图像的交点(每个点之间的差值之和或差值平方之和),然后迭代旋转角度以找到与最小差值对应的一个


虽然知道matlab,可能有一个函数只是告诉你旋转,但它被称为奇怪的东西。

注意:因为这个问题最初并没有要求自动解决,所以我发布了这个解决方案,它要求用户为每个图像选择一组控制点。虽然问题中的要求已经更新,但我认为这个答案对于任何想在MATLAB中进行图像注册的人来说仍然很有用,所以我把它留在这里

非自动化方法:

您所询问的是,并且您有一个选项是使用来自的函数


事实上,该函数的文档中有一个函数,它似乎解决了您试图解决的相同问题。

执行此操作的一般方法是:

  • 使用算法,例如获取兴趣点描述符列表。这些描述符提供感兴趣点的比例、方向和几何结构。几何体信息是缩放和旋转不变的

  • 通过比较几何图形,使用最近邻算法匹配每个图片中的兴趣点

  • 对于每对匹配的兴趣点,比较它们的比例和旋转

理想情况下,所有匹配的兴趣点将具有相同的相对比例和旋转。然而,照片拍摄方式的变化和前几个阶段的不准确会导致不同的比例和旋转,因此:

  • 使用算法(如)确定最佳拟合比例和旋转
QED

以下是代码


该算法利用了两个物体是圆的先验知识。YMMV

以下是如何使用计算机视觉系统工具箱中的局部特征和RANSAC恢复两幅图像之间的转换的示例。

步骤1:找到或设计适当的数学算法。第二步:在Matlab中编写算法代码。如果您在步骤1中需要帮助,我建议您咨询math.stackexchange.com;这是一个相当困难的问题。如果你在第2步,你的算法是什么?@aschepler:这实际上是一个在过去几年中已经解决的问题。迭代所有可能的
值,介于
-pi
pi
之间?不。但是这个辅助函数对于最小化解算器可能很有用……嗯,是的,这取决于你想要多少有效数字。我认为它值得尽可能简单。如果你知道图像中旋转发生的位置,这是可行的。@chie我认为这不是你在原始问题中提到的限制。你能编辑它来反映你所有的需求吗?我不是说他不需要机器就可以做到。我是说他没有提到他没有手动点击点。如果他手动点击了@gnovice的点,那么他的答案是最简单的,并且会得到最好的结果。这也是一个困难程度的问题,聪明的大学生完全可以解决。如果他没有手动点击点(想要一个全自动的解决方案),这是一个研究级的问题。@Joe:你可以在这里找到SIFT:和RANSAC:,当然都是Matlab的,它们都是Windows、Mac和,Linux和其他Unices@Joe:可能也是。nathan我只想知道其他方法。比如,如果我从一个图像中有四个点,而从另一个图像中有四个点,那么在这种情况下,除了这种Ransac方法外,如何找到两个点之间的旋转。@chee:Ransac在你有几十个点的情况下很好。如果只有4个点,唯一的变化是旋转,则可以找到连接图像A中一对点的线和连接图像B中相应点的线,并比较坡度。如果你真的想确定的话,对你所有的图像对重复这一点,并使用平均值。文件交换帖子的基础是拍摄两张相似的图像,并将它们在x、y和θ上对齐。这正是OP想要做的。