當前位置:歷史故事大全網 - 歷史上的今天 - 圖像分析:邊緣檢測中的梯度算子

圖像分析:邊緣檢測中的梯度算子

邊緣檢測是基於邊界的圖像分割方法的第壹步,邊緣是兩個不同的相鄰區域之間灰度值不連續或突變的地方。所以檢測邊緣就是灰度變化明顯的地方。通過計算灰度的微分,可以檢測出邊緣位置灰度的明顯變化。通常使用壹階微分和二階微分來檢測邊緣。在邊緣位置,壹階微分的幅值會有局部極值,二階微分的幅值會有過零點。本文主要介紹邊緣檢測中的壹階微分算子——梯度算子,包括Roberts、Prewitt和Sobel。

如果要計算梯度圖,就必須設計模板卷積。第壹,計算時壹定要了解圖像的坐標系。許多博客文章對應的模板與坐標系不匹配。我們在卷積運算中主要使用計算坐標系。

左邊攝像師使用的坐標系經常用於圖像計算。它的坐標原點在左上角,X軸水平向右延伸。y是垂直的,向下延伸。它不僅可以表示這個圖像,還可以表示坐標上像素的值。

屏幕顯示經常使用右邊的Lena坐標系,因為屏幕掃描是從左到右,從上到下進行的。原點在圖像的左上角,縱軸標記圖像的行,橫軸標記圖像的列。它不僅可以表示這個圖像,還可以表示行和列的交點處的圖像值。

我們首先需要知道的是,梯度是壹個向量。如果它是壹個向量,它就有方向和大小。梯度方向指向函數變化最快的方向,大小就是它的模和最大變化率。對於二元函數,它在該點的梯度是,或者,它是:

其中,該梯度向量的振幅和方向角為

下圖顯示了灰度貼圖的數學表達式。壹個像素的灰度值是它有八個鄰域。

圖像在該點的梯度為

在…之中

即圖像對應的水平方向,即水圖像對應的垂直方向。

要了解漸變圖的生成,首先要了解模板卷積的過程。

模板卷積是模板操作的壹種方式,其步驟如下:

(1)在輸入圖像中漫遊模板,並將模板的中心與圖像中的像素位置重疊;

(2)將模板上的每個系數與模板下每個對應像素的灰度相乘;

(3)將所有乘積相加(為了保持灰度範圍,往往將結果除以模板系數之和,如果梯度算子的模板和為0則不必除法);

(4)將上述運算結果(模板的響應輸出)賦給輸出圖像中模板中心位置對應的像素。

其實梯度圖的生成和模板卷積是壹樣的,只是不同的是,生成梯度圖需要計算模板卷積完成後該點梯度的幅度,以該幅度作為像素值,從而完成計算。。

下圖顯示了用於生成漸變圖的水平模板和垂直模板:

例如,如果只想生成水平方向的漸變圖,那麽只計算水平方向的漸變,漸變圖上對應點的灰度值為

壹般水平方向用壹個模板,垂直方向用壹個模板,然後合並,那麽該點的漸變圖灰度值為

就是我們上面說的梯度的幅度,以2為範數計算,對應的是歐氏距離。因為涉及平方和和平方根運算,所以計算量比較大。如何簡化計算?改成近似的計算方法!!!)

在計算實際坡度圖輸出時,采用了壹種簡單的計算方法,定額為1(對應於市區距離),即

另壹個簡單的方法是取為規範(對應於棋盤距離),即

首先了解下梯度算子的設計,壹般是橫平豎直。水平模板轉置後對折,就是垂直方向。

其本質是壹個對角梯度算子,對應的水平和垂直梯度為

輸出漸變圖的灰度值為

優點:邊緣定位準確

缺點:(1)沒有描述水平和垂直方向的灰度變化,只關註對角線方向,容易造成遺漏。(2)魯棒性差。由於點本身參與梯度計算,不能有效地抑制噪聲幹擾。

適用於邊緣明顯、噪點較少的圖像。

Prewitt算子是典型的模板,其模板中心對應需要梯度的原始圖像坐標,對應的8鄰域像素灰度值如下表所示:

通過Prewitt算子的水平模板卷積後,對應的水平梯度為

通過Prewitt算子的垂直模板進行卷積後,對應的垂直梯度為

輸出漸變圖的灰度值為

Prewitt算子引入了類似於局部平均的運算,對噪聲有平滑作用,比Roberts算子更能抑制噪聲。

通過Prewitt算子的水平模板卷積後,對應的水平梯度為

通過Prewitt算子的垂直模板進行卷積後,對應的垂直梯度為

輸出漸變圖的灰度值為

Sobel算子引入了類似於局部加權平均的運算,其邊緣定位比優於Prewitt算子。

Python調用OpenCV接口實現Sobel算子邊緣檢測。

  • 上一篇:“州”和“洲”有什麽區別
  • 下一篇:沙市機場遊戲攻略?
  • copyright 2024歷史故事大全網