表示色成分(色空間)について |
自然界の中には無数の色や明るさの度合いが在り、それらを記録するために幾つかの成分に分解する手法が採用されています。
ここではそれら表示色成分の記録手法とその特徴などを説明します。
JPEG規定では、個々の成分について細かくは規定されていませんが、DCTの規定では1から4つまでの色成分で指定することになっています。
※JFIFではYCbCrまたはYだけのグレースケールを指定し、記録する順番、コンポーネントIDまで規定されています。
※テジタルカメラの撮影情報(Exif)の中に色空間(カラースペース)という項目があり、通常RGB、場合によってはRGB以外(AdobeRGB)と言う内容が記録されます。
これは、カラーマッチングと呼ばれるプリントや表示の色味を撮影された画像のものに合わせる話しで、言葉は同じでも違う意味になりますのでご注意願います。
デジタルカメラで出力されたJPEGファイルは、データの種類としての色空間はExifの規定によりYCbCrのみとなります。
YCbCr |
輝度成分(Y)と青色差成分(Cb)、赤色差成分(Cr)に分けます。JPEGは一般的に、このパターンを使用しています。
RGB変換式
Y = 0.2990 * R + 0.5870 * G + 0.1140 * B
Cb = -0.1687 * R - 0.3313 * G + 0.5000 * B + 128
Cr = 0.5000 * R - 0.4187 * G - 0.0813 * B + 128
R = Y + 1.40200 x (Cr - 128)
G = Y - 0.34414 x (Cb - 128) - 0.71414 x (Cr - 128)
B = Y + 1.77200 x (Cb - 128)上の変換式により、輝度成分と2色の色差成分だけで三原色が符号化と複号が出来ます。(緑の成分1色が不要となる)
JPEGが得意とするフルカラーの画像は輝度と色成分に分けたとき、輝度に対して色成分の変化が少ないという特徴を持っています。
輝度と色成分を分けることで、その特長を際立たせ、色成分を間引くことで、人の目では判らない部分で画像品質を落とし、少ないデータでフルカラーデータを再現する工夫をしています。
YUV |
輝度成分(Y)と青色差成分(U)、赤色差成分(V)
上のYCbCrとほぼ同じ、RGB変換式もほぼ同じものを使用します。
テレビ信号や動画(モーションJPEG)関係の資料ではこちらの表記を良く使用するようです。
JpegAnalyzerはYCbCr表記を使用しています。
グレースケール |
輝度成分(Y)だけの白黒画像です。
白黒画像はYCbCrのものも存在し、ファイルサイズには余り差が出ません。
この輝度成分だけのグレースケール画像はメモリーが少なくて済み展開速度が速くなるのがメリットとなります。
CMYK |
印刷用の色成分に分解されたものです。
カラープリンタやコピーで4色インクを使っている場合、この色の組み合わせになっています。
画像レタッチソフトで有名なPhotoshopなどでサポートされているようですが、余りこの色空間を使用したファイルは出回っていません。
C(Cyan)空色・M(Magenta)ピンク・Y(Yellow)黄色・K(blacKまたはKey)黒 各色0でRGBとは逆に白、各色最大(255)で黒色になります。
RGB変換式(YCbCrには再変換が必要)
R=C+K G=M+K B=Y+K 但し、RGB各色0以下で0、255以上で255にする
CMYK画像解析例
YCCK |
これも印刷用みたいです。とりあえず判ったのはこれだけ↓。
YCbCr変換式(RGBには再変換が必要)
YCCKをYin、C1in、C2in、Kinとし YCbCrをYout、Cbout、Croutとしたとき
Yout=Kin-Yin Cbout=255-C1in Crout=255-C2in
RGB |
RGB成分そのまま JPEG形式で出力はできますが、JPEGにする意味がないので、
この形式はほとんど使用されていないと思われます。
RGB画像解析例
色空間判定ルール
※注意※
・開発者向けの内容となっており、一般の利用者は読み飛ばして頂いて結構です。
・読取用のルールのため、ファイルを作る側はもっと厳密にJFIF等の仕様に合わせる必要が有ります。
JPEGフォーマットでは色空間を定義するものが基本規定に含まれておらず、アプリケーションセグメントに依存しています。
一般的なYCbCrはどのJPEGビュアでも表示が出来ますが、RGB、CMYK、YCCKなどの色空間を使用したものは判定基準が画像出力ソフト側のローカルルールだったりするので、ソフトにより挙動が異なったりする場合があります。
特にCMYK画像についてはPhotoshopの旧版でインク量が0%〜100%が逆転となるバグが有ったり、CMYK形式で出力するとYCCKのフラグが上がったり、混同してしまう要因となっています。
以下の判定ルールは海外の資料を参考に記載しており、曖昧な部分まで言及した内容となっています。
また、必ずこのルール通りにしないといけないとか、ルール通りになっていないから間違っていると言う訳では無く、このルールは標準的だと言うだけで公的な規定では無いので誤解の無い様に
色空間判定の要素
1、参照するのは2つのAPPセグメント
APPセグメントで色空間を認識させているものは、JFIF(APP0)とAdobe(APP14)の2つです。
Exif(APP1)もJFIFと同等な意味合いを持ち判定要素に含めれば理想的ですが、一般的なJPEGビュアではExifを読み飛ばします。
2、もう一つの重要な判定要素
JPEGファイルの色空間判定に必要な要素としてSOFのパラメータが有ります。
その中でも特に重要なものがコンポーネント数(以降Nfと略)です。
あと要素としてコンポーネントID(以降Ciと略、iは順番)が挙げられます.
先のAPPセグメントで色空間が指定されていない場合に使用します。
色空間判定順序
1項で判定出来ない場合は、2項へと順次判定条件を変え、最終的に色空間の明確な指定が無いものは推測で判定します。
1、JFIFの有無
JFIFセグメントが有る事で、YCbCr(Nf=3)またはグレイスケール(Nf=1)に判定出来ます。
2、Adobe(APP14)セグメントのTransFormFlag
Adobe(APP14)セグメントが有る場合、TransFormFlagを調べます。
TransFormFlag=2,Nf=4 => YCCK ※Adobe Photoshopで出力するCMYK画像はこれ
TransFormFlag=1,Nf=3 => YCbCr
TransFormFlag=0,Nf=4 => CMYK(推測) TransFormFlag=0,Nf=3 => RGB (推測)
3、無印JPEG判定1
上記以外のJPEGファイルは推測で判定します。
Nf=1 グレイスケール
Nf=2 グレイスケール+A
Nf=3,C1〜C3=01〜03 YCbCr
Nf=4,C1〜C4=01〜04 YCbCrA
A:アルファチャネル(通常は存在しないので、無視してもかまいません)
4、無印JPEG判定2
上記でまだ判定出来ない場合、コンポーネントIDをASCIIコードとして文字に変換します。
CMYK画像解析例 |
Address Length Message
00000000 ****** SOI :Start Of Image ******
00000002 [0208] APP13:Photoshop Image Resource Block(IRB) Count = 11
0000020C [000E] APP14:Adobe segment Ver.100 Flags [00000000]
Transform = 2 YCCK色空間 (CMYK画像)
0000021C [0084] DQT :Define Quantization Table 【Photoshop 画質8 大】
00000220 QT0-8bit Photoshop輝度 画質8 大
00000261 QT1-8bit Photoshop色差 画質8 大
000002A2 [0014] SOF0 :Start Of Frame 0 - Baseline DCT
3063[1] x 2042[6] pixel - 24bit color (YCCK)
ComponentID-01 Y 1x1 QT0
ComponentID-02 C 1x1 QT1
ComponentID-03 c 1x1 QT1
ComponentID-04 K 1x1 QT0
000002B8 [0004] DRI :Define Restart Interval (MCU blocks=383)
000002BE [01A2] DHT :Define Huffman Table 【Photoshop 画質6-10(IR41-83)】
000002C2 HT0-DC Photoshop輝度DC HT 中画質
000002DF HT1-DC Photoshop色差DC HT 中画質
000002FC HT0-AC Photoshop輝度AC HT 中画質
000003AF HT1-AC Photoshop色差AC HT 中画質
00000462 [000E] SOS :Start Of Scan 0-63[00]
HT Selector[DC/AC] Y[0/0] C[1/1] c[1/1] K[0/0]
00000472 ****** Image Data ******
Data Size 699,339 bytes
000AB03D ****** EOI :End Of Image ******
Analyze End.PhotoshopでCMYK形式で保存すればこのようなファイルになります。
APP14で上がるフラグに併せてYCCKと表示されますが、なぜこれをCMYKと呼ぶのかは判っていません。
RGB画像解析例 |
Address Length Message
00000000 ****** SOI :Start Of Image ******
00000002 [000E] APP14:Adobe segment Ver.100 Flags [80000000]
Transform = 0 YCbCr/YCCK以外
00000012 [0084] DQT :Define Quantization Table 【ImageReady 画質48】
00000016 QT0-8bit ImageReady輝度 画質48
00000057 QT1-8bit ImageReady色差 画質48
00000098 [0011] SOF0 :Start Of Frame 0 - Baseline DCT
385[15] x 534[10] pixel - 24bit color (RGB)
ComponentID-01 R 2x2 QT0
ComponentID-02 G 1x1 QT1
ComponentID-03 B 1x1 QT1
000000AB [01A2] DHT :Define Huffman Table 【Photoshop 画質6-10(IR41-83)】
000000AF HT0-DC Photoshop輝度DC HT 中画質
000000CC HT1-DC Photoshop色差DC HT 中画質
000000E9 HT0-AC Photoshop輝度AC HT 中画質
0000019C HT1-AC Photoshop色差AC HT 中画質
0000024F [000C] SOS :Start Of Scan 0-63[00]
HT Selector[DC/AC] R[0/0] G[1/1] B[1/1]
0000025D ****** Image Data ******
Data Size 32,435 bytes
00008110 ****** EOI :End Of Image ******
Analyze End.
RGB画像のプレビューでは表示色を間違い、正しく表示出来ません。
コンパイラー付属のJPEGライブラリーがこの形式をサポートしていない為で、
私の力量では修正出来そうにないので、黙認して下さい。