0

我正在研究一個基本上從手繪電路圖的圖像中提取組件和連接的matlab圖像處理項目。如何在matlab中使用hough變換檢測手繪線條?

經過預處理和獲得骨架圖像後,我嘗試使用霍夫變換來檢測線條,以便我可以識別角點和連接路徑。

下面是代碼:

[H,T,R] = hough(im); 
peaks = houghpeaks(H,50,'Threshold',ceil(0.3*max(H(:)))); 
lines = houghlines(im, T,R,peaks, 'Fillgap', 20, 'MinLength', 20); 

figure; imshow(im); 
title('Lines detected'); 
hold on; 
for l=1:length(lines) 
    xy = [lines(l).point1; lines(l).point2]; 
    if ((lines(l).theta == 0)||(lines(l).theta >= 355 && lines(l).theta < 5)) || (lines(l).theta < 95 && lines(l).theta > 85) % detect only approx. horizontal and vertical lines 
     plot(xy(:,1),xy(:,2), 'LineWidth', 2); 
    end 
end 

這是我上執行時得到的輸入和輸出:

enter image description here

我需要檢測所有的線段,是幾乎水平的或垂直的,具有最小長度,由於手繪本質而具有一些不規則性。

在給定的屏幕截圖中,輸出圖像只顯示幾條檢測線,部分線被部分檢測到。它應該實際檢測用於連接組件的所有電線

如何調整Hough變換函數或使用任何其他方法來實現此要求?

回答

1

(lines(l).theta >= 355 && lines(l).theta < 5)是不可能的。所以唯一可接受的theta值是0和[86,94]。

說實話,我並不完全明白爲什麼會出現水平線和垂直線 - 我認爲結果會以弧度表示,而顯然86弧度到94弧度是沒有意義的。儘管如此,您不僅要檢查0度/ 0弧度,還要檢查180度/ pi弧度,並且對於270度= 3/2 pi = -1/2 pi也是如此。