高斯滤波的原理:

  高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

  高斯滤波函数:

  

  高斯滤波被用作为平滑滤波器的本质原因是因为它是一个低通滤波器,而且大部份基于卷积平滑滤波器都是低通滤波器。本实验为3*3阶的计算算子:

  根据该算子,可用Verilog来实现,难点主要是3*3矩阵的生成。前面的文章边缘检测已经实现了3*3矩阵的生成,原理都一样。

  1 //**************************************************************************
2 // *** file name : Space_filter.v
3 // *** version : 1.0
4 // *** Description : 3*3 Weighted filtering
5 // *** Blogs : https://www.cnblogs.com/WenGalois123/
6 // *** Author : Galois_V
7 // *** Date : 2022.10.16
8 // *** Changes : Initial
9 //**************************************************************************
10 `timescale 1ns/1ps
11 module Space_filter
12 (
13 input i_sys_clk ,
14 input i_sys_rstn ,
15 input i_frame_rst ,
16 input i_sf_en ,
17 input i_sf_level ,
18 input [9:0] i_s_tdata ,
19 input i_s_tvalid ,
20 output o_s_tready ,
21 output [9:0] o_m_tdata ,
22 output o_m_tvalid ,
23 input i_m_tready
24 );
25
26 wire w_rst_all ;
27 wire w_valid ;
28 wire [9:0] w_matrix_00 ;
29 wire [9:0] w_matrix_10 ;
30 wire [9:0] w_matrix_20 ;
31 wire [9:0] w_matrix_10t;
32 wire [9:0] w_matrix_20t;
33 wire [9:0] w_add_data ;
34 wire [9:0] w_add_2data ;
35 wire [11:0] w_add_4data ;
36 wire [12:0] w_add_20data;
37 wire [7:0] w_outslt ;
38 wire w_empty ;
39 wire w_prog_full ;
40
41 reg [1:0] r_sel_fun ;
42 reg r_1st_line_en;
43 reg r_2rd_line_en;
44 reg r_1st_left_en;
45 reg [7:0] r_matrix_01 ;
46 reg [7:0] r_matrix_02 ;
47 reg [7:0] r_matrix_11 ;
48 reg [7:0] r_matrix_12 ;
49 reg [7:0] r_matrix_21 ;
50 reg [7:0] r_matrix_22 ;
51 reg [9:0] r_data ;
52 reg [9:0] r_fifo_din ;
53 reg r_fifo_wr ;
54
55
56 assign w_rst_all = i_frame_rst & (~i_sys_rstn);
57 assign w_valid = o_s_tready & i_s_tvalid;
58 assign w_matrix_00 = i_s_tdata;
59
60 always@(posedge i_sys_clk)
61 begin
62 r_sel_fun <= {i_sf_en,i_sf_level};
63 end
64 /******************************************************************************\
65 Generate 3 * 3 matrix
66 \******************************************************************************/
67 assign w_line0_rd = w_valid;
68 assign w_line1_rd = w_valid & r_1st_line_en;
69 assign w_line2_rd = w_valid & r_2rd_line_en;
70
71 always@(posedge i_sys_clk)
72 begin
73 if(w_rst_all)
74 begin
75 r_1st_line_en <= 'd0;
76 r_2rd_line_en <= 'd0;
77 r_1st_left_en <= 'd0;
78 end
79 else if(w_valid)
80 begin
81 if(w_matrix_00[8])
82 begin
83 r_1st_line_en <= 1'b1;
84 r_2rd_line_en <= r_1st_line_en;
85 r_1st_left_en <= 1'b1;
86 end
87 else
88 begin
89 r_1st_left_en <= 1'b0;
90 end
91 end
92 end
93
94 fifo_2048x10 line1_fifo
95 (
96 .clk (i_sys_clk ),
97 .srst (w_rst_all ),
98 .din (w_matrix_00 ),
99 .wr_en (w_line0_rd ),
100 .dout (w_matrix_10t ),
101 .rd_en (w_line1_rd ),
102 .full ( ),
103 .empty ( )
104 );
105 fifo_2048x10 line2_fifo
106 (
107 .clk (i_sys_clk ),
108 .srst (w_rst_all ),
109 .din (w_matrix_10t ),
110 .wr_en (w_line1_rd ),
111 .dout (w_matrix_20t ),
112 .rd_en (w_line2_rd ),
113 .full ( ),
114 .empty ( )
115 );
116
117 assign w_matrix_10 = w_line1_rd ? w_matrix_10t : w_matrix_00;
118 assign w_matrix_20 = w_line2_rd ? w_matrix_20t : w_matrix_10;
119
120 always@(posedge i_sys_clk)
121 begin
122 if(w_valid)
123 begin
124 r_matrix_01 <= w_matrix_00[7:0];
125 r_matrix_11 <= w_matrix_10[7:0];
126 r_matrix_21 <= w_matrix_20[7:0];
127
128 if(r_1st_left_en)
129 begin
130 r_matrix_02 <= w_matrix_00[7:0];
131 r_matrix_12 <= w_matrix_10[7:0];
132 r_matrix_22 <= w_matrix_20[7:0];
133 end
134 else
135 begin
136 r_matrix_02 <= r_matrix_01;
137 r_matrix_12 <= r_matrix_11;
138 r_matrix_22 <= r_matrix_21;
139 end
140 end
141 end
142
143 /******************************************************************************\
144 Data weighting processing
145 \******************************************************************************/
146 assign w_add_data = w_matrix_00[7:0] + r_matrix_02 + w_matrix_20[7:0] + r_matrix_22;
147 assign w_add_2data = r_matrix_01 + w_matrix_10[7:0] + r_matrix_12 + r_matrix_21;
148 assign w_add_4data = {r_matrix_11,2'd0} + {w_add_2data,1'b0} + w_add_data;
149 assign w_add_20data = {r_matrix_11,4'd0} + w_add_4data;
150
151 assign w_outslt = r_sel_fun[0] ? w_add_4data[11:4] : w_add_20data[12:5];
152
153 always@(*)
154 begin
155 case(r_sel_fun[1])
156 1'b0 :begin r_data <= i_s_tdata;end
157 1'b1 :begin r_data <= (w_valid & r_1st_left_en) ? w_matrix_00 : {w_matrix_00[9:8],w_outslt}; end
158 default:r_data <= i_s_tdata;
159 endcase
160 end
161
162 always@(posedge i_sys_clk)
163 begin
164 if(w_rst_all)
165 begin
166 r_fifo_din <= 'd0;
167 r_fifo_wr <= 'd0;
168 end
169 else
170 begin
171 r_fifo_din <= r_data;
172 r_fifo_wr <= w_valid;
173 end
174 end
175
176 fifo_2048x10_f2000 dout_fifo
177 (
178 .clk (i_sys_clk ),
179 .srst (w_rst_all ),
180 .din (r_fifo_din ),
181 .wr_en (r_fifo_wr ),
182 .dout (o_m_tdata ),
183 .rd_en (i_m_tready ),
184 .full ( ),
185 .empty (w_empty ),
186 .prog_full (w_prog_full )
187 );
188
189 assign o_m_tvalid = ~w_empty & i_m_tready;
190 assign o_s_tready = ~w_prog_full;
191
192 endmodule

  具体实验就不做了,类似于上一个边缘检测的实验,只是对Y通道数据进行处理。3*3阶的高斯滤波效果并不是很明显,这里就不把实验的图展示了。

图像高斯滤波的Verilog实现的更多相关文章

  1. Win8 Metro(C#)数字图像处理--2.64图像高斯滤波算法

    原文:Win8 Metro(C#)数字图像处理--2.64图像高斯滤波算法  [函数名称]   高斯平滑滤波器      GaussFilter(WriteableBitmap src,int r ...

  2. 学习 opencv---(7) 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波

    本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤 ...

  3. Atitit   图像处理 平滑 也称 模糊, 归一化块滤波、高斯滤波、中值滤波、双边滤波)

    Atitit   图像处理 平滑 也称 模糊, 归一化块滤波.高斯滤波.中值滤波.双边滤波) 是一项简单且使用频率很高的图像处理方法 用途 去噪 去雾 各种线性滤波器对图像进行平滑处理,相关OpenC ...

  4. python数字图像处理(10):图像简单滤波

    对图像进行滤波,可以有两种效果:一种是平滑滤波,用来抑制噪声:另一种是微分算子,可以用来检测边缘和特征提取. skimage库中通过filters模块进行滤波操作. 1.sobel算子 sobel算子 ...

  5. OpenCV实现的高斯滤波探究_1(《学习OpenCV》练习题第五章第三题ab部分)

    首先看下OpenCV 官方文档对于cvSmooth各个参数的解释: Smooths the image in one of several ways. C: void cvSmooth(const C ...

  6. 基于MATLAB的中值滤波均值滤波以及高斯滤波的实现

    基于MATLAB的中值滤波均值滤波以及高斯滤波的实现 作者:lee神 1.   背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤 ...

  7. 基于opencv下对视频的灰度变换,高斯滤波,canny边缘检测处理,同窗体显示并保存

    如题:使用opencv打开摄像头或视频文件,实时显示原始视频,将视频每一帧依次做灰度转换.高斯滤波.canny边缘检测处理(原始视频和这3个中间步骤处理结果分别在一个窗口显示),最后将边缘检测结果保存 ...

  8. opencv3.2.0图像处理之高斯滤波GaussianBlur API函数

    /*高斯滤波:GaussianBlur函数 函数原型: void GaussianBlur( InputArray src, OutputArray dst, Size ksize, double s ...

  9. 第三节,使用OpenCV 3处理图像(模糊滤波、边缘检测)

    一 不同色彩空间的转换 OpenCV中有数百种关于在不同色彩空间之间转换的方法.当前,在计算机中有三种常用的色彩空间:灰度,BGR以及HSV(Hue,Saturation,Value). 灰度色彩空间 ...

  10. 机器学习进阶-阈值与平滑-图像平滑操作(去噪操作) 1. cv2.blur(均值滤波) 2.cv2.boxfilter(方框滤波) 3. cv2.Guassiannblur(进行高斯滤波) 4. cv2.medianBlur(进行中值滤波)

    1.cv2.blur(img, (3, 3))  进行均值滤波 参数说明:img表示输入的图片, (3, 3) 表示进行均值滤波的方框大小 2. cv2.boxfilter(img, -1, (3, ...

随机推荐

  1. 自己从零写操作系统GrapeOS——1.GrapeOS介绍

    为了学习操作系统原理我自己写了一个简单的操作系统,取名叫GrapeOS. GrapeOS是一个x86多任务桌面操作系统,但非常简单,代码只有4千行. 下面我来简单介绍一下GrapeOS的功能. 1.桌 ...

  2. openfoam UPstream类探索(二)

    前言 接上次的博文,本篇补全以下几个函数的介绍: Pstream::nProcs() Pstream::parRun() UPstream::exit() 简述几个常用的函数如下: Pstream:: ...

  3. CCRD_TOC_2008年第4期

    中信国健临床通讯 2008年第4期 目 录   类风湿关节炎 1.        大型系统评价分析:生物制剂与传统DMARD联用是MTX难治性RA患者的最佳治疗策略 Donahue KE, et al ...

  4. .net 下SSE使用demo

    所谓SSE,就是浏览器向服务器发送一个HTTP请求,然后服务器不断单向地向浏览器推送"信息"(message).这种信息在格式上很简单,就是"信息"加上前缀&q ...

  5. npm+react linux 开荒

    安装npm 从 https://nodejs.org/dist/ 找到下载包,并不是版本越高越好,得看项目的需要. 解压之后,将解压路径bin添加到PATH里. 完成后可配置npm源 npm inst ...

  6. RT-Thread Studio使用——创建工程并配置外部时钟(转)

    硬件:正点原子阿波罗F429开发板,主控STM32F429IGT6,晶振25MHz. 软件:RT-Thread Studio RT-Thread版本:4.1.0 1.创建工程 根据所使用的硬件信息,配 ...

  7. [转载]pytest报AttributeError: module ‘pytest‘ has no attribute ‘main‘

    转自:https://blog.csdn.net/yinying12/article/details/110522989 pytest报AttributeError: module 'pytest' ...

  8. Word13 《经费联审结算单》模板office真题

    1.根据题目一的要求,打开素材文件,点击[文件]-[另存为],选择[当前文件夹],命名为Word. 2.根据题目二的要求,在[布局]里点击[页面设置]的右下角,打开页面设置窗口,选择[纸张],根据题目 ...

  9. ElementUI导航连续点击报错

    原因 vue项目中连续多次点击路由, 原因是在路由跳转时不允许同一个路由添加多次 错误解决: 吧vue-router换成3.0版本 import Vue from 'vue' import Route ...

  10. 安全测试-WEB安全渗透测试基础知识(三)

    1.3. 域名系统 1.3.1. 域名系统工作原理 DNS解析过程是递归查询的,具体过程如下: 用户要访问域名www.example.com时,先查看本机hosts是否有记录或者本机是否有DNS缓存, ...