双目Stereo重建算法SGM(1) - 互信息(Mutual Information)

1 概述

对于机器视觉,我目前还是刚起步,可能步还没起来。


近日开始接触双目Stereo的相关算法,主要是对Heiko Hirschmüller在2008年的文献(Hirschmüller 2008)中描述的算法进行研究。该文献,也就是利用互信息(Mutual Information)作为计算matching cost的基础进行stereo重建的工作,在相关领域内的影响还是比较大的。他所使用的cost aggregation的方法,也运用在了目前OpenCV(当前我使用的是3.4.1)中的SGBM方法中。这些日子试图复现文献中的算法,但是由于自己基础薄弱,很多地方并不能完全理解和复现,这里仅作为研究过程中的记录,以备自己进行回溯以及与同行们的交流讨论。


在复现算法的过程中,使用OpenCV 3.4.1和C++编写测试程序。程序运行在Ubuntu 16.04 64bit的系统上。OpenCV是在本地编译为Debug版本,以方便对程序进行调试。


对算法的复现将分步进行,本文主要描述对Mutual Information相关数值的计算。


2 基本假设

为了简化分析,现假设组成双目相机的两个相机是完全一样的,并且已经进行过stereo calibration,所获得图片已经是rectify过的灰度图像,在OpenCV中,这些图像的数据type为CV_8UC1。


3 Warp

为了计算matching cost,需要利用mutual information。根据(Hirschmüller 2008)在文中的描述,计算双目中两个图片的mutual information时,需要针对当前的disparity map,对其中一个图片进行warp处理。这里这个“warp”却也是我第一次遇到,辞典上有一个非常fancy的翻译,叫“翘曲”。其实有“弯曲,扭曲”的含义。我们这里通常可以定义双目中左相机的图像为参考图像(不变),右相机的图像为匹配图像,disparity map即代表右图像向左图像进行匹配时,右图像上每个像素与左图像上最佳匹配像素的水平(x)坐标差。原文要求我们在计算mutual information时,需要对右图像进行warp处理。所谓warp处理,就是对于左图像中的每一个像素(x1i, y1i),根据当前的disparity map,在右图中找到与之match的像素(x2i, y1i),从右图中将这个像素取出,放入一个新图像(warped image)中的(x1i, y1i)位置。这样就可以得到一个warped image。计算mutual information时,将使用左图像和这个warped image进行,而不再使用右图像。

这里实际上存在一个问题。原文并未指明如何进行warp,尤其在左右图像match时对无法得到disparity的像素如何处理。首先,由于左右相机在拍摄同一场景时必定存在一个overlap,这个overlap一般情况下不可能达到100%的FOV(Field of View),在不存在overlap的像素区域,不存在disparity。这个情况原文并未给出处理方法。其次,在实际进行disparity计算中,对应于某些处于overlap区域的像素,优化算法仍可能给出disparity不可靠的结果,并最终认为该像素不具备有效的disparity。对于无disparity结果的像素,原文也未给出处理方法。

我目前采用了naive的方法:对于右图中无disparity的像素,不对其进行warp,保留其在原始位置。这种处理方法并不一定正确,并且暂时无法保证像素覆盖的情况。后面需要进行优化和处理


4 Joint Entropy and Mutual Information

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值