从仿射二维变换矩阵计算旋转中心

问题描述 投票:0回答:1

希望您度过美好的一天。

我有两个 2D 图像,其中第二个图像经过平移和旋转,导致第一张图片中的坐标 (xn, yn) 移动到 (xn', yn')。 我可以毫无问题地从下面描述的平移矩阵中获取旋转角度、平移和缩放因子。 然而旋转中心并不在图像的中心,并且距离图像位置相当远。 我可能在尝试绘制问题时做得很糟糕,但它看起来像所附的图片。 The attached picture

我试图从

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)

但我不确定这是否正确。

我做错了吗?

根据上面给出的变换矩阵计算旋转中心的方程。 或一条建议。

python opencv image-rotation affinetransform transformation-matrix
1个回答
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。
希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.