FireEyes火眼双目系列教程3--如何使用SGBM计算视差,并变成伪彩色显示

        FireEyes双目软件本身具备视差计算的功能,并且会以伪彩色的形式显示出来。在视差算法选项中,一定要选SGBM项,它会比BM算法可靠很多。

        配置完成后,点击视差显示,即可实时计算视差。当然,这些都是建立在有标定文件,且执行校正后的条件下的。在视差页面,滚动滚轮,可以无限放大缩小,方便观察。可惜的是,没有实时计算距离的功能,多少有些遗憾。希望后期软件可以迭代更新加上。

        如果不想使用软件,那么我们可以借用opencv,自己配置一个视差计算的例程出来。代码如下:

self.matcher = cv2.StereoSGBM_create(
                    #minDisparity=config['sgbm_min_disp'],
                    numDisparities=config['sgbm_num_disp'],
                    blockSize=config['sgbm_block_size'],
                    P1=8 * 1 * config['sgbm_block_size'] * config['sgbm_block_size'],
                    P2=32 * 1 * config['sgbm_block_size'] * config['sgbm_block_size'],
                    #disp12MaxDiff=-1,
                    uniquenessRatio=10,
                    speckleWindowSize=100,
                    speckleRange=1                )
disparity = matcher.compute(left_rectified, right_rectified)

        注意,numDisparities代表有多少个视差,常用的有64、128等,blocksize代表了匹配块的大小,一般取5、7、9、11、13等均可。这里面有P1和P2两个惩罚项,一般情况下,P2需要是P1的4~8倍为宜。uniquenessRatio代表相似度,如果为10,则代表相似度在90%以上,即表示附近有跟它太相似的,就认为视差不可靠,可置为0或-1。

        配置完成后,直接调用compute计算就可以了。非常简单。

        但是,这样得到的视差,是灰度图,看起来非常不直观,自己渲染的话,也不易选择到合适的渲染方式,那么该怎么办呢?

disparity[disparity < 0] = 0
image2_u8 = (disparity / 16*(256.0/num_disp)).astype(np.uint8)
dis_color = cv2.applyColorMap(image2_u8, 2)

        如上所示,我们首先把视差里面小于0的(-1)都变成成,这是为了方便向uint8转换。

        之后,调用applyColorMap,将其转换成伪彩色。至于乘以(256/num_disp)是为了归一化,让色彩空间更饱满,这个也非常重要。

        执行上面的代码,我们就可以获得完美的深度彩色渲染图像了。

FireEyes 火眼 双目相机 USB摄像头模组 立体视觉 工业 U90/U140-淘宝网 (taobao.com)

软件及代码地址:

FireEyesGit/FireEyesUsbSoftware: stereo calibrate and match tools for FireEyes U90/140 (github.com)

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值