一、梯度
不是一個實數,他是一個向量即有方向有大小。以一個二元函數來講解,設一個二元函數f(x,y),在某個點的梯度為:
=
:稱為向量微分算子或nabla算子
梯度的方向是函數變化最快的方向,沿着梯度的方向容易找到最大值。
二、圖像梯度
模糊圖像中的物體輪廓不冥想,輪廓邊緣灰度變化不強烈,層次感不強,而清晰圖片中的物體輪廓邊緣灰度變化明顯,層次感強。那么這種灰度變化明顯不明顯怎么去定義呢?可以使用導數(梯度),衡量圖像灰度的變化率,因為圖像就是函數。
由圖像可以看出,相鄰灰度值有變化,那么梯度就有值,如果相鄰像素沒有變化,那么梯度就是0,把梯度值和相應的像素相加,那么灰度值沒有變化的,像素就沒有變化,灰度值變了,像素值也就變了。因此梯度來增強圖像的。
將圖像兩個方向結合起來就可以得到圖像函數f(x,y)梯度表達式:
Gx、Gy表示x方向和y方向的梯度。
幅度:
方向角:
對於數字圖像來說,相當於是二維離散函數求梯度,使用差分來近似導數:
Gx(x,y):x方向梯度,即H(x,y)對x求偏導。
Gy(x,y):y方向梯度
H(x,y):像素值
像素點(x,y)處的梯度值和梯度方向分別是:
這里又是平方,又是開方的,計算量比較大,於是一般用絕對值之和來近似平方和平方根的操作,來降低計算量。
梯度的方向是函數變化最快的方向,當函數中存在邊緣時,一定有較大的梯度值,相反,當圖像中有比較平滑的部分時,灰度值變化較小,則相應的梯度也較小,圖像處理中把梯度的模簡稱為梯度,由圖像梯度構成的圖像成為梯度圖像。
經典的圖像梯度算法是考慮圖像的每個像素的某個鄰域內的灰度變化,利用邊緣臨近的一階或二階導數變化規律,對原始圖像中像素某個鄰域設置梯度算子,通常我們用小區域模板進行卷積來計算,有Sobel算子、Robinson算子、Laplace算子等。
三、應用
sobel算子,主要用作邊緣檢測,是離散差分算子,用來運算圖像梯度函數的灰度近似值。在圖像的任何一點使用此算子,將會產生對應的梯度矢量或者法矢量。
書上的sobel模板不是卷積模板,而是協相關模板,卷積的話要先將模板旋轉180度以后再與圖像做相關操作。
Gx方向的相關模板:
Gy方向的相關模板:
Sobel的卷積模板Gx:
sobel卷積模板Gy:
具體計算為,每個像素(灰度值)與模板對應位置元素相乘求和(類似於CNN中的卷積,其實是協相關運算),來計算該點灰度的大小:
通常,為了提高效率使用不開平方的近似值:
然后可用以下公式計算梯度方向: