基于FPGA的快速中值滤波算法--转载我之前的blog的内容

本文介绍了一种基于FPGA的快速中值滤波算法,用于图像噪声滤除,尤其针对脉冲噪声。算法通过特定的排序策略提高了处理效率,同时保护了图像边缘。采用3x3模板,利用行缓存(如shift_ram)进行处理,并提供了仿真结果和MATLAB对比,显示FPGA处理速度快且效果接近。
摘要由CSDN通过智能技术生成
转:  http://xiongwei.site/          

在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广泛用于数字图像处理的边缘提取,其基本原理是把数字图像或数字序列中的一点的值用该点邻域内所有点的中值来代替。

中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。此外,中值滤波的算法比较简单,也易于用硬件实现。所以,中值滤波方法一经提出后,便在数字信号处理领得到重要的应用。

中值滤波方法是,对待处理的当前像素,选择一个模板,该模板为其邻近的若干个像素组成,对模板的像素由小到大进行排序,再用模板的中值来替代原像素的值的方法。

当我们使用3x3窗口后获取领域中的9个像素,就需要对9个像素值进行排序,为了提高排序效率,排序算法思想如图3-18所示

(1) 对窗内的每行像素按降序排序,得到最大值、中间值和最小值;

(2) 把三行的最小值相比较,取其中的最大值;

(3) 把三行的最大值相比较,取其中的最小值;

(4) 把三行的中间值相比较,再取一次中间值;

(5) 把前面的到的三个值再做一次排序,获得的中值即该窗口的中值。

中值滤波的3x3矩阵的生成和均值滤波是完全类似的。我们求中值的方法是,先对3x3矩阵的每行按从大到小进行排序,然后利用排序法求出最大值那一列的最小值,求出之间数那一列的中间值,求出最小值按一列的最大值,最后将求出的三个值再排序,这三个值的中间值就是这个3x3矩阵的中间值。

这里我们开始想一个问题,用3x3矩阵排序来替代中间值,那么图像的边缘区域怎么办?这是一个问题,在这里我的做法是对齐置之不理。怎么生成3x3的移动窗口,而且图像的像素有比较大,那么我们需要对其进行行缓存。一般做法是ram和fifo,还有就是altera公司的shift_ram(貌似专门为图像处理而生),因为我是基于Xilinx平台的ise,所以这里我自己设计了一个类似shift_ram的ip,基于两个fifo,深度为512. 下面就是行缓存的代码:

module shift_line_buffer(
				input 	wire	 		line_clk			,
				input 	wire			s_rst_n				,	
				input	wire 			in_line_vaild		,//在有效数据提前一个周期
				input 	wire 	[7:0]	din					,
				input  	wire			vsync				,//帧同步
				output 	wire	[7:0] 	taps0x				,
				output 	wire	[7:0] 	taps1x				,
				output	wire	[7:0] 	taps2x				,
				output  wire			done
);

`ifndef SIM
localparam IMAGE_WIDTH = 480 ;//
`else
localparam IMAGE_WIDTH = 8 ;//480X272
`endif

wire empty1,empty2,pop1_en,pop2_en;
reg rd1_en,rd2_en;

wire prog_full1,prog_full2;
assign pop1_en=(prog_full1==1)?1'b1:vsync;//0?
always @(posedge line_clk or negedge s_rst_n)begin
	if(s_rst_n == 0)
		rd1_en=0;
	else if(pop1_en== 1 && in_line_vaild== 1)
		rd1_en=1;
	else if(empty1==1)
		rd1_en=0;		
end

fifo_512x8	fifo_512x8_inst1(
  .clk
基于FPGA中值滤波算法的设计与实现 摘 要 在图像的采集、传输和记录等过程中,由于受到多方面因素的影响,图像信号会不可避免地受到椒盐噪声的污染,这将会严重影响图像的后期分析和识别等处理,因此有必要用中值滤波器对图像的椒盐噪声进行滤波预处理。 实际应用中,对滤波器件不仅要求能够将图像中的椒盐噪声滤除,满足图像处理的实时性要求,而且还要求能够很好地保护图像细节,避免滤波后图像变得模糊。针对传统的快速中值滤波算法在滤除图像椒盐噪声时存在图像细节模糊的缺陷,本文提出了一种基于FPGA的改进的快速中值滤波算法。该算法中值滤波过程中,首先根据设定的阈值判断滤波窗口的中心像素点的是否为噪声点,若是噪声点,就利用快速中值滤波算法求出中值并替换中心点的原像素值,若不是噪声点,就不进行中值滤波处理。利用MATLAB软件对该算法进行仿真的结果表明,该算法具有良好的去噪和图像细节保持的能力。 在该算法FPGA实现过程中,充分利用FPGA硬件的并行性,并且采用流水线技术,提高了图像滤波的处理速度。FPGA硬件实现的结果表明,该算法与传统的快速滤波算法相比,不仅能够满足图像处理的实时性要求,而且还能在滤除图像椒盐噪声的同时,避免滤波后图像变得模糊的缺陷,达到了保护原始图像细节的目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值