12

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

请(尽可能简化)有人可以解释每个元素的作用。我在网上查过了,但找不到我能正确理解的答案(正如我所说,我对这一切有点陌生!)

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

我从研究中知道(例如OpenCV Homography,Transform a point,这段代码在做什么?):10Tx,01Ty,XXX

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

4

2 回答 2

17

如果您掌握了矩阵乘法,这并不难理解。假设你的观点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--it 保持不变。第二行也一样。

在第三行中,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 矩阵那么容易地完成,仅仅是因为矩阵乘法的特性。

原则上,在上面,最后一行(the XXX)也可以是任何其他形式的<0;0;x>。它只是为了降低点值。然而,必须完全像这样才能通过乘法进行合成。

最后,在这种情况下,维基百科对我来说似乎提供了很多信息。

于 2012-08-22T13:45:42.540 回答
1

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

单应性描述了跨两个平面的映射或在纯相机旋转期间发生的情况。

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

于 2013-02-12T00:11:28.990 回答