2012-02-07 3 views
5

Androidのjavaで2つの画像のピクセルの差を計算する必要があります。問題は、不正確な結果を返すコードがあることです。Android Javaのパーセンテージビットマップ2つの画像のピクセルの差

など。私は3つの非常によく似た写真を持っていますが、それはそれぞれの比較のために大きく異なる結果を返します: pic1対pic2 = 1.71%; pic1対pic3 = 0.0045%; pic2対pic3 = 36.7%。

BitmapFactory.Options opt = new BitmapFactory.Options(); 
    opt.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    opt.inSampleSize = 5; 
    Bitmap mBitmap1 = BitmapFactory.decodeFile("/sdcard/pic1.jpg", opt); 
    Bitmap mBitmap2 = BitmapFactory.decodeFile("/sdcard/pic2.jpg", opt); 

    int intColor1 = 0; 
    int intColor2 = 0; 
    for (int x = 0; x < mBitmap1.getWidth(); x++) { 
     for (int y = 0; y < mBitmap1.getHeight(); y++) { 
      intColor1 = mBitmap1.getPixel(x, y); 
      intColor2 = mBitmap2.getPixel(x, y); 
      //System.out.print(" ("+ x + ","+ y +") c:" + intColor1); 
     } 
     String resultString = String.valueOf(intColor1); 

    } 
    //now calculate percentage difference 
    double razlika = (((double)intColor1 - intColor2)/intColor2)*100; 

} 

私は(intColor2(x、y)の対intColor1(x、y)は)私は両方のイメージのために、各ピクセルを比較する必要があると思いますが、どのように私はそれを行うことができ、以降のパーセンテージ差を計算しますか?

+0

私は類似した画像をすべて取得して一覧表示する必要があります。 –

答えて

2

使用している数式が間違っています。たとえば、#333333は#333332とほぼ同じです(式には0.003%の違いがあります)。 #323333は#333333とほぼ同じですが、3つの異なる式が表示されています。

各カラーピクセル(Color.red()、Color.green()、Color.blue())の各構成ビットを抽出し、それぞれの差異を計算して、差異の比率を取得する必要があります。

この2つの画像の差異を取得する方法は簡単で効率的ですが、画像の内容は同じですが、1ピクセルずつずらした場合(たとえば、右側に)、方法には大きな注意点がありますそれらはまったく異なるものです。

+0

アンドロイドの画像との差をパーセントで計算する効率的な方法はありますか?コードは便利です!ありがとう – supermus