利用Matlab实现数字图像处理
2016-03-15毛玮英
摘要:图片中包含了巨大的信息量,而单靠人眼来获取的信息少之又少。Matlab软件提供了一系列矩阵运算和可视化功能,可以提高图像分析能力,在其图像处理工具箱只需要通过调用就可以实现图像的变换,免除了自己编程所花费的时间,并可以直观容易地从处理后的图像中提取想要的信息。
关键词:数字图像处理;Matlab;图像增强;图像分割;边缘检测;几何变换 文献标识码:A
中图分类号:TP391 文章编号:1009-2374(2016)09-0031-03 DOI:10.13535/j.cnki.11-4406/n.2016.09.014
1 概述
随着科学技术的迅猛发展和人们生活节奏的加快,无论是生活娱乐,还是学习工作,都要面对大量图片信息。在面对大量文字介绍和图片介绍时,人们更倾向于去看图片,但人们从中获取的信息却相当少,如何高效直观地提取所要的信息需要借助辅助工具。
2 Matlab在图像处理方面的基本介绍
Matlab是一种以矩阵为基本单元的可视化程序设计语言,功能强大、结构简单、开放性强。其中的图像处理工具箱包含15类,如图像显示函数,图像文件输入、输出函数,图像几何操作函数等。通过上述的不同的图像处理的函数的调用,来实现对图像的不同需求。
3 图像增强
3.1 图像增强的目的
为了改善图像的视觉效果,或者使图像更适合于人或机器进行分析处理,则使用图像增强来达到此目的。
3.2 图像增强的各个方法的对比
在空间域中的图像增强操作可分为区处理和点处理。
3.2.1 点处理。点处理又称为灰度变换,可分为直接灰度变换法和直方图修正法。这两个方法的目的都是使图像的对比度增强,但直接灰度变换法是通过压缩不感兴趣的区域,拉伸感兴趣的区域来达到图像增强的目的,而直方图修正法是通过修正直方图的形状来达到图像增强的目的。并且要注意灰度变换曲线一般都是单输入单输出的(单调的),这样才能使得变换前后从黑到白的顺序不变。如果是多输入单输出则会导致颜色出现混叠,而直方图有助于确定图像分割的阈值但它无法反映某一灰度级像素所在的位置,即丢失了位置信息。其中直方图修正法中分为均衡化和规定化。其中用直方图均衡化处理后的灰度级可能比处理前的少了,原因是原直方图中相对出现次数较少的灰度级被归并到一个新的灰度级上,这种现象称为简并。虽然灰度级少了,但图像反差增大,即达到了图像增强的目的。
3.2.2 区处理。区处理可分为图像平滑和图像锐化。从字面上即可看出这两个区处理是相对的。具体的实现方法是与模板卷积,模板卷积可实现图像平滑、图像锐化、边缘检测等功能。其中图像平滑的目的是消除噪声和模糊图像。有两种方法:邻域平均(均值滤波)法和中值滤波法。图像锐化目的与图像平滑相反,即使模糊的图像便清晰,可以用微分模板做卷积[一阶差分算子(roberts算子、prewitt算子、sobel算子等)或二阶差分算子(拉普拉斯算子)]。一阶微分一般产生更粗的边缘,二阶微分则产生更细的边缘并对细线、孤立点等小细节有更敏感,同样可以达到增强图像边缘的还有非锐化滤波和高增滤波。主要原理是原图像减去平滑后的图像或者是原图像加上图像的高通图像都可以达到增强边缘的效果。
3.3 图像增强在Matlab中的实例及对比
3.3.1 以下是对图像的直方图均衡化的Matlab程序:
I=imread('F:\相册\大二\mwy1.jpg');
>> I=rgb2gray(I);
>> figure(1),subplot(221),imshow(I);%原图
>> m=16;
>> H=histeq(I,m);
>> subplot(222);imshow(H,[]);%直方图均衡化后的图像
>> subplot(223);
>> hist(double(I),m);%原图的直方图
>> subplot(224);
>> hist(double(H),m);%直方图均衡化后
图像为图1:
图1
3.3.2 以下是在椒盐噪声或高斯噪声情况下的对图像平滑的两种方法对比的Matlab程序:
II=imnoise(I,'salt&pepper');%加入椒盐噪声
>> figure(2),subplot(241);imshow(I);%原图
>> subplot(242),imshow(II);%加入椒盐噪声之后的图像
>> H1=[1,2,1;2,4,2;1,2,1]/16;
>> J=imfilter(II,H1);%对加入椒盐噪声的图像进行均值滤波
>> subplot(243),imshow(J);
>> J1=medfilt2(II);%对加入椒盐噪声的图像进行中值滤波
>> subplot(244),imshow(J1);
>> subplot(245),imshow(I);%再次显示原图
>> I2=imnoise(I,'gaussian');%加入高斯噪声
>> subplot(246),imshow(I2);%显示加入高斯噪声后的图像
>> J2=imfilter(I2,H1);%对加入高斯噪声的图像进行均值滤波
>> subplot(247),imshow(J2);%显示加入高斯噪声后均值滤波的图像
>> J3=medfilt2(I2);%对加入高斯噪声的图像进行中值滤波
>> subplot(248),imshow(J3);%显示加入高斯噪声后中值滤波的图像
图像为图2:
图2
从图中可以很直观地看出均值滤波可以很好地消除椒盐噪声,中值滤波可以很好地消除高斯噪声。
4 图像分割与边缘检测
4.1 图像分割与边缘检测的目的
在工业生产和医学分析等领域,为了将感兴趣的图像提取出来需要将这些图像与背景分割开,因为对图像区域的提取各有不同,故没有通用的分割方法,需要根据具体的问题来选取分割方法。
4.2 图像分割的方法
图像分割的方法有灰度阈值法、边缘检测与边缘连接、区域生长、区域分裂与各并、分水岭分割算等。
灰度阈值法的关键是如何确定合适阈值来使得图像分割的目的达到最优,其中的最优阈值法就是计算出一个阈值,使得总的分类误差概率最小。
区域生长是先选取一个种子像素,然后将与种子像素性质相似的像素集合起来形成一个区域,但要有先验知识才能达到想要的目的。而区域分裂与合并则不需要先验知识,它先利用一致性准则将图像分割成若干个区域,然后利用相似性准则将满足相似性的合并在一起。
边缘检测可以提取出图像的轮廓,即求梯度值,大于阈值的设为1,小于阈值的设为0,便得到了二值图像。但通过梯度算子和LOG算子卷积所得到的边缘并不连续,虽然LOG算子比梯度算子提取的细边缘更多,但仍存在连续性不足的问题。而canny边缘检测能够将不连续的状态连续起来。它考虑了梯度方向的问题,边缘细且连续有灰度。
4.3 图像分割与边缘检测在matlab程序与图片对比
>> figure(4),subplot(131),imshow(I);%原图
>> Q4=edge(I,log);
>> subplot(132),imshow(Q4);%用log算子卷积得到的边缘图像
>> Q5=edge(I,canny);
>> subplot(133),imshow(Q5);%用canny算子卷积得到的边缘图像
图像为图3:
图3
5 二值形态学
二值形态学的运算有腐蚀和膨胀、开运算(先腐蚀再膨胀)和闭运算(先膨胀再腐蚀)。
在图像处理中,笔者发现利用腐蚀运算所达到的效果与用美图秀秀等美图软件中的人眼放大功能类似。
Matlab程序如下:
>> BW1=imread('F:\相册\大二\mwy1.jpg');
>> BW1=rgb2gray(BW1);
>> SE=strel(‘arbitrary,eye(5));
>> BW2=imerode(BW1,SE);
>> figure(5),subplot(121),imshow(BW1);
>> subplot(122),imshow(BW2);
所示图像如图4:
图4
图5
形态学在matlab中的实例与对比。可以利用开运算和闭运算的组合运用来去除噪声,先用开运算对图像进行处理,再进行闭运算后可去除大部分的噪声。
Matlab程序如下:
>> BW1=imread('F:\相册\大二\mwy1.jpg');
>> BW1=rgb2gray(BW1);
>> BW2=imnoise(BW1,salt&pepper);
>> SE=strel(‘arbitrary,eye(5));%设置任意的一个结构元素
>> BW3=imerode(BW2,SE);%腐蚀运算
>> BW4=imdilate(BW3,SE);%膨胀运算
>> BW5=imdilate(BW4,SE);
>> BW6=imerode(BW5,SE);
>> figure(6),subplot(231),imshow(BW1);%显示原图像
>> subplot(232),imshow(BW2);%显示加入噪声后的图像
>> subplot(233),imshow(BW3);%显示腐蚀后的图像
>> subplot(234),imshow(BW4);%显示再膨胀后的图像
>> subplot(235),imshow(BW5);%显示再腐蚀后的图像
>> subplot(236),imshow(BW6);%显示再膨胀后的图像
图像如图5所示。
6 结语
通过利用Matlab来学习图像处理,直观形象地说明处理图像的方法,在以后的学习中将会对图像处理有更深入的了解。
参考文献
[1] 何东健.数字图像处理(第2版)[M].西安:西安电子科技大学出版社,2008.
作者简介:毛玮英(1995-),女,河南洛阳人,河南大学学生,研究方向:通信工程。
(责任编辑:黄银芳)