基于FPGA的中值滤波算法实现

         在这一篇开篇之前,我需要解决一个问题,上一篇我们实现了基于FPGA的均值滤波算法的实现,最后的显示效果图上发现有一些黑白色的斑点,我以为是椒盐噪声,然后在做基于FPGA的中值滤波算法的实验时,我发现黑白斑点并没有消除,中值滤波本来是可以很好的滤掉椒盐噪声,所以说这里并不是椒盐噪声,最后经过我仔细的检查,终于明白了问题的所在。我所使用的Xilinx这款开发板的晶振为125Mhz,串口模块我使用前面设计好的代码,输入时钟为50Mhz,产生的接收完成标志信号也就是一个50Mhz的时钟周期,我这里将接收完成标志作为,双口RAM的写使能,却把IP Core的时钟设置为125Mhz系统时钟,所以在wea有效期间,clka会有至少两次上升沿,所以在串口传输过程中,RAM写入的数据可能会有一部分出现偏差,所以最终显示出来有部分像素有问题。这里我修改如下。

  最后均值滤波的显示效果也是同样的,一幅完好的图片,和原图相比只是变模糊了一些,查看图片请跳至文末。

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

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

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

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

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

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

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

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

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

排序算法思想

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

中值滤波计算

如图所示仿真,可以推算出,这个中值完全是正确的,最后将求出的中值输出,这样中值定理便完成了。 

3x3矩阵的中值输出

         我们在求中值的时候消耗了三个时钟周期,最后输出写RAM使能信号时,需要将per_clken延时3个时钟周期,保证图像数据与写RAM使能对齐、同步性。这里延时的写法和前面文章中所讲的是完全相同的!

  中值滤波和均值滤波比较:中值滤波与均值滤波分别是非线性滤波和线性滤波的代表,这两种滤波非常的相似,但滤波的效果却有很大的差别,均值滤波相当于低通滤波,有将图像模糊化的趋势,对椒盐噪声基本无能为力。中值滤波的优点是可以很好的过滤椒盐噪声,缺点是容易造成图像的不连续。中值滤波有效的移植了最大值和最小值,图像会变得均匀,对椒盐噪声有很好的滤出效果!所以本系统最终选择采用中值滤波的方法。

灰度lena

均值滤波lena

中值滤波lena

  上图为灰度图,中间为均值滤波图像,下图为中值滤波后的图像。通过对比发现,均值滤波后的lena变得更模糊,亮度也变高,而中值滤波后的lena清晰度较好,也是有效的过滤掉了椒盐噪声,由于我们这是所选取的图片椒盐噪声不明显,感兴趣的读者可以自己去试着找一幅带椒盐噪声的图片去处理一下。这里需要强调的一下是滤波后的图像会有部分边缘缺失,这是因为我们在求取均值或中值时,生成的3x3矩阵,在缓存第一行数据时,第二三行数据是没有的,同样缓存到前两行第三行数据也是没有的,但这个时候我们就已经开始了求均值或中值的运算,那么这个时候输出的像素点其实是作废的,这里我们并没有过多的关心这些像素点,只是专注于学习中值滤波。

转载请注明出处:NingHeChuan(宁河川)

图像处理系列文章

第一篇:基于FPGA的VGA显示静态图片

第二篇:基于FPGA的RGB565_YCbCr_Gray算法实现

第三篇:基于FPGA的Uart接收图像数据至VGA显示

番外篇:数字图像处理界标准图像 Lena 后面的故事

第四篇:基于FPGA的均值滤波算法实现

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Renderbus云渲染农场

vray渲染速度慢的影响因素和提升技巧-Renderbus

模型因素 较为复杂的模型(特别是存在较多细小转角的模型),会耗费更多的渲染计算时间。模型的复杂程度对渲染的影响较大,这个问题可以说是“硬件伤”。

1604
来自专栏我的技术专栏

浅谈 GPU图形固定渲染管线

图形渲染管道被认为是实时图形渲染的核心,简称为管道。管道的主要功能是由给定的虚拟摄像机、三维物体、灯源、光照模型、纹理贴图或其他来产生或渲染一个二维图像。由此可...

1727
来自专栏林欣哲

隐含层权重参数的初始化方式的对比实验

全1或全0初始化 全1或全0初始化的训练效果 ? After 858 Batches (2 Epochs): Validation Accuracy 11...

3287
来自专栏Petrichor的专栏

RGB-D(深度图像) & 图像深度

  在3D计算机图形中,Depth Map(深度图)是包含与视点的场景对象的表面的距离有关的信息的图像或图像通道。其中,Depth Map 类似于灰度图像,只是...

603
来自专栏逍遥剑客的游戏开发

GDC2011: Fast and Efficient Facial Rigging

3368
来自专栏书山有路勤为径

卷积滤波器与边缘检测

高低频率 高频图像是强度变化很大的图像。并且亮度级别从一个像素到下一个像素快速变化。低频图像可以是亮度相对均匀或变化非常慢的图像。这是一个例子中最容易看到的。

752
来自专栏数据小魔方

图表案例——一个小小的图表所折射出的作图哲学

今天仍然是一个经济学人的图表案例,而且从方法上来讲,略有难度,挺费工夫。 原图上这样的,风格一如既往,呈现的数据是一个季度时间序列数据列,折线图,添加了时间趋势...

2646
来自专栏天天P图攻城狮

iOS基于GPUImage的图像形变设计(复杂形变部分)

在上一部分,我们介绍了两种简单形变的GPUImage实现方式,包括自定义FragmentShader,和自定义顶点数组。这一部分,我们将介绍更为复杂的一些图像形...

46910
来自专栏Java与Android技术栈

Java实现高斯模糊和图像的空间卷积

其中r是模糊半径,r^2 = x^2 + y^2,σ是正态分布的标准偏差。在二维空间中,这个公式生成的曲面的等高线是从中心开始呈正态分布的同心圆。分布不为零的像...

682
来自专栏开源FPGA

基于FPGA的均值滤波算法实现

  我们为了实现动态图像的滤波算法,用串口发送图像数据到FPGA开发板,经FPGA进行图像处理算法后,动态显示到VGA显示屏上,前面我们把硬件平台已经搭建完成了...

2145

扫码关注云+社区