空间滤波

>>g=imfilter(f, w, filtering_mode, boundary_options,size_options);

#fitering_mode选项为'corr', 'conv'

分别代表相关滤波和卷积滤波,后者结果相当于将前者旋转180度

#boundary_options用于处理边界填充问题,

可以为填充0,复制边界,对称映象,周期拓展等方式填充

#size_options设置输出图像大小,'full'或者‘same’

默认情况下,为'corr','0','same'

注意滤波时,输入输出图像类型,避免结果超出[0,255]

 

以上通过在像素邻域计算乘积和(卷积)的方式对图像滤波的方式成为线性滤波;

非线性空间滤波也是在每个像素邻域内,只是应用非线性操作的方式,例如使得每个每个中心点的响应等于领域内像素最大值。

g=colfilt(f,[m,n],'sliding',fun);  #可产生mn*MN矩阵A

#[m,n]为模板大小;

#‘sliding’表明模板对输入图像f逐像素进行滑动;

#fun函数句柄,即通过某个函数对每个像素邻域进行操作,返回函数值作为结果;

colfilt操作相当于先生成矩阵A,然后f分别对A每一列进行操作,并返回MN维向量v,每个元素与就是对原图像每个像素邻域的操作结果。

使用colfilt时,首先要对输入图像进行填充:

>>fp=padarray(f, [r,c], method, direction);

在得到结果g后要移除填充部分:

>>[M,N]=size(f);

>>g=g((1:M)+m,(1:N)+n);

 

例1、用laplace 进行线性滤波

>>f=imread(...); 

>>w1=fspecial('laplace',0);#预定义laplace模板

>>w2=[1 1 1;1 -8 1;1 1 1];#常用数字二阶导数模板

>>f=tofloat(f);#将输入图像转化成浮点型,得到带有正直和负值结果f1,f2

>>f1=imfilter(f,w1,'replicate');#imfilter 输出与输入相同的数据类型

>>f2=imfilter(f,w2,'replicate');

>>g1=f-f1;

>>g2=f-f2;

>>imshow (f)

....

 

例2、统计排序滤波器ordfilt2

>>g=ordfilt2(f,order,domain);

#domain通常为ones(m,n)即对邻域内所有元素进行计算

#order为1时,代表最小滤波器;为m*n时为最大滤波器;

>>gm=medfilt2(f,[m n],padopt);

#实现中值滤波功能,相当于ordifllt2中order取吗m*n/2

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值