大学实验报告学院:计算机科学与技术专业:信息安全班级:131姓名学号实验组实验时间2016/4/22指导教师成绩实验项目名称图像基本操作实验目的利用MATLAB软件,熟悉图像的数据矩阵操作、图像的类型转换及图像的存储等基本操作。1.熟悉图像矩阵的基本操作2.掌握图像数据类型转换及图像类型转换3.掌握图像文件的读写4.掌握图像及灰度图像直方图的显示5.掌握图像缩放和旋转实验要求利用MATLAB软件,熟悉图像的数据矩阵操作、图像的类型转换及图像的存储等基本操作。1.熟悉图像矩阵的基本操作2.掌握图像数据类型转换及图像类型转换3.掌握图像文件的读写4.掌握图像及灰度图像直方图的显示5.掌握图像缩放和旋转实验原理1.关于图像矩阵MATLAB中图像数据以矩阵方式的存储。所以有必要学会关于矩阵的操作,由于篇幅有限,这里只作简要的介绍。生成矩阵的函数有:eye生成单位矩阵ones全1阵zeros全零阵rand均匀随机阵randn正态随机阵2.图像数据类型及图像类型2.1图像数据类型转换MATLAB中图像数据矩阵的存储方式为双精度(double)类型即64位浮点数。而存储图像时MATLAB有时采用无符号整型(uint8)即图像矩阵中的每个数据占用一个字节。由于大多数运算和函数(比如最基本的矩阵加减运算)都不支持uint8类型,所以运算时通常要将图像转换成double型。函数double将数据转换为双精度浮点类型,调用格式为:X64=double(x8)/2562.2图像类型及转换在MATLAB中,一幅图像可能包含一个数据矩阵,也可能有一个颜色映像表矩阵。MATLAB图像处理工具箱支持四种图像类型,其区别在于数据矩阵元素的不同含意。它们是:真彩色图像索引图像灰度图像二值图像(1)真彩色图像真彩色图像又称RGB图像,对于一个尺寸为M×N的彩色图像来说,在MATLAB中则存储为一个M×N×3的多维数组,像素的颜色由保存在像素位置上的R、G、B的强度值的组合来确定。如果需要知道图像A中(x,y)处的像素值,则可以使用这样的代码A(x,y,1:3)。(2)索引图像MATLAB中的索引图像包含两个结构,一个是调色板,一个是图像数据矩阵。调色板是一个m×3的色彩映射矩阵,矩阵的每一行都代表一种色彩,与真彩色图像相同,通过3个分别代表红、绿、蓝颜色强度的双精度数,形成一种特定的颜色。调色板通常和索引图像存在一起,当读入图像时,MATLAB同时加载调色板和图像。(3)灰度图像灰度图像就是只有强度信息,而没有颜色信息的图像。存储灰度图像只需要一个数据矩阵,矩阵的每个元素表示对应位置像素的灰度值,灰度图像的数据类型可以是doubIe类型,这时值域为[0,1],也可以uint8类刑,值域是[0,255]。(4)二值图像二值图像就是只有黑白两种值的图像,我们可以把它看作是特殊的灰度图像。二值图像只需一个数据矩阵来存储,每个像素只取0或1。MATLAB提供了若干函数,用于图像类型的转换,这些函数如下所示:rgb2gray将RGB图像转换成灰度图像Gray2ind将灰度图像转换成索引图像Im2bw设定阈值将图像转换为二值图像Im2double将图像数据阵列转换为double型Im2unit8将图像数据阵列转换为unit8型Im2unit16将图像数据阵列转换为unit16型Ind2gray将索引图像转换为灰度图像Ind2rgb将索引图像转换成真彩色图像2.3图像读写及显示MATLAB为用户提供了专门的函数以从图像格式的文件中读写图像数据。(1)图像文件的读取利用imread函数可以完成图像文件的读取操作,常见调用格式为:A=imread(FILENAME,FMT)其作用是将文件名用字符串FILENAME表示的、扩展名用字符串FMT(表示图像文件格式)表示的图像文件中的数据读到矩阵A中。如果FILENAME所指的为灰度图像,则A为M×N的二维矩阵;如果FILENAME所指的为RGB图像,则A为M×N×3的三维矩阵。(2)图像文件的写入(保存)利用imwrite函数完成图像的写入操作,也完全支持上述各种图像文件的格式,其常用的调用格式为:imwrite(A,FILENAME,FMT)(3)图像文件的显示MATLAB的图像处理工具箱提供了多种图像显示技术。例如,imshow函数可以直接从文件显示多种类型的图像;image函数可以将矩阵作为图像显示;colorbar函数可以用来显示颜色条。imshow函数是最常用的显示各种图像的函数,格式为:imshow(I,n);%显示灰度矩阵I,n设置显示的灰度值范围(级数),默认值为256。imshow(RGB)%显示真彩色图像imshowfilename%直接显示图像,但图像数据不在MATLAB的workspace中。可以将多幅图像显示在一个图形窗口中,达到这一目的有两种方法:一种方法是联合使用subplot函数和imshow函数,但此方法在一个图形窗口只能有一个调色板;另一种方法是联合使用subplot函数和subimage函数,此方法可在一个图形窗口内使用多个调色板。subplot函数将一个图形窗口划分为多个显示区域,其调用格式如下:subplot(m,n,p)subplot函数将图形窗口划分为m(行)×n(列)个显示区域,并选择第p个区域作为当前绘图区。(4)灰度直方图的显示MATLAB图像处理工具箱提供了imhist函数来计算和显示图像的直方图,imhist函数的语法格式为:imhist(I,n)imhist(X,MAP)其中imhist(I,n)计算和显示灰度图像I的直方图,n为指定的灰度级数目,默认值为256。imhist(X,MAP)计算和显示索引色图像X的直方图,map为调色板。3.图像的几何运算3.1图像的缩放MATLAB图像处理工具箱中的函数imresize可以用三种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。imresize函数的语法格式为:B=imresize(A,m,method),返回原图像A的m倍放大的图像(m小于1时效果是缩小)。这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。B=imresize(A,[numrowsnumcols]),返回的图像B具有由[numrowsnumcols]指定的行、列数。3.2图像的旋转在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值法。imrotate的语法格式为:B=imrotate(A,angle,method)函数imrotate对图像进行旋转,参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。实验仪器Pc一台,MATLAB7.0实验步骤练习图像的读取、显示和保存图像数据,步骤如下:(1)使用命令figure(1)开辟一个显示窗口(2)读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内显示RGB图像、二值图像和灰度图像,注上文字标题。(3)保存转换后的灰度图像和二值图像(4)在同一个窗口显示转换后的灰度图像的直方图(5)将原RGB图像的R、G、B三个分量图像显示在figure(2)中,观察对比它们的特点,体会不同颜色所对应的R、G、B分量的不同之处。(6)将图像放大1.5倍,插值方法使用三种不同方法,显示放大后的图像,比较不同插值方法的结果有什么不同。将图像放大到其它倍数,重复实验;(7)图像顺时针旋转30度,插值方法使用三种不同方法,显示旋转后的图像并比较结果有什么不同。实验内容实验数据clc;closeallclearallI=imread('flower','jpg');subplot(2,2,1),imshow(I),title('原图像')Ibw=im2bw(I);imwrite(Ibw,'flowernbw','jpg');subplot(2,2,2),imshow(I),title('二值图像')Igray=rgb2gray(I);imwrite(Igray,'flowergray','jpg');subplot(2,2,3),imshow(Igray),title('灰度图像')subplot(2,2,4),imhist(Igray),title('灰度直方图')clc;closeallclearallfigure(2);I=imread('flower','jpg');I1=I(:,:,1);subplot(1,3,1),imshow(I1),title('红色分量')I2=I(:,:,2);subplot(1,3,2),imshow(I2),title('绿色分量')I3=I(:,:,3);subplot(1,3,3),imshow(I3),title('蓝色分量')clc;closeallclearallI=imread('flower','jpg');Iscale1=imresize(I,2.5);Iscale2=imresize(I,2.5,'bilinear');Iscale3=imresize(I,2.5,'bicubic');imwrite(Iscale1,'flowerfazj','jpg');imwrite(Iscale2,'flowerfasxx','jpg');imwrite(Iscale3,'flowerfassc','jpg');figure(3):imshow(Iscale1),title('最邻近法放大2.5倍');figure(4):imshow(Iscale2),title('双线性插值放大2.5倍');figure(5):imshow(Iscale3),title('双三次插值放大2.5倍');Irot1=imrotate(I,30);Irot2=imrotate(I,30,'bilinear');Irot3=imrotate(I,-30,'bicubic');实验总结通过这次实验我们利用MATLAB软件,熟悉图像的数据矩阵操作、图像的类型转换及图像的存储等基本操作。熟悉图像矩阵的基本操作,掌握图像数据类型转换及图像类型转换,图像文件的读写,图像及灰度图像直方图的显示和图像缩放和旋转。指导教师意见签名:年月日注:各学院可根据教学需要对以上栏木进行增减。表格内容可根据内容扩充。