java获取两个图像之间的百分比差异

java获取两个图像之间的百分比差异,java,image,Java,Image,我有以下代码: 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 &g

我有以下代码:

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,并将它们与此代码进行比较

我的问题:是否有可能优化此代码,或者您是否有任何想法来比较两个图像(不仅仅是它们相等)

更新:

以下是完整的代码:

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()非常慢。

请显示一个(包括输入/输出)。您所显示的只是比较单个像素,并且运行起来几乎是即时的对代码进行基准测试,并显示哪个部分运行速度最慢,最慢可达400;高度高达700