MATLAN图像处理之统计滤波
我们先看下面两图的结果 在进行方法代码描述
%非线性空间滤波 统计排序滤波器
%MATLAB 中使用ordfilt2生成飞线型滤波器
%g=ordfilt2(f,order,domain)
%该函数的作用,domain会生成 0 1 的元素的m n矩阵,其中非零元素作为领域
%对领域内的元素排序, 选取第order个元素 作为该领域的像素值
%如果想对每一个部分进行统计排序滤波 可以不使用domain 使用onse(m,n)来生成全1 的矩阵
%如果要实现统计的最小滤波器 order=1 最大滤波器 order=m*n 中值滤波器order=median(1:mn)
%非线性空间滤波需要对图像进行填充后操作
%对图像填充用padarray函数
%fp=padarray(f,[r c],method,direction)
%f为输入图像 fp为填充后的图像 [r c] 用于给出填充f的行数 列数
%方法
%'symmetric' (对称)图像大小通过围绕边界的镜像反射来填充
%'replicate' 图像大小通过复制边界中的值来扩展
%'circular' 图像大小铜鼓瓯江图像看成是一个周期函数的一个周期来扩展
% 方向
% 'pre' 在每一维的第一个元素的填充
% 'post' 在每一维的最后一个元素后填充
% 'both' 在每一维的第一个元素前和最后一个元素后填充
%若 f=[1 2;3 4] fp=padarray(f,[3 2],'replicate','post') 生成结果如下
%fp=1 2 2 2
% 3 4 4 4
% 3 4 4 4
% 3 4 4 4
% 3 4 4 4
clc
clear
f=imread('D:\亮度调节与空间滤波\9.jpg');
f1=f(:,:,1);
f2=ordfilt2(f1,1,ones(5,5));
f3=padarray(f1,[2 2],'replicate', 'pre');
f4=ordfilt2(f3,1,ones(5,5));
subplot(2,2,1)
imshow(f1)
title('原图')
subplot(2,2,2)
imshow(f2)
title('没有扩展进行滤波')
subplot(2,2,3)
imshow(f4)
title('扩展后进行滤波')
figure
f5=ordfilt2(f1,1,ones(5,5));
subplot(2,2,1)
imshow(f5)
title('最小滤波')
f6=ordfilt2(f1,9,ones(5,5));
subplot(2,2,2)
imshow(f6)
title('最大滤波')
f7=ordfilt2(f1,5,ones(5,5));
subplot(2,2,3)
imshow(f7)
title('中值滤波')
subplot(2,2,4)
imshow(f1)
title('原图')