OpenCV双目匹配BM算法和SGBM算法的速度和精度比较

       OpenCV在双目匹配上所做的工作相当不错,从1.0版本到4.3这么多年的版本迭代,官方始终在优化双目匹配算法。最常用的当属BM算法和SGBM算法了:

       BM全称是BlockMatching,可以理解为一种块匹配算法,这里一个通俗的说法就是,为了找到两张图像中某一对同名点(也就是匹配点对),我们不可能只使用该像素的像素值进行比较,因为像素值相同的点在一副图像中往往不止一个,这时自然想到的就是利用周围的像素点和待匹配点作为一个整体,毕竟在实际生活中,相同的点周围也是相似的嘛。

       SGBM算法Semi-Global-BlockMatching,本质上也是一种快匹配算法。其具体算法原理可以参考这篇博客:https://blog.csdn.net/A_L_A_N/article/details/81490043。

       本文主要是让大家对于这两种算法实际的效果有一个直观的认识,从速度以及精度方面进行详细的比较。

一、速度比较(本文主要使用的OpenCV4.3版本,我的电脑性能是Intel® Core™ i5-8400 CPU @ 2.80GHz × 6):

       首先这里需要说明的是选取的双目比较的图片是OpenCV官方提供的,原始图像分辨率为1282*1110。

     

         三种分辨率(mindisparity=0,ndisparities=48,SADWindowSize=9)

算法时间比较(ms)1182*1110640*480320*240160*120
BM228.83.60.78
SGBM262.552122.5

        从上表中可以明显发现,SGBM算法速度远远慢于BM算法,但是随着分辨率下降,两者之间的差异逐步缩小。两种算法在图像分辨率减小时,所花费的时间也减小,但也不是线性变化。

二、精度比较(mindisparity=0,ndisparities=48,SADWindowSize=9)

     

       上图中,上一行为三种分辨率下的BM算法对应的视差图,下一行为三种分辨率下的SGBM算法对应的视差图。从图中可以看出,SGBM的精度整体上远远高于BM算法的精度。视差图孔洞更少,层次更为分明,这也是工业领域中常用SGBM算法的原因。而当固定匹配参数的时候,随着图像分辨率降低(从1110p--->240p),匹配精度提升,但是当分辨率下降到120p的时候,精度又下降了。说明图像分辨率太低之时,精度也将得不到保证。这主要是由于受到匹配参数的影响,这里我们主要讨论ndisparities所带来的影响。这里以1110p视差图的结果作为分析,如下图所示:

       这里修改了SGBM算法中的ndisparities参数,当增大ndisparities时,匹配精度也得到提升,这里的主要原因在于,图像分辨率越高之时,同名点之间的像素差异也会越大,搜索的最大视差也要增大,这样精度也会有提升。而对于其他参数是否有影响,大家可以根据上传的源代码进行修改测试吧,这里仅仅做一个小结,抛砖引玉!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开始写点什么

无论大小,多多益善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值