SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

JPEGを散歩する

【第1回】色の世界


色を伝える

 色を表現する方法を「表色系」と呼びます。表色系にはいろいろあり、使用目的やその性質によって使い分けられています。

 図4を見てください。表色系の役割を階層的に表現してみました。イメージしやすくするために、右側にWindowsやMac OSなどのOSの模式図を比較対象として載せてあります。OSと表色系を対比させたのは、アプリケーション層とドライバの間を仲介するというためであり、それ以上の意味はありません。

 まず、赤い部分が1人の人間の色処理を示しています。人の眼というデバイスは、L・M・S錐体というインターフェースを通して光を取り込み、?部分(ブラックボックス)を通して最終的に大脳で色(色彩感覚)として認識されます。

 色を伝えようとするとき、人に対して伝えるのか、デバイス(機械)に対して伝えるのかで表現方法が分かれます。人の色彩感覚(アプリケーション層側)をもとに表現するのか、L・M・S錐体(インターフェース側)の特性をもとに表現するのか、の区別とも言えます。

 図4は、さまざまある表色系をアプリケーション層とデバイス層のどちらに親和性があるかにより、筆者が独断で3層に分けたものです。黄色い部分は、伝える相手が「人」もしくは「デザインを扱うような業界」を示しています。緑色の部分は、各種デバイスとそのデバイス固有のローカルな色表現(PCで言うところのドライバ的存在)を示しています。そして、青色の部分は各種表色系となります。

 では、3層に分かれた表色系についてそれぞれ簡単に説明します。

図4:表色系の階層

人に対して色を伝える(黄色い部分)

 人に対して、多種多様な色紙を「順番に並べてください」と頼むと、誰がやっても「色が近いか遠いか(色相)」「同じ色でもより鮮やかなのかくすんでいるのか(彩度)」「同じ色でもより明るいのか暗いのか(明度)」の3つの指標で並べていくそうです。3次元的に色が並ぶわけです。
このような人間の直感をもとに作成された表色系には、「マンセル表色系」「NCS(Natural Color System)」などがあります。「オストワルト表色系」もここに分類しておきましょう(図5)。

図5:直感的な表色系(大日精化工業株式会社「色彩知識」 より引用)

デバイスに対して「色」を伝える

 では、デバイスはどうやって色を表現したらよいのでしょうか。先ほど述べたように、人間にはL・M・S錐体という3種類のセンサしかありません。そして、これら3種類のセンサの出力が同じになれば、人間は同じ色として感じます。ですので、人間の眼をだますためには3種類の光の原色を用意し、それぞれの強度を調整することによって、3つのセンサからの出力をコントロールしてやればよいわけです。

 用意する3原色は、それぞれが独立(残り2つの原色の混色で作ることができない)であれば、どんな色でもかまいません。RGBである必要すら実はないのです。ただし、3原色の選び方によっては表現できる色(出力をコントロールできる範囲)が限られてきますので、どう選ぶかが大事になってきます。

 ブラウン管や液晶のように光を発して表現する場合は、主として“光の3原色”と呼ばれる「RGB」が使われます。一方、印刷のように光を反射させることで表現する場合は、RGBが反射するようにその補色である「CMY(シアン・マゼンタ・イエロー)」が3原色として使用されます。眼に入る光を3原色でコントロールするという意味において、原理はどちらも同じです。

 このとき、どんな3原色を用いるかはメーカーによってもデバイスによっても異なります。ただ、デバイスごとに3原色の決め方がばらばらでは不便極まりありません。そこで、基準となる3原色を決めたものが「sRGB」や「AdobeRGB」といった表色系です(図6)。

図6:sRGBとAdobeRGB(Wikipedia「sRGB」および「Adobe RGB color space」から引用・合成)

 デバイスの中には、CRTやプリンタのように、直接人間の眼に対して表現するものだけではなく、放送のように電波に乗せて色情報を送るデバイスもあります。この場合、表現方法を3原色にこだわる必要は特にありません。帯域に対する制約の方が深刻なため、むしろ、制約により適した表現方法への工夫が求められます。JPEGも圧縮することが主目的であるため、状況は似ています。放送に使われているNTSCやJPEGなどは、そういう理由で「輝度+色差」という表色系を用いています。その理由は次回に述べます。

すべての色を絶対的に表現できないか

 色を伝えるとき、人間を相手にした場合には「色相」「彩度」「明度」の3つの尺度で表すと都合がよく、デバイスを相手にした場合には「RGB(CMY)」の3原色で表すと都合が良いことが分かりました。では、それらを仲介する絶対的な色表現というのはないのでしょうか。
人間の可視領域のすべての波長に対して、それを「等色実験(図7)」と呼ばれる実験によりRGBの光の強さで表しプロットしたものが「CIErgb表色系」です。図8はCIErgb表色系から輝度成分を除き、“色み”だけを2次元で表したものです。さらに、CIErgb表色系を座標変換して扱いやすくしたものが「CIEXYZ表色系」です。図9は輝度成分を除いて“色み”を表したもので、「xyY色度図」と呼ばれます。

