我有一组20个已知的坐标点{x,y},它们被提交到一个未知中心和角度的刚性旋转(和小的平移)。
结果我知道每个20点目的地{x',?},其中y'坐标未知。
使用Matlab时,有一些方法可以在初始体及其变换都已知时计算刚性变换。
我正在考虑对夫妻{Theta,Xc,Zc}进行测试,直到结果足够令人满意(参数的范围相对较小),但这将是资源密集型的。
如果你能指出一个更优雅的现有解决方案,或者即使我的方法可行,我将感激不尽。
答案 0 :(得分:1)
你有仿射变换
P * [A] = P'
对于你的情况,仿射矩阵包含四个未知值 - Cos(Fi),Sin(Fi)(它们不是真正独立的),XTerm和YTerm,其中
XTerm = RotCenterX * (1 - Cos(Fi)) + RotCenterY * Sin(Fi) + ShiftX
您可以构建方程组
XTerm + X(i) * Cos(Fi) - Y[i] * Sin(Fi) = X'(i)
并使用SVD方法解决未知数Cos(Fi), Sin(Fi), XTerm
或者只选择非退化的方程子集并通过任何方法(高斯等)来解决它
请注意,解决方案可能不存在(退化情况)
修改强>
然后,您可以在Cos(Fi)
等式中替换Sin(Fi)
和XTerm
,但无法从单个等式中得到三个未知数(RotCenterX, RotCenterY, ShiftX
)(只需估算它们) 。并且无法从给定数据中获取ShiftY
。