计算机视觉教程1-2:单应性矩阵估计

简介: 计算机视觉教程1-2:单应性矩阵估计

目录

1 导论

计算机视觉系列教程1-1:透视空间与透视变换中提到,透视空间所有变换都是投影变换的特例,本节进一步研究投影变换矩阵(单应性矩阵)的估计。


透视变换的核心是单应性矩阵 H H H或单应性向量 h h h。

H = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] ⇔ h = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] T H=\left[

h11h21h31h12h22h32h13h23h33

h11h12h13h21h22h23h31h32h33

\right] \Leftrightarrow h=\left[

h11h12h13h21h22h23h31h32h33

h11h12h13h21h22h23h31h32h33

\right] ^T

H=


 

h

11


h

21


h

31



 

h

12


h

22


h

32



 

h

13


h

23


h

33



 


⇔h=[

h

11



 

h

12



 

h

13



 

h

21



 

h

22



 

h

23



 

h

31



 

h

32



 

h

33



]

T


设 p s r c = [ x y 1 ] T p_{src}=\left[

xy1

xy1

\right] ^T p

src


=[

x


 

y


 

1


]

T

与 p d s t = [ x ′ y ′ 1 ] T p_{dst}=\left[

x′y′1

x′y′1

\right] ^T p

dst


=[

x


 

y


 

1


]

T

是二维透视空间 P 2 \mathbb{P}^2 P

2

中,一次透视变换前后的对应点,因此其满足

p d s t = H p s r c ⟺ [ x ′ y ′ 1 ] = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] [ x y 1 ] p_{dst}=Hp_{src}\Longleftrightarrow \left[

x′y′1

x′y′1

\right] =\left[

h11h21h31h12h22h32h13h23h33

h11h12h13h21h22h23h31h32h33

\right] \left[

xy1

xy1

\right]

p

dst


=Hp

src



 

x

y

1


 


=


 

h

11


h

21


h

31



 

h

12


h

22


h

32



 

h

13


h

23


h

33



 


 


 

x

y

1


 



若将单应性矩阵进行尺度缩放后作用于 p s r c p_{src} p

src


,则

k H p s r c = k [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] [ x y 1 ] = k p d s t kHp_{src}=k\left[

h11h21h31h12h22h32h13h23h33

h11h12h13h21h22h23h31h32h33

\right] \left[

xy1

xy1

\right] =kp_{dst}

kHp

src


=k


 

h

11


h

21


h

31



 

h

12


h

22


h

32



 

h

13


h

23


h

33



 


 


 

x

y

1


 


=kp

dst



而透视空间中, k p d s t kp_{dst} kp

dst


与 p d s t p_{dst} p

dst


实际上对应同一点,因此 k H kH kH与 H H H相当于同一次透视变换,故单应性矩阵 H H H仅有8个自由度,通常通过设置 h 33 = 1 h_{33}=1 h

33


=1或 ∥ h ∥ 2 2 = 1 \lVert h \rVert _{2}^{2}=1 ∥h∥

2

2


=1来约束冗余的参数。


下面详细阐述单应性矩阵估计方法。

2 基本直接线性变换(Basic DLT)

将上式改写为齐次形式


[ 0 0 0 − x − y − 1 y ′ x y ′ y y ′ x y 1 0 0 0 − x ′ x − x ′ y − x ′ − y ′ x − y ′ y − y ′ x ′ x x ′ y x ′ 0 0 0 ] [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] = [ 0 0 0 ] \left[

0x−y′x0y−y′y01−y′−x0x′x−y0x′y−10x′y′x−x′x0y′y−x′y0y′−x′0

000−x−y−1y′xy′yy′xy1000−x′x−x′y−x′−y′x−y′y−y′x′xx′yx′000

\right] \left[

h11h12h13h21h22h23h31h32h33

h11h12h13h21h22h23h31h32h33

\right] =\left[

000

000

\right]


 

