Bhattacharyya係数(バタチャリアけいすう)


 2つのヒストグラム間の類似度を計算します.ヒストグラムの対応するビンを掛け合わせて計算します.物体同士の色ヒストグラムやエッジの勾配を累積したヒストグラムを比較して類似度を計算する事が出来ます.式は以下に示します.


 L= \sum _{u = 1} ^{m} \sqrt[]{\mathstrut PuQu}

 \sum _{u = 1} ^{m} Pu = \sum _{u = 1} ^{m} Qu = 1

 (0 \leq L \leq 1)

Cでの実装例


  • 実際にBhattacharyya係数を計算する際には,ヒストグラムを正規化してから比較します.
  • 類似度は0.0から1.0までの値を取ります.正規化して二つのヒストグラムが一致する際に1.0になります.

//Bhattacharyya係数を計算
//関数Bhattacharyya_Coefficient
//vector1 : ヒストグラム1
//vector2 : ヒストグラム2
float Bhattacharyya_Coefficient(int vector1[], int vector2[])
{
 int i;              //iteration変数
 float vec1[NUM], vec2[NUM];  //正規化ヒストグラム  (NUMはヒストグラムの要素数)
 float likelihood=0.0;   //類似度
 float sum1=0, sum2=0;   //正規化に使う合計値格納変数
 
 for(i=0; i<NUM; i++)    //ヒストグラムを正規化するため合計値を計算する(要素サイズはNUM)
 {
   sum1 += vector1[i];
   sum2 += vector2[i];
 }
 for(i=0; i<NUM; i++)    //正規化(合計値から割る)して係数を累積している(要素サイズはNUM)
 {
   vec1[i] = (float)vector1[i] / sum1; 
   vec2[i] = (float)vector2[i] / sum2;
   likelihood += (float)sqrt(vec1[i] * vec2[i]);      //累積
 }
 //計算した類似度を返す
 return likelihood;
}

・不備がある可能性があります.あらかじめご了承ください.





最終更新:2011年03月04日 19:11