2010-12-07 46 views
2

我一直在使用Matlab和OpenCV/labview在我的應用程序中使用霍夫變換,發現對於某些圖像,霍夫變換給出了明顯錯誤的線條擬合(始終如一)hough在matlab和openCV中的轉換錯誤?

這裏是測試和覆蓋圖像。角度看起來不錯,但是rho關閉了。 alt text

在下圖中,您會看到頂部圖像嘗試將一條線放在原始圖像的左側,底部圖像將一條線放到圖像的右側。

alt text

在Matlab中,我請霍夫功能通過

[H1D,theta1D,rho1D] = hough(img_1D_dilate,'ThetaResolution',0.2); 
用C++

,我修剪OpenCV的HoughLines功能,所以我最終只有我們填充蓄能器中的一部分。請注意,因爲我的theta分辨率是0.2,所以我有900個角度可供分析。 tabSin和tabCos是在函數之前定義的,因此它們只是角度的sin和cos。

請注意,這些例程通常可以很好地工作,但只是針對特定情況下它會按照我所顯示的方式執行。

double start_angle = 60.0; 
    double end_angle = 120.0; 
    double num_theta = 180; 
    int start_ang = num_theta * start_angle/180; 
    int end_ang = num_theta * end_angle/180; 
    int i,j,n,index; 
     for (i = 0;i<numrows;i++) 
     { 
      for (j = 0;j<numcols;j++) 
      { 
        if (img[i*numcols + j] == 100) 
       { 
        for (n = 0;n<180;n++) 
        { 
         index = cvRound((j*tabCos[n] + i * tabSin[n])) + (numrho-1)/2; 
         accum[(n+1) * (numrho+2) + index+1]++; 
        } 
       } 
      } 
     } 

TabCos和tabSin在Labview的定義與此代碼 INT32 I; float64 theta_prec; float64 tabSin [180]; float64 tabCos [180];

theta_prec = 1/180 * 3.14159; for(i = 0; i < 180; i ++) { tabSin [i] = sin(i theta_prec); tabCos [i] = cos(i theta_prec); }

任何建議,將不勝感激

+5

任何代碼?我不喜歡從圖像猜測:) – 2010-12-07 00:18:41

回答

1

我想我會回答放下這個問題。

我正在將rho和theta轉換爲m和b,然後從m和b中計算x和y的值。我相信這可能會在某處導致一些精度錯誤。

這個錯誤是通過直接從rho和theta獲得x和y而不是通過m和b來解決的。

功能是

y = -cos(theta)/sin(theta)*x + rho/sin(theta);