- ベストアンサー
プログラミングで色度図を作成する方法
- プログラミングで色度図を作成する方法について調べています。三刺激値XYZ(Yxy)からRGB値に変換し、中心が光っている色度図を作成したいです。参考になるURLやソースコードがあれば教えてください。
- 色度図をプログラミングで描くためにXYZからRGBへの変換式を試しましたが、中心部分を光らせることができませんでした。どのようにすれば中心を光らせることができるのでしょうか。
- 色度図の作成において、中心部分を光らせるための特別なコツや技術があるのか気になっています。プログラミングによる色度図作成の方法について詳しく教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1の者です。 リンクを全部拝見しましたが、「白の部分が大きい」理由は一目で分かりました。 まず、 http://www.nsg-ntr.com/TIME/opt-01.htm http://www005.upp.so-net.ne.jp/fumoto/linkp12.htm http://hyperphysics.phy-astr.gsu.edu/hbase/vision/cie.html http://www.optoscience.com/maker/labsphere/labsphere.html この4つは、全部「階調つぶれ」が起こってしまっています。 白だけでなく、ほかの色のところも全部です。 これらは、おそらく、8階調か16階調、すなわち、昔のディスプレイや画像データの色表現です。 (今のディスプレイや画像は、64階調や256階調などです。) いかなる表色系の色度図であっても、色度図の中の色の変化は滑らかになる定義になっています。 ですから、 正しい色度図であるか否かを見極めるのは簡単なことで、 「人間が見たとき不連続性が感じられるような色度図というのは、正しい色度図ではない」 ということです。 あと、これですが、 http://www.seiwa.co.jp/dbps_data/_material_/top/OPT/html/Diagram/_res/20051124_Diagram.pdf これも、白の部分の楕円形部分の周囲の色変化が、図中のほかの部分と対比すると不自然に感じますよね? 私の勝手な推測では、おそらく、意図的に白の面積を増やしています。(色のあるところに説明の文字を挿入すると、文字が見えにくくなるので、そうしているのでは。) >>> 1. 光源色と物体色(反射・透過)による色度図は違うのでしょうか? いえ、「色度図」というのは普遍性がある「概念」なであって、光のスペクトルが分かれば一意に色度図の中の座標が求まります。 ですから、1つの表色系(XYZ表色系のほか、Labなどのうちの一つ)の中の話であれば、いかなる場合でも不変です。 >>> 2. ある場合、リファレンスになる色度図はどこで入手できるのでしょうか(書籍・HP等)? 前回の私の回答にある http://ja.wikipedia.org/wiki/%E7%94%BB%E5%83%8F:CIExy1931_sRGB_CMY.png の図で、十分だと思いますよ。 もしかしたら、この図も、説明文字を見やすくするために若干色を薄くしたりしてるかもしれませんが、今、何十箇所かサイトを当たりましたが、この図がベストでした。 書籍ですと、私が今まで見たことがあるのでは、ディスプレイ技術者が読むような「色彩科学ハンドブック」とか、デザイン業の人が読む専門書になりますが、いかんせん高価です。 http://books.yahoo.co.jp/book_detail/30415798 しかも、買い求めたところで、その本の図を見るときの、天井灯などの照明で、違う色に見えます。 印刷物や洋服の色というのは、自発光ではないですから。 さらに、 「天井灯の色」が同じでも、印刷物や洋服の色が変わる場合があります。 以下は、私の実体験です。 私、洋服屋さんで非常に気に入った綺麗なエンジ色のジャンパーを見つけ、それを買ったことがあります。しかし、購入後、外に出て太陽光の下で袋を開けてみたら、全然違う色に見えて唖然としたことがあります。 その洋服店の中の照明は蛍光灯でした。 その後、知人に聞いたら「蛍光灯だと色が変わる」という話だったのですが、当時は、その原理が分かりませんでした。 初めて気づいたのは、それから10年以上経って、たまたま色関係の仕事をすることになったときでした。 蛍光灯のスペクトルというのは、連続スペクトルではなく、基本的には1つのピークのスペクトルです。人間に「白い蛍光灯」と思わせるために、3つの波長ピークが出るように3つを混ぜているだけです。 つまり、照明の色自体は人間にとって同じ白に見えても、その照明に照らされているものの色は、照明のスペクトルによって変わる可能性が大いにあるということです。 >>> 3. 中心部分が光るためには、ガンマを考慮すればよろしいのでしょうか? (黒体放射軌跡は関係ないのですか?) >>> 2点目の件ですが、ガンマの値を変更した所明るくなったり、暗くなりました。ただ、どのガンマ値で書いた色度図が正しいのかということがわかりません。 >>> 黒体放射軌跡周辺と、白色の部分が似ているような気がします。 どうしても白の面積を大きくしたいのですね。(笑) ガンマその他を変えて白の面積を増やした時点で、すでに、正しい色度図ではありません。 ですから、質問者さんが任意に図をいじればよいだけの話になってしまいます。 ガンマをいじるも良し、変換式(行列)の個々の係数を変えるも良し、何でもありですので、好みの方法でやってみてください。 ご存知とは思いますが、xy色度図というものは、元々XYZの三次元の個々のベクトル成分を、3者の合計(X+Y+Z)で割り算することによって、 x+y+z=1 になるように規格化したものです。 これによって、zが無くても、(x、y)という二次元座標で全ての色が表現できます。 しかるに、 三次元のうち、もう1つは、どこへ消えたのでしょうか? ・・・・・その答えは「明るさ」です。 つまり、XY座標系の、どこのポイントでも「色」が決まっているだけで、明るさは任意なので、明るさは、全く自由に変えることが出来ますよ。 ど真ん中の白の部分が灰色っぽくて、それをより明るくしたければ、そこの明るさを上げる、すなわち、R、G,Bの各値を同じぐらいだけ増やしてやれば良いです。 なお、 「黒体放射軌跡は関係ないのですか?」 「黒体放射軌跡周辺と、白色の部分が似ているような気がします。」 についてですが、 それは考えすぎです。 例えば、今の液晶テレビでは、大概、画質設定メニューに「色温度」っていうのがありますけど、あれも同じことで、要は、色温度(黒体放射の温度)が高いほど青っぽくなり、低いほど赤っぽくなるだけのことです。 つまり、実用的には「色合い」や「ホワイトバランス」と全く同じことです。 (液晶機器の中で実際にやってることは、「温度」ではなくRGBそれぞれの映像信号、すなわち「電圧」(の相対比)を変えてるだけです) 白熱球を天井灯にしたとき、白熱球の温度で白熱球から出る色が変わり、それによって、部屋の中の全てのもの(家具、壁、その他・・・)の色が変わります。 キャバクラやラブホテルの照明のように極端な色で無い限り、人間は、電球照明の色が若干変わっても、部屋の中のものの色はほとん変わって見えないという自己調節機能を心理的に持っています。 つまり、テレビやディスプレイとかビデオカメラで「色温度」とか「色合い」とか「ホワイトバランス」を調節すれば、その時の照明環境に適した視聴・撮影が出来るということです。 「色温度」と書くと、如何にもかっこいいですから騙されますよね。(笑) 追伸 XYZ表色系もそうですが、色彩科学というのは全部、人間の視覚特性に基づいて作られた学問です。 光のスペクトルまでは物理学なのですが、そこから先は全て、もはや人間科学・人間工学の範疇になります。 追伸2 XYZ表色系におけるX、Y、Zの3値は、そもそも、色彩科学の黎明期に、昔の学者が勝手に、テキトーに決めた値が今も踏襲されているものです。 例えば、2つの色の差を人間が大きく感じるか小さく感じるかは、色度図中の2点間の距離で表されるのが合理的なのですが、xy色度図中では、2点間距離が同じでも、人間にとっては丸っきり同じ色差に見えません。 この、起こるべくして起こってしまったXYZ表色系の欠陥のことを「Macadamの楕円」と呼びます。 http://gc.sfc.keio.ac.jp/class/2003_14454/slides/05/59.html つまり、あまりXYZに深入りしすぎることなく、L*a*b*表色系などに乗り換えちゃうほうが良いと思います。
その他の回答 (1)
- sanori
- ベストアンサー率48% (5664/11798)
一応、この関係の仕事をかなりやった者です。 まず、1点目。 1つめのリンク http://www.nichia.co.jp/jp/product/lamp-color.html の色度図のようにされたいとのことですが、 この色度図の中心部の白の部分の面積は、大きすぎると思います。 色んな文献、PCやEWSで作成したxy色度図を見たことがありますが、こんなに大きいのは見たことがありません。 これぐらいが普通です。 http://ja.wikipedia.org/wiki/%E7%94%BB%E5%83%8F:CIExy1931_sRGB_CMY.png 2点目 RGB値というのは、ディスプレイの特性であるガンマ(液晶やCRTのメーカーによって決められた階調特性)によって変わります。 ディスプレイ側ではなくPC側から設定する方法もあるようですね。 例えば、ガンマ(γ)=3であれば、個々のRGBの明るさが、階調の数値の3乗に比例するように設定されている、ということです。 ガンマをどのような値にするかによって、ご質問文のような (X,Y,Z)→(R,G,B) の変換行列は変わります。 下記リンクでは、ガンマを2.2としています。 http://www005.upp.so-net.ne.jp/fumoto/linkp25.htm しかしながら、私の経験上、ガンマは2.6~2.8が多いと思います。 さらに、 TCO99という、ディスプレイが人間科学的に適切であるかどうかを判定する規格があるのですが、この規格はガンマが小さいディスプレイであるほど不利です。ですから、今販売されているディスプレイは、かつてより若干大きいガンマになっていると思います。 では、 「敢えて」中心の白の面積を大きくするとすれば、どうすれば出来るでしょうか? 答えは、簡単です。 明るいほうの階調で「階調つぶれ」を発生させればよいです。 つまり、 例えば、250~255階調が、人間に「白」と感じるようなディスプレイだとしましょう。 これを、人間が「白」と感じる階調の幅を240~255階調に広げればよいのです。 階調つぶれは、好ましくない特性の代表例ですので、このようなディスプレイは現実には売られていないとは思いますが、変換行列のガンマ補正を変えれば、それをシミュレートできます。 ガンマというのは、指数関数の「べき」ですから、その値を大きくするほど、上のほうの階調間差が拡大します。 これの逆をやれば、階調つぶれを起こさせ、白の面積を拡大できます。 例えば、ガンマを1より小さい数字にしてしまえば、簡単に出来ますよ。
お礼
貴重なご意見ありがとうございました。 一点目の回答の件ですが、LED等の発光物質を扱う会社のHP(参考までに発見できた数社のリンクを張ります)では、中心の白の面積は大きいので、発光物質の色度図は反射・透過の色度図とは違うのかと思い質問させていただきました。 (リンク先の色度図は、中心にD65と書いてあるので、D65光源に対する反射・透過になるのでしょうか・・・?) http://www.nsg-ntr.com/TIME/opt-01.htm http://www005.upp.so-net.ne.jp/fumoto/linkp12.htm http://hyperphysics.phy-astr.gsu.edu/hbase/vision/cie.html http://www.toyoda-gosei.co.jp/led/products/index.html (総合カタログ) http://www.optoscience.com/maker/labsphere/labsphere.html http://www.tlt.co.jp/tlt/tleds/whats_led/whats_led_03.htm http://www.seiwa.co.jp/dbps_data/_material_/top/OPT/html/Diagram/_res/20051124_Diagram.pdf 2点目の件ですが、ガンマの値を変更した所明るくなったり、暗くなりました。ただ、どのガンマ値で書いた色度図が正しいのかということがわかりません。 質問してから思いついたのですが(素人の直感程度なのですが・・・) 黒体放射軌跡周辺と、白色の部分が似ているような気がします。 もう一度、質問内容を整理すると、 1. 光源色と物体色(反射・透過)による色度図は違うのでしょうか? 2. ある場合、リファレンスになる色度図はどこで入手できるのでしょうか(書籍・HP等)? 3. 中心部分が光るためには、ガンマを考慮すればよろしいのでしょうか? (黒体放射軌跡は関係ないのですか?)
お礼
返信遅くなりました。 大変参考になるご意見ありがとうございました。 >どうしても白の面積を大きくしたいのですね。(笑) 色の名前だけ書いてある図がJISにあったので、 大きい物が正しいのかと思いました。 (JIS番号を忘れてしまいましたが、ちょうど以下のURLの色度図の色が塗っていないバージョンです。 http://www.nsg-ntr.com/TIME/opt-01.htm ) >つまり、あまりXYZに深入りしすぎることなく、L*a*b*表色系などに乗り換えちゃうほうが良いと思います。 プログラミングだと難しそうなんですよね・・・ サンプルも見当たらないし。 とにかく描画できるようにがんばってみます。