MATLAB计算旋转角度

时间:2012-06-21 06:41:03

标签: matlab transform mathematical-optimization least-squares numerical-analysis

我在一个圆圈上有5分:.......... 1
   ................................... ......... 2 ..... ...... 3

                      4     5

现在我有旋转的图像:.............

............................................... .............. 1。 ....... 3

                           2          5

                             4        

注意:这些点没有编号。

我基本上有5组坐标,当绘制时看起来像下面的图像。

我需要计算我必须倾斜图像的数量,以使其看起来像上面的图像

3 个答案:

答案 0 :(得分:1)

如果您有点坐标,可以尝试通过定义适当的误差函数来最小化误差,这取决于角度和偏移。

如果您的变换中也有缩放,则此问题可通过线性最小二乘法解决。在这种情况下,Matlab中的解决方案很简单:

让x,y为原始点,xt,y为结果点。

   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)和sin(theta)具有相同的theta,所以解决方案是近似的。它可以作为初始解决方案,并通过梯度下降法进行改进。

答案 1 :(得分:1)

如果您可以访问Statistics Toolbox,我认为procrustes命令可能会执行您所需的操作。给定两组点,它找到一个点的最佳(就平方误差的总和而言)线性变换(平移,反射,正交旋转和缩放),以使它们符合另一个点中的点。

您可以使用命令的可选输入来抑制缩放和反射分量。如果在应用命令之前将两个集合转换为公共原点,则还可以抑制平移组件,并保留一个旋转。

答案 2 :(得分:0)

如果我理解你的问题,那就是绝对定位问题。您可以找到几种解决方案(例如使用四元数的Horn解决方案)。可以找到类似的问题here