文章目录

  • 一、高斯滤波算法
  • 二、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高斯滤波进行对比相关推荐

  1. FPGA中值滤波实现并Modelsim仿真,与MATLAB中值滤波进行对比

    文章目录 一.中值滤波算法 二.FPGA实现中值滤波 2.1 3*3窗口的生成 2.2 排序模块 2.3中值滤波模块 2.4 整体RTL图 三.modeslim仿真 四.matlab中值滤波 五.效果 ...

  2. 基于FPGA简易电子琴设计+电路原理图+Modelsim 仿真+Quartus II 下载+源代码+激励文件

    一.总体电路结构设计 五大模块 按键同步输入模块 编码频率控制模块 分频计数模块 译码模块 二分频(方波)模块 二.Modelsim 仿真 同步输入仿真波形:模拟按键输入 key[3:0],经过同步输 ...

  3. 国产紫光FPGA实现DDS信号发生器(ModelSim仿真)

    简介 本文主要根据利用紫光同创软件联合ModelSim对DDS信号发生器进行仿真.前序步骤(DDS实现过程)见 国产紫光FPGA实现DDS信号发生器_窃听龙吟的博客-CSDN博客 该博客. 一.创建仿 ...

  4. matlab 多相滤波,数字多相网络的滤波原理

    数字多相网络的滤波原理 本文通过数字序列的谱分析对数字多相网络的滤波原理进行分析,并由此对多相网络和DFT(离散付氏变换)处理器相结合构成的滤波器组进行了探讨.这一分 (本文共7页) 阅读全文> ...

  5. modelsim仿真正确FPGA运行不正确的可能原因 - cm4写寄存器错

    困住整整一周了,工作进行不下去,中午偶遇导师,指导意见是有两种可能: 1.  FPGA编译器优化代码,可以考虑把综合过程中所有的warning排查一下 2.  verilog里有不可综合的语句. 又及 ...

  6. FPGA配合debussy、modelsim仿真环境搭建

    FPGA配合debussy.modelsim仿真环境搭建 一.软件环境搭建 1,modelsim. 2,debussy 二.工程环境搭建 1,生成testbench 2.生成.fsdb波形文件 第一步 ...

  7. FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学

    FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学 FPGA快乐学习 以<FPGA边码边学 视频教程>"Lesson06 分频计数器设计"中的si ...

  8. FPGA VHDL语言实现FIR低通滤波器,包含完整代码,可在modelsim仿真 可仿真

    FPGA VHDL语言实现FIR低通滤波器,包含完整代码,可在modelsim仿真 可仿真,可在FPGA开发板硬件实现 ID:94150683735518602yqgo

  9. FPGA Verilog 串口无限多字节收发+流水灯程序+ModelSim仿真

    工作环境(蓝色粗体字为特别注意内容) 1,软件环境:Windows 7.Quartus II.ModelSim SE.串口调试助手 2,硬件环境:开发板:EP2C5T144C8N核心板.USB Bla ...

  10. ModelSim仿真Intel FPGA的DDR3问题

    Quartus Prime Pro Edition 18.0.0 Modelsim 10.6c(官方推荐版本,但我实际使用的是QuestaSim2020.1) 使用modelsim仿真Intel FP ...

最新文章

  1. 大数据搜索:Python编码实战
  2. [云炬创业管理笔记]第五章打磨最有效的商业模式测试5
  3. 新浪微博Anroid开发(二)
  4. 第一次作业(李奇峰 201731062426)
  5. vue调用手机相机相册_详解Vue调用手机相机和相册以及上传
  6. 【EWSA无线路由密码破解工具 中文特别版下载】含教程及字典(弱口令生日特殊符号等)
  7. LeetCode 225. Implement Stack using Queues
  8. SQL Server 数据库多表查询
  9. 拦截器RetryAndFollowUpInterceptor分析
  10. jquey知识点整理
  11. 超像素分割算法SLIC的matlab实现
  12. 关于联想硬盘保护卡还原卡同传不能连接无法登录的解决方法
  13. 图解谷歌浏览器Chrome的Logo_longware_新浪博客
  14. 路由器功能及构成——网络层
  15. Microsoft Word 论文编排技巧
  16. 基于php的房产中介信息网
  17. EIGRP(Enhanced Interior Gateway Routing Protocol,增加型内部网关路由协议)
  18. Eth-Trunk的配置
  19. 网页背景 css 黑色,这段让网页背景变成纯黑色的浏览器插件如何优化?
  20. 阿里云安装nexus详细步骤

热门文章

  1. 测试人员必掌握的测试文档
  2. python snownlp了解_python中snownlp情感分析简易的demo分享
  3. ECDSA_SVP_Attack
  4. C语言 - 常见面试题整理
  5. DHCP DHCPv6
  6. 苹果电脑上不错的svn客户端
  7. 【谷粒商城】全网最全笔记(1/4)
  8. 26、python密度聚类方法(DBSCAN密度聚类)
  9. 通用有限元软件简介及比较
  10. 使用Python破解通达信股票数据