UCAS - AI学院 - 计算机视觉专项课 - 第7讲 - 课程笔记
立体视觉与三维重建
- 立体视觉重建:多视角图像——相机位姿——三维重建模型
- 图像获取
- 室内环境
- 光照可控
- 相机稳定
- 室外环境
- 自然光线
- 手持拍摄
- 网络图片
- 不可控
- 室内环境
- 相机位姿获取
- 机械臂——小场景
- 人工标志物——小场景
- Global SfM——大场景(有先验)
- Incremental SfM——大场景
- 三维建模基本流程
- 相机位姿——图像一致性——三维模型
- 图像一致性
- 对应图像投影点周围区域的一致性
- SSD(可进一步优化): ρ S S D ( f , g ) = ∥ f − g ∥ 2 \rho_{SSD}(f, g) = \|f - g\|^2 ρSSD(f,g)=∥f−g∥2
- SAD(更加鲁棒): ρ S A D ( f , g ) = ∥ f − g ∥ \rho_{SAD}(f, g) = \|f - g\| ρSAD(f,g)=∥f−g∥
- NCC(避免光照问题): ρ N C C ( f , g ) = ( f − f ˉ ) ⋅ ( g − g ˉ ) δ f ⋅ δ g \rho_{NCC}(f, g) = \frac {(f - \bar f) \cdot (g - \bar g)}{\delta_f \cdot \delta_g} ρNCC(f,g)=δf⋅δg(f−fˉ)⋅(g−gˉ)
- 两视图三维建模——立体视觉
- 极几何
- 人类视觉远近的感知:对应点在左右两幅图像上水平方向的跳变
- 问题:需要找到所有点的匹配点
- P l P_l Pl在右图像的匹配点在 P l P_l Pl的极线上——一维搜索
- 极线校正
- 理想情形:左右图像在同一水平面,x轴与基线平行,对应点具有相同y坐标
- P l P_l Pl在右图像的极线平行于x轴——水平扫描线(坐标易于确定)
- 很难保证完全平行——极线需要进一步矫正
- 设置一个虚拟摄像机实现矫正——通过图像单应变换
H
\bold H
H完成
- H = K 2 R 2 R 1 − 1 K 1 − 1 \bold H = \bold K_2 \bold R_2 \bold R_1^{-1} \bold K_1^{-1} H=K2R2R1−1K1−1
- 立体视觉假设都完成了校正
- 单应变换的几种形式
- 经典单应:平面上的点到投影面的单应
- 通过空间平面诱导的单应(空间点在一个平面
(
X
,
n
)
(\bold X, \bold n)
(X,n)上):
H
=
K
2
(
R
2
R
1
−
1
+
R
2
(
C
1
−
C
2
)
n
⊤
n
⊤
X
)
K
1
−
1
\bold H = \bold K_2 (\bold R_2 \bold R_1^{-1} + \frac {\bold R_2 (C_1 - C_2) \bold n^\top}{\bold n^\top \bold X}) \bold K_1^{-1}
H=K2(R2R1−1+n⊤XR2(C1−C2)n⊤)K1−1
- 基本矩阵满足所有空间点,单应矩阵只满足同平面点
- 相机纯旋转单应(与空间平面
(
X
,
n
)
(\bold X, \bold n)
(X,n)无关):
H
=
K
2
R
2
R
1
−
1
K
1
−
1
\bold H = \bold K_2 \bold R_2 \bold R_1^{-1} \bold K_1^{-1}
H=K2R2R1−1K1−1
- 极线校正:纯旋转虚拟相机
- 视差:左右图像匹配点在水平线上的差异
- 视差大小与距离的远近成反比
- 视差图:逐像素视差对应的灰度图
- 越亮越近
- 利用视差图可以得到单视点下的三维模型(稠密点云)
- 视差和深度
-
-
基线 B B B:两个相机光心之间的距离
-
相似三角形: X Z = x l f \frac {X}{Z} = \frac {x_l}{f} ZX=fxl和 X − B Z = x r f \frac {X-B}{Z} = \frac {x_r}{f} ZX−B=fxr
-
深度: Z = B ⋅ f x l − x r Z = \frac {B \cdot f}{x_l - x_r} Z=xl−xrB⋅f
-
可见,视差和深度成反比
-
- 基线越大、焦距越大、同样分辨率,深度测定精度越高
- 但是公共可见区域就会很小
- 需要折衷选择
- 建模流程
- 极线校正——立体匹配(视差图)——三角化(寻找比例因子,稠密点云)
- 极几何
- 立体匹配
- 最简单:对点
p
p
p,寻找极线上颜色最相似点:
d
p
=
arg
min
d
c
(
p
,
p
−
d
)
d_p = \arg \min_d c(p, p - d)
dp=argmindc(p,p−d)
- 可能会有很多颜色类似的点
- 比较容易出现错误
- 平滑性约束
- 真值视差图大多数区域平滑(边缘存在跳变)
- 匹配过程中考虑平滑性约束
- 窗口匹配法
- 对于一个点 p p p,在极线上寻找对应点
- 通过一个窗口区域衡量匹配程度
- d p = arg min d ∑ q ∈ W p c ( p , p − d ) d_p = \arg \min_d \sum_{q \in W_p} c(p, p - d) dp=argmind∑q∈Wpc(p,p−d)
- 提高度量的稳定性和鲁棒性
- 但是结果仍然不够理想,窗口尺寸影响结果
- 弱纹理,窗口内像素值类似,度量函数不显著
- 孔径问题,包含纹理区域太小,区分度不足(纹理沿水平分布)
- 重复纹理,容易产生匹配误差
- 前景放大效应,遮挡问题造成,尽在一个图像中出现的点造成匹配错误,背景错分为前景,造成前景放大(错误匹配点视差增大)
- 窗口选择
- 大窗口,利于解决前三个问题
- 小窗口,利于解决后一个问题
- 自适应窗口匹配法
- 融合大小窗口的优势
- 位于边缘区域的窗口不利于匹配
- 自适应窗口
- 分为9个子窗口
- 每个子窗口分别计算相似度
- 选择5个相似度最高的子窗口作为整个窗口相似度结果
- 可以有效解决边缘区域的视差
- 自适应权值窗口匹配法
- d p = arg min d ∑ q ∈ W p w ( p , q ) c ( p , p − d ) d_p = \arg \min_d \sum_{q \in W_p} w(p, q) c(p, p - d) dp=argmind∑q∈Wpw(p,q)c(p,p−d)
- 对每一个像素值独立衡量
- w ( p , q ) w(p, q) w(p,q)表示两个像素点视差相同的可能性
- 权值设定
- 颜色,颜色相似,视差相同可能性大
- 距离,距离中心点越近,视差相同可能性大
-
w
(
p
,
q
)
=
exp
(
−
(
δ
c
p
q
γ
c
+
δ
g
p
q
γ
g
)
)
w(p, q) = \exp \left(- \left( \frac{\delta c_{pq}}{\gamma_c} + \frac {\delta g_{pq}}{\gamma_g} \right)\right)
w(p,q)=exp(−(γcδcpq+γgδgpq))
- 颜色:RGB差的绝对值和
- 距离:欧式距离
- 两个 γ \gamma γ人工指定
- PathMatch Stereo
- 放开两图像对应窗口区域相同的强假设(所有空间平面平行于相机)
- 寻找真实的平面朝向
- 空间面片patch的表达: d d d,一个自由度; n n n,两个自由度——单应变换
- 窗口的投影区域(单应变换)上计算相似度
- 三个自由度,在连续三维空间寻找——解决!
- 核心思想
- 随机生成每个像素点的深度和法向
- 左上到右下(随机传播)
- 检测邻域点的深度和法向是否更好(新面片——新单应——新投影——更高的一致性——更好)
- 检测自身随机扰动后的点是否更好
- 右上到左下
- 根据:大数定律
- 最简单:对点
p
p
p,寻找极线上颜色最相似点:
d
p
=
arg
min
d
c
(
p
,
p
−
d
)
d_p = \arg \min_d c(p, p - d)
dp=argmindc(p,p−d)
- 标准评测库
- Middlebury
- KITTI
- SOTA:PatchMatch,CRF,CNN
- 多视图三维建模
- 寻找空间中具有图像一致性的点
- 差异:相机不能保证位置
- 分类
- 深度图融合方法 Depth Map
- 体素方法 Voxel
- 点云扩散方法 Feature Point
- 深度图融合MVS
- 为每一幅图像选择邻域图像构成立体图像对
- 计算每一幅图像的深度图
- 深度图融合
- 抽取物体表面
- 体素MVS
- 等价为一个3D空间Voxel的标记问题
- Voxel表达:类似3D的像素表示
- 物体表面:物体内部体素和外部体素的界面
- 离散空间标记:典型MRF优化问题
- 利用两个体素的相似度差异对分类结果进行惩罚:一致性越低,惩罚越高——对应二阶能量越大
- 一阶能量:气球力,推动平面向外扩张
- 能量函数: E ( k v ) = ∑ v Φ ( k v ) + ∑ ( v , w ) ∈ N Ψ ( k v , k w ) E({k_v}) = \sum_v \Phi (k_v) + \sum_{(v, w) \in N} \Psi (k_v, k_w) E(kv)=∑vΦ(kv)+∑(v,w)∈NΨ(kv,kw)
- 求解:图割算法
- 只有两个label
- 二阶项满足sub-modular约束
- 问题:计算代价太大
- 处理大场景?自适应多分辨率表格(表面高分辨率,其余低分辨率)
- Pros
- 生成规则点云
- 易于提取Mesh(连续面片)
- Cons
- 精度取决于Voxel粒度
- 难以处理大场景
- 特征点扩散MVS
- 从初始稀疏特征点扩展得到点云
- Patch表达:中心 + 法向
- 步骤
- 生成初始点云
- 点云扩散(向空白区域扩散)
- 点云过滤(去除深度不一致或一致性较低点)
- Pros
- 点云精度高
- 点云分布均匀
- Cons
- 弱纹理区域造成扩散空洞
- 需要一次读入所有图像