2016-04-17 24 views
1

スーパーピクセルを使用したイメージセグメンテーションの方法であるエネルギー駆動サンプリング(SEEDS)で抽出されたスーパーピクセルに興味があります。これは、OpenCVがスーパーピクセルを作成するために使用するものです。私はSEEDSアルゴリズムの背後にあるドキュメンテーションを見つけるのに苦労しています。 OpenCVは、非常に一般的な説明を提供します。これはhereです。エネルギー駆動サンプリング(SEEDS)で抽出されたスーパーピクセル

私は、SEEDSの機能(一般的なウォークスルーまたは数学的説明のいずれか)に関する詳細な説明を探しています。アルゴリズムに関するすべてのリンクや考えは非常に高く評価されます!私は良い材料を見つけることができないようです。ありがとう!

答えて

8

まず、いくつかの一般的なリンクとリソースを調べ、アルゴリズムの一般的な考え方を説明しようとします。

SEEDSの実装:

あなたは明らかすでにドキュメントhereを見ました。 OpenCVのSEEDS実装の使用例はItseez/opencv_contrib/modules/ximgproc/samples/seeds.cppであり、スーパーピクセルの数、レベル数、その他のパラメータを適応させることができます。そのため、SEEDの背後にあるアイデアを読んだ後に、この例を試してみてください。元の実装と改訂された実装(私の学士論文の一部)は、GitHub:davidstutz/superpixels-revisited/lib_seedsdavidstutz/seeds-revisedにあります。しかし、実装はかなり匹敵するはずです。

公報およびその他のリソース:arxiv.org/abs/1309.3848

紙がarXivのにリリースされました。私のウェブサイト:davidstutz.de/efficient-high-quality-superpixels-seeds-revisedでは、いくらか短い説明(それはより簡単かもしれません)が利用可能です。提供されたアルゴリズムの記述は、SEEDSを実装することができるようにするのが最も簡単なものでなければなりません(記事の「アルゴリズム」を参照)。より正確な記述は、私のbachelor thesis、特にセクション3.1にも見出すことができます。

一般的な説明:この説明は、上記の記事で、私の卒業論文の両方に基づいていること

注意。どちらも数学的に簡潔な説明を提供します。

HW幅と高さの画像を考えると、種子はサイズw x hのブロックに画素をグループ化することによって開始します。これらのブロックはさらに2 x 2のグループに配置される。このスキームは、Lレベル(これはレベルパラメータの数です)で繰り返されます。だから、レベルlで、あなたはすなわちスーパーピクセルの数はレベルLでブロックによって決定される

w*2^(l - 1) x h*2^(l - 1). 

サイズ、w_Lh_LがレベルLでブロックの幅と高さを表しせ、数のブロックを持っていますスーパーピクセルは

S = W/w_L * H/h_L 

整数分割を使用します。

最初のスーパーピクセルセグメンテーションは、現在、隣接するスーパーピクセル間でピクセルと個々のピクセルのブロックを交換することによって反復的に改良されています。このために、スーパーピクセルおよびすべてのブロックのカラーヒストグラムが計算される(ヒストグラムは、実装のビンパラメータの数によって決定される)。これは、スーパーピクセルのヒストグラムがそれが構成する2 x 2ブロックのヒストグラムの合計にすぎないことを見ることによって効率的に行うことができ、これらのブロックのうちの1つのヒストグラムは、そのブロックのヒストグラムの合計ですに)。このようにして、スーパーピクセルjに属するピクセルブロックのヒストグラムを​​とし、このスーパーピクセルのヒストグラムをh_jとします。次に、ブロックjとスーパーピクセルjの類似度は、​​とh_jのヒストグラムの交点によって計算されます(上記の方程式のリソースの1つを参照)。同様に、ピクセルとスーパーピクセルの類似度は、ピクセルカラーとスーパーピクセル平均色とのユークリッド距離(これはより良い実行オプションである)、またはピクセルの色がスーパーピクセルに属する確率(単純に正規化されたもの画素の色でのスーパーピクセルのヒストグラムの入力)。このような背景では、アルゴリズムは次のように要約することができます。

initialize block hierarchy and the initial superpixel segmentation 
for l = L - 1 to 1 // go through all levels 
    // for level l = L these are the initial superpixels 
    for each block in level l 
     initialize the color histogram of this block 
     // as described this is done using the histograms of the level below 
// now we start exchanging blocks between superpixels 
for l = L - 1 to 1 
    for each block at level l 
     if the block lies at the border to a superpixel it does not belong to 
      compute the histogram intersection with both superpixels 
      assign the block to the superpixel with the highest intersection 
// now we exchange individual pixels between superpixels 
for all pixels 
    if the pixel lies at the border to a superpixel it does not belong to 
     compute the Euclidean distance of the pixel to both superpixel's mean color 
     assign the pixel to the closest superpixel 

実際には、ブロックの更新とピクセルの更新が(イテレーションパラメータの数である)のものより繰り返され、そして多くの場合、2倍の数の反復あたりレベルが実行されます(これはダブルステップパラメータです)。元のセグメンテーションでは、w,h,Lおよび画像サイズからスーパーピクセルの数が計算されます。 OpenCVでは、上記の式を使用して、wおよびhが、所望のスーパーピクセル数およびレベル数(対応するパラメータによって決定される)から計算される。

パラメータが不明瞭なまま残っています。先に滑らかな境界を適用しようとしています。実際には、これは更新されるピクセル周辺の3 x 3近傍を考慮することによって行われます。この近傍のピクセルの大部分がスーパーピクセルjに属する場合、更新されるピクセルはまた、スーパーピクセルj(またはその逆)に属する可能性が高くなります。 OpenCVの実装と私の実装(SEEDSの改訂版)は、OpenCVの場合、k x kk in {0,...,5}の大きな近隣を考慮することができます。

関連する問題