1

I have 5 points on a circle:..........1
................................... ......... 2 ...... . 3

                      4     5

Now I have its rotated image: .............

.............................................................1. .......3

                           2          5

                             4        

Note: the points aren't numbered.

I basically have 5 sets of coordinates, which when plotted look like the below image.

I need to calculate the amount by which i have to tilt the image so as to make it look like the above image

4

3 回答 3

1

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

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

设 x,y 为您的原始点,xt,yt 为结果点。

   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,因此解决方案是近似的。它可以作为初始解并通过梯度下降法进行细化。

于 2012-06-21T07:20:39.730 回答
1

如果您有权访问 Statistics Toolbox,我认为该procrustes命令可能会满足您的需求。给定两组点,它会找到一组点的最佳(就误差平方和而言)线性变换(平移、反射、正交旋转和缩放),以使它们与另一组中的点保持一致。

您可以使用命令的可选输入来抑制缩放和反射分量。如果在应用命令之前将这两个集合平移到一个共同的原点,您还将抑制平移组件,并且只剩下一个旋转。

于 2012-06-21T12:35:18.730 回答
0

如果我正确理解了您的问题,这就是绝对方向问题。您可以找到几个解决方案(例如Horn 使用四元数的解决方案)。可以在此处找到类似的问题。

于 2012-06-21T08:28:02.053 回答