FPGA高斯滤波实现并Modelsim仿真,与MATLAB高斯滤波进行对比
文章目录
- 一、高斯滤波算法
- 二、matlab高斯滤波
- 三、FPGA实现高斯滤波
- 3.1 3*3窗口生成模块
- 3.2 高斯滤波模块
- 四、modeslim仿真
- 五、效果对比
- 六、高斯模板的计算
基于 FPGA中值滤波,本文实现高斯滤波。
一、高斯滤波算法
1、高斯滤波原理
高斯滤波也是一种线性平滑滤波,高斯滤波的输出是待处理像素邻域内像素的加权平均灰度值,同时离中心越近的像素权重越高。因此,高斯滤波比均值滤波的平滑效果更柔和,有着保留边缘的好处,克服了边界效应。由于高斯滤波的平滑力度不如均值滤波,因此其保留细节的能力也比均值滤波更好。
基本操作:首先产生一个模板(33窗口),用该模板扫描图中的每一个像素,用33邻域内像素的加权平均灰度值来替换中心像素点的值。
2、高斯滤波函数
二维高斯函数如下,σ为标准差,决定高斯滤波后图像的平滑程度。
根据σ计算高斯模板,σ = 0.8,取整后,通常3*3的高斯模板如下:
3、应用
- 消除高斯噪声
- 用于SIFT特征点提取处的构建高斯金字塔等……
二、matlab高斯滤波
clc;
clear all;
close all;RGB= imread('flower.bmp'); %读取图片
g=imnoise (RGB,'gaussian',0.2); %添加高斯噪声gray = rgb2gray(g); %灰度图
Gauss_3x3 = fspecial('gaussian',3,0.8); %sigma=0.8的3*3高斯模板
Gauss = imfilter(gray, Gauss_3x3); %高斯滤波subplot(2,1,1); imshow(gray); title('灰度图');
subplot(2,1,2); imshow(Gauss); title('高斯滤波');imwrite (gray,'含高斯噪声的灰度图.bmp');
imwrite (Gauss,'高斯滤波.bmp');
运行结果:
三、FPGA实现高斯滤波
3.1 3*3窗口生成模块
和之前相同生成3*3窗口,作为高斯卷积模板
module filter_3x3(input clk,input rst_n,input gray_de ,input [7:0] iData,output filter_de,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 高斯滤波模块
高斯滤波就是加权平均的结果,同时选用常用3*3模板,并结合流水线技术,将其拆分成三级流水线进行计算。
第一个clk:进行所有乘法并每行相加 g1,g2,g3;
第二个clk:进行所有行的加法 g = g1 + g2 +g3
第三个clk:移位操作
verilog代码如下:
module gaussian_filter(input clk,input rst_n,input wire iValid ,input [7:0] filter_11,filter_12,filter_13, //生成的3*3窗口数据input [7:0] filter_21,filter_22,filter_23,input [7:0] filter_31,filter_32,filter_33,output gaussian_de ,//de同步信号output wire [7:0] gaussian_data // 高斯卷积:加权平均后的值);reg [2:0] de_shift1 ; //乘法所用信号
reg [9:0] g1,g3;
reg [10:0] g2;
reg [11:0] g;reg[7:0] g_data;//---------------------------------------------------
// 高斯滤波三级流水线
//---------------------------------------------------//clk1,进行所有乘法并每行相加always @ (posedge clk or negedge rst_n)if(!rst_n) beging1 <= 1'b0;g2 <= 1'b0;g3 <= 1'b0;endelse beging1 <= filter_11 + filter_12 * 2 + filter_13;g2 <= filter_21*2 + filter_22 *4 + filter_23 *2 ;g3 <= filter_31 + filter_32 *2 + filter_33;end//clk2,三行得到的值相加,以完成高斯卷积中所有的加法 always @ (posedge clk or negedge rst_n)if(!rst_n) g <= 1'b0;else g <= g1 + g2 +g3;// clk3,移位操作,除以16,右移四位always @(posedge clk or negedge rst_n) beginif(!rst_n) beging_data <= 1'd0;endelse beging_data <= g[11:4];end
endassign gaussian_data = g_data;// 打拍做同步always @(posedge clk or negedge rst_n) beginif(!rst_n)beginde_shift1 <= 3'b0;endelse beginde_shift1 <= {de_shift1[1:0], iValid};endendassign gaussian_de = de_shift1[2];endmodule
四、modeslim仿真
以该矩阵为例进行计算。
结果与波形一致,时钟对齐,数据均正确。
五、效果对比
含有高斯噪声的原图:
FPGA实现高斯滤波:
matlab实现高斯滤波:
可看到均起到了消除高斯噪声的效果。
完整工程
六、高斯模板的计算
在第一节中我们已知sigma和窗口大小,代入高斯函数的公式即可得到高斯模板。给出matlab计算的方法:
进行不同模板大小计算的时候修改k值。
采用不同尺度sigma的时候,修改sigam2即可。
clear;
k=1;
row = 2*k+1; %模板长度
col = 2*k+1;
sigma2=0.8; %方差
for i=1 : rowfor j=1 : colfenzi=double((i-k-1)^2+(j-k-1)^2);A(i,j)=exp(-fenzi/(2*sigma2*sigma2))/(2*pi*sigma2*sigma2);end
end
A %显示小数形式
C=floor(A.*(1/A(1,1))); %左上角化为1
运行得到sigma = 0.8,模板尺度3*3的高斯模板:
我们第一节给出的矩阵前面乘以了1/16,目的是归一化处理,保证让矩阵内的数据相加为1,这样在处理的时候就能免去亮度的影响。
FPGA高斯滤波实现并Modelsim仿真,与MATLAB高斯滤波进行对比相关推荐
- FPGA中值滤波实现并Modelsim仿真,与MATLAB中值滤波进行对比
文章目录 一.中值滤波算法 二.FPGA实现中值滤波 2.1 3*3窗口的生成 2.2 排序模块 2.3中值滤波模块 2.4 整体RTL图 三.modeslim仿真 四.matlab中值滤波 五.效果 ...
- 基于FPGA简易电子琴设计+电路原理图+Modelsim 仿真+Quartus II 下载+源代码+激励文件
一.总体电路结构设计 五大模块 按键同步输入模块 编码频率控制模块 分频计数模块 译码模块 二分频(方波)模块 二.Modelsim 仿真 同步输入仿真波形:模拟按键输入 key[3:0],经过同步输 ...
- 国产紫光FPGA实现DDS信号发生器(ModelSim仿真)
简介 本文主要根据利用紫光同创软件联合ModelSim对DDS信号发生器进行仿真.前序步骤(DDS实现过程)见 国产紫光FPGA实现DDS信号发生器_窃听龙吟的博客-CSDN博客 该博客. 一.创建仿 ...
- matlab 多相滤波,数字多相网络的滤波原理
数字多相网络的滤波原理 本文通过数字序列的谱分析对数字多相网络的滤波原理进行分析,并由此对多相网络和DFT(离散付氏变换)处理器相结合构成的滤波器组进行了探讨.这一分 (本文共7页) 阅读全文> ...
- modelsim仿真正确FPGA运行不正确的可能原因 - cm4写寄存器错
困住整整一周了,工作进行不下去,中午偶遇导师,指导意见是有两种可能: 1. FPGA编译器优化代码,可以考虑把综合过程中所有的warning排查一下 2. verilog里有不可综合的语句. 又及 ...
- FPGA配合debussy、modelsim仿真环境搭建
FPGA配合debussy.modelsim仿真环境搭建 一.软件环境搭建 1,modelsim. 2,debussy 二.工程环境搭建 1,生成testbench 2.生成.fsdb波形文件 第一步 ...
- FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学
FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学 FPGA快乐学习 以<FPGA边码边学 视频教程>"Lesson06 分频计数器设计"中的si ...
- FPGA VHDL语言实现FIR低通滤波器,包含完整代码,可在modelsim仿真 可仿真
FPGA VHDL语言实现FIR低通滤波器,包含完整代码,可在modelsim仿真 可仿真,可在FPGA开发板硬件实现 ID:94150683735518602yqgo
- FPGA Verilog 串口无限多字节收发+流水灯程序+ModelSim仿真
工作环境(蓝色粗体字为特别注意内容) 1,软件环境:Windows 7.Quartus II.ModelSim SE.串口调试助手 2,硬件环境:开发板:EP2C5T144C8N核心板.USB Bla ...
- ModelSim仿真Intel FPGA的DDR3问题
Quartus Prime Pro Edition 18.0.0 Modelsim 10.6c(官方推荐版本,但我实际使用的是QuestaSim2020.1) 使用modelsim仿真Intel FP ...
最新文章
- 大数据搜索:Python编码实战
- [云炬创业管理笔记]第五章打磨最有效的商业模式测试5
- 新浪微博Anroid开发(二)
- 第一次作业(李奇峰 201731062426)
- vue调用手机相机相册_详解Vue调用手机相机和相册以及上传
- 【EWSA无线路由密码破解工具 中文特别版下载】含教程及字典(弱口令生日特殊符号等)
- LeetCode 225. Implement Stack using Queues
- SQL Server 数据库多表查询
- 拦截器RetryAndFollowUpInterceptor分析
- jquey知识点整理
- 超像素分割算法SLIC的matlab实现
- 关于联想硬盘保护卡还原卡同传不能连接无法登录的解决方法
- 图解谷歌浏览器Chrome的Logo_longware_新浪博客
- 路由器功能及构成——网络层
- Microsoft Word 论文编排技巧
- 基于php的房产中介信息网
- EIGRP(Enhanced Interior Gateway Routing Protocol,增加型内部网关路由协议)
- Eth-Trunk的配置
- 网页背景 css 黑色,这段让网页背景变成纯黑色的浏览器插件如何优化?
- 阿里云安装nexus详细步骤