重複の可能性:
ぼやけた画像で細い線を検出する
タイトルが示すように、パターンの境界を検出しようとしています。添付画像では、基本的に3つの異なるパターンを見ることができます。
- ストライプラインを閉じる
- 1本の太いL字ライン
- 1と2の間のエリア
私はこれらの 3 つ、たとえば 3 つの別々の画像を分離しようとしています。回答がどこに行くかによって異なりますが、必要に応じてさらに画像をアップロードします。アイデアまたはコードの両方が役立ちます。
重複の可能性:
ぼやけた画像で細い線を検出する
タイトルが示すように、パターンの境界を検出しようとしています。添付画像では、基本的に3つの異なるパターンを見ることができます。
私はこれらの 3 つ、たとえば 3 つの別々の画像を分離しようとしています。回答がどこに行くかによって異なりますが、必要に応じてさらに画像をアップロードします。アイデアまたはコードの両方が役立ちます。
モルフォロジーを使用して、この問題を解決できます(「解決」の値によっては)。まず、画像をより均一にするために、無関係な最小値を削除します。これを行う1つの方法は、高さ<の最小値を抑制する極小値にh-dome変換を使用することですh
。さて、細い線をつなぎたいと思います。それは、長さの水平線を持つ形態学的開口部によって達成されl
ます。線がマージされた場合、現在の画像の極小値が背景になります。したがって、穴を埋めて関連するコンポーネントを取得できます。次のコードは、これらのタスクを要約したものです。
f = rgb2gray(imread('http://i.stack.imgur.com/02X9Z.jpg'));
hm = imhmin(f, h);
o = imopen(hm, strel('line', l, 0));
result = imfill(~imregionalmin(o), 'holes');
今、あなたは決定する必要がありh
ますl
。このパラメーターh
は、入力のスケールとは関係がないため、より簡単であると予想されます。この例では、[10、30]の範囲の値が適切に機能します。l
多分粒度分布分析を決定することは役立つかもしれません。もう1つの方法はresult
、より大きなL字型と細い線の領域に対応する2つの重要な連結成分が含まれているかどうかを確認することです。l
一つずつ増やす必要はありません。二分探索に似た何かを実行できます。
これが、、およびとの画像です([13、19]の画像はここでも同様に機能します)hm
。このアプローチにより、パラメーターの選択に柔軟性がもたらされ、適切な値の選択/検索が容易になります。o
result
h = 30
l = 15
l
2つの最大のコンポーネント間のスペースの面積を計算するには、それらをマージして、新しく接続されたコンポーネント内の黒いピクセルを数えるだけです。
アイデアを捨てるだけです。画像を2値化し、連結成分のラベル付けを行うことができます。次に、幅などの連結成分に対していくつかの分析を実行して、領域を区別します。
ウィンドウ (10x10 ピクセル?) を渡し、そのウィンドウの特徴を収集できます。機能は、そのウィンドウ内の累積勾配 (エッジ)と同じくらい単純なものである可能性があります。ウィンドウが十分に大きい限り、これはさまざまな領域を区別します。
次に、各ウィンドウをデータ ポイントとして使用して、クラスタリングを実行できます。または、パターンがそれほど変化しない場合は、簡単なしきい値を実行して、どのデータ ポイントがどのパターンに属しているかを判断できます (大きな勾配の合計は小さな線に属します)。 : より多くのエッジがあり、最小の勾配の合計は最も太い線に属します: 1 つのエッジのみとその間のエッジは、他の「中間」パターンに属します。
この分類ができたら、必要に応じて個別の画像を作成できます。