这篇blog里简单介绍下空间域滤波的方法,冈萨雷斯书里讲,通常情况下,当滤波器较小时,空间域滤波要比频域滤波更有效。“小”的定义较为复杂,取决于众多因素,如所使用的机器和算法、缓冲器的大小、所处理数据的复杂度等。
fspecial(), 这个函数,百度百科给的很明白,是一个用来定义滤波器的函数,可以定义各种滤波器,包括
‘average’
‘disk’
‘gaussian’
‘laplacian’
‘log’
‘motion’
‘prewitt’
‘sobel’
‘unsharp’
。
语法格式为
h = fspecial(type) 或者为
h = fspecial(type,para)
其中type指定算子的类型,para指定相应的参数;各个类型的滤波器写法可以参照百度百科。
现在滤波器是有了,下面需要 imfilter() 登场了。
功能:
对任意类型
数组
或多维
图像
进行
滤波
。
用法:
B = imfilter(A,H)
B = imfilter(A,H,option1,option2,…)
或写作
g = imfilter(f, w, filtering_mode, boundary_options, size_options)
其中,
f
为
输入
图像,
w
为滤波器(这里可以使上面用fspecial()生成的滤波器),
g
为滤波后图像。
filtering_mode
用于指定在滤波过程中是使用“相关”还是“卷积”。
boundary_options
用于处理边界充零问题,边界的大小由
滤波器
的大小确定。具体
参数
选项见下表:
|
选项 |
描述 |
filtering_mode |
‘corr’ |
通过使用相关来完成,该值为默认。 |
|
‘conv’ |
通过使用卷积来完成 |
boundary_options |
‘X’ |
输入图像的边界通过用值 X (无引号)来填充扩展 其默认值为 0 |
|
‘replicate’ |
图像大小通过复制外边界的值来扩展 |
|
‘symmetric’ |
图像大小通过镜像反射其边界来扩展 |
|
‘circular’ |
图像大小通过将图像看成是一个二维周期 函数 的一个周期来扩展 |
size_options |
‘full’ |
输出 图像的大小与被扩展图像的大小相同 |
|
‘same’ |
输出图像的大小与输入图像的大小相同。这可通过将滤波掩模的中心点的偏移限制到原图像中包含的点来实现,该值为默认值。 |
下面给一些例子说明这两个函数合在一起用的效果:
用5*5 均值滤波:
w1=fspecial(‘average’,5);
A=imfilter(RGB,w1,’replicate’);
imshow(A)
A=imfilter(RGB,w1,’replicate’);
imshow(A)
结果是:
用sobel 算子提取边缘:
w8=fspecial(‘sobel’);
H=imfilter(RGB,w8,’replicate’);
imshow(H);
H=imfilter(RGB,w8,’replicate’);
imshow(H);
结果是:
版权声明:本文为u013845708原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。