如何用y'确定角度和旋转中心。坐标未知

时间:2017-04-24 08:35:35

标签: algorithm matlab image-processing imagej

我有一组20个已知的坐标点{x,y},它们被提交到一个未知中心和角度的刚性旋转(和小的平移)。

结果我知道每个20点目的地{x',?},其中y'坐标未知。

使用Matlab时,有一些方法可以在初始体及其变换都已知时计算刚性变换。

我正在考虑对夫妻{Theta,Xc,Zc}进行测试,直到结果足够令人满意(参数的范围相对较小),但这将是资源密集型的。

如果你能指出一个更优雅的现有解决方案,或者即使我的方法可行,我将感激不尽。

1 个答案:

答案 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