ほとんどの人は写真にシャープネスフィルタをかけるとき、RGB のままでフィルタを適用すると思う。自分もカメラを始めた頃は普通に RGB のままでかけていた。んで昔、どっかのサイトで「Photoshop でアンシャープをかけるならカラースペースを Lab に変換して L チャンネルにだけシャープネスフィルタをかける」というのを見かけて仕上がりが綺麗だったのでそれ以降はずっと LAB 変換 -> アンシャープ -> RGB 変換 という工程を行っていた。
暫くして Linux に移行して Photoshop とサヨナラしたので GIMP を使っているのだけどこの操作をやろうとするとなかなか面倒くさい。というか Linux を使っているのだからもっと楽にやりたい。そこでこの工程を ImageMagick で出来ないものかとやってみた。
まずはオリジナルの画像。はてなブログに上げた時点で原寸ではなくなってるのだろうけどそこは仕方がない。
Lab カラーとは簡単に言うと明るさと色を2系統に分けたカラーモデル。詳しくは Wikipedia でどうぞ。
これらの画像は -colorspace Lab
にした後、-separate
で分解すれば出力出来る。
convert input.jpg -quality 100 -colorspace Lab -separate output.jpg
まずはリサイズするわけだけど ImageMagick の公式ドキュメントに RGB に変換してからリサイズを行うテクニックが紹介されている。これは知らなかった。
Resizing or Scaling -- IM v6 Examples
convert earth_lights_4800.tif -resize 500 earth_lights_direct.png convert earth_lights_4800.tif -colorspace RGB -resize 500 -colorspace sRGB earth_lights_colorspace.png
というわけでここではこのリサイズ方法も含めてテストする。
まずは普通に sRGB でリサイズ。
convert input.jpg -quality 100 -filter Lanczos2 -colorspace sRGB -resize 800 output.jpg
続いて RGB に変換してからリサイズ。ImageMagick のサンプル同様、元画像より若干明るい。
convert input.jpg -quality 100 -filter Lanczos2 -colorspace RGB -resize 800 -colorspace sRGB output.jpg
次にアンシャープフィルタのテスト。まずは普通にかける。
convert input.jpg -quality 100 -filter Lanczos2 -colorspace RGB -resize 800 -unsharp 1x1+1+0 -colorspace sRGB output.jpg
で、最後に Lab アンシャープ。
convert input.jpg -quality 100 -filter Lanczos2 -colorspace RGB -resize 800 \ -colorspace Lab -separate \( -clone 0 -unsharp 1x1+1+0 \) -swap 0 +delete -combine -set colorspace Lab \ -colorspace sRGB output.jpg
4枚を並べてみる。Lab アンシャープが最も明るい印象。
並べてみてもわかりづらいので GIF アニメーションにしてみる。色空間変えてリサイズやアンシャープフィルタをかけるだけでここまで違う(素材によるだろうけど)。
Lab 化の部分についての補足
Lab に変換したあとに -separate
で内部的に画像を分割することで L チャンネルにのみフィルタを適用することが出来、一時ファイルを作成する必要も無い。
-colorspace Lab -separate \( -clone 0 -unsharp 1x1+1+0 \) -swap 0 +delete -combine -set colorspace Lab
まずこの部分で入力ソースが L、a、b の 3 つに分割される。
-colorspace Lab -separate
で、-clone 0
で L を複製してアンシャープフィルタをかける。
\( -clone 0 -unsharp 1x1+1+0 \)
この時点で内部的に L、a、b、L の 4 つのソースが存在する。最初の L と最後の L を -swap 0
で入れ替えて、一番最後のソースを +delete
で削除する。
-swap 0 +delete
分割されているものを -combine
で結合する際にカラースペースを Lab として指定する。
-combine -set colorspace Lab
あとは sRGB に変換したらおしまい。