【问题标题】:3 grayscale images to 1 colour image in JavaJava中的3个灰度图像到1个彩色图像
【发布时间】:2013-10-28 22:08:48
【问题描述】:

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

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

提前感谢您的帮助

【问题讨论】:

  • 我会尝试并找出答案。

标签: java image algorithm image-processing colorize


【解决方案1】:

在 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;
}

创建一个新的基础图像,我们通过使用按位与和或来创建一个颜色组件,以创建一个分配给基础图像的 ARGB 格式的 4 字节整数颜色。通过 for 循环遍历整个图像,我们能够将生成的基础图像的每个像素分别设置为每个通道的颜色。

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

P.S:在处理大图像时,直接使用其中一个缓冲图像实例作为基础图像以节省内存可能更有效...

【讨论】:

  • 感谢您,我以不同的方式实现了类似的东西,以便我设法读取所选图像的每个像素的值。我猜我需要复制它以再制作 2 张图像,然后以某种方式将所有 3 张图像组合在一起?
  • @user2517280 是的...只要确保将每个图像中的每个通道分配给结果图像中的适当通道即可。
猜你喜欢
  • 2015-11-20
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 2015-05-28
  • 2019-03-04
  • 1970-01-01
  • 2017-05-07
相关资源
最近更新 更多