Ява получить разницу между двумя изображениями в процентах - PullRequest
0 голосов
/ 24 июня 2018

У меня есть следующий код:

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);
}

и работает без проблем, но это занимает много времени, и я не знаю, как это оптимизировать.

Итак, главное, я хочу сравнить два изображения и получить процентную разницу.

Для этого я загружаю RGB обоих изображений и сравниваю их с этим кодом.

Мой вопрос: можно ли оптимизировать этот код, или у вас есть идея сравнить два изображения (не только то, что они равны)

UPDATE:

вот полный код:

private 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 = height - 1; y >= 0; y--) {
        for (int x = width - 1; x >= 0; x--) {
            diff += pixelDiff(img1.getRGB(x, y), img2.getRGB(x, y));
        }
    }
    long maxDiff = 765L * 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);
}

Я проверил это с помощью профилировщика, и он показывает, что pixelDiff () работает очень медленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...