図7:等色実験
図8:CIErgb(Wikipedia「CIE 1931 color space」より引用)
図9:xyY(CIEXYZ)(Wikipedia Commons ~ より引用)

 しかし、CIEXYZは人間の感覚と一致しない部分が多い表色系です。

 まず、色空間の均等性が保証されません。図10をご覧ください。ここに表示されている楕円は、この楕円内では人間は色の区別がつかない、つまり同じ色に見える範囲を意味しています(ただし楕円の大きさは実際の10倍で表示されています)。場所によって楕円の大きさが異なるということは、「人間の直感的な色と色の距離感(違い)は色度図上の直線距離で表現できない」ことを意味します。理想は、すべての円が同じ大きさでかつ真円であることです。マンセル表色系はそれを満たしています。

図10:マックアダム楕円(Wikipedia「MacAdam ellipse」より引用)

 また、XYZ表色系のY軸は輝度を表しますが、人間の感覚器の特性として「物理的な刺激の増加に対して対数的に知覚する(ウェーバ・フェヒナの法則)」があります。これは、Y軸の輝度値が10から20に上がったときと80から90に上がったときでは、その差が人間の直感とは異なるということです。

 そこで、人間の感覚に合わせて新たに「明度」という指標を作り、色差と明度が人間の感覚と似か寄るように改良した表色系が「CIELUV」や「CIELAB」です。人間の直感に馴染みやすいマンセル表色系や、デバイス側にとって都合のよいsRGB表色系などは、CIEXYZやCIELABといった絶対表現が可能な表色系を仲介することで、互いに色情報の伝達が可能となります。これにより、色情報の伝達が汎用化されたと言えます。

PCで色を扱う仕組み

 汎用化されたとはいえ、表色系は複数あり、色情報の伝達にはルールを決める必要があります。現在の代表的なルールは次の2つでしょう。

1.表色系の固定化

 これは、「すべてのデバイスでsRGBを共通の表色系として扱いましょう」というルールです。Hewlett-PackardとMicrosoftが1996年に共同で策定し、後に1999年にIEC(国際電気標準会議)の色空間国際規格(IEC61966-2-1)に採用されました。皆がこれに従う場合、例えば (R, G, B) = (20, 30, 40) という表現だけで色の値が一意に決まるため、扱いが非常にシンプルです。Windows環境(XPまで)は実質こういう世界であり、既存のデバイスにもsRGBを前提として作られているものが数多くあります。このsRGBという表色系は、当時のディスプレイ特性に準じて原色が決められているので、人間が認識できる色全体に比べて狭い範囲の色しか表現できません。昨今のデバイスはより広い範囲の表現能力をローカルに持っているため、Windowsを経由したばっかりにsRGB空間にクリップされてしまうというのは、なかなか心苦しいですね。

2.デバイスごとに色域の申告

 こちらは、「デバイスが自分の表現できる色域を、絶対表現のできる表色系にマッピングして申告しましょう」というルールです。この場合、共通の表色系はすべての色を表現できるものを選ぶので、色情報の伝達途中でクリップされるということがなくなります。ただし、OSやアプリなどが色を扱う場合にはデバイスに合わせてマッピング方法を考慮して変換をかける、という複雑な処理が入ってきます。これをCMS(Color Management System)と呼び、具体的な実装としては、ICC(国際色彩協会)の規格(ISO 15076)に合わせたMacintoshの「ColorSync」や、Windowsの「ICM」があります。しかし、Windows(XPまで)では、諸事情からほとんど有効利用されていないようです。ICCでは絶対表現をする表色系として、主にCIELABが用いられています。

 各デバイスは、CIELABとローカル表現の間のマッピング情報を「ICCプロファイル」という情報として提供します。また、Adobe製のフォトレタッチソフト「Photoshop」では、JPEGファイル自身にもプロファイルを含めることができます。そうなると、例えばWebブラウザの場合、色を正確に表現するにはJPEGファイルにある色データをプロファイルに応じてCIELAB表現とし、今度は表示するモニタのプロファイルに合わせて更に変換する、という作業を行わなければなりません。しかし、実際それを行っているブラウザはSafari(Macintosh版/Windows版)だけのようです。
WebブラウザがJPEGに含まれるICCプロファイルを正しく処理しているかどうかは、ICC本家である以下のページの写真が正しく表示されるかどうかをご覧ください。田の字型に4つに区切られたJPEGは、それぞれ異なるプロファイルを持っています。Webブラウザがプロファイルに従って表示したときのみ、正しく表示されます。

http://www.color.org/version4html.xalter

 色を扱うのはなかなか大変ですね。

  次回は、JPEGに用いられている「輝度+色差」による表現と、色表現におけるその他の可能性に関して、思いをめぐらせてみたいと思います。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
JPEGを散歩する連載記事一覧
この記事の著者

藤原 剛(フジワラ タケシ)

34歳。株式会社ビー・ユー・ジー熱血社員。名刺の肩書きはファームウェア職人。^^組込みではブートローダやOSポーティング、デバイスドライバあたりが好み。CPUではSHやMIPSよりARMやPowerPCが好き。WindowsやMac等の高級OSでは、デバイスドライバやソフトのチューニングが好き。最近は自社製...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3749 2009/03/26 17:51

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー