理论恒叨系列
【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型
【理论恒叨】【立体匹配系列】经典PatchMatch: (2)基于PatchMatch的视差估计
【理论恒叨】【立体匹配系列】经典PatchMatch: (3)后处理(一致性检查与视差填充)
PatchMatchStereo1是Michael Bleyer等在2011年发表于British Machine Vision Conference(BMVC)上的一篇双目立体匹配算法文章,非常经典,倾斜支持窗的思路打破传统固定窗口式局部匹配的思维桎梏,在Middlebury数据集上获得非常好的匹配效果,一段时间内高居排行榜第一名。更难能可贵的是,它和SGM一样数据泛化能力出色,对大部分数据都能取得不错的结果,所以也被很多商业软件所实现,是真正能够产品化的算法。
本系列博主将为大家介绍经典的PatchMatchStereo(PMS)算法原理,希望能够对同学们的立体匹配算法研究有所帮助。
上篇博客中,博主介绍了PMS的核心模型Slanted support windows倾斜支持窗模型,本篇则是介绍PMS的视差估计方法:基于PatchMatch的视差估计法。
上篇,我们在结尾提到PatchMatchStereo(PMS)的目的是在一个无边界平面集 F F F找到代价最小的平面,暴力穷举法自然是不可取。PMS巧妙的借用PatchMatch的思路。PatchMatch的基本思想是:在自然图像中,一个有一定大小的像素块内所有像素都可以用同一个平面来近似。这也构成了PMS的基本思想,即图像可看作多个像素块,而每个像素块可有一个近似的视差平面,算法的目标就是要找到图像的所有视差平面。
如何做到呢?步骤如下:
随机初始化是PMS寻找视差平面的第一步,即为每个像素随机一个视差平面。PMS期望能够通过该步骤能够在每一个平面区域中至少为1个像素随机到正确平面,有同学此时会有两个疑问:
博主回答:
那么平面该如何随机呢?大家可能第一时间想到,随机给平面三个参数 a f a_f af、 b f b_f bf、 c f c_f cf赋值。这样做的缺点是无法给平面一个范围约束,接触过其他立体匹配算法的同学都知道,很多算法都有一个视差范围,PMS也不例外,不进行范围约束,效率和效果都会受影响。因此PMS的做法是:在视差范围内为每个像素随机一个视差值 z 0 z_0 z0,这样我们就有了平面上的一个点 P ( x 0 , y 0 , z 0 ) P(x_0,y_0,z_0) P(x0,y0,z0),然后随机一个单位向量 n ⃗ = ( n x , n y , n z ) \vec{n}=(n_x,n_y,n_z) n=(nx,ny,nz)作为平面的法线。如此一来, a f a_f af、 b f b_f bf、 c f c_f cf便可通过公式: a f = − n x n z a_f=-\frac{n_x}{n_z} af=−nznx、 b f = − n y n z b_f=-\frac{n_y}{n_z} bf=−nzny、 c f = n x x 0 + n y y 0 + n z z 0 n z c_f=\frac{n_xx_0+n_yy_0+n_zz_0}{n_z} cf=nznxx0+nyy0+nzz0来计算。
若固定 n ⃗ = ( 0 , 0 , 1 ) \vec{n}=(0,0,1) n=(0,0,1),则变成Fronto-parallel Windows。若想取整像素精度,则可强制 z 0 z_0 z0为整数值(一般而言 z 0 z_0 z0为浮点数)。
随机视差图大家可以瞅一眼:
下半部分就是随机的结果,可以看到一团乱麻点。上半部分是视差传播后的结果。想必大家就对传播很感兴趣了,别着急,往下看。
迭代传播是重头戏,它的基本思想是把随机的所有视差平面中的少数正确的视差平面传播至同一视差平面内的其他像素。算法执行多次迭代,每次迭代执行四个步骤:(1)空间传播(Spatial Propagation)(2)视图传播(View Propagation)(3)时序传播(Temporal Propagation)(4)平面优化(Plane Refinement)。偶数次迭代,从图像左上角像素沿行方向传播至右下角像素;奇数次迭代则和偶数次迭代传播顺序相反,即从右下角像素沿行方向传播至左上角像素。PMS共执行了3次迭代,下图展示了迭代的过程和结果:
很有意思,这样传播三次居然可以得到如此美妙的结果。
急迫的想了解传播是何方神圣!
空间传播背后的思想是空间上相邻的像素极可能有相似的平面。基于此思想,PMS假设像素点 p p p当前的平面为 f p f_p fp,则检查 p p p邻域内的像素 q q q的平面 f q f_q fq是否更适合 p p p,即检查 m ( p , f q ) < m ( p , f p ) m(p,f_q)
了解立体匹配的同学都知道一致性检查,同名像对会有相同的视差值,PMS也利用这一点,认为同名像对会有相似的视差平面。还是假设像素点 p p p当前的平面为 f p f_p fp,则在右视图上找到同名点为 p p p的像素 p ′ p' p′, f p ′ f_{p'} fp′为 p ′ p' p′的视差平面转换至左视图坐标系后的平面,若 m ( p , f p ′ ) < m ( p , f p ) m(p,f_{p'})
时序传播比较特殊,它仅仅用于视频序列的立体匹配,它所基于的假设是相邻帧同一位置的像素大概率有相似的平面,该假设还是比较合理的,在视频序列中前后帧的移动量一般都很小。同样,假设像素点 p p p当前的平面为 f p f_p fp,前后帧和 p p p位置相同的像素为 p ′ p' p′, f p ′ f_{p'} fp′为 p ′ p' p′的视差平面,若 m ( p , f p ′ ) < m ( p , f p ) m(p,f_{p'})
平面优化目标是通过优化视差平面 f p f_p fp的参数而进一步减小像素 p p p的聚合代价值 m ( p , f p ) m(p,f_p) m(p,fp)。
PMS将 f p f_p fp转换为点加法向量的表达方式,并设置两个参数: Δ z 0 m a x Δ_{z_0}^{max} Δz0max和 Δ n m a x Δ_{n}^{max} Δnmax。 Δ z 0 m a x Δ_{z_0}^{max} Δz0max为点 P ( x 0 , y 0 , z 0 ) P(x_0,y_0,z_0) P(x0,y0,z0)的z-坐标的可变化范围, Δ n m a x Δ_{n}^{max} Δnmax为法向量 n ⃗ \vec{n} n各分量的可变化范围。在 [ − Δ z 0 m a x , Δ z 0 m a x ] [-Δ_{z_0}^{max},Δ_{z_0}^{max}] [−Δz0max,Δz0max]范围内随机一个值 Δ z 0 Δ_{z_0} Δz0加到 z 0 z_0 z0上得 z 0 ′ = z 0 + Δ z 0 z_0'=z_0+Δ_{z_0} z0′=z0+Δz0,由此得到新的点 P ′ ( x 0 , y 0 , z 0 ′ ) P'(x_0,y_0,z_0') P′(x0,y0,z0′);随后,在 [ − Δ n m a x , Δ n m a x ] [-Δ_{n}^{max},Δ_{n}^{max}] [−Δnmax,Δnmax]范围内随机3个值组成向量 Δ n ⃗ \vec{Δ_{n}} Δn,计算新的法向量 n ′ ⃗ = u ( n ⃗ + Δ n ⃗ ) \vec{n'}=u(\vec{n}+\vec{Δ_{n}}) n′=u(n+Δn), u u u为取单位向量。新的点 P ′ P' P′和法向量 n ′ ⃗ \vec{n'} n′组成新的平面 f p ′ f_{p'} fp′,若 m ( p , f p ′ ) < m ( p , f p ) m(p,f_{p'})
平面优化步骤也是迭代进行的,初始设置 Δ z 0 m a x = m a x d i s p / 2 Δ_{z_0}^{max}=maxdisp/2 Δz0max=maxdisp/2( m a x d i s p maxdisp maxdisp为设置的最大视差值)、 Δ n m a x = 1 Δ_{n}^{max}=1 Δnmax=1。每次迭代后,设置 Δ z 0 m a x = Δ z 0 m a x / 2 Δ_{z_0}^{max}=Δ_{z_0}^{max}/2 Δz0max=Δz0max/2、 Δ n m a x = Δ n m a x / 2 Δ_{n}^{max}=Δ_{n}^{max}/2 Δnmax=Δnmax/2,由此来逐渐缩小搜索空间。迭代终止条件为 Δ z 0 m a x = 0.1 Δ_{z_0}^{max}=0.1 Δz0max=0.1。
好了,本篇就介绍到此,内容不多,但很核心,大家消化消化。本篇展现了PatchMatchStereo的思维核心,结合上篇,基本就对PatchMatchStereo有一个较为全面的了解了。下篇我们将要介绍的是PMS的后处理(Post-Processing)部分,并给出一些实验结果。
博主简介:
Ethan Li 李迎松
武汉大学 摄影测量与遥感专业博士
主方向立体匹配、三维重建
2019年获测绘科技进步一等奖(省部级)
爱三维,爱分享,爱开源
GitHub: https://github.com/ethan-li-coding
邮箱:[email protected]
个人微信:
欢迎交流!
喜欢博主的文章不妨关注一下博主的博客,感谢!
博客主页:https://blog.csdn.net/rs_lys
Bleyer M , Rhemann C , Rother C . PatchMatch Stereo - Stereo Matching with Slanted Support Windows[C]// British Machine Vision Conference 2011. ↩︎