1 导论
计算机视觉系列教程1-1:透视空间与透视变换中提到,透视空间所有变换都是投影变换的特例,本节进一步研究投影变换矩阵(单应性矩阵)的估计。
透视变换的核心是单应性矩阵
H或单应性向量
h。
H=⎣⎢⎡h11h21h31h12h22h32h13h23h33⎦⎥⎤⇔h=[h11h12h13h21h22h23h31h32h33]T
设
psrc=[xy1]T与
pdst=[x′y′1]T是二维透视空间
P2中,一次透视变换前后的对应点,因此其满足
pdst=Hpsrc⟺⎣⎢⎡x′y′1⎦⎥⎤=⎣⎢⎡h11h21h31h12h22h32h13h23h33⎦⎥⎤⎣⎢⎡xy1⎦⎥⎤
若将单应性矩阵进行尺度缩放后作用于
psrc,则
kHpsrc=k⎣⎢⎡h11h21h31h12h22h32h13h23h33⎦⎥⎤⎣⎢⎡xy1⎦⎥⎤=kpdst
而透视空间中,
kpdst与
pdst实际上对应同一点,因此
kH与
H相当于同一次透视变换,故单应性矩阵
H仅有8个自由度,通常通过设置
h33=1或
∥h∥22=1来约束冗余的参数。
下面详细阐述单应性矩阵估计方法。
2 基本直接线性变换(Basic DLT)
将上式改写为齐次形式
⎣⎢⎡0x−y′x0y−y′y01−y′−x0x′x−y0x′y−10x′y′x−x′x0y′y−x′y0y′−x′0⎦⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡h11h12h13h21h22h23h31h32h33⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎡000⎦⎥⎤
其中系数矩阵的秩为2,因此一对变换点仅能确定2个自由度。因此需要无三点共线的四对变换点才能确定单应性矩阵
H。
⎣⎢⎢⎢⎢⎢⎢⎡0x10x20y10y20101−x10−x20−y10−y20⋮−10−10y1′x1−x1′x1y2′x2−x2′x2y1′y1−x1′y1y2′y2−x2′y2y1′−x1′y2′−x2′⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡h11h12h13h21h22h23h31h32h33⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎡000⎦⎥⎤⇔Ah=0
对于形如
Ax=b的非齐次线性方程可以通过伪逆形式计算
x;对于形如
Ax=0的齐次线性方程的解则对应矩阵
A右奇异向量
vp,其中
vp对应的奇异值
σp≈0或不对应奇异值。
3 归一化直接线性变换(Normalized DLT)
基本DLT估计算法的缺陷是:
(1) 单应性估计不具有相似不变性
假设在第一次估计下有
xdst=Hxsrc。现对两张图像分别进行相似变换并重新进行单应性估计,得到
(Tdstxdst)=H′(Tsrcxsrc),改写为
xdst=(Tdst−1H′Tsrc)xsrc,大部分情况下
H=Tdst−1H′Tsrc,这表明基本DLT算法无法抵抗相似变换的干扰。
(2) 估计的单应性矩阵容易产生病态条件,鲁棒性差
由于默认透视空间的尺度变换因子
w=1,所以齐次坐标下很可能产生分量幅度差异大的情况,例如某特征点
X=[1001011]T。在这种情况下估计出的单应性矩阵,各个元素数值数量级可能会相差
104以上,导致病态条件——特征点的轻微变化都会造成单应性矩阵的剧变。
基于(1)(2)两种缺陷,需要将基本DLT算法进行优化,优化的核心就是特征点坐标的归一化。设原图像特征点集合为 ,目标图像特征点集合为 ,则具体的算法为:
① 将特征点集合
Xsrc、
Xdst归一化
使用相似变换矩阵
Tsrc、
Tdst将特征点集合中心移至原点,且与原点平均距离为
2
。由于默认尺度因子为
w=1,所以归一化到
2
可以保持齐次坐标的三个分量有相同的幅度,例如
X=[1001001]T⇒Xnormal=[111]T。
这里给出一种相似变换矩阵的计算方式,设
Xnormal=TX⇔⎣⎢⎡x~iy~i1⎦⎥⎤=⎣⎢⎡sstxty1⎦⎥⎤⎣⎢⎡xiyi1⎦⎥⎤
令
⎩⎪⎪⎨⎪⎪⎧N1∑i=1Nx~i=N1∑i=1N(sxi+tx)=0N1∑i=1Ny~i=N1∑i=1N(syi+ty)=0N1∑i=1Nx~i2+y~i2
=2
解得
⎩⎪⎪⎪⎨⎪⎪⎪⎧tx=−sN1∑i=1Nxi=−sxˉty=−sN1∑i=1Nyi=−syˉs=N1∑i=1Nx~i2+y~i2
2
=N1∑i=1N(xi−xˉ)2+(yi−yˉ)2
2
② 运用基本DLT算法由 与 估计单应性矩阵
③ 解归一化,映射回实际图像
4 鲁棒单应性估计(Robust Homography Estimation)
结合基本DLT算法、归一化DLT算法及计算机视觉系列教程6-2:图像匹配算法概述.的RANSAC算法进行单应性矩阵估计,具体流程如下:
(1) 设置迭代次数
K=∞,内点集
Sin=⊘,模型参数
H=H0;
(2) 随机从样本数据集
S中选取4对特征点,并通过基本DLT算法确定测试模型
Htest;
(3) 用
Htest遍历样本数据集
S,估计误差
ε在距离阈值
t内的点加入内点集
Sin。其中阈值
t=5.99
σ,
σ为估计不确定度,估计误差
ε主要有两种度量方式:
① 代数误差
εi=∥Aihtest∥,其中
Ai=[0−y′x0−y′y0−y′−xx′x−yx′y−1x′y′x0y′y0y′0]
② 几何误差(二次投影误差)
εi=∥HXsrc,i,Xdst,i∥22+∥∥∥Xsrc,i,H−1Xdst,i∥∥∥22,可以视作交叉检验。
(4) 若
Sin的大小小于阈值
T,则放弃该模型,重复(2);若
Sin的大小大于阈值
t,则通过归一化DLT算法或Levenberg Marquardt等迭代优化算法,利用
Sin中的所有点重新估计模型
Htest∗;
(5) 计算当前模型
Htest∗下的内点率
ω=∣S∣∣Sin∣,根据
K=ln(1−ωn)ln(1−p)更新迭代次数;
(6) 至此完成一次迭代,若
Htest∗下内点率为最大,则更新
H=Htest∗,重复(2) ~ (5)直至迭代次数满足要求。
🚀 计算机视觉基础教程说明
章号 内容
0 色彩空间与数字成像
1 计算机几何基础
2 图像增强、滤波、金字塔
3 图像特征提取
4 图像特征描述
5 图像特征匹配
6 立体视觉
7 项目实战
🔥 更多精彩专栏:
👇配套代码 · 优质体验 · 系统知识 请关注👇
评论(0)