我需要计算Android上java中两个图像之间的像素差异。问题是我的代码返回不准确的结果。
E.g。我有3个非常相似的图片,但它们会返回显着不同的结果,以便比较每个图片: pic1 vs pic2 = 1.71%; pic1 vs pic3 = 0.0045%; pic2 vs 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;
}
我认为我需要比较两个图像的每个像素(intColor1(x,y)vs intColor2(x,y)),但我该怎么做,以后再计算百分比差异?
答案 0 :(得分:3)
您使用的百分比公式是错误的。例如,#333333几乎与#333332相同(并且您的公式显示它们的差异为0.003%)。另外#323333与#333333几乎完全相同,但你的公式显示它们有3%不同。
您应该提取每个颜色像素的每个组成位(Color.red(),Color.green(),Color.blue()),计算每个颜色像素的差异,然后获得组合差异百分比。
虽然这种获取两个图像差异的方法简单而有效,但它有一个很大的警告:如果图像内容相同但移动了一个像素(例如右侧),您的方法将显示它们完全不同。