Judd Vos

ColorSystemにCIE1931 Judd Vos(以下 Judd Vos)を追加した。

該当プルリク https://github.com/nikq/ColorSystem/pull/28

Judd Vosは、CIE1931に入っている過剰なスムージングが
除去されていて特に青付近の色再現性が上がっている。
CIE1931でキャリブレーションされているモニターに
CIE1964の色を出すとかなりズレを感じるが、
Judd Vosならそういうズレもない。

具体的にはこんな感じに違う。X関数が結構修正されてることがわかる。
CIE Color Matching Function of 1931JuddVos
CIE Color Matching Function of 1931

ColorSystemには “CIE31JV” という名前でObserverを追加した。

データそのものは
http://cvrl.ioo.ucl.ac.uk/
から参照させてもらった。元のCSVは5nm刻みになっているので、
excelで適当に線形補間し、1nm刻みにアップサンプリングした。

TPMSを買った

駐車場からクルマを出したところ、普段とは違う走行抵抗を感じた。
ハンドブレーキを引きずるようなズリズリ音。

すぐに降りて全周チェックしてみたら、右リアタイヤがパンクしていた。
マジか!ついこの間新品のREGNOに履き替えたばかりなのに。
車載のパンクキットでエアを入れてみたところ
短距離なら自走できそうだったのでそのままディーラーに突っ込んだ。
幸いにもすぐに対処したからビードがまだ平気で、安価な修理で済んだ。

結果は、釘。ゆっくり抜けたから気づかなかったみたい。ちくしょー!
というわけで、その場で TPMS( Tire Pressure Monitoring System ) を買った。

買ったのはAmazonのこれ。

最近のクルマはタイヤ回転速度ベースの簡単なTPMSがついてると思い込んでたんだけど
うちのクルマにはついてなかったみたい。

以前は同じようなのが3万くらいしてたんだけど
最近はずいぶん安価になったようだ。

Amazonの商品、どれもこれもレビューの日本語が怪しかったので
比較して、その中ではわりとレビューが日本語っぽいやつにした。

で、これが届いたもの。

箱がかなり良い。横の説明がちょっとだけ英文が怪しいのはご愛敬。
製品自体のつくりも非常に高品質で、驚異的なコストパフォーマンスだ。

取付自体は非常に簡単で、センサーとロックナットをねじ込むだけ。
ホイールバランスがずれてしまうのはちょっと残念だけど、そこまで気にする人はもっといいのを買いましょう。
ソーラーなので勝手に充電されるのも便利。以前のはシガーソケットにねじ込む形だったんだよね。

早速走ってみたところ、数値が更新されるまでに数分かかる(低消費電力のために更新が遅い)けどそれ以外は良好。
うちの車両はFFなので前タイヤが平均して5度近く温度が高いこととか、冷間と温間の温度の違いとかが良くわかって非常に楽しい。

これでスローパンクにすぐに気づけるようになったぞ。

SLog2からHDR10へのLUTを作る

どうも世の中にはS-Log2からHDR10への変換LUTが存在しないようなので作った。
S-Log2のwhite paperはどれがオフィシャルなのかわかりにくいんだが、

https://pro.sony.com/bbsccms/assets/files/micro/dmpc/training/S-Log2_Technical_PaperV1_0.pdf

これとかsony.comに置いてあるしきっと信用してもいいものなのだろう。

まずはdesmosでグラフをプロットしてみる。
SLog2からシーンリニアへのカーブ。

SLog2 to scene linear curve

ホワイトペーパーに載っている式はIRE基準なので、
実際の画像ファイルに入っている信号はCV基準だから変換をしないといけない。
SLog2のブラックは64/1024,ホワイト(IRE 100%)は960/1024だそうだ。

上記をもとに、SLog2のサポートをColorSystemに追加した。
https://github.com/nikq/ColorSystem

LUTの読み書きにはAdobe公式のものを使う。
http://wwwimages.adobe.com/content/dam/Adobe/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf

できた…風?

例えば要素数33で生成したLUTがこちら。
SLog2_to_HDR10_33

ColorSystem sample usage

ColorSystem( https://github.com/nikq/ColorSystem )の利用サンプル。

ある色域でマクベスチャートのライティング計算をしたときに
合計でどれくらいのCIE DE2000色差が出るかを計算してみる。

で、これを使ってCCT2500-15000のレンジでrec709,rec2020,ACES2065,ACEScgで合計DE20000を計算した結果がこちら

XYZはD65付近でとても誤差が減るが、それ以外の光源色のときと差が激しい。
この差の激しさってのが問題で、特定のパッチだけ変な色に転ぶような挙動を招く。
結果として、ただのrec709のほうがよほど安定していて良かったりする。不思議なもんですね。

constexprで色

はい。皆さんは、やっていく気持ちですか?

さて、

https://github.com/nikq/ColorSystem

というコードを書いた。これが何かというと、constexprを活用してできる限りコンパイル時に定数化されるような、色関係のライブラリです。もともと3000行くらいの適当にとにかく書き散らした色ライブラリがすでに手元にあったのだが、こいつのメンテナンス性が落ちてきているのと、組み合わせによって固定されるべき行列が何度も計算されるのが嫌だったので書き直した次第。

で、このためにconstexprの活用にトライしてみた。せっかくだからある程度モダンな開発環境にしようと思って、msvc2017+github+vscodeの組み合わせで作っている。しかしコンパイルはコマンドラインからmsbuildを叩いている。連携の仕方が良くわからないからである。

constexprはある程度プログラマブルに書くことができるdefineみたいなもんだ。C++14はだいぶ緩和されるようだが、C++11だと割と条件が厳しい。関数中にreturnはひとつ。ifは書けない。変数代入はconstのみ。まぁ、ほぼlispだと思えばよい(?)

こうしていくと何がうれしいかというと、たとえばrec709からrec2020に変換するような行列(間にXYZを経由する)を求めるとき、以前であれば実行時に毎回行列積が計算されていたわけだけど、今回はできる限り事前に計算されて可能ならば定数として扱われる。実際、clangでコンパイルしてみるとfloatの定数が9個並ぶだけになる。

でも当然ながら問題がないわけでもなくって、例えば、VC12でコンパイルができなくなってしまった…まぁみんな最新版のコンパイラを使おうね!という話でした。