Matlab之空间滤波fspecial ordfilt2(十四)

上一篇说了进行线性和非线性滤波的一种方式,这一篇来继续学习IPT支持的线性和非线性滤波

线性滤波

用于二维的即函数fspecial

fspecial
fspecial ('type',parameters)
%'type'表示滤波器类型
%'parameters'进一步定义了指定的滤波器

函数 fspecial支持的空间滤波器

类型函数参数
‘average’fspecial(‘average’,[r c])大小为r x c的一个矩形平均滤波器。默认值为3x 3。若由一个数来代替[r c].则表示方形滤波器
‘disk’fspecial(‘disk’,r)一个圆形平均漶波器(包含在2r + 1大小的正方形内),半径为r。默认半径为5
‘gaussian’fspecial(‘gaussian’,[r c] ,sig)一个大小为r x c的高斯低通滤波器,标准偏差为sig (正)。默认值为3 x 3和0.5。若由一个数来代替
‘laplacian’fspecial (‘laplacian’ ,alpha)一个大小为3 x 3的拉普拉斯滤波器,其形状由alpha指定,alpha是范围[0, 1]内的一个数。alpha 的默认值为0.5
‘log’fspecial(‘log’,[r c],sig)一个大小为r x c的高斯-拉普拉斯(LoG)滤波器.标准偏差为sig (正)。默认值为5x5和0.5。若用一个数代替[r c], 则表示一个方形滤波器
‘motion’fspecial (‘motion’,len, theta)围绕一幅有着len个像素的图像线性运动时(就像照相机与景物的关系),输出一个滤波器。运动的方向为theta,其单位为度,即从水平方向逆时针转动的角度。默认值为9和0,表示沿水平方向9个像索的运动

举个例子

w = fspecial('laplacian',0)

输出为
在这里插入图片描述
有一点数字图像基础的都知道这是一个拉普拉斯滤波器的一般模板,一个标准的3×3滤波器,而我们如果要得到更清晰的效果,一般使用一个中心为-8的滤波器

w4 = fspecial('laplacian',0);
w8 = [  1     1     1
        1    -8     1
        1     1     1];
I = imread('moon.tif');
I = im2double(I);
g4 = I - imfilter(I, w4, 'replicate');
g8 = I - imfilter(I, w4, 'replicate');
subplot(131)
imshow(I)
subplot(132)
imshow(g4)
subplot(133)
imshow(g8)

由于原图已经有较好的清晰度了,但我们还是可以看到一些细节的变化
在这里插入图片描述

非线性滤波

ordfilt2也称排序滤波器,对图像邻域中所包含的像素进行排序,然后使用排序结果确定的值来替代邻域中的中心像素的值。

ordfilt2

语法为

g = ordfilt2 (f, order, domain);
%g为输出图像
%使用邻域的一组排序元素中的第order个元素来替代f中的每个元素
%该邻域则由domain中的非零元素指定
%domain是一个由01组成的大小为mxn的矩阵,该矩阵指定了将在计算中使用的邻域中的像素位置。

举例:
要实现大小为m×n的最小滤波器

g = ordfilt2(f, 1, ones(m,n));
%1表示mn个样本中的第一个样本
%ones (m,n)创建了一个元素值为1,大小为mxn的矩阵,表明邻域内的所有样本都将用于计算。

则最大滤波器为:

g = ordfilt2(f, m*n, ones(m,n));
medfilt2

中值滤波器为:

g = ordfilt2(f, median(1:m*n)ones(m, n) )
%median (1 :m* n)简单地计算排序序列1,2, ... mun的中值。函数

median的通用语法为

V = median(A, dim)
%v是向量,它的元素是A沿着维数dim的中值

若dim=1,则v的每个元素就都是矩阵A中沿相应列的元素的中值。

实际中有二维中值滤波函数

g = medfilt2(f, [m n], padopt)

数组[m n] 定义了一个大小为m x n的邻域,中值就在该邻域上计算

padopt指定了三个可能的边界填充选项之一:

  • ‘zeros’ (默认值)
  • ‘symmetric’ f按照镜像反射方式对称地沿其边界扩展;
  • ‘indexed’, 若f是double类图像,则以1来填充图像,否则以0来填充图像

该函数的默认形式为

g = medfilt2(f)

它使用一个大小为3 x 3的邻域来计算中值,并用0来填充输人图像的边界。

举例:

I = imread('stc.tif');
fn = imnoise(I, 'salt & pepper', 0.2);
gm = medfilt2(fn);
gms = medfilt2(fn, 'symmetric');
subplot(131)
imshow(I)
subplot(132)
imshow(gm)
subplot(133)
imshow(gms)

中值滤波可以很好的滤去椒盐噪声,可以看到下图的明显区别
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值