空间滤波的工作原理

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

一,图像边界处理方法

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实现》课程等

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

版权声明:本文为zhangzek原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhangzek/p/12862930.html