调整什么参数才能使视差结果正确?在opencv中使用cv2.StereoBM

瑋呈洪*_*瑋呈洪 3 python opencv

结果

   import numpy as np
   import cv2

   imgL = cv2.imread("C:/Users/admin/jupyter/car/challenge_pictrue/right/right2.jpg ",0)
   imgR = cv2.imread("C:/Users/admin/jupyter/car/challenge_pictrue/left/left2.jpg ",0)

   cv2.imshow('imgL', imgL)
   cv2.imshow('imgR', imgR)

   stereo = cv2.StereoBM_create(numDisparities=16, blockSize=17)
   disparity = stereo.compute(imgL, imgR)
   disparity = cv2.normalize(disparity, disparity, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, 
   dtype=cv2.CV_8U)
   cv2.imshow('disparity', disparity)
   cv2.waitKey(0)
   cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

“我应该调整什么参数才能得到正确的结果?”

Dr *_*hai 6

方法错误。BM 仅适用于动态测量范围较低的简单室内使用。对于室内图像,您只需要调整 Mindisp 和 Disp 数量以及窗口大小。

\n

对于室外来说,情况更为复杂。也许你才刚刚开始。BM 和其他基于全局的方法结果较差。要么因过度拟合而毁容,要么因局部相似性误差而产生条纹效应。

\n

传统 CV 的当前技术水平是 HH 提出的基于 SGM 的方法。对于基于深度学习的方法,没有最好的情况,因情况/数据集而异。lecun \xc5\xbdbontar 的作品“Stereo Matching by Training a Convolutional Neural Network”是我经常用来进行比较的。

\n

在此输入图像描述

\n

尽量不要使用太便宜/低复杂度的算法来执行高级任务。而且如果你用它来控制实际的驾驶动作(因为我看到你其他的Vdispary问题),你会被杀的。我已经在不同的地方对此进行了测试。这不是正确的方法。配备激光雷达或其他主动测距装置以提高安全性

\n

这是我使用 SGM 进行的人口普查得出的结果。您可以参考此链接\n https://docs.opencv.org/trunk/d3/d14/tutorial_ximgproc_disparity_filtering.html进行复制。

\n

在此输入图像描述

\n

白点表示靠近的物体。通过Vdispaity,当没有物体时,它会说附近有物体。这样就会导致汽车突然停下来。你可以参考我在南洋理工大学的论文,了解如何删除它们。并记住正确引用它们

\n

在此输入图像描述

\n

问候

\n

袁胜海博士

\n