l 進(jìn)階效果之描邊效果
相對(duì)浮雕效果來(lái)說(shuō),描邊(邊緣檢測(cè))的代碼并不復(fù)雜多少,只是在理論上相對(duì)來(lái)說(shuō)稍微復(fù)雜一點(diǎn),而且效果看上去更加的討人喜歡一些。
如果在圖像的邊緣處,灰度值肯定經(jīng)過(guò)一個(gè)跳躍,我們可以計(jì)算出這個(gè)跳躍,并對(duì)這個(gè)值進(jìn)行一些處理,來(lái)得到邊緣濃黑的描邊效果。
首先考慮對(duì)這個(gè)象素的左右兩個(gè)象素進(jìn)行差值,得到一個(gè)差量,這個(gè)差量越大,表示圖像越處于邊緣,而且這個(gè)邊緣應(yīng)該左右方向的。同樣我們能得到上下方向和兩個(gè)對(duì)角線上的圖像邊緣。這樣我們需要構(gòu)造一個(gè)濾波器
經(jīng)過(guò)這個(gè)濾波器后得到的是圖像在這個(gè)象素處的變化差值,把它轉(zhuǎn)化成灰度值并求絕對(duì)值(差值可能為負(fù)),然后我們定義差值的絕對(duì)值越大的地方越黑(邊緣顯然是黑的),否則越白,可以得到如下的效果:
該效果的代碼如下(其中dip_filter函數(shù)代碼同上):
上面演示的效果種用到的模板就是一種邊緣檢測(cè)器,在信號(hào)處理上是一種基于梯度的濾波器,又稱邊緣算子。梯度是有方向的,和邊沿的方向總是正交(垂直)的,在上面的代碼中,我們采用的就是一個(gè)梯度為45度方向模板,它可以檢測(cè)出135度方向的邊沿。
以上是簡(jiǎn)單的邊緣檢測(cè)算子。更加嚴(yán)格的,我們可以采樣Sobel算子。Sobel 算子有兩個(gè),一個(gè)是檢測(cè)水平邊沿的,另一個(gè)是檢測(cè)垂直平邊沿的
同樣,Sobel算子另一種形式是各向同性Sobel算子,也有兩個(gè),一個(gè)是檢測(cè)水平邊沿的
,另一個(gè)是檢測(cè)垂直邊沿的
。各向同性Sobel算子和普通Sobel算子相比,它的位置加權(quán)系數(shù)更為準(zhǔn)確,在檢測(cè)不同方向的邊沿時(shí)梯度的幅度一致。讀者可以自行嘗試Sobel算子的效果,只要修改pencil_filter的值就可以了。