Quantcast
Channel: mattintosh note
Viewing all articles
Browse latest Browse all 892

ImageMagickでLabに変換してLチャンネルにだけアンシャープをかけたい

$
0
0

ほとんどの人は写真にシャープネスフィルタをかけるとき、RGB のままでフィルタを適用すると思う。自分もカメラを始めた頃は普通に RGB のままでかけていた。んで昔、どっかのサイトで「Photoshopでアンシャープをかけるならカラースペースを Lab に変換して L チャンネルにだけシャープネスフィルタをかける」というのを見かけて仕上がりが綺麗だったのでそれ以降はずっと LAB 変換 -> アンシャープ -> RGB 変換 という工程を行っていた。

暫くして Linuxに移行して Photoshopとサヨナラしたので GIMPを使っているのだけどこの操作をやろうとするとなかなか面倒くさい。というか Linuxを使っているのだからもっと楽にやりたい。そこでこの工程を ImageMagickで出来ないものかとやってみた。

まずはオリジナルの画像。はてなブログに上げた時点で原寸ではなくなってるのだろうけどそこは仕方がない。

f:id:mattintosh4:20200209005258j:plain
オリジナル

Lab カラーとは簡単に言うと明るさと色を2系統に分けたカラーモデル。詳しくは Wikipediaでどうぞ。

f:id:mattintosh4:20200209005549j:plain
Lab - L

f:id:mattintosh4:20200209005621j:plain
Lab - a

f:id:mattintosh4:20200209005634j:plain
Lab - b

これらの画像は -colorspace Labにした後、-separateで分解すれば出力出来る。

convert input.jpg -quality100-colorspace Lab -separate output.jpg

まずはリサイズするわけだけど ImageMagickの公式ドキュメントに RGB に変換してからリサイズを行うテクニックが紹介されている。これは知らなかった。

Resizing or Scaling -- IM v6 Examples

convert earth_lights_4800.tif -resize500 earth_lights_direct.png
convert earth_lights_4800.tif -colorspace RGB -resize500-colorspace sRGB earth_lights_colorspace.png

f:id:mattintosh4:20200209014030p:plain
RGB 変換なし

f:id:mattintosh4:20200209014052p:plain
RGB 変換あり

というわけでここではこのリサイズ方法も含めてテストする。

まずは普通に sRGB でリサイズ。

convert input.jpg -quality100-filter Lanczos2 -colorspace sRGB -resize800 output.jpg

f:id:mattintosh4:20200209005319j:plain
sRGB リサイズ

続いて RGB に変換してからリサイズ。ImageMagickのサンプル同様、元画像より若干明るい。

convert input.jpg -quality100-filter Lanczos2 -colorspace RGB -resize800-colorspace sRGB output.jpg

f:id:mattintosh4:20200209005345j:plain
RGB リサイズ -> sRGB

次にアンシャープフィルタのテスト。まずは普通にかける。

convert input.jpg -quality100-filter Lanczos2 -colorspace RGB -resize800-unsharp 1x1+1+0-colorspace sRGB output.jpg

f:id:mattintosh4:20200209005423j:plain
RGB リサイズ -> アンシャープ

で、最後に Lab アンシャープ。

convert input.jpg -quality100-filter Lanczos2 -colorspace RGB -resize800\
-colorspace Lab -separate\(-clone0-unsharp 1x1+1+0\)-swap0+delete-combine-set colorspace Lab \
-colorspace sRGB output.jpg

f:id:mattintosh4:20200209005455j:plain
RGB リサイズ -> Lab アンシャープ

4枚を並べてみる。Lab アンシャープが最も明るい印象。

f:id:mattintosh4:20200209005955j:plain

並べてみてもわかりづらいので GIF アニメーションにしてみる。色空間変えてリサイズやアンシャープフィルタをかけるだけでここまで違う(素材によるだろうけど)。

f:id:mattintosh4:20200209015422g:plain

Lab 化の部分についての補足

Lab に変換したあとに -separateで内部的に画像を分割することで L チャンネルにのみフィルタを適用することが出来、一時ファイルを作成する必要も無い。

-colorspace Lab -separate\(-clone0-unsharp 1x1+1+0\)-swap0+delete-combine-set colorspace Lab

まずこの部分で入力ソースが L、a、b の 3 つに分割される。

-colorspace Lab -separate

で、-clone 0で L を複製してアンシャープフィルタをかける。

\(-clone0-unsharp 1x1+1+0\)

この時点で内部的に L、a、b、L の 4 つのソースが存在する。最初の L と最後の L を -swap 0で入れ替えて、一番最後のソースを +deleteで削除する。

-swap 0+delete

分割されているものを -combineで結合する際にカラースペースを Lab として指定する。

-combine -set colorspace Lab

あとは sRGB に変換したらおしまい。


Viewing all articles
Browse latest Browse all 892

Trending Articles