カラースペースの三角形を形成するRGBの原色と白色点の4点のxy座標がわかれば変換行列は求まる。
- RGBの原色と白色点Wのxy座標が必要となる。これらは各色空間の規格で定められている。
- zの値はx,yの値から自動で求まる。x + y + z = 1
- 白色点を正規化されたXn,Yn,Znにする。「正規化された」とは明るさ1.0のことでYの値が1.0になるような係数をかける。XYZ色空間ではYの値そのものが明るさとなっている。
- RGB原色のxyzを行列として、その逆行列と正規化された白色点の行列の積でスケーリングのベクトルを求める
- 上で求めたスケール値をRGBのxyzに掛ける。これでできた行列がRGBtoXYZ。
- RGBtoXYZの逆行列がXYZtoRGBとなる
AdobeRGBの例
AdobeRGBのRGB原色と白色点のzyの値が必要(水色に塗られたセル)
オレンジに塗られたセルがXYZやRGBに変換する行列として求めたもの
https://sites.google.com/site/technorgbfiles/1508/XYZRGB_ConversionMatrix.xlsx
変換行列を使ってRGBやXYZに変換する。
但しこれらの変換はRGBが線形空間として扱われる必要があるので注意すること。
https://sites.google.com/site/technorgbfiles/1508/XYZRGB_ConversionMatrix.xlsx
変換行列を使ってRGBやXYZに変換する。
但しこれらの変換はRGBが線形空間として扱われる必要があるので注意すること。
- XYZからRGBに変換されたRGBは線形RGBなので、必要に応じてRGB色空間に定義されているガンマ補正を行う
- RGBからXYZに変換する場合は、線形RGBになっている必要がある。なっていないならデガンマして線形空間にすること
現空間のRGBから別空間のRGBへの変換マトリクスはこれ > RGB to RGB
pythonのコード 15/09/29追記
任意のRGBWのxy座標からRGB/XYZ変換マトリクスを求めるfrom numpy import * #色空間のプライマリRGBWのxyを指定する Rx,Ry,Gx,Gy,Bx,By,Wx,Wy = 0.64,0.33,0.30,0.60,0.15,0.06,0.3127,0.3290 #sRGB #Rx,Ry,Gx,Gy,Bx,By,Wx,Wy = 0.64,0.33,0.21,0.71,0.15,0.06,0.3127,0.3290 #AdobeRGB #Rx,Ry,Gx,Gy,Bx,By,Wx,Wy = 0.68,0.32,0.265,0.69,0.15,0.06,0.3140,0.3510 #DCI-P3 #Rx,Ry,Gx,Gy,Bx,By,Wx,Wy = 0.74,0.27,0.22,0.78,0.09,-0.09,0.3140,0.3510 #DCI-P3+ #Rx,Ry,Gx,Gy,Bx,By,Wx,Wy = 0.74,0.27,0.17,1.14,0.08,-0.1,0.3127,0.3290 #Cinema Gamut #Rx,Ry,Gx,Gy,Bx,By,Wx,Wy = 0.708,0.292,0.170,0.797,0.131,0.046,0.3127,0.3290 #Rec.2020 #Rx,Ry,Gx,Gy,Bx,By,Wx,Wy = 0.6898,0.3206,0.0736,0.9003,0.1166,0.0374,1.0/3,1.0/3 #sharpRGB #Rx,Ry,Gx,Gy,Bx,By,Wx,Wy = 0.73470,0.26530,0,1,0.00010,-0.07700,0.32168,0.33767 #ACES2065-1 #Rx,Ry,Gx,Gy,Bx,By,Wx,Wy = 0.713,0.293,0.165,0.830,0.128,0.044,0.32168,0.33767 #ACEScg #xyからzを求める Rz = 1- Rx - Ry Gz = 1- Gx - Gy Bz = 1- Bx - By Wz = 1- Wx - Wy #白色点の正規化(yが1になる様にスケール) Wxn = Wx/Wy Wyn = Wy/Wy Wzn = Wz/Wy #変換マトリクスを求める m1 = matrix([[Rx,Gx,Bx],[Ry,Gy,By],[Rz,Gz,Bz]]) mW1 = matrix([[Wxn],[Wyn],[Wzn]]) mW2 = m1.I * mW1 m2 = matrix([[mW2[0,0],0,0],[0,mW2[1,0],0],[0,0,mW2[2,0]]]) m = m1 * m2 set_printoptions(precision=10) set_printoptions(suppress=True) print "R:",Rx,Ry,"\n","G:",Gx,Gy,"\n","B:",Bx,By,"\n","W:",Wx,Wy,"\n",'W Xn,Yn,Zn:',Wxn,Wyn,Wzn,"\n" print "RGB to XYZ matrix\n",m,"\n","\n","XYZ to RGB matrix\n",m.I '''R: 0.64 0.33 G: 0.3 0.6 B: 0.15 0.06 W: 0.3127 0.329 W Xn,Yn,Zn: 0.950455927052 1.0 1.08905775076 RGB to XYZ matrix [[ 0.4123907993 0.3575843394 0.1804807884] [ 0.2126390059 0.7151686788 0.0721923154] [ 0.0193308187 0.1191947798 0.9505321522]] XYZ to RGB matrix [[ 3.2409699419 -1.5373831776 -0.4986107603] [-0.9692436363 1.8759675015 0.0415550574] [ 0.0556300797 -0.2039769589 1.0569715142]]'''
メモ
エクセルで行列計算する方法
行列の積の場合はたとえば3*3のセルを選んだ状態で =MMULT... と書き対象の行列を指定する。書き終わってもEnterは押さないこと。Ctrl + Shift + Enter で終了させること
- 行列積 : MMULT
- 逆行列 : MINVERSE
- 行列入れ替え : TRANSPOSE
http://www.excel-list.com/mathematics.html
Excel(行列と配列数式)
http://www.waseda.jp/ocw/ComputerScience/17-4003-01IntroductiontoITFall2003/StudyMaterials/root/document/emat.html
RGB/XYZ 変換行列求め方。各色空間のリファレンス参考
RGB-Farbraum - Wikiwand
各色空間のRGBWのプライマリが掲載
RGB/XYZ Matrices (http://www.brucelindbloom.com/)
(変換行列の求め方と各色空間の変換行列の掲載)
Chromatic Adaptation
Chromatic Adaptation
(白色点の変更方法についてのページ。白色光源がXYZとして掲載されている)
RGB Working Space Information
(各色空間のRGB原色のxyY座標と白色点光源が掲載)
Standard illuminant
https://en.wikipedia.org/wiki/Standard_illuminant
(標準光源のxyYの値が掲載)
Standard illuminant
https://en.wikipedia.org/wiki/Standard_illuminant
(標準光源のxyYの値が掲載)
RGB → XYZ 変換行列の求め方
CIE XYZ表色系(10): XYZ / RGB 変換マトリックスの計算
http://usr.u-shizuoka-ken.ac.jp/modules/xoonips/download.php/AN10118525200503001020.pdf?file_id=861
0 件のコメント:
コメントを投稿