我有两张灰度图像,一幅是保持不变的背景,另一幅是前景中存在多个粒子的图像。我使用以下
阈值生成二进制图像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;
}
这给了我每个像素的两个图像之间的差异,如果差异大于某个阈值,我会写一个黑色像素,否则我写一个白色像素。
我想重写它,以便它运行得更快,因为对于较大的图像来说,这需要一段时间,但是在理解如何使用栅格数据方面有些困难,我认为应该更快。