Matlab图像处理系列——空间域图像增强之图像平滑、中值滤波

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、图像增强
二、空间域滤波
1、空间域滤波概念
2、边界处理
3、滤波操作的Matlab仿真
三、图像平滑
1、平均模板概念
2、平均模板的Matlab仿真
3、高斯平滑概念
4、高斯平滑的Matlab仿真
四、中值滤波
1、中值滤波概念
2、中值滤波的Matlab仿真
五、Matlab仿真源码
1、滤波操作的Matlab仿真源码
2、平均模板的Matlab仿真源码
3、高斯平滑的Matlab仿真源码
4、中值滤波的Matlab仿真

本节内容
一、图像增强

图像增强,是根据特定的需要突出一幅图像中的某些信息,同时削弱或去除某些不需要的信息的处理方法。主要目的是使处理后的图像对某种特定的应用来说,比原始图像更适用。
当然,图像增强处理并不能增强原始图像的信息,只能增强对某种信息的辨别能力,同时也可能损失一些其他信息。
图像增强可分为两类,一是空间域图像增强;另一类频率域图像增强。
二、空间域滤波
滤波是将信号中某个特定波动滤除的操作,在数字信号处理中通常通过傅里叶变换及逆变换实现。
1、空间域滤波概念
空间域滤波主要是直接基于邻域或空间域,对图像中像素执行计算。
邻域处理或空间域滤波的具体过程,以图像中的每一点(x,y),进行操作:
①对预定义的以(x,y)为中心的邻域内的像素进行运算;
②对上述中的运算的结果作为(x,y)点新的响应。
一幅数字图像可以看作一个二维函数(x,y),x-y平面表明了空间位置信息,也就是所谓的空间域,基于x-y空间邻域的滤波操作称为空间域滤波。
以一个3×3的模板进行空间滤波,模板为w,其中(0,0)为中心。
滤波过程,在图像f(x,y)中逐点地移动模板,使模板中心和点(x,y)重合。
在每一点(x,y)处,滤波器在该点的响应是根据模板的具体内容并通过预先定义的关系来计算。
在这里插入图片描述

一个大小为m×n的模板,其中m=2a+1,n=2b+1,a,b均为正整数,即模板的长与宽均为基数,最小的尺寸为3×3,滤波操作表达式:
在这里插入图片描述

也就是说,对于大小为M×N的图像f(0,……,M-1,0,……,N-1),对x和y依次应用公式,完成图像f(x,y)所有像素的处理,从而得到新的图形g(x,y)。
2、边界处理
执行滤波操作时候,当模板位于图像边缘时,会产生模板的某些元素位于图像之外的情况,需要对在边缘进行单独处理,以避免引用到本不属于图像的无意义的值。
几种解决边界问题的策略:
①收缩处理范围,处理时候,忽略位于图像边界附近会引起问题的像素点,从而确保滤波过程中模板始终不会超过图像的边界。
②使用常数填充图像,根据模板形状及图像虚拟出边界,虚拟边界像素值为指定的常数,得到虚拟后图像,保证模板在移动过程中始终不会超过虚拟后图像的边界。
③使用复制像素的方法填充图像,方法与②类似,只是将用来填充虚拟边界像素值的不是固定的常数,而是复制图像本身边界的模式。
3、滤波操作的Matlab仿真
Matlab提供了与滤波相关的函数imfilter。
imfilter,多维图像的N维滤波,使用多维滤波器对多维数组进行滤波,并输出结果。
在这里插入图片描述
在这里插入图片描述

三、图像平滑
图像平滑是一种减少或抑制图像噪声的数字图像处理技术,在空间域中一般采用邻域平均可以到达平滑目的。
1、平均模板概念
一种平均的加权模式,在点(x,y)为中心3×3邻域内的点都参与决定在新图像中(x,y)点像素值的运算,并且所有系数都为,表示参数决定过程中的权重都相同,最后保证整个模板元素之和为1.这样让新图像通原始图像保持在一个灰度范围内,称为平均模板。
图像具有局部连续性质,也就是相邻像素的数值相近,噪声的存在使得噪声点处发生灰度跳跃,也就是我们常说的噪声点,亮区中的暗点。
通过平滑滤波,将原局部图像中噪声点的灰度值得到有效修正,将每一个点用周围点的平均替代,从而减少噪声影响过程,即平滑或模糊。
2、平均模板的Matlab仿真
Matlab提供了与滤波相关的函数fspecial。
fspecial,创建具有指定type的二维滤波器。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、高斯平滑概念
高斯模板,通过适当增加模板中心点的权重,随着距离中心点的距离增大,权重迅速减小,确保中心点看起来更接近于与它距离更近的点。
3×3高斯模板:
在这里插入图片描述

高斯模板是由二维高斯函数得来,也就是二维正态分布密度函数,一个均值为0,方差为σ^2的二维高斯函数,表达式:
在这里插入图片描述

高斯模板将连续的二维高斯函数离散化,任意大小的高斯模板都可通过一个(2k+1)×(2k+1)的均值得到其(i,j)点的元素值:
在这里插入图片描述