0

x

−y

x


 

0

y

−y

y


 

0

1

−y


 

−x

0

x

x


 

−y

0

x

y


 

−1

0

x


 

y

x

−x

x

0


 

y

y

−x

y

0


 

y

−x

0


 


 


 

h

11


h

12


h

13


h

21


h

22


h

23


h

31


h

32


h

33



 


=


 

0

0

0


 



其中系数矩阵的秩为2,因此一对变换点仅能确定2个自由度。因此需要无三点共线的四对变换点才能确定单应性矩阵 H H H。


[ 0 0 0 − x 1 − y 1 − 1 y 1 ′ x 1 y 1 ′ y 1 y 1 ′ x 1 y 1 1 0 0 0 − x 1 ′ x 1 − x 1 ′ y 1 − x 1 ′ 0 0 0 − x 2 − y 2 − 1 y 2 ′ x 2 y 2 ′ y 2 y 2 ′ x 2 y 2 1 0 0 0 − x 2 ′ x 2 − x 2 ′ y 2 − x 2 ′ ⋮ ] [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] = [ 0 0 0 ] ⇔ A h = 0 \left[

0x10x20y10y20101−x10−x20−y10−y20⋮−10−10y′1x1−x′1x1y′2x2−x′2x2y′1y1−x′1y1y′2y2−x′2y2y′1−x′1y′2−x′2

000−x1−y1−1y1′x1y1′y1y1′x1y11000−x1′x1−x1′y1−x1′000−x2−y2−1y2′x2y2′y2y2′x2y21000−x2′x2−x2′y2−x2′⋮

\right] \left[

h11h12h13h21h22h23h31h32h33

h11h12h13h21h22h23h31h32h33

\right] =\left[

000

000

\right] \Leftrightarrow {Ah=0}


 

0

x

1


0

x

2



 

0

y

1


0

y

2



 

0

1

0

1


 

−x

1


0

−x

2


0


 

−y

1


0

−y

2


0


 

−1

0

−1

0


 

y

1


x

1


−x

1


x

1


y

2


x

2


−x

2


x

2



 

y

1


y

1


−x

1


y

1


y

2


y

2


−x

2


y

2



 

y

1


−x

1


y

2


−x

2



 


 


 

h

11


h

12


h

13


h

21


h

22


h

23


h

31


h

32


h

33



 


=


 

0

0

0


 


⇔Ah=0


对于形如 A x = b Ax=b Ax=b的非齐次线性方程可以通过伪逆形式计算 x x x;对于形如 A x = 0 Ax=0 Ax=0的齐次线性方程的解则对应矩阵 A A A右奇异向量 v p v_p v

p


,其中 v p v_p v

p


对应的奇异值 σ p ≈ 0 \sigma _p\approx 0 σ

p


≈0或不对应奇异值。

3 归一化直接线性变换(Normalized DLT)

基本DLT估计算法的缺陷是:


(1) 单应性估计不具有相似不变性


假设在第一次估计下有 x d s t = H x s r c x_{dst}=Hx_{src} x

dst


=Hx

src


。现对两张图像分别进行相似变换并重新进行单应性估计,得到 ( T d s t x d s t ) = H ′ ( T s r c x s r c ) \left( T_{dst}x_{dst} \right) =H'\left( T_{src}x_{src} \right) (T

dst


x

dst


)=H

