1、中值滤波的原理:对于一串连续输入的信号(量化后是一组数据)。如下图所示,是输入的原信号。中值滤波的原理为,重新计算每一个x的输出值(y),新的输出值。
相当于y=new(x),new的操作是,从在以x为中心,长度为2k的原信号中(区间为[x-k+1,x+k]),提取出这段区间内中间的那个值,作为y=new(x)的结果。
2、举例来说,输入:Y[1-10]:1,2,3,4,5,6,7,8,9,10.取区间2k=4,所以k=2;执行中值滤波K=中值滤波(Y)、由x-k+1>=1,所以当k=2时,x>=2、滤波时:
K[1]=Y[1]
K[2]=(Y[1]、Y[2]、Y[3]、Y[4])的中间值,即为2或3。
3、matlab的中值滤波实现方式:调用函数:A=medfilt1(B,n)、B为输入信号,A为滤波后的信号,即结果。
4、对于输入信号(最开头的图),以下分别为设置区间n=8和n=16得到的滤波图像。中值滤波可以过滤尖峰脉冲。目的在于我们对于滤波后的数据更感兴趣。滤波后的数据保留的原图像的变化趋势,同时去除了尖峰脉冲对分析造成的影响。
中值滤波medfilt2,用法B = medfilt2(A, [m n])
你的两点错误
一、输入图像A,应该是二维矩阵
你用输入图像b是由imread得到的a加上噪声得到的
而imread读到的图像a通常是3维rgb图,是三维矩阵
直接用medfilt2是不对的,可以先用rgb2gray(a)将a先转换为灰度矩阵
二、中值滤波也要指定滤波模版的大小
medfilt2需要两个输入参数,第一个是图像A
第二个参数需要输入一个长度是二的向量,[m n]
指定模版的大小,m行n列
补充下:二、中值滤波medfilt2并不一定需要指定[m n],不指定的话默认为[3 3]。参见:
B = medfilt2(A) performs
median filtering of the matrix A using the default
3-by-3 neighborhood.