![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
前のチュートリアル: ヒストグラムの計算
次のチュートリアル: バックプロジェクション
| 原著者 | Ana Huamán |
| 互換性 | OpenCV >= 3.0 |
このチュートリアルでは、以下の方法を学ぶ:
\[d(H_1,H_2) = \frac{\sum_I (H_1(I) - \bar{H_1}) (H_2(I) - \bar{H_2})}{\sqrt{\sum_I(H_1(I) - \bar{H_1})^2 \sum_I(H_2(I) - \bar{H_2})^2}}\]
where\[\bar{H_k} = \frac{1}{N} \sum _J H_k(J)\]
and \(N\) is the total number of histogram bins.\[d(H_1,H_2) = \sum _I \frac{\left(H_1(I)-H_2(I)\right)^2}{H_1(I)}\]
\[d(H_1,H_2) = \sum _I \min (H_1(I), H_2(I))\]
\[d(H_1,H_2) = \sqrt{1 - \frac{1}{\sqrt{\bar{H_1} \bar{H_2} N^2}} \sum_I \sqrt{H_1(I) \cdot H_2(I)}}\]
\[d(H_1,H_2) = 2 * \sum _I \frac{\left(H_1(I)-H_2(I)\right)^2}{H_1(I)+H_2(I)}\]
\[d(H_1,H_2) = \sum _I H_1(I) \log \left(\frac{H_1(I)}{H_2(I)}\right)\]
ベース画像 (src_base) と他の2枚のテスト画像を読み込む:
それらをHSV形式に変換する:
さらに、ベース画像の半分のサイズの画像を作成する (HSV形式):
ヒストグラムを計算するための引数 (bins、ranges、チャンネルHおよびS) を初期化する。
ベース画像、2枚のテスト画像、および下半分のベース画像についてヒストグラムを計算する:
ベース画像のヒストグラム (hist_base) と他のヒストグラムとの間で、6種類の比較手法を順に適用する:

最初の画像がベース (他と比較される対象) で、残りの2枚がテスト画像である。さらに、最初の画像をそれ自身と比較し、またベース画像の半分と比較する。
OpenCV 4.12.0 で得られた数値結果を以下に示す:
| 手法 | Base - Base | Base - Half | Base - Test 1 | Base - Test 2 |
|---|---|---|---|---|
| Correlation | 1.000000 | 0.880438 | 0.20457 | 0.065752 |
| Chi-square | 0.000000 | 0.328307 | 181.674 | 80.1494 |
| Intersection | 1.000000 | 0.75005 | 0.315061 | 0.0908022 |
| Bhattacharyya | 0.000000 | 0.237866 | 0.679825 | 0.873709 |
| Chi-Square alt. | 0.000000 | 0.395046 | 2.31572 | 3.41024 |
| KL divergence | 0.000000 | 0.321064 | 2.6616 | 9.55412 |
Correlation および Intersection の手法では、指標が大きいほど一致が正確である。見ての通り、base-base の一致が予想通り最も高い。また、base-half の一致が (予測した通り) 2番目に良い一致であることがわかる。残りの4つの指標では、結果が小さいほど一致が良い。