web-dev-qa-db-ja.com

平均シフトを使用した画像セグメンテーションの説明

誰もが平均シフトセグメンテーションが実際にどのように機能するかを理解するのを手伝ってもらえますか?

ここに私が作った8x8のマトリックスがあります

  103  103  103  103  103  103  106  104   
  103  147  147  153  147  156  153  104   
  107  153  153  153  153  153  153  107   
  103  153  147  96   98   153  153  104   
  107  156  153  97   96   147  153  107   
  103  153  153  147  156  153  153  101   
  103  156  153  147  147  153  153  104   
  103  103  107  104  103  106  103  107

上記のマトリックスを使用すると、平均シフトセグメンテーションが3つの異なるレベルの数値を分離する方法を説明できますか?

100
Sharpie

最初の基本:

平均シフトセグメンテーションは、局所的な均質化手法であり、ローカライズされたオブジェクトのシェーディングまたは色調の違いを減衰させるのに非常に役立ちます。例は多くの単語よりも優れています。

enter image description here

アクション:range-r近傍のピクセルの平均で各ピクセルを置き換え、その値は距離d内にあります。

平均シフトは通常3つの入力を取ります。

  1. ピクセル間の距離を測定するための距離関数。通常はユークリッド距離ですが、他の明確に定義された距離関数も使用できます。 Manhattan Distance は、別の便利な選択肢です。
  2. 半径。この半径内のすべてのピクセル(上記の距離に従って測定)が計算に使用されます。
  3. 値の差。半径r内のすべてのピクセルから、平均を計算するために値がこの差内にあるピクセルのみを取得します

アルゴリズムは境界で明確に定義されていないため、実装が異なると結果が異なることに注意してください。

StackOverflowでは利用できない適切な数学表記なしで表示することは不可能であり、また 他の優れた情報源から であるため、ここで詳細な数学的詳細については説明しません。

マトリックスの中心を見てみましょう。

153  153  153  153 
147  96   98   153 
153  97   96   147   
153  153  147  156  

半径と距離を適切に選択すると、中央の4つのピクセルの値は97(平均)になり、隣接するピクセルとは異なります。

Mathematica で計算してみましょう。実際の数字を表示する代わりに、色分けを表示するので、何が起こっているのかを理解しやすくなります。

マトリックスの色分けは次のとおりです。

enter image description here

次に、合理的な平均シフトを取ります。

MeanShiftFilter[a, 3, 3]

そして、我々は得る:

enter image description here

すべての中心要素が等しい場合(97、BTW)。

Mean Shiftを使用して複数回繰り返して、より均一な色を取得しようとします。数回の反復の後、安定した非等方性構成に到達します。

enter image description here

現時点では、平均シフトを適用した後に取得する「色」の数を選択できないことは明らかです。質問の2番目の部分であるため、その方法を示しましょう。

出力クラスターの数を事前に設定できるようにするために必要なのは、 Kmeans clustering のようなものです。

マトリックスに対して次のように実行されます。

b = ClusteringComponents[a, 3]

{{1, 1, 1, 1, 1, 1, 1, 1}, 
 {1, 2, 2, 3, 2, 3, 3, 1}, 
 {1, 3, 3, 3, 3, 3, 3, 1}, 
 {1, 3, 2, 1, 1, 3, 3, 1}, 
 {1, 3, 3, 1, 1, 2, 3, 1}, 
 {1, 3, 3, 2, 3, 3, 3, 1}, 
 {1, 3, 3, 2, 2, 3, 3, 1}, 
 {1, 1, 1, 1, 1, 1, 1, 1}}  

または:

enter image description here

これは前の結果と非常によく似ていますが、ご覧のとおり、出力レベルは3つしかありません。

HTH!

195
Dr. belisarius

平均シフトセグメンテーションは次のように機能します。

画像データは特徴空間に変換されます feature space

あなたの場合、持っているのは強度値だけなので、フィーチャ空間は1次元のみになります。 (たとえば、いくつかのテクスチャフィーチャを計算すると、フィーチャスペースは2次元になり、強度andテクスチャに基づいてセグメント化されます)

検索ウィンドウは機能空間に分散されています enter image description here

この例では、ウィンドウの数、ウィンドウサイズ、および初期位置は任意です。特定のアプリケーションに応じて微調整することができます

平均シフトの繰り返し:

1)各ウィンドウ内のデータサンプルのMEANが計算されます enter image description here

2。)ウィンドウは、以前に計算された平均と等しい位置にシフトされます enter image description here

ステップ1.)および2.)が収束するまで繰り返されます。つまり、すべてのウィンドウが最終的な位置に落ち着きます enter image description here

同じ場所にあるウィンドウはマージされます enter image description here

データはウィンドウトラバーサルに従ってクラスター化されます enter image description here

...例たとえば、場所「2」で終わるウィンドウが通過したすべてのデータは、その場所に関連付けられたクラスターを形成します。

したがって、このセグメンテーションは(偶然)3つのグループを生成します。これらのグループを元の画像形式で表示すると、 belisarius 'answerの最後の画像 のようになります。異なるウィンドウサイズと初期位置を選択すると、異なる結果が生成される場合があります。

156
mlai