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

时间:2018-06-24 14:55:19

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

0 个答案:

没有答案