立体匹配十大概念综述---立体匹配算法介绍_立体匹配算法decnet-程序员宅基地

技术标签: 机器视觉3D  

from:https://blog.csdn.net/wintergeng/article/details/51049596

一、概念

        立体匹配算法主要是通过建立一个能量代价函数,通过此能量代价函数最小化来估计像素点视差值。立体匹配算法的实质就是一个最优化求解问题,通过建立合理的能量函数,增加一些约束,采用最优化理论的方法进行方程求解,这也是所有的病态问题求解方法。

二、主要立体匹配算法分类

1)根据采用图像表示的基元不同,立体匹配算法分为:

       A、区域立体匹配算法(可获取稠密视差图。缺点:受图像的仿射畸变和辐射畸变影响较大;像素点约束窗口的大小与形状选择比较困难,选择过大,在深度不连续处,视差图中会出现过度平滑现象;选择过小,对像素点的约束比较少,图像信息没有得到充分利用,容易产生误匹配。)

       B、基于特征的立体匹配算法(可获得稀疏的视差图,经差值估计可获得稠密视差图。可提取点、线、面等局部特征,也可提取多边形和图像结构等全局特征。缺点:特征提取易受遮挡、光线、重复纹理等影响较大;差值估计计算量大)

       C、基于相位立体匹配算法(假定在图像对应点中,其频率范围内,其局部相位是相等的,在频率范围内进行视差估计)

2)依据采用最优化理论方法的不同,立体匹配算法可以分为:

       A、局部的立体匹配算法

       B、全局的立体匹配算法

三、匹配基元(match primitive)

目前匹配算法中所采用的匹配基元可以分成两大类:

1)在所有图象像素点上抽取量测描述子

      A、像素灰度值(最简单、直接,但必须在同一光照条件下获得)

      B、局部区域灰度函数(主要是利用求得在各种大小不同窗口中灰度分布的导数信息,描述像素点周围的结构矢量。)

      C、卷积图象符号(利用各种大小算子与图象进行卷积,用灰度梯度局部极大值或极小值作为特征信息,描述整个图像)

2)图像特征

      A、过零点

      B、边缘(由于边缘是图像特征位置的标志,对灰度值的变化不敏感,边缘是图像匹配的重要特征和描述子)

      C、角点(虽然其没有明确的数学定义,但大家普遍认为角点,即二维图像亮度变化剧烈的点或边缘曲线上曲率极值点)

------------------------------------------------------------------基元-----------------------------------------------------------------------------------------

  1. 立体视觉匹配基元:匹配基元是用以进行立体匹配的图像特征,匹配基元的选择,要考虑基元的稳定性、敏感性、可行性和能否表示图像。

------------------------------------------------------------------基元end------------------------------------------------------------------------------------------

四、区域匹配算法

        基本原理是给定在一幅图像上的某一点,选取该像素点邻域内的一个子窗口,在另一幅图像中的一个区域内,根据某种相似性判断依据,寻找与子窗口图像最为相似的子图,而其匹配的子图中对应的像素点就为该像素的匹配点。

        一般单纯的区域匹配都遇到如下限制:

       1)针对弱纹理或存在重复纹理的区域,匹配结果不好

       2)该算法不适应于深度变化剧烈的场景

       3)对光照、对比度和噪声比较敏感

       4)子窗体的大小很难选择

五、特征匹配算法

        特征的匹配算法,主要是基于几何特征信息(边缘、线、轮廓、兴趣点、角点和几何基元等),针对几何特征点进行视差估计,所以先要提取图像的特征点,尽而利用这些特征点的视差值信息来重建三维空间场景。

        匹配所需要的主要步骤:图像预处理、提取特征、特征点的匹配获取稀疏视差图,如果想得到稠密的视差图,需要采用插值的方法。

六、全局匹配算法

        全局立体匹配算法主要是采用了全局的优化理论方法估计视差,建立全局能量函数,通过最小化全局能量函数得到最优视差值。

        全局匹配算法得到的结果比较准确,但是其运行时间比较长,不适合实时运行。主要的算法有图割(graph cuts)、信念传播(belief propagation)、动态规划等算法。

七、局部匹配算法(个人觉得跟区域匹配类似,角度不同而已)

        主要是采用局部优化方法进行视差值估计,局部立体匹配算法有 SAD,SSD 等算法,与全局立体匹配算法一样,也是通过能量最小化方法进行视差估计,但是,在能量函数中,只有数据项,而没有平滑项。

       主要分为三类:自适应窗体立体匹配算法、自适应权值的立体匹配算法和多窗体立体匹配算法。

