参考:小梅哥的《FPGA系统设计与验证实战指南》
一、算法介绍高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
高斯滤波后图像被平滑的程度取决于标准差。它的输出是临域像素的加权平均,同时离中心越近的像素权重越高。因此,相对于均值滤波(mean filter)它的平滑效果更柔和,而且边缘保留的也更好。
高斯滤波被用作为平滑滤波器的本质原因是因为它是一个低通滤波器,而且大部份基于卷积平滑滤波器都是低通滤波器。
GAUSS 滤波算法克服了边界效应,因而滤波后的图像较好。
高斯滤波算法实现步骤: f(x,y)表示(x,y)点的像素值; g(x,y)表示(x,y)点经过高斯滤波处理后的值;
用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值:
g(x,y)=(1/16)* (f(x-1,y-1)+2f(x,y-1)+f(x+1,y-1)+2f(x-1,y)+4f(x,y) + 2f(x+1,y)+f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1))
二、程序设计关于如何形成3*3的像素矩阵,参考另一篇文章:FPGA丨设计行缓存(linebuffer)生成像素矩阵
module gaussian_filter_3x3(
input clk, //pixel clk
input rst_n,
input [15:0]data_in, //16 bit 灰度 pixel
input data_in_en,
output reg [15:0] data_out,
output reg data_out_en
);
//------------------------------------
// 三行像素缓存
//-----------------------------------
wire [15:0] line0;
wire [15:0] line1;
wire [15:0] line2;
//-----------------------------------------
// 3x3 像素矩阵中的像素点
//-----------------------------------------
reg [15:0] line0_data0;
reg [15:0] line0_data1;
reg [15:0] line0_data2;
reg [15:0] line1_data0;
reg [15:0] line1_data1;
reg [15:0] line1_data2;
reg [15:0] line2_data0;
reg [15:0] line2_data1;
reg [15:0] line2_data2;
wire mat_flag;
reg mat_flag_1;
reg mat_flag_2;
reg mat_flag_3;
reg mat_flag_4;
always @(posedge clk)begin
mat_flag_1
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?