(T

src


x

src


),改写为 x d s t = ( T d s t − 1 H ′ T s r c ) x s r c x_{dst}=\left( T_{dst}^{-1}H'T_{src} \right) x_{src} x

dst


=(T

dst

−1


H

T

src


)x

src


,大部分情况下 H ≠ T d s t − 1 H ′ T s r c H\ne T_{dst}^{-1}H'T_{src} H


=T

dst

−1


H

T

src


,这表明基本DLT算法无法抵抗相似变换的干扰。


(2) 估计的单应性矩阵容易产生病态条件,鲁棒性差


由于默认透视空间的尺度变换因子 w = 1 w=1 w=1,所以齐次坐标下很可能产生分量幅度差异大的情况,例如某特征点 X = [ 100 101 1 ] T X=\left[

1001011

1001011

\right] ^T X=[

100


 

101


 

1


]

T

。在这种情况下估计出的单应性矩阵,各个元素数值数量级可能会相差 1 0 4 10^4 10

4

以上,导致病态条件——特征点的轻微变化都会造成单应性矩阵的剧变。


基于(1)(2)两种缺陷,需要将基本DLT算法进行优化,优化的核心就是特征点坐标的归一化。设原图像特征点集合为 ,目标图像特征点集合为 ,则具体的算法为:


① 将特征点集合 X s r c X_{src} X

src


、 X d s t X_{dst} X

dst


归一化


使用相似变换矩阵 T s r c T_{src} T

src


、 T d s t T_{dst} T

dst


将特征点集合中心移至原点,且与原点平均距离为 2 \sqrt{2}

2


。由于默认尺度因子为 w = 1 w=1 w=1,所以归一化到 2 \sqrt{2}

2


可以保持齐次坐标的三个分量有相同的幅度,例如 X = [ 100 100 1 ] T ⇒ X n o r m a l = [ 1 1 1 ] T X=\left[

1001001

1001001

\right] ^T\Rightarrow X^{normal}=\left[

111

111

\right] ^T X=[

100


 

100


 

1


]

T

⇒X

normal

=[

1


 

1


 

1


]

T


这里给出一种相似变换矩阵的计算方式,设


X n o r m a l = T X ⇔ [ x ~ i y ~ i 1 ] = [ s t x s t y 1 ] [ x i y i 1 ] X^{normal}=TX\Leftrightarrow \left[

x~iy~i1

x~iy~i1

\right] =\left[

sstxty1

stxsty1

\right] \left[

xiyi1

xiyi1

\right]

X

normal

=TX⇔


 

x

~

 

i


y

~


 

i


1


 


=


 

s


 

s


 

t

x


t

y


1


 


 


 

x

i


y

i


1


 




{ 1 N ∑ i = 1 N x ~ i = 1 N ∑ i = 1 N ( s x i + t x ) = 0 1 N ∑ i = 1 N y ~ i = 1 N ∑ i = 1 N ( s y i + t y ) = 0 1 N ∑ i = 1 N x ~ i 2 + y ~ i 2 = 2

⎧⎩⎨⎪⎪⎪⎪⎪⎪1N∑Ni=1x~i=1N∑Ni=1(sxi+tx)=01N∑Ni=1y~i=1N∑Ni=1(syi+ty)=01N∑Ni=1x~2i+y~2i−−−−−−√=2–√

{1N∑i=1Nx~i=1N∑i=1N(sxi+tx)=01N∑i=1Ny~i=1N∑i=1N(syi+ty)=01N∑i=1Nx~i2+y~i2=2


 

N

1


i=1

N


 

x

~

 

i


=

N

1


i=1

N


(sx

i


+t

x


)=0

N

1


i=1

N


 

y

~


 

i


=

N

1


i=1

N


(sy

i


+t

y


)=0

N

1


i=1

N


 

x

~

 

i

2


+

y

~


 

i

2



=

2




解得


{ t x = − s 1 N ∑ i = 1 N x i = − s x ˉ t y = − s 1 N ∑ i = 1 N y i = − s y ˉ s = 2 1 N ∑ i = 1 N x ~ i 2 + y ~ i 2 = 2 1 N ∑ i = 1 N ( x i − x ˉ ) 2 + ( y i − y ˉ ) 2

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪tx=−s1N∑Ni=1xi=−sx¯ty=−s1N∑Ni=1yi=−sy¯s=2√1N∑Ni=1x~2i+y~2i√=2√1N∑Ni=1(xi−x¯)2+(yi−y¯)2√

{tx=−s1N∑i=1Nxi=−sx¯ty=−s1N∑i=1Nyi=−sy¯s=21N∑i=1Nx~i2+y~i2=21N∑i=1N(xi−x¯)2+(yi−y¯)2


 

t

x


=−s

N

1


i=1

N


x

i


=−s

x

ˉ

t

y


=−s

N

1


i=1

N


y

i


=−s

y

ˉ


s=

N

1


i=1

N


 

x

~

 

i

2


+

y

~


 

i

2



2



=

N

1


i=1

N


 

(x

i


x

ˉ

)

2

+(y

i


y

ˉ


)

2


2





② 运用基本DLT算法由 与 估计单应性矩阵


③ 解归一化,映射回实际图像

4 鲁棒单应性估计(Robust Homography Estimation)

结合基本DLT算法、归一化DLT算法及计算机视觉系列教程6-2:图像匹配算法概述.的RANSAC算法进行单应性矩阵估计,具体流程如下:


(1) 设置迭代次数 K = ∞ K=\infty K=∞,内点集 S i n = ⊘ S_{in}=\oslash S

in


=⊘,模型参数 H = H 0 H=H_0 H=H

0


(2) 随机从样本数据集 S S S中选取4对特征点,并通过基本DLT算法确定测试模型 H t e s t H_{test} H

test


(3) 用 H t e s t H_{test} H

test


遍历样本数据集 S S S,估计误差 ε \varepsilon ε在距离阈值 t t t内的点加入内点集 S i n S_{in} S

in


。其中阈值 t = 5.99 σ t=\sqrt{5.99}\sigma t=

5.99


σ, σ \sigma σ为估计不确定度,估计误差 ε \varepsilon ε主要有两种度量方式:


① 代数误差 ε i = ∥ A i h t e s t ∥ \varepsilon _i=\left\| A_ih_{test} \right\| ε

i


=∥A

i


h

test


∥,其中


A i = [ 0 0 0 − x − y − 1 y ′ x y ′ y y ′ − y ′ x − y ′ y − y ′ x ′ x x ′ y x ′ 0 0 0 ] A_i=\left[

0−y′x0−y′y0−y′−xx′x−yx′y−1x′y′x0y′y0y′0

000−x−y−1y′xy′yy′−y′x−y′y−y′x′xx′yx′000

\right]

A

i


=[

0

−y

x


 

0

−y

y


 

0

−y


 

−x

x

x


 

−y

x

y


 

−1

x


 

y

x

0


 

y

y

0


 

y

0


]


② 几何误差(二次投影误差) ε i = ∥ H X s r c , i , X d s t , i ∥ 2 2 + ∥ X s r c , i , H − 1 X d s t , i ∥ 2 2 \varepsilon _i=\left\| HX_{src,i}, X_{dst, i} \right\| _{2}^{2}+\left\| X_{src,i}, H^{-1}X_{dst, i} \right\| _{2}^{2} ε

i


=∥HX

src,i


,X

dst,i


2

2


+


X

src,i


,H

−1

X

dst,i


 


 

2

2


,可以视作交叉检验。


(4) 若 S i n S_{in} S

in


的大小小于阈值 T T T,则放弃该模型,重复(2);若 S i n S_{in} S

in


的大小大于阈值 t t t,则通过归一化DLT算法或Levenberg Marquardt等迭代优化算法,利用 S i n S_{in} S

in


中的所有点重新估计模型 H t e s t ∗ H_{test}^{*} H

test


(5) 计算当前模型 H t e s t ∗ H_{test}^{*} H

test


下的内点率 ω = ∣ S i n ∣ ∣ S ∣ \omega =\frac{|S_{in}|}{|S|} ω=

∣S∣

∣S

in



,根据 K = ln ⁡ ( 1 − p ) ln ⁡ ( 1 − ω n ) K=\frac{\ln \left( 1-p \right)}{\ln \left( 1-\omega ^n \right)} K=

ln(1−ω

n

)

ln(1−p)


更新迭代次数;

(6) 至此完成一次迭代,若 H t e s t ∗ H_{test}^{*} H

test


下内点率为最大,则更新 H = H t e s t ∗ H=H_{test}^{*} H=H

test


,重复(2) ~ (5)直至迭代次数满足要求。


🚀 计算机视觉基础教程说明


image.png

🔥 更多精彩专栏

目录
相关文章
|
8月前
|
机器学习/深度学习 算法 决策智能
计算机视觉实战(十六)光流估计 (附完整代码)
计算机视觉实战(十六)光流估计 (附完整代码)
|
9月前
|
人工智能 并行计算 数据可视化
【计算机视觉】手把手教你配置stable-diffusion-webui进行AI绘图(保姆级教程)
如果说,会用各大在线的AI绘图平台来生成图像的话,算是AI绘画的小学生级别。那么,如果会使用本地化部署来运行AI绘画的话,那就已经算得上是高中毕业,进入成年啦。等你能够使用AI绘图指哪打哪,想怎么画怎么画,那就已经是大学毕业,学成归来的牛逼人物啦。
|
11月前
|
机器学习/深度学习 编解码 自然语言处理
计算机视觉论文速递(八)ViTAE:COCO人体姿态估计新模型取得最高精度81.1AP
 人体姿态估计是计算机视觉领域的基本研究问题之一,具有很广泛的实际应用,例如医疗健康领域的行为分析、元宇宙领域的AIGC内容生成等。但是,由于人体姿态丰富,人物衣着表观变化多样,光照和遮挡等因素,人体姿态估计任务非常具有挑战性。之前的深度学习方法主要研究了新的骨干网络设计、多尺度特征融合、更强的解码器结构和损失函数设计等。
244 0
|
11月前
|
存储 机器学习/深度学习 测试技术
计算机视觉论文速递(三)YOLO-Pose:《Enhancing YOLO for Multi Person Pose .....》实时性高且易部署的姿态估计模型
现有的基于Heatmap的两阶段方法并不是最优的,因为它们不是端到端训练的,且训练依赖于替代L1损失,不等价于最大化评估度量,即目标关键点相似度(OKS)。
411 0
|
传感器 Web App开发 机器学习/深度学习
计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
390 0
计算机视觉教程0-3:为何拍照会有死亡视角?详解相机矩阵与畸变
|
机器学习/深度学习 人工智能 自然语言处理
深度学习与计算机视觉教程:斯坦福CS231n · 全套笔记解读
本教程依托于 Stanford 斯坦福大学的《CS231n:深度学习与计算机视觉》,对深度学习与计算机视觉方向的图像分类、CNN、RNN、目标检测、图像分割、生成模型等各个主题做了体系化的梳理。
1756 1
深度学习与计算机视觉教程:斯坦福CS231n · 全套笔记解读
|
传感器 机器学习/深度学习 编解码
计算机视觉教程0-2:你了解眼里所见的色彩吗?(详解RGB/HSV/Lab)
计算机视觉教程0-2:你了解眼里所见的色彩吗?(详解RGB/HSV/Lab)
199 0
计算机视觉教程0-2:你了解眼里所见的色彩吗?(详解RGB/HSV/Lab)
|
机器学习/深度学习 机器人 计算机视觉
计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
270 0
计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
|
机器学习/深度学习 算法 机器人
计算机视觉教程2-7:天使与恶魔?图文详解图像形态学运算(附代码)
计算机视觉教程2-7:天使与恶魔?图文详解图像形态学运算(附代码)
123 0
计算机视觉教程2-7:天使与恶魔?图文详解图像形态学运算(附代码)
|
机器学习/深度学习 算法 机器人
计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)
计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)
291 0
计算机视觉教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)

热门文章

最新文章