《数学软件课程设计MATLAB关于中图像处理与动画制作问题的研究.doc》由会员分享,可在线阅读,更多相关《数学软件课程设计MATLAB关于中图像处理与动画制作问题的研究.doc(21页珍藏版)》请在三一办公上搜索。
1、目录1 MATLAB7.0 支持的图像文件格式12 图像对象属性的详解1 2.1 CData属性处理法12.2 CDataMapping 属性处理法12.3 XData 和 YData 属性处理法.23 图像文件的读取.24 图像文件的写入65 图像文件信息的查询.66 图像文件的显示.86.1 使用图像浏览器显示图像86.2 使用 imshow 函数相思图像106.3 图像的裁剪处理.107 动画制作127.1逐帧动画的制作127.2 轨迹方式制作动画137.3 综合循环制作动画和轨迹制作动画14MATLAB中关于图像处理与动画制作问题的研究摘要一、MATLAB 中图像处理MATLAB 基本
2、系统提供了几个简单图像处理函数,利用这些函数对图像进行读写和显示。MATLAB 还有一个功能更强的图像处理工具箱,可以对图像进行更专业的处理。1.用imread 函数将图像文件读入 MATLAB 工作空间,用imwrite 函数将图像数据和色图数据一起写入图像文件。其函数调用格式分别为A=imread(fname) 和imwrite(A,fname,fmt) 。其中,fname 为读/写的文件名,fmt 为图像文件格式。2.用image 和imagesc 来将图像显示。为了保证图像的显示效果,还应使用colormap函数设置图像的色图。二、MATLAB 中的动画制作MATLAB 具有动画制作能
3、力,一种是储存一系列各种类型的二维或三维图,然后将它们像电影一样按次序播放出来,称为逐帧动画。另一种是描绘质点运动轨迹的动画,称为轨迹动画。1.MATLAB 中逐帧动画用到的函数: getfrname、moviein 和movie 。其中,getframe 函数的功能是截取一幅画面信息,形成一个很大的列向量;moviein(n) 函数的功能是建立一个足够大的n列矩阵,用来保存n幅画面的数据,以备播放。Movie(m,n) 函数功能是播放m所定义的画面n次,默认时一次。2.MATLAB中用comet和comet3 函数展现质点在二维和三维空间的运动轨迹。这种轨迹称为彗星轨迹曲线,函数调用格式为:
4、comet(x,y,p) 和comet3(x,y,z,p) 。其中,x、y、z组成曲线的坐标参数,p是彗星长度的参数,默认是0.1。在二维图形中彗星长度为y向量长度的p倍。在三维图形中,彗星长度为z向量长度的p倍。关键字:图像处理;色图;动画制作;彗星轨迹A INVESTIGATION ABOUT DEAL IMAGE AND CREATE CARTOONABSTRACTNO.1. Deal images in matlabMatlab basic system provide several simple images deal functions, use those functions
5、to read and write or display images. In addition, matlab include a strong image dealing function toolbox, may deal images much professional.Fist. Use function imread to read imagefile in matlab workplace, and use function imwrite to write images data and colormap in imagefile. Their transfer format
6、are : A=imread(fname) and imwrite(A,fname,fmt). Among the the transfer format, fname represent for the filename of the imagefile to be read or written, fmt represent for the filefrmat of the image.Second. Matlab use the functions image and imagesc to display images. To ensure the images display effe
7、ct, yet use function colormap to intercalate the images colormap.NO.2. Create cartoon in matlabMatlab can create cartoon. Matlab can save a series of two dimensions images and three dimensions images, then play them out in turn like a movie. This called gradual frame cartoon. Another is to describe
8、a contrail of a particle, which called contrail cartoon.Fist. The functions in matlab to create gradual frame cartoon include getfrname、moviein and movie. Among those functions, getfrname is use to cut and adopt the information of one image to consist a big list vector; moviein(n) is use to build a
9、big enough matrix which include n list to save n images data, to prepare for play; movie(m,n) is use to play the menu define by matrix m n times, one time acquiescence.Second. Use function comet to exhibit the contrail of one move particle in two dimensions and comet3 to exhibit the contrail of one
10、move particle in three dimensions. This contrail curve called comet contrail curve. The function transfer formats are comet(x,y,p) and comet3(x,y,z,p). Among them, x, y and z consist the coordinate parameter, p is the length parameter of the comet, zero point one is acquiescence. In two dimensions,
11、comet length is p times of the abs y vector, and in the three dimensions, comet length is p times of the abs z vector.Key words: image deal; colormap; create cartoon; comet contrail 前言MATLAB 是 MATrix LABoratory (矩阵实验室) 的缩写,它自从 1984 年又美国 Math Works 公司推出以来, 经过不断改进和发展, 现已成为国际公认的优秀的工程应用开发环境。MATLAB 广泛应用于
12、工程计算和数值分析领域,它以矩阵为数据操作的基本单位,使得运算变得非常的简捷、方便、高效。MATLAB 提供了十分丰富的数值计算函数,且与符号计算语言相结合,使其具有符号运算的功能。MATLAB 还有很强的绘图功能,可以绘制各种二维、三维图形,并且可以对图形进行修饰和控制,以增强图形的表现效果。MATLAB 具有编程语言的基本特征,可以在其中使用 BASIC、FORTRAN、C 等传统的编程语言进行程序设计。这样,简单易学,编程效率高。MATLAB 包含基本部分和各种工具箱,其基本部分是其核心内容,工具箱对其功能有扩充作用。在高等学校,无论是在课程教学,还是在课程设计、毕业设计等培养环节中,M
13、ATLAB 的应用都十分普遍,由于MATLAB 提供了很多的底层工具,底层程序,这样为使用者减少了很多的底层工作,简捷高效地解决了相关的问题。数学领域里,很多问题的解决是非常繁多的数据,对于数值计算和符号计算,无论计算多么的完善,结果多么的准确,人们还是难以直接从大量的数据中感受它们的具体含义和内在规律,这时,图形就解决了数据不能解决的问题。人们可以通过图形直观感受科学计算的全局意义和内在本质。MATLAB 的图像表达能力也是非常强大的,除了可以绘制二维、三维图形外,MATLAB 还可以对图形进行标注、视点、颜色、光照等修饰。MATLAB 绘图命令有两类:一是直接对图形句柄进行操作的底层绘图命
14、令,二是在底层命令的基础上建立起来的高层绘图命令。高层绘图命令简单明了,方便高效。使用者不需要考虑过多的绘图细节,只需给出基本参数就可以得到所需图形。本课题研究主要针对高层绘图命令及处理命令。1 MATLAB7.0 支持的图像文件格式3MATLAB7.0 支持的图像文件格式(括号里的表示相应文件格式的全称):bmp (Windows Bitmap)、 cur (Windows Cursor resources)、 gif (Graphics Interchange format)、 hdf (Hierarchical Data Format)、 ico (Windows Icon resour
15、ces)、 jpg 或 jpeg (Joint Photographic Expers Group)、 pbm (Portable Bitmap)、 pcx (Windows Paintbrush)、 pgm (Portable Graymap)、 png (Portable Network Graphics)、 pnm (Portable Anymap)、 ppm (Portable Pixmap)、 ras (Sun Raster)、 tif or tiff (Tagged Image File Format)、 xwd (X Windows Dump)。2 图像对象属性的详解3MATLA
16、B 中可以调用 image 函数和 imagesc 函数来创建图像对象。这里与线条对象、片块对象、表面对象以及文本对象类似的,另外,用户还可以设置以调整其屏幕显示外观的属性其中包括 CData属性、CDataMapping 属性、XData 属性和 YData 属性等。2.1 CData属性处理法这种处理法会得到一个数据阵列,当其数据阵列是一维的时候图像为索引图像或灰度图像;当去数据阵列式三维的时候显示的将是真彩色图像。2.2 CDataMapping 属性处理法这种处理法是决定图像时索引色图像还是灰度图像。如果将该属性设置为 “direct”, 则得到索引色图像;如果将其属性设置为 “sca
17、led”, 则得到灰度图像。2.3 XData 和 YData 属性处理法这两个属性决定了图像的坐标系统,对于一个mn 的图像来说,其中XData属性默认1 n, YData 属性默认1 m,这样设置的意义如下:(1)图像数据矩阵的左边的列具有一个值为1的x 坐标。(2)图像数据矩阵的右边的列具有一个值为n的x 坐标。(3)图像数据矩阵的上边的列具有一个值为1的y 坐标。(4)图像数据矩阵的下边的列具有一个值为n的y 坐标。3 图像文件的读取MATLAB 对第一节里所列出的图像文件格式的读取,这种读取不需要像其他编程语言需要编写大量的代码,只要调用 MATLAB 提供函数即可。工具箱里的相关函
18、数有imread、imfinfo和imwrite。下面是其使用方法。(1)A=imread(fname) ,“fname” 为指定的灰色或彩色图像,有的版本为: A=imread(fname,fmt)。 “fmt” 为指定文件的格式。如果该文件不存在当前目录下或MATLAB 的路径的目录下,需要指定文件在系统里的完整路径。在imread 函数找不到指定路径的图像文件时,MATLAB 会试图打开文件名为“fname.fmt” 的图像文件。再者就无法读取图像文件,所以在指定文件路径时不能出错,否则讲得不到需要的图像数据。例如在 MATLAB 的命令窗口输入 A=imread(47.jpg) 后得到
19、一个很大的图像数据矩阵如图 3-1 所示。图 3-1 图像47.jpg 的数据矩阵Imread函数返回的是图像数据,如果A是一个mn的二维数组,则图像为灰色图像,如果A是一个nm3的三维数组,则图像是彩色图像。(2)X,map=imread(fname), 同样,有的版本为: X,map=imread(fname,fmt),这个函数用于读取索引色图像,其中X用于储存索引图像数据,也就是相关颜色映射表的序号值,map 用于储存于该索引色图像相关颜色的映射表。 Fname 和fmt 的意义和前述一样。例如在MATLAB的命令窗口输入 X,map=imread(47.jpg) 后得到图像的索引数据矩
20、阵和色图数据矩阵如如 3-2 和3-3 所示。图 3-2 图像 47.jpg 的索引数据矩阵图 3-3 图像 47.jpg 的色图数据矩阵(3)=imread(fname), 该语句在执行图像读取任务时,会自动从图像内容判断其图像类型,即并不显示地给出图像的类型 fmt,二是推断得到的。该语句左边的“”表示根据待读取的图像数据是真实像素值或索引色图像的相应颜色映射表的序号值而分别采用如语句 (1) 和语句 (2) 不同的形式。(4)=imread(URL,), 该语句用来读取引自Internet URL 的图像,URL要求必须包含协议类型 (protocol type),如:http:/ 。其
21、中 imread 函数的第二个参数就是读取Internet URL。语句左边的形式同语句(3)。4 图像文件的写入MATLAB 是用函数 imwrite 来实现图像文件的写入的,与 imread 相对。其语句格式通常有以下几种:(1)imwrite(A,fname,fmt),该语句是将图像数据 A 写入到由 fname 指定的输出文件中去,储存的格式由 fmt 指定。和 imread 函数一样,如果指定的输出文件 fname 不在当前的目录下或者MATLAB 的目录下,必须指明其完整路径。其中A不能为空,对于灰度图像来说,A是一个mn 的数组,对于彩色图像来说,A 是一个 mn3 的三维数组。
22、当指定的格式为 TIFF 时,imwrite 函数可以接受mn4 的三维数组。(2)imwrite(X, map, fname, fmt),该语句用来写入索引图像,其中 X 表示索引色图数据组,map 表示其关联的颜色映射表,fname 为 fmt 的输出文件。(3)imwrite(, fname), 该语句写入文件时,从 fname 的扩展名推断其文件格式,但是要求该扩展名必须与MATLAB7.0 所支持的文件格式一致。(4) imwrite(, Param1, Val1, Patam2, Val2), 该语句用于指定HDF、FPEG、PBM、PGM、PNG、PPM 和TIFF 等类型输出文
23、件的不同参数。例如,当写入一个 HDF 文件时,可以指定输出图像的质量 (Quality)、压缩性 (Compression)和写入模式 (WriteMode),而写入 JPEG 文件时,则可以指定像素位数(BitDepth)、注释 (Commet:Empty or not)、模式 (Mode:lossy or lossless)和质量 (Quality)等。5 图像文件信息的查询1在MATLAB7.0 中,可以使用imfinfo 函数查询图像文件的信息。其语句调用格式如下:info=imfinfo(文件名,文件格式)info=imfinfo(文件名)由该函数获取的信息依赖于文件类型的不同而不
24、同,但是至少应包含下列内容:文件名(文件名)FileModDate (文件最后一次修改的时间);FileSize (文件的大小,单位是字节);Format (文件的格式);Width (图像的宽度,单位为像素);Height (图像的高度,单位为像素);BitDepth(每个像素的位数);ColorType (图像类型,即是 RGB 图像、灰度图像还是索引色图像)。例如,随便选一张图像来查询:输入:info=imfinfo(21.jpg) 运行得:info = Filename: 21.jpg FileModDate: 09-十月-2010 19:05:16 FileSize: 53354 F
25、ormat: jpg FormatVersion: Width: 670 Height: 503 BitDepth: 24 ColorType: truecolor FormatSignature: NumberOfSamples: 3 CodingMethod: Huffman CodingProcess: Sequential Comment: 6 图像文件的显示MATLAB7.0中用于图像显示的方式有两种,一种是使用MATLAB 图像浏览器 (Image Vieer);另一种方式是使用MATLAB 的通用图像窗口,通过调用imshow 函数实现。6.1 使用图像浏览器显示图像调用函数:i
26、mview(文件名),并把该文件位于MATLAB 当前路径。例如在MATLAB 的命令窗口输入:imview(21.jpg)运行得到图 6-1-1 的运行结果,在6-1-1图形中我们可以看到上面的各种按钮,左起:第一个是对图像的较小的显示,如图 6-1-2 所示,同时还可以对该图像进行进一步的编辑;第二个是显示图像的矩阵数据,其数据非常之多,如图 6-1-3 所示;第三个是图像的信息按钮,点击后后可以看到图像的各种信息,如图 6-1-4 所示,在 6-1-4 图中,我们可以看到也可以对图像进行进一步的处理;还有其他几个按钮,分别有不同的功能。比如说对图像进行缩放,窗口的拖动,图像比例放大工具等
27、。图 6-1-1 用浏览器浏览图像 图 6-1-2 图像全面视图 图 6-1-3 图像数据矩阵 图 6-1-4 图像信息6.2 使用 imshow 函数相思图像 在使用 imshow 显示图像时,该函数会自动对图像的窗口、坐标轴和图像属性进行设置。这些属性包括图像对象的 CData 属性和 CDataMapping 属性、坐标轴对象的Climb 属性、图像窗口对象的 Colormap 属性。其调用格式为:imshow(文件名),同样的,要求当前目录或者 MATLAB 指向相应文件的完全路径。例如,输入:imshow(2.jpg) 得到如图 6-2-1 所示的图像,和使用浏览器的一样,也有各种功
28、能不同的按钮,点击它们你可以对图像进进一步的处理。并且可以看到相应的处理和使用 imview(文件名) 时有很大的区别。图 6-2-1 用 imshow 函数浏览图像6.3 图像的裁剪处理MATLAB 定义的 NaN 常数可以用于表示那些不可使用的数据,利用这种特性,可以将图像中需要裁剪不分对应的函数值设置成 NaN , 这样在绘制图形时,函数值为 NaN 的部分将不显示出来,从而达到对图形进行裁剪的母的。例如:已知Z=cosxcosy(1) 绘制三维曲面,并进行插值着色处理。(2) 裁掉图中 x 和 y 都小于 0 的部分。其程序如下:x,y=meshgrid(-5:0.1:5);z=cos
29、(x).*cos(y).*exp(-sqrt(x.2+y.2)/4);surf(x,y,z);shading interp;pausei=find(x=0&y=0);z1=z;z1(i)=NaN;surf(x,y,z1);shading interp;所绘制的图形如图 6-3-1 所示是为裁剪的图形,图 6-3-2 是裁剪后的图形。图 6-3-1 裁剪前的图形 图 6-3-2 裁剪后的图形7 动画制作在 MATLAB 中,动画制作分为两种,一种是用循环来将图像变成动态的画面,其本质是将图像以某种规律旋转,从不同的角度观察图像,还可以设置图像旋转的速度等,这种称为逐帧动画。另一种是创建轨迹动画。
30、7.1 MATLAB 中提供了 getframe、moviein 和movie 函数进行逐帧动画的制作(1)getframe 函数课截取一幅画面信息(称为动画中的一帧),一幅画面信息形成一个很大的列向量,故保存N幅画就需要一个很大的矩阵。(2)moviein(n)函数用来建立一个足够大的 n 列矩阵。用来保存 n 幅画面的数据,以备播放。(3)movie(m,n)函数是播放由 m 所定义的画面n 次,默认是一次。如图 7-1所示, 便是用循环方式制作的动画,用直线来绘出类似于牛顿环的光环。图 7-1 逐帧动画7.2 轨迹方式制作动画MATLAB 中提供了comet和comet3函数来展现质点在
31、二维和三维空间的运动轨迹,这种轨迹称为彗星轨迹曲线。函数调用格式为:comet(x,y,p)和comet3(x,y,z,p)。其中每组的x,y,z 组成一组曲线的坐标参数,p 是用于设置彗星长度的参数,默认值是0.1。在二维曲线中,彗星长度是y向量的 p 倍,在三维曲线中,彗星长度是 z 向量的 p 倍。如图 7-2 所示,是用创建轨迹的方式制作的动画:x=0:pi/500:10*pi; y=x.*sin(x); z=x.*x; comet3(x,y,z);title(彗星轨迹动画制作);图 7-2 轨迹方式制作动画7.3 综合循环制作动画和轨迹制作动画MATLAB 功能强大,里面的很多功能具
32、有很好的移植性,功能之间可以综合使用,这让使用者使用起来得心应手、方便、快捷、高效而简洁。基于MATLAB 的这个优点,我们就可以用上面两种方式综合起来制作动画,用轨迹描绘线条,然后用循环语句来把线条变成动态画面。如图 7-3-1 所示。是图像旋转到正面时的画面,图 7-3-2 是图像旋转到侧面时的画面。这两幅图是同一个图像顺时针旋转过程中的两个不同时刻的画面。其程序如下:title(综合两种方式制作动画);x=-10*pi:pi/250:10*pi;y=exp(i*x);z=y;2*y;3*y;plot(z);m=moviein(20);for i=1:200 view(-37.5+24*(
33、i-1),30) m(:,i)=getframe;endmovie(m,2); 图 7- 3 -1 旋转正面时的画面 图 7-3-2 图像旋转侧面时的画面 参考文献1 刘卫国主编MATLAB程序设计教程(第二版)北京:中国水利水电出版社,2010:82-1122 赵红怡、张常年编著. 数字信号处理及其MATLAB实现(第一版). 北京:化学工业出版社,2002:191-2023 贺兴华、周媛媛、王继阳、周晖 等编著. MATLAB7.x 图像处理. 北京:人民邮电出版社,2006:1-394 王宏编著. MATLAB6.5 及其在信号处理中的应用. 北京:清华大学出版社,2004:103-1375 王家文、李仰军编著. MATLAB7.0 图形图像处理. 北京:国防工业出版社,2006:56-82 6 王沫然著.MATLAB与科学计算(第二版)M.北京:电子工业出版社,2003:56-897 李庆扬等著.数值分析 武汉:华中理工大学出版社,2000:2-78