论文解析 "A Non-Local Cost Aggregation Method for Stereo Matching"
传统的使用窗口的方法缺陷主要在
1.窗口外的像素不能参与匹配判断.
2.在低纹理区域很容易产生错误匹配
论文的主要贡献在代价聚类上(左右图像带匹配点/区域的匹配代价计算),目标是图像内所有点都对该点传递一个support,距离该点较远的或者颜色差别很大的点传递较小的Support.
本文利用MST(最小生成树)来构建这个代价聚类的结构,根据MST结构我们知道,当把图像看做是一个四联通区域的图时,图像两点所形成边的权值我们定义为这两点灰度值的差值,这种定义下生成的MST结构正好符合我们的期望。这一做法相当于在局部算法上加了全局性质,所以称之为非局部算法.更为难得的是这一算法根据作者推倒的公式只需要对MST遍历两次即可得到所有点的代价聚类.
MST可以将计算范围从所有节点缩小到父节点和子节点上,而父节点只有一个或多个子节点,其实最多只有3个,因为是4邻居(这块我还没明白).基于每个像素点作为根节点循环,计算复杂度就比较高,作者又提出了两次遍历MST,当v4作为根节点时候,第一次是从叶节点向根节点聚集,更新每个根节点的代价聚集值且只更新根节点的聚集值(即图中的V4节点),此时v3,v5里面是临时值,v1,v2,v6都是0,第二次是从根节点向叶节点聚集,主要解决v1,v2,v6的值,之后再v3作为根节点,则v4一支作为v3的子节点,v3的值需要v4减去<v3,v4>。这样省去了复杂并且不断重复的死板运算。
对于上图左图,对应如下的公式,其中不带向上箭头的Cd()是已经聚集完的.
对于上图右图,对应如下公式
这样任何一个点如果即将作为根节点,都可以从他的父节点(parent)得到值.如下公式
另外每个非根节点的值可以由如下公式获得
以上公式所用到的公共项:
, 其中D(p,q)表示p和q在MST上的距离,其中D(p,q)=D(q,p) (这个还不知道什么意思)
其中Cd(q)表示每个像素q在视差级别d下的匹配代价
Note that in Eqn. (6) and (7), S(v, vc), S(P(v), v) and 1−S2(v,P(v)) only depend on the edges of MST and can be pre-computed, thus only a total of 2 addition/subtraction operations and 3 multiplication operations will be required for each node at each disparity level during cost aggregation.
在视差精化步骤,基于上述非局部代价聚集方法,先分别得到左右两个图像的视差图,然后进行左右一致性检测,得到稳定点和不稳定点,稳定点就可以通过检测,同时直接在左视差图上定义新的代价值,再同样利用原图所得的MST,对所有像素点重新进行代价聚合,最后利用WTA算法更新视差。其余不稳定点代价值为0。
由于MST的性质,使得原本对全部像素的比较,只需要对父节点,子节点的比较即可,每次计算代价聚合值,从上述公式看来只需要一次加法,一次减法和三次乘法,这样便极大提高了速度,同时又考虑到了全局像素的影响。在middlebury上数据集的平均计算时间仅为90毫秒。
有网友认为的不足有:
(1)非局部MST用到了整个图像,相当于每个像素都和其他所有像素有权值联系,但是实际上距离得远的像素点之间说不定就没有相关性,这样做反而觉得有点多余,所以我认为可以对图像进行分割操作,在每个分割块内做MST,但是这个方法可能复杂度比较高,但是至少可以把目标和背景分开再进行操作,应该可以更准确。
(2)这种方法在高纹理区域效果不是很好(主要由于噪声而且会导致左右视差图不连续),所以可以结合高斯滤波的方法,而且这种方法来自周围的支持像素点相对较少,这一点对高纹理区域来说影响也很大,所以是不是可以在高纹理区域进行一些处理。
(3)最小生成树的冗余性,树连接全局,同时也是它的局限性。
这篇论文主要创新在代价聚集步骤,传统的聚集一般是在局部区域,这样结果也只是局部最优。但是这篇论文提出了非局部代价聚集的方法,用一颗最小生成树(MST)将整个图像联系起来,它以全图的像素作为节点,构建过程中不断删除权值较大的边,边就是相邻像素间的最短距离(即两个节点间相似性最小,本篇文章的相邻像素点指的是4邻域,我认为可以用8邻域来尝试)。然后采用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法进行计算,这样便得到了全图像素之间的关系。然后基于这层关系,构建代价聚合其中树的节点就是图像像素点,这样每个像素点作为根节点的时候都能接受来自整个图像其他像素点的支持,就只是权重的大小随距离远近变得不同而已,但至少不是局限在一个区域或者窗口里,这就是本文的创新点。但是基于每个像素点作为根节点循环,计算复杂度就比较高,作者又提出了两次遍历MST,第一次是从叶节点向根节点聚集,更新每个根节点的代价聚集值(即图中的V4节点),第二次是从根节点向叶节点聚集,更新每个叶节点的代价聚集值(图中的V3节点)。计算第二次的聚集值时,就不需要再一次以这个点为根节点,因为第一次聚集的值可以放在第二次用,只不过做个减法就好,这样省去了复杂并且不断重复的死板运算。
我把论文中一般公式具体化:
----------------------------------------------------------------------------------------------------------------------------------------------
算法基本上上面那些,在代码部分的解析如下
~ 程序首先先生成了两幅图像的梯度,这里面梯度实际上只考虑的每行某像素和其后面像素与它的插值,并没有考虑周围其他像素的差值.下图是左图像生成的梯度图
直接使用上面的梯度和颜色进行匹配的结果如下图所示(也就是程序中的m_cost_vol)
论文解析 "A Non-Local Cost Aggregation Method for Stereo Matching"的更多相关文章
- 基于MST的立体匹配及相关改进(A Non-Local Cost Aggregation Method for Stereo Matching)
怀着很纠结的心情来总结这篇论文,这主要是因为作者提虽然供了源代码,但是我并没有仔细去深究他的code,只是把他的算法加进了自己的项目.希望以后有时间能把MST这一结构自己编程实现!! 论文题目是基于非 ...
- [Network Architecture]Mask R-CNN论文解析(转)
前言 最近有一个idea需要去验证,比较忙,看完Mask R-CNN论文了,最近会去研究Mask R-CNN的代码,论文解析转载网上的两篇博客 技术挖掘者 remanented 文章1 论文题目:Ma ...
- LTMU论文解析
LTMU 第零部分:前景提要 一般来说,单目标跟踪任务可以从以下三个角度解读: A matching/correspondence problem.把其视为前后两帧物体匹配的任务(而不考虑在跟踪过程中 ...
- CVPR2020论文解析:实例分割算法
CVPR2020论文解析:实例分割算法 BlendMask: Top-Down Meets Bottom-Up for Instance Segmentation 论文链接:https://arxiv ...
- 分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析
分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析 Hierarchical Conditional Relation Networks for Video Question ...
- 摄像头定位:ICCV2019论文解析
摄像头定位:ICCV2019论文解析 SANet: Scene Agnostic Network for Camera Localization 论文链接: http://openaccess.the ...
- 目标形体形状轮廓重建:ICCV2019论文解析
目标形体形状轮廓重建:ICCV2019论文解析 Shape Reconstruction using Differentiable Projections and Deep Priors 论文链接: ...
- 深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析
深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析 What Else Can Fool Deep Learning? Addressing Color Constan ...
- 面部表情视频中进行远程心率测量:ICCV2019论文解析
面部表情视频中进行远程心率测量:ICCV2019论文解析 Remote Heart Rate Measurement from Highly Compressed Facial Videos: an ...
随机推荐
- configure.ac:8: error: Autoconf version 2.64 or higher is required
安装Resource Agents的时候出现错误:configure.ac:9: error: Autoconf version 2.63 or higher is required.指的是autoc ...
- vueAdmin使用动态路由时踩坑
在路由守护方法router.beforeEach中如果有使用动态路由,注意此时的路由对当前的router无效,下次路由时才起效. 导致的问题是---- 当页面刷新或重新打开页面时,无法找到当前路由(跳 ...
- Android 冷兵器 之 tools
代码地址如下:http://www.demodashi.com/demo/12612.html 前言 Android开发在所难免的就是UI的预览和调整,一般情况下都是直接run看效果,或者是使用AS的 ...
- C#动态生成XML
通过C#动态生成图书信息XML文件(Books.xml),文件如下: <?xml version="1.0" encoding="iso-8859-1"? ...
- go http请求基础
1.请求方法: get post get 加请求参数,请求参数会加到url后面 post加请求参数,请求参数会放在body里面 请求方式:1.直接在url后面加参数 如:http://www.tes ...
- iWatch开发:UI 组件说明
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hlbmppZTEyMzQ1Njc4/font/5a6L5L2T/fontsize/400/fill/I0 ...
- Atitit.Java exe bat 作为windows系统服务程序运行
Atitit.Java exe bat 作为windows系统服务程序运行 1. 使用SC命令+srvany.exe (不错,推荐)+net start1 1.1. First 创建一个java的运 ...
- JavaScript的toString()
JavaScript toString() 方法 JavaScript Boolean 对象 定义和用法 toString() 方法可把一个逻辑值转换为字符串,并返回结果. 语法 booleanObj ...
- nandecc--am335x
u-boot支持下列NAND ECC算法: 1.S/W ECC(Hamming code),软件ECC校验. 2.H/W ECC(Hamming code,BCH8). BCH Flash OOB L ...
- sublime使用技巧(2)-- 实用插件推荐【持续更新】
1.Auto semicolon 在括号内输入分号,会自动把光标移到行尾然后再输入分号. 2.DocBlockr 补全注析格式,例如在函数上面输入/** + Enter,就会自动补全函数的注析说明. ...