单应矩阵中的元素是什么意思?

时间:2012-08-22 09:44:55

标签: matrix emgucv homography

我是图像处理的新手,但我正在使用EMGU进行C#图像分析。但是,我知道单应矩阵并不是EMGU独有的,因此也许有其他语言知识的人可以更好地解释。

请(尽可能简化)有人可以解释每个元素的作用。我在网上看了这个,但找不到我能理解的答案(就像我说的那样,我对这一切都不熟悉!)

我分析了2个图像,都是2维。因此,需要3×3矩阵来解释图像的旋转/平移。如果未检测到移动,则单应矩阵为: 100, 010, 001

我从研究中得知(例如OpenCV Homography, Transform a point, what is this code doing?): 10TX, 01Ty, XXX

10,01位是x和y坐标的旋转。 Tx和Ty位是平移运动,但XXX位是什么?这是我不明白的?它与仿射变换有关吗?请有人解释一下: 如果我现在对我上面所说的是对的。 2. XXX位意味着什么

2 个答案:

答案 0 :(得分:15)

如果你掌握了矩阵乘法,那就不难理解了。假设你指出x

/a\
\b/,

并且您希望按A

旋转坐标系
/3 4\
\5 6/

并通过t

“移动”它
/2\
\2/.

后面的矩阵是仿射变换的组成部分,以获得新的点y

y = A*x + t = <a'; b'>T //(T means transposed).

如您所知,为此,可以构建一个3d矩阵B和一个向量x',看起来像

    /3 4 2\         /a\
B = |5 6 2| ,  x' = |b|
    \0 0 1/         \1/

这样

     /a'\
y' = |b'| = B*x'
     \ 1/ 

您可以从中提取y。让我们看看它是如何工作的。在原始变换中(使用加法),第一步是进行乘法,即。旋转部分y_r

y_r = A*x = <3a+4b; 5a+6b>T

然后你添加“绝对”部分:

y = y_r + t = <3a+4b+2; 5a+6b+2>T

现在看看B的工作原理。我会逐行计算y'

1) a' = 3*a + 4*b + 2*1

2) b' = 5*a + 6*b + 2*1

3) the rest: 0*a + 0*b + 1*1 = 1

正是我们的期望。首先,计算旋转部分 - 加法和乘法。然后,添加平移部分的x部分,乘以1 - 它保持不变。第二行也是一样。

在第三行中,ab被删除(乘以0)。最后一部分保持不变,恰好是1。因此,关于最后一行的所有内容都是“删除”该点的值并保留1


那么可以说,2x3矩阵就足够了。这部分是正确的,但有一个明显的缺点:你松散的可组合性。假设您对B基本满意,但想要镜像一个坐标。然后你可以选择另一个转换矩阵

    /-1 0 0\
C = | 0 1 0|
    \ 0 0 1/

并有结果

y'' = C*B*x' = <-3a+4b+2; 5a+6b+2; 1>T

由于矩阵乘法的特性,这种简单的乘法不能轻易地用2x3矩阵完成。

原则上,在上面,最后一行(XXX)也可以是<0;0;x>形式的任何其他内容。只是为了降低点值。然而,通过乘法工作来制作合成是非常必要的。

最后,在这种情况下,wikipedia对我来说似乎非常有用。

(@任何人:可能会注意到,我不是数学家。我想我理解这个概念,但是如果有错误或缺少某些东西,请告诉我。)

答案 1 :(得分:1)

首先,仿射变换是那些保留直线并可以保留许多任意维度的变换

Homography描述了两个平面之间的映射或纯相机旋转期间发生的情况。

最后一行代表各种剪切(即当x是x,y的函数时)