您无法准确地重新创建在转换为彩色时通过将三个通道聚合在一起而丢失的信息。但是,您可以生成 false 颜色,并且您还可以做出一些对一些/许多图片可能相当合理的假设。
通常,在执行这些类型的操作时,您会创建一个 LUT(查找表)并使用每个像素位置的灰度值来查找替换颜色。因此,如果我们制作一个从红色到绿色再到蓝色的 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 像素宽的红色边框,以便您可以在 * 的白色背景上看到它)
现在我们可以将它应用到您的图像上:
convert yourImage.jpg -normalize clut.png -clut result.png
注意我还如何使用-normalize 来尝试使图像符合我的假设,即图像中有纯黑色调和纯白色高光。
这种技术只是尝试重新创建图像中不再存在的东西,因此它并不总是有效。当然,如果您知道关于主题、照明等的额外信息,您可以将其构建到 LUT 中。