2

我是opencv的新手,我正在尝试运行一些代码..我需要从视差图中获取v-视差图。我正在使用两个校正图像来获得立体匹配,然后是密集视差图.我得到了视差图,当我试图在 v-disparity 上对其进行转换时,我什么也没有出现。我指的是 Raphael Labayrade、Didier Aubert、Jean-Philippe Tarel 在他们的文章 Real Time 中提出的算法通过“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;
}
4

2 回答 2

2

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

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

于 2015-07-16T03:50:22.950 回答
1

让我们将视差图像表示为大小(高度,宽度)的分布。输出是大小为 (height, maxDisp) 的 v-disparity 图像,其中 maxDisp 是 disparity 图像中的最大值。让我们将其表示为 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 图像,直线垂直线表示障碍物的表面,直线对角线表示地面平面。您可以使用 Hough 变换来识别 v-disparity 图像中的直线。在论文“基于 V 视差的障碍物检测方法的 FPGA 实现”中,它得到了很好的解释。

于 2017-10-11T14:10:51.357 回答