2015-04-07 34 views
1

我是新來opencv,我試圖運行一些代碼..我需要從視差map.i'm使用v視差圖一個兩個整形的圖像,以獲得立體匹配,然後密集視差map.i得到了視差圖,當我嘗試tronsform它對v視差我什麼也沒有出現一個空的窗口出現。我指的是算法提出的: Raphael Labayrade,Didier Aubert,Jean-Philippe Tarel在他們的文章中關於立體視覺的實時障礙物檢測 通過「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; 
} 

回答

1

用於V視差圖像: 使用大小的矩陣(行,MAXVAL),並通過1的視差圖像,其中所述視差的每一行增加相應的元素值對應於v-視差圖像中的列。

沿着行重複這個u-視差圖像。

0

讓我們將差異圖像表示爲尺寸的差異(高度,寬度)。 輸出是大小(height,maxDisp)的v-disparity圖像,其中maxDisp是視差圖像中的最大值。讓我們表示它vdisp。是 算法(僞代碼)如下:

對於每一個我在disp.Rows DO

For each j in disp.Columns  

    if disp(i, j) > 0 Then 

     vdisp(i, disp(i,j)++ 

    end 
end 

如果你看看你的V-視差圖像,直線的垂直線代表的面障礙物和直線表示地面平面。您可以使用霍夫變換來識別v-視差圖像中的直線。 在論文「基於V視差的障礙物檢測方法的FPGA實現」中有很好的解釋。