けさらんぱの自由帳

とあるFF14プレイヤーがFF14のこととか関係ないことを書いていく予定のブログです。記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

ImageMagickのsigmoidal-contrastで画像を明るくしてみる

最近、デジカメで撮った写真はRAWファイルをLinux PCに転送して、dcrawとImageMagickでHEIC形式の画像ファイルに変換しています。画像が暗くなってしまったときは単純にImageMagickのmodulateで明るくしていたのですが、これだと暗いところを明るくしようとすると逆に明るいところがすぐに飽和してしまいます。ググったところsigmoidal-contrastを使うと飽和させずに明るさを変えられるっぽいのですが、適当にググっただけではどうすれば良いのかよく分かりません。なのでドキュメントを調べたり実験をしたりしてみました。

公式のドキュメント

まずは 公式のドキュメント を読んでみます。

  • sigmoidal-contrastは引数を2つとり、コマンドラインでは 3x50% のように指定します。
  • 1つめの引数はどの程度コントラストを強くするかで、0では何も変わらず、20は大きすぎ、3くらいが典型的な値のようです。
  • 2つめの引数はトーンカーブの「変曲点」です。
  • -sigmoidal-contrastコントラストを強くし、 +sigmoidal-contrastコントラストを弱くします。
  • -sigmoidal-contrast 3x0% とすると画像を明るくでき、 +sigmoidal-contrast 3x0% とすると暗くできます。

公式のドキュメントでは2つめの引数を 0% にする方法のみ記述されていますが、逆に 100% にする方法もあるようです。

実験

公式のドキュメントを読んだだけだと、結局どう使えばいいのか分からないので実験してトーンカーブを比べてみました。

下記を実行すると、縦1pixel、横256pixelで、左側から黒から白に輝度が1ずつ変化する画像が出力できます。

magick -size 1x256 gradient: -rotate 90 output.png

なので、例えば下記のように1つめの引数を変化が分かりやすいように大きめの 5 、2つめの引数をトーンカーブ上の中央 50% として画像ファイルを出力し、画像ファイルの各ピクセルの輝度をプロットするとトーンカーブが得られます。

magick -size 1x256 gradient: -rotate 90 -sigmoidal-contrast 5x50% output.png

このようにしていくつかのパターンをプロットしてみました。

これを見ると、画像を明るくしたいときは下図のトーンカーブ-sigmoidal-contrast 5x0%+sigmoidal-contrast 5x100% を使えば良さそうです。特に暗いところを明るくしたいときは、+sigmoidal-contrast 5x100%5 は適当な数字に変える)が良さそうです。

ちなみに逆に画像を暗くしたいときは下図のトーンカーブにある -sigmoidal-contrast 5x100%+sigmoidal-contrast 5x0% を使えば良さそうです。

試しに下図を明るくしてみます。

これを +sigmoidal-contrast 2x100% で処理すると下図になります。

一応明るくなっているようです。

記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。