您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 多媒体课程设计报告)
多媒体通信方向综合性设计一.图像数据输入与输出,图像数据类型的转换1.图像的输入从图形图像上读取数据MATLAB提供了一个重要的用于图像文件的读写的指令------从图像文件中读取数据的imread,imread的常见调用格式为:A=imread(‘filename’,’fmt’)其作用是将文件名用字符串filename表示的,扩展名用fmt表示的图像文件中的数据读到矩阵A中。如果filename所指的为灰度级图像,则A为一个二维矩阵;如果filename所指的为RGB图像,则A为一个m×n×3的三维矩阵。Filename表示的文件名必须在MATLAB的搜索路径范围内,否则需指出其完整路径。imread的其他几种重要的调用格式为:[X,map]=imread(‘filename’,’fmt’)[…]=imread(‘filename’)[…]=imread(URL,…)[…]=imread(…,idx)(CUR,ICOandTIFFonly)[…]=imread(…,’frames’,idx)(GIFonly)[…]=imread(…,ref)(HDFonly)[…]=imread(…,’BackgroundColor’,BG)(PNGonly)[A,map,alpha]=imread(…)(ICO,CURandPNGonly)上面一些参数的含义如下:idx是指读取图标(cur、ico、tiff)文件中第idx个图像,默认值为1。’frame’,idx是指读取gif文件中的图像帧,idx值可以是数量、向量或’all’。ref是指整数值。alpha是指透明度2.输出图像imwrite(A,FILENAME,FMT)把图像A写入图像文件FILENAME.imwrite(X,MAP,FILENAME,FMT)把X和它的相关色彩信息MAP写入FILENAME.imwrite(...,FILENAME)把图像写入图像文件FILENAME,并推测可能的格式用来做filename的扩展名。扩展名必须是FMT中一合法名.imwrite(...,PARAM1,VAL1,PARAM2,VAL2,...)不同的参数控制输出文件的各种不同特征。参数要是当前所支持的HDF,JPEG,TIFF,PNG,PBM,PGM,和PPM文件三:image显示图像.image(C)把矩阵C转成一图像.C可以是一MxN或MxNx3维的矩阵,且可以是包含double,uint8,或uint16数据.image是用来显示附标图像,即显示的图像上有x,y坐标轴的显示,可以看到图像的像素大小。但可以加上axisoff命令即可把坐标去掉。imshow只是显示图像。用colormap来定义图像显示用的颜色查找表,比如用colormap(pink),可以把黑白图像显示成带粉红色的图像。图像像素矩阵的数据类型:(1)显示真彩色图像像素三维矩阵X,如果是uint8类型,要求矩阵的数据范围为0-255,(2)如果是double型,则其数据范围为0-1,要不就会出错或者出现空白页。类型转换:(1)如果你原来的数值是uint8,在运算中转换为double后,实际要显示的数值没有改变的话,只要用uint8(X)就可转换为uint8型,如果不想转换频繁,也可在显示时用X/255来转换为符合0-1double类型范围要求的数值显示。(2)如果显示索引图像(二维矩阵),如果索引图像像素数值是double型,则它的取值范围为1-length(colormap),数值起点为1,则矩阵中数值为1的对应colormap中第一行数据,如果索引图像像素数值是uint8,则取值范围为0-255,数值起点为0,则矩阵中数值为0的对应colormap中第一行数据,所以索引图像这两个数据类型之间的转换,要考虑到+1或-1。直接用uint8或double转换则会查找移位,产生失真情况。uint16数据类型与uint8类似,取值范围为。图像文件的显示1)索引图像及其显示方法一:image(X)colormap(map)方法二:imshow(X,map)2)灰度图像及其显示Matlab7.0中,要显示一副灰度图像,可以调用函数imshow或imagesc(即imagescale,图像缩放函数)(1)imshow函数显示灰度图像使用imshow(I)或使用明确指定的灰度级书目:imshow(I,32)由于Matlab自动对灰度图像进行标度以适合调色板的范围,因而可以使用自定义大小的调色板。其调用格式如下:imshow(I,[low,high])其中,low和high分别为数据数组的最小值和最大值。(2)imagesc函数显示灰度图像下面的代码是具有两个输入参数的imagesc函数显示一副灰度图像imagesc(1,[0,1]);colormap(gray);imagesc函数中的第二个参数确定灰度范围。灰度范围中的第一个值(通常是0),对应于颜色映象表中的第一个值(颜色),第二个值(通常是1)则对应与颜色映象表中的最后一个值(颜色)。灰度范围中间的值则线型对应与颜色映象表中剩余的值(颜色)。在调用imagesc函数时,若只使用一个参数,可以用任意灰度范围显示图像。在该调用方式下,数据矩阵中的最小值对应于颜色映象表中的第一个颜色值,数据矩阵中的最大值对应于颜色映象表中的最后一个颜色值。3)RGB图像及其显示(1)image(RGB)不管RGB图像的类型是double浮点型,还是uint8或uint16无符号整数型,Matlab都能通过image函数将其正确显示出来。RGB8=uint8(round(RGB64×255));%将double浮点型转换为uint8无符号整型RGB64=double(RGB8)/255;%将uint8无符号整型转换为double浮点型RGB16=uint16(round(RGB64×65535));%将double浮点型转换为uint16无符号整型RGB64=double(RGB16)/65535;%将uint16无符号整型转换为double浮点型(2)imshow(RGB)参数是一个m×n×3的数组4)二进制图像及其显示(1)imshow(BW)在Matlab7.0中,二进制图像是一个逻辑类,仅包括0和1两个数值。像素0显示为黑色,像素1显示为白色。显示时,也可通过NOT(~)命令,对二进制图象进行取反,使数值0显示为白色;1显示为黑色。例如:imshow(~BW)(2)此外,还可以使用一个调色板显示一副二进制图像。如果图形是uint8数据类型,则数值0显示为调色板的第一个颜色,数值1显示为第二个颜色。例如:imshow(BW,[100;001])5)直接从磁盘显示图像可使用一下命令直接进行图像文件的显示:imshowfilename其中,filename为要显示的图像文件的文件名。3.格式转换1、数据类型包括数值类型(整型/浮点型)、字符类型、逻辑类型、函数句柄、结构类型、细胞数组类型,这里我们主要讨论数值类型。Matlab中的图像数据类型转换MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double因此I2=im2double(I1):把图像数组I1转换成double精度类型;如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为:Function'*'isnotdefinedforvaluesofclass'uint8'。图像数据类型转换函数默认情况下,matlab将图像中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。im2double():将图像数组转换成double精度类型im2uint8():将图像数组转换成unit8类型im2uint16():将图像数组转换成unit16类型但是:对double型图像用im2uint8(),会出现问题。double默认为0-1之间的数,uint8为0-255之间的数,如果数组uint8型x1={0,1,2},转化后为x2={0,0.5,1};如果数组double型y1={0,1,2},转化后为y2={0,255,255};在用matlab工具箱做直方图处理时,图像必须为整型,即如果是double型,必须转化为整型解决办法:图像处理工具箱1.图像和图像数据缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点数,所需存储量很大;MATLAB还支持另一种类型无符号整型(uint8),即图像矩阵中每个数据占用1个字节。在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。另外,uint8与double两种类型数据的值域不同,编程需注意值域转换。从uint8到double的转换---------------------------------------------图像类型MATLAB语句---------------------------------------------索引色B=double(A)+1索引色或真彩色B=double(A)/255二值图像B=double(A)---------------------------------------------从double到uint8的转换---------------------------------------------图像类型MATLAB语句---------------------------------------------索引色B=uint8(round(A-1))索引色或真彩色B=uint8(round(A*255))二值图像B=logical(uint8(round(A)))图像格式类型1真彩色图像R、G、B三个分量表示一个像素的颜色。如果要读取图像中(100,50)处的像素值,可查看三元数据(100,50,1:3)。真彩色图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的存储方法是用无符号整型存储,亮度值范围[0,255]2索引色图像包含两个结构,一个是调色板,另一个是图像数据矩阵。调色板是一个有3列和若干行的色彩映象矩阵,矩阵每行代表一种颜色,3列分别代表红、绿、蓝色强度的双精度数。注意:MATLAB中调色板色彩强度[0,1],0代表最暗,1代表最亮。常用颜色的RGB值--------------------------------------------颜色RGB颜色RGB--------------------------------------------黑001洋红101白111青蓝011红100天蓝0.6701绿010橘黄10.50蓝001深红0.500黄110灰0.50.50.5--------------------------------------------产生标准调色板的函数-------------------------------------------------函数名调色板-------------------------------------------------Hsv色彩饱和度,以红色开始,并以红色结束Hot黑色-红色-黄色-白色Cool青蓝和洋红的色度Pink粉红的色度Gray线型灰度Bone带蓝色的灰度JetHsv的一种变形,以蓝色开始,以蓝色结束Copper线型铜色度Prim三棱镜,交替为红、橘黄、黄、绿和天蓝Flag交替为红、白、蓝和黑--------------------------------------------------缺省情况下,调用上述函数灰产生一个64×3的调色板,用户也可指定调色板大小。索引色图像数据也有double和uint8两种类型。当图像数据为double类型时,值1代表调色板中的第1行,值2代表第2行……如果图像数据为uint8类型,0代表调色板的第一行,,值1代表第2行……3灰度图像
本文标题:多媒体课程设计报告)
链接地址:https://www.777doc.com/doc-7363479 .html