java 图像梯度检测_数字图像处理-边缘检测
梯度介紹
首先介紹邊緣檢測中用到的高等數學原理---梯度。介紹梯度,離不開方向導數。
方向導數
顧名思義,方向導數就是某個方向上的導數。
什么是方向:
函數
在這個方向上的圖像:
我們知道:
函數
的
點在這個方向上也是有切線的,其切線的斜率就是方向導數:
梯度
梯度:是一個矢量,它的方向上的方向導數最大,它的大小正好是此最大方向導數。
梯度的數學定義
簡單總結下:
方向導數是各個方向上的導數
偏導數連續才有梯度存在
梯度的方向是方向導數中取到最大值的方向,梯度的值是方向導數的最大值
2.?邊緣檢測
《經典邊緣檢測算子比較》 張麗 南京信息工程大學
圖像的邊緣是圖像最基本的特征之一。所謂邊緣(或邊沿)是指周圍像素灰度有跳躍性變化或“屋頂”變化的那些像素的集合。邊緣是圖像局部強度變化最明顯的地方,它主要存在于目標與目標、目標與背景、區域與區域之間,因此它是圖像分割依賴的重要特征。
從本質上說,圖像邊緣是圖像局部特性不連續性(灰度突變、顏色突變、紋理結構突變等)的反應,它標志著一個區域的終結和另一個區域的開始。
邊緣檢測是所有基于邊界分割的圖像分析方法的第一步。
檢測出的邊緣并不等同于實際目標的真實邊緣。由于圖像數據時二維的,而實際物體是三維的,從三維到二維的投影必然會造成信息的丟失,再加上成像過程中的光照不均和噪聲等因素的影響,使得有邊緣的地方不一定能被檢測出來,而檢測出的邊緣也不一定代表實際邊緣。
圖像的邊緣有方向和幅度兩個屬性,沿邊緣方向像素變化平緩,垂直于邊緣方向像素變化劇烈。邊緣上的這種變化可以用微分算子檢測出來,通常用一階或兩階導數來檢測邊緣。一階導數認為最大值對應邊緣位置,而二階導數則以過零點對應邊緣位置。
圖像的梯度可以用一階導數和二階偏導數來求解。但圖像是離散的,對一幅圖像的求導相當于對一個面求導。對圖像的操作,我們采用模板對原圖像進行卷積運算,從而達到我們想要的效果。而獲取一幅圖像的梯度就轉化為:模板(Roberts、Prewitt、Sobel、Lapacian算子)對原圖像進行卷積,不過這里的模板并不是隨便設計的,而是根據數學中求導理論推導出來的。
Roberts算子
梯度的模為
在圖像處理中,實際我們用
和
來表示兩個偏導數
故,梯度的??梢员硎緸?#xff1a;
因為平方和平方根需要大量的計算開銷,所以使用絕對值來近似梯度幅值:
一般我們常用對角線方向的像元計算梯度
Prewitt和Sobel算子
在3*3模板中:
定義水平、垂直和兩對角線方向的梯度:
?
該定義下的算子稱之為Prewitt算子:
Sobel算子是在Prewitt算子的基礎上改進的,在中心系數上使用一個權值2,相比較Prewitt算子,Sobel模板能夠較好的抑制(平滑)噪聲。
計算公式為:
?
Sobel算子:
上述所有算子都是通過求一階導數來計算梯度的,用于線的檢測,在圖像處理中,通常用于邊緣檢測。在圖像處理過程中,除了檢測線,有時候也需要檢測特殊點,這就需要用二階導數進行檢測。
總結
以上是生活随笔為你收集整理的java 图像梯度检测_数字图像处理-边缘检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue数组修改不触发视图更新、vue向响
- 下一篇: tensorflow随笔-正则化与指数衰