• ベストアンサー

RGBを三刺激値に変換(?)

3CCDカメラで各R,G,Bごとに画像を出力してRの画像、Gの画像、Bの画像、 を取得しました。 そこで、画素の濃度のMaxが255で、各画像の同じ座標の 画素が例えばRの画像:100、Gの画像:200、Bの画像:50、だったとします。この値を、三刺激値のXYZで表現するにはどうしたら良いでしょうか。

  • 科学
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#17230
noname#17230
回答No.2

ご質問者さんも他の回答者さんも、大いなる勘違いがあるようですね。 > この値を、三刺激値のXYZで表現するにはどうしたら良いでしょうか。 できませんよ。そんなこと。 ご質問のRGBの値は、色彩分析で言うところのきちんと定義通りに 測定・規格化されたRGBの強度になど全くなっていません。なので、 直接XYZ三刺激値に換算することなんぞできません。 それは、単に24bitカラーでの8bit分解能でデジタル色を合成する 元データです。それがビデオカード経由でCRTディスプレイやカラー プリンタに出力されて初めて「色」になるわけですが、普遍的な(世界 標準の)きちんとしたカラーマッチングが成されていない限り、不偏な 「色表現」にはなり得ません。分かりますよね? すなわち、同じ(R,G,B)=(100,200,50)であっても、出力系が 異なれば「違う色」になる、これではXYZ三刺激値なんぞには変換 できる訳などありません。

gasgas01
質問者

補足

回答ありがとうございます。 光源など測定時の条件を定義どうりに測定を行った結果ならば #1でかかれている変換式で変換できるのでしょうか。 また、色を計測する時の条件はなにで規格化されていて どのような条件になっているのでしょうか。

その他の回答 (2)

  • c80s3xxx
  • ベストアンサー率49% (1631/3289)
回答No.3

カメラの撮像系からその後の信号処理を経て0-255のデジタル値を得るまでの,全体を通しての入出力特性を測定しない限り,話がはじまりません. 撮影条件等以前の問題です.

  • ma-tang
  • ベストアンサー率56% (31/55)
回答No.1

RGB→XYZ変換式を使用するのが一般的です。 変換式は、 X = 0.412453*R + 0.35758*G + 0.180423*B Y = 0.212671*R + 0.71516*G + 0.072169*B Z = 0.019334*R + 0.119193*G + 0.950227*B です。 この式のR,G,Bそれぞれに画素値を代入すれば求められます。 記入ミスがあるかもしれないので、 http://image-d.isp.jp/commentary/color_cformula/XYZ.html で確認してみてください。 他にも「RGB XYZ 変換」等と検索すると参考サイトが多数みつかると思いますよ。 出力したR,G,B各画像の全てのピクセルに対してXYZ値を求めたいのであれば、膨大な計算量になるので、RGB→XYZ変換のプラグラムを組む必要があります。

gasgas01
質問者

お礼

ありがとうございます。変換式参考にさせていただきます

