Excelとvbaを使って計算するシートを作るにあたって、下記の式を
Y= X= Z=
の形式に変換したいと思いますが、^ 1/3(三分の一乗)のところの変換の仕方がわかりません。
Y= X= Z=の形に式を変換して頂けませんでしょうか。
L*a*b*表色系からXYZ表色系へ値を変換するための式になります。
L* = 116(Y/100)^ 1/3 - 16
a* = 500[(X/98.072)^ 1/3 - (Y/100)^ 1/3]
b* = 200[(Y/100)^ 1/3 - (Z/118.225)^ 1/3]
なお、L*a*b*に具体的な数値を当てはめた例は下記のとおりです。
63.4 = 116(Y/100)^ 1/3 - 16
0.0= 500[(X/98.072)^ 1/3 - (Y/100)^ 1/3]
-1.6 = 200[(Y/100)^ 1/3 - (Z/118.225)^ 1/3]
X, Y, Z とも、全て 1/3 乗なので、X^(1/3) を X' というふうに (Y, Z も) 置き換えると、
普通の三元一次連立方程式になります。
L* = 116(Y/100)^ 1/3 - 16
↓
L* = 116(Y'/(100^1/3)) - 16
で、X'、Y'、Z' を求めて、それぞれを三乗すれば求まります。
でも、方程式が解きたいわけじゃないんですよね?
■色変換式集 Lab
http://image-d.isp.jp/commentary/color_cformula/Lab.html
前の CMYK の質問のときには、計算式じゃなくてソフトを求めてたようだったので回答しませんでしたが、
他の色表現についての変換式も載ってますので、確認してみてください。
関数を作ってみた
Function CIELAB2XYZ(L As Double, a As Double, b As Double) As Double() Dim Xn, Yn, Zn As Double Dim delta As Double Dim fx, fy, fz As Double Dim XYZ(2) As Double delta = 6 / 29 Xn = 0.950456 Yn = 1 Zn = 1.088754 fy = (L + 16) / 116 fx = fy + a / 500 fz = fy - b / 200 XYZ(0) = IIf(fx > delta, Xn * fx ^ 3, (fx - 16 / 116) * 3 * delta ^ 2) XYZ(1) = IIf(fy > delta, Yn * fy ^ 3, (fy - 16 / 116) * 3 * delta ^ 2) XYZ(2) = IIf(fz > delta, Zn * fz ^ 3, (fz - 16 / 116) * 3 * delta ^ 2) CIELAB2XYZ = XYZ End Function
呼び出し例
Sub Macro1() Dim XYZ() As Double XYZ = CIELAB2XYZ(63.4, 0, -1.6) MsgBox "X = " & XYZ(0) & vbCrLf & "Y = " & XYZ(1) & vbCrLf & "Z = " & XYZ(2) & vbCrLf End Sub
参考にさせていただいた記事
http://ja.wikipedia.org/wiki/Lab%E8%89%B2%E7%A9%BA%E9%96%93#CIE_XYZ_.E3.81.B8.E3.81.AE.E5.A4.89.E6.8F.9B
http://opencv.jp/opencv-1.0.0/document/opencvref_cv_filters.html
http://komozo.blogspot.com/2011/04/rgbcielab.html
訂正
XYZ(0) = IIf(fx > delta, Xn * fx ^ 3, (fx - 16 / 116) * 3 * delta ^ 2 * Xn) XYZ(1) = IIf(fy > delta, Yn * fy ^ 3, (fy - 16 / 116) * 3 * delta ^ 2 * Yn) XYZ(2) = IIf(fz > delta, Zn * fz ^ 3, (fz - 16 / 116) * 3 * delta ^ 2 * Zn)
大変ありがとうございます。参考になりました。
X, Y, Z とも、全て 1/3 乗なので、X^(1/3) を X' というふうに (Y, Z も) 置き換えると、
普通の三元一次連立方程式になります。
L* = 116(Y/100)^ 1/3 - 16
↓
L* = 116(Y'/(100^1/3)) - 16
で、X'、Y'、Z' を求めて、それぞれを三乗すれば求まります。
でも、方程式が解きたいわけじゃないんですよね?
■色変換式集 Lab
http://image-d.isp.jp/commentary/color_cformula/Lab.html
前の CMYK の質問のときには、計算式じゃなくてソフトを求めてたようだったので回答しませんでしたが、
他の色表現についての変換式も載ってますので、確認してみてください。
他の変換式でXn,Yn,Znという形で提示されるD50とかD60とかA光源とかの変数が含まれていない
ぼくが引用したページでは、Xγ 、Yγ 、Zγ が、それに相当します。
ページの下の方にちいさーく、こんな但し書きもあります。
#ただし、XrYrZrは対象とする物体色と同一照明下の完全拡散反射面の3刺激値です。
通常Yr=100となるように標準化されています。
そうなんですね。見逃しておりました。失礼しました。
こちらは参考になるでしょうか。
U = 98.072, W = 118.225として、
X = ((29 a+125 L+2000)^3 U)/3048625000000 = (98.072*(29*a+125*L+2000)^3)/3048625000000
Y = (25 (L+16)^3)/390224
Z = -((29 b-50 L-800)^3 W)/195112000000 = -(118.225*(29*b-50*L-800)^3)/195112000000
※参考URL
http://www.wolframalpha.com/input/?i=solve%5B%7BL+%3D+116%28Y%2F100%29%5E+1%2F3+-+16%2Ca+%3D+500%5B%28X%2FU%29%5E+1%2F3+-+%28Y%2F100%29%5E+1%2F3%5D%2Cb+%3D+200%5B%28Y%2F100%29%5E+1%2F3+-+%28Z%2FW%29%5E+1%2F3%5D%7D%2C%7BX%2CY%2CZ%7D%5D
ありがとうございます。式で計算できるおもしろいサイトですね。
ぼくが引用したページでは、Xγ 、Yγ 、Zγ が、それに相当します。
2011/12/06 11:56:15ページの下の方にちいさーく、こんな但し書きもあります。
そうなんですね。見逃しておりました。失礼しました。
2011/12/07 13:38:56