2013-10-20 99 views
-2

林1个彩色图像希望创建,将带3的灰度图像的Java应用程序(每个代表红色,绿色和蓝色),然后将它们合并/平坦化他们/等。为了创建一个彩色图像,我想知道是否有人知道我是否可以使用任何现有的算法或方法? 据我所知,有一个名为ImageJ的程序,我之前已经使用过它,它确实是我想要的;您可以选择3张图像,并可以从中创建RGB图像。我知道这是通过使用查找表在Java中完成的,这是以前从未遇到过的,所以甚至不知道从哪里开始。3灰度图像在Java

如果任何人有办法吧,现有的算法的最佳途径的任何想法,我怎么可能是能够让我自己等这将是巨大的。我不是在寻找任何人为我编码,只是为了引导我走向正确的方向;我为每个R,G和B灰度图像迭代每个像素的理论可能不起作用?

感谢提前

+2

我会尝试找出。 –

回答

3

在sRGB的色彩空间工作的帮助下,很容易实现,这是否一种方法。

考虑以下方法:

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循环遍历整个图像,我们可以将生成的基本图像的每个像素分别设置为每个通道的颜色。

此方法假设所有三个图像的大小相等。如果图像尺寸不相同,则必须单独处理(例如通过在输入之前拉伸图像或修改方法以接受不同尺寸的图像)。

PS:直接使用一个图像可能更有效在BufferedImage的实例作为基本图像的大的图片的时候,以节省内存...

+0

感谢您的理解,ive以不同的方式实现了类似的功能,以便iive设法读取所选图像的每个像素的值。我猜我需要复制它为2个更多的图像,然后以某种方式将所有3个结合在一起? – user2517280

+0

@ user2517280是......只要确保将每个图像的每个通道分配到合成图像中的相应通道。 – initramfs