所謂濾鏡,最初是指安裝在相機鏡頭前過濾自然光的附加鏡頭,用來實現調色和添加效果。我們做的濾鏡算法又叫做軟件濾鏡,是對大部分鏡頭濾鏡進行的模擬,當然,誤差也就再所難免,我們的宗旨只是無限逼近。也是這個原因,我們無法再現真實的拍攝場景,無法復原照片中未包含的信息,進而也難以實現某些特殊濾鏡效果,諸如偏光鏡和紫外線濾色鏡(UV)的效果等等。
??? 目前濾鏡已經成為各種圖像處理軟件中必備功能,不同的濾鏡效果,讓我們的娛樂生活更加豐富多彩,對于任何一款軟件濾鏡效果的實現,我們可以歸結為以下幾個部分:
??? 1,基本變換
??? 這是濾鏡效果的第一步,我們可以根據喜好,設計各種圖像效果,這里所有的圖像效果可以統一使用如下公式表示:
????F(r,g,b,a)=f(r,g,b,a);
??? 這個公式包含四個變換,即RGB顏色空間中RGB三個分量的變換以及透明度Alhpa的變換,這里我們簡寫為A的變換。
??? 舉個灰度變換的例子,它對應的F——f變換如下:
??? F(r) = b * 0.114 + g * 0.587 + r * 0.299;
??? F(g) = b * 0.114 + g * 0.587 + r * 0.299;
??? F(b) = b * 0.114 + g * 0.587 + r * 0.299;
??? F(a) = a;
??? 這個灰度化也就是一個基本變換。有了這個基本變換,圖像也就達到了一定的效果,但是,一些復雜的濾鏡,并非簡單的基本變換,而是一些復雜的效果疊加,因而也就有了 下面幾個步驟。
??? 2,暈影材質模板疊加
??? 打開Instagram應用,我們會發現好多效果都有一些暈影,主要表現為圖像四個角偏暗,中間正常或者偏亮,這個其實就是疊加了一定的材質的原因,這里我們介紹Instagram中經典的暈角材質模板,如下圖所示:

