图像增强--9直方图调整和 10空间域滤波

更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013    

    图像增强是数字图像处理的最基本的方法之一,在数字图像处理中受到广泛重视,是具有重要实用价值的技术。图像增强的目的在于:(1)采用一系列技术改善图像的视觉效果,提高图像的清晰度。(2)将图像转换成一种更适合于人或机器进行解译和分析处理的形式。图像增强不是以图像保真度为原则,而是通过处理设法有选择地突出便于人或机器分析某些感兴趣的信息,抑制一些无用的信息,以提高图像的使用价值,即图像增强处理只是增强了对某些信息的辨别能力。

       图像增强是一个相对的概念,增强效果的好坏,除与算法本身的优劣有一定的关系外,还与图像的数据特征有直接关系,同时由于评价图像质量的优劣往往凭观测者的主观而定,没有通用的定量标准,因此增强技术大多属于面向问题,增强方法只能有选择地使用。

  图像增强一般包括以下内容:
 • 点处理
 • 空间域滤波
 • 频域滤波
 • 彩色增强
 • 代数运算



1、点处理

         点处理是通过像元亮度值(灰度值)的变换来实现的,即它将输入图像中某点(x, y)的像元值 f (x, y),通过映射函数 T(•),映射成输出图像中的像元值 g(x, y),即   

g(x, y)=T( f (x,y))。根据映射方式不同,点处理可分为灰度变换和直方图调整。

1.1.灰度变换

       灰度变换是一种简单而实用的方法。它可使图像动态范围增大,图像对比度扩展,图像变清晰,特征明显,是图像增强的重要手段之一。它可分为比例线性变换、分段线性变换和非线性灰度变换。

1.2、直方图调整

        (直方图:直方图(Histogram)又称质量分布图。是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布  情况。百度百科)

       一般情况下,如果图像的灰度分别集中在比较狭窄的区间,从而引起图像细节的模糊,为了使图像细节清晰,并使一些目标得到突出,达到增强图像的目的,可通过改善各部分亮度的比例关系,即通过直方图的方法来实现。

   这种方法是以概率论为基础的,常用的方法有直方图均衡化和直方图规定化。直方图调整是以概率论为基础的。通过改变直方图的形状来达到增强图像对比度的效果。

   1.2.1 直方图均衡化

        直方图均衡化又称直方图平坦化,是将一已知灰度概率密度分布的图像,经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像,其结果是扩展了像元取值的动态范围,从而达到增强图像整体对比度的效果。

    

     因此, 根据原图像的直方图统计值就可算出均衡化后各像元的灰度值。按上式对图像进行均衡化处理时,直方图上灰度分布较密的部分被拉伸;灰度分布稀疏的部分被压缩,从而使一幅图像的对比度在总体上得到很大的增强。

直方图均衡化指令

J=histeq(I); 对输入图像I执行直方图均衡化,输出图像J。

imhist(I,n);   该函数用于获取图像数据直方图 ,其中,I为灰度的输入图像,n为指定的灰度级数目,缺省值为256

例:

I=imread('cameraman.tif');
J=histeq(I);
imshow(I),title('原始图');
figure,imshow(J)
title('直方图均衡化后的图形');
figure(1);
figure
subplot(121);imhist(I,64);
title('原始图像的直方图');
subplot(122);imhist(J,64);
title('均衡化后的直方图');



1.2.2 .直方图规定化

 直方图均衡化的优点是能自动地增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局均衡化的直方图。实际工作中有时需要变换直方图使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度。这时可采用比较灵活的直方图规定化方法。直方图规定化增强处理的步骤如下:


例:

I=imread('cameraman.tif');
hgram=0:255; %指定灰度变换范围
J=histeq(I,hgram);%实现图像直方图规定化
figure,imshow(I),title('原始图像');
>> figure,imshow(J),title('直方图规定化后图像');
>> figure,imhist(I,64) %对原始图像进行直方图统计并显示
>> title('原始图像直方图');
>> figure,imhist(J,64) %对直方图规定化后的图像进行直方图统计并显示
>> title('对直方图规定化后的图像进行直方图统计并显示')



