【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型

一枝独秀不是春

理论恒叨系列

【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型
【理论恒叨】【立体匹配系列】经典PatchMatch: (2)基于PatchMatch的视差估计
【理论恒叨】【立体匹配系列】经典PatchMatch: (3)后处理(一致性检查与视差填充)

PatchMatchStereo1是Michael Bleyer等在2011年发表于British Machine Vision Conference(BMVC)上的一篇双目立体匹配算法文章,非常经典,倾斜支持窗的思路打破传统固定窗口式局部匹配的思维桎梏,在Middlebury数据集上获得非常好的匹配效果,一段时间内高居排行榜第一名。更难能可贵的是,它和SGM一样数据泛化能力出色,对大部分数据都能取得不错的结果,所以也被很多商业软件所实现,是真正能够产品化的算法。

本系列博主将为大家介绍经典的PatchMatchStereo算法原理,希望能够对同学们的立体匹配算法研究有所帮助。

本篇的内容是算法的核心模型:倾斜支持窗模型Slanted support windows

【理论恒叨】【立体匹配系列】经典PatchMatch: (1)Slanted support windows倾斜支持窗模型

倾斜支持窗Slanted support windows

在介绍倾斜支持窗(Slanted support windows)之前,非常有必要介绍下另一种窗模型:Fronto-parallel windows。

Fronto-parallel windows

Fronto-parallel windows是非常经典的窗口模型,它的含义是立体相机正前方与极线纠正后的像平面平行的窗口,同时也和纠正后每个相机的相机坐标系Z轴垂直。该窗口的特性是:

  • 窗口内的任意线段在左右图像(核线像对)上的投影长度相等。
  • 窗口内的所有空间点的深度一样,由 D = b f / d D = bf/d D=bf/d可知空间点在影像上的投影点视差也相同。

这两个特性对矩形窗口匹配来说是非常友好的,使得左右图像以某同名点对为中心的窗口内的所有像素都能一一同名对应,窗口内所有像素存在相同的唯一视差,这样如果纹理条件上佳,则不需要代价聚合,只通过相关系数法等局部相似度算法就能得到不错的结果。

但问题在于,这样的窗口太理想化了,你很难在实际应用中找到这样的场景,更多情况是:场景内可能存在若干个Fronto-parallel windows,也可能一个也没有。但庆幸的是,该窗口为我们提供了很好的研究思路,很多算法都是基于此窗口模型而进一步优化,如SGM、AD-Census,它们基于Fronto-parallel windows计算初始代价值,然后经过代价聚合,对代价进行优化,得到很不错的效果。

另一部分学者则开始另辟蹊径,寻找其他更合理的窗口模型。而且他们做到了,2011年,基于Slanted support windows的PatchMatchStereo1立体匹配算法应运而生。

Slanted support windows

我们先来看一张图:

图中,绿色的线条表示表面的一维表示,红色线段是窗口的一维表示,左边是Fronto-parallel windows示意图,可以看到P是符合Fronto-parallel windows假设的,局部表面是Fronto-parallel的,同一个视差值;而R和S不符合,表面都是倾斜,R是倾斜平面而S是倾斜曲面。右边是Slanted support windows示意图,我们可以观察R和S窗口的变化,Fronto-parallel windows假设下的窗口是和视差维平行的,并不贴合表面走势,而Slanted support windows是很好的贴合表面的。从图中我们可以看出来,Slanted support windows应该是随着表面的朝向而动态变化的,具体是如何变化,下面我会介绍。

另一个区别是,Fronto-parallel windows基于整像素视差,而Slanted support windows基于子像素视差。如Q点,局部表面的视差值不是整数值,如果是Fronto-parallel windows模型,只能匹配整像素视差(Fronto-parallel windows一般采用一元二次拟合来得到子像素精度),而Slanted support windows直接使用子像素位置的窗口,可以更好的贴合Q处的表面。

好了,大概对Slanted support windows有了个初步的印象,但大家估计还是一知半解,所以Slanted support windows模型到底具体是怎么实现的?听博主慢慢介绍。

Slanted support windows模型

上一节,我们猜想到PMS的Slanted support windows应该是随着表面的朝向而动态变化的,而且图中还可以看到Slanted support windows是一个平面窗口而并不是曲面窗口,PMS的出发点是为所有像素点都找到一个属于它的动态的视差平面,设像素点 p p p的视差为 d p d_p dp,则 p p p的视差平面方程为

式中, a f p a_{f_p} afp b f p b_{f_p} bfp c f p c_{f_p} cfp为视差平面的3个参数, p x p_x px p y p_y py为像素的 x y xy xy坐标值。如此又来视差估计问题转换为平面估计问题,立体匹配就是要找出每个像素的最优平面的参数,也就是对每个像素找出聚合代价最小的那个平面:

式中 F F F为一个无边界的平面集合, m ( p , f ) m(p,f) m(p,f)为像素 p p p当视差平面为 f f f时的聚合代价值,计算公式为:

式中, W p W_p Wp是一个以 p p p为中心的方形窗口,PMS也应用于时序立体,彼时 W p W_p Wp将是一个3D窗口,第3维是连续视频序列帧中的前后帧对应位置像素,这听起来一下子就高端新颖上档次了啊。

w ( p , q ) w(p,q) w(p,q)是自适应的权值,为了解决edge-fattening问题,edge-fattening做立体匹配的同学一定遇到过:有视差非连续现象出现的边缘位置总是会有一圈连续的错误匹配值,它不是离群误差,而是让边缘扩大了一圈,通过一致性检查等手段都难以剔除。一个典型的例子是匹配张开的手掌,视差图会让手掌在根部粘连起来,如下图右列就是典型的edge-fattening问题。

PMS计算 w ( p , q ) w(p,q) w(p,q)的方法是计算 p p p q q q为同一个平面的可能性,通过颜色的差异来判断,公式如下:

式中, γ γ γ为自定义参数 , ∣ ∣ I p − I q ∣ ∣ ,||I_p-I_q|| IpIq为像素 p p p q q q在RGB空间的L1-distance(就是 ∣ r − r ∣ + ∣ g − g ∣ + ∣ b − b ∣ |r-r|+|g-g|+|b-b| rr+gg+bb)。相邻像素颜色差异越大,为同一平面的可能性越小,则 w ( p , q ) w(p,q) w(p,q)越小,合理!

我们再来看最关键的 ρ ρ ρ。它是在衡量两个像素的不相似性。假设左视图像素 q q q的视差平面方程为( a f a_f af, b f b_f bf, c f c_f cf),则它的视差值 d q = a f q x + b f q y + c f d_q=a_fq_x+b_fq_y+c_f dq=afqx+bfqy+cf,在右视图上对应的同名点 q ′ = q − d q q'=q-d_q q=qdq q q q q ′ q' q的不相似性计算公式为:

