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实现》课程等
锐化下次写。
如有错误欢迎指出,转载请注明出处