3D LUT --色彩校正的利器
來自專欄 All in Camera18 人贊了文章
3D LUT
是在電影和顯示工業里廣泛使用的技術,最近幾年被引入到很多ISP的設計中。在電影工業中,由於播放設備的不同,經常需要在不同色彩空間之間做映射,3D LUT 的一個功能就是被用來做色彩空間映射。在顯示工業里,很多顯卡或者電視都內置3D LUT色彩轉換功能。3D LUT的原理很簡單,RGB 3個1D LUT組成3D LUT,輸入的RGB三個通道顏色值按照3D LUT的三個查找表做映射,得到轉換後的顏色。
如上圖所示,3D LUT是一個立方體,不同的設計有不同的節點數,以及節點的bitdepth,比較典型的33x33x33的節點數,節點之間的輸入會根據相鄰兩點的插值算出輸出。
在ISP以往的設計中,無論是CCM還是memory color enhancement,這些色彩運算都在2D 色域上進行的。如下圖:
而實際色彩空間是3維的,如下圖
在2D色域進行的色彩映射只能是把色彩的gammut擴展,而gammut內部的大量顏色,是無法準確轉換的。有了3D LUT,則可以直接精確控制n x n x n 個 節點的顏色。
舉個實際的例子來說明為什麼2D的色彩映射對ISP來說是不夠的。
在基於2D色域校正或者色彩增強的處理中, 把膚色(patch2)校正到傾向的顏色。
基於2D色域的做法是在hue/saturation 模型進行角度(hue)轉動和徑向(saturation)的移動,
如果是在CCM中進行膚色調整這個操作,由於CCM是一個global的矩陣操作,這樣就會影響到其他的顏色。
如果是在YUV域做色彩的映射,有的ISP叫color
enhancement,它可以把指定色彩區間的顏色映射到一個目標顏色上,如果把2映射到2的位置上,如下圖所示。
這種方法的問題是,一方面顏色範圍的選取非常難以把握的,選多了會碰到其他顏色,選少了可能陰影或者高亮位置的膚色就沒有被處理到。如果要處理多人種的膚色,用這種方法工作量也非常大。
而且歸根到底,基於2D色域的操作,都不可避免的碰到不想碰到的顏色。這個根本問題只能依靠3D LUT來解決。
當下比較典型的設計是1D LUT 加 3D LUT的方案,1D LUT 可以先把gray scale 和gamma 調整好,剩下的色彩映射靠3D
LUT來搞定。這樣的好處是我們可以配合contrast/gamma 的變化,應用不同的3D LUT,保持關鍵色彩的恆定性。
3D LUT 本身的原理比較簡單, 但是3D LUT的tuning 工具是比較難做的,它與2D色域的色彩增強也面臨相似的問題:
顏色範圍的選取非常難以把握的,選多了會碰到其他顏色,選少了可能陰影或者高亮位置的膚色就沒有被處理到。
比較著名的一個3D LUT tuning 工具3D LUT creator在這方面做的比較好。
以膚色調整為例,下圖是目標膚色的照片:用戶需要選取high light, middle tone 和 shadow 三個膚色樣本,
工具會記錄下這三個膚色樣本的HSV值。
在要處理的照片上,同樣選取high light, middle tone 和 shadow 三個膚色樣本。
這個工具會自動計算出來最終的3D LUT,表面上看,用這種方法計算出3D LUT本身並不難,
但是在處理過渡的顏色上,如何避免出現banding等瑕疵實際上是很複雜的,需要顏色工程師深入研究才能解決。
而這才是工具製作者的不傳之秘。
推薦閱讀:
※本周大新聞|MWCS上海展來襲,vivo推ToF 3D技術
※3D 電影亮度偏暗,影院為了省錢而調暗燈泡?
※類似於這種摺紙3d海報是怎麼做出來的?
※顯卡性能發展到2015年,是否顯卡的性能發展已經碾壓了遊戲效果的發展?
※魔獸世界的裝備外形是如何做到所有種族,性別通吃匹配的?