Matlab实现均值滤波与FPGA进行对比,并采用modelsim波形仿真
文章目錄
- 一、實驗?zāi)繕?biāo)
- 二、實驗中遇到的問題
- 1、如何實現(xiàn)均值濾波
- 2、modelsim仿真的時候涉及到IP核不存在怎么辦?
- 三、具體實現(xiàn)
- 3.1 均值濾波的實現(xiàn)
- 3.1.1 調(diào)用shift_ram ip核:
- 3.1.2 均值濾波的流水并行處理
- 3.2 整體模塊設(shè)計
- 3.2.1 圖像生成模塊
- 3.2.2 Ycbcr灰度化
- 3.2.3 3*3窗口生成
- 3.2.4 均值濾波模塊
- 3.3 波形仿真驗證
- matlab實現(xiàn)均值濾波
本文的方法和 聯(lián)合仿真實現(xiàn)Ycbcr的方法相同。不再重復(fù)敘述。
一、實驗?zāi)繕?biāo)
在Ycbcr灰度化基礎(chǔ)上進行均值濾波。
二、實驗中遇到的問題
1、如何實現(xiàn)均值濾波
2、modelsim仿真的時候涉及到IP核不存在怎么辦?
如下圖,我們調(diào)用了shift_ram ip核,不添加庫文件的話,獨立仿真時報錯
解決方法:
將器件庫添加上即可。
選擇simulation —— start simulation——Libraries——Add,添加庫文件
庫文件所在位置:modelsim安裝位置,modelsim-ase——aletra——Verilog——altera_mf || cyclonev(根據(jù)所用開發(fā)板型號選擇)
三、具體實現(xiàn)
3.1 均值濾波的實現(xiàn)
1、這部分包含兩個模塊:3*3窗口生成模塊以及均值濾波算法實現(xiàn)模塊。(參考其他博文,理論部分不在講解)
2、33窗口生成模塊:filter_33;——調(diào)用了shift_ram ip核。
3、均值濾波模塊 :mean_filter;——采用三級流水線的方式進行處理。流水線技術(shù)是FPGA常用的思想。
3.1.1 調(diào)用shift_ram ip核:
3.1.2 均值濾波的流水并行處理
如下我們可得到均值濾波的公式:mean_data = P11 + P12 + P13 + P21 + P23 + P31 +P32 + P33 / 8;將其拆成三級流水線并行處理的形式:
第一級流水線并行處理:
P1 = P11 + P12 + P13 ;P2 = P21 + P23 ;P3 = P31 +P32 + P33;
.
第二級流水線處理:
P = P1 + P2 + P3;
.
第三級流水線處理:
P >> 3 或者取高位
3.2 整體模塊設(shè)計
圖像生成模塊(VGA模塊+數(shù)據(jù)的獲取);
Ycbcr灰度化模塊;
3*3窗口生成模塊;
均值濾波模塊:
3.2.1 圖像生成模塊
module img_gen ( //系統(tǒng)全局信號 input wire clk , input wire rst_n , //原圖輸出 ---------------------------------------- output wire img_hsync , //原圖行同步信號 output wire img_vsync , //場同步信號 output reg [23:0] img_data , //原圖像數(shù)據(jù)信號 output reg img_de //數(shù)據(jù)有效指示信號 ); endmodule該模塊數(shù)據(jù)的獲取如下:
當(dāng)quartus查看RTL圖的時候,由于不可綜合,將其引去即可。
3.2.2 Ycbcr灰度化
該模塊不變。
module RGB_Gray //========================< 端口 >========================================== ( input wire clk , //時鐘 input wire rst_n , //復(fù)位 //原圖 ---------------------------------------------- input wire RGB_hsync, input wire RGB_vsync, input wire [23:0] RGB_data, input wire RGB_de , //灰度轉(zhuǎn)換圖 ---------------------------------------------- //這里的行場有效信號和數(shù)據(jù)信號根據(jù)消耗時鐘打三拍,作為下一模塊輸入 output wire gray_hsync, output wire gray_vsync, output wire gray_de, output wire [7:0] gray_data);3.2.3 3*3窗口生成
module filter_3x3(input clk,input rst_n, //灰度化打拍后的行場有效以及數(shù)據(jù)有效信號input gray_hsync, input gray_vsync,input gray_de ,input [7:0] iData, //根據(jù)3*3窗口生成模塊實際消耗時鐘進行延遲output filter_hsync, output filter_vsync , output filter_de, //生成的3*3窗口數(shù)據(jù) output reg [7:0] oData_11, oData_12, oData_13,output reg [7:0] oData_21, oData_22, oData_23,output reg [7:0] oData_31, oData_32, oData_33 );3.2.4 均值濾波模塊
module mean_filter(input clk,input rst_n,//來自3*3窗口生成模塊 input wire filter_hsync , input wire filter_vsync ,input wire filter_de , //生成的3*3窗口數(shù)據(jù)input [7:0] filter_11,filter_12,filter_13, input [7:0] filter_21,filter_22,filter_23,input [7:0] filter_31,filter_32,filter_33, //均值處理后行場、數(shù)據(jù)有效信號根據(jù)消耗時鐘打拍 output mean_hsync , output mean_vsync , output mean_de ,output [7:0] mean_data // 最終均值,3x3模板總和/8);3.3 波形仿真驗證
1、tb測試文件不變。
仍然處理后的640*480個數(shù)據(jù)寫入到txt文檔中。
2、波形分析
以第一行數(shù)據(jù)為例
img_de : 原圖數(shù)據(jù)有效信號
img_data:原圖數(shù)據(jù)
gray_de:灰度化數(shù)據(jù)有效信號
gray_data:灰度化的圖像數(shù)據(jù) = iData
filter_de : 33窗口生成數(shù)據(jù)有效信號
oData11 - 33 :33窗口的數(shù)據(jù)
mean_de : 均值濾波數(shù)據(jù)有效信號
mean_data : 3*3窗口數(shù)據(jù)的均值
VGA_de : VGA有效數(shù)據(jù)信號 = mean_de
第一個均值:164 / 8 = 20
第二個均值:(164 + 1580) / 8 = 40
第三個均值:(164 + 158 + 153 ) / 8= 59 ……
matlab實現(xiàn)均值濾波
matlab均值濾波:
x=imread('pre_img.jpg');%需要過濾的圖像 n=3; %模板大小 [height, width]=size(x); %獲取圖像的尺寸(n小于圖片的寬高) gdata = rgb2gray(x); imshow(gdata),title('原圖灰度化'); for i=1:height-n+1 for j=1:width-n+1 c=x(i:i+(n-1),j:j+(n-1)); %在x1中從頭取模板大小的塊賦給c e=c(1,:); %e中存放是c矩陣的第一行 for u=2:n %將c中的其他行元素取出來接在e后使e為一個行矩陣 e=[e,c(u,:)]; end s=sum(e); %取一行的和 x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %將模板各元素的均值賦給模板中心位置的元素 end end d=uint8(x); %未被賦值的元素取原值 C=rgb2gray(x); %灰度處理,灰度處理后的圖像是二維矩陣 A=fspecial('average',[n,n]); %matlab中自帶值濾波函數(shù) b=imfilter(C,A); figure; imshow(b),title('均值濾波'); %顯示過濾后的灰度圖片 imwrite(b,'matlab均值濾波.jpg');結(jié)果:
由于灰度化處理以及均值濾波求解的時候均存在精度問題,可能導(dǎo)致與matllab處理后的像素值存在微小差異。不是重點,觀察均值濾波的效果,可看到二者均值濾波處理后的圖像均變模糊。
更簡化的均值濾波工程,讀入圖像的方式不同,著重看均值濾波算法實現(xiàn)部分即可。
總結(jié)
以上是生活随笔為你收集整理的Matlab实现均值滤波与FPGA进行对比,并采用modelsim波形仿真的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构_郝斌老师自学大纲
- 下一篇: SPICE 协议 USB 重定向