2

我想将 PNG 的 gamma 值修复为1/2.2. 例如,假设有一个 png 图像,其gAMA值为1/4.4. 由于某些原因,我必须将值固定为1/2.2. 所以我尝试convert如下命令。

# 0.5 is led by (1/4.4)/(1/2.2)
# 0.45455 is led by 1/2.2
$ convert orig.png -gamma 0.5 +gamma 0.45455 new.png

然后,我比较了两个图像,orig.pngnew.png,但它们似乎不同。

我猜公式(1/4.4)/(1/2.2), 是错误的。有谁知道正确的方法吗?

谢谢。

编辑:

对不起,但也许我不能告诉你我真正想做什么。因此,我添加了更多信息和示例图像。

首先,我有下图。此图像的 gAMA 约为 0.227(1/4.4)。 此图像的 gAMA 值为 0.227(1/4.4)

然后,我需要这张图片。图像的 gAMA 为 0.4545(1/2.2),但外观与上图相同。

这张图是我想要的

所以,我不需要这个。这张图片的gAMA也是0.4545(1/2.2),但是外观和第一张不一样。

此图像的 gAMA 值为 0.4545(1/2.2)

4

3 回答 3

1

这似乎在 Imagemagick 中对我有用。

convert red44.png -gamma 0.5 -set gamma 0.4545 red22_new.png

在此处输入图像描述

identify -verbose red22_new.png

...伽玛:0.4545 ...

于 2018-03-26T16:57:51.263 回答
0

我一直在尝试更多,我不确定这个答案是否正确,但我会留下一段时间,以便 Fred、Eric 和 Glenn (@GlennRandersPehrson) 可以看到它,也许可以更正它或评论它。我也不明白为什么会这样:

convert start.png -set png:gAMA 2 -verbose info: | grep -i -C5 gam

与此不同:

convert start.png -set png:gAMA 2 tmp.png
identify -verbose tmp.png | grep -i -C5 gam

我想我看到了正在发生的事情——简而言之,我认为 PNG 编码器没有正确拾取伽玛。

让我们制作一个值为 100 的单像素图​​像,这样我们就可以看到它在转换时会发生什么:

convert xc:"gray(100)" start.png

让我们检查一下:

convert start.png txt:
# ImageMagick pixel enumeration: 1,1,65535,gray
0,0: (25700)  #646464  gray(100)

是的,肯定是 100。让我们检查一下 gamma:

identify -verbose start.png | grep -i gam
Gamma: 0.45455
png:gAMA: gamma=0.45455 (See Gamma, above)

现在让我们使用我的方式或 Fred (@fmw42) 的方式更改 gamma 参数:

# Change gamma parameter my way
convert start.png +gamma 2 -verbose info: | grep -i gam
Gamma: 2
png:gAMA: gamma=0.45455 (See Gamma, above)
convert start.png +gamma 2 txt:
# ImageMagick pixel enumeration: 1,1,65535,gray
0,0: (25700)  #646464  gray(100)


# Change gamma parameter Fred's way
convert start.png -set gamma 2 -verbose info: | grep -i gam
Gamma: 2
png:gAMA: gamma=0.45455 (See Gamma, above)
convert start.png -set gamma 2 txt:
# ImageMagick pixel enumeration: 1,1,65535,gray
0,0: (25700)  #646464  gray(100)

正如您所看到的,两种方法都没有改变像素值本身,两种方法都改变了ImageMagick内部伽玛,但至关重要的是,它们都没有完成您需要的,即改变 PNG 编码器的伽玛。一个小实验表明你需要:

convert start.png -set png:gAMA 2 -verbose info: | grep -i gam
Gamma: 0.45455
png:gAMA: 2

所以,我认为这就是答案 - 即使用:

convert input.png -set png:gAMA XYZ result.png

仅针对未来的读者,如果您想更改像素值本身而不仅仅是 gamma 参数,请执行以下操作:

# Set gamma of 2, initial pixel value 100 becomes 160
convert start.png -gamma 2 txt:
# ImageMagick pixel enumeration: 1,1,65535,gray
0,0: (41039.6)  #A0A0A0  gray(160)

# Set gamma of 0.5, initial pixel value 100 becomes 39
convert start.png -gamma 0.5 txt:
# ImageMagick pixel enumeration: 1,1,65535,gray
0,0: (10078.4)  #272727  gray(39)
于 2018-03-26T07:01:06.957 回答
0

在 Imagemagick 中,只需使用 -set gamma:

convert image.png -set gamma 0.4545 image.png

这只会改变伽玛值,但不会改变像素值。如果你需要这样做,那么你应该使用(正如 Mark Setchell 建议的那样)。但是如果你想要 1/2.2 并且有 1/4.4,那么你需要一个 (1/2.2)/(1/4.4)=2 的值

转换 image.png -gamma 2 image.png

于 2018-03-23T16:03:09.770 回答