画像内の直線の消し方

14 Ansichten (letzte 30 Tage)
Chikako Kuriyama
Chikako Kuriyama am 16 Okt. 2017
Bearbeitet: Kei Otsuka am 18 Okt. 2017
画像内の四本あるうちの外側の二本を消したいです。赤色で示している線です。
  1 Kommentar
michio
michio am 16 Okt. 2017
Bearbeitet: michio am 16 Okt. 2017
見やすいよう、画像を貼り付けました。
line.png
line2

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Kei Otsuka
Kei Otsuka am 18 Okt. 2017
Bearbeitet: Kei Otsuka am 18 Okt. 2017
外側の2本をどのように検出するかがポイントになりそうですね。 方法は幾つか考えられますが、モルフォロジー処理の組み合わせで出来そうです。 まず、画像を読みこんで2値化します。
img = imread('line.png'); 
bw = imbinarize(rgb2gray(img));
次に、モルフォロジー処理を使って2線(外側、内側)を太い1本の線に纏めます。また、線以外のオブジェクトは削除します。
bw2 = imclose(bw, strel('square',15));
bw2 = bwareaopen(bw2,500);
ここまでで、以下の画像が得られます。
この画像を垂直方向に平行移動して、移動した後の画像から移動前の画像を引いてあげると、 外側の線のみが取り出せます。
bws = imtranslate(bw2, [0 -1]);
dif = (bws - bw2) > 0;
平行移動させた分若干ずれているので、モルフォロジー処理で膨張させて、 元画像と重なった部分の輝度値を0に落とします。
dif2 = imdilate(dif, strel('square',4));
bwo = bw;
bwo(dif2) = 0;
figure, imshowpair(bw, bwo, 'montage')
元画像と処理後の画像を並べて表示させると、外側の線のみが削除されているのがわかります。
MATLABならコンパクトな記述で色々試せますので、状況に応じて様々なアルゴリズムの組み合わせを試してみて下さい。

Weitere Antworten (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!