我有一张黑白图像,必须在屏幕上呈现为精确颜色的灰度图像。黑色应显示为rgb(40,40,40),白色显示为rgb(128,128,128)。
问题是渲染此图像的软件不允许直接指定颜色;我可以改变的唯一参数是亮度,对比度和伽玛(将图像转换为所需的颜色不是一种选择)。
是否有任何公式可以计算这些参数的特定值来调整颜色?
答案 0 :(得分:1)
通常,有几种方法可以改变图像的对比度,灰度系数和亮度,很难知道所选工具使用哪种方法,因此可以提供正确的答案。
您要做的是将下图中的蓝线(无对比度或亮度变化)移动到红线(对比度降低)的位置:
一般情况下,降低对比度 蓝线顺时针,而增加它将旋转它逆时针。通常,增加 亮度将将蓝线移至右,而减少 > 亮度将转移 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
如果您应用建议的命令:
convert gradient.png +level 15.69%,50.2% -depth 8 result.png
你会得到这个:
您可以使用以下方法检查统计数据(最小值和最大值)
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