7

以下のシナリオに関して質問があります。 イメージを後処理すると、輪郭が得られました。残念ながら、一番下の行に表示されるように2回接続されています。私が欲しいものを明白にするためには、単にアウトラインにするだけです。 それゆえ、私は拡大して線をマークしました。大きな画像が必要です。私はこの選択から何をしたいです2つの接続された境界の形態的分離

は、私は次の画像では緑とマークされた唯一のoutterの一部です。私の悪い描画スキルには申し訳ありません。 ;)

私はIPTでMatLabを使用しています。だから私はまたbwmorphhbreakオプションで作ることを試みたが、それはエラーを投げた。

どのように問題を解決できますか? 成功した場合は、もう少し詳しく教えてください。 ありがとうございます!

敬具

答えて

1

私もbwmorph

%# find the branch point 
branchImg = bwmorph(img,'branchpoints'); 

%# grow the pixel to 3x3 
branchImg = imdilate(branchImg,ones(3)); 

%# hide the branch point 
noBranchImg = img & ~branchImg; 

%# label the three lines 
lblImg = bwlabel(noBranchImg); 

%# in the original image, mask label #3 
%# note that it may not always be #3 that you want to mask 
finalImg = img; 
finalImg(lblImg==3) = 0; 

%# show the result 
imshow(finalImg) 
+0

あなたはそれがいつも3とは言えないと言いました...これの背後にある理由は何ですか? 私の理解のために、そのパターン(3の)に合う、常に1pxの幅の広い線/輪郭です。 – mchlfchr

+0

@mchlfchr: 'bwlabel'ステップでは、3つの切断された行にラベル1,2,3がそれぞれ割り当てられます。削除したい3というラベルの付いた部分ではない場合もあります。 – Jonas

+0

どのような場合でも「アウトター」行を選択することはできませんか? 私は「浮かび上がらせる」方法を理解していたので、このような三重接続構造を分離していますか? 次のステップでは、私はアウトターラベルを選択しましたが、そのオプションhbreakは何らかの理由で機能していません。 – mchlfchr

2

を使用したいそれは私が直接(があった分岐点を集めることができなかったので、あなたの入力画像は、あなたが投稿1よりも少し異なっているようですあまりにも多くの)。だから、あなたの問題を処理し始めたら、間引きとそれに続く分岐点の検出が考えられます。私はまたそれらを拡大し、間引かれたイメージから取り除く、これは実際に最初のイメージの異なるセグメントの間に接続(4または8)がないことを保証する。

f = im2bw(imread('http://i.imgur.com/yeFyF.png'), 0); 
g = bwmorph(f, 'thin', 'Inf'); 
h = g & ~bwmorph(bwmorph(g, 'branchpoints'), 'dilate'); 

hが切断セグメントを保持しているので、以下の操作は、すべてのセグメントのエンドポイント収集:実際に私はあなたが破棄する内容にいくつかの簡単な分析をしたあなたの問題を解決するために今すぐ

u = bwmorph(h, 'endpoints'); 

を。 2つの異なるセグメント、aおよびbを、hと考えてください。一方の終点が他方の終点に含まれる場合、abは重複しています。含まれているとは、あるものの開始x点が他方のものより小さいか等しいかどうかを意味し、終了x点はそれより大きいか等しい。あなたの場合、 "山"は削除したいセグメントと重なっています。削除するそれぞれのものを判断するには、その領域を検討してください。しかし、これらはセグメントなので、領域は無意味な用語です。それを処理するために、私はセグメントの端点を連結し、単純に内点として領域として使用しました。はっきりと分かるように、下部の重なった部分の面積は非常に小さいので、基本的に線であり、「山」セグメントを維持しながらそれを破棄します。このステップを実行するには、画像uは基本的に重要です。輪郭の追跡をどこで開始し停止するかを明確に示しているからです。イメージhをそのまま使用した場合、輪郭の点の開始位置と終了位置を決定することが困難になります(ラスタ順に間違ったオーバーラップ表示が発生する)。

セグメントを1つ(現在は3つ)として再構成するには、廃棄したポイントをgからhにして、今削除された下位セグメントに属していないポイントを使用します。

関連する問題