图像的空域滤波增强

你离开我真会死。 提交于 2020-01-26 03:45:56


使用空域模板进行的图像处理,称为图像的空域滤波增强,模板本身称为空域滤波器。空域滤波增强的机理就是在待处理的图像中逐点的移动模板,滤波器在该点的响应通过事先定义的滤波器系数和滤波模板扫过区域的相应像素值的关系来计算。
空域滤波器可以分为平滑滤波器、中值滤波器、自适应除噪滤波器和锐化滤波器。

1.噪声与imnoise函数

图像噪声按照其干扰源可以分为内部噪声和外部噪声。外部噪声,既指系统外部干扰以电磁波或经电源串进系统内部而引起的噪声,如电气设备、天体放电现象等引起的噪声。内部噪声,一般可分为以下4种:
(1)由光和电的基本性质所引起的噪声
(2)电器的机械运动产生的噪声
(3)器件材料本身引起的噪声
(4)系统内部设备电路所引起的噪声
按噪声与信号的关系分类,可以将噪声分为加性噪声和乘性噪声两大类。设f(x,y)为信号,n(x,y)为噪声,噪声影响信号后的输出为g(x,y)。表示加性噪声的公式如下:
在这里插入图片描述
加性噪声和图像信号强度是不相关的,如运算放大器。图像在传输过程中引进的“信道噪声”,电视摄像机扫描图像的噪声,这类带有噪声的图像g(x,y)可看成理想无噪声图像f(x,y)与噪声n(x,y)之和。形成的波形是噪声和信号的叠加,其特点是n(x,y)和信号无关。如一般的电子线性放大器,不论输入信号的大小,其输出总是与噪声相叠加的。
表示乘性噪声的公式如下:
在这里插入图片描述
乘性噪声和图像信号是相关的,往往随图像信号的变化而变化,如飞点扫描图像中的噪声、电视扫描光栅、胶片颗粒噪声等。由于载送每一个像素信息载体的变化而产生的噪声受信息本身控制。在某些情况下,如信号变化很小,噪声也不大。为了分析处理方便,常常将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相统计独立。
按概率密度函数分类,噪声主要有以下几类。
(1)白噪声(White Noise):具有常量的功率谱。
(2)椒盐噪声(Salt and Pepper Noise):椒盐噪声是由图像传感器、传输信道、解码处理等产生的黑白相间的亮暗点噪声,往往由图像切割引起。椒盐噪声是指两种噪声:一种是盐噪声(Salt Noise);另一种是胡椒噪声(Pepper Noise)。盐=白色,胡椒=黑色。前者是高灰度噪声,后者是低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。
(3)冲击噪声(Impulsive Noise):指一幅图像被个别噪声像素破坏,而且这些噪声像素的亮度与其领域的亮度明显不同。冲击噪声呈突发状,常由外界因素引起;其噪声幅度可能相当大,无法提高信噪比来避免,是传输中的主要差错。
(4)量化噪声(Quatization Noise):是指在量化级别不同时出现的噪声。
为了模拟不同方法的去噪效果,MATLAB图像处理工具箱中使用imnoise函数对一幅图像加入不同类型的噪声。它常用的调用方法如下:

J=imnoise(I,type)
J=imnoise(I,type,parameters)

其中,I是指要加入噪声的图像,type是指不同类型的噪声,parameters是指不同类型噪声的参数,J是返回的含有噪声的图像。imnoise中type参数的取值及意义如下表所示。

函数imnoise中type参数的取值及意义
参数值 描述 参数值 描述
'gaussian' 表示高斯噪声 'speckle' 表示乘法噪声
'localva' 表示零均值的高斯白噪声 'poission' 表示泊松噪声
'salt&pepper' 表示椒盐噪声
对图像加高斯噪声,然后进行线性组合。
a=imread('saturn.png');
a1=imnoise(a,'gaussian',0,0.005);%对原始图像加高斯噪声,共得到4副图像
a2=imnoise(a,'gaussian',0,0.005);
a3=imnoise(a,'gaussian',0,0.005);
a4=imnoise(a,'gaussian',0,0.005);
k=imlincomb(0.25,a1,0.25,a2,0.25,a3,0.25,a4);%线性组合
subplot(131)
imshow(a)
title('原始图像')
subplot(132)
imshow(a2)
title('高斯噪声图像')
subplot(133)
imshow(k,[])
title('线性组合')

在这里插入图片描述
对图像添加高斯噪声,椒盐噪声和乘法噪声。

