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


107

誰かがMean Shiftセグメンテーションが実際にどのように機能するかを理解するのを手伝ってくれませんか?

ここに私がちょうど作った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つの異なるレベルの数値をどのように分離するかを説明できますか?


3つのレベル?私は数字は約100との周りの150参照
ジョン

2
まあ、その分割と同様に、中央の数字は、境界のそのセクションに含まれるエッジの数字から遠く離れたものになると思いました。それが、私が3と言った理由です。このタイプのセグメンテーションがどのように機能するかを本当に理解していないので、私は間違っている可能性があります。
シャーピー、2011年

ああ...多分私たちはレベルを別のことを意味するように取っています。すべて良い。:)
John

1
私は受け入れられた答えが好きですが、それが全体像を示しているとは思いません。IMOこのPDFは、平均シフトセグメンテーションをよりよく説明しています(例として、より高い次元のスペースを使用すると、2dよりも優れていると思います)。eecs.umich.edu/vision/teaching/EECS442_2012/lectures/...
Helin氏王

回答:


204

最初の基本:

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

ここに画像の説明を入力してください

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

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

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

アルゴリズムは境界で十分に定義されていないため、実装が異なると結果も異なります。

数学の詳細についてはここでは説明しません。適切な数学表記がないと表示できず、StackOverflowでも利用できないためです。また、他の優れたソースから入手できるためです。

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

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

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

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

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

ここに画像の説明を入力してください

次に、妥当な平均シフトを採用します。

MeanShiftFilter[a, 3, 3]

そして私達は得る:

ここに画像の説明を入力してください

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

Mean Shiftを使用して数回繰り返し、より均一なカラーリングを取得できます。数回繰り返した後、安定した非等方性の構成に到達します。

ここに画像の説明を入力してください

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

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

それはあなたのマトリックスのためにこのように実行されます:

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}}  

または:

ここに画像の説明を入力してください

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

HTH!


画像の平均シフトのMatlab実装はありますか?
Kaushik Acharya、2011年


164

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

画像データは特徴空間に変換されます フィーチャースペース

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

検索ウィンドウは特徴空間に分散されます ここに画像の説明を入力してください

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

平均シフト反復:

1.)各ウィンドウ内のデータサンプルのMEANが計算されます ここに画像の説明を入力してください

2.)ウィンドウは、以前に計算された平均と等しい場所にシフトされます。 ここに画像の説明を入力してください

手順1.)と2.)は収束するまで繰り返されます。つまり、すべてのウィンドウが最終位置に落ち着きます。 ここに画像の説明を入力してください

同じ場所にあるウィンドウがマージされます ここに画像の説明を入力してください

データはウィンドウトラバーサルに従ってクラスター化されます。 ここに画像の説明を入力してください

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

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


各ピクセルの位置を考慮して、フィーチャ空間を3次元にすることはできませんか?
Helin Wang 2014

@HelinWangはい、できます。
mlai 2014年

ウィンドウが1Dフィーチャ空間にどのように配置されるかは理解していますが、たとえば、空間検索距離(ピクセル単位)とスペクトル距離(値の差)を含む平均シフトアルゴリズムにどのように適用できるかわかりません。ベリサリウス博士の答えのように。これを明確にしてもらえますか?
Lennert 2017

@Lennert私があなたの質問を正しく理解している場合、基本的には、ピクセル位置(x、y)を機能として追加するか、他の位置ベースの機能をクラスタリングスペースに追加します。ベリサリウスの答えは、Mathematicaの特定の実装を参照していて、もう少し洗練されているかもしれないようです。それは役に立ちますか?
mlai 2017年

1
@レナートそうだね。あなたが私の答えを混乱させた理由を理解できます。「ウィンドウ」を2次元として描いたのですが、実際には1次元のスペクトル値のみでクラスタリングを表現しようとしていました。描画またはアニメーションを使用して、3次元の特徴空間で平均シフトクラスターを視覚化するのは非常にクールです(おそらく、時間があれば、最近の1つです)。
mlai
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.