【MATLAB图像处理学习】4.空间滤波

3.4 空间滤波

邻域处理:(1)选取中心点(x,y);(2)仅对预先定义的关于点(x,y)的领域内的像素执行操作;(3)令运算结果为该点处的响应;(4)对图像中的每一点重复该处理

若对领域中像素执行的计算为线性的,则称该操作为线性空间滤波,否则称为非线性空间滤波。

3.4.1线性空间滤波

线性空间滤波的过程:图像 f f f中驻点移动滤波模板 w w w的中心组成。在每个点(x,y)处,滤波器在该点的响应是由限定的相应领域像素与滤波器系数乘积结果的累加和。

工具箱使用函数imfilter来实现线性空间滤波:

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

f为输入图像,w为滤波模板,g为滤波后的结果,filtering_mode为滤波模式,boundary_options为边界选项,size_options为大小选项。

imfilter最常用语法是

g = imfilter(f, w, 'replicate')

'replicate'代表图像的大小通过复制图像边界外的值来扩展

imfilter会将输出图像转换为与输入图像相同的类。因此,如果f是一个整数数组,则输出元素中超过整数类型范围的将被截去,小数部分四舍五入。

% f = imread('characters.tif');
% 生成一个格子图
f = 256 * ones(256,256);
f(1:128,1:128) = 0;
f(128:256,128:256) = 0;

subplot(3,1,1);
imshow(f,[ ]);
% 考虑一个31×31的滤波器
w = ones(31);
% 滤波器w在与衣服图像进行卷积会产生模糊的结果
gd = imfilter(f,w);
subplot(3,1,2)
imshow(gd ,[ ]) ;
% 滤波后的图像中黑白边缘被模糊了,但只出现在图像较亮部分与边界之间的边缘上。
% 原因在于填充的边界是黑色的。
% 'replicate',图像的大小通过复制图像边界外的值来扩展。
gr = imfilter(f,w,'replicate');
subplot(3,1,3)
imshow(gr,[ ]);

3.4.2 非线性空间滤波

模板的概念在非线性处理中不是那么普遍。滤波的概念仍然存在,但"滤波器"视为对一个邻域的像素进行操作的非线性函数,其相应构成非线性操作的结果。

matlab提供两个函数来执行常见的非线性滤波:nlfiltercolfilt。前者直接执行二维操作,而colfilt需要占用更多的内存,但执行起来要比nlfilter快得多。

函数confilt的语法为

g = colfilt(f, [m n], 'sliding', fun)

在使用confilt时,滤波前必须显式地填充输入图像,使用二维函数padarray,其语法为

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

注:这里colfilt程序没有运行成功

3.5 图像处理工具箱的标准空间滤波器

3.5.1 线性空间滤波器

w = fspecial('type',parmeters)

type指定滤波器的类型,parmeters进一步定义规定的滤波器。

clear;clc
f = imread('blurry_moon.tif');
subplot(2,2,1)
imshow(f,[ ])
title('原图')
w = fspecial('laplacian',0);
g1 = imfilter(f, w, 'replicate');
subplot(2,2,2)
imshow(g1,[ ])
title('unit8格式')
%imfilter给出了与输入图像类相同的输出,负值被截掉。
%我们希望得到一个带有正值和负值的拉普拉斯图像。
%对图像f滤波前,将其转换为浮点数可解决这一问题。
f2 = tofloat(f);
g2 = imfilter(f2, w, 'replicate');
subplot(2,2,3)
imshow(g2,[ ])
title('浮点格式')
g = f2 - g2;
subplot(2,2,4)
imshow(g,[ ])
title('原图减去浮点格式')

3.5.2 非线性空间滤波器

函数ordfilt2计算统计排序滤波器。这些滤波器是非线性空间滤波器,它们的响应基于对图像邻域中所包含像素的排序,然后使用排序结果确定的值替换邻域中的中心像素值。

函数ordfilt2的语法为

g = ordfilt2(f,order,domain)

该函数通过使用邻域的排序集合中的第order个元素去替代f中的每个元素,来输出图像g,其中邻域由domain内的非零元素指定。

MATLAB提供了二维中值滤波器的一个专用实现:

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

padpot指定三个可能的边界填充项之一。

f = imread('left.tif');
subplot(1,4,1)
imshow(f)
title('原图')
fn = imnoise(f, 'salt & pepper', 0.2);
subplot(1,4,2)
imshow(fn)
title('被椒盐噪声污染')
gm = medfilt2(fn);
subplot(1,4,3)
imshow(gm)
title('medfilt默认')
gms = medfilt2(fn, 'symmetric');
subplot(1,4,4)
imshow(gms)
title('medfilt symmetric')
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽我所能回答您的问题。 首先,基于线性空间滤波的图像滤波是一种常见的图像处理方法,它可以用于去噪、平滑和增强图像等方面。在 MATLAB 中,可以使用一些预定义的函数来实现这种滤波。 下面是一个基于 MATLAB线性空间滤波示例: ```matlab % 读取图像 img = imread('lena.jpg'); % 添加高斯噪声 noise_img = imnoise(img, 'gaussian', 0, 0.01); % 创建高斯滤波器 h = fspecial('gaussian', [5 5], 1); % 使用 imfilter 函数进行滤波 filtered_img = imfilter(noise_img, h); % 显示结果 subplot(1, 3, 1); imshow(img); title('原图'); subplot(1, 3, 2); imshow(noise_img); title('添加高斯噪声后的图像'); subplot(1, 3, 3); imshow(filtered_img); title('滤波后的图像'); ``` 在这个示例中,我们首先读取了一张图片,然后使用 imnoise 函数添加了高斯噪声。接着,我们使用 fspecial 函数创建了一个高斯滤波器,并使用 imfilter 函数将其应用到了添加噪声后的图像上。最后,我们将原图、添加噪声后的图像和滤波后的图像分别显示出来,以便比较它们之间的差异。 当然,这只是一个简单的示例。在实际应用中,我们可能还需要根据具体情况对图像进行分割、预处理等操作,以便更好地实现滤波效果。同时,还需要根据图像的特点选择合适的滤波器和参数,以达到最佳的滤波效果。 希望这个简单的示例能够对您有所帮助,如果有任何问题或疑问,欢迎继续与我交流。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值