八、立体匹配约束

1)极线约束
2)唯一性约束

3)视差连续性约束

4)顺序一致性约束

5)相似性约束

----------------------------------------------------------------匹配约束--------------------------------------------------------------------------------------

  1. 约束准则具有缩小匹配搜索的范围,降低误匹配,同时提高匹配效率的功能。
    • 极线约束:

      如图所示,三维空间的一个映射点,其匹配点必定在另一图像的极线上,理想情况下,匹配点对位于同一水平线上即坐标y值相同。故只需在对应的水平线上搜素匹配点,大大提高了匹配效率。

      双目立体视觉—基本约束准则

    • 唯一性约束:

      三维空间点至多只一个图像上的映射点(遮挡则没有映射点),匹配时左右图像上只有唯一一个匹配点。

      双目立体视觉—基本约束准则

    • 连续性约束:

      三维空间中物体表面是光滑的,匹配得到的视差图大部分情况下是连续且光滑变化的。一般使用较小的视差梯度降低匹配的搜索范围和待匹配点的数量以提高匹配速度。

      双目立体视觉—基本约束准则

    • 相似性约束:

      三维空间中的物体在不同视角下投影产生的匹配基元(点、块、线)必须要有相同或相似的属性。由于光照等因素的影响,相似性约束具有局限性。

      双目立体视觉—基本约束准则

    • 顺序一致性约束:

      三维空间中物体上的点的位置信息在映射到两幅图像上的位置顺序不会改变。这是不透明物体表面投影的几何学必然性。

      双目立体视觉—基本约束准则

    • 平滑性约束:

      假设三维空间中物体表面是平滑的,则视差图上除物体边界位置会有大的视差波动以外,其他位置上匹配视差的变化很小。

      双目立体视觉—基本约束准则

    • 左右一致性约束:

      如图所示,参考图上像素点p点在匹配图上的点是q,则参考图上像素点q在匹配图上是p。如果两次搜索的结果不对应,则改点不可靠。常用于遮挡区域的检测。

      双目立体视觉—基本约束准则

    • 视差范围约束:

      两台摄像机之间具有一定的距离,在沿极线搜索时,搜索的范围应小于一定的阈值。视差范围约束限制了搜索的范围。

      双目立体视觉—基本约束准则

-----------------------------------------------------------------匹配约束end----------------------------------------------------------------------------------

九、相似性判断标准

1)像素点灰度差的平方和,即 SSD

2)像素点灰度差的绝对值和,即 SAD

3)归一化交叉相关,简称 NCC

4) 零均值交叉相关,即 ZNCC

5)Moravec 非归一化交叉相关,即 MNCC

6) Kolmogorov-Smirnov 距离,即 KSD

7)Jeffrey 散度

8)Rank 变换(是以窗口内灰度值小于中心像素灰度值的像素个数来代替中心像素的灰度值)

9)Census 变换(是根据窗口内中心像素灰度与其余像素灰度值的大小关系得一串位码,位码长度等于窗口内像素个数减一)

各类代码实现参考:https://blog.csdn.net/liyingjiang22/article/details/53156331

十、评价参数

        立体匹配算法是一个病态问题,一般通过建立能量函数,利用最小化能量函数,和一些约束条件,采用最优化理论方法进行求解方程。

        公认的定量评价参数有:均方根误差(Root-mean-squared)和误匹配率(percentage of bad matching pixels)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aidem_brown/article/details/81284408

智能推荐

hibernate 的dialect(方言)配置_hibernate.dialect配置-程序员宅基地

文章浏览阅读4.2k次。转自:https://blog.csdn.net/baidu_40487407/article/details/93042568RDBMS方言RDBMSDialectDB2org.hibernate.dialect.DB2DialectDB2 AS/400org.hibernate.dialect.DB2400DialectDB2 OS390org.hibern..._hibernate.dialect配置

Linux---wifi驱动移植及调试(SSV6x5x)_linux wifi驱动-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏21次。南方硅谷ssv6x5x驱动移植_linux wifi驱动

Win10系统怎么使用U盘重装(图文并茂)_windows10下载u盘安装-程序员宅基地

文章浏览阅读6k次,点赞6次,收藏56次。本教程一共分为了10个步骤,每一个步骤都有图片,相对来说非常详细了,欢迎大家讨论与学习!_windows10下载u盘安装

MyEclipse中Maven设置jdk版本1.8_解决报错问题-程序员宅基地

