基于MATLAB的图像处理技术
摘 要: 一般情况下,拍摄到的图像由于光照不足等原因,可能有较多的噪声,且边界特征不清晰。因此,我们需要对这些图像进行增强或分割处理。介于此,本文介绍了基本的图像处理技术,并用实验验证了各种方法的优缺点,对进一步学习和寻找更好图像处理方法具有实用意义。
关键词: MATLAB; 图像处理; 边缘检测;
1 引言
MATLAB是由美国的Mathworks公司推出的用于数值计算和图像处理的系统环境,具有很强的数值计算和图像处理能力。MATLAB是以矩阵为单位进行处理的,它的指令表达式与数学、工程中常用形式十分相似,故用MATLAB来解决问题要比C、C++等语言简捷得多。
MATLAB在学术界和工程界广受欢迎,其主要优势和特点有如下几方面:
(1) 友好的工作平台和编程环境;(2) 简单易用的编程语言; (3) 强大的图形处理功能;(4) 功能强大的工具箱,包括功能性工具箱和科学性工具箱。(5)良好的交互性和开放性。
2 MATLAB在图像处理中的应用
2.1图像增强
图像增强是一类基本的图像处理技术,主要目的是改善图像的视觉效果,提高图像成分的清晰度,使得图像更有利于计算机的处理。图像增强技术分为点运算增强、空域增强、频域增强三类。点运算增强包括调整灰度、直方图增强、图像间的代数运算增强等;空域增强包括平滑和锐化两种;频域增强包括低通滤波、高通滤波、同态滤波等。下面介绍
几种常用的方法。
(1) 直方图均衡化。该方法的基本思想是把原始图像的像素值均匀地分布在图像的各个区间上,使视觉效果得到改
善。直方图均衡化可用函数histeq()来实现。
如下图1.1,该图像直方图比较集中,边缘比较模糊,使用MATLAB编程,将图像进行直方图均衡化处理,结果如图2.1.2所示。原始图像及均衡化后图像的直方图如图2.1.3所示。
图2.1.1 原始图像 图2.1.2 直方图均衡化后的图像
图2.1.3 原始图像及其均衡化后的直方图
(2)对比度调整。有些图像对比度很低,灰度级集中在一个比较窄的范围内,MATLAB提供了函数imadjust()来调整图像灰度值到指定范围。将图2.1.1的灰度范围[130/255 190/255]映像到[0 0.9],结果如图2.1.4所示。
图2.1.4 对比度调整后的图像
(3) 平滑与锐化滤波。空域增强可用平滑和滤波来实现。平滑的目的有两类:一类是在提取较大的目标前去除小的细节或者是将目标内的小间断连接起来;另一类是消除一些离散性和随机性的噪声。而锐化是跟平滑相反的一类处理,目的是突出图像的边缘信息,加强图像的轮廓特征,以便于人眼和机器识别。图2.1.5揭示了空域增强的不同方法对钢珠打肥皂图像的不同处理结果。图2.1.5(b)是用低通滤波处理的结果,与原始图像对比,噪声减少,但边界特征也被减弱。图2.1.5(d)是高通滤波处理的结果,得到的边缘信息比较准确,但信息很少,且随着截止频率增大得到的信息会越少。中值滤波的结果(图2.1.5(c))比较清楚地显示了图像的边缘特征。由此得出结论:中值滤波跟高通滤波在图像处理中有较强的锐化能力,尽管在处理过程中也会减弱的图像边界特征;不同的空域增强方法在不同的图像、不同的处理过程中会有不同的效果,实际应用中应该根据经验来选用。
(a)原始图像 (b)低通滤波
(c)中值滤波 (d)高通滤波
图2.1.5 不同的滤波实验结果对比
2.2边缘检测
图像的边缘就是指图像灰度发生空间突变的像素的集合。灰度的突变一般常用导数来描述和检测。边缘检测的基本思想是先利用边缘增强算子,突出图像中的局部边缘,然后定义像素的“边缘强度”,通过设置阈值的方法提取边缘点集。但是由于噪声和图像模糊,检测到的边界可能会有间断的情况发生。所以边缘检测包含两项内容:用边缘算子提取边缘点集;在边缘点集中去除某些边缘点,填充一些边缘点,将得到的边缘点集连接为线。
图2.2.1 边缘检测的基本步骤
2.2.1 简单的边缘检测算子
常见的边缘检测算子有Roberts算子、Sobel算子、Prewitt算子、LOG算子和Canny算子等。下面具体介绍各个算子及其特点:
(1) Roberts算子 该算子是图像处理的最基本的边缘检测算子,它把任意一对相互垂直方向上的差分看成是梯度的近似求解,采用对角线方向相邻两像素之差,即某一像素点(i,j)的Roberts算子值为:
G[i,j]=︱f[i,j]-f[i+1,j+1]︱+︱f[i+1,j]-f[i,j+1]︱
用卷积模板
把上式表示为︱︱+︱︱
Roberts算子提取边缘的结果:边缘较粗,边缘定位不是很准确,容易丢失一部分边缘,同时没有经过图像平滑计算,因此不能抑制噪声。
(2) Sobel算子和Prewitt算子 Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声的影响。Sobel算子包含两组3x3的矩阵,分别为横向及纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。实际使用中,常用如下两个模板来检测图像边缘。
图2.2.2 Sobel算子
单独使用Sobel算子做边缘检测,边缘定位精度不高,有时还可能对非边缘像素的响应大于某些边缘处的响应或者响应差别不是很大,造成漏检或误检,但是它对噪声具有较好的鲁棒性。
Prewitt算子和Sobel算子提取边缘的结果差不多。在提取边缘的同时它对噪声具有平滑作用,能够抑制一定的噪声。由于Prewitt边缘检测算子是通过八个方向模板对图像进行卷积运算,因此运算量比较大。
(3)LOG算子 LOG算子是个二阶算子,将在边缘处产生一个陡峭的零交叉。LOG算子在对图像进行差分运算之前,先对图像使用高斯低通滤波器进行平滑处理,以减少噪声,因此缓解了一般差分对噪声响应很敏感的问题。然后使用Laplacian算子找出图像中的陡峭边缘,可以得到较好的边缘定位精度,但也会造成边缘被漏检的情况。另外,它对噪声过于敏感,使它的使用大为受限。
图2.2.3 Laplacian算子
(4) Canny算子 Canny算子是根据对信噪比与定位乘积进行测度,得到最优化逼近的一阶算子。其实质是用一个准高斯函数做平滑运算,然后以带方向的一阶微分算子定位导数最大值。Canny 方法使用两个阈值来分别检测强边缘和弱边缘,且当弱边缘与强边缘相连时,弱边缘才会包含在输出中。
Canny算子提取的边缘最为完整,而且边缘的连续性很好,定位比较精确。但在实际工作应用中编程较为复杂且运算较慢。
2.2.2 边缘检测应用
在MATLAB中,使用edge()函数检测边缘。edge()函数在检测边缘时可以指定一个灰度阈值,只有满足这个阈值
条件的点才视为边界点。综合上述几种算子,编写相应代码,对图2.1.1进行边缘检测,结果如图2.2.4。
(a)原始图像 (b)sobel算子
(c) Roberts算子 (d) prewitt算子
(e) LOG算子 (f) canny算子
图2.2.4 各种算子检测结果
显然,由图2.2.4看,Roberts算子、Sobel算子、Prewitt算子的处理结果连续性不好,LOG算子的处理结果不精确,而Canny算子的处理结果更多更精确地保留了图像的边缘特征,具有较好的连续性。
3 结论
图像中目标的边缘和轮廓是图像的重要特征的综合,图像处理是一些模糊图像能被有效利用的前提条件。本文只是应用了MATLAB图像处理工具箱的部分功能,除以上介绍的一些基本的图像处理功能外,MATLAB还有许多基于数学形态学与二值图像的操作函数, 如二值图像的膨胀运算dilate()函数、腐蚀运算erode()函数等,本文不再作详细介绍。由此可见,MATLAB语言简洁,功能强大且涉及的专业领域广泛,利用它的图形处理与分析工具,综合多种算法,对图像进行处理,可以大大提高实验效率,为工作提供良好的条件。