clear all
clf
I=imread('circuit.tif');
subplot(221)
imshow(I)
title('原始图像')
J1=imnoise(I,'gaussian',0,0.02);%叠加均值为0,方差为0.02的高斯噪声
subplot(222)
imshow(J1);
title('高斯噪声图像')
J2=imnoise(I,'salt & pepper',0.04);%叠加密度为0.04的椒盐噪声
subplot(223)
imshow(J2)
title('椒盐噪声图像')
J3=imnoise(I,'speckle',0.04);%叠加密度为0.04的乘法噪声
subplot(224)
imshow(J2)
title('乘法噪声图像')

在这里插入图片描述

2.平滑滤波器

平滑滤波器的输出响应是包含在滤波模板邻域内像素的简单平均值,因此这些滤波器也被称为均值滤波器。均值滤波用邻域的均值代替像素值,减小了图像灰度的尖锐变化。由于典型的随机噪声就是这种尖锐变化组成,因此均值滤波的主要应用就是减噪,即出去图像中不相干的细节,其中“不相干”是指与滤波模板尺寸相比较小的像素区域。
但是图像边缘也是由图像灰度尖锐变化带来的特性,因而均值滤波总是存在不希望的边缘模糊的负面效应。均值滤波器可以衍生出另一种特殊的加权均值滤波器,即用不同的系数乘以像素,从权值上看,一些像素比另一些更重要。
在MATLAB中,fspecial函数用于对图像进行平滑滤波,该函数的调用格式为

h=fspecial(type,para)

其中,参数type指定算子类型,para为指定相应的参数,type=‘average’表示指定的滤波器,para默认为3。
对图像添加不同的噪声,再用3×3的滤波模板对其进行平滑滤波

clear all
clf
I=imread('peppers.png');
subplot(231)
imshow(I)
title('原始图像')
I=rgb2gray(I);
J=imnoise(I,'salt & pepper',0.03);%加均值为0,方差为0.03的椒盐噪声
subplot(232)
imshow(J)
title('椒盐噪声')
K=filter2(fspecial('average',3),J)/255;
subplot(233)
imshow(K,[])
title('椒盐噪声被滤波后的图像')
J2=imnoise(I,'gaussian',0.03);%加均值为0,方差为0.03的高斯噪声
subplot(234)
imshow(J2)
title('高斯噪声')
K2=medfilt2(J2);%图像滤波处理
subplot(235)
imshow(K2,[])
title('高斯噪声被滤波后的图像')

在这里插入图片描述
对图像添加不同的噪声,再用5×5滤波模板对其进行平滑滤波

clear all
clf
I=imread('peppers.png');
subplot(231)
imshow(I)
title('原始图像')
I=rgb2gray(I);
J=imnoise(I,'salt & pepper',0.03);%加均值为0,方差为0.03的椒盐噪声
subplot(232)
imshow(J)
title('椒盐噪声')
K=filter2(fspecial('average',5),J)/255;
subplot(233)
imshow(K,[])
title('椒盐噪声被5×5模板滤波后的图像')
J2=imnoise(I,'gaussian',0.03);%加均值为0,方差为0.03的高斯噪声
subplot(234)
imshow(J2)
title('高斯噪声')
K2=medfilt2(J2);%图像滤波处理
subplot(235)
imshow(K2,[])
title('高斯噪声被5×5模板滤波后的图像')

在这里插入图片描述
对图像实现平滑滤波处理

clear all
clf
I=imread('peppers.png');
subplot(231)
imshow(I)
title('原始图像')
I=rgb2gray(I);
I1=imnoise(I,'salt & pepper',0.02);
subplot(232)
imshow(I1)
title('添加椒盐噪声的图像')
k1=filter2(fspecial('average',3),I1)/255;%进行3×3模板平滑滤波
k2=filter2(fspecial('average',5),I1)/255;%进行5×5模板平滑滤波
k4=filter2(fspecial('average',9),I1)/255;%进行9×9模板平滑滤波
k3=filter2(fspecial('average',7),I1)/255;%进行7×7模板平滑滤波
subplot(233)
imshow(k1)
title('3×3模板平滑滤波')
subplot(234)
imshow(k2)
title('5×5模板平滑滤波')
subplot(235)
imshow(k3)
title('7×7模板平滑滤波')
subplot(236)
imshow(k4)
title('9×9模板平滑滤波')

在这里插入图片描述

3.中值滤波器

中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,其基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。
中值滤波的方法使用某种结构的二维滑动模板,将版内像素按照像素值的大小进行排序,生成单调上升(或下降)的二维数据序列。在MATLAB中,medfilt2函数用于实现中值滤波,该函数的调用方法如下:

