【问题标题】:How to acquire depth map from stereo - KITTI dataset如何从立体获取深度图 - KITTI 数据集
【发布时间】:2019-03-13 03:48:48
【问题描述】:

在尝试了 opencv documentation 中所述的示例之后。

当我在 KITTI 图像对上尝试相同的代码时,我得到了这个:

我现在使用的代码是这样的,改变 StereoBM_create 中的参数并没有多大帮助:

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgL = cv2.imread('000002_left.png',0)
imgR = cv2.imread('000002_right.png',0)

stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
#stereo = cv2.StereoBM_create(numDisparities=64, blockSize=17)

disparity = stereo.compute(imgL,imgR)
cv2.imwrite('depth_map.png', disparity)

disp_v2 = cv2.imread('depth_map.png')
disp_v2 = cv2.applyColorMap(disp_v2, cv2.COLORMAP_JET)

plt.imshow(disp_v2)

cv2.imwrite('depth_map_coloured.png', disp_v2)
plt.show()

问题是:如何使深度图更好?

【问题讨论】:

  • 您可能需要使用更多的视差级别 (numDisparities) 或缩小图像直到最大视差在您想要的范围内。 StereoSGBM 也可能比 StereoBM 获得更好的结果。
  • 您确定左右图像吗?当左右颠倒时,我得到类似的结果。

标签: python opencv computer-vision stereo-3d


【解决方案1】:

根据我的经验,StereoBM (OpenCV) 不适用于 KITTI 图像。可能是因为 KITTI 图像要复杂得多。

但是我使用这个取得了很好的效果:

https://github.com/ialhashim/DenseDepth

【讨论】:

    【解决方案2】:

    你应该在opencv中调整立体匹配器的参数。

    这是我创建的类中的一个函数。可以看出我调整了一些参数,比如视差个数,最小视差等:

        def get_stereo_map(self, image_idx):
            left_RGB = self.get_left_RGB(image_idx) # left RGB image
            right_RGB = self.get_right_RGB(image_idx) # right RGB image
            # compute depth map from stereo
            stereo = cv2.StereoBM_create()
            stereo.setMinDisparity(0)
            num_disparities = 16*5
            stereo.setNumDisparities(num_disparities)
            stereo.setBlockSize(15)
            stereo.setSpeckleRange(16)
            # stereo.setSpeckleWindowSize(45)
            stereo_depth_map = stereo.compute(
                cv2.cvtColor(np.array(left_RGB), cv2.COLOR_RGB2GRAY),
                cv2.cvtColor(np.array(right_RGB), cv2.COLOR_RGB2GRAY))
            # by equation + divide by 16 to get true disperities
            stereo_depth_map = (self.storage.focal_pix_RGB * self.storage.baseline_m_RGB) \
                                / (stereo_depth_map/16)
            stereo_depth_map = DataParser.crop_redundant(stereo_depth_map)
            return stereo_depth_map
    

    完整代码请参考我的仓库:https://github.com/janezlapajne/kitty-stereo-dataset-parser 还包括来自激光雷达的地面实况和立体距离图。希望它可以帮助任何人。

    【讨论】:

    • @svenEberth 我希望它现在包含所有重要部分。
    猜你喜欢
    • 2012-04-23
    • 2020-03-06
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 2019-11-30
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多