ページの先頭です


LUTとは

LUT 基礎講座

みなさん、こんにちは。大西です。

映像の色を変えるときに、よく”ラット(LUT)をあてる“と言います。

普段仕事で使うので、なんとなく分かっているようで正しくは分かっていないような”ラット(LUT)“という言葉。

このページでは、今後LUTに関連する解説をします。

みなさまが本ページを読むことで、”なんとなく分かっているもやもや感“が少しでもクリアになると嬉しいです。

INDEX

※講座の内容は変更になる可能性があります。

FUJIFILM技術を活用したLOG活用

第三回 補間の必要性とLUTの精度について

久々の今回は、多くの皆さんが疑問に思うであろう、3DLUTの格子点の数について実験してみようと思います。

8bitの色空間で3DLUTのテーブルを作成することを考えてみます。

8bitの色空間はRGBそれぞれ0-255の256段の整数で表されているので、出現する全種類は、256 x 256 x 256 = 16,777,216 (約1600万)項目の入出力関係をテーブル化しておけばよいことになります。

具体的には、

 
図① example of the table

図1


このような感じになります。出力側も8bitとすると、テーブルのサイズは、16,777,216 * 3 = 約50MB と巨大ですが、使用できない大きさではありません。

それでは映像制作で一般的な10bitの色空間ではどうでしょうか。

10bitの色空間は、RGBそれぞれ0-1023の1024段の整数で表されているので、出現する全種類は、1024 x 1024 x 1024 = 1,073,741,824(約10億)項目の入出力関係のテーブルが必要になります。出力側も10bitとすると、テーブルサイズは、 1,073,741,824 * 4 = 4GB と相当巨大なものになります。このサイズのテーブルを高速メモリに搭載して使用したり、動的に生成したり、複数のテーブルを切り替えたりすることは事実上不可能です。


また、浮動小数点の色空間はどうでしょうか。すべての浮動小数点に対応するテーブルを用意することが不可能であることは自明ですね。

そこで登場するのが、「補間」という方法です。

これは、入力色空間の組み合わせすべてに対応するテーブルを用意しておくのでなく、とびとびの、限定された数のテーブルを用意しておき、その間の値については、補間して正しい値を推定する、という方法です。


例えば、下記の表(図2)は8bitの入出力を20ステップずつに間引いたテーブルになっています。


図② example of the table

図2


入力(0, 0, 30)に対応する出力は、その前後の(0, 0, 20)と(0, 0, 40)の出力値である(11, 9, 27)と(16, 15, 80)を足して2で割る、などの方法により求めます。

この方法を使えば3DLUTの巨大なテーブルを、かなり小さなテーブルで表すことができるようになります。しかしながら、この「補間」という方法は、どうしても誤差を伴ってしまい、常に正しい値が得られるとは限りません。

ここで簡単な例として、1DLUTの補間を使用して説明します。


図3は8bitの色空間を4つの格子点で表した1DLUTの例です。
黒線のカーブが正しい値であり、 テーブル作成時に●の点を使用しています。
補間して得られる結果が青の折れ線であり、 入力値200の補間結果は●となりますが、
正解値の〇とは大きな誤差が生じていることがわかります。


格子点の数を増やすと、補間誤差は低減されます。

    
図③ example of the table

図3

図4の例は、8bitの色空間を7つの格子点で表した例です。図3と比較して、黒の曲線と青の折れ線の差が小さくなっており、補間誤差が軽減していることがわかります。






一方で、補間誤差の現れ方は、変換の種類に大きく依存します。

     
図④

図4

     
   

図5は最初の例と同じ、4つの格子点でですが、黒線カーブと青の補間直線との差が小さく、図3に比べて誤差が小さいことがわかります。

      
図⑤

図5

 

このように、補間には誤差が伴いますが、その大きさはケースバイケースであることがわかります。



3DLUTの場合、格子点の数として、17格子,33格子,65格子などが用いられています。


表1
 
       

当然のことながら格子点の数が多い方が補間誤差が少なくなり、精度は高くなります。 その代り、ファイルサイズや必要なメモリサイズが大きくなり、読み書きに時間がかかる、システムとして高価になってしまう、などのデメリットがあります。 一般的には、通常は33格子点、システム上可能な場合は65格子点、と使い分けられているようです。

 
 

それでは格子点の数で、誤差の表れ方でどのような差がでるのか見てみましょう。
変換は、HDRのRec2020/ST-2084からSDRのRec709/2.4への変換を使用しました。
グラデーションはいろいろ実験した結果、最もバンディングが出やすいシアンのグラデーションを入力素材として使用しました。


     

画像1が入力画像、グラフ1がそのRチャンネルをグラフ化したものです。

      
   
グラフ1

グラフ1

 
 

数値計算による正解値は下記です。


グラフ2

グラフ2

色2

画像2

DPXダウンロード






  

強烈に非線形性が強く、LUTで再現することがとても難しい変換であることがわかります。

 
 

それでは一般的な補間方法である立方体補間を使用した結果を示します。


■17格子点

 
グラフ3

グラフ3

 
 

■33格子点


グラフ4

グラフ4

 

■65格子点


グラフ5

グラフ5

 

■129格子点


グラフ6

グラフ6







17格子点では、かなり大きな振幅のバンディングが観察され、サンプル画像でもはっきりと確認できます。

格子点の数を増やしていくと、振幅が小さく、周波数が細かくなりますが、129格子点でも取りきることはできません。



計算値と格子点の数を比較するグラフを作ってみました。


グラフ7

グラフ7



少ない格子点だとバンディングの問題だけでなく、計算値(青線)からの誤差も大きいことがわかります。 格子点の数を増やすと両者とも改善されてきますが、129格子点でも計算値との不一致は残ります。


このようなバンディングや誤差は、補間のアルゴリズムにも依存します。 ここまで紹介してきた結果は、一般的な立方体補間という方法でした。IS-miniでは三角錐補間という、バンディングの出にくいアルゴリズムを採用しており、26格子点というやや少なめの格子点で十分な精度を実現しています。

   
   
   

グラフ8、画像7はIS-miniで処理した結果です。

    
 
グラフ8

グラフ8

   

立方体補間の各種格子点の結果と比較してみます。


グラフ9

グラフ9

 

IS-miniの補間誤差は、65格子点とほぼ同等、バンディングはどの格子点数よりも少ない、ことがわかります。

今回の実験結果は、HDR to SDRの変換、シアンのグラデーション、という色再現全体のごく一部の条件における比較ですが、定性的には各種評価結果とほぼ一致した結果となっています。


以上の実験と考察により、
・格子点33が一般的だが、可能であれば65を用いた方が良い
・補間アルゴリズムは立方体補間でなく、三角錐補間の方がバンディングが圧倒的に少なく、誤差も立方体の倍の格子点並みに小さい。
と結論付けられます。

FUJIFILM技術を活用したLOG活用
ここからフッターです