У меня есть два изображения в оттенках серого, одно фоновое изображение остается постоянным, а другое - изображение, на котором на переднем плане присутствуют несколько частиц.Я задаю порог для получения двоичного изображения с использованием следующих
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;
}
Это дает мне разницу между двумя изображениями в каждом пикселе, если разница больше чемкакое-то пороговое значение я пишу черным пикселем, иначе я пишу белым пикселем.
Я хочу переписать это так, чтобы оно работало быстрее, поскольку в настоящее время это занимает некоторое время для больших изображений, но у меня возникают некоторые трудности с пониманием того, как использовать растровые данные, которые, как я считаю, должны быть быстрее.