色温度からRGBに転換
色温度は画像処理で良く使う概念です。色温度から具体的なRGBの数値に転換の方法は幾つありますが、ほとんどの方法は色温度の数値によって、色座標やRGB空間に転換し、ピクセルのRGB値を求める。異なる計算式を使って、精度や効率は違うです。つまり、色温度からRGBの転換の結果は唯一ではないです。
今回紹介したい方法は、色座標やRGB空間に転換ではなく、色温度からピクセルのRGBの数値を計算出来で、効率的な方法です。
色温度からRGB相対値の計算式
Charity’s original blackbody valuesからのデータを参考し、RGB値と色温度の変化曲線で表示する。
そして、数式を使って曲線の流れを表現します。曲線あてはめにする。
色温度とRGB値曲線あてはめ
ここで使ったのは簡単な指数と対数関数です。異なる関数を使って曲線をフィットして、最終の精度も違います。
python転換関数
def calc_kelvin(stepSize):
temp = 6600
temp = (temp + stepSize) / 100
if(temp<=66):
red = 255
else:
red = temp-60
red = 329.698727446 * pow(red,-0.1332047592)
if(red < 0):
red = 0
if(red>255):
red =255
if(temp <= 66):
green = temp
green = 99.4708025861 * math.log(green) - 161.1195681661
if(green < 0):
green = 0
if(green > 255):
green = 255
else:
green = temp - 60
green = 288.1221695283 * pow(green, -0.0755148492)
if(green < 0):
green = 0
if(green > 255):
green = 255
if(temp>=66):
blue = 255
else:
if(temp<=19):
blue = 0
else:
blue = temp - 10
blue = 138.5177312231 * math.log(blue) - 305.0447927307
if(blue<0):
blue = 0
if(blue>255):
blue = 255
print("red:"+str(red) + ",green:"+ str(green) + ",blue:"+str(blue))
return red,green,blue