我在一个圆圈上有5分:.......... 1
................................... ......... 2 ..... ...... 3
4 5
现在我有旋转的图像:.............
............................................... .............. 1。 ....... 3
2 5
4
注意:这些点没有编号。
我基本上有5组坐标,当绘制时看起来像下面的图像。
我需要计算我必须倾斜图像的数量,以使其看起来像上面的图像
答案 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。