MATLAB圖像處理:把照片變成動漫風格

效果對比:

原圖

處理後

1. 動漫化風格的特點

要想搞清楚怎麼變成動漫化風格,首先就要明白動漫和普通照片的區別。主要的區別有三點:(1)動漫中的細節相對少;

(2)動漫中的邊緣輪廓更突出;

(3)動漫的色彩更鮮艷(相對於普通的、未經PS的照片);

放一張童年男神來感受一下:

比如頭髮、衣服的褶皺等等,這些細節都被弱化;另外邊緣的線條非常突出。而色彩鮮艷這一點從本文開頭的兩幅圖對比就可以看出來。這些特徵就是動漫風格的一般特徵,也是我們要著重處理的三個部分。

2. 如何處理

(1)突出邊緣線條

要想突出邊緣,自然首先要找到邊緣。有很多成熟的邊緣檢測演算法,最常用的就是各種運算元—— Sobel, Canny, Laplace 等等。利用這些運算元進行邊緣檢測的本質就是將運算元與圖像進行空間二維卷積。具體的實現這裡不再贅述,因為MATLAB中的edge函數可以很方便的實現邊緣檢測,用的就是這個原理。至於找到之後怎麼突出?最簡單的方法是從原圖中減去邊緣位置處的像素,這樣邊緣就變成了黑色,形成「描邊」的效果。

(2)弱化與去除細節

所謂「細節」,從圖像處理的角度看來就是圖像中的高頻成分。要想去除高頻成分,自然而然就要用到濾波(filtering)的方法。常用的濾波器有均值濾波器、高斯濾波器、中值濾波器等。但是,這些常用濾波器都有一個共同的問題——會弱化所有的高頻信息。而很不幸的是,圖像中的邊緣也屬於高頻信息(因為邊緣意味著圖像在這裡產生了突變,突變就意味著高頻)。因此常用濾波器會將我們本應突出的邊緣一起弱化模糊。

這種情況下就要讓雙邊濾波器(Bilateral filter)出場了。這種濾波器的特點是可以「保邊濾波」(或者叫「區域平滑」,Region smoothing)。顧名思義,就是可以只模糊區域內部而保留清晰的邊緣。為了搞明白雙邊濾波器為什麼有這樣的效果,首先來說一下高斯濾波器。高斯濾波器,或者說高斯濾波模板,其中的各個點的值僅與該點到模板中心點的空間距離有關,而並沒有考慮各個點與中心點的相似度(即像素值的接近程度),這樣就導致無論是變化不大的區域內部點,還是突變的邊緣點,只要和中心的距離相同,那就同等對待。

而雙邊濾波器就是在高斯濾波器基礎上加上了相似度權重,在高斯濾波模板的每個點上再乘以一個與中心點的相似度係數(即「相似度權重」),從而將邊緣與內部區分處理。相似度權重計算方法和高斯濾波模板中各點值(可以稱為「高斯權重」)的計算方法相同,只不過高斯權重是將該點到中心的距離代入高斯函數計算,而相似度權重是將該點與中心的像素相似度(比如該點像素值與中心像素值的歐氏距離,或者直接求二者的差值)代入高斯函數計算得到。

(3)讓圖像色彩更鮮艷

所謂的色彩鮮艷,其實就是高飽和度。顏色的飽和度高,就顯得鮮艷;飽和度低,就顯得灰暗。所以,要讓圖像色彩更鮮艷,就要提高飽和度。

直觀感受一下:

原圖:

飽和度提升:

飽和度降低:

提升飽和度的方法就不具體講了,有很多方法:圖像插值法,或者轉換到HSI色彩空間然後增強S(Saturation,飽和度)分量等等。

3. 總結

總體上,把照片變成動漫化風格分以下幾步:

(1)保邊濾波(區域平滑)

(2)邊緣檢測,然後從原圖中減去邊緣像素,以突出顯示邊緣線條

(3)飽和度提升

其中(3)飽和度提升放在哪一步進行都可以,但是(1)和(2)最好按上述順序進行,因為如果先進行邊緣檢測的話,會將區域內部的某些明暗光影等檢測出來,而這些是我們不希望過分突出的部分;而先進行保邊濾波的話,就可以將區域內部的細節弱化乃至去除,在此基礎上再進行邊緣檢測,效果就會好得多。


推薦閱讀:

Matlab小練習:按斜線方向依次賦值矩陣
[matDL框架開發直播:2]全連接層(dense)的實現和優化
Python和MATLAB交互的基本操作

TAG:图像处理 | MATLAB |