Canny算子計(jì)算流程:
高斯濾波和Sobel算子已經(jīng)在前面講過(guò),所以這里主要討論非最大值抑制和滯后分割電路設(shè)計(jì)。
非最大值一直電路設(shè)計(jì)
非最大值抑制主要是對(duì)Sobel運(yùn)算的計(jì)算結(jié)果進(jìn)行開(kāi)窗,在當(dāng)前像素的3x3鄰域找到梯度方向上的最大值,若當(dāng)前像素為整個(gè)方向上的最大值,則將該像素點(diǎn)歸為潛在的邊緣點(diǎn)。否則,直接置為非邊緣點(diǎn)。
我們首先要明白當(dāng)前像素的梯度值位于哪一個(gè)象限,假定其位于第一象限,則有
假定該點(diǎn)計(jì)算結(jié)果為result,則有
不妨再列出第二象限的計(jì)算公式
設(shè)計(jì)的難點(diǎn)在于梯度方向上兩個(gè)潛在極大值的插值運(yùn)算f算子。有兩點(diǎn)值得我們注意:
1)f算子中包含除法,這是在FPGA中不容易處理的。
2)前兩個(gè)象限的除法運(yùn)算的分子和分母是顛倒的,這是不容易設(shè)計(jì)的。
所以就需要進(jìn)行算法的等效轉(zhuǎn)換,首先想到的就是將除法轉(zhuǎn)換為乘法運(yùn)算,這個(gè)是比較容易實(shí)現(xiàn)的,以第一象限公式為例,兩邊同時(shí)乘以x,則有
對(duì)于第二象限,兩邊同時(shí)乘以y,則有
不等式右邊第一項(xiàng)系數(shù)為當(dāng)前x與y方向梯度值的較小值,第二項(xiàng)系數(shù)為當(dāng)前x與y方向梯度的較大值與較小值之差,不等式左邊系數(shù)為當(dāng)前x與y方向梯度值的較大值。因此,將公式變換如下:
上式中,Mmax代表當(dāng)前x與y方向梯度值的較大值,Mmin代表當(dāng)前x與y方向梯度值的較小值。C0,C1,C2,C3,則分別代表4個(gè)插值元素。對(duì)于8個(gè)不同的象限,插值元素的索引號(hào)如下表所示:
Index of C0 | Index of C1 | Index of C2 | Index of C3 | |
第1,5象限 | 2 | 5 | 6 | 3 |
第2,6象限 | 2 | 1 | 6 | 7 |
第3,7象限 | 0 | 1 | 8 | 7 |
第4,8象限 | 0 | 3 | 8 | 5 |
這樣,就可以實(shí)現(xiàn)4個(gè)主象限的計(jì)算一致性,同時(shí)將轉(zhuǎn)換為FPGA所擅長(zhǎng)的乘法和加法運(yùn)算。
在查表得到插值元素時(shí),需要知道當(dāng)前的象限信息,得到象限信息的最簡(jiǎn)單辦法就是通過(guò)查詢x與y方向梯度值的符號(hào)。同時(shí),需要得到兩個(gè)值的比較關(guān)系。需要注意的是,我們需要Sobel運(yùn)算結(jié)果的x與y方向的輸出,以及模值輸出,實(shí)際上并不需要方向計(jì)算。
第一階段的計(jì)算電路如圖所示:
首先將Sobel的x和y方向的計(jì)算結(jié)果通過(guò)Cordic模塊輸出兩個(gè)值的絕對(duì)值的較大值Max和較小值Min,以及輸入坐標(biāo)的象限信息Quadrant_info。接著為了得到當(dāng)前像素的8個(gè)插值元素,即當(dāng)前窗口,我們需要將上面三個(gè)數(shù)據(jù)及Sobel的模值結(jié)果Mudule送入win_buf得到窗口緩存。我們需要的是當(dāng)前窗口的9個(gè)元素Mudule(8:0),以及上面三個(gè)數(shù)據(jù)的當(dāng)前值Max(4),Min(4),Quadrant_info(4)。
第二階段的計(jì)算電路如圖所示:
第二階段的計(jì)算將象限信息和當(dāng)前窗口像素送入查找表,由查找表電路得到C0,C1,C2,C3輸出。然后在此基礎(chǔ)上做f算子,得到的結(jié)果與中心窗口值與Max的乘積進(jìn)行比較。最后,在比較的結(jié)果上進(jìn)行分割。
審核編輯 :李倩
-
運(yùn)算
+關(guān)注
關(guān)注
0文章
129瀏覽量
25768 -
Canny
+關(guān)注
關(guān)注
0文章
14瀏覽量
9695
原文標(biāo)題:Canny
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論