当标准差σ取合适的值时候,才能达到一个像素值较好的估计。
若σ过小,偏移中心的所有像素权重将会非常小,相当于加权和响应基本不考虑邻域像素作用,滤波操作相当于图像点运算;
若σ过大,邻域相对较小,相当于平均模板处理。
4、高斯平滑的Matlab仿真
Matlab实现不同σ下高斯平滑的仿真。
在这里插入图片描述
在这里插入图片描述

四、中值滤波
1、中值滤波概念

中值滤波本质上是一种统计排序滤波器,是一种非线性滤波器。
对于原图像中某点(i,j),中值滤波以该点为中心的邻域内的所有像素的统计排序中值作为(i,j)点的响应。
中值滤波对于某些类型的随机噪声具有非常理想的降噪能力,相比于线性平滑滤波,在处理的像素邻域之内包含了噪声点,噪声或多或少均会影响该点的像素只计算。但中值滤波,噪声点则常常被直接忽略,在降噪时候引起的模糊效应比较低,一种典型应用是消除椒盐噪声。
2、中值滤波的Matlab仿真
Matlab提供了medfilt2函数实现中值滤波。
medfilt2对图像执行二维中位数滤波。每个输出像素包含输入图像中对应像素周围
3×3邻域的中位数值。
在这里插入图片描述

五、Matlab仿真源码
1、滤波操作的Matlab仿真源码

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
%滤波模板
w=[1 1 1;1 1 1;1 1 1]
%滤波
B1=imfilter(I,w,'corr','replicate');
B2=imfilter(I,w,'corr','symmetric');
B3=imfilter(I,w,'corr','circular');
subplot(2,2,1);
imshow(I);
title('原图');
subplot(2,2,2);
imshow(B1);
title('滤波后图像B1');
subplot(2,2,3);
imshow(B2);
title('滤波后图像B2');
subplot(2,2,4);
imshow(B3);
title('滤波后图像B3');

2、平均模板的Matlab仿真源码

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
%3×3模板、5×5模板、7×7模板
h1=fspecial('average',3);
h2=fspecial('average',5);
h3=fspecial('average',7);
%滤波
B1=imfilter(I,h1,'corr','replicate');
B2=imfilter(I,h2,'corr','replicate');
B3=imfilter(I,h3,'corr','replicate');
subplot(2,2,1);
imshow(I);
title('原图');
subplot(2,2,2);
imshow(B1);
title('3×3模板滤波后图像B1');
subplot(2,2,3);
imshow(B2);
title('5×5模板滤波后图像B2');
subplot(2,2,4);
imshow(B3);
title('7×7模板滤波后图像B3');

3、高斯平滑的Matlab仿真源码

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
%3×3模板不同标准差
h1=fspecial('gaussian',3,0.5);
h2=fspecial('gaussian',3,0.8);
h3=fspecial('gaussian',3,1.5);
%5×5模板不同标准差
h4=fspecial('gaussian',5,0.5);
h5=fspecial('gaussian',5,0.8);
h6=fspecial('gaussian',5,1.5);
%滤波
B1=imfilter(I,h1,'corr','replicate');
B2=imfilter(I,h2,'corr','replicate');
B3=imfilter(I,h3,'corr','replicate');
B4=imfilter(I,h4,'corr','replicate');
B5=imfilter(I,h5,'corr','replicate');
B6=imfilter(I,h6,'corr','replicate');
subplot(2,2,1);
imshow(I);
title('原图');
subplot(2,2,2);
imshow(B1);
title('3×3模板,σ为0.5,高斯滤波后图像B1');
subplot(2,2,3);
imshow(B2);
title('3×3模板,σ为0.8,高斯滤波后图像B2');
subplot(2,2,4);
imshow(B3);
title('3×3模板,σ为1.5,高斯滤波后图像B3');
figure;
subplot(2,2,1);
imshow(I);
title('原图');
subplot(2,2,2);
imshow(B4);
title('5×5模板σ为0.5,高斯滤波后图像B4');
subplot(2,2,3);
imshow(B5);
title('5×5模板,σ为0.8,高斯滤波后图像B5');
subplot(2,2,4);
imshow(B6);
title('5×5模板,σ为1.5,高斯滤波后图像B6');

4、中值滤波的Matlab仿真

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
I=rgb2gray(I);
%为图像叠加椒盐噪声
I1=imnoise(I,'salt & pepper');
%高斯平滑
w1=[1 2 1;2 4 2;1 2 1]/16;
B1=imfilter(I1,w1,'corr','replicate');
%平均滤波
w2=[1 1 1;1 1 1;1 1 1]/9;
B2=imfilter(I1,w2,'corr','replicate');
%中值滤波
B3=medfilt2(I1,[3,3]);
subplot(2,2,1);
imshow(I);
title('原图');
subplot(2,2,2);
imshow(B1);
title('高斯平滑滤波后图像B1');
subplot(2,2,3);
imshow(B2);
title('平均滤波滤波后图像B2');
subplot(2,2,4);
imshow(B3);
title('中值滤波滤波后图像B3');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值
>