0

バイナリ イメージの輪郭の真直度のメトリックを取得したい (比較的高速)。画像は次のようになります。

輪郭

ここで、赤いボックス内の輪郭は、できれば削除したいものです。彼らはまっすぐではないので。これらは私が試したことです。私は現在MATLABで実装しています。

1.各等高線の行と列の座標を収集し、導関数を取得します。まっすぐなオブジェクト (四角形など) の場合、導関数はほとんどが低く、(四角形の角に沿って) いくつかのスパイクがあります。

問題: 収集された座標が順不同です。つまり、輪郭をパスとしてイメージした場合に、輪郭が通過する順序が異なります。したがって、導関数はときどきとてつもなく高い値を示します。また、輪郭は完全にまっすぐではなく、エッジ検出アルゴリズムの出力であるため、不連続性がある可能性があると想像できます (下部の長方形を参照してください。完全にまっすぐではありませんが、人間の目はそれが長方形であることを理解できます)。 )。

2.polyfit について考えようとしましたが、この輪郭の問題がまた出てきます。長方形なので、そのポイントセットにポリフィットを適用する方法がわかりません。

また、縦横に分布する輪郭を削除したいと思います。基本的に、これは車線検出アルゴリズムです。したがって、レーンを完全に垂直/水平にすることはできません。

何か案は?

4

2 に答える 2

2

もっと特徴を調べるべきですregionprops。公平を期すために、この回答からスクリプトを盗みましたが、次のとおりです。

BW = imread('lanes.png');
BW  = im2bw(BW);
figure(1),
subplot(1,2,1);
imshow(BW);

cc = bwconncomp(BW);
l = labelmatrix(cc);

a_rp = regionprops(CC,'Area','MajorAxisLength','MinorAxislength','Orientation','PixelList','Eccentricity');
idx = ([a_rp.Eccentricity] > 0.99 & [a_rp.Area] > 100 & [a_rp.Orientation] < 70 & [a_rp.Orientation] > -90);

BW2 = ismember(l,find(idx));

subplot(1,2,2);
imshow(BW2);

プロパティをいじることができます。'Orientation''Eccentricity'、および'Area'は、おそらくいじりたいパラメーターです。また、長軸と短軸の長さの比率を台無しにしましたが、偏心は基本的にこれを行います(偏心は楕円がどの程度「円形」であるかの尺度です)。出力は次のとおりです。

ここに画像の説明を入力

を使用した車線検出について、特にmatlabからの優れたビデオを実際に見ましたregionprops。見つけてリンクできるか試してみます。

于 2013-03-23T03:57:50.793 に答える
1

を使用してイメージを分割し、 を使用して、接続された各オブジェクトでbwlabel個別に作業できます。これは、注文の問題を解決するのに役立ちます。bwlabelfind

メートル法については、今思いつくのは、楕円に合わせて、a/b(長軸/短軸) の比率 (基本的には離心率) をパラメーターに設定することだけです。たとえば、(完全でなくても) 直線は、長軸が非常に大きく、短軸が非常に小さい楕円に適合します。たとえば、比率のしきい値を 10 以上に設定するとします。楕円へのフィッティングは、たとえば、このFEX 送信を使用して行うことができます。

于 2013-03-23T03:58:06.953 に答える