ルックアップテーブル(LUT)を作成して写真や動画に適用する

アクションカメラ Osmo Action の D-Cinelike カラーモードで撮影された素材に、iOS 写真アプリの「ビビッド」補正をかけたら超いい感じの色になったのでそれを静止画でも使ってみたくなった。

D-Cinelike は後から色補正をしやすくするため広いダイナミックレンジを持ち、そのためコントラストや彩度が低いカラーモードで、他のカメラでは Log という名前が付いていることが多い。

LUT について

ルックアップテーブル(Lookup table; LUT)は取りうる入力に対する出力を羅列した写像のデータで、計算機上で複雑な演算を何度も行う必要があるときに効率化をするものである。

とりわけ画像処理の分野では画像の色補正に使用される。特に動画像の場合は補正対象のピクセルがフレーム数分必要になるため古くからよく使用されていたようだ。静止画では「フィルタ」として Instagram によって一般にも普及した(Instagram のフィルタは画面の領域によっても色が変化する)。

静止画では Adobe の策定した Cube LUT という形式の LUT ファイルが Adobe Photoshop や Affinity Photo など主要な画像処理ソフトウェアで使用できる。.cube という拡張子を持つ。

LUT を作成する

LUT を作成するためのプログラムは次の場所に用意した。lutsrc64.png に色調補正を行なった画像を mklut64 に読み込ませると Cube LUT ファイルを生成する。

iPhone に取り込んだ lutsrc64.png を写真アプリで「ビビッド」フィルタを適用し、PC に持ってきて mklut64 を実行して LUT(Vivid.cube)を作成した。

Affinity Photo を使用して LUT を適用する

まず超いい感じの色にするために Raw 画像からコントラストと彩度を抑え、できるだけ明るいところから暗いところまで万遍なく情報を残した画像を出力する。そしたら Affinity Photo に読み込もう。

ここで現像ソフトの設定で出力画像を 16 bit/channel にすること。8 bit ではトーンジャンプを起こしてしまう。

f:id:scientre:20190925223855j:plain

続いてレイヤーパネルの [調整] > [LUT...] を選び LUT 調整レイヤーを作成する。LUT の設定パネルで先ほど作成した Vivid.cube を読み込む。

f:id:scientre:20190925223906j:plain

これだけでも雰囲気のよい画像になったが、明るさが時間によって変化する動画に比べて静止画ではつまらない感じになってしまったので調整したものが次の画像。

f:id:scientre:20190915120349j:plain

カメラでの撮って出し画像も比較のために載せておく(EOS RP + EF28-105mm F3.5-4.5 II USM、ピクチャースタイル スタンダード)。

f:id:scientre:20190915120351j:plain

DaVinci Resolve を使用して LUT を適用する

Vook さんのこちらの記事を参照。

FFmpeg を使用して LUT を適用する

FFmpeg で 3D LUT を適用するには -vf (-filter:v) オプションを使用する。

% ffmpeg -i INPUT.mp4 \
   -vf lut3d="LUT.cube" \
   -pix_fmt yuv420p \
   -b:v 5M \
   -map_metadata 0 \
   OUTPUT.mp4

この例では LUT の適用以外に次の設定を行っている。

  • -pix_fmt yuv420p …… ピクセルフォーマットの指定。FFmpeg デフォルトの YUV444 では出力サイズが大きくなるのと一部のプレイヤー(Windows Media Player)で再生できないので、最終的な出力として一般的な YUV420 を指定している
  • -b:v 5M …… 映像のビットレートiPhone で撮影したときのビットレートが 5 Mbps くらい
  • -map_metadata 0 …… 撮影日時などのメタデータを出力ファイルに引き継ぐ