实验一MATLAB数字图像处理初步-河北工业大学教程文件.doc
Good is good, but better carries it.精益求精,善益求善。实验一 MATLAB数字图像处理初步-河北工业大学-实验一MATLAB数字图像处理初步网络121XXX一、实验目的与要求1熟悉及掌握在MATLAB中能够处理哪些格式图像。2熟练掌握在MATLAB中如何读取图像。3掌握如何利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。4掌握如何在MATLAB中按照指定要求存储一幅图像的方法。5图像类型转换。二、实验原理及知识点1、数字图像的表示和类别一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f在任何坐标处(x,y)处的振幅称为图像在该点的亮度。灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合形成的。例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。图像关于x和y坐标以及振幅连续。要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。将坐标值数字化称为采样;将振幅数字化成为量化。采样和量化的过程如图1所示。因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。作为MATLAB基本数据类型的数值数组本身十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。图1图像的采样和量化根据图像数据矩阵解释方法的不同,MATLAB把其处理为4类:Ø 亮度图像(Intensityimages)Ø 二值图像(Binaryimages)Ø 索引图像(Indexedimages)Ø RGB图像(RGBimages)(1)亮度图像一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是0,255和0,65536。若图像是double类,则像素取值就是浮点数。规定双精度型归一化亮度图像的取值范围是0,1(2)二值图像一幅二值图像是一个取值只有0和1的逻辑数组。(3)索引图像索引颜色通常也称为映射颜色,在这种模式下,颜色都是预先定义的,并且可供选用的一组颜色也很有限,索引颜色的图像最多只能显示256种颜色。一幅索引颜色图像在图像文件里定义,当打开该文件时,构成该图像具体颜色的索引值就被读入程序里,然后根据索引值找到最终的颜色。(4)RGB图像一幅RGB图像就是彩色像素的一个M×N×3数组,其中每一个彩色相似点都是在特定空间位置的彩色图像相对应的红、绿、蓝三个分量。按照惯例,形成一幅RGB彩色图像的三个图像常称为红、绿或蓝分量图像。2、数据类和图像类型间的转化表1中列出了MATLAB和IPT为表示像素所支持的各种数据类。表中的前8项称为数值数据类,第9项称为字符类,最后一项称为逻辑数据类。工具箱中提供了执行必要缩放的函数(见表2)。以在图像类和类型间进行转化。表1-1MATLAB和IPT支持数据类型名称描述double双精度浮点数,范围为uint8无符号8比特整数,范围为0255uint16无符号16比特整数,范围为065536uint32无符号32比特整数,范围为04294967295int8有符号8比特整数,范围为-128127int16有符号16比特整数,范围为-3276832767int32有符号32比特整数,范围为-21474836482147483647single单精度浮点数,范围为char字符logical值为0或1表1-2格式转换函数名称将输入转化为有效的输入图像数据类im2uint8uint8logical,uint8,uint16和doulbeim2uint16uint16logical,uint8,uint16和doulbemat2graydouble,范围为01doubleim2doubledoublelogical,uint8,uint16和doulbeim2bwlogicaluint8,uint16和double下面给出读取、压缩、显示一幅图像的程序(%后面的语句属于标记语句,编程时可不用输入)I=imread(原图像名.tif);%读入原图像,tif格式whosI%显示图像I的基本信息imshow(I)%显示图像Imfinfo%查询图像文件信息imwrite;%压缩存储图像例如:imwrite(I,'1.jpg','jpg','quality',80)就是以质量因子80压缩,100就是不变,图像尺寸不变,像素值会发生变化,图像会变得越来越模糊。可以看压缩后图像与原始图像的大小发生变化。%显示多幅图像,其中n为图形窗口的号数figure(n),imshow('filename');gg=im2bw('filename');%将图像转为二值图像figure,imshow(gg)%显示二值图像三、实验内容及步骤1利用imread()函数读取一幅图像,假设其名为football.jpg,存入一个数组中;>>I=imread('football.jpg');2利用whos命令提取该读入图像football.jpg的基本信息;>>whosNameSizeBytesClassI256x320x3245760uint8arrayans1x11966structarrayGrandtotalis245874elementsusing247726bytes3利用imshow()函数来显示这幅图像;>>imshow(I)4利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;>>imfinfo('football.jpg')ans=Filename:'C:MATLAB7toolboximagesimdemosfootball.jpg'FileModDate:'01-Mar-200109:52:38'FileSize:27130Format:'jpg'FormatVersion:''Width:320Height:256BitDepth:24ColorType:'truecolor'FormatSignature:''NumberOfSamples:3CodingMethod:'Huffman'CodingProcess:'Sequential'Comment:5利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为footballnew.jpg;语法:imwrite(原图像,新图像,quality,q),q取0-100。>>imwrite(I,'footbal.jpg','quality',10);6用imread()读入索引图像:kids.tif;>>K=imread('kids.tif');7同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为kids_index.bmp。>>imwrite(K,'kids_index.bmp');8用imfinfo()获取图像football.jpg和kids.tif的大小;>>imfinfo('football.jpg')Width:320Height:256>>imfinfo('kids.tif')Width:318Height:4009用figure,imshow()分别将football.jpg和kids.tif显示出来,观察两幅图像的质量。10用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。>>a=imread('football.jpg');>>e=rgb2gray(a);>>f=im2bw(e);>>imshow(f);11.用imread打开一幅图像,在MATLAB中用程序绘制其灰度直方图。(不要用MATLAB中自带的函数imhist和histeq实现)。>>I=imread('football.jpg');>>rows,cols=size(I);>>zhifang=zeros(1,256);>>fori=0:255zhifang(1,i+1)=length(find(I=i)/(rows*cols);end>>figure(1);>>bar(0:255,zhifang,'grouped');>>12.将一幅彩色图像转换成256级灰度图像,进行4倍和16倍减采样,并对减采样的效果进行描述>>a=imread('football.jpg');>>e=rgb2gray(a);>>imshow(e);。>>form=1:2figurewidth,height=size(b);c=zeros(floor(width/(2*m),floor(height/(2*m);k=1;n=1;fori=1:(2*m):widthforj=1:(2*m):heightc(k,n)=b(i,j);n=n+1;endk=k+1;n=1;endimshow(uint8(c);ifm=1title('4倍减采样');elsetitle('16倍减采样');end13. End将一幅彩色图像转换成256、64、32、8、2级灰度图像,并对灰度减小后的图像效果进行描述。14. >>a=imread('football.jpg');15. >>b=rgb2gray(a);16. >>figure17. >>imshow(b);18. >>title('256级灰度图像');19. >>wid,hei=size(b);20. >>form=1:421. figure22. c=zeros(wid,hei);23. ifm=124. fori=1:wid25. forj=1:hei26. c(i,j)=floor(b(i,j)/4);27. end28. end29. imshow(uint8(c),0,63);30. title('64级灰度图像')31. else32. fori=1:wid33. forj=1:hei34. c(i,j)=floor(b(i,j)/(2(2*m-1);35. end36. end37. imshow(uint8(c),0,256/2(2*m-1)-1);38. switchm39. case240. title('32级灰度图像');41. case342. title('8级灰度图像');43. case444. title('2级灰度图像');45. end46. endEnd-