MATLAB图像处理介绍第2章MATLAB图像处理工具箱本章教学安排2学时讲解内容:1.Matlab简介。2.Matlab中常用的基本命令。3.图像处理工具箱介绍4.Matlab处理的图像类型和文件格式。5.Matlab图像的基本操作。2.1Matlab简介MATLAB名字是MatrixLaboratory的意思。由美国的MathWorks公司出品,它的基本数据单位是矩阵。它的指令表达式与数学,工程中常用的形式十分相似,故用它来解决问题比用C,Fortran等语言完成相同的事情简捷的多。在大学,数学,工程学,科学的介绍性课程和高级性课程中,MATLAB是标准的教学工具。在工厂,MATLAB是高生产率研究发展和分析的可选择的工具。MATLAB是一种直观性的语言和专业运算的环境。它已成为工程计算机方面世界上公认的标准。它被用于各种各样的应用领域,包括信号和图像处理,控制系统,设计,地球与生命科学,金融与经济,还有仪器测试。MATLAB的主要特点包括:①快速准确的数字运算;②图形可视化并用于分析数据;③交互式语言和编程环境;④图形用户界面设计的工具;⑤可结合一些外部应用程序,包括C、C++、Fortran、Java、COM部分和Excel;⑥支持来自文件和外部设备的输入数据,且支持用低标准的文件的输入输出(加上附加的产品对入数据库和附加硬件的访问(存取)产生附加的产品);⑦把MATLAB的应用转到带有编译器的C和C++。由于直接内嵌了大量的优化数学程序,MATLAB使工程师和科学家能够专注于自己实质性的工作,避免了耗时的寻找﹑开发﹑调试以及维护代码的工作。2.2Matlab中常用的基本命令。(1)矩阵生成①对于一般的矩阵MATLAB的生成方法有多种。最简单的方法是从键盘直接输入矩阵元素。直接输入矩阵元素时应注意:各元素之间用空格或逗号隔开,用分号或回车结束矩阵行,用中括号把矩阵所有元素括起来。例1-1在工作空间产生一个3×3矩阵A可用MATLAB语言描述如下:A=[123;456;789]或A=[123456789]A=123456789②对于特殊的矩阵可直接调用MATLAB的函数生成。用函数zeros生成全0矩阵:格式B=zeros(m,n)生成m×n的全0阵。用函数ones生成全1矩阵:格式B=ones(m,n)生成m×n的全1阵。用函数eye生成单位阵:格式B=eye(m,n)生成m×n的单位矩阵,其中对角线元素全为1,其他元素为0。用函数rand生成随机矩阵:格式B=rand(m,n)生成m×n的随机矩阵。③矩阵中的元素值和线性代数一样,我们可采取下标来表述矩阵元素,同时也可以利用下标对矩阵元素进行修改。例如对例1-1中的矩阵A,如果输入A(4)则显示:ans=2若输入A(1,2),结果仍为:ans=2可见矩阵是按列存储的。若输入A(1,2)=6,显示结果为:A=163456789若要选取A的第二行,可以输入A(2,:),则显示ans=456•(2)矩阵的运算•矩阵的运算有基本运算和函数运算两种类型。基本运算包括矩阵的加、减、乘、除、乘方、求转置、求逆等,其主要特点是通过MATLAB提供的基本运算符+、-、*、/(\)、^等即可完成。•例1-2•A=[1,2,3;4,5,6]•B=[6,5,4;3,2,1]•C=A+B%•D=B'%计算矩阵B•E=A*D%做矩阵乘法,必须要满足矩阵乘法的基•%E应该是2•F=det(E)%求E•G=E^(-1)%求E的逆•问题:设有矩阵A和B,试问A*B和A.*B的区别?(3)基本语句•1)循环语句•MATLAB的循环语句包括for循环和while循环两种类型。•①for•语法格式:•for循环变量=起始值:步长:终止值•end•②while•语法格式:•while••end•其执行方式为:若表达式为真(运算值非0),则执行循环体;若表达式为假(运算结果为0),则退出循环体,执行end后的语句。2)条件转移语句有if和switch两种。①if语句;MATLAB中if语句的用法与其他高级语言相类似,其基本语法格式有以下几种:格式一:ifend格式二:if执行语句1else执行语句2end格式三:if逻辑表达式1执行语句1elseif逻辑表达式2执行语句2end②switchswitch语句的用法与其他高级语言相类似,其基本语法格式为:switch表达式(标量或字符串)case值1语句1case值2语句2…otherwise语句nend(4)MATLAB函数①函数及其调用方法函数定义行:MATLAB语言在M文件的第一行用关键字“function”把M文件定义为一个函数,并指定它的名字(必须和文件名相同),同时也定义了函数的输入和输出参数。例如:求最大值函数“max”function[Y,I]=max(x)函数体其中,“max”为函数名,输入参数为“x”,输出参数为“Y”和“I”。•②函数调用•函数调用的过程实际上就是参数传递的过程。例如,在一个脚本文件里调用函数“max”可采用如下方式:•n=1:20;•a=sin(2*pi*n/20);•[Y,I]=max(a);•该调用过程把变量“a”传给了函数中的输入参数“x”,然后把函数运算的返回值传给输出参数“Y”和“I”。其中,Y是a序列的最大值,I是最大值Y对应的坐标值。注意:1.自己编写函数时,所用的函数名应和保存的m文件文件名相同。2.分清矩阵相乘和点乘的区别。3.注意文件命名。必须以字母开头。有的同学喜欢以数字或中文开头,这是错误的!2.3.1常用图像格式图像格式是指图像文件的存储格式。MATLAB中常用的图像格式有:bmp,cur,gif,hdf,ico,jpg或jpeg,pcx,png,tif或tiff等。2.3Matlab处理的图像类型和文件格式。2.3.2MATLAB图像类型MATLAB支持五种图像类型,即二值图像、索引图像、灰度图像、RGB图像和多帧图像阵列。二值图像:数据存储类型,Logical,元素值为0或1的矩阵;索引图像:把像素值直接作为RGB调色板下标的图像。一幅索引图像包含一个数据矩阵X和一个调色板矩阵map,数据矩阵为double或uint8或uint16;调色板矩阵总是一个m*3(m表示颜色数目)的double型矩阵且矩阵元素的值域为[0,1]。Map矩阵的每一行指定一个颜色的R,G,B颜色分量。•RGB图像:double型或uint8型或uint16型,又称真彩色图像,在MATLAB中存储为m*n*3的数据矩阵,它表示图像中每个像素的红,绿,蓝3个颜色分量的数值。•多帧图像阵列:由多帧图像组成,每一帧图像可以为前4种图像中的一种,但组成一个多帧图像阵列的图像必须为同一种。2.4图像处理工具箱简介MATLAB图像处理工具箱的函数,按具体功能可以分为以下几类:•图像显示•几何操作•图像注册•邻域和块操作•线性滤波和滤波器的设计。•图像变换,•形态学分析•图像分析与图像增强。•图像恢复•颜色映射和颜色空间转换•Matlab中图像处理相关工具箱主要有:•ImageAcquisitiontoolbox•ImageProcessingToolbox•SignalProcessingToolbox•WaveletToolbox•StatisticsToolbox•MatlabCompiler•读者也可以根据需要编写自己的函数以满足特定的需要,也可以将图像处理工具箱和其他工具箱结合起来使用。•可通过“help函数名”来查看各函数的使用方法。•2.5.1图像文件信息查询在MATLAB中,可以使用imfinfo函数来获取图像处理工具箱支持的任何格式图像文件的信息。该函数语法格式如下:info=imfinfo(filename,fmt)info=imfinfo(filename)info=imfinfo(URL,...)例1-1图像文件信息查询info=imfinfo('cameraman.tif')2.5Matlab图像的基本操作2.5.2图像文件的读取MATLAB通过函数imread完成图像的读取,该函数语法格式如下:A=imread(filename,fmt)[X,map]=imread(filename,fmt)[...]=imread(filename)[...]=imread(URL,...)[...]=imread(...,idx)(CUR,GIF,ICO,andTIFFonly)[...]=imread(...,'frames',idx)(GIFonly)[...]=imread(...,ref)(HDFonly)[...]=imread(...,'BackgroundColor',BG)(PNGonly)[A,map,alpha]=imread(...)(ICO,CUR,andPNGonly)•例1-2数字图像的打开I=imread('cameraman.tif')2.5.3图像文件的写入MATLAB函数imwrite来存储图像文件,该函数的语法格式如下:imwrite(A,filename,fmt)imwrite(X,map,filename,fmt)imwrite(...,filename)imwrite(...,Param1,Val1,Param2,Val2...)例1-3图像文件写入I=imread('cameraman.tif');imwrite(I,'E:\test1.tif')执行程序后,可以看到在路径E:\下写入的图像文件“test1.tif”2.5.4图像的显示MATLAB包含两个显示图像的函数image和imagesc;另外MATLAB图像工具箱中也包含两个显示图像的函数imview和imshow。1.MATLAB图像显示函数image函数image函数的语法格式如下:image(C)image(x,y,C)image(x,y,C,'PropertyName',PropertyValue,...)image('PropertyName',PropertyValue,...)handle=image(...)•例1-4image函数的应用•I=imread('cameraman.tif');•figure(1);•image(100,100,I);•%设置图像左上角坐标为(100,100)•colormap(gray(256));imagesc函数imagesc函数具有对显示的数据进行自动缩放的功能。函数语法如下:imagesc(C)imagesc(x,y,C)imagesc(...,clims)imagesc('PropertyName',PropertyValue,...)h=imagesc(...)•例1-5imagesc函数显示图像和image函数显示图像比较当采用image函数显示一个值域为[0,1]的double型数组时,不能正常显示为灰度图的形式,而imagesc函数对数据有自动缩放功能,可以显示。MATLAB工具箱中提供了两个图像显示函数imview和imshow,在实际应用中,这两个函数应用更为广泛。imshow函数imshow函数显示一幅数字图像时,将自动设置图像窗口、坐标轴和图像属性。该函数的语法格式如下imshow(I,n)imshow(I,[lowhigh])imshow(BW)imshow(X,map)imshow(RGB)imshow(...,display_option)imshow(x,y,A,...)imshowfilenameh=imshow(...)•例1-6灰度图像的显示例1-7索引图像的显示[X,map]=imread('canoe.tif');imshow(X,map);例1-8RRB图像的显示、RGB=imread('peppers.png');imshow(RGB);•例1-9二进制图像的显示•Imview,在图像阅览器中显示图像,语法格式为:•Imview(I)Imview(RGB)Imview(X,map)Imview(I,r