0

OpenCV ライブラリを使用して画像比較に関するアプリケーションを作成しています。私は基本的なブロックマッチング方法を使用しています

各ブロックのビット数を抽出するにはどうすればよいですか

これはイメージだと思ってください

16x16 ピクセル

--------------
+            +
+            +
+            +
+------------+

ブロック サイズ = 8x8 ピクセルの場合

--------------
+      |     +
+------------+
+      |     +
+------------+

私のプログラム:

1) 2 つの画像を読み取る 2
) それらをグレースケールに変換する
3) 画像をブロック数に分割する
4) ブロックを比較する
5) 出力に類似度のパーセンテージを出力する

私の関数は、画像内のブロックのすべてのピクセルを比較します

  float imCompBMA(float **b1, float **b2, float h, float w){
    float percent;
    int i, j, counter=0;

    for(i=0;i<h;i++){
        for(j=0;j<w;j++){
            // If both blocks have the same value at pixel (i,j)
            //this line has to be improved
            if(b1[i][j]==b2[i][j]){
                counter++;
            }
        }
    }

    // Percent is the number of same pixels to the total number of pixels
    percent=(float)(counter/(h*w))*100;
    return percent;
}

では、各ブロックの平均ビット数を比較して改善するにはどうすればよいですか

前もって感謝します

4

2 に答える 2

0

目標が「ブロックマッチング」ではなく画像比較で何かをしなければならない場合は、OpencvtemplateMatchingで説明を調べることをお勧めします。

于 2012-12-03T20:49:21.460 に答える
0

ブロック内のすべてのビットが同じであることを探している場合、必然的に各ブロック内のすべてのビットを読み取る必要があります!

実際の画像を比較しようとしている場合、これはおそらく最善の方法ではありません。2 つの raw 画像が最初は同じであったとしても、ほとんどのパッケージで読み込みと保存を行うと、個々の小さな変更が行われますが (異なる色空間に変換されたり元に戻されたりするため)、もちろん jpeg などの形式として保存すると、すべてのビットが変更されます。

編集:ビットをカウントするだけの場合は、行のピクセルのブロックへの int (または long、または longlong) ポインターを取得し、その int のビットをカウントします - k&r bitcounterを参照してください

于 2012-12-03T18:45:44.487 に答える