1. 程式人生 > >基於FPGA的均值濾波算法實現

基於FPGA的均值濾波算法實現

思考 verilog spl 留下 定義 bsp 趨勢 tps profile

  我們為了實現動態圖像的濾波算法,用串口發送圖像數據到FPGA開發板,經FPGA進行圖像處理算法後,動態顯示到VGA顯示屏上,前面我們把硬件平臺已經搭建完成了,後面我們將利用這個硬件基礎平臺上來實現基於FPGA的一系列圖像處理基礎算法。

  椒鹽噪聲(salt & pepper noise)是數字圖像的一個常見噪聲,所謂椒鹽,椒就是黑,鹽就是白,椒鹽噪聲就是在圖像上隨機出現黑色白色的像素。椒鹽噪聲是一種因為信號脈沖強度引起的噪聲,產生清楚該噪聲的算法也比較簡單。

  均值濾波的方法將數據存儲成3x3的矩陣,然後求這個矩陣。在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素(以目標象素為中心的周圍 8 個像素,構成一個濾波模板,即去掉目標像素本身),再用模板中的全體像素的平均值來代替原來像素值。

技術分享

均值濾波

  如圖所示,我們要進行均值濾波首先要生成一個3x3矩陣。算法運算窗口一般采用奇數點的鄰域來計算中值,最常用的窗口有3X3和5X5模型。下面介紹3X3窗口的Verilog實現方法。

(1) 通過2個或者3個RAM的存儲來實現3X3像素窗口;

(2) 通過2個或者3個FIFO的存儲來實現3X3像素窗口;

(3) 通過2行或者3行Shift_RAM的存儲來實現3X3像素窗口;

  要想用實現均值濾波和中值濾波,必須要先生成3x3陣列,在Altera系列裏,可以用QuatusII調用IP核——shift_RAM,具體設置參數如圖所示。

技術分享技術分享

  如上圖所示,其中shiftin是實時輸入的數據,taps1x,taps2x輸入數據的第二三行,當數據輸入成一行三個時,自動跳到下一行,最終形成每行是三列的一個矩陣,用均值濾波和中值濾波的處理方法即可,這樣基本是每一個目標都可以找到自己對應的一個3x3矩陣,最後進行處理。先進入IP核裏面的是最開始的的數據,所以在讀出的時候也是要放在第一行。

Xilinx Vivado也有自己的Shift_RAM IP Core,不過這裏只能緩存出來一行數據,我們這裏需要兩個Shift_RAM IP Core和正在輸入的一行數據共同組成3行數據。這裏調用兩個Shift_RAM IP Core將這兩個IP級聯起來就行了。

技術分享技術分享 技術分享

  本系統主要用通過調用兩個shift_register IP核來生成3X3矩陣實現3X3像素窗口。shift_register IP核可定義數據寬度、移位的行數、每行的深度。這裏我們需要8bit。640個數據每行,同事移位寄存2行即可。同時選擇時鐘使能端口clken。如圖所示。

技術分享像素數據移位寄存

我們這裏將行設置為12,所以可以明顯的看到,當數據緩存到一行時,就會移位寄存到下一行,緩存兩行後便會生成3X3矩陣。

技術分享

緩存的數據

比較緩存的第一行的數據在3x3矩陣中,占第一行,結果相同,顯然是正確的。最終生成的3x3矩陣結果顯然是正確的。

技術分享

求總值

技術分享

求均值

我們在計算均值的時候采用兩級流水線消耗了2個時鐘周期,所以最後要將輸給寫RAM使能的數據緩存使能延時兩個時鐘周期!學到一個延時的新寫法。

技術分享

  將3x3矩陣的中心像素的周圍八個點求和,我們這裏還是采取流水線的設計方法,來增加吞吐量,然後再求平均值代替目標像素的值,這裏讀者可以自己思考怎麽設計,從波形圖上觀察,計算的結果顯然是正確的。這樣便完成了均值濾波的仿真。

我們來看一下板級測試視頻:http://t.cn/RCJxiGF

技術分享

技術分享  最後我們來比較一下顯示效果,上圖為灰度圖像,下圖為均值濾波後的圖像,可以看出濾波後的圖像有一些模糊,這是因為均值濾波就是將圖像做平滑處理,像素值高的像素會被拉低,像素值低像素會被拉高,趨向於一個平均值,所以圖像會變模糊一些。而且細心的人可以把圖片放大會看到,圖片上會有幾個白黑點,這其實就是椒鹽噪聲,我們文章開頭也說過了,椒鹽噪聲(salt & pepper noise)是數字圖像的一個常見噪聲,所謂椒鹽,椒就是黑,鹽就是白,椒鹽噪聲就是在圖像上隨機出現黑色白色的像素。均值濾波相當於低通濾波,有將圖像模糊化的趨勢,對椒鹽噪聲基本無能力,所以顯示的圖片上會留下一些黑白點。下一篇我會發布基於FPGA的中值濾波處理,並且比較這兩種濾波方式的優劣,最終選取較好的一種濾波方式進行圖像邊緣檢測處理。

  如果你想獲得本文的所有課件和工程代碼,請關註本人的個人微信訂閱號:開源FPGANingHeChuan或掃描下方二維碼關註訂閱號,在後臺回復圖像處理,即可獲得本文的所有課件、資料、和工程源碼哦!

技術分享

轉載請註明出處:NingHeChuan(寧河川)

個人微信訂閱號:開源FPGANingHeChuan

如果你想及時收到個人撰寫的博文推送,可以掃描左邊二維碼(或者長按識別二維碼)關註個人微信訂閱號

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:http://www.cnblogs.com/ninghechuan/p/7434462.html

基於FPGA的均值濾波算法實現