灰度图像到彩色

Gray scale image to color

有没有办法将灰度图像转换为彩色图像?

这里有几个 JPG 示例

  1. Photo 1
  2. Photo 2
  3. Photo 3

ImageMagick 功能强大,但似乎无法转换为彩色版本。

很遗憾,这是不可能的。灰度图像不包含足够的信息来创建彩色图像。在您看到 B&W/Grayscale 图像转换为彩色的情况下,这是在 photoshop 等应用程序中手动完成的。

您可以使用 imagemagick 应用滤镜,但不能重新引入颜色。 http://www.imagemagick.org/Usage/color_mods/#level-colors

要将图像转换为灰度图像,您只需取每个像素中 r g b 值的平均值并将 r g 和 b 设置为该值。因此,几乎不可能将其转换回颜色。关键词是相当多,我敢肯定有人最终会发明一些复杂的算法,该算法会查看周围的像素,查看它们的平均值,并可能得出关于该区域周围颜色的结论,我不知道。但就目前而言,不幸的是,我认为不可能做这样的事情。对不起。

您无法准确地 re-create转换为颜色时将三个通道聚合在一起而丢失的信息。但是,您可以生成 false 颜色,也可以做出一些对于 some/many 图片可能相当合理的假设。

通常,在做这些类型的事情时,您会创建一个 LUT (Look-up Table) 并使用每个像素位置的灰度值来look-up 替换颜色。因此,如果我们制作一个从红色到绿色再到蓝色的 LUT,图像中的暗色调将映射到红色,中间调映射到绿色,高光映射到蓝色。让我们试试看:

convert -size 1x1! xc:red xc:lime xc:blue +append -resize 255x1! rainbowCLUT.png

如果我们现在将其应用于您的图像:

convert yourImage.jpg rainbowCLUT.png -clut result.png

好的,我们现在有了颜色,但这不是很真实。所以,为了做得更好,我们需要开始做一些假设。一个假设可能是图片中有一些非常黑的东西(即领带、夹克、一些黑头发或某处的深阴影),另一个假设可能是图像中某处可能有白色高光(即白色背景,眼白),最后我们假设中间某处有一些肤色。所以,让我们制作一个看起来像这样的 CLUT,即它从纯黑色到中间的肤色再到白色高光:

convert -size 128x1! gradient:black-"rgb(210,160,140)" gradient:"rgb(210,160,140)"-white +append clut.png

(我在它周围放了一个 1 像素宽的红色边框,这样您就可以在 Whosebug 的白色背景上看到它)

现在我们可以将它应用到您的图片中了:

convert yourImage.jpg -normalize clut.png -clut result.png

请注意我还如何使用 -normalize 来尝试使图像符合我的假设,即图像中有纯黑色调和纯白色高光。

此技术只是尝试 re-creating 图像中不再存在的东西,因此它并不总是有效。当然,如果您知道有关您的主题、灯光等的额外信息,您可以将其构建到 LUT 中。

看看siggraph2016_colorization 我没试过,但看起来很有趣。

他们提出了一种自动为灰度图像着色的新技术,该技术结合了全局先验和局部图像特征。

着色架构:

他们的模型由四个主要部分组成:低级特征网络、中级特征网络、全局特征网络和着色网络。这些组件都是紧密耦合的,并以端到端的方式进行训练。我们模型的输出是图像的色度,它与亮度融合形成输出图像。

这里是一个例子