我目前正在完成一项任务,包括摄像机校准,立体声校准和最后的立体声匹配。为此,我可以使用可用的OpenCV示例和教程,并根据我们的需求进行调整。虽然前两个部分没有太大问题,但有关立体匹配部分的问题:
我们应该从两个提供的图像的视差图中创建.ply格式的彩色点云。我正在使用此代码作为模板:https://github.com/opencv/opencv/blob/master/samples/cpp/stereo_match.cpp我从赋值的前两部分获取内部和外部文件。
我的问题是,如何从原始图像和视差图中获取每个3D点的相应颜色?
我猜测视差图的每个坐标对应于两个输入图像共享的像素。但是如何获得这些像素值呢?
编辑:我知道视差图的每个元素的值表示左图像和右图像之间的对应像素的视差。但是如何从视差图的坐标中获取相应的像素?示例:坐标(x,y)处的差异值为128. 128表示深度。但是,我如何知道原始左图或右图中哪个像素对应?
其他问题我对StereoSGBM有更多疑问,哪些参数有意义。这是我的(缩小上传)输入图像:
剩下:
对
哪些给我这些纠正的图像:
剩下
对
从这里我得到这个差异图像:
对于视差图像:这是我使用blocksize = 3和numDisparities = 512可以实现的最佳结果。但是我不确定这些参数是否有意义。这些价值观是否合理?
我的问题是,如何从原始图像和视差图中获取每个3D点的相应颜色?
因此,视差图仅仅是左图像和右图像中的极线平面中的匹配像素之间的距离。这意味着,您只需要像素强度来计算视差,这反过来意味着,您可以在灰度左右图像或左右图像的任何通道上进行此计算。
我很确定您正在计算的视差图像是对从原始rgb图像获得的灰度图像进行操作的。如果要计算颜色视差图像,只需要提取左右图像的各个颜色通道,然后计算相应的视差图通道。结果将是3通道视差图。
其他问题我对StereoSGBM有更多疑问,哪些参数有意义。这是我的(缩小上传)输入图像:
对于最普遍的情况,对此没有一个好的答案。你需要一个参数调谐器。以https://github.com/guimeira/stereo-tuner为例。如果你愿意,你应该可以很容易地在open cv中自己编写。
好的,这个问题的解决方案是使用OpenCV中的projectpoint()函数。基本上从视差图像计算3D点并将它们投影到2D图像上并使用您点击的颜色。