2.空间域滤波

        通常情况下,像素的邻域比该像素要大,也就是说这个像素的邻域中除了本身以外还包含了其他像素。在这种情况下,g(x, y)在(x, y)位置处的值不仅取决于其在该处的值,而且取决于以(x, y)为中心的邻域内所有像素的值。

     为在邻域内实现增强操作,常可利用模板与图像进行卷积。每个模板实际上是一个二维数组,其中各个元素的取值确定了模板的功能,这种模板操作也称为空域滤波。

2.1. 基本原理

         根据其特点,空域滤波一般可分为线性滤波和非线性滤波两类。线性滤波器的设计常基于对傅立叶变换的分析。非线性空域滤波器则一般直接对邻域进行操作。另外各种空域滤波器根据功能又主要分成平滑滤波器和锐化滤波器。平滑可用低通来实现。平滑的目的可分为两类:一类是模糊,目的是在提取较大的目标前去除太小的细节或将目标内的小间断连接起来;另一类是消除噪声。锐化可用高通滤波来实现。锐化的目的是为了增强被模糊的细节。结合这两种分类法,可将空间滤波增强方法分成 4 类:

  • 线性平滑滤波器(低通);
  • 非线性平滑滤波器(低通);
  • 线性锐化滤波器(高通);
  • 非线性锐化滤波器(高通)。

       空域滤波器的工作原理都可借助频域进行分析。它们的基本特点都是让图像在傅立叶空间的某个范围的分量受到抑制,而让其他分量不受影响,从而改变输出图像的频率分布,达到增强的目的。在增强中用到的空间滤波器主要有两类:

     平滑(低通)滤波器:它能减弱或消除傅立叶空间的高频分量,但不影响低频分量。因为高频分量对应图像中的区域边缘等灰度值具有较大较快变化的部分,滤波器将这些分量滤去可使图像平滑。

      锐化(高通)滤波器:它能减弱或消除傅立叶空间的低频分量,但不影响高频分量。因为低频分量对应图像中灰度值缓慢变化的区域,因而与图像的整体特性,如整体对比度和平均灰度值等有关,将这些分量滤去可使图像锐化。

2.2 平滑滤波

 2.2.1.线性平滑滤波

  线性低通滤波器是最常用的线性平滑滤波器。实现这种滤波器的方法也称为邻域平均法。邻域平均法是一种局部空间域处理的算法,这种方法的基本思想是用几个像素灰度的平均值来代替每个像素的灰度。假定有一幅 N×N 个像素的图像 f (x, y),平滑处理后得到一幅图像g(x, y)。g(x, y)由下式决定:

         式中,x,y=0,1,2,⋯,N?1;S 是(x,y)点邻域中点的坐标的集合,但其中不包括(x, y)点,M是集合内坐标点的总数。上式说明,平滑后的图像 g(x, y)中的每个像素的灰度值均由包含在(x, y)的预定邻域中的 f (x, y)的几个像素的灰度值的平均值来决定。一种常见的平滑算法是将原图中一个像素的灰度值和它周围邻近八个像素的灰度值相加,然后将求得的平均值(除以9)作为新图像中该像素的灰度值

例:邻域平均的线性平滑滤波法实现降噪的例程

