0

私は基本的に手描きの回路図の画像からコンポーネントと接続を抽出する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

これは、実行時に取得した入力と出力です。

ここに画像の説明を入力

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

与えられたスクリーンショットでは、出力画像には検出された線がほとんど表示されておらず、一部の線が部分的に検出されています。コンポーネントを接続するために使用されるすべてのワイヤを実際に検出する必要があります

この要件を達成するために、ハフ変換関数を調整したり、他の方法を使用したりするにはどうすればよいですか?

4

1 に答える 1

1

(lines(l).theta >= 355 && lines(l).theta < 5)は不可能です。そのため、受け入れられるシータ値は 0 と [86,94] のみです。

正直なところ、水平線と垂直線が得られる理由が完全にはわかりません。結果はラジアンになり、明らかに 86 ラジアンから 94 ラジアンは意味がありません。

そうは言っても、0 度 / 0 ラジアンだけでなく、180 度 / pi ラジアンもチェックしたいということです。270 度 = 3/2 pi = -1/2 pi についても同様です。

于 2016-04-07T20:47:13.300 に答える