图像滤镜的基本方法
什么是濾鏡
濾鏡最初是指安裝在相機鏡頭前過濾自然光的附加鏡頭,用來實現調色和添加效果。一些數字圖像處理軟件(最著名的如 Adobe Photoshop)提供了一些特定的預設工具用來實現相機濾鏡的效果,這些工具也就自然而然地被稱作“濾鏡”。軟件實現的濾鏡可以模擬大部分的鏡頭濾鏡,如色溫變換濾鏡(LB)和強調濾鏡等,但由于無法再現拍攝環境,軟件濾鏡無法復原照片中未包含的信息,進而也難以實現偏光鏡和紫外線濾色鏡(UV)的效果。
實現濾鏡的步驟
就模擬鏡頭濾鏡而言,實現軟件濾鏡無外乎是對照片中的色彩進行映射的過程。然而軟件濾鏡并不止于此,復雜的軟件濾鏡還需要為照片增加光線變化(如 LOMO 的暗角效果)、材質和相框等,最近美圖秀秀針對國內環境問題推出的“去霧霾”濾鏡正是復雜的軟件濾鏡的一種體現。不過再復雜的軟件濾鏡,實現起來也不外乎如下幾個步驟。
1. 顏色映射
昏黃的顏色讓人聯想到古老與質樸,淡綠的顏色讓人感到柔和與舒適:顏色是一張照片的靈魂,而實現濾鏡最重要的一步就是顏色映射。顏色映射是指將原來照片中的每一種顏色,通過某種映射方法轉換成另一種顏色。最常見也最簡單的映射方法是查表法。
查表法的原理是在一張表中為每種顏色記錄一個對應的映射目標顏色,當用查表法對一張照片做顏色映射時,只需要遍歷照片的每個像素點,然后在表中找到該像素顏色對應的目標顏色,最后將該像素設置為目標顏色即可。查表法實現的前提是顏色的映射與周圍的顏色無關,即一種顏色無論周圍的顏色為何、無論其位于照片的哪個位置,其目標顏色都應該是相同的。
RGB 可以表示的顏色數量為?256*256*256 = 16,777,216,如果要記錄每種顏色的映射結果,那么顏色表需要 一千六百多萬條記錄,這顯然無法應用到實際的工程中。為了簡化起見,一般每相近的 4 種顏色采用一條記錄存儲,這樣顏色表只需要?64 * 64 * 64 = 262,144?條記錄。
這里以?Lev Zelensky?首先發表的一個基準顏色表為例:
上表將 262,144 種顏色分為 8 個塊,每塊?64 * 64?格,每一格的顏色都不同。進行顏色映射時,首先使用數字圖像處理軟件對該基準顏色表應用要模擬的濾鏡來生成映射表(如下圖),然后對要處理的照片的每個像素,從基準顏色表中找到該像素顏色的位置,然后在映射表的相應位置就可以得到目的顏色。
Lev Zelensky 為 iOS/OS X 上著名的圖像處理庫?GPUImage?加入了GPUImageLookupFilter)?方法來實現上述過程。
2. 疊加材質
只進行顏色映射就可以實現大部分簡單的濾鏡,然而復雜的濾鏡需要更多的步驟來完成。其中最為典型的就是?LOMO?效果了。要實現 LOMO 效果,除了通過顏色映射讓顏色更加鮮艷外,還需要為照片增加四周的暗角。首先需要一張暗角素材:
然后將該素材疊在照片上,并應用?Overlay?混合算法。
要注意的是根據材質不同,可以選擇不同的混合算法。只是對暗角這一材質而言,Overlay 可以帶來最好的效果。另外一點就是先進行顏色映射還是先疊加材質并沒有固定的規則,需要根據實際效果進行選擇。就 LOMO 暗角而言,先疊加材質的效果更好。
3. 應用相框
嚴格來說相框并不屬于濾鏡的一部分,但是考慮到好的相框可以為照片提色不少,這里也順便提一句。根據相框的不同,應用的照片上的方法也不同,有的相框可以直接蓋在照片上,有的則需要按照某種混合算法和照片進行混合,但無論哪種方式,應用相框都算是整個濾鏡最簡單的部分了。與相框類似的就是照片裝飾物,比如一顆桃心或用戶可以自定義的文字,實現照片裝飾物并沒有任何技術難度,唯一要記住的點就是不要胡亂的為你的濾鏡加入裝飾物,否則會讓濾鏡落入俗套。
4. 反復
最終的濾鏡效果可能需要反復應用上面的步驟才能實現,比如 Instagram 的濾鏡很多都是應用了多種材質才得以完成。這一過程需要設計者的保留充分的耐心,一點一點地琢磨,一款優秀的濾鏡才能得以誕生。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結