FPGA線性濾波實現

簡介

FPGA數字圖像處理系列終於迎來了第三更了,馬上要開始寫畢業論文了,這次的教程寫的比較潦草,不過代碼和上位機都是完整的,重點參考了《基於FPGA的數字圖像處理原理及應用》的第七章,關於直方圖均衡化的原理推到和設計思想可以重點看書,或者自己百度一下。直方圖均衡化還是有點難的,需要有一定的基礎。

本教程與上期《系統仿真》中的規定有點區別,再次聲明一下,爲了簡化開發難度,這裏規定圖像格式爲6404808bit @60的灰度圖,也就是圖像分辨率爲640*480,一個像素佔8個bit,幀率爲60.

均值濾波實現

均值濾波的數學表達式如下:
在這裏插入圖片描述
由上述公式列出求圖像均值的步驟:

1)獲取當前窗口所有像素。 (窗口:-r<=i<=r,-r<=j<=r的像素區域)

2)計算當前窗口所有像素之和。

3)將第(2)步結果除以當前窗口數據總數。

4)滑動窗口到下一個窗口,直到遍歷完整幅圖像。

實現效果圖如下:
在這裏插入圖片描述

Sobel邊緣檢測實現

書上給的教程太過繁瑣,本節教程是根據書上簡化而來的,設計思路還是差不多的。如果以A代表原始圖像,Gx及Gy分別代表經橫向及縱向邊緣檢測的圖像灰度值,其公式如下所示:
在這裏插入圖片描述
圖像的每一個像素的橫向和縱向灰度值通過公式
在這裏插入圖片描述
由於平方和開方計算用FPGA實現比較困難,效率低,故簡化爲:
在這裏插入圖片描述
爲了儘量利用FPGA的並行特性,同時進行X方向和Y方向的計算。同時,我們注意到,由於模板的數值爲1和2或者-1,-2,將負數和正數相加後再整體做減法。模板元素爲2時直接進行移位操作則簡單地多。
同時得到窗口內9個像素是比較簡單的一件事情。兩個行緩存加上當前行即可同時得到3行圖像數據,將3行數據分別打兩拍即可得到一個窗口9個像素數據。則緩存電路設計如下所示:
在這裏插入圖片描述
得到9個像素之後還需將分別對X和Y方向的模板進行計算。計算結果如下所示:
在這裏插入圖片描述
Sobel現實效果圖如下:
在這裏插入圖片描述

福利

爲了能及時回覆大家,現在獲取源碼方式如下:
微信掃描下面的二維碼關注【春哥筆記】公衆號,回覆“線性濾波”即可Get源碼的獲取方式:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章