![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
これは Michael J. Swain , Dana H. Ballard が論文 Indexing via color histograms で提案した手法である。
簡単な言葉で言うと、実際には何なのか? これは画像のセグメンテーション(領域分割)や、画像内の関心のあるオブジェクトを見つけるために使われる。簡単に言えば、入力画像と同じサイズ(ただしシングルチャンネル)の画像を作成し、各ピクセルがそのピクセルが対象オブジェクトに属する確率に対応する。さらに簡単に言うと、出力画像では、残りの部分と比べて関心のあるオブジェクトがより白く表現される。まあ、これは直感的な説明である。(これ以上簡単にはできない。)ヒストグラムバックプロジェクションは camshift アルゴリズムなどと組み合わせて使われる。
どうやって行うのか? 関心対象(この例では、選手やその他のものを除いた地面)を含む画像のヒストグラムを作成する。よい結果を得るには、対象が可能な限り画像を埋めているほうがよい。また、グレースケールヒストグラムよりカラーヒストグラムが好ましい。なぜなら、対象を定義するうえで、グレースケール強度よりも対象の色のほうがよい手がかりとなるからである。次に、対象を見つけたいテスト画像に対してこのヒストグラムを"逆投影 (back-project)"する。言い換えると、すべてのピクセルが地面に属する確率を計算して表示する。得られた出力を適切にしきい値処理すると、地面だけが取り出される。
次の関数を使う:cv.calcBackProject (images, channels, hist, dst, ranges, scale)
| images | 入力配列。すべて同じビット深度 cv.CV_8U、cv.CV_16U または cv.CV_32F を持ち、同じサイズでなければならない。それぞれは任意の数のチャンネルを持つことができる。 |
| channels | バックプロジェクションの計算に使用するチャンネルのリスト。チャンネル数はヒストグラムの次元数と一致しなければならない。 |
| hist | 入力ヒストグラム。密 (dense) または疎 (sparse) のいずれでもよい。 |
| dst | 出力先のバックプロジェクション配列。images[0] と同じサイズおよびビット深度のシングルチャンネル配列である。 |
| ranges | 各次元におけるヒストグラムのビン境界の配列の配列(cv.calcHist を参照)。 |
| scale | 出力バックプロジェクションに対する省略可能なスケール係数。 |
cv.normalize (src, dst, alpha = 1, beta = 0, norm_type = cv.NORM_L2, dtype = -1, mask = new cv.Mat())
| src | 入力配列。 |
| dst | src と同じサイズの出力配列。 |
| alpha | 正規化先のノルム値、またはレンジ正規化の場合は範囲の下限。 |
| beta | レンジ正規化の場合の範囲の上限。ノルム正規化では使われない。 |
| norm_type | 正規化の種類(cv.NormTypes を参照)。 |
| dtype | 負の場合、出力配列は src と同じ型になる。そうでない場合は src と同じチャンネル数を持ち、ビット深度は CV_MAT_DEPTH(dtype) となる。 |
| mask | 省略可能な演算マスク。 |