Java中的3个灰度图像到1个彩色图像

时间:2013-10-20 12:14:40

标签: java image algorithm image-processing colorize

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

如果有人对接近它的最佳方法有任何想法,现有的算法,我可以如何制作自己的算法,等等。我不是在寻找任何人为我编码,只是为了引导我朝着正确的方向前进;我为每个R,G和B灰度图像迭代每个像素的理论可能不起作用?

感谢您的帮助

1 个答案:

答案 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实例作为基本图像以节省内存可能更有效...