Android java porcentaje bitmap píxel diferencia entre dos imágenes

Necesito calcular la diferencia de píxeles entre dos imágenes en java en Android. El problema es que tengo un código que devuelve un resultado impreciso.

Por ejemplo, tengo 3 imágenes muy similares pero devuelve resultados significativamente diferentes para la comparación de cada uno de ellos: 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; } 

Creo que tengo que comparar cada píxel de ambas imágenes (intColor1 (x, y) vs intColor2 (x, y)), pero ¿cómo puedo hacer eso, y para calcular la diferencia de porcentaje más tarde?

La fórmula de porcentaje que está usando es incorrecta. Por ejemplo, # 333333 es casi idéntico a # 333332 (y su fórmula muestra que son 0.003% diferentes). También # 323333 es casi idéntico a # 333333, pero su fórmula muestra que son 3% diferentes.

Debe extraer cada bit de composición de cada píxel de color (Color.red (), Color.green (), Color.blue ()), calcular la diferencia de cada uno de ellos y obtener el porcentaje de diferencia combinado.

Si bien este método de obtener la diferencia de las dos imágenes es simple y eficiente, tiene una gran advertencia: si las imágenes son idénticas en contenido, pero desplazado por un píxel (a la derecha por ejemplo), su método les mostrará como completamente diferente .

  • Fuera de memoria en una asignación 9830416-byte con mapa de bits
  • Android: ¿Cómo resolver Bitmap java.lang.OutOfMemoryError?
  • Cómo cargar un ImageView por URL en Android?
  • Repita la imagen con ImageView en RelativeLayout
  • ANR en Canvas.native_drawBitmap
  • Diff b / w bitmap.recycle () y bitmap = nulo
  • MediaStore.Images.Media.getBitmap y fuera de error de memoria
  • Convertir texto de cadena en mapa de bits
  • Android: Compartir mapa de bits no guardado en SD
  • Error de error de mapa de bits inmutable
  • Cómo convertir Bitmap a Base64 String
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.