文章浏览阅读3k次。今天安装了jdk1.8、tomcat8、和maven3.5.2,弄好后在myeclipse新建了一个maven项目,项目默认是jdk1.5,如图一,我把它改成jdk1.8,项目就报错了,如图二,然后update project后又变成jdk1.5了。图一:图二:解决方法:打开maven项目的pom.xml文件, 在build节点下加入下面这段代码 ,然后在选中项目右键--》maven4myecli..._myeclipse jdk没有1.8

html怎样让文字自动换行,CSS怎么设置文字自动换行?-程序员宅基地

文章浏览阅读3k次。CSS怎么设置文字自动换行?下面本篇文章就给大家介绍css设置文字(特别是连续的数字和英文)自动换行的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。关于换行问题,正常字符的换行是比较合理的,但连续的数字和英文字符常常将容器撑大,而不换行,就挺让人头疼了,这就需要进行强制自动换行了。示例:html代码:正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space..._css 让文字根据html源码一样换行

个人联想Thinkpad X1 carbon 笔记本遇到的问题及解决办法_thinkpad x1carbon开机黑屏-程序员宅基地

文章浏览阅读214次。新买的一台联想Thinkpad X1 carbon 12代笔记本,不知道怎么搞的,突然有一天启动后会出现一段黑屏时间,然后等一段时间才会正常,非常地烦人。打电话给联想客服只提供了附近的维修地点,但那得花时间跑去啊。今天下午自己摸索终于解决问题了。没什么好办法,我开始卸载电脑上很多的软件,一是不想用了,二是想卸载的这些软件可能就是导致这个问题出现的原因,在卸载的时候看到电脑上的相关应用,但是在点开相机应用的时候竞然发现相机不能用了。怎么这么奇怪,我想到我以前确实是设置了一下相机的权限,难道是这个问题引起的。_thinkpad x1carbon开机黑屏

随便推点

高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)_高通提取dtb-程序员宅基地

文章浏览阅读5.8k次,点赞3次,收藏61次。本系列导航:高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)高通平台8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)一.什么是DTS?为..._高通提取dtb

ubuntu上opencv源码编译_libjasper-dev源码-程序员宅基地

文章浏览阅读301次。安装必备包sudo apt-get install build-essential cmake libjpeg-dev libtiff5-dev libjasper-dev安装gtkfor opencv3.2 and above:sudo apt-get install libgtk-3-devfor opencv2.4.x:sudo apt-get install libgtk2.0-dev安装v4l2sudo apt-get install v4l2ucp v4l-ut._libjasper-dev源码

安卓设备连接Unity Profiler进行性能分析_unity profile 手机-程序员宅基地

文章浏览阅读4.6k次,点赞2次,收藏7次。内容会持续更新,有错误的地方欢迎指正,谢谢!方式一:手机上运行游戏,以ADB方式连UnityProfiler分析游戏性能1.安卓环境:jdk、sdk:cmd(Win+R打开界面并输入cmd) 里直接输入 java 能正常输出即可 https://www.jianshu.com/p/21babde25dd5 adb:cmd 里直接输入 adb 能正常输出即可 https://www..._unity profile 手机

海思3559AV100实现8k文件编码_rk_mpi_cal_comm_getpicbuffersize-程序员宅基地

文章浏览阅读913次,点赞13次,收藏27次。有些小改动需要在common中改,都很简单就不写了,看一下就知道,另外我这边只测试了8k的一帧编码,如需连续编码视频需要再扩展一下,我这边由于公司项目安排就没再继续做了,测试出来8k文件编码的结果如下,颜色偏差是因为我的YUV和板子支持的YUV的存储顺序不一致,这里时间关系也就不调了,也算是顺利实现了芯片的8k文件编码。第二个函数是SAMPLE_VENC_CheckSensor,应该是检查镜头的分辨率支不支持要编的尺寸,这里我们先试的4k,所以也可以不管这个。_rk_mpi_cal_comm_getpicbuffersize

Android BLE 蓝牙通信库,2024年最新应届生面试销售岗位的面试问题技巧_android蓝牙通信-程序员宅基地

文章浏览阅读919次,点赞12次,收藏10次。然后根据自定义的协议,解析对应的 BeaconItem 中的 bytes,首先创建一个 BeaconParser,传入对应的 BeaconItem,然后根据协议不断读取数据, 如果协议中某个字段占 1 个字节,则调用 readByte,若占用两个字节则调用 readShort,如果要取某个字节的某个 bit 则调用 getBit。// 获取第 1 字节的第 1bit。可以在广播中携带设备的自定义数据,用于设备识别,数据广播,事件通知等,这样手机端无需连接设备就可以获取设备推送的数据。_android蓝牙通信

推荐文章

热门文章

相关标签