• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:相関色温度の計算方法)

相関色温度の計算方法とは?

このQ&Aのポイント
  • 相関色温度の計算方法について説明します。
  • JIS Z 8725の附属書 2には相関色温度の計算方法のプログラムの例がありますが、正しい結果が得られない可能性があります。
  • プログラムの改良方法や正しい結果を得るための修正箇所について解説します。

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

  • ベストアンサー
noname#230359
noname#230359
回答No.4

すでに手遅れ、または解決していると思いますが、 JIS Z 8725のプログラム例 の判定条件の修正についてです。 Abs(dt!(j)) > Abs(dt!(j-1)) ではなく 0 <= dt!(j) が正しい様です。 根拠は JIS Z 8725を精読した訳ではなく、 ColorACの計算結果と比較したところ こちらの方がより一致しました。 上の条件だと補外計算になる場合が発生しますが 想定外の条件で誤差が大きいのだと想像します。  ※JIS Z 8725に関係するレポートを ColorACのサイトに   アップする予定です。 ColorACの結果と比較してより一致していると書きましたが、 結果を再確認すると 少し違っていました。 Abs(dt!(j)) > Abs(dt!(j-1)) の条件を使うと、 まれに、 相関色温度の計算 ddd! = -dt!(j-1)/( dt!(j)-dt!(j-1)) Tm! = j-2+ddd! が負になるケースが発生しました。 その時、確認するとdt!(j)も負の値になっています。 本来 常に dt!(j-1) < dt!(j)が成り立つはずが 参照しているテーブル値の誤差で この関係が成り立たない ケースが発生して、Tc、duvの計算が変になってしまう様です。 判定の条件を 0 <= dt!(j) にすると、上記の様な 現象が起こらず安定して計算できる様です。

noname#230358
質問者

お礼

もしかしてColorACの作者様でしょうか? 私の要望にぴったりの回答ありがとうございました。

その他の回答 (3)

noname#230359
noname#230359
回答No.3

1060 LOOP UNTIL DT!(j)=0 ⇒ループの停止条件。 この大昔の BASIC は配列変数を宣言すると初期化も、つまりゼロが入った状態になっている。 なので初期化しない VBAや C なとに移植するにはゼロを入れる処理を追加しないと同じ結果にならないことがある。 それだと思います。 >DT!(j)が0になる可能性は殆ど無く ゼロに近づきはするがイコールではない? 演算精度の問題ですか?

noname#230358
質問者

お礼

ありがとうございます。 VBAでも初期値は0になっていますが 1040 LET DT! (j) = ((UN! (j) -UT!)-RSP! (j)* ((VN! (j) -VT!))) /SQR (1+RSP! (j)^2) で、DT!(j)が0になる可能性は殆ど無く、ループを抜けるのは、いつも 1050 EXIT DO j=64 (VBAの場合は If j = 64 Then Exit Do ) となってしまいます。

noname#230358
質問者

補足

相関色温度を求めようとしたu,vの値が 付表にあるデータと完全に一致したときはゼロになりますが 普通は、ループを回ってもだんだんゼロに近づくわけではないので 付表を全てスキャンしてしまいます。

noname#230359
noname#230359
回答No.2

エクセルに組み込むのであれば、相関色温度を変数として、solverを使って 参照光源と試験光源の(u,v)座標上の距離を最小とするようにすれば、 相関色温度を求めることが可能です。 アルゴリズムはエクセルにお任せですので、数学が得意な方には不満が あるかもしれませんが、実用的に使える方法です。 プログラムが適切に記述されているか否かは回答できませんが、 信頼できるメーカー製の分光放射計(相関色温度の計算は、JIS Z 8725に 従っている旨仕様書に記載している)の測定例を示しますので、この例で 検算してみて下さい。 x = 0.4028 y = 0.4253 のとき、 相関色温度の計算結果は、3804 K です。 ご質問者さんのほうが、回答者よりもずっと専門家のようですね。 CIE Color Calculatorのサイトご紹介ありがとうございました。 サイト内を探すと、XYZから相関色温度を求めるプログラムも掲載されて いました。 http://www.brucelindbloom.com/index.html?ColorCalculator.html ご質問者さんの求める回答に近い内容が含まれているように思えます。 なお、先に示した  x = 0.4028 y = 0.4253 Tc = 3804 K の関係は、  x = 0.4028 y = 0.4253     ぴったりの数値を意味するのではなく、  x = 0.402750~0.402849  y = 0.425250~0.425349     の範囲の数値を丸めた結果が  x = 0.4028 y = 0.4253     であるとご理解下さるようにお願いします。  従って、相関色温度にも±1.0 K 程度の範囲が想定されます。   計算の上では、小数点以下まで数値がでてきますが、測定上の誤差は、 最善の場合でも±10 K以上覚悟する必要がありますので、実用上は 細かいことまで気にする必要はないと思います。   余分な情報ですが、私が作ったexcelのシート上で、solverを使って求めた 結果は、3807.0 Kでした。    JIS C 8725の読み方 本則は次のとおりです 5. 相関色温度又は色温度の測定方法 5.2 光源色の測定方法の種類 b) 相関色温度の計算 色度座標 u,vから,付表 1 を用いて逆数相関色温度を求め,式(20)によって相関色温度を計算する。 上記の手順で求めた値と合致するのであれば、附属書のプログラム例は、無視 して下さっても構わないと思います。

