如何从视差图中提取视差图

时间:2015-04-07 09:23:58

标签: opencv disparity-mapping

我是opencv的新手并且我试图运行一些代码..我需要从视差图中获取v-disparity地图。我使用两个校正的图像来得到立体匹配,然后得到密集视差图。我得到了视差图,当我试图在v-disparity上对其进行tronsform时,我没有得到任何空窗口。我指的是提出的算法: Raphael Labayrade,Didier Aubert,Jean-Philippe Tarel在他们的文章Stereovision中的实时障碍物检测 非平坦道路几何通过“V-disparity” 表示。 听到是我的代码:

int main(int argc, char *argv[]){       
  int nbrepetion ; 
  Mat img = imread(argv[1],0); 
  Mat image(img.rows,img.cols, CV_8UC1); 
  if(img.empty()){
    printf("Could not load image file\n");
    exit(0);
  }
  int height = img.rows;
  int width = img.cols;
  int a = width ; 
  int k = 0 ; 
  uchar pos =0 ; 
  for(int i = 0; i < height; i++){
    for(int j = 0; j < width; j++)
    for (int k = 0; k < a; k++){
      if(img.at<uchar>(i,j) == img.at<uchar>(i,k)) {
        nbrepetion ++ ; 
      } 
    }  
    if(nbrepetion == 1){
      image.at<uchar>(i,k) = img.at<uchar>(i,k);
    } else {
      pos = img.at<uchar>(i,k); 
      image.at<uchar>(pos,k) = nbrepetion;
    }
    nbrepetion = 0 ;     
  }
  namedWindow("disparityimage", CV_WINDOW_AUTOSIZE);
  imshow("disparityimage", image ); 
  waitKey(0);
  return 0;
}

2 个答案:

答案 0 :(得分:1)

对于视差图像: 使用大小矩阵(rows,maxVal),并为视差图像的每一行增加相应的元素1,其中视差值对应于视差图像中的列。

沿着u-disparity图像的行重复此操作。

答案 1 :(得分:0)

让我们将视差图像表示为大小(高度,宽度)的差异。 输出是大小(高度,maxDisp)的视差图像,其中maxDisp是视差图像中的最大值。让我们来表示它是vdisp。 算法(伪代码)如下:

For each i in disp.Rows DO    
    For each j in disp.Columns      
        if disp(i, j) > 0 Then   
            vdisp(i, disp(i,j)++
        end
    end
end

如果查看v-disparity图像,直线垂直线表示障碍物表面,而直线对角线表示地面平面。您可以使用霍夫变换来识别视差图像中的直线。 在论文“基于V-disparity的障碍物检测方法的FPGA实现”中,它是非常好的解释。