を使用したいそれは私が直接(があった分岐点を集めることができなかったので、あなたの入力画像は、あなたが投稿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
と考えてください。一方の終点が他方の終点に含まれる場合、a
とb
は重複しています。含まれているとは、あるものの開始x点が他方のものより小さいか等しいかどうかを意味し、終了x点はそれより大きいか等しい。あなたの場合、 "山"は削除したいセグメントと重なっています。削除するそれぞれのものを判断するには、その領域を検討してください。しかし、これらはセグメントなので、領域は無意味な用語です。それを処理するために、私はセグメントの端点を連結し、単純に内点として領域として使用しました。はっきりと分かるように、下部の重なった部分の面積は非常に小さいので、基本的に線であり、「山」セグメントを維持しながらそれを破棄します。このステップを実行するには、画像u
は基本的に重要です。輪郭の追跡をどこで開始し停止するかを明確に示しているからです。イメージh
をそのまま使用した場合、輪郭の点の開始位置と終了位置を決定することが困難になります(ラスタ順に間違ったオーバーラップ表示が発生する)。
セグメントを1つ(現在は3つ)として再構成するには、廃棄したポイントをg
からh
にして、今削除された下位セグメントに属していないポイントを使用します。
あなたはそれがいつも3とは言えないと言いました...これの背後にある理由は何ですか? 私の理解のために、そのパターン(3の)に合う、常に1pxの幅の広い線/輪郭です。 – mchlfchr
@mchlfchr: 'bwlabel'ステップでは、3つの切断された行にラベル1,2,3がそれぞれ割り当てられます。削除したい3というラベルの付いた部分ではない場合もあります。 – Jonas
どのような場合でも「アウトター」行を選択することはできませんか? 私は「浮かび上がらせる」方法を理解していたので、このような三重接続構造を分離していますか? 次のステップでは、私はアウトターラベルを選択しましたが、そのオプションhbreakは何らかの理由で機能していません。 – mchlfchr