【问题标题】:How to find Pivot Point from a 2x3 Matrix from a Euclidean Transformation in OpenCV如何从 OpenCV 中的欧几里得变换的 2x3 矩阵中找到枢轴点
【发布时间】:2016-09-01 23:49:18
【问题描述】:

我有两张图片:

使用cv2.findTransformECC (im1,im2,warp_matrix, warp_mode, criteria) 我得到这个变换矩阵:

[[   0.70637488    0.70783788  -86.60842133]
 [  -0.70783788    0.70637488  137.01171875]]

如何使用该矩阵找到图像旋转的点?

这是矩阵所代表的:

我知道我可以使用 X、Y 平移的斜边以及旋转角度来计算等腰三角形。但是如何使用该等腰三角形(红色)来找到平移中心的 X 和 Y(绿色)?三角函数是找到支点的唯一方法吗?

【问题讨论】:

  • 旋转(以及整个变换)的原点是定义输入图像原点的位置,图像中 (0,0) 的位置:[x' y']^T := W * [x y 1]^Tdocs.opencv.org/3.0-beta/modules/video/doc/…跨度>
  • @BeyelerStudios - 感谢您的评论。我不确定我明白你在说什么。我正在寻找翻译所围绕的点。例如,在图中,有两个黑色方块(假设它们是 10x10)。其中一个黑色方块以 5x 5y 作为轴心点旋转 45 度。 Opencv 给了我平移(绿色)和角度,我如何找到那个枢轴点?
  • 不,它是围绕(0, 0) 旋转然后翻译的。
  • @BeyelerStudios - 我明白这一点,我会尝试更好地解释我在寻找什么。这幅画是我创建的,我将黑色正方形旋转 45 度,以 5x 5y 作为轴心点。我想要做的是比较两个图像,然后像我在绘图中所做的那样找到中心,使用 openCV 给出的矩阵
  • 是的,但是您的枢轴是完全任意的,与转换无关。您的意思是您想知道图像中表示的实际对象的纯旋转(不包括平移分量)?

标签: opencv math


【解决方案1】:

所以你有一个变换矩阵

/ a b  tx \
\ c d  ty /

并且您想将其转换为围绕某个枢轴旋转的表示。围绕枢轴(px, py) 的旋转可以表示为

T = T(p) R T(-p)

如果你扩展它,你会得到

/ a b  tx \  =      / a b  px-apx-bpy \
\ c d  ty /         \ c d  py-cpx-dpy /

如果选择相同的旋转,第一个 2x2 矩阵已经相等。最后一列为您提供了一个线性方程组。这个的一般解决方案是(不考虑特殊情况):

px = (tx - d tx + b ty) / (a + b c + d - a d - 1)
py = (ty + c tx - a ty) / (a + b c + d - a d - 1)

对于您的矩阵,这给出:

px = 121.842
py = 172.899

【讨论】:

  • 非常感谢!这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2014-11-18
  • 1970-01-01
  • 2018-05-11
  • 2013-10-21
  • 2016-08-02
  • 2017-01-05
相关资源
最近更新 更多