如何获得视差图坐标的相应像素颜色

时间:2019-04-29 16:26:31

标签: c++ opencv

我目前正在从事一项工作,包括相机校准,立体声校准以及最后的立体声匹配。为此,我被允许使用可用的OpenCV示例和教程,并使其适应我们的需求。 尽管前两个部分没什么大问题,但有关立体声匹配部分的问题是:

我们应该从提供的两个图像的视差图中创建.ply格式的彩色点云。 我使用以下代码作为模板: https://github.com/opencv/opencv/blob/master/samples/cpp/stereo_match.cpp 我从作业的前两个部分获得了内部文件和外部文件。

我的问题是,如何从原始图像和视差图获得每个3D点的相应颜色?

我猜想视差图的每个坐标都对应于两个输入图像共享的像素。但是如何获得那些像素值?

编辑:我知道视差图的每个元素的值都代表左右图像之间相应像素的视差。但是,如何从视差图的坐标中获取相应的像素? 例: 我在坐标(x,y)的视差值为128。128表示深度。但是我怎么知道原始左图像或右图像中的哪个像素对应呢?

其他问题 我还有关于StereoSGBM以及哪些参数有意义的问题。 这是我的图片(缩小后用于上传):

左:

enter image description here

enter image description here

哪个给我这些校正后的图像:

enter image description here

enter image description here

由此我得到这张视差图像:

enter image description here

对于视差图像:这是我使用blocksize = 3和numDisparities = 512可以获得的最佳结果。但是我完全不确定那些参数是否有意义。这些价值观明智吗?

2 个答案:

答案 0 :(得分:1)

  

我的问题是,如何从原始图像和视差图获得每个3D点的对应颜色?

因此,视差图仅是左右图像中对极平面中匹配像素之间的距离。这意味着,您只需要像素强度来计算视差即可,这反过来又意味着,您可以只在灰度级左右图像上或左右图像的任何通道上进行此计算。

我非常确定您正在计算的视差图像会在从原始rgb图像获得的灰度图像上运行。如果要计算色差图像,则只需提取左右图像的各个颜色通道,然后计算相应的色差图通道。结果将是3通道视差图。

  

其他问题我还有关于StereoSGBM以及哪些参数有意义的问题。这是我的图片(缩小后用于上传):

在大多数情况下,从来没有一个好的答案。为此,您需要一个参数调谐器。以https://github.com/guimeira/stereo-tuner为例。如果需要,您应该可以很容易地在开放式简历中编写自己的内容。

答案 1 :(得分:0)

好的,解决此问题的方法是使用OpenCV中的projectpoint()函数。 基本上从视差图像计算3D点,并将其投影到2D图像上,然后使用您击中的颜色。