I=imread('cameraman.tif');
%读入预处理图像
imshow(I),title('原图')
%显示预处理图像
K1=filter2(fspecial('average',3),I)/255;
%进行 3*3 均值滤波,fspecial指定滤波器类型为均值滤波,邻域范围3x3,对输入图像I进行滤波,然后对像素值归一化处理,filter2二维滤波
K2=filter2(fspecial('average',5),I)/255;
%进行 5*5 均值滤波
K3=filter2(fspecial('average',7),I)/255;
%进行 7*7 均值滤波
figure,imshow(K1),title('3x3均值滤波')
figure,imshow(K2),title('5x5均值滤波')
figure,imshow(K3),title('7x7均值滤波')


        比较以上采用的不同尺寸的均值滤波器仅进行低通滤波处理的结果可知,当所用的平滑模板的尺寸增大时,消除噪声的效果增强,但同时所得的图像变得更模糊,细节的锐化程度逐步减弱。



       另外,Wiener 滤波器也是经典的线性降噪滤波器。Wiener 滤波的思想是 20 世纪 40 年代提出来的,是一种在平稳条件下采用最小均方误差准则得出的最佳滤波准则,该方法就是寻找一个最佳的线性滤波器,使得均方误差最小。其实质是解维纳—霍夫(Wiener-Hoof)方程。


例:Wiener 滤波法实现降噪的例程

I=imread('cameraman.tif');
%原始图像读入
imshow(I),title('原图');
%原始图像显示
K1=wiener2(I,[3,3]);
%3×3winner 滤波,wiener2二维维纳滤波函数
K2=wiener2(I,[5,5]);
%5×5winner 滤波
K3=wiener2(I,[7,7]);
%7×7winner 滤波
figure,imshow(K1),title('3x3滤波');
figure,imshow(K2),title('5x5滤波');
figure,imshow(K3),title('7x7滤波');


        从处理后的图像看,比较邻域平均法处理后的图像,可以看出邻域平均法处理后的图像效果较差。噪声减少不明显,而且使图像的模糊度增加。相比之下 Wiener 滤波处理的图像效果比较好,图像轮廓清晰,噪声大大降低,图像质量明显提高,识别目标方便。Wiener 滤波不仅较好地消除了强脉冲性噪声的影响,而且较好地保留了图像的边缘。


2.2.2 非线性平滑滤波

        中值滤波是一种去除噪声的非线性处理方法,是由 Turky 在 1971 年提出的。基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替。中值的定义如下:


         中值滤波是非线性运算,因此对于随机性质的噪声输入,数学分析是相当复杂的。由大量实验可得,对于零均值正态分布的噪声输入,中值滤波输出与输入噪声的密度分布有关,输出噪声方差与输入噪声密度函数的平方成反比。

      对随机噪声的抑制能力,中值滤波性能要比平均值滤波差些。但对于脉冲干扰来讲,特别是脉冲宽度较小,相距较远的窄脉冲,中值滤波是很有效的。

    滤波函数:

   Y=medfilt2(A,[m,n]):对输入图像A,使用mxn的模块进行中值滤波

例:

 I=imread('cameraman.tif');
%原图像读入
imshow(I),title('原图');
%原始图像显示
K1=medfilt2(I,[3,3]);
%使用 3*3 模板完成中值滤波
K2=medfilt2(I,[5,5]);
%使用 5*5 模板完成中值滤波
K3=medfilt2(I,[7,7]);
%使用 7*7 模板完成中值滤波
figure,imshow(K1),title('3x3中值滤波');
figure,imshow(K2),title('5x5中值滤波');
figure,imshow(K3),title('7x7中值滤波');


        中值滤波器不像均值滤波器那样,它在衰减噪声的同时不会使图像的边界模糊,这也是中值滤波器受欢迎的主要原因。中值滤波器去噪声的效果依赖于两个要素:邻域的空间范围,中值计算中所涉及的像素数。一般来说,小于中值滤波器面积一半的亮或暗的物体基本上会被滤掉,而较大的物体则几乎会原封不动地保存下来。因此中值滤波器的空间尺寸必须根据手中的问题来进行调整。较简单的模板是 N×N 的方形(这里 N 通常是奇数)。


