• 沒有找到結果。

絕對差值遮罩 絕對差值遮罩 絕對差值遮罩 絕對差值遮罩(ADM) 邊緣偵測 邊緣偵測 邊緣偵測 邊緣偵測

第三章 演算法技術模組 演算法技術模組 演算法技術模組 演算法技術模組

3.1 絕對差值遮罩 絕對差值遮罩 絕對差值遮罩 絕對差值遮罩(ADM) 邊緣偵測 邊緣偵測 邊緣偵測 邊緣偵測

絕對差值遮罩(Absolute Difference Mask , ADM)是由 Alzahrani 與 Chen[15]於 1997 年所提出的邊緣偵測演算法(Edge Detection)。ADM 演算法是承襲 Canny 邊緣偵測演算 法[43],但主要改善目的是以能夠達成更有效的硬體電路模組設計為考量基礎,因此在 該演算法的流程中盡量避免使用浮點數的運算。ADM 的第一步驟提出了適合硬體實作 的影像模糊化方法(Smoothing),這種用以符合硬體設計的影像模糊化取代原先 Canny 演算法中,計算較複雜的高斯模糊遮罩,而稱為半高斯模糊(Semi-Gaussian Smooth)。半 高斯模糊以 2 的 1 次方遞減至負數次方實現高斯分佈曲線,2 的負數次方在實作時,能 以二進位移位的方式取代浮點數乘法的運算,達到有效硬體電路模組化的設計概念。而 ADM 計算邊緣(Edge)的遮罩,計算流程除了半高斯遮罩迴旋運算外,還有以下兩個步 驟。第一步驟先計算出像素的邊緣強度(Strength)及方向值(Direction),而方向則是決定 出該像素的邊緣是屬於 0 度、90 度、+45 度或-45 度等四個方向的其中之一。而第二步 驟會將邊緣的寬度單一化,並且定位(Localization)出邊緣正確的位置。由此,其 ADM 完整演算流程配合可圖 3-1 說明如下:

1. Semi-Gaussian smoothing:半高斯模糊迴旋運算將影像模糊化。

2. Pixels strength and direction calculation:計算方向值以及邊緣強度。

2-1. 計算每個像素的 4 個方向邊緣強度候選值。

2-2. 根據邊緣強度候選值計算出邊緣強度值及方向值。

3. One-pixel edge and localization:將邊緣寬度單一像素化並定位出其所在位置。

15

圖 3-1 ADM 演算法流程及其各階段結果影像圖

半高斯模糊迴旋運算的遮罩數值如圖 3-2 所示。假定像素 P 的影像強度(Intensity) 位於影像的座標(x,y)上將其表示為 P(x,y)。若以 Semi-Gaussian 最外圍角落的權值 0.25 來說,迴旋乘積(Convolution)的做法應為 P(x-2,y-2)*0.25,此時我們可將其改為 P(x-2,y-2)

>> 2。意即,將 P(x-2,y-2)的影像強度以二進位的方式直接往右移兩位即可得到相同結 果,最後再把各像素的移位後影像強度進行加總。而 Gaussian 分佈又稱常態分佈 (Normal Distribution),其所有的權值加起來應為 1。依循這個定理,Semi-Gaussian 必須 將加總值除以 16,這個操作也可將其改為往右移 4 位即可得相同結果。

1 16

×

圖 3-2 半高斯模糊遮罩

經過半高斯模糊的計算之後,開始對各個像素分別計算 4 個方向的邊緣強度,其計 算邊緣強度及方向的遮罩如圖 3-3 所示。計算 0 度方向候選計算值以 Hu、Hl為表示符 號;90 度方向候選計算值則是使用 Vu、Vl符號為代表;而正負 45 度則分別以 Pdu、Pdl

與 Ndu、Ndl為符號代表。演算法中依序計算出 4 個方向的方向候選計算值如公式(3.1) 所示,而後將 4 個方向計算出來的方向候選計算值相減並取絕對值,以得到 4 個方向邊 緣強度候選值(V , H , Pd , Nd),如公式(3.2)所示。最後挑選出 4 個方向候選值中最大的

16

Canny 演算法的結果圖是以 OpenCV 2.0 的 cvCanny()函式進行計算所得到,所以在演算 法的分析與比較中,我們也會將 OpenCV 的計算步驟加入比較。原始 Canny 的演算步