B=medfilt2(A)
B=medfilt2(A,[m,n])

其中,m和n是在默认值为3的情况下执行中值滤波,每个图像输出像素为m×n邻域的中值。
对图像添加不同的噪声,再用3×3的滤波模板对其进行中值滤波。

clear all
clf
I=imread('eight.tif');
subplot(231)
imshow(I)
title('原始图像')
J=imnoise(I,'salt & pepper',0.03);%加均值为0,方差为0.03的椒盐噪声
subplot(232)
imshow(J)
title('椒盐噪声')
K=medfilt2(J);
subplot(233)
imshow(K,[]);
title('椒盐噪声被滤波后的图像')
J2=imnoise(I,'gaussian',0.03);%加均值为0,方差为0.03的高斯噪声
subplot(234)
imshow(J2)
title('高斯噪声')
K2=medfilt2(J2);
subplot(235)
imshow(K2,[])
title('高斯噪声被滤波后的图像')

在这里插入图片描述
对图像添加不同的噪声,再用5×5的滤波模板对其进行中值滤波

clear all
clf
I=imread('eight.tif');
subplot(231)
imshow(I)
title('原始图像')
J=imnoise(I,'salt & pepper',0.03);%加均值为0,方差为0.03的椒盐噪声
subplot(232)
imshow(J)
title('椒盐噪声')
K=medfilt2(J,[5 5]);
subplot(233)
imshow(K,[]);
title('椒盐噪声被5×5模板滤波后的图像')
J2=imnoise(I,'gaussian',0.03);%加均值为0,方差为0.03的高斯噪声
subplot(234)
imshow(J2)
title('高斯噪声')
K2=medfilt2(J2,[5 5]);
subplot(235)
imshow(K2,[])
title('高斯噪声被5×5模板滤波后的图像')

在这里插入图片描述
中值滤波器对椒盐噪声的滤除效果。

clear all
clf
I=imread('eight.tif');
J=imnoise(I,'salt & pepper',0.03);
subplot(231)
imshow(I)
title('原图像')
subplot(232)
imshow(J)
title('添加椒盐噪声的图像')
k1=medfilt2(J);%进行3×3模板中值滤波
k2=medfilt2(J,[5,5]);%进行5×5模板中值滤波
k3=medfilt2(J,[7,7]);%进行7×7模板中值滤波
k4=medfilt2(J,[9,9]);%进行9×9模板中值滤波
subplot(233)
imshow(k1)
title('3×3模板中值滤波');
subplot(234)
imshow(k2)
title('5×5模板中值滤波')
subplot(235)
imshow(k3)
title('7×7模板中值滤波')
subplot(236)
imshow(k4)
title('9×9模板中值滤波')

在这里插入图片描述

4.自适应滤波器

自适应滤波器指根据环境的改变,使用自适应算法来改变滤波器的参数和结构。在MATLAB中,wiener2函数用于对图像进行自适应除噪滤波,其可以估计每个像素的局部均值与方差,该函数的调用方式如下:

J=wiener2(I,[M N],noise)

表示使用M×N大小邻域局部图像均值与偏差,采用像素式自适应滤波器对图像I进行滤波。
对图像添加不同的噪声,再用3×3的滤波模板对其进行自适应滤波。

I=imread('tape.png');
subplot(231)
imshow(I)
title('原始图像')
I=rgb2gray(I);
J=imnoise(I,'salt & pepper',0.03);%加均值为0,方差为0.03的椒盐噪声
subplot(232)
imshow(J)
title('椒盐噪声')
k=wiener2(J);
subplot(233)
imshow(k,[]);
title('椒盐噪声被滤波后的图像')
J2=imnoise(I,'gaussian',0.03);%加均值为0,方差为0.03的高斯噪声
subplot(234)
imshow(J2)
title('高斯噪声')
k2=wiener2(J2);
subplot(235)
imshow(k2,[])
title('高斯噪声被滤波后的图像')

在这里插入图片描述
对图像添加不同噪声,再用5×5滤波模板对其进行自适应滤波。

I=imread('tape.png');
subplot(231)
imshow(I)
title('原始图像')
I=rgb2gray(I);
J=imnoise(I,'salt & pepper',0.03);%加均值为0,方差为0.03的椒盐噪声
subplot(232)
imshow(J)
title('椒盐噪声')
k=wiener2(J,[5,5]);
subplot(233)
imshow(k,[]);
title('椒盐噪声被5×5模板滤波后的图像')
J2=imnoise(I,'gaussian',0.03);%加均值为0,方差为0.03的高斯噪声
subplot(234)
imshow(J2)
title('高斯噪声')
k2=wiener2(J2,[5,5]);
subplot(235)
imshow(k2,[])
title('高斯噪声被5×5模板滤波后的图像')

