Matlab图像处理—边界填充,均值滤波,中值滤波,统计排序滤波

空间滤波的工作原理

滤波器的邻域中心访问输入图像中的每一个像素,并产生一个对应的信像素,新像素的坐标等于当前访问的像素的坐标,新像素的值是预定义操作的运算结果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以此类推。

一,图像边界处理方法

1 忽略边界数据
2.拓展图像(四周补上数据)

  • 使用P值填充(如:P=0)
  • 复制图像边界像素的值
  • 镜像图像边界像素的值
  • 周期扩展

1. 忽略边界数据
在这里插入图片描述
优点:滤波后的图像中所有像素点都能由整个模版处理
缺点:处理后的图像比原始图像小,输出的图像尺寸=n-w+1
2. 拓展图像(四周补上数据)
在这里插入图片描述
(1) 使用P=0来填充
在这里插入图片描述
在这里插入图片描述
(2) 复制图像边界
在这里插入图片描述
在这里插入图片描述
(3)镜像扩展
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)周期扩展
在这里插入图片描述
在这里插入图片描述
优点:与原图的尺寸相等
缺点:若扩展方法不当,补在靠近图像边缘的部分会给处理后的图像带来不良影响,而且会随着滤波器尺寸的增加而增大

matlab代码示例
%%%%%%%%%%
%  边界填充示例 %
%%%%%%%%%%
% 用matlab创建图像
A=ones(512,512)*255;
A(1:256,1:256)=0;
A(257:512,257:512)=0;
figure;
imshow(uint8(A));title('原图');
% 指定均值滤波器
f =ones(21,21);
% f =ones(21,21)/(21*21);
% 采用不同边界填充策略滤波
%f为滤波器,相当于卷积核
B1= imfilter(A,f,0,'full');
B2= imfilter(A,f,'replicate','full');
B3= imfilter(A,f,'symmetric','full');
B4= imfilter(A,f,'circular','full');
% 显示结果
figure;
subplot(231);imshow(uint8(A));title('原图');
subplot(232);imshow(mat2gray(B1));title('填充0');
subplot(233);imshow(mat2gray(B2));title('复制边界');
subplot(235);imshow(mat2gray(B3));title('镜像扩展');
subplot(236);imshow(mat2gray(B4));title('周期扩展');

结果:
在这里插入图片描述
好像不太明显。。。。不管了,可以把图片尺寸变大。
[file, path] = uigetfile({'*.jpg'; '*.bmp'; '*.gif'; '*.png' }, '选择图片');可选图片。
matlab中的imfilter函数介绍:
在这里插入图片描述

二,均值滤波

平滑滤波器的输出是包含在滤波器模版领域内的像素灰度的平均值,即均值滤波器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三,中值滤波

可以使用matlab中的medfilt2函数:B=medfilt2(A,[m n]);
在这里插入图片描述
这里引用一个函数:medfilt_filter
添加链接描述

function [img]=median_filter(image, m)
%----------------------------------------------
%中值滤波
%输入:
%image:原图
%m:模板的大小3*3的模板,m=3

%输出:
%img:中值滤波处理后的图像
%----------------------------------------------
    n=m;
    [height, width]=size(image);
    x1=double(image);
    x2=x1;
    for i=1: height-n+1
        for j=1:width-n+1
            mb=x1(i:(i+n-1),j:(j+n-1));
            mb=mb(:);
            mm=median(mb);
            x2( i+(n-1)/2,j+(n-1)/2)=mm;
        end
    end
    img=uint8(x2);%matlab中uint16的范围是0-65535,uint8的范围是0-255。uint8(num)就是把num中大于255的强制赋值为255
end

在这里插入图片描述

[file, path] = uigetfile({'*.jpg'; '*.bmp'; '*.gif'; '*.png' }, '选择图片');
A = imread([path, file]);%取图
B=imnoise(A,'salt & pepper',0.02);%椒盐噪声污染
D = rgb2gray(B);%灰度处理
C=median_filter(D,3);
subplot(2,2,1);imshow(A);title('原图');
subplot(2,2,2);imshow(B);title('椒盐噪声污染图');
subplot(2,2,3);imshow(D);title('椒盐噪声污染灰度图');
subplot(2,2,4);imshow(C);title('中值滤波后');

运行结果:
在这里插入图片描述

四,统计排序滤波

matlab中的ordfilt2函数:B=ordfilt2(A,order,domain);
如:D = ordfilt2(B,5,ones(3,3));
在这里插入图片描述
在这里插入图片描述
matlab示例:

A = imread('cameraman.tif');
B = imnoise(A,'salt & pepper',0.05);
C = median_filter(B,[3 3]);
D = ordfilt2(B,5,ones(3,3));
figure;
subplot(221);imshow(A);title('原图');
subplot(222);imshow(B);title('椒盐噪声污染图');
subplot(223);imshow(C);title('中值滤波');
subplot(224);imshow(D);title('统计排序滤波');

运行结果:
在这里插入图片描述

reference:
李卫军,肖宛昂,董肖莉,覃鸿老师《视觉信息处理及FPGA实现》课程等

锐化下次写。
如有错误欢迎指出,转载请注明出处

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值