今回は、コマンドラインから画像加工を行えるImageMagickを取り上げます。画像加工ならGIMPやF-Spotを使えばいいのに、“なぜコマンドラインから?”と思われるかもしれませんが、コマンドラインならではの利点もあります。
例えば、数百枚の画像に同じ処理を施す場合、GIMPで1枚1枚手作業で処理するのに比べて、コマンドラインやスクリプトから一括で処理した方が、時間も労力もかかりません。
ImageMagickは数多くの機能を備えていますが、その中からデジカメで撮影後の写真を加工する用途を中心に紹介していきます。
ImageMagickのインストール
インストールは、[アプリケーション]-[アクセサリ]-[端末]を開いて以下のコマンドを実行します。
ImageMagickのドキュメントをインストールする場合は、以下のコマンドも実行します。
インストールしたドキュメントを閲覧するには、Firefoxのアドレス欄に以下を入力します。
ドキュメントを開いてみるとわかりますが、これはImageMagickのホームページとほぼ同一のものです。
ImageMagickの基本
ImageMagickでは、画像を変換する場合に「convert」や「mogrify」というコマンドを用います。「mogrify」コマンドを使ってしまうと元画像を書き換えてしまうため、新たなファイルとして保存する「convert」コマンドを使うのがよいでしょう。
例として、カレントディレクトリ内に保存されている写真「P001.jpg」のJPEG圧縮率を90%に変更して「converted_P001.jpg」という名前で保存してみます。以下のコマンドを実行します。
ただし、このようにImageMagickを使うだけでは、GIMPで写真を開いて、ファイルの保存ダイアログで、圧縮率を指定するのと手間が変わりません(図1)。
そこで、「xargs」というコマンドと組み合わせて使い、カレントディレクトリ内のJPEGファイルすべてに同じ処理を施してみます。以下のコマンドを実行します。
このコマンドでは、lsコマンドでカレントディレクトリ内のJPEGファイルをリストアップし、その出力をxargsコマンドに渡します。xargsコマンドは、与えられたファイル名を{}の部分に代入して、JPEGファイルの数だけconvertコマンドを実行してくれます。
例えば、カレントディレクトリ内に「P001.jpg, P002.jpg, P003.jpg, ...」というファイルがあった場合は、変換後の画像を「converted_P001.jpg, converted_P002.jpg, converted_P003.jpg, ...」と保存してくれます。
なおここでは、処理状況を表示させるため「-verbose」オプションを追加しています。
輝度、彩度の変更
「-modulate」オプションを用いると、簡単に輝度と彩度が変更できます。ただし、この操作が行われるのはHSL色空間です。
-modulateオプションは3つの値を取り、「輝度(Lightness)」「彩度(Saturation)」「色相(Hue)」の順にパーセントの値で指定します。値が指定されない場合は100%が指定されたものと解釈されます。
輝度を110%、彩度を130%に上げる場合は、以下のように実行します。
この操作は、元の画素の持つ値に対して、-modulateオプションで指定した値を掛ける動作をします。これは、GIMPメニューの[色]-[色相-彩度](図2)とは全く異なる動作です。GIMPと似たような動作をさせる場合は、以下のように指定します。
このコマンドでは、まず画像をHSL色空間に分解し、チャンネルごとに値を加えています。そして最後にRGB色空間に戻して保存しています。
操作するチャンネルの指定方法ですが、ImageMagickではRGBの3文字しか使えません。HSL色空間ではHを操作したい場合はRを、Sの場合はGを、Lの場合はBを指定してください。
また、加える値をパーセントではなく直接指定する場合の値の範囲ですが、ImageMagickでは内部でチャンネルごとの値を16bitで持っているため、0から65535までです。
レベルの調整
明度(Value)のレベルを調整するためのオプションはいくつかありますが、ここでは「-linear-stretch」を紹介します。
-linear-stretchは、GIMPの[色]-[トーンカーブ]ツールを使って、黒と白の基準点を決め、その間を直線で結ぶ操作に相当します(図3)。
ただし、画像1つ1つごとに、黒と白の基準点を手作業で指定していくことは難しいので、-linear-stretchでは黒と白の基準点をパーセントで指定します。
例えば、100万画素の画像で、白の基準点を1%と指定した場合、ImageMagickは明度の大きい順に画素を数えていきます、そして、100万画素の1%である1万画素目を白の基準点とします。よって、少なくとも1万画素は、真っ白な画素になります。
黒の基準点は変更せずに、明度の上位1%の点を白の基準点にするには、以下のコマンドを実行します。
変換画像の確認
ここまで紹介した内容を使って、彩度を20%上げ、明度を調整し、圧縮率を90%で指定して保存してみます(図4)。ただし、ここでは変換前と変換後をわかりやすくするため、それぞれを左右に並べるオプションを追加しています。
この結果でよければ、以下のコマンドでカレントディレクトリ内のJPEGファイルすべてを変換します。
写真の撮影日時の修正
ImageMagickは、様々な機能を持ち、ほとんどの画像操作がImageMagickでできてしまいます。
しかし、他のツールを使った方が効率がよい場合もあります。その例としてExif情報内の撮影日時の変更を取り上げ、「jhead」というツールを紹介します。
インストールは以下のコマンドを実行します。
画像のExif情報を取得するには、以下のようにファイル名を渡します。
すると、以下のようにExif情報が表示されます。
撮影時刻を3時間進ませる場合は、「-ta」オプションを使って以下のように実行します。
また、先ほど取得したExif情報のカメラモデルの項目を使って、特定のカメラで撮影された写真にのみ変更を加えられます。「EX-V7」で撮影された写真のみ撮影時刻を5分戻す場合は、以下のように実行します。
年月日を操作する場合は、単純に365日を加算したりするのではなく[1]、基準となる1枚の変更後の撮影年月日と変更前の撮影年月日を引き算の形で表して以下のように指定します。
来週12月30日はお休みです。次回は1月6日に掲載の予定です。
みなさま良いお年を。