希望您度过美好的一天。
我有两个 2D 图像,其中第二个图像经过平移和旋转,导致第一张图片中的坐标 (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') 是已知的。
通过重复使用变量名称,您正在寻找的正确方程是:
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。
希望这有帮助!