画像内の直線の消し方
9 views (last 30 days)
Show older comments
画像内の四本あるうちの外側の二本を消したいです。赤色で示している線です。
1 Comment
Accepted Answer
Kei Otsuka
on 18 Oct 2017
Edited: Kei Otsuka
on 18 Oct 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ならコンパクトな記述で色々試せますので、状況に応じて様々なアルゴリズムの組み合わせを試してみて下さい。
0 Comments
More Answers (0)
See Also
Categories
Find more on モルフォロジー演算 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!