在这里插入图片描述
自适应滤波器对椒盐噪声的滤波效果。

clear all
clf
I=imread('tape.png');
subplot(231)
imshow(I)
title('原始图像')
I=rgb2gray(I);
J=imnoise(I,'salt & pepper',0.04);
subplot(232)
imshow(J)
title('添加椒盐噪声图像')
k1=wiener2(J);
k2=wiener2(J,[5 5]);
k3=wiener2(J,[7 7]);
k4=wiener2(J,[9 9]);
subplot(233)
imshow(k1)
title('3×3模板')
subplot(234)
imshow(k2)
title('5×5模板')
subplot(235)
imshow(k3)
title('7×7模板')
subplot(236)
imshow(k4)
title('9×9模板')

在这里插入图片描述

5.锐化滤波器

数字图像处理中图像锐化的目的有两个:一是增强图像的边缘,使模糊的图像变得清晰;这种模糊不是由于错误的操作,而是特殊图像获取方法的固有影响;二是提取目标物体的边界,对图像进行分割,以便目标区域识别等。
通过图像的锐化,使得图像的质量有所改变,产生更适合观察和识别的图像。数字图像的锐化可分为线性锐化滤波和非线性锐化滤波。如果输出像素是输入像素邻域像素的线性组合则成为线性滤波,否则称为非线性滤波。
线性高通滤波器是最常用的线性锐化滤波器。这种滤波器必须满足滤波器的中心系数为正数,其它系数为负数。
非线性锐化滤波器是使用微分对图像进项处理,以此来锐化由于邻域平均导致的模糊图像。图像处理中最常用的微分是利用图像沿某个方向上的灰度变化率,即原图像函数的梯度。梯度定义为
在这里插入图片描述
梯度模的表达式为
在这里插入图片描述
在数字图像处理中,数据是离散的,幅值是有限的,其发生的最短距离是在两相邻像素之间。因此在数字图像处理中通常采用一阶差分来定义微分算子。其差分形式为
在这里插入图片描述
比较常用的微分滤波算子包括Sobel梯度算子,Prewitt梯度算子和LOG算子等。
利用线性锐化滤波器对图像进行锐化处理。

clear all
clf
I=imread('rice.png');
subplot(121)
imshow(I)
title('原始图像')
I=double(I);%转换数据类型为double双精度型
H=[0 1 0;1 -4 1;0 1 0];%拉普拉斯算子
J=conv2(I,H,'same');%用拉普拉斯算子对图像进行二维卷积运算
K=I-J;
subplot(122)
imshow(K,[])
title('锐化滤波处理')

在这里插入图片描述
对图像进行梯度法锐化

clear all
clf
[I,map]=imread('trees.tif');
subplot(221)
imshow(I)
title('原始图像')
I=double(I);%数据类型转换
[Ix,Iy]=gradient(I);%梯度
gm=sqrt(Ix.*Ix+Iy.*Iy);
out1=gm;
subplot(222)
imshow(out1,map);
title('梯度值')
out2=I;
J=find(gm>=15);%阈值处理
out2(J)=gm(J);
subplot(223)
imshow(out2,map)
title('对梯度值加阈值')
out3=I;
J=find(gm>=20);%阈值黑白化
out3(J)=255;%设置为白色
k=find(gm<20);%阈值黑白化
out3(k)=0;%设置为黑色
subplot(224)
imshow(out3,map)
title('二值化处理')

在这里插入图片描述
利用Sobel梯度算子、Prewitt梯度算子和LOG算子对图像进行锐化处理

clear all
clf
I=imread('coins.png');
subplot(221)
imshow(I)
title('原始图像')
H=fspecial('Sobel');%应用sobel算子锐化图像
I2=filter2(H,I);%sobel算子滤波锐化
subplot(222)
imshow(I2)
title('Sobel算子锐化图像')
H1=fspecial('prewitt');%应用Prewitt算子锐化图像
I3=filter2(H1,I);%Prewitt算子滤波锐化
subplot(223)
imshow(I3)
title('Prewitt算子锐化图像')
H2=fspecial('log');%应用log算子滤波锐化
I4=filter2(H2,I);%用log算子滤波锐化
subplot(224)
imshow(I4)
title('用log算子锐化图像')

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!