0

私は基本的に手描きの回路図の画像からコンポーネントと接続を抽出するmatlab画像処理プロジェクトに取り組んでいます。どのようにMATLABのハフ変換を使用して手を引いた線を検出するには?

骨格画像を事前に取得して取得した後、コーナーと接続パスを識別できるように、ハフ変換を使用して線を検出しようとしました。ここ

コードである:

[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

を私はすべての線分を検出する必要があり、ほぼ水平であることまたは垂直で、長さが最小であり、手描きの性質によるいくつかの不規則性を伴う。

出力画像に検出された行がほとんどなく、一部の行が部分的に検出されています。コンポーネントを接続するために使用されるすべてのワイヤを実際に検出する必要があります

この要件を満たすには、どのようにハフ変換関数をチューニングすることができますか?

答えて

1

(lines(l).theta >= 355 && lines(l).theta < 5)は不可能です。唯一認められているΘ値は0と[86,94]です。

正直言って、私はそれが水平線と垂直線を与える理由を完全に理解していません - 結果はラジアンで、明らかに86ラジアンから94ラジアンまでは理にかなっていないと思います。

0度/ 0ラジアンだけでなく、180度/ piラジアン、270度= 3 /2π= -1/2piもチェックしたいと思っています。

関連する問題