数字图像处理——中值滤波&中心加权中值滤波

引言:在处理图像时,线性滤波将破坏边缘,而且不能有效滤除脉冲噪声。非线性滤波基于对输入信号序列的一种非线性映射关系,常可把某一特定的噪声近似映射为零而保留信号的重要特征,因而可以在一定程度上克服线性滤波的不足。浅谈中值滤波

中值滤波

1.原理
设有一个序列:x1,x2,x3,x4,x5,将它们按照绝对值大小重新排列此序列x3,x5,x2,x4、x1,重排以后的中值是×2,此值就作为滤波的输出。

2.Matlab代码实现

function g = median_filter(f)
[height, width]= size(f); % 输入图像的大小
g = zeros(height, width); % 为输出图像分配内存
for y = 1:height
 for x = 1:width
 x1 = x - 2; % 5x5 窗口的左列
 x2 = x + 2; % 5x5 窗口的右列
 y1 = y - 2; % 5x5窗口的顶行
 y2 = y + 2; % 5x5窗口的底行
 % 当邻域超出图像边界时,舍去超过边界的领域
 x1 = max(x1, 1);
 x2 = min(x2, width);
 y1 = max(y1, 1);
 y2 = min(y2, height);
 window = f(y1:y2, x1:x2); % 5 x 5窗口
 window = window(:); % 将窗口重新排列为列向量
 g(y, x) = median(window); % 输出像素=窗口的中值
 end
end
g = uint8(g); imshow(g); % 转换为8位图像并显示

中心加权中值滤波(the center weighted median filter)

1.原理
先解释一下加权中值滤波:
设有三个数(3,3,9),中位数为3,若加权系数为(1,1,3),即X3的加权系数W3=3,X1和X2的加权系数分别为W1和W2=1,也就是相当于X1重复1次,X2重复1次,X3重复3次,即相当于有5个数(3,3,9,9,9),中位数为9。一般中值滤波则相当于权系数为(1,1,1)。
而中心加权中值滤波:
就是对中心值加权(重复)
设有三个数(3,6,9),中位数为6,若中心加权系数为3,即X2的权系数W2=3,也就是相当于X2重复2次即相当于有5个数(3,6,6,6,9),中位数为6。一般中值滤波则相当于权系数为(1,1,1)。
2.Matlab代码实现

function g = cw_median_filter(f, M)
[height, width]= size(f); 
g = zeros(height, width); 
for y = 1:height
 for x = 1:width
 x1 = x - 2; 
 x2 = x + 2; 
 y1 = y - 2; 
 y2 = y + 2; 
 x1 = max(x1, 1);
 x2 = min(x2, width);
 y1 = max(y1, 1);
 y2 = min(y2, height);
 window = f(y1:y2, x1:x2); 
 window = window(:); 
 window1=[window;repmat(f(y,x),M-1,1)];  %M-1的原因是,window本身就包含了f(y,x) ,当M=1时就是中值滤波
 g(y, x) = median(window1); 
 end
end
g = uint8(g);

matlab中repmat函数的用法

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖葫芦五加皮耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值