?

基于FPGA的圖像邊緣檢測算法設計

2015-08-09 02:29
河南科技 2015年8期
關鍵詞:流水線寄存器加速器

王 靜

(安康學院電子與信息工程系,陜西 安康 725000)

在數字圖像處理以及對物體的識別、計算機視覺、生物醫學、人工智能、遙感、氣象預測學等諸多領域中,圖像的特征提取有著很重要的作用。邊緣是物體一個不變的特性,同時人的視覺系統對邊緣也是最敏感的,因此邊緣檢測是圖像處理的重要內容,它已經成為眾多學者研究的重點和熱點之一。

1 邊緣檢測

圖像邊緣檢測與提取的技術研究一直貫穿于圖像處理與分析的始終,邊緣檢測指“在一幅有一個或多個物體圖像的畫面中尋找其三維邊界,如陰影、紋理、邊沿等”通常通過圖像中某些確定點的灰度值、色度等來分辨出物體的邊界。從狹義上也可以說,邊緣檢測“主要是圖像灰度變化的度量、檢測和定位”[1]。

2 數字圖像邊緣檢測技術的基本實現步驟

2.1 濾波。邊緣檢測算法主要是基于圖像灰度的一階導數和二階導數,但導數的計算同樣對噪聲很敏感,因此必須使用濾波器來改善與噪聲有關的邊緣檢測方法的性能。

2.2 增強。增強邊緣的基礎是確定圖像中各點鄰域強度的變化值。

2.3 檢測。在圖像中有許多梯度幅值比較大的像素點,而這些點并不一定都是想要的圖像邊緣,所以應該用某種可靠的方法來確定哪些點是邊緣點。最簡單可靠的邊緣檢測就是根據圖像幅度閾值來判斷。

2.4 定位。確定邊緣所在的像素,也可以在亞像素分辨率上來估計邊緣位置,邊緣的方向也是可以被估計出來的。

3 硬件加速器

硬件加速器是指利用硬件模塊來代替軟件算法。硬件在執行各種操作時要比軟件快得多,其優勢尤其表現在對大量數據進行計算和傳輸方面。

4 圖像邊緣檢測的Sobel算法硬件加速器實現

4.1 原理和步驟

4.1.1 Sobel 邊緣檢測法的機理。Sobel 邊緣檢測法的機理是計算x 和y 方向亮度信號的導數值并且尋找導數中的最大值和最小值。這些區域也就是亮度變化最劇烈的區域[2]。

Sobel 檢測法通過叫作卷積的過程來估計每個像素點在每個方向上的導數值。分別用于計算x 和y 方向導數值的Sobel卷積表Gx和Gy點和離它最近的8個像素點每個乘以一個系數后相加。先把每個像素值分別乘以卷積表中對應的各系數,再把相乘得到的9個數相加就可以得到x方向和y方向的偏導數值Dx和Dy。然后,利用這兩個偏導數值計算中心像素點的導數。計算公式如下:

由于只想得到導數幅值的最大值和最小值,對上式作如下簡化:

這樣近似能夠滿足計算要求。并且,與計算平方和開平方相比,計算絕對值所用的硬件資源少得多。

它需要重復地計算圖像中每個像素位置導數的幅值。最簡單的方法就是把圖像中邊緣像素點的導數數值|D|都設置為0[3-4]。

4.1.2 計算Sobel卷積比特數

計算Sobel 卷積中表示每個像素點中間值和最終值所需要的比特數,

求出每個Dx和Dy的值需要把各自的9個部分積相加。

4.1.3 確定能夠滿足計算性能的并行結構方案

按照要求同時對盡可能多的像素進行并行計算。從原始圖像的頂部像素開始,通過獨立并行操作得到中間結果,最后求出底部的導數像素。然后可以并行地把兩組各6個部分積加起來,再并行地計算兩個絕對值,把它們加起來最后得到(原始圖像某個像素的)導數像素值[5]。

4.1.4 確定加速器的結構

原始圖像的像素,一旦被讀取,就可以用來計算該像素的后一列、本列和前一列中3個像素的導數,這樣可以進一步減少所占的內存帶寬。

4.2 邊緣檢測加速器具體實現結構

從原始圖像中讀取三行,每行4個相鄰的像素,把這些像素值存儲在加速器的寄存器中以待處理。

計算流水線按照每4個像素值一組的形式產生給定行的導數像素值。加速器從內存中的上一行、本行、下一行各讀取4個像素點到右上角的3個32位寄存器中。在接下來的4個時鐘周期里,像素值依次左移,每次移一個像素值,到乘法器陣列中。陣列中的每個單元包括一個像素值寄存器和一個或兩個乘法電路。乘法電路用于把像素值寄存器中存儲的像素值乘以一個常量系數。

在每個時鐘周期,硬件電路陣列提供了求一個導數像素值所需要的部分積,部分積加起來后存儲到Dx和Dy寄存器中。同樣,在每個時鐘周期,計算出前一個像素值的Dx和Dy的絕對值,加起來后存儲到|D|寄存器中。|D|寄存器中的導數像素值左移到結果行寄存器中。當寄存器中4個結果像素值都準備好后,隨即被寫入到內存中。進入穩態后,在處理一行的過程中,加速器在移入新的像素值到乘法法器陣列,Dx,Dy和|D|寄存器之前,需要把導數像素值從結果寄存器先寫到內存中。再讀入3組各4個像素點,像素值按時鐘節拍移入計算流水線,當結果寄存器填滿4個像素值后,再次寫到內存,然后不斷重復這個過程。

當到達一行的結尾,需要排出流水線中的數據。因為一行里像素點的個數是4 的整數倍(640=160×4),每次都可以讀到包含4個像素值的完整組。當把一行里最后4個像素讀入讀寄存器,經過4個計算周期后,結果寄存器被移入4個新的結果值,同時讀寄存器中的像素值被全部移入流水線中。然后結果寄存器被寫入內存。由于整行像素已經被讀完,不執行讀操作。此時,流水線中還有數據,再執行4個計算周期排出流水線中的數據。

[1]夏宇聞.Verilog數字系統設計教程[M].北京:北京航天航空大學出版社,2003.

[2]黃智偉,王彥.FPGA系統設計與實現[M].北京:電子工業出版社,2005.

[3]姚遠,李辰.FPGA 應用開發入門與典型實例(修訂版)[M].北京:人民郵電出版社,2010.

[4]徐志軍.大規??删幊踢壿嬈骷捌鋺茫跰].成都:電子科技大學出版社,2000.

[5]吳厚航.深入淺出玩轉FPGA[M].北京:北京航天航空大學出版社,2010.

猜你喜歡
流水線寄存器加速器
莫比斯加速器眾創辦公空間
知識快餐店 科學加速器
STM32和51單片機寄存器映射原理異同分析
全民小康路上的“加速器”
Lite寄存器模型的設計與實現
流水線
報廢汽車拆解半自動流水線研究
流水線生產殺死藝術
SIMATIC IPC3000 SMART在汽車流水線領域的應用
高速數模轉換器AD9779/AD9788的應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合