日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab实现均值滤波与FPGA进行对比,并采用modelsim波形仿真

發(fā)布時間:2023/12/31 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab实现均值滤波与FPGA进行对比,并采用modelsim波形仿真 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、實驗?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圖的時候,由于不可綜合,將其引去即可。

initial begin$readmemh("pre_img.txt", ram); end

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文檔中。

//打開post_img.txt文件 //--------------------------------------------------- integer post_img_txt;initial beginpost_img_txt = $fopen("post_img.txt"); end//像素寫入到txt中 //--------------------------------------------------- reg [20:0] pixel_cnt; //640*480 = 307200 ,對這些像素逐個寫入always @(posedge clk) beginif(!rst_n) beginpixel_cnt <= 0;endelse if(VGA_de) beginpixel_cnt = pixel_cnt + 1;$fdisplay(post_img_txt,"%h",VGA_data);if(pixel_cnt == IMG_H*IMG_W)$stop;end end

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。