2

PNG のガンマ値を に修正したいと思います1/2.2。たとえば、gAMA値がの png 画像があるとします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

次に、 と の 2 つの画像を比較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

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 です。ガンマを確認してみましょう。

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

次に、私の方法または Fred (@fmw42) の方法を使用して、ガンマ パラメータを変更しましょう。

# 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

将来の読者のために、ガンマ パラメータだけでなくピクセル値自体を変更する場合は、次のようにします。

# 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 に答える