Java - 找出两张图片相同的地方

Java - Find where two images are the same

我正在研究阈值算法。我正在尝试使用两种不同的算法,然后计算生成的图像以找到它们都放置黑色像素的位置。

这是我写的代码:

public static BufferedImage andImage(BufferedImage one, BufferedImage two)
{  
    BufferedImage result = new BufferedImage(one.getWidth(), one.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
    result.getGraphics().drawImage(one, 0, 0, null);
    WritableRaster rasterOne = result.getRaster();
    WritableRaster rasterTwo = two.getRaster();

    int[] pixelsOne = new int[one.getWidth()];
    int[] pixelsTwo = new int[two.getWidth()];

    for (int y = 0; y < two.getHeight(); y++) 
    {
        rasterOne.getPixels(0, y, one.getWidth(), 1, pixelsOne);
        rasterTwo.getPixels(0, y, two.getWidth(), 1, pixelsTwo);

        for (int i = 0; i < pixelsOne.length; i++) 
        {
            if (pixelsTwo[i] == 255 && pixelsOne[i] == 255)
            {
                pixelsOne[i] = 255;
            }
            else 
                pixelsOne[i] = 0;
        }
        rasterOne.setPixels(0, y, one.getWidth(), 1, pixelsOne);
    }

    return result;
}  

它得出的结果是两个图像的或运算。我觉得这是一个非常简单的问题,但我似乎找不到问题所在。

编辑: 所有像素都是 0 或 255。

我调换了黑白数字。应该是:

public static BufferedImage andImage(BufferedImage one, BufferedImage two)
{  
    BufferedImage result = new BufferedImage(one.getWidth(), one.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
    result.getGraphics().drawImage(one, 0, 0, null);
    WritableRaster rasterOne = result.getRaster();
    WritableRaster rasterTwo = two.getRaster();

    int[] pixelsOne = new int[one.getWidth()];
    int[] pixelsTwo = new int[two.getWidth()];

    for (int y = 0; y < two.getHeight(); y++) 
    {
        rasterOne.getPixels(0, y, one.getWidth(), 1, pixelsOne);
        rasterTwo.getPixels(0, y, two.getWidth(), 1, pixelsTwo);

        for (int i = 0; i < pixelsOne.length; i++) 
        {
            if (pixelsTwo[i] == 0 && pixelsOne[i] == 0)
                pixelsOne[i] = 0;
            else 
                pixelsOne[i] = 255;
        }
        rasterOne.setPixels(0, y, one.getWidth(), 1, pixelsOne);
    }

    return result;
}