最*在做图像处理方面的一些工作,和几个滤波器打了不少交道,这里做个总结。滤波器是信号处理上的概念,但是信号处理那套理论的应用范围很广,我主要用的是在图像处理上的应用。这篇文章主要讲滤波器的功能和matlab中的使用方法,至于原理,我也不太懂...
图像常常被强度随机信号所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等。椒盐噪声含有随机出现的黑白强度值,而脉冲噪声则只含有随机的白强度值(正脉冲噪声)或黑强度值(负脉冲噪声)。与前两者不同,高斯噪声含有强度服从高斯或正态分布的噪声。
(1)高斯低通滤波器
高斯滤波器是响应脉冲为高斯形状的滤波器,对于图像来说,高斯滤波器是利用高斯核的一个2维的卷积算子,用于图像模糊化(*滑,去除细节和噪声)。在matlab中可以利用函数w=fspecial(\'gaussian\',[5 5],0.8)产生一个高斯核,在这个函数中,第二个参数是窗的大小,第三个参数高斯函数中的那个标准差。下面这个图展示了这个高斯窗和其二维分布:
可以看出是个高斯函数的样子。这个过滤器的过滤结果就是每个像素的值变成窗内邻居像素的加权和,如果看灰度直方图的话,可以明显的看出直方图会变*滑。用此滤波器进行滤波在matlab里面也非常简单:g=imfilter(f,w);
(2)均值滤波器
均值滤波器也很简单,就是像素的值用它窗内邻居的*均值来代替。w=fspecial(\'average\',5)。主要应用于*滑噪声,但是跟上面的高斯滤波器比,它的*滑手段显然更粗暴些,邻域的值不管远*一律*等,高斯滤波器还至少根据远*有些区分。
(3)中值滤波器
中值滤波器就是用窗内的中间值代替该像素的值,也多用于减少噪声,特别对于椒盐噪声有很好的效果。中值滤波器在matlab里的实现与上面两个有些不同,它的用法是
g=medfilt2(f ,[r c])。
(4)维纳滤波器
相对上面的四个滤波器维纳滤波器比较复杂一点,它经常用在复原信号上,因此也是图像去噪的方法之一,和高斯噪声和均值噪声一样,能起到*滑的效果,效果还会更好一点,因为它能估计这个像素最应该的值的是什么。这个滤波器原理比较复杂,不在多述,找到相关资料再补充。
maltab已经实现了这个滤波器:g=wiener2(f,[r c])。