我正在寻找创建一个Java应用程序,它将采用3个灰度图像(每个代表红色,绿色和蓝色),然后合并它们/展平它们/等。为了创建一个彩色图像,我想知道是否有人知道我是否可以使用任何现有的算法或方法? 我知道有一个名为ImageJ的程序,我以前用过它,它正是我想要的;您可以选择3个图像,并可以从中创建RGB图像。我知道这是通过使用查找表在Java中完成的,这是我以前从未遇到过的,所以甚至不知道从哪里开始。
如果有人对接近它的最佳方法有任何想法,现有的算法,我可以如何制作自己的算法,等等。我不是在寻找任何人为我编码,只是为了引导我朝着正确的方向前进;我为每个R,G和B灰度图像迭代每个像素的理论可能不起作用?
感谢您的帮助
答案 0 :(得分:3)
在sRGB colourspace中工作,很容易实现一个执行此操作的方法。
考虑以下方法:
private static BufferedImage createColorFromGrayscale(BufferedImage red, BufferedImage green, BufferedImage blue){
BufferedImage base = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_INT_ARGB);
for(int x = 0;x < red.getWidth();x++){
for(int y = 0; y < red.getHeight(); y++){
int rgb = (red.getRGB(x, y) & 0x00FF0000) | (green.getRGB(x, y) & 0x0000FF00) | (blue.getRGB(x, y) & 0x000000FF);
base.setRGB(x, y, (rgb | 0xFF000000));
}
}
return base;
}
创建一个新的基本图像,我们通过使用按位AND和OR创建一个颜色分量,以ARGB格式创建一个4字节整数颜色,该颜色分配给基本图像。通过for循环迭代整个图像,我们可以将得到的基本图像的每个像素分别设置为每个通道的颜色。
此方法假设所有三个图像的大小相等。如果图像尺寸不相等,则必须单独处理(例如,在输入之前通过拉伸图像或通过修改方法来接受不同尺寸的图像。)
P.S:在处理大图像时直接使用其中一个bufferedimage实例作为基本图像以节省内存可能更有效...