《Matlab图像处理的变换以及运算.ppt》由会员分享,可在线阅读,更多相关《Matlab图像处理的变换以及运算.ppt(31页珍藏版)》请在三一办公上搜索。
1、2 图像处理工具箱简介,Matlab是一种基于向量(数组)而不是标量的高级程序语言,因而Matlab从本质上就提供了对图像的支持。数字图像实际上就是一组有序离散的数据,使用Matlab可以对这些离散数据形成的矩阵进行一次性的处理。Matlab对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行图像的读取、显示、写入、信息查询等基本操作,还可以进行图像变换、图像分析与图像增强、图像复原以及压缩编码等操作。,图像的数据类型,在缺省的情况下,Matlab将图像中的数据存储为双精度类型(doub
2、le),即64bit浮点数。这种存储方法的优点在于,使用中不需要数据类型的转换,因为几乎所有的Matlab及其工具箱函数都可以使用double作为参数类型。然而对于图像存储来说,用64bit表示图像数据会导致巨大的存储量,所以Matlab还支持图像数据的另一种类型无符号整型(uint8),即图像矩阵中的每个数据占用1个字节。Matlab及工具箱中的大多数操作及函数(比如最基本的矩阵相加)都不支持uint8类型。uint8的优势仅在于节省存储空间,在涉及运算时将其转换成double型。,本次实验的目标,1.掌握MATLAB中图像的基本类型;2.图像的读取、写入、信息查询与显示。,2.1 图像处理
3、工具箱所支持的图像类型,图像处理工具箱支持4种图像类型,它们是:真彩色图像(RGB images)索引色图像(index images)灰度图像(intensity images)二值图像(binary images),1.真彩色图像,真彩色图像用 R、G、B 3个分量表示1个像素的颜色,所以对1个尺寸为mn的真彩色图像来说,其数据结构就是一个mn3的多维数组。如果要读取图像中(100,50)处的像素值,可以查看三元组(100,50,13).真彩色图像可用双精度存储,此时亮度值的范围是0,1。比较符合习惯的存储方法是用无符号整型存储,亮度值的范围为0,255。,图2.2 真彩色图像的结构,2.
4、索引色图像,索引图像是把像素值直接作为调色板下标的图像。Matlab中的索引色图像包含2个结构,一个是调色板map;另外一个是图像数据矩阵X。调色板是一个有3列和若干行的色彩映像矩阵,矩阵的每行都代表一种色彩,通过3个分别代表红、绿、蓝颜色强度的双精度数,形成一种特定的颜色。图像数据可以是uint8或是双精度的。需要注意的是Matlab中的调色板的色彩强度是0,1中的浮点数,0代表最暗,1代表最亮。,图2.3 索引色图像的结构,3.灰度图像,存储灰度图像只需要一个数据矩阵,数据类型可以是double,值域为0,1,也可以是uint8,值域0,255。存储时不使用调色板,会使用一个默认的调色板来
5、显示图像。,4.二值图像,与灰度图像相同,二值图像只需一个数据矩阵,每个像素只有2个灰度值。二值图像可以采用uint8或double类型存储,工具箱中以二值图像作为返回结果的函数都使用uint8类型。,2.2 图像文件的读写和查询,Matlab为用户提供了特殊的函数,用于从图像格式的文件中读写图像数据。其中,读取图形文件格式的图像需要用imread函数;写入一个图形文件格式的图像需要调用imwrite函数;获取图像的信息需要调用imfinfo;以Mat文件加载或保存矩阵数据用loadsave函数;显示加载到Matlab中的图像用imshow。,图像文件的读写和查询,1.图形图像文件的读取 利用
6、函数imread可以完成图形图像文件的读取操作,其语法如下:一般:A=imread(filename,fmt)索引图像:X,map=imread(filename,fmt),X,map=imread(m83.tif,tif),2.图形图像文件的写入(保存),利用imwrite函数可以完成图形图像文件的写入操作,其语法如下 imwrite(A,filename,fmt)imwrite(X,map,filename,fmt)当利用imwrite函数保存图像时,Matlab 缺省的保存方式就是将其简化到uint8的数据格式。在Matlab中使用的许多图像都是8bit,并且大多数的图像文件并不需要双精
7、度的浮点数据。,imwrite(X,map,lena.bmp,bmp),3.图形图像文件信息的查询,Matlab提供了imfinfo函数用于从图像文件中查询其信息。所获取的信息依文件类型的不同而不同。但是不管哪种类型的图像文件,至少包含下面的内容。文件名。(如果该文件不在当前路径下,还包含该文件的完整路径。)文件格式。文件格式的版本号。文件修改时间。文件的字节大小。图像的宽度(像素)。图像的长度(像素)。每个像素的位数。图像类型。即该图像是RGB(真彩)图像、灰度图像还是索引图像。,查询图像信息,imfinfo(autumn.tif),2.3 图像文件的显示,Matlab 7.0图像处理工具箱
8、提供了一个高级的图像显示函数imshow。其语法格式为 灰度图像 imshow(I)imshow(I,n)imshow(I,low high)二值图像 imshow(BW)索引图像 imshow(X,map)真彩色图像 imshow(RGB),前三种调用格式用来显示灰度图像,其中n为灰度级数目,缺省值为256。low high为图像数据的值域。,索引图像包括一个数据矩阵X,一个颜色映像矩阵map。其中map是一个p3的数据矩阵,其每个元素的值均为0,U之间双精度浮点型数据。map矩阵的每一行分别表示红色、绿色和蓝色的颜色值。而数据矩阵X可以是double和uint8型的,调用格式如下:imsh
9、ow(X,map),1.索引图像及其显示,2 灰度图像及其显示,imshow函数显示灰度图像(1)灰度图像显示最基本的调用格式如下:imshow(I)Matlab 7.0中 imshow函数使用一个灰度级系统调色板(R=G=B)来显示灰度图像。如果I是double型,若像素值为0.0,则显示为黑色,1.0则显示为白色,0.0和1.0之间的像素值将显示为灰影。,灰度图像及其显示,(2)imshow函数显示灰度图像的另一种调用格式是使用明确指定的灰度级数目。imshow(I,n)例如,以下语句将显示一幅32个灰度级的图像I:imshow(I,32),灰度图像及其显示,(3)为了将超过数据范围的数据
10、显示为图像,用户可以直接定义数据范围,其调用格式:imshow(I,low high)其中low,high分别为数据的最大和最小值。如果用户使用一个空矩阵 指定数据范围,imshow将自动进行数据标度。,3.RGB图像及其显示,用imshow函数显示RGB图像基本的调用格式如下:imshow(RGB)参数RGB是一个mn3的数组。对于RGB中的每一个像素(r,c),imshow显示数值(r,c,13)所描述的颜色。每个屏幕像素使用24位颜色系统能够直接显示真彩图像,系统给每个像素的红、绿、蓝颜色分量分配8位(256级)。,4.二进制图像及其显示,显示二进制图像用如下语句:imshow(BW);
11、在Matlab 7.0中,二进制图像是一个逻辑类,仅包括0和1两个数值,像素0显示为黑色,像素1显示为白色。在显示时,也可以通过NOT()命令,对二进制图像进行取反,使数值0显示为白色,1显示为黑色。例如使用 BW=imread(circles.png);imshow(BW);imshow(BW)命令形式,显示的结果如图所示。,二进制图像显示效果,5.直接从磁盘显示图像,通常,在显示一幅图像前首先要调用imread函数装载图像,将数据存储为Matlab 7.0工作平台中的一个或多个变量。但是,如果不希望在显示图像之前装载图像,则可以使用以下命令格式直接进行图像文件的显示:imshow file
12、name 其中,filename为要显示的图像文件的文件名。,imshow rice.pngImshow(rice.png),6.多幅图像的显示,(1)创建新的图像窗口,每个图像显示在一个窗口中。figure,imshow 功能:新建一个图像窗口,用于显示新图像(从而不让新的图像覆盖原来图像),多幅图像文件的显示,调用imshow函数显示图像,如下图所示。I=imread(rice.png)J=filter2(1 2;-1-2,I)%用模板1 2;-1-2对图像滤波 imshow(I)figure,imshow(J,),思考:如果没有figure的话,将产生什么结果?,用imshow显示滤波前
13、后的图像,多幅图像文件的显示,(2)用子图,多个图像显示在一个图像窗口中。Subplot(m,n,k),imshow%绘制并显示m行n 列第k个子图例:X1=imread(rice.png);X2=imread(coins.png);X3=imread(bag.png);subplot(1,3,1),imshow(X1);subplot(1,3,2),imshow(X2);subplot(1,3,3),imshow(X3);,子图显示效果,7.多帧图像的电影片段,一般来说一个tif的图像文件包含有多帧的图像。我们一般用immovie来实现创建电影片段的功能,比如说,一下调用将根据多帧索引图像X创建电影片段。mov=immovie(X,map),mri=uint8(zeros(128,128,1,27);for frame=1:27 mri(:,:,:,frame),map=imread(mri.tif,frame);end mov=immovie(mri,map);movie(mov);,初始化一个包括27帧的图像的文件mri.tif,将mri.tif的每一帧读入图相应的图像帧中,创建并显示电影片段,