3DLut表實現log視頻的后期調色原理


現在越來越多的視頻或者圖像拍攝設備支持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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM