比较两个缓冲图像的所有像素以进行图像处理

时间:2018-10-22 14:19:59

标签: java image-processing image-thresholding

我有两张灰度图像,一幅是保持不变的背景,另一幅是前景中存在多个粒子的图像。我使用以下

阈值生成二进制图像
WritableImage binaryImage = new WritableImage(picture.getWidth(), picture.getHeight());
    PixelWriter writer = binaryImage.getPixelWriter();
    for (int y = 0; y < picture.getHeight(); y++) {
        for (int x = 0; x < picture.getWidth(); x++) {
            if ((Math.abs(greyScaleConversion(x, y, picture)
                    - greyScaleConversion(x, y, background)) >= thresholdValue)) {
                writer.setColor(x, y, black);
            } else {
                writer.setColor(x, y, white);
            }
        }
    }

public int greyScaleConversion(int x, int y, BufferedImage bufferedImage) {
    int red = (bufferedImage.getRGB(x, y) >> 16) & 0xFF;
    int green = (bufferedImage.getRGB(x, y) >> 8) & 0xFF;
    int blue = (bufferedImage.getRGB(x, y) >> 0) & 0xFF;

    int grey = (77 * red + 150 * green + 29 * blue) >> 8;
    return grey;
}

这给了我每个像素的两个图像之间的差异,如果差异大于某个阈值,我会写一个黑色像素,否则我写一个白色像素。

我想重写它,以便它运行得更快,因为对于较大的图像来说,这需要一段时间,但是在理解如何使用栅格数据方面有些困难,我认为应该更快。

0 个答案:

没有答案