参考URL:
http://www.hello-pc.net/howto-excel/solver/
noname#230358
質問者

お礼

ありがとうございます。 VBAは何とか使えるのですが、solverの使用方法は良く解っていません。 質問に書いた解決法が間違ってなければ、それで十分なんですが・・・ solverを使った具体的な方法を解説したようなサイトはありますでしょうか? ありがとうございます。 いくつかのデータで確認してみましたが ほぼ正しい値が得られています。 それでも全てのデータに対して正しい値が得られるのか確信が持てません。 ちなみに x = 0.4028 y = 0.4253 の変換結果は 行番号 1060 を変更した物で 3805.3K (但しJISの方法でxyをuv変換 U=0.22077 v=0.34966) McCamyの近似式だと 3789.5K (近似値と割り切るなら、これが一番信頼できそうです) 表色系変換 *-財団法人日本色彩研究所-* http://www.jcri.jp/JCRI/hiroba/conversion/henkan4.htm で変換すると 3810K CIE Color Calculator http://www.brucelindbloom.com/index.html?ColorCalculator.html で変換すると 3804.4K

noname#230359
noname#230359
回答No.1

相関色温度を弾き出したいだけなら 色度図作成ソフト ColorAC などを使うべきだと思います。 >相関色温度と、黒体輻射曲線(blackbody locus)からの距離(duv)を示す図です。  http://n-colorspace.cool.coocan.jp/p-gallery.html   あとはVBAの例が  http://okwave.jp/qa/q5882420/a16866768.html にありますね。   >okwaveの方は、分光データからxyを求める物で、質問とは違うものです。 CIE1931 xy色度から、CIE1960UCS色度への変換はExcelでは簡単ですよね。 (最初から黒体輻射曲線をマップでなく数式のまま持ってCIE1960で計算すれば  三色刺激値だけマップで持てば良いので精度的にも刻みやすい) あとは目的温度の近傍の数点をExcelの近似曲線関数で関数の係数に当てはめ 目的点を通る黒体輻射曲線からの垂線を計算するだけですよ。(実際には近似点) 残念ながらお相手するのに疲れましたので、後は御自由にがんばってくださいませ。   とりあえずColorACでの結果だと x y z-val Tc duv 0.4028 0.4253 0 3805.188688 0.01514075836 ですね。 Bruce Justin Lindbloomの計算式は 予めマップにした色温度座標から1次補完で求めてる程度の精度みたい。 XYZ to Correlated Color Temperature  http://www.brucelindbloom.com/index.html?Eqn_XYZ_to_T.html   >黒体放射軌の色度座標を「付表 1」から補完で求めたりせず、理論式から得ている物もあるような気がします。 黒体輻射の式は理論式なのでありますよ。 でも、D65にしてもCにしても大気の散乱や吸収線を反映して 理論式と異なるスペクトルですけどね。 視覚の三色刺激値は(補完するとしても)マップデータしかないですし 2度視野と10度視野では数値違う(視野の中心と周囲は実は違う色温度で見えている)し 人ひとりひとり違うのを無理やり代表値で出して規格にしているだけです。 また人工照明だとフリッカとかでも色温度がずいぶん違って見えますよ。 (白色LEDの同輝度の色温度もPWMとDCでは違いますし) >私は、間違いなさそうな、McCamyの近似式を使おうと思います。 何を根拠にまちがいなさそうと言っているのか 私の知識では理解しかねますが・・・  

noname#230358
質問者

お礼

ありがとうございます。 ColorACでもできますが、ソースリストは公開されてないようですね。 自分のexcelシートに組み込みたいのです。 okwaveの方は、分光データからxyを求める物で、質問とは違うものです。 どの方法でもだいたい同じ値ですが、ぴったり一致しないということは JIS Z 8725の「付表 1」やプログラム例を使用していないということですね? 黒体放射軌の色度座標を「付表 1」から補完で求めたりせず、理論式から得ている物もあるような気がします。 JISのプログラム例は確実に間違っていると思われるので 私は、間違いなさそうな、McCamyの近似式を使おうと思います。

noname#230358
質問者

補足

McCamyの近似式については、色々な文献他で紹介されていますし 何点か確認しましたが、全て正しい値が得られています。 単純な式なので、少なくとも2000~10000Kくらいの範囲では 完全に正しい近似式だと思います。 JISプログラムの間違いを正す方法を質問したのですが、回答が得られなかったので、近似式を使うことにしただけです。 計測器メーカーが「相関色温度の計算は、JIS Z 8725に従っている」 といっているのも、JISの表を使っているわけではないと疑っています。 もちろんJISプログラム例は使っていないはずです。

関連するQ&A