Сравните все пиксели двух буферизованных изображений для обработки изображений - PullRequest
0 голосов
/ 22 октября 2018

У меня есть два изображения в оттенках серого, одно фоновое изображение остается постоянным, а другое - изображение, на котором на переднем плане присутствуют несколько частиц.Я задаю порог для получения двоичного изображения с использованием следующих

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

Это дает мне разницу между двумя изображениями в каждом пикселе, если разница больше чемкакое-то пороговое значение я пишу черным пикселем, иначе я пишу белым пикселем.

Я хочу переписать это так, чтобы оно работало быстрее, поскольку в настоящее время это занимает некоторое время для больших изображений, но у меня возникают некоторые трудности с пониманием того, как использовать растровые данные, которые, как я считаю, должны быть быстрее.

...