梯度
在高數中,梯度是一個向量,是有方向有大小。假設一二元函數f(x,y),在某點的梯度有:
結果為:
即方向導數。梯度的方向是函數變化最快的方向,沿著梯度的方向容易找到最大值。
圖像梯度
在一幅模糊圖像中的物體的輪廓不明顯,輪廓邊緣灰度變化不強烈,從而導致層次感不強,而在清晰圖片中的物體輪廓邊緣灰度變化明顯,層次感強。那么這種灰度變化明顯不明顯怎么去定義呢?
可以使用導數(梯度),衡量圖像灰度的變化率,因為圖像就是函數。正因如此,我們引入的圖像梯度可以把圖像看成二維離散函數,圖像梯度其實就是這個二維離散函數的求導。
如果一副圖像的相鄰灰度值有變化,那么梯度就存在,如果圖像相鄰的像素沒有變化,那么梯度就是0,把梯度值和相應的像素相加,那么灰度值沒有變化的,像素就沒有變化,灰度值變了,像素值也就變了。
相加后的新圖像,原圖像像素點100與90亮度只相差10,現在是110與90,亮度相差20了,對比度顯然增強了,尤其是圖像中物體的輪廓和邊緣,與背景大大加強了區別,這就是用梯度來增強圖像的原理。將圖像函數f(x,y)梯度表達式表示出來:
幅度:
方向角:
對于數字圖像來說,相當于是二維離散函數求梯度,使用差分來近似導數:
因此,像素點(x,y)處的梯度值和梯度方向分別是:
平方+開方的,計算量太大,于是一般用絕對值來近似平方和平方根的操作,來降低計算量:
梯度的方向是函數變化最快的方向,所以當函數中存在邊緣時,一定有較大的梯度值,相反,當圖像中有比較平滑的部分時,灰度值變化較小,則相應的梯度也較小,圖像處理中把梯度的模簡稱為梯度,由圖像梯度構成的圖像成為梯度圖像。
一些經典的圖像梯度算法是考慮圖像的每個像素的某個鄰域內的灰度變化,利用邊緣臨近的一階或二階導數變化規律,對原始圖像中像素某個鄰域設置梯度算子,通常我們用小區域模板進行卷積來計算,有Sobel算子、Robinson算子、Laplace算子等。
經典算子
對圖像大矩陣和濾波小矩陣對應位置元素相乘再求和的操作就叫卷積(Convolution)或協相關(Correlation).
協相關(Correlation)和卷積(Convolution)很類似,兩者唯一的差別就是卷積在計算前需要翻轉卷積核,而協相關則不需要翻轉.
sobel算子
主要用作邊緣檢測,是離散差分算子,用來運算圖像梯度函數的灰度近似值。在圖像的任何一點使用此算子,將會產生對應的梯度矢量或者法矢量。
書上的sobel模板不是卷積模板,而是協相關模板,卷積的話要先將模板旋轉180度以后再與圖像做相關操作。
Gx方向的相關模板:
Gy方向的相關模板:
Sobel的卷積模板Gx:
sobel卷積模板Gy:
具體計算為,每個像素(灰度值)與模板對應位置元素相乘求和(類似于CNN中的卷積,其實是協相關運算),來計算該點灰度的大小:
為了提高效率使用不開平方的近似值:
用以下公式計算梯度方向:
Sobel算子用來計算圖像灰度函數的近似梯度。Sobel算子根據像素點上下、左右鄰點灰度加權差,在邊緣處達到極值這一現象檢測邊緣。對噪聲具有平滑作用,提供較為精確的邊緣方向信息,邊緣定位精度不夠高。當對精度要求不是很高時,是一種較為常用的邊緣檢測方法。
部分算子介紹