Hallo,
Ich habe diesen Code hier:
Und der funktioniert auch so ohne Problem, wenn ich also
aufrufe bekomme ich eine Prozentzahl, die mir angibt wie unterschiedlich die Bilder sind.
Allerdings sollte das mehrere Male pro Sekunde aufgerufen werden.
Mein gesamtes Programm habe ich mit VisualVM (Profiler) analysiert.
Und dabei festgestellt, dass genau diese Methode
für lange Ladezeiten sorgt.
Deshalb ist meine Frage, ob und wie es möglich ist diesen Code zu optimieren.
Info:
Die Bilder die verglichen werden sind nicht in Farbe sondern nur Grau, vielleicht kann man damit etwas machen.
Ich habe diesen Code hier:
Java:
private static double getDifferencePercent(BufferedImage img1, BufferedImage img2) {
int width = img1.getWidth();
int height = img1.getHeight();
int width2 = img2.getWidth();
int height2 = img2.getHeight();
if (width != width2 || height != height2) {
throw new IllegalArgumentException(String.format("Images must have the same dimensions: (%d,%d) vs. (%d,%d)", width, height, width2, height2));
}
long diff = 0;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
diff += pixelDiff(img1.getRGB(x, y), img2.getRGB(x, y));
}
}
long maxDiff = 3L * 255 * width * height;
return 100.0 * diff / maxDiff;
}
private static int pixelDiff(int rgb1, int rgb2) {
int r1 = (rgb1 >> 16) & 0xff;
int g1 = (rgb1 >> 8) & 0xff;
int b1 = rgb1 & 0xff;
int r2 = (rgb2 >> 16) & 0xff;
int g2 = (rgb2 >> 8) & 0xff;
int b2 = rgb2 & 0xff;
return Math.abs(r1 - r2) + Math.abs(g1 - g2) + Math.abs(b1 - b2);
}
Und der funktioniert auch so ohne Problem, wenn ich also
Code:
getDifferencePercent(img1,img2)
Allerdings sollte das mehrere Male pro Sekunde aufgerufen werden.
Mein gesamtes Programm habe ich mit VisualVM (Profiler) analysiert.
Und dabei festgestellt, dass genau diese Methode
Code:
getDifferencePercent()
Deshalb ist meine Frage, ob und wie es möglich ist diesen Code zu optimieren.
Info:
Die Bilder die verglichen werden sind nicht in Farbe sondern nur Grau, vielleicht kann man damit etwas machen.