通过亮度,对比度和伽玛操作同时精确调整两种颜色

时间:2017-08-21 18:53:07

标签: image image-processing colors

我有一张黑白图像,必须在屏幕上呈现为精确颜色的灰度图像。黑色应显示为rgb(40,40,40),白色显示为rgb(128,128,128)。

问题是渲染此图像的软件不允许直接指定颜色;我可以改变的唯一参数是亮度,对比度和伽玛(将图像转换为所需的颜色不是一种选择)。

是否有任何公式可以计算这些参数的特定值来调整颜色?

2 个答案:

答案 0 :(得分:1)

通常,有几种方法可以改变图像的对比度,灰度系数和亮度,很难知道所选工具使用哪种方法,因此可以提供正确的答案。

您要做的是将下图中的蓝线(无对比度或亮度变化)移动到红线(对比度降低)的位置:

enter image description here

一般情况下,降低对比度 蓝线顺时针,而增加它将旋转逆时针。通常,增加 亮度蓝线移至,而减少 > 亮度转移 left 。改变伽马值可能会使线条成曲线。

您可以在命令行中使用 ImageMagick 吗?

convert input.png +level 15.69%,50.2% -depth 8 result.png

如果你有v7 +,请使用magick代替convert

我为你做了一点渐变:

convert -size 60x255 gradient: -rotate 90 gradient.png

enter image description here

如果您应用建议的命令:

convert gradient.png +level 15.69%,50.2% -depth 8 result.png

你会得到这个:

enter image description here

您可以使用以下方法检查统计数据(最小值和最大值)

identify -verbose result.png | more

Image: result.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: PseudoClass
  Geometry: 255x60+0+0
  Units: Undefined
  Type: Grayscale
  Base type: Palette
  Endianess: Undefined
  Colorspace: Gray
  Depth: 8-bit
  Channel depth:
    Gray: 8-bit
  Channel statistics:
    Pixels: 15300
    Gray:
      min: 40 (0.156863)                        <--- MIN looks good
      max: 128 (0.501961)                       <--- MAX looks good
      mean: 84.0078 (0.329443)
      standard deviation: 25.5119 (0.100047)
      kurtosis: -1.19879
      skewness: 0.000197702

答案 1 :(得分:1)

在不知道如何计算亮度和对比度的情况下,很难告诉您如何进行计算。

也许我仍然误解。但您可以使用Imagemagick

在图像中找到最小值和最大值
convert image -format %[fx:255*minima] info: 

convert image -format %[fx:255*maxima] info:

这些将在0到255的范围内。

正如Mark所示,转变是线性的。所以它遵循等式

Y = a*X + b

其中a是对比度的度量,b是亮度的度量; X是您的输入值,Y是您想要的输出值。

因此

Ymax = a*Xmax + b

Ymin = a*Xmin + b

减去并解决a,我们得到

a = (Ymax-Ymin)/(Xmax-Xmin)

并将其代入Ymax的等式并保存为b,我们得到

b = Ymax - a*Xmax = Ymax - ( (Ymax-Ymin)/(Xmax-Xmin) )*Xmax

然后您可以使用Imagemagick函数函数多项式来处理图像。

在unix中,我会按如下方式进行操作

Xmin=$(convert image -format %[fx:255*minima] info:)

Xmax=$(convert image -format %[fx:255*maxima] info:)

如果您的图像是纯黑色和纯白色,那么您可以跳过上面的内容并使用

Xmin=0

Xmax=255

您想要的值

Ymin=40

Ymax=128

这些是变量,我可以使用-fx来计算a和b

a = $(convert xc: -format "%[fx:($Ymax-$Ymin)/($Xmax-$Xmin)]" info:)

b = $(convert xc: -format "%[fx:$Ymax - $a*$Xmax]" info:)

要转换图片,

convert image -function polynomial "$a,$b" result image