从Affine2D变换矩阵计算旋转中心
我有两张二维图像,第二张图经过平移和旋转,导致第一张图中的坐标 (xn, yn) 移动到了 (xn', yn')。
我能很容易地从下面描述的变换矩阵中得到旋转角度、平移和缩放因子。不过,旋转的中心并不在图像的中心,而且离图像的位置相当远。
我可能在尝试描述这个问题时做得不好,但它看起来像附上的图片:
我正在尝试从通过 cv2.estimateAffinePartial2D
得到的变换矩阵中找出旋转中心,变换矩阵如下所示↓
s*cos(theta), -s*sin(theta), Tx
s*sin(theta), s*cos(theta), Ty
其中 s
是缩放因子,theta
是旋转角度,Tx
和 Ty
分别是 x 轴和 y 轴的平移。
我尝试通过下面的方程来计算旋转中心↓
Tx = (1-a)*Cx - b*Cy
Ty = b*Cx + (1-a)*Cy
其中 Cx
和 Cy
是旋转中心,...
a = s*cos(theta)
b = s*sin(theta)
但我不确定这样做是否正确。
我这样做是错的吗?
这是从我上面给出的变换矩阵计算旋转中心的方程。
补充说明: (xn, yn) 和 (xn', yn') 是已知的坐标集,这些都是小蓝色矩形内的随机点,不一定是中心。我为缺乏解释感到抱歉。它们像是 [[x1,y1],[x2,y2]...[xn,yn]],以及类似的点,这些点经过平移和旋转变成了 [[x1',y1'],[x2',y2']...[xn',yn']]。
2 个回答
0
我假设你已经知道了点 (xn, yn) 和 (xn', yn') 的位置。
通过重复使用你的变量名,你要找的正确公式是:
xn' = a.xn + b.yn + (1-a)Cx -b.Cy + Tx
yn' = -b.xn + a.yn + b.Cx + (1-a)Cy + Ty
正如你提到的,其他所有参数也都是已知的,你只需要一个点(可以是任意一个,只要你确定这两个图像上的点是同一个)来计算 Cx
和 Cy
:
Cx = (xn' - a.xn - b.yn + b.Cy - Tx)/(1-a)
Cy = (yn' + b.xn - a.yn - b.Cx - Ty)/(1-a)
这应该足够用来计算 Cx
和 Cy
。
希望这对你有帮助!