图像中值滤波的FPGA实现--实时高速

本文介绍了如何在FPGA上实现中值滤波以去除椒盐噪声。通过搭建LineBuffer和使用移位寄存器获取3x3像素矩阵,然后通过排序算法找出中值,最终实现高速实时的中值滤波效果。
摘要由CSDN通过智能技术生成

中值滤波的目的是滤除椒盐噪声,就是那种像是在图像上撒了盐粒子一样玩意儿。这一篇就来谈谈如何在FPGA上实现中值滤波。


数字滤波器的设计其实就是模板的设计。

本实验选取3x3模板,中值滤波也很简单,求模板上三行三列像素值的中值就可以了。

那么,如何求中值呢?

先看一下 RTL Viewer:


1)第一步 搭建LineBuffer

搭建LineBuffer方法,已经在上篇博客 “图像高斯滤波的FPGA实现--实时高速” 中详细介绍,目的和原理完全相同。读者可参阅上篇。

2)第二步 搭建三个移位寄存器

因为LineBuffer只是提供了三根管子,输出的是每根管子的末尾像素值,只有三个。但我们需要3x3=9个像素值,所以需要在每根管子的后面加上2个D触发器,目的是延时得到各行的其余两个像素!!

D触发器的程序如下;

module D_FF
(
clk,
d,
q
);
input clk;
input [4:0]d;
output reg [4:0]q;

always@(posedge clk)
q <= d;

endmodule 

很简单吧~

3)第三步 得到了3x3个像素之后,就需要把这9个像素值的中值提取出来,方法如下:

如下图: 

First:先将每行元素按从大到小排列,得到右方的九宫格

Second:求

最大值列(第1列)的最小值:Min_of_Max、

中值列(第1列)的中值:Med_of_Med、

最小值列(第1列)的最大值:Max_of_Min、

Third:求Min_of_Max、Med_of_Med、Max_of_Min这三者的中值,得到Med_of_Nine即为9个像素的全体中值! 完毕



效果图如下,前一张是未经中值滤波的边缘提取,后一张是经过中值滤波的边缘提取。 可以明显看出,滤波去噪后的边缘提取图干净了许多!



原理说完了,下面贴上第三步的Verilog HDL源码


module MedianSeletor
(
input            iCLK,
input            iRST_N,

input      [4:0] Data1,
input      [4:0] Data2,
input      [4:0] Data3,

input      [4:0] Data4,
input      [4:0] Data5,
input      [4:0] Data6,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值