我想明白它是如何工作的。我相信我理解了這個概念:瞭解線條的霍夫變換
對於所有的邊緣像素,找出所有通過它的線,並且對於這些線中的每一條線,累加器數組值(對應於斜率和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
不幸的是,雖然這本書可以理解的解釋這個概念,它然後把代碼中沒有太多直接的參考數字,只是說,該行通過採取蓄能器的最大發現,所以它不是黑色的倒置和白色。由於我是學生,我傾向於認爲我錯了,但我認爲是時候在C裏做點什麼,看看會發生什麼。感謝您的詳細回覆,我會記住您所說的內容。 – William 2013-03-23 05:22:50
@William如果你不知道,你應該在MATLAB嘗試了這一點,因爲這將是更容易測試和東西。但是如果C是你的東西,那麼繼續。另外,就像我說的,注意你上面的代碼有點陳舊。我實際上有來自我的機器視覺類的代碼,其中我基於rho/theta參數化和梯度/ sobel方法實施了hough變換。如果您有興趣,我可以將其附加到我的答案中。最後,如果我的回答回答了你的問題,那麼接受它是個好習慣。 – Justin 2013-03-23 05:31:08
我可能會堅持C並按照自己的步調一點一點地學習,不過謝謝。順便說一句,我意識到我的評論上面的錯誤,也許它實際上是倒置的黑色和白色。抱歉忘了接受! – William 2013-03-23 05:59:50