17

驟上共分為四個階段,分別為:

1. Gaussian Smoothing:

以 σ = 1.0 至 2.0 之間的高斯模糊遮罩,計算出模糊化影像。

2. Compute Gradients component、Magnitude and Orientation:

計算各個像素的梯度分量、梯度大小及梯度角度,如公式(3.4)所示。

2 2

arctan

x

x y

y

Mag g g g

g θ

= + =

(3.4)

3. Non-Maximum Suppression:

將角度分為四個角度區間,分別為-22.5~22.5 度、22.5~67.5 度、67.5~112.5 度與 112.5~157.5 度,如圖 3-6 所示。而後根據各個像素的梯度角度找出符合的 角度區間,並比對該像素鄰近的梯度大小,藉此標記出候選的邊緣所在之處。

圖 3-5 Canny 演算法將梯度角度分為四個角度區間示意圖

其比對的方式為,與符合自己像素梯度角度區間方向的鄰近像素比較其梯 度大小。若 P5(中心點)與鄰近像素相比後,梯度大小值不是最大時,則判斷為 非邊緣點,反之,當 P5 是鄰近像素中梯度大小值為最大時,則判斷該點為邊緣 點,其梯度角度區間與比對的鄰近點如下:

3-1. -22.5 ~ 22.5 : P4、P5 與 P6 三者比較梯度大小。

3-2. 22.5 ~ 67.5 : P3、P5 與 P7 三者比較梯度大小。

3-3. 67.5 ~ 112.5 : P2、P5 與 P8 三者比較梯度大小。

3-4. 112.5 ~ 157.5 : P1、P5 與 P9 三者比較梯度大小。

4. Hysteresis Thresholding:

設立兩個門檻值(Threshold),其一門檻值較數值小(Thlow),另一則較大

18

(Thhigh)。Thlow用於判斷附近的邊緣是否為連接的線,若無連接則該點可能為雜 訊,Thhigh則是用於判斷該點的梯度大小強度是否足以成為邊緣。兩個門檻值的 判斷式如下:

4-1.當像素(x, y)的梯度大小低於 Thlow時,該候選邊緣點則被捨棄(標記為黑 色)。

4-2.當像素(x, y)的梯度大小高於 Thhigh時,該候選邊緣點則確定強度足夠成為邊 緣點(標記為白色)。

4-3.當像素(x, y)的梯度大小介於 Thlow與 Thhigh之間時,則會判斷一個範圍的遮 罩內相連接的像素梯度大小是否高於 Thhigh,若是高於 Thhigh則判斷該候選 邊緣點為邊緣點(標記為白色)。

4-4.當像素(x, y)與鄰近的像素皆無高於 Thhigh時,則會判斷一個範圍的遮罩內相 連接的像素是否有某一像素的梯度大小介於 Thlow與 Thhigh之間,若存在,

則判斷該候選邊緣點為邊緣點(標記為白色)。

4-5.其他情況則皆判斷非邊緣點(標記為黑色)。

OpenCV 中的 Canny 演算法修改了些許步驟中的細節,其中第一步驟修改為使用 σ 約等於 1.4 的固定數值的高斯模糊化遮罩,其遮罩數值如圖 3-6 所示;第二步驟使用 Sobel 演算法計算梯度分量藉以計算梯度大小及梯度角度;而於第三步驟中,判斷邊緣的鄰近 大小範圍固定使用 3*3 Pixels 的遮罩;第四步驟則是於 4-3 與 4-4 判斷式中的大小範圍 的遮罩固定使用 3*3 Pixels 的遮罩。

1 159

×

圖 3-6 OpenCV 中 Canny 演算法所使用的高斯模糊遮罩

19

我們將原始與 OpenCV 的 Canny 演算法以及 ADM 演算法的各個演算步驟差異製作 於表 3.1 中。我們使用本研究所製作的 ADM 模組程式與 OpenCV Canny 演算法演算步 驟結果差異相互比較,並製作於表 3.2 中。

表 3.1 原始 ADM 與 OpenCV Canny 演算步驟特性差異

表 3.2 ADM 演算法與 OpenCV Canny 演算過程中間結果比較圖