JPEGのロスレス色調補正
11 月 14th, 2009

あくまで動作サンプル的な物なので、使い勝手などはあまり考えていませんが今後開発するツールの目玉機能?の一つを紹介。
特徴
・画像データそのものは変更せずにICCプロファイルを埋め込む事で色調補正を行うのでJPEGの再圧縮による劣化がない。
・埋め込まれたICCプロファイルを除去すれば元の画像に戻る(元画像にICCプロファイルが埋め込まれていた場合は、同じICCプロファイルを所持していないと戻せません)
欠点
・カラーマネージメントに対応したビューアやブラウザを使わないと色調補正の効果が得られない。
使い方
1 JPEG画像に埋め込むICCプロファイルを選択します。
標準のICCプロファイル(sRGBとAdobeRGB相当)以外に、iccprofileフォルダ内のICCプロファイル(icm,icc)から選択可能。
2 トーンカーブによる補正を行う場合は「トーンカーブを有効にする」のチェックをオンに。
(グレースケール用のプロファイルを選択した場合はチャンネル「RGB」のみ有効になります)
3 JPEG画像をD&Dすると元画像と同じ場所にiccembededフォルダを作成しICCプロファイルを埋め込んだJPEG画像を出力します。
注意点
トーンカーブによる補正は全てのICCプロファイルに対して効果があるわけではありません。

R,G,B,Yを0以上1以下の実数,
Cb,Crを-0.5以上0.5以下の実数で表現した時,
RGB→YCbCr変換は
[ITU-R BT.601]
Y = 0.299 R + 0.587 G + 0.114 B
Cb = -0.169 R - 0.331 G + 0.500 B
Cr = 0.500 R - 0.419 G - 0.081 B
[ITU-R BT.709]
Y = 0.213 R + 0.715 G + 0.072 B
Cb = -0.115 R - 0.385 G + 0.500 B
Cr = 0.500 R - 0.454 G - 0.046 B
上記の逆変換(YCbCr→RGB)は
[ITU-R BT.601]
R = Y + 1.402 Cr
G = Y - 0.344 Cb - 0.714 Cr
B = Y + 1.772 Cb
[ITU-R BT.709]
R = Y + 1.574 Cr
G = Y - 0.187 Cb - 0.468 Cr
B = Y + 1.855 Cb
となるので,Cb=Cr=0 と R=G=B は同値であると理解しました。
毎度のことではありますが,「ド」のつく素人なため,
先のコメントでは見当違いな事を書いてしまいすみませんでした。
ともあれ,全ての画素で Cb=Cr=0 となっていれば,
jpegtran -grayscale ***
でCb,Cr成分を削除してもロスレスだと分かり,勉強になりました。
> 色空間がRGBなプロファイルが埋め込まれている時点で、
> グレースケール化の対象から外してしまってもいいような気がします。
これに関しては病的な例で恐縮ですが,
Photoshopには「Webおよびデバイス用に保存」という機能があり,
その設定ダイアログの中で「sRGBに変換」の項目をチェックしたままJPEG保存してしまうと,
例え元画像がグレースケール画像であったとしても,
sRGBのICCプロファイルが埋め込まれたカラー画像として出力されてしまいます。
↓がその例です。
http://www.mediafire.com/?5ynmziy5jjk
Phososhop上でカラー設定を AdobeRGB / Gray Gamma 2.2 等にして
フォトレタッチをしている人の中には,Web用の画像を生成する時に,
この「sRGBに変換」をチェックしたまま「Webおよびデバイス用に保存」
で出力する人がいる可能性がありますので,
sRGBのICCカラープロファイルが含まれている場合は,
Cb=Cr=0をチェックする必要があるかも,と思いました。
更に,グレースケール画像をフルカラーJPEGとして保存してしまったものに,
本件の「JPEGのロスレス色調補正ツール」でトーンカーブをいじった
RGBのカスタムICCカラープロファイルを埋め込んだ画像というものも
今後現れる可能性を考えると,
(面倒ではありますが),Cb=Cr=0をチェックした方が安全そうだと感じました。
>本件の「JPEGのロスレス色調補正ツール」でトーンカーブをいじった
>RGBのカスタムICCカラープロファイルを埋め込んだ画像というものも
>今後現れる可能性を考えると,
目的はともかく、意図的にグレースケールにならないプロファイルを埋め込んであると考えるべきなので、
グレースケール化を行うのはICCプロファイルを除去するような設定になっている場合のみに限定されるべきだと思います。
> グレースケール化を行うのはICCプロファイルを除去するような設定になっている場合のみに限定されるべきだと思います。
承知しました。このケース以外でR=G=BのJPEGにRGBのカラープロファイルを埋め込む例は思いつきませんので,カラープロファイル付のJPEGはクレースケール化の対象から外して差し支えないと思えました。