ページの先頭です


LUTとは

LUT 基礎講座

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

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

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

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

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

INDEX

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

FUJIFILM技術を活用したLOG活用

第二回 3次元LUTとは?

まず初回の前回は、LUTの概念を1次元LUTで説明しました。そして、最後に1次元LUTでは表現できない色変換があることをお伝えしました。そこで今回は、現場でよく耳にする「階調を硬くする」「彩度を上げる」ということを題材に、3次元LUTについて解説していきたいと思います。

みなさんは現場で「階調を硬くすると彩度も上がってしまう」という話を聞いたことがあると思います。実はこれ、1次元LUTを使って階調を硬くした場合の典型的な現象なのです。


図①が階調を硬くした場合のグレーのグラデーション画像です。
グレーグラデーション画像を硬く(硬調に)すると、

"白はより白く、黒はより黒く"変換されることがわかります。

ちなみにこの逆は、「階調を軟らかく(軟調に)する」といいます。

図① 階調を硬調にしたグレーグラデーションの比較

では、図①の変換を実現する1次元LUTの例(図②)とそれをグラフ化したもの(図③)を見てみましょう。

図②を見ると、入力RGB=(140, 140, 140)(A)が出力RGB=(240, 240, 240)、すなわち"白がより白く"

同様に、入力RGB=(80, 80, 80)(B)が出力RGB=(50, 50, 50)へ、"黒がより黒く"なっていることが分かります。

図② 階調を硬調にする1次元LUT(対応表)
図③ 階調を硬調にする1次元LUT(グラフ)

それでは階調を硬調にする図②の1次元LUTを使って、
図④の薄緑 入力RGB=(120, 140, 120)を変換してみましょう。



入力RGB=(120, 140, 120)を図②の1次元LUTを使って変換すると
出力RGB=(120, 240, 120)に変換されます。



このとき"RGBの平均値に比べて、強調したい要素
(この場合Gの値)が大きくなっている"ことがわかります。
これが彩度があがったという数値的な意味です。



ちなみに、彩度が下がればその逆になり、RとGとBの値が
RGBの平均値に近づきます。その最たるものが、
RGB=(120, 120, 120)のように、RとGとBの値がRGBの平均値と
一致している場合で、この場合は無彩色(グレー)になります。

図④ 彩度を上げる

階調を硬調にするためにグレーの入力RGB=(80, 80, 80)、入力RGB=(120, 120, 120)、入力RGB=(140, 140, 140)の3点を
出力RGB=(50, 50, 50)、出力RGB=(120, 120, 120)、出力RGB=(240, 240, 240)に変換する1次元LUTを使うと、必然的に
薄緑の入力RGB=(120, 140, 120)は、出力RGB=(120,240,120)に変換されて彩度があがってしまいました。


このことから階調を硬調に変換する1次元LUTを使うと同時に彩度も上がってしまうことが数値的にもおわかりいただけたかと
思います。

では、グレー階調は硬調にしたいが、彩度は変えたくない場合はどうしたらよいでしょうか?

つまり、グレーの入力RGB=(140, 140, 140)は出力RGB=(240, 240, 240)に変換しながら、薄緑の入力RGB=(120, 140, 120)は
出力RGB(120, 140, 120)のままにしたい場合はどうしたらよいでしょう?

まず思いつくのは、G用の1次元LUTの入力値=140→出力値=240を入力値=140→出力値=140に書き換えることです。

しかし、そうすると薄緑の入力RGB=(120, 140, 120)は出力RGB=(120, 140, 120)になりますが、グレー階調の
入力RGB=(140, 140, 140)は出力RGB=(240,140, 240)(マゼンタ色)になってしまいます。図⑤

図⑤ 3次元 LUTの一例

つまり、入力RGB=(140, 140, 140)→出力RGB=(240, 240, 240)を実現し、
同時に入力RGB=(120, 140, 120)→出力RGB=(120, 140, 120)を実現するのは1次元LUTでは不可能であることがわかります。

では一体どうすればいいのでしょうか?

単純な方法ですが、
入力RGB=(140, 140, 140)→出力RGB=(240, 240, 240) と、
入力RGB=(120, 140, 120)→出力RGB=(120, 140, 120)の
組み合わせを対応表として保持しておけばよいのです。


つまり、"1つの入力値"に対して"1つの出力値"を参照する
LUTではなく、RとGとBの"3つの入力値の組み合わせ"に対して
"RとGとBの出力値の組み合わせ"を参照するLUTを用意すれば
よいのです。



このように"3つの値の組み合わせ"で参照するLUTを、3次元LUT
と呼びます。



図⑥ 3次元 LUTの一例

RGBが8bitの場合の全てのRとGとBの組み合わせに対する

3次元LUTの例を図⑥に示します。この3次元LUTを使えば、

入力RGB=(120, 140, 120)→出力RGB=(120, 140, 120)

入力RGB=(140, 140, 140)→出力RGB=(240, 240, 240)

上記2つの変換を同時に実現できることが分かります。

これにより、例えば図⑦の画像のグレー階調を硬くしたい場合、1次元LUTを使うと図⑧のように彩度も上がってしまいますが、

3次元LUTを使えば図⑨のように彩度を抑えつつグレー階調を硬くすることが可能です。

図⑦ オリジナル画像
図⑧ 1次元LUTを利用した画像変換 階調を硬くした結果、彩度も上がっている。
図⑨ 3次元LUTを利用した画像変換 階調は硬くなっているが、彩度は抑えられている。

さて、お気づきの方も多いと思いますが、図⑥の3次元LUTを保持しておくには大量のメモリーが必要になります。

8bitの1次元LUTでは256x3=768組のデータですみましたが、3次元LUTでは、256^3=16,777,216(1677万)組のデータが
必要になります。

そこで、次回は3次元LUTをより少ないメモリーで実用的に活用する為に必要な工夫について解説します。
FUJIFILM技術を活用したLOG活用
ここからフッターです