2013-03-23 70 views
0

我想明白它是如何工作的。我相信我理解了這個概念:瞭解線條的霍夫變換

對於所有的邊緣像素,找出所有通過它的線,並且對於這些線中的每一條線,累加器數組值(對應於斜率和y軸截距)均爲1.線跨過許多邊緣點的數據將在累加器數組中得到許多選票。

我不明白的是在我發現的代碼中實現它。首先,我相信我們可以假設在應用邊緣檢測器後,邊緣像素的值爲非零值,而非邊緣值爲0.在我的教科書代碼中,程序使用零值搜索所有點,對於所有通過的線路,將相應的累加器值增加1.我認爲它會查找通過邊緣點(NON-ZERO)的線,而不是空的空間?有人可以向我解釋這部分嗎?

以下是我在圖像處理教科書中找到的Matlab代碼。我沒有測試它,因爲我正在使用C++。 %消息是我對特定行的作用的理解:

function HTline(inputimage) 

[rows,columns] = size(inputimage); 

acc1 = zeros(rows,91); 
acc2 = zeros(columns,91); 

for x = 1:columns 
    for y = 1:rows 
    if(inputimage(x,y)==0     %If pixel=0, i.e., non-edge 
     for m = -45:45      %For a certain range of slope values 
     b = round(y-tan((m*pi)/180)*x); %Calculate y-intercept for slope values 
     if (b<rows & b>0)     %If y-intercept is within the image height 
      acc1(b,m+45+1)=acc1(b,m+45+1)+1; %Increase accumulator values. What? 
     end 
     end 
     for m=45:135       %etc 
     b=round(x-y/tan((m*pi)/180)); 
     if(b<columns & b>0) 
      acc2(b,m-45+1)=acc2(b,m-45+1)+1; 
     end 
     end 
    end 
    end 
end 

回答

0

威廉,它取決於你如何定義邊緣所在。通常情況下,圖像被轉換爲​​二進制掩碼,邊緣值被存儲爲trues(1s),而非邊緣值被存儲爲false(0s),所以您的擔心看起來是正確的。也許如果你可以從你的書中添加一些上下文或一些解釋,那麼他們可以提供爲什麼他們使用假(0s)作爲邊緣值的理由,但是任何一種表示方式都不能提供優於另一種的優勢。這只是公約。

請注意,您進行hough轉換的方式是一種較舊的技術。大多數現代技術使用「正常腳」參數化(rho/theta)來說明線條垂直的情況。此外,有些將使用sobel濾波器直接計算邊緣點的梯度向量,這些向量指向垂直於該線的方向。這允許您直接計算邊緣點的單個rho/theta值,而不是計算通過這些點的所有線條的可能性(如在代碼中所做的那樣)。

但無論如何,對於您的情況,斜率和截距用於參數化線條。這些值被分類,然後放入累加器,如代碼中所示。對於單個邊緣點,有無限多條線可以通過它,但是通過僅使用斜率和截距的裝倉值來限制這些線。在你的情況下,你可以使用91個可能的斜率值。共線點將導致某些「箱」積累比其他值更多的值。累加器中的這些局部峯值指示圖像內的線(或者更具體地說,如果使用邊緣檢測器,則是邊緣)的位置。關於hough transform的維基百科文章給出了一個很好的例子。希望這有助於你的問題。

+0

不幸的是,雖然這本書可以理解的解釋這個概念,它然後把代碼中沒有太多直接的參考數字,只是說,該行通過採取蓄能器的最大發現,所以它不是黑色的倒置和白色。由於我是學生,我傾向於認爲我錯了,但我認爲是時候在C裏做點什麼,看看會發生什麼。感謝您的詳細回覆,我會記住您所說的內容。 – William 2013-03-23 05:22:50

+0

@William如果你不知道,你應該在MATLAB嘗試了這一點,因爲這將是更容易測試和東西。但是如果C是你的東西,那麼繼續。另外,就像我說的,注意你上面的代碼有點陳舊。我實際上有來自我的機器視覺類的代碼,其中我基於rho/theta參數化和梯度/ sobel方法實施了hough變換。如果您有興趣,我可以將其附加到我的答案中。最後,如果我的回答回答了你的問題,那麼接受它是個好習慣。 – Justin 2013-03-23 05:31:08

+0

我可能會堅持C並按照自己的步調一點一點地學習,不過謝謝。順便說一句,我意識到我的評論上面的錯誤,也許它實際上是倒置的黑色和白色。抱歉忘了接受! – William 2013-03-23 05:59:50