摘要
本文介绍了MATLAB 语言的特点,基于MATLAB的数字图像处理环境,介绍了如何利用MATLAB及其图像处理工具箱进行数字图像处理,并通过一些例子来说明利用MATLAB图像处理工具箱进行图像处理的方法。主要论述了利用MATLAB实现图像增强、二值图像分析等图像处理。
关键词:MATLAB,数字图像处理,图像增强,二值图像
一、 Matlab的介绍
MATLAB 是MATrix LABoratory(“矩阵实验室”)的缩写,是由美国MathWorks 公司开发的集数值计算、符号计算和图形可视化三大基本功能于一体的,功能强大、操作简单的语言。是国际公认的优秀数学应用软件之一。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多。
MATLAB包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类。
MATLAB的主要特点。
(1)语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。可以说,用MATLAB进行科技开发是站在专家的肩膀上。
(2)运算符丰富。由于MATLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。
(3)MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。
(4)程序限制不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。
(5)程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。
(6)MATLAB的图形功能强大。在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。MATLAB还具有较强的编辑图形界面的能力。
(7)MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
(8)功能强大的工具箱是MATLAB的另一特色。MATLAB包含两个部分:核心部分和各种可选的工具箱。
(9)源程序的开放性。
二、图像处理的原理
所谓数字图像就是把传统图像的画面分割成如图2-1所示的被成为像素(picture element, 简称pixel。有时候也用pel这一简写词)的小的离散点,各像素的灰度值也是用离散值即整数值来表示的。数字图像(digital imagine)和传统的图像即模拟图像(picture)是有差别的。
图2-1 数字图像
数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
数字图像处理主要研究的内容有以下几个方面:(1)图像变换;(2)图像编码压缩;(3)图像增强和复原;(4)图像分割;(5)图像描述;(6)图像分类(识别)。
(1)图像变换。由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计
算量,而且可获得更有效的处理(如傅里叶变换可在频域中进行数字滤波处理)。目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。
(2)图像编码压缩。图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。
(3)图像增强和复原。图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;如强化低频分量可减少图像中噪声影响。图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型”,再采用某种滤波方法,恢复或重建原来的图像。
(4)图像分割。图像分割是数字图像处理中的关键技术之一。图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。
(5)图像描述。图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。对于特殊的纹理图像可采用二维纹理特征描述。随着图像处理研究的深入发展,已经开始进行三维物体描述的研究,提出了体积描述、表面描述、广义圆柱体描述等方法。
(6)图像分类(识别)。图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类。
三、MATLAB图像处理的应用
图像处理工具包是由一系列支持图像处理操作的函数组成的。所支持的图像
处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT变换等) 、图像分析和统计、二值图像操作等。下面就MATLAB 在图像处理中各方面的应用分别进行介绍。 (1) 图像文件格式的读写和显示。MATLAB 提供了图像文件读入函数 imread(), [X,map]=imread(filename,fmt)(A=imread(filename,fmt));用来读取如:bmp、tif、tiffpcx 、jpg 、gpeg 、hdf、xwd等格式图像文;图像写出函数 imwrite() , [X,map]=Imread('canoe.tif');Imwrite(X,map, 'canoe.tif','Compression','none','WriteMode','append');还有图像显示函数 image()、imshow()等等。image(x,y,C),x,y分别为图像显示位置的左上
角坐标,C表示所需显示的图像。
(2) 图像处理的基本运算。MATLAB 提供了图像的和、差等线性运算 ,以及卷积、相关、滤波等非线性算。
(3) 图像变换。MATLAB 提供了一维和二维离散傅立叶变换(DFT) 、快速傅立叶变换(FFT) 、离散余弦变换 (DCT) 及其反变换函数,以及连续小波变换(CWT)、离散小波变换(DWT)及其反变换。
(4) 图像的分析和增强。针对图像的统计计算MATLAB 提供了校正、直方图均衡、中值滤波、对比度调整、自适应滤波等对图像进行的处理。
(5) 图像的数学形态学处理。针对二值图像,MATLAB 提供了数学形态学运算函数;腐蚀(Erode)、膨胀(Dilate)算子,以及在此基础上的开 (Open)、闭(Close)算子、厚化 (Thicken) 、薄化 (Thin) 算子等丰富的数学形态学运算。 MATLAB支持的集中图像文件格式:
(1) PCX(Windows Paintbrush)格式。 (2) BMP(Windows Bitmap)格式
(3) HDF(Hierarchical Data Format)格式。 (4) JPEG(Joint Photographic Experts Group)格式。 (5) TIFF(Tagged Image File Format)格式。 (6) XWD(X Windows Dump)格式。
(7) PNG(Portable Network Graphics)格式。
MATLAB中有四种基本的图像类型: (1)索引图像 (2)灰度图像 (3)二进制图像 (4)RGB图像
以下具体对灰度图像和二进制图像进行分析,并运用MATLAB进行仿真验证。
四、图像处理
4.1基本图像处理
(1)首先显示两张图片,程序如下: clear all; close all;
I=imread('C:\\Documents and Settings\\Administrator\\×ÀÃæ\\wawa1.jpg');%用imread读入图片
J=imread('C:\\Documents and Settings\\Administrator\\×ÀÃæ\\wawa2.jpg'); subplot(221); imshow(I); subplot(224); imshow(J);
(2)实现两图像相减
程序如下:
I=imread('C:\\Documents and Settings\\Administrator\\桌面\\wawa1.jpg');%用imread函数读入图片
K=imread('C:\\Documents and Settings\\Administrator\\桌面\\wawa2.jpg'); Z=imsubtract(I,K);%用imsubtract函数实现两图片相减的功能 imshow(Z)%显示相减后的图片 title('两娃娃图片相减')
(3)实现两图像相加 程序如下:
I=imread(' C:\\Documents and Settings\\Administrator\\桌面\\wawa1.jpg');%用imread函数读入图片
J=imread(' C:\\Documents and Settings\\Administrator\\桌面\\wawa2.jpg'); K=imadd(I,J,'uint8');%用imadd函数实现两图片相加的功能 imshow(K)
title('两图像相加')
(4)图像切割
程序如下:
I=imread('C:\\Documents and Settings\\Administrator\\桌面\\wawa3.jpg'); i=imcrop(I,[70,70,60,60]);%用imcrop函数实现切割图片的功能 subplot(121); imshow(I); title('娃娃原图');
subplot(122); imshow(i);
title('切割后的娃娃图片');
(5)图像旋转
程序如下:
clear all; close all;
I=imread('C:\\Documents and Settings\\Administrator\\桌面\\wawa4.jpg'); i=imrotate(I,-45,'bilinear');% 用imrotate函数实现旋转图片的功能 subplot(121); imshow(I); title('娃娃原图'); subplot(122); imshow(i);
title('旋转后的娃娃');
4.2灰度图像的灰度级显示
4.2.1图像求反
对图像求反是将原来的灰度值翻转,简单的说就是使黑变白,使白变黑。 X1=imread('C:\\Documents and f=X2(i,j); Settings\\Administrator\\×ÀÃæ\\xiao g(i,j)=0; wanzi.GIF'); if(f>=0)&(f<=f1) f1=200; g(i,j)=g1-k*f; g1=256; else k=g1/f1; g(i,j)=0; [m,n]=size(X1); end X2=double(X1); end for i=1:m end for j=1:n figure,imshow(mat2gray(g))
2灰度级图像 clear all;
J=imread('C:\\Documents and Settings\\Administrator\\桌面\\xiaowanzi.GIF'); J=imread('C:\\Documents and Settings\\Administrator\\桌面\\xiaowanzi.GIF'); subplot(131); imshow(J)
title('小丸子原图') subplot(132);
imshow(J,[100,200]); %灰度范围为[100,200]的图像 title('灰度范围[100,200]') subplot(133);
imshow(J,20); %灰度为20的图像 title('灰度等级20')
图 灰度级范围[100,200]的图像
用系统默认的灰色来显示一副灰度图像,程序如下: load clown clims=[10 60]; imagesc(X, clims); colormap(gray); 显示结果如图所示。
图 系统默认灰度图像
使用浅绿色来显示该图像,程序如下: load clown clims=[10 60]; imagesc(X, clims); colormap(winter);
显示结果如图所示,效果明显不同。
图9-10颜色变换后图像
空域滤波增强
为在邻域内实现增强操作,常可利用模板与图像进行卷积。每个模板实际上是一个二维数组,其中各个元素的取值定了模板的功能,这种模板操作也称为空域滤波。
图像增强
频域增强
1高通滤波
高通滤波也称高频滤波器,它的频值在0频率处单位为1,随着频率的增长,传递函数的值逐渐增加;当频率增加到一定值之后传递函数的值通常又回到0
值或者降低到某个大于1的值。在前一种情况下,高频增强滤波器实际上是依照能够带通滤波器,只不过规定0频率处的增益为单位1。
实际应用中,为了减少图像中面积大且缓慢变化的成分的对比度,有时让0频率处的增益小于单位1更合适。如果传递函数通过原点,则可以称为laplacian滤波器。
n阶截断频率为d0的Butterworth高通滤波器的转移函数为:
H(u,v)=
1
1[d0/d(u,v)]2nMATLAB实现Butterworth高通滤波器代码所示:
I1=imread('C:\\Documents and
Settings\\Administrator\\桌面\\wawa1.jpg'); figure,imshow(I1) f=double(I1); g=fft2(f); g=fftshift(g); [N1,N2]=size(g); n=2; d0=5; n1=fix(N1/2); n2=fix(N2/2); for i=1:N1 for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2); if d==0 h=0; else
h=1/(1+(d0/d)^(2*n)); end
result(i,j)=h*g(i,j); end end
result=ifftshift(result); X2=ifft2(result); X3=uint8(real(X2)); figure,imshow(X3)
低频
图像的能量大部分集中在幅度谱的低频和中频度,而图像的边缘和噪声对应于高频部分。因此能降低高频成分幅度的滤波器就能减弱噪声的影响。
Butterworth 低通滤波器是一种物理上可以实现的低通滤波器,n阶,截断频率为d0的Butterworth低通滤波器的转移函数为:
H(u,v)=
1
1[d(u,v)/d0]2n用MATLAB实现Butterworth低通滤波器的代码所示:
I1=imread('Saturn.tif'); figure,imshow(I1) I2=imnoise(I1,'salt'); figure,imshow(I2) f=double(I2); g=fft2(f); g=fftshift(g); [N1,N2]=size(g); n=2; d0=50; n1=fix(N1/2);
n2=fix(N2/2); for i=1:N1 for j=1:N2
d=sqrt((i-n1)^2+(j-n2)^2); h=1/(1+0.414*(d/d0)^(2*n)); result(i,j)=h*g(i,j); end end
result=ifftshift(result); X2=ifft2(result); X3=uint8(real(X2));
figure,imshow(X3)
五、二值图像分析
二值图像中所有的像素只能从0和1这两个值中取,因此在MATLAB中,二值图像用一个由0和1组成的二维矩阵表示。这两个可取的值分别对应于关闭和打开,关闭表征该像素处于背景,而打开表征该像素处于前景。以这种方式来操作图像可以更容易识别出图像的结构特征。
可以通过调用MATLAB提供的im2bw()来实现,方法如下: I=imread(' C:\\Documents and Settings\\Administrator\\桌面\\xiaowanzi.GIF '); figure,imshow(I) J=im2bw(I); figure,imshow(J) title('二值化处理')
二值形态学的基本运算
数学形态学的基础是集合运算,我们把二值图像A看作是二维坐标点的集合,包含图像里为1的点,B通常是一个小的集合,作用类似于模板。 膨胀(Dilation)运算A⊕B 腐蚀(Erosion)运算AB 开(Open)运算
闭(Close)
1、运算在MATLAB中运用dilate()函数来实现膨胀操作。
此外,MATLAB中还提供了预定义的形态函数bwmorph。
I=imread(' C:\\Documents and Settings\\Administrator\\桌面\\xiaowanzi.GIF'); J=im2bw(I);
BW1=bwmorph(J,'dilate'); subplot(1,2,1); subimage(J);
title('二值处理的图像'); subplot(1,2,2); subimage(BW1);
title('使用bwmorph函数膨胀')
2、腐蚀
腐蚀的算符为,A用B来腐蚀写作AB。其定义为AB{x|(B)xA} 用B来腐蚀A得到集合是B完全包括在A中时B的中心像素位置的集合。MATLAB中用erode函数来实现腐蚀操作。
I=imread(' C:\\Documents and Settings\\Administrator\\桌面\\xiaowanzi.GIF '); J=im2bw(I); SE=eye(5);
BW1=imerode(J,SE); subplot(1,2,1); subimage(J);
title('二值处理的图像'); subplot(1,2,2); subimage(BW1);
title('使用erode函数腐蚀')
二值分析进行图像处理综合应用
5.3.1 噪声滤除
将开启和闭合结合起来可构成噪声滤除器。开启就是先对图像进行腐蚀后膨
胀其结果。闭合就是先对图像进行膨胀后腐蚀其结果。
开启和闭合这两种运算都可以除去比结构元素小特定图像细节,同时保证不产生全局几何失真。开启运算可以把结构元素小的突刺滤掉,切断细长搭接而起到分离作用。闭合运算可以把比结构元素小的缺口或孔填充上,搭接短的间断而起到连通的作用。
将开启和闭合结合起来可构成形态学噪声滤除器。开启结果将背景上的噪声去除了;再进行闭合则将噪声去掉。 MATLAB代码:
I1=imread(' C:\\Documents and
Settings\\Administrator\\桌面\\xiaowanzi.GIF');
subplot(2,2,2); subimage(I3);
title('加入椒盐噪声的图像') subplot(2,2,3); subimage(I4);
title('开启操作所得的图像'); subplot(2,2,4); subimage(I5);
title('再关闭操作所得的图像')
I2=im2bw(I1); I2=double(I2);
I3=imnoise(I2,'salt & pepper'); I4=bwmorph(I3,'open'); I5=bwmorph(I4,'close'); subplot(2,2,1); subimage(I2);
title('二值处理的图像');
图噪声滤除处理
边界提取
二值图像中,所谓的对像就是值为1的连接在一起的像素的集合。例如以下的代表了一个简单的3*3的方形对像
0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1.1 1 1 0 0 0 0 0 0 0 0
有4-连接和8-连接边沿
I1=imread('C:\\Documents and Settings\\Administrator\\桌面\\xiaowanzi.GIF'); I2=im2bw(I1); I3=bwperim(I2); subplot(1,2,1); subimage(I2);
title('二值处理的图像'); subplot(1,2,2); subimage(I3);
title('边界处理的图像')
图 边界提取处理
因篇幅问题不能全部显示,请点此查看更多更全内容