まず、いくつかの一般的なリンクとリソースを調べ、アルゴリズムの一般的な考え方を説明しようとします。
SEEDSの実装:
あなたは明らかすでにドキュメントhereを見ました。 OpenCVのSEEDS実装の使用例はItseez/opencv_contrib/modules/ximgproc/samples/seeds.cppであり、スーパーピクセルの数、レベル数、その他のパラメータを適応させることができます。そのため、SEEDの背後にあるアイデアを読んだ後に、この例を試してみてください。元の実装と改訂された実装(私の学士論文の一部)は、GitHub:davidstutz/superpixels-revisited/lib_seedsとdavidstutz/seeds-revisedにあります。しかし、実装はかなり匹敵するはずです。
公報およびその他のリソース:arxiv.org/abs/1309.3848:
紙がarXivのにリリースされました。私のウェブサイト:davidstutz.de/efficient-high-quality-superpixels-seeds-revisedでは、いくらか短い説明(それはより簡単かもしれません)が利用可能です。提供されたアルゴリズムの記述は、SEEDSを実装することができるようにするのが最も簡単なものでなければなりません(記事の「アルゴリズム」を参照)。より正確な記述は、私のbachelor thesis、特にセクション3.1にも見出すことができます。
一般的な説明:この説明は、上記の記事で、私の卒業論文の両方に基づいていること
注意。どちらも数学的に簡潔な説明を提供します。
がH
W
幅と高さの画像を考えると、種子はサイズw x h
のブロックに画素をグループ化することによって開始します。これらのブロックはさらに2 x 2
のグループに配置される。このスキームは、L
レベル(これはレベルパラメータの数です)で繰り返されます。だから、レベルl
で、あなたはすなわちスーパーピクセルの数はレベルL
でブロックによって決定される
w*2^(l - 1) x h*2^(l - 1).
サイズ、w_L
とh_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 k
とk in {0,...,5}
の大きな近隣を考慮することができます。