Matlab图象处理工具箱ppt课件.ppt
Matlab图象处理工具箱,3.1Matlab图象处理初步,.,读入、显示图象,Imread函数用于读入各种图像文件,其语法格式为:I=imread(filename.fmt)X,map=imread(filename.fmt)其中参数fmt指定了图像的格式。可选的值为curbmphdficojpgpcxpngtif和xwd。默认的文件目录为当前MATLAB的工作目录。,.,读入、显示图象,在MATLAB中读取图像还经常使用load这个命令。load的功能是从*.mat文件中读取变量。Load格式为: load filename %把名为filename的*.mat文件中存储变量读入MATLAB的工作空间,各变量名为存储时的变量名。load filename X Y %把名为filename的*.mat文件中存储的X和Y变量读入MATLAB的工作空间。,.,读入、显示图象,Load filename.extLoad filename-ASCTTLoad filename-MATLoad(filename)Load filename.ext可以读取名为filename的ASCII文件,文件可以存储各列用空格分开的ASCII格式的变量值. Load filename-ASCTT和Load filename-MAT决定是以ASCII格式还是以二进制格式读取变量,.,读入、显示图象,当用字符串格式文件名称时, Load(filename)可以直接读取名为filename的*.mat文件.例如I,map=imread(pout.tif);save newfile I mapload newfile Iwhos,.,读入、显示图象,MATLAB及图像处理工具箱的显示功能非常强大,不仅可以用来显示各种类型的图像,还可以用多种方式显示图像及图像序列。下面对这些函数进行介绍。1、imageImage是MATLAB本身提供的最原始的图像显示函数,其使用格式如下:image(X);,.,读入、显示图象,colormap(map);为了用image函数显示由矩阵表示的图像,MATLAB将矩阵的每个元素对应到当前调色板的一行,并取这一行的颜色值作为该点的颜色。因此显示图像时必须先指定调色板,才能真实地表示图像。例如:MATLAB预存的一组图像数据,包含图像矩阵X和调色板矩阵map,下面的,.,读入、显示图象,语句用来显示图。 load clownimage(X)colormap(map),.,读入、显示图象,说明:clown也是MATLAB预存的一个mat文件,里面包含一个数据矩阵X和一个调色板,map。另一个与image函数相似的函数是imagesc,两者的区别在于imagesc能够自动调整值域范围:figure,imagesc(X),.,读入、显示图象,ImshowImshow函数是最常用的显示各种图像函数,其语法如下:imshow(I,n)imshow(I,low high)imshow(BW)imshow(X,map),.,读入、显示图象,Imshow(RGB)imshow(I,n)和imshow(I,low high)用于显示灰度图像,n为灰度级数目,默认值为256。low high为图像数据的值域。在很多情况下,经过处理的图像数据的值域都会发生变化。比如对一幅double型的灰度图像滤波后,图像数据的值域已不在0,1中了,如果还用前面的显示方法,则得不到正确的结果.如果清楚地知道数据的值域low high可以使用调用imshow(I,low high).否则可用空间,.,读入、显示图象,向量为参数,即imshow(I,).imshow(BW)用于显示二值图像,图像的数据类型可以是double和uint8,值域为或者;imshow(X,map)用于显示索引图像,X为数据图像矩阵,map为调色板; Imshow(RGB)用于真彩色图像。colorbarColorbar函数用于显示颜色条,并将图像中使用到的色彩排列在图像旁边,这样可以根据图像的色彩确定各像素的值。这对于用图像表示灰度范围不在通常范围的情况非常有用。,.,读入、显示图象,Colorbar函数语法格式如下:colorbar(vert)colorbar(horiz)colorbar(h)Colorbar其中colorbar(vert)、colorbar(horiz)分别指定了颜色的显示方式为垂直或水平,默认值为垂直。colorbar(h)将颜色条放在指定的坐标轴h上。,.,读入、显示图象, I=imread(trees.tif); imshow(I) colormap(jet(64) colorbar,.,读入、显示图象,Montage多帧图像指的是包含不止一幅图像的图像,MATLAB中支持多帧图像的文件格式有HDF和TIFF两种。多帧图像的显示方式也有两种,一种是显示多帧图像中的一帧,另一种是同时显示多帧图像的所有帧。例如读取图像mri的第3帧,我们可以用下列语句实现:,.,读入、显示图象,mri=uint8(zeros(128,128,1,27);for frm=1:27mri(:,:,:,frm),map=imread(mri.tif,frm);endimshow(mri(:,:,:,3),map)另外还可以同时显示多帧图像中的所有帧,这是由montage函数完成,其语法为:,.,读入、显示图象,Montage(I) %拼接灰度图像Montage(X,map) %拼接索引图像Montage(RGB) %拼接真彩色图像下面的例子将序列图像拼接显示.load mrimontage(D,map),.,读入、显示图象,Immovie在MATLAB中,我们不但可以单独显示多帧,同时显示所有帧,还可以用动画的方式显示帧,Immovie函数即可以将多帧图像转换成MATLAB动画,其语法格式为:Mov=immovie(X,map)Immovie只能使用索引图像,因此如果要将其它类型的图像转换成动画,首先要转换成索引图像。要在MATLAB中播放这个动画,首先要指定调色板。,.,读入、显示图象,一般可以用下例语句放映动画:Colormap(map),movie(mov)例如load mrimov=immovie(D,map);colormap(map);movie(mov),.,读入、显示图象,SubimageMATLAB提供的subplot函数虽然能将一个图像窗口分成几个部分,但同一个图像窗口内只能有一个调色板。而MATLAB图像处理工具箱的Subimage函数可在一个图像窗口内使用多个调色板,使得各种图像能在同一个图像窗口中显示。Subimage函数的语法格式为:,.,读入、显示图象,subimage(X,map) %在一个窗口里显示多个索引图像。subimage(I) %在一个窗口里显示多个灰度图像。subimage(RGB) %在一个窗口里显示多个真彩图像。subimage(x,y,) %将图像按指定的坐标(x,y)显示.下面的例子将显示两幅具有不同调色板的图像.,.,读入、显示图象, load trees X2,map2=imread(forest.tif); subplot(121),subimage(X,map) subplot(122),subimage(X2,map2),.,读入、显示图象,I=imread(pout.tif) ; imshow(I); whos;size(I);,Name Size Bytes Class I 291x240 69840 uint8 arrayGrand total is 69840 elements using 69840 bytes,.,读入、显示图象,图像读取函数为:imread,并把读取出来的图像pout.tif存储在一个名为I的数组中,然后使用imshow来显示数组I,使用whos命令来查看图像数据I是如何存储在内存中,用size命令查看图像的大小。,.,读入、显示图象,I=imread(pout.tif) ; imshow(I); whos;size(I);f=imread(D:myimage lena256.jpg) ;,.,实现直方图均衡化,上图的pout.tif图像对比较低,为了观察图像当前状态下分布情况,可以通过使用imhist函数创建描述该图像灰度分布的直方图。首先使用figure命令创建一个新的图像窗口,避免直方图覆盖图像数组I的显示结果。其程序如下:,.,实现直方图均衡化,I=imread(pout.tif) ; imshow(I); figure, imhist(I);,.,实现直方图均衡化,由运行结果可知,图像没有覆盖整个灰度范围0,255,仅在较狭窄范围内,同时图像中灰度值的高低区分不明显,无较好的对比度。可以通过调用histeq函数将图像的灰度值扩展到整个灰度范围中,从而达到提高数组I的对比度。其程序如下:,.,实现直方图均衡化,I2=histeq(I); figure, imshow(I2); figure, imhist(I2);,.,保存图象,将新调节后的图像I2保存到磁盘中。假设希望将该图像保存为JPG格式图像文件,使用imwrite函数并指定一个文件名,该文件的扩展名为.jpg。其程序为:,.,保存图象,imwrite(I2, pout2.jpg) ;imwrite(I2, D:myimage pout2.jpg) ;I3=imread(pout2.jpg);Figure,imshow(I3),.,检查新生成文件的内容,利用imfinfo函数可以观察上述语句写了什么内容在磁盘上。值得注意的是:在imfinfo函数语句行未尾不要加上分号,以保证MATLAB能够显示图像输出结果;另外,要保证此时的路径与调用imwrite时的路径一致。其程序如下:imfinfo(pout2.jpg),.,图象处理的应用例子,估计图象背景图像rice.tif中心位置的背景亮度高于其它部分的亮度,使用imopen函数和一个半径为15的圆盘形结构元素对输入的图像I进行形态打开操作。形态打开操作将会删除那些不完全包括在半径为15的圆盘中的对象,从而实现背景亮度的估计,其程序如下:,.,图象处理的应用例子,clear;close all;I=imread(rice.tif) ;imshow(I);bg=imopen(I,strel(disk,15);,.,图象处理的应用例子,clear; close all;I=imread(rice.tif) ;imshow(I);bg=imopen(I,strel(disk,15);I2=imsubtract(I,bg);figure, imshow(I2);,原始图象减去背景图象将背景图像bg从原始图像I中减去,从而创建一个新的、背景较为一致的图像,其程序如下:,.,图象处理的应用例子,bg=imopen(I,strel(disk,15);I2=imsubtract(I,bg);figure, imshow(I2);I3=imadjust(I2,stretchlim(I2),0,1);figure, imshow(I3);,调节图象对比度从图可看出,修改后的图像很暗,可以使用imadjust函数来调节图像的对比度,并显示调节后的效果。,.,图象处理的应用例子,I3=imadjust(I2,stretchlim(I2),0,1);figure, imshow(I3);level=graythresh(I3);bw=im2bw(I3,level);figure,imshow(bw),对图象作二值化变成二进制图象通过使用最大类间方差法找到图片的一个合适的阈值函数graythresh和im2bw创建一个新的二值图像bw,其程序如下:,.,图象处理的应用例子,level=graythesh(I3);bw=im2bw(I3,level);figure,imshow(bw)labeled,numobjects =bwlabel(bw,4);,检查图象中的对象个数为了确定图像中的米粒的个数,使用bwlabel(标记二值图像中的白点)函数,该函数标示了二值图像bw中的所有相关成分。,numobjects= 101,.,图象处理的应用例子,使用imcrop命令来选择并显示已标记的对象和部分背景内的像素。选择一个较小的矩阵来进行这项操作,以保证显示的像素值不会引起MATLAB命令窗口听滚动。以下语句将使用imcrop命令进行交互式的操作。当鼠标位于图像范围内时,其形状会变成十字形,通过点击鼠标并进行拖动来选择一个标记区域。选择完成后, imcrop命令将显示用户指定的标记区域:,.,图象处理的应用例子,grain=imcrop(labeled)观察标记矩阵的一个好办法就是将其显示为一个伪彩色的索引图像。在伪彩色图像中,标记矩阵中的每一个对象都将被映射为相关调色板中的不同颜色,使用函数label2rgb来达到这一目的。函数label2rgb可以指定调色板、背景颜色以及标记矩阵中的对象将如何被映射为调色,其调用格式如下:,.,图象处理的应用例子,RGB = label2rgb(L) RGB = label2rgb(L, map) RGB = label2rgb(L, map, zerocolor) RGB = label2rgb(L, map, zerocolor, order)L为标记矩阵(可由labelmatrix, bwlabel, bwlabeln, watershed返回) map为n*3的矩阵,可以通过MATLAB的colormap函数来返回,比如colormap(jet)等。也可以根据要求自己定义。默认为colormap(jet)。 zerocolor对应于标记0的颜色 ,默认为白色。 order为标记矩阵和颜色映射表对应方式,默认为noshuffle,即根据L的数值来对应颜色。另外可以取值为shuffle,说明使用伪随机方式来对应。,.,图象处理的应用例子,RGB_label=label2rgb(labeled,spring,c,shuffle);figure,imshow(RGB_label),.,图象处理的应用例子,计算图象中对象的统计属性regionprops命令可以用来调节图像中对象或区域的属性,并将这些属性返回到一个结构体数组中。当调用regionprops函数来返回一个包含图像中所有米粒阈值的基本属性度量结构体时,使用以下MATLAB函数来计算阈值对象的一些统计属性:首先使用max获取最大的米粒大小,其调用格式如下:,.,图象处理的应用例子,STATS = regionprops(L,properties) 描 述:测量标注矩阵 L中每一个标注区域的一系列属性。L 中不同的正整数元素对应不同的区域, 例如:L 中等于整数1的元素对应区域1;L 中等于整数2的元素对应区域2;以此类推。 返回值STATS 是一个长度为 max(L(:)的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。 properties 可以是由逗号分割的字符串列表,包含字符串的单元数组,单个字符串 all 或者 basic。如果 properties 等于字符串 all,则所有下述字串列表中的度量数据都将被计算,如果properties 没有指定或者等于 basic,则属性 Area、Centroid 和BoundingBox 将被计算。,.,图象处理的应用例子,labeled,numobjects =bwlabel(bw,4);graindata=regionprops(labeled,basic);allgrains=graindata.Area;max(allgrains),计算图象中对象的统计属性,ans= 404,.,图象处理的应用例子,graindata=regionprops(labeled,basic);allgrains=graindata.Area;max(allgrains);Biggrain=find(allgrains =404),使用find命令来返回这个最大尺米粒的标记号,其程序如下:,biggrain= 59,.,图象处理的应用例子,获取米粒的平均大小:average=mean(allgrains)绘制一个包含20柱的直方图来说明米粒大小分布情况。Hist(allgrains,20);,计算图象中对象的统计属性,average= 175.0396,.,