2.3 锐化滤波

         在图像识别中,需要有边缘鲜明的图像,即图像锐化。图像锐化的目的是为了突出图像的边缘信息,加强图像的轮廓特征,以便于人眼的观察和机器的识别。因此,从增强的目的看,它是与图像平滑相反的一类处理。

     图像中对象的边缘像素都是两部变化较大的地方。而边缘模糊、线条不均是由于减少了边缘亮度差异的缘故。从数学观点来看,检查图像某区域内灰度的变化就是微分的概念,因此可以通过微分的方法进行图像锐化。根据微分方法是否线性,可将锐化分为线性锐化和非线性锐化两类,下面分别介绍。

    2.3.1 线性锐化滤波

    线性高通滤波器是最常用的线性锐化滤波器,这种滤波器的中心系数都是正的,而周围的系数都是负的。对 3×3 的模板来说,典型的系数取值是:

例:

I1=imread('cameraman.tif');
%读入图像
I2=double(I1);
%滤波之后类型会成为doubl,而原图像是unit8类型,无法相减,
%因此,要把原图像转换为doubl型,这样才能把原图与滤波后的图相减

h1=fspecial('laplacian');
%拉氏变换,作为滤波器的第一个参数传给滤波器

I3=filter2(h1,I2);
%有工作区可见,滤波后类型变为double型,因此原图要转换类型才能相减;
figure,imshow(I1),title('原图像I1');
figure,imshow(I2,[]),title('原图像类型转换为double,I2');

figure,imshow(I3,[]),title('滤波后的图形I3');

I4=I2-I3;
%增强图像为原图像减去滤波后的图像
figure,imshow(I4,[]),title('原图像减去滤波后的图,增强图');






2.3.2 非线性锐化滤波

         对一幅图像施加梯度模算子,可以增强灰度变化的幅度,因此我们可以采用梯度模算子作为图像的锐化算子。此方法也是最常用的非线性锐化滤波方法,而且由数学知识我们知道,梯度模算子具有方向同性和位移不变性,这正是我们所希望的。

     对于离散函数 ( , ) f i j ,利用差分来代替微分。
   一阶差分的定义为:

例:

分别实现用 Sobel 算子、Prewitt 算子和高斯-拉普拉斯算子进行图像锐化。

>> %应用 Sobel 算子进行图像锐化
clear all;
I1=imread('cameraman.tif');
I1=double(I1);%转换类型,因为滤波后的类型为double,不转换无法相减
h1=fspecial('sobel');%指定滤波器的类型
I2=filter2(h1,I1);   %进行滤波
figure,imshow(I1,[]),title('原图');
figure,imshow(I2,[]),title('滤波后的图');
I3=I1-I2;
%%增强图像为原图像减去 Sobel 算子运算后的结果
figure,imshow(I3,[]),title('增强图像');



%应用 Prewitt 算子进行图像锐化

I1=imread('cameraman.tif');
I1=double(I1);%转换类型,因为滤波后的类型为double,不转换无法相减
h1=fspecial('prewitt');%指定滤波器的类型
I2=filter2(h1,I1);%进行滤波
figure,imshow(I1,[]),title('原图');
figure,imshow(I2,[]),title('滤波后的图');
I3=I1-I2;
%%增强图像为原图像减去 Prewitt 算子运算后的结果
figure,imshow(I3,[]),title('增强图');



%应用高斯-拉普拉斯算子进行图像锐化
clear all;
I1=imread('cameraman.tif');
I1=double(I1);%转换类型,因为滤波后的类型为double,不转换无法相减
h1=fspecial('log');%指定滤波器的类型
I2=filter2(h1,I1);%进行滤波
figure,imshow(I1,[]),title('原图');
figure,imshow(I2,[]),title('滤波后的图');
I3=I1-I2;
%%增强图像为原图像减去高斯-拉普拉斯算子运算后的结果
figure,imshow(I3,[]),title('增强图');



更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013


原创文章 100 获赞 339 访问量 56万+

猜你喜欢

转载自blog.csdn.net/MATLAB_matlab/article/details/54133926
今日推荐