您无法准确地重新创建在转换为颜色时将三个通道聚合在一起而丢失的信息。但是,您可以生成“假”颜色,并且还可以做出一些对于某些/许多图片来说可能相当合理的假设。 通常,在执行这些类型的操作时,您会创建一个
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 像素宽的红色边框,这样你就可以在 StackOverflow 的白色背景上看到它)
现在我们可以将其应用到您的图像中:
convert yourImage.jpg -normalize clut.png -clut result.png
-normalize
来尝试使图像符合我的假设,即图像中有纯黑色调和纯白色高光。
此技术只是尝试重新创建图像中不再存在的东西,因此它并不总是有效。当然,如果您知道有关拍摄对象、灯光等的额外信息,您可以将其构建到 LUT 中。