???? 像這樣的材質我們如何疊加呢?這里就會使用一些疊加的算法,其中最常用的還是Photoshop中的混合圖層算法,這些混合算法我在前面開始的博客中已經介紹,大家可以仔細研究,這一步主要是使用這些混合圖層算法將材質模板和我們第一步基本變換得到的效果圖進行混合,從而得出各種暈角效果。當然,這些混合算法并非唯一 ,你完全可自己嘗試設計自己喜歡的混合圖層算法。
??? 這里給出Photoshop混合圖層算法的鏈接[http://blog.csdn.net/trent1985/article/details/40891661](http://blog.csdn.net/trent1985/article/details/40891661)
??? 3,風格模板疊加
??? 這里的風格疊加與2中的材質疊加算法差不多,這里是說主要是個步驟問題,舉個例子,為了實現老照片這個效果,我們第一步通過顏色基本變換,可以達到老照片的泛黃效果,但是還不逼真,因為老照片往往還有一些圖像噪聲,以及裂紋裂痕,這些效果如果你的算法無法實現,那么,你可以把這些通過PS做成一個模板,在這一步中疊加到圖像上面,這樣也就實現了更為逼真的效果。這里放上一個Instagram濾鏡的風格模板圖像如下所示:
????
??? 4,相框模板疊加
??? 有了1-3的步驟,一款濾鏡效果就已經基本完成了,但有時候,你還會想要更加美觀,那么你可以使用PS制作一些 精美的相框模板,疊加到濾鏡效果上面,豈不是更加美觀呢?
??? 上面4個步驟也就是一款濾鏡開發的步驟,當然這幾個步驟不一定是一款濾鏡必須的,可以是其中一個步驟,或者多個步驟,但是,歸根結底,任何一款軟件 濾鏡的實現,應該都逃不出這幾個步驟了吧。?只要我們掌握了這 幾個步驟 ,那么多次嘗試之后 ,總會開發出你 所 喜歡的濾鏡效果的。
??? 5,針對第一個步驟,介紹個快速實現方法:
??? 對于任何一款濾鏡,如果有基本變換這個步驟,那么我們都可以通過顏色映射構建一個映射表,然后通過查表來快速實現該變換效果,這樣可以大大提高濾鏡的速度,提升用戶的體驗。
??? 顏色映射查表法的基本原理:在一張表中為每種顏色記錄一個對應的映射目標顏色,當用查表法對一張照片做顏色映射時,只需要遍歷照片的每個像素點,然后在表中找到該像素顏色對應的目標顏色,最后將該像素設置為目標顏色即可。查表法實現的前提是顏色的映射與周圍的顏色無關,即一種顏色無論周圍的顏色為何、無論其位于照片的哪個位置,其目標顏色都應該是相同的。
??? 比如,RGB 可以表示的顏色數量為?`<span style="font-family: NSimsun;">256*256*256 = 16,777,216</span>`,如果要記錄每種顏色的映射結果,那么顏色表需要 一千六百多萬條記錄,這顯然無法應用到實際的工程中。為了簡化起見,[Lev Zelensky](https://plus.google.com/105075060804712942346/posts)發表了一個基準顏色表,將每相近的 4 種顏色采用一條記錄存儲,這樣顏色表只需要`<span style="font-family: NSimsun;">64 * 64 * 64 = 262,144</span>`?條記錄。這個表如下:
????
??? 注意:上表將 262,144 種顏色分為 8 個塊,每塊?`<span style="font-family: NSimsun;">64 * 64</span>`?格,每一格的顏色都不同。進行顏色映射時,首先使用數字圖像處理軟件對該基準顏色表應用要模擬的濾鏡來生成映射表(如下圖),然后對要處理的照片的每個像素,從基準顏色表中找到該像素顏色的位置,然后在映射表的相應位置就可以得到目的顏色。
????
????使用這種方法,你的濾鏡速度可以大大提升。
??? 以上5個步驟就是我結合網絡資源和個人總結的部分,喜歡濾鏡開發的朋友們可以試試。
??? 最后,介紹一個萬能濾鏡破解方法:
??? 對于一款濾鏡,我們構建一個模板,這個模板大小自定,可以看到濾鏡效果即可,比如Instagram,它指定的圖像大小是530*530,那么我們構建一個530*530大小的空白模板圖像,假如我們要破解Hudson效果,那么,經過 我們分析,這個效果不僅包括基本變換,而且還有 暈影 ,甚至有 與位置相關的梯度模板,這個是破解的 難點,如何 破解,我們可以使用如下步驟:
??? 1,構建256個530*530大小的模板,分別填充0-255種顏色,即灰度顏色;
??? 2,將每個模板 進行Hudson效果處理,得到相應的映射模板庫,這個庫也就記錄了所有的Hudson效果設置,包括基本變換,暈影,梯度等;
??? 3,對于任何一張530*530大小的原始圖像,我們只要從2中的模板庫中找到對應顏色,對應位置的像素值,那么 這個值就是Hudson的效果;
??? 這1-3步,示意圖如下所示:
?????
??? 大家仔細想一下是不是這個道理,有得必有失,這話一點不錯,這個方法可以破解 任何 一款濾鏡,但是,犧牲的卻是濾鏡的效率,想一下,是不是呢?
??? 好了 ,今天的介紹就到此結束了,大家有什么疑問可以聯系我 :
??? 本人郵箱[dongtingyueh@163.com](mailto:dongtingyueh@163.com), QQ: 1358009172
**最后,分享一個專業的圖像處理網站(微像素),里面有很多源代碼下載:**
[http://www.zealpixel.com/portal.php](http://www.zealpixel.com/portal.php)