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

Mat*_*291 11 matrix homography emgucv

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

请(尽可能简化)有人可以解释每个元素的作用.我在网上看了这个,但找不到我能理解的答案(正如我所说,我对这一切都是新手!)

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

我从研究中得知(例如OpenCV Homography,转换点,这段代码在做什么?):10Tx,01Ty,XXX

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

phi*_*ler 17

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

/a\
\b/,
Run Code Online (Sandbox Code Playgroud)

并且您希望通过以下方式旋转坐标系A:

/3 4\
\5 6/
Run Code Online (Sandbox Code Playgroud)

和"移动它" t

/2\
\2/.
Run Code Online (Sandbox Code Playgroud)

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

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

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

    /3 4 2\         /a\
B = |5 6 2| ,  x' = |b|
    \0 0 1/         \1/
Run Code Online (Sandbox Code Playgroud)

这样的

     /a'\
y' = |b'| = B*x'
     \ 1/ 
Run Code Online (Sandbox Code Playgroud)

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

y_r = A*x = <3a+4b; 5a+6b>T
Run Code Online (Sandbox Code Playgroud)

然后你添加"绝对"部分:

y = y_r + t = <3a+4b+2; 5a+6b+2>T
Run Code Online (Sandbox Code Playgroud)

现在看看它是如何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
Run Code Online (Sandbox Code Playgroud)

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

在第三行,ab被丢弃(乘0).最后一部分保持不变,恰好是1.所以,关于最后一行的所有内容都是"删除"点的值并保持1.


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

    /-1 0 0\
C = | 0 1 0|
    \ 0 0 1/
Run Code Online (Sandbox Code Playgroud)

并有结果

y'' = C*B*x' = <-3a+4b+2; 5a+6b+2; 1>T
Run Code Online (Sandbox Code Playgroud)

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

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

最后,在这种情况下,维基百科对我来说似乎很有用.

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