式中 ∣ ∣ ▽ I q − ▽ I q ′ ∣ ∣ ||▽I_q-▽I_{q'}|| IqIq q q q q ′ q' q的梯度之差的绝对值,该式的含义就是两个像素的颜色相差越大、梯度相差越大,则不相似的程度越大, α α α参数为自定义参数,在颜色和梯度之间做一个平衡。注意到根据平面算出来的视差值是小数值,所以像素 q ′ q' q的位置不是整数而是小数,它的颜色值和梯度值通过线性内插得到。

参数 τ c o l τ_{col} τcol τ g r a d τ_{grad} τgrad为自定义截断参数,为了让遮挡区的像素代价计算更鲁棒,意思就是不能让代价过大,保持在一个良好的局部范围内。

以上,我们便了解如何计算像素 p p p在视差平面为 f p f_p fp时的聚合代价 m ( p , f ) m(p,f) m(p,f),从而可以判定 f p f_p fp的孰好孰坏而做出最优的选择(选择代价最小的 f p f_p fp自不必说)。

自然不能在一个无边界平面集 F F F里用暴力穷举法搜索最小值。如何搜索,是PMS另一个及其出彩且与众不同的地方,同学们请听下回分解。

哈哈,放一张图吊下胃口:

下载完整源码,点击进入: https://github.com/ethan-li-coding/PatchMatchStereo.git
欢迎同学们在Github项目里讨论,如果觉得博主代码质量不错,给颗小星星,Follow 我!感激不尽!

码上实战系列

【码上实战】【立体匹配系列】经典PatchMatch: (1)框架
【码上实战】【立体匹配系列】经典PatchMatch: (2)主类
【码上实战】【立体匹配系列】经典PatchMatch: (3)随机初始化
【码上实战】【立体匹配系列】经典PatchMatch: (4)代价计算
【码上实战】【立体匹配系列】经典PatchMatch: (5)迭代传播
【码上实战】【立体匹配系列】经典PatchMatch: (6)后处理

博主简介:
Ethan Li 李迎松(知乎:李迎松)
武汉大学 摄影测量与遥感专业博士

主方向立体匹配、三维重建

2019年获测绘科技进步一等奖(省部级)

爱三维,爱分享,爱开源
GitHub: https://github.com/ethan-li-coding
邮箱:ethan.li.whu@gmail.com

个人微信:

欢迎交流!

关注博主不迷路,感谢!
博客主页:https://ethanli.blog.csdn.net/


  1. Bleyer M , Rhemann C , Rother C . PatchMatch Stereo - Stereo Matching with Slanted Support Windows[C]// British Machine Vision Conference 2011. ↩︎ ↩︎

  • 96
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
### 回答1: MTF(Modulation Transfer Function,调制传递函数)代表图像传递的能力,是一项衡量成像设备性能的重要指标。而对于倾斜边缘(slanted edge),由于其有一定的角度倾斜,因此需要考虑其倾斜对MTF测量的影响。 对于倾斜边缘,其灰度值变化形态可以表示为: I(x,y) = I0 + m(xcosθ + ysinθ) 其中,I0为背景灰度值,m为边缘灰度变化强度,θ为边缘倾斜角度。由于其斜率不为零,其边缘线并非处于像素点中心,因此需要对其进行插值(interpolation)处理,以获得更加精确的MTF值。 MTF的计算公式为: MTF(f) = |FFT{I(x,y)}| / |FFT{p(x,y)}| 其中,FFT为离散傅里叶变换,p(x,y)为边缘反射函数(Point Spread Function,即点扩散函数),表示点光源入射到相机上的影响,通常使用物理点的响应函数作为反射函数进行计算。 对于倾斜边缘,p(x,y)需要根据其倾斜角度进行变换,得到新的反射函数p'(x,y),然后进行插值处理,将边缘线处于像素点中心的位置,再进行MTF计算,得到最终的MTF值。 总的来说,MTF的倾斜边缘计算方法主要包括倾斜边缘的变换、插值处理和MTF计算三个方面,通过这些步骤,可以精确地获得成像设备在不同角度下的MTF性能指标。 ### 回答2: MTF(Modulation Transfer Function,调制传递函数)是一种用于描述成像系统(例如相机、望远镜等)分辨率能力的测量方法,可用于评价光学系统质量和性能。在MTF曲线中,倾斜边缘是一种非常重要的参数,它表示影像中灰度变化最为剧烈的区域,因此对于MTF的计算和分析来说,倾斜边缘的精确计算方法非常重要。 MTF的倾斜边缘计算方法可以分为两大类:时间域方法和频域方法。 时间域计算方法主要包括微分算子法、斜率差分法、两点法等,其中微分算子法是一种常用的方法。该方法首先将MTF曲线用斜率表示,然后采用高斯微分算子平滑法或其他滤波算法来计算斜率。最后,通过求导数的方法,得到最终的倾斜边缘值。 频域计算方法则通过傅里叶变换将MTF曲线转换到频率域中,然后利用一些预定义的频率值来计算倾斜边缘。常用的计算方法包括半功率频带法、微分法和斜率截距法等,其中半功率频带法是最为常用的方法之一。该方法首先将MTF曲线进行归一化处理,然后通过对半功率点的频率值进行插值计算,得到相应的斜率和截距,最后用斜率公式来计算倾斜边缘的值。 总结来说,MTF的倾斜边缘计算方法有多种,其中时间域方法和频域方法是常用的两种方法。在具体应用中,需要根据具体的测量需求和实验条件选择适用的方法。 ### 回答3: MTF是一种度量图像质量的方法,其全称为Modulation Transfer Function,翻译为调制传递函数。MTF可以度量成像系统在传递不同空间频率(或线对)时响应的强度,反映了成像系统对空间分辨率、对比度和细节的表现能力,是评价一个图像系统质量的重要指标之一。 MTF的倾斜边缘计算方法是通过测量成像系统在传递一条倾斜边缘时的响应来计算的。其具体步骤如下: 1. 选取一条30°左右的倾斜边缘作为测试对象,在边缘两侧放置黑白相间的正弦条纹灰度块。 2. 将测试对象从图像系统的输入端传递到输出端,记录下黑白相间的正弦条纹灰度块在输出图像中的响应。 3. 将输出图像中的响应信号进行傅里叶变换,得到图像在不同空间频率下的频谱。 4. 计算出边缘所对应的空间频率,并选取该频率处的振幅响应作为MTF的值。 5. 重复以上操作,对多条倾斜边缘进行测试,得到MTF曲线。 倾斜边缘计算方法可以很好地反映出成像系统对细节和边缘的表现能力,但需要注意的是,该方法只能在相对平坦的场景下适用,对于过于复杂或非线性的场景,需要采用其他方法进行MTF的计算。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值