現在越來越多的視頻或者圖像拍攝設備支持log模式,比如大疆無人機的D-Log模式等等,log模式的起源和發展就不多做介紹,其在普通顯示器上顯示畫面通常看起來是平坦的灰色,因此也常被稱為log灰視頻。
由於其能記錄更多的圖像細節,動態范圍更廣,使得后期調色可操作空間更大,所以今天就來說一說怎么用3Dlut表實現log圖的調色。
首先,要准備Log圖、3DLut表,如下:
1.Log圖長醬紫的:
看起來確實是灰灰的,妹子也顯得如此的憂郁。
2. 3DLut表內容是醬紫的:
用adobe的調色軟件PR或者PS啥的都可以自己手動調色,然后保存一個lut表出來,以后所有圖片都可以直接載入這個lut表自動實現調色,非常之方便。
以Adobe 的PR軟件或者PhotoShop保存的.cube文件為例,當然我只是截取的一部分,下面還有很長很長,都是如下形式排布。
第一行是lut表的名稱,第二行是lut表三個維度的尺寸,64就是指R,G, B三個分量分別只保存64個值。
3. 調色原理是醬紫的:
Lut全稱是look up table,沒錯就是你熟悉的查找表,3D LUT就只指三維的查找表,這個三維是指RGB三個通道是獨立的,查找的時候也是獨立查找。那么怎么個查找法,簡單來說就是給你一個像素點的RGB三個值,我從表里面找到新的RGB三個值,調色過程至此完成。
如果真有這個簡單就好了,細想一下如果要把0-255所有三個通道的顏色值保存下來,數據量是256*256*256個,文件有點龐大了。因此為了減小數據的存儲量,通常將256階縮放到16階或者64階保存下來。上面的lut表就是64階,存儲的點個數就是64*64*64個。
lut表的具體排布含義如下:
R G B
0 0 0
0 0 1
0 0 2
0 0 3
........
0 0 63
0 1 0
0 1 1
0 1 2
0 1 3
......
0 1 63
.......
.......
.......
0 63 63
......
......
......
63 63 63
敲空格好難受,不過聰明的你一定看出來規律了,沒錯就是依次把三個通道的值一一列出來,想象一個三維的坐標軸,分別是R G B,取值范圍都是0-63. 那么這個立方體內整點的個數就是64*64*64個。而表里面的值是將 0-63 歸一化到 0-1,存為浮點數而已。
當我們得到一張log妹紙圖片后,每次取一個像素點,假如RGB三個值(50,100,200),然后將其量化到0-63范圍,其實簡單做法就是直接除以4,得到(12.5, 25, 50),那么從查找表中找到R = 12, G=25 , B=50位置的三個浮點值(這個預先把lut表讀入三維數組就可以了,根據索引下標取很簡單),將三個浮點值再乘以255,擴展到0-255范圍,得到一組新的RGB值,這個就是調色后的顏色值。
沒錯,就是醬紫。當然上面用的是最簡單的最近鄰插值方法,因為(12.5, 25, 50)直接取整是不准確的,輸出的圖片會有比較明顯的條紋斷層現象。可以使用稍微復雜點的三線性插值(三維空間中浮點周圍的8個整數點插值)或者四面體插值,能夠得到比較平滑的輸出圖。
4. 憂郁的妹紙調色后是醬紫的:
最近鄰插值:
三線性插值:
四面體插值:
可以看到最近鄰插值妹紙的衣服上有明顯的條紋,后兩種插值方法要改善很多,突然感覺也沒那么憂郁了。
放兩張其他LUT文件調色出的憂郁妹紙:
上面是博主用OpenCVC++寫代碼實現的,並不麻煩。
FFmpeg中集成有3DLutFilter,同樣也是有這三種插值算法,命令行調用也非常方便,命令如下:
ffmpeg -i log.mp4 -vf lut3d="file=DK79.cube" out.mp4