関連するQ&A

  • 画像のRGBの値

    画像フィルタが必要になり、そのために画像の性質を知るために、画像のRGBの値を直接求めようと思いました。 具体的には、画像ファイル(BMP)があり、その画像の全画素のRGBの値をテキストファイル(CSV形式)に変換したいのです。そのようなツールありますか? 特殊な用途なので、 while(getpixel(r,g,b)) { printf("%d,%d,%d\n",*r,*g,*b); } のようなプログラムを書かないといけないと思うのですが、「BMPファイルの先頭から順番に画素のRGBの値を持ってくる関数getpixel」が書けません。

  • RGB値からHSV値への変換式に関して質問があります.

    RGB値からHSV値への変換式に関して質問があります. S=MAX[R,G,B]-MIN[R,G,B] V=MAX[R,G,B] の2式は分光分布を見れば,その式の意味は理解できました. ただ, H=60*(G-B)/(MAX[R,G,B]-MIN[R,G,B]) if R=MAX[R,G,B] H=60*(B-R)/(MAX[R,G,B]-MIN[R,G,B])+120 if G=MAX[R,G,B] H=60*(R-G)/(MAX[R,G,B]-MIN[R,G,B])+240 if B=MAX[R,G,B] の式の意味が理解できません. なぜ,最大値でない残りの2値の差を彩度で割ると色相が算出されるのでしょうか. どなたか分かる方,回答よろしくお願い致します.

  • Delphi6で、指定した座標のRGB値を取得する

    保存された画像(bmpまたはjpg形式)の指定した座標 (仮に画面中央とします。また、マウスで指定した場所など、座標を設定した後に座標を設定しなおすことはありません。また指定した座標というのは一箇所で良いです。複数あれば、なおよいですが。) のRGB値を返すにはどうしたらよいでしょうか? テキストボックスなり、ラベルなりにR、B、G、それぞれの値を出力するのが目標です。 また、Delphiに対して理解が不足しているので、ソースプログラムや参考URLをそのまま載せていただけると嬉しいです。 方法をご存知の方いましたら、是非よろしくお願いします!m(_ _)m

  • 単版式と3CCD(CMOS)の画素数について教えて下さい。

    単版式と3CCD(CMOS)の画素数について教えて下さい。 格子状に画素が配列された原色フィルターのCCDまたはCMOSでは、 ----- |G|R| --+-- |B|G| ----- と並んでいるようですが、画素数は、それぞれの合計の数なのでしょうか? つまり、例えば200万画素と言った場合、Gが100万で、RとBはそれぞれ50万という意味ですか? だとすると、200万画素3CCD(CMOS)だと、RGBそれぞれが200万画素なので、RとBは4倍の解像度ということになりますよね。 あるいは、上記のRGBの配列1つを1画素というのであれば、200画素のCCD(CMOS)では、フォトダイトードは800万個あることになります。 すると、単板式と同じサイズで同じ画素数の3CCD(CMOS)では、フォトダイトードの面積は4倍になる訳で、感度は相当高くなります。 どちらが正しい画素数の考え方なのでしょうか?

  • ラベルをRGBに変換する方法

    k=1,2...,n-1,n の値をRGBに変換したいんです。 k=1をR=50,G=89,B=32 という風に。(数字はランダムです) RGBはすべて0~255の範囲です。 近いkのRGBとは離れた色にしたいんです。 画像関係のことなんですが、処理は数学なので投稿しました。 お願いします。

  • 線形変換の問題。解き方がよくわからないので解いていただけると助かります。

    三次元空間に右手系のxyz直交座標系をとってR^3と同一視し、第一成分、第二成分、第三成分をx座標、y座標、z座標の値とする。 長さ1のベクトルp=(p[1],p[2],p[3])'に対し、以下の行列をPとする。 P=[[0,-p[3],p[2]],[p[3],-0,-p[1]],[-p[2],p[1],0]] さらに、θを定数として、以下の行列 (cosθ)E+(1-cosθ)pp'+(sinθ)P から定まるR^3上の線形変換をTとする。このとき以下の問いに答えよ。 (1).任意のv∈R^3に対して、Pv=p×vとなることを示せ (2).pはTの固有値1の固有ベクトルであることを示せ (3).a×b=pとなるような互いに直行している長さ1の2つのベクトルa,b(∈R^3)に対して、{a,b,p}はR^3の基底となることを示せ (4).(3)と同様の条件をみたしているa,bに対して、基底{a,b,p}に関するTの表現行列を求めよ (5).以上のことを参考にしt、TはR^3上の線形変換としてどの様な変換であるかを答えよ

  • 画像のある短径から三刺激値への変換

    最近、ふと思った事があり質問させて頂きます 初めに、デジカメやスキャナなど 何でも良いので画像を取得し、 そこからRGBに取得したとします。 次に、その画像のある短径(例えば20x20pixel)を抜き出した とします。 この「短径全体」の三刺激値を計算して求められないものかと。 "1Pixelだけ"だと三刺激値への計算(もちろん光源は考慮する)は 問題なくできますよね。それは分かります。 しかし、「短径全体」の三刺激値への変換方法がわかりません。 もし変換できれば、人の目で観た感じとほぼ同じ判断ができる、 つまりは目標の色との式差を求められるのではと。 自分なりにも考えてみたのですが… 1Pixel毎に分光分布を出し、全画素の5nm毎に刻んだ平均を取る、とか… (でも一致しそうな気がしません。しっくりこない…) 【質問】 上記の変換方法を教えてください。 Webや本でも構いませんし、C/C++などのコードでも良いです。 手掛かりや手段が全くわからず、少々悩み中です。 なお出力デバイスは、特に問いません。 よろしくおねがいします。  

  • rgb値を16進数に変換

    r,g,b値がそれぞれ10進数で与えられ、それらをそれぞれ16進数に変換します。このとき、例えばrの値が10進数でnだとすると、 (16進数の2桁目)=n/16 (16進数の1桁目)=n mod 16 になると思いました。 しかし、手元にある、人からもらったサンプルでは、 (16進数の2桁目)=(n mod 256)/16 となっていました。1桁目は私の考えと同じでした。 なぜn mod 256が入っているのか分かる方、教えてください。

  • 線形変換について質問です

    三次元空間に右手系のxyz直交座標系をとってR^3と同一視し、第一成分、第二成分、第三成分をx座標、y座標、z座標の値とする。 長さ1のベクトルp=(p[1],p[2],p[3])'に対し、以下の行列をPとする。 P=[[0,-p[3],p[2]],[p[3],-0,-p[1]],[-p[2],p[1],0]] さらに、θを定数として、以下の行列 (cosθ)E+(1-cosθ)pp'+(sinθ)P から定まるR^3上の線形変換をTとする。このとき以下の問いに答えよ。 (1).任意のv∈R^3に対して、Pv=p×vとなることを示せ (2).pはTの固有値1の固有ベクトルであることを示せ (3).a×b=pとなるような互いに直行している長さ1の2つのベクトルa,b(∈R^3)に対して、{a,b,p}はR^3の基底となることを示せ (4).(3)と同様の条件をみたしているa,bに対して、基底{a,b,p}に関するTの表現行列を求めよ (5).以上のことを参考にしt、TはR^3上の線形変換としてどの様な変換であるかを答えよ R^3ってのはRに縦線いれて3乗してるやつです。 (2)はT(p)=1・pを確認するだけなので理解できていますが、他の設問が解けません。 どなたか教えていただけるとありがたいです。

  • 画素数(解像度?)の低いデジカメで撮ったデータを大きくプリントすると?

    CCDの大きさとかにもよるのでしょうが、基本的に画素数の低いカメラで撮ったデータを(私の持っているカメラでわかりやすく言うと、CASIO EX-S20で撮影したものをB全ポスター台に引き延ばす(そこまでしなくてもいいか…)とか)大きくプリントすると、どうなりますか?表現しにくいのですが、ザラザラガサガサになりますか?ブツブツになりますか?モザイク状になりますか?