图像类型的转换1、课程设计目的1、理解数字图像的几种基本类型2、观察图象类型转换前后的效果3、加深对图象类型的理解4、掌握在MATLAB中进行图象文件类型转换的方法2、课程设计要求(1)掌握课程设计的相关知识、概念清晰。(2)程序设计合理、能够正确运行。3、相关知识3.1MATLAB简介MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。MATLAB具有出色的图形处理功能。MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。3.2MATLAB中的图像类型在MATLAB中数组是最基本的数据结构,大部分图像用二维数组即矩阵表示,矩阵中的一个元素对应一个像素。例如,一个由500行600列不同颜色点组成的图像可以用500*600的矩阵来表示。当然也有一些图像是用三维数组表示的,如RGB图像的三个维分别表示像素的红色、绿色和蓝色分量值。这样使得在MATLAB中使用图形文件格式的图像和使用其他类型的矩阵数据的方式一致。在MATLAB中,一幅图像可能包含一个颜色影像表矩阵。在图像处理工具箱支持的图像分为四个基本类型:RGB图像、灰度图像、索引图像及二值图像。它们的区别在于数据矩阵元素的不同含义。3.2.1RGB图像RGB图像在MATLAB中存储为一个n*m*3的三维数据数组。n,m分别为图像的行列数。数组可以是双精度浮点型或unit8类型。数组中的元素定义了每个像素的红、绿、蓝颜色值,它们保存在数组的第三维里,这三个值共同构成了该像素的颜色。如,像素(4,7)表示第4行第七列的像素,它的红绿蓝颜色值分别保存在元素RGB(4,7,1)、RGB(4,7,2)和RGB(4,7,3)里。3.2.2灰度图像灰度图像是一个数据矩阵I,每个元素代表一个像素,I的数据表示在一定范围内的灰度值.I可以是双精度浮点型,其值域为[0.0,1.0];也可以是unit8类型,其值域为[0,256]。3.2.3索引图像索引图象包括图象矩阵和颜色数组。其中颜色图是按图象中颜色值进行排序后的数组。对于每个象素,图象矩阵包含一个值,这个值就是颜色图数组中的索引。颜色图为m×3的双精度值矩阵,各行分别指定红、绿、蓝(R、G、B)单色值,且R、G、B均为值域[0,1]上的实数值。3.2.4二值图像这类图像只包含一个由0,1构成的矩阵,可以保存为双精度或unit8类型的数组。在图像处理工具箱中为了节省空间都用unit8类型的数组。二值图像可以看成一个仅由黑白两色组成的特殊的灰度图或者共有两种颜色的索引图,因此其显示方式与灰度图或索引图类似。4、设计方案图像的四种基本类型是可以相互转换的。有时需要对图像类型进行转换以方便某些处理,MATLAB有实现对RGB图像、灰度图像、索引图像及二值图像相互转换的函数。本次课程设计的核心就是利用图像类型转换函数来实现图像类型之间的转换。1、索引图像转换为灰度图像的函数ind2gray()其语法格式为:I=indgray(X,map)它将具有颜色图map的索引图像X转换为灰度图像I,X可以是双精度型或unit8型,I是双精度型。2、索引图像转换为RGB图像的函数ind2rgb()其语法格式为:RGB=IND2RGB(X,map)它将具有颜色图map的索引图像X转换为真彩色图像RGB。3、灰度图像转换为索引图像的函数gray2ind()其语法格式为:[X,map]=gray2ind(I,n)它将灰度图像I转换成索引图像X,具有颜色图gray(n),n的默认值是64。4、RGB图像转换为索引图像的函数rgb2ind()其语法格式有下面五种:●[X,map]=rgb2ind(RGB):直接RGB图像转换为具有颜色图map的矩阵X.●[X,map]=rgb2ind(RGB,tol):用均匀量化的方法将RGB图像转换为索引图像X,tol的范围从0.0到1.0.●[X,map]=rgb2ind(RGB,n):使用最小量化方法将RGB图像转换为索引图像X,map中包括至少n个颜色。●[X,map]=rgb2ind(RGB,map):将RGB中的颜色与颜色图map中最相近的颜色匹配,将RGB转换为具有MAP颜色图的索引图。●[]=rgb2ind(…,dither_option):通过dither_option参数来设置是否抖动。5、RGB图像转换为灰度图像的函数rgb2gray()其语法格式有两种:●I=rgb2gray(RGB):将输入的RGB图像转换为灰度图I●newmap=rgb2gray(map):将输入的颜色图map返回一个等价的灰度图6、转换为二值图像的函数im2bw()该函数通过阈值化方法将索引、灰度和RGB图像转换为二值图像。其语法格式有以下几种:●BW=im2bw(I,map,level):将颜色图为map的索引图像转换为二值图像●BW=im2bw(I,level):将灰度图像I转换为二值图像●BW=im2bw(RGB,level):将RGB图像转换为二值图像7、dither函数通过抖动算法转换图像类型其语法格式为:●x=dither(RGB,map):通过抖动算法将真彩色图像RGB按指定的调色板map转换成索引色图像X●x=dither(RGB,map,Qm,Qe):利用给定的参数Qm,Qe从真彩色图像RGB中产生索引色图像x.Qm对于补色决定各颜色轴的量化位数,Qe决定量化误差的位数。如果QeQm,则不进行抖动操作。Qm的默认值是5,Qe的默认值是8●BW=dither(I):将灰度图像抖动成二值图像,输入图像可以是double或uint8,如果输出的图像是二值图像或颜色种类不超过256的索引色图像,则是uint8,否则是double5、具体设计内容:5.1设计源代码:%将RGB图像转换为索引图像RGB=imread('lily.tif');%加载图像文件格式的图像lily[X,map]=rgb2ind(RGB,0.7);%将RGB图像转换为索引图像figure(1);%选择图像输出的窗口subplot(1,2,1);%选择图像输出的位置imshow(RGB);%显示RGB图像title('RGB图像');%显示图像标题subplot(1,2,2);%选择图像输出的位置imshow(X,map);%显示索引图像title('索引图像');%显示图像标题%将索引图像转换为RGB图像loadtrees%加载图像treesRGB=ind2rgb(X,map);%将索引图像转换为RGB图像figure(2);%选择图像输出的窗口subplot(1,2,1);%选择图像输出的位置imshow(X,map);%显示索引图像title('索引图像');%显示图像标题subplot(1,2,2);%选择图像输出的位置imshow(RGB);%显示RGB图像title('RGB图像');%显示图像标题%将RGB图像转换为灰度图像map=rgb2gray(RGB);%将RGB图像转换为灰度图像figure(3);%选择图像输出的窗口subplot(1,2,1);%选择图像输出的位置imshow(RGB);%显示RGB图像title('RGB图像');%显示图像标题subplot(1,2,2);%选择图像输出的位置imshow(map);%显示灰度图像title('灰度图像');%显示图像标题%将灰度图像转换为索引图像I=imread('rice.tif');%加载图像文件格式的图像rice[X,map]=gray2ind(I,80);%将灰度图像转换为索引图像figure(4);%选择图像输出的窗口subplot(1,2,1);%选择图像输出的位置imshow(I);%显示灰度图像title('灰度图像');%显示图像标题subplot(1,2,2);%选择图像输出的位置imshow(X,map);%显示索引图像title('索引图像');%显示图像标题%将索引图像转换为灰度图像loadtrees%加载图像treesI=ind2gray(X,map)%将索引图像转换为灰度图像figure(5);%选择图像输出的窗口subplot(1,2,1);%选择图像输出的位置imshow(X,map);%选择图像输出的位置title('索引图像');%显示图像标题subplot(1,2,2);%选择图像输出的位置imshow(I);%显示灰度图像title('灰度图像');%显示图像标题%将灰度图像转换为二值图像I=imread('rice.tif');%加载图像文件格式的图像riceBW=dither(I);%将灰度图像转换为二值图像figure(6);%选择图像输出的窗口subplot(1,2,1);%选择图像输出的位置imshow(I);%显示灰度图像title('灰度图像');%显示图像标题subplot(1,2,2);%选择图像输出的位置imshow(BW);%显示二值图像title('二值图像');%显示图像标题%将RGB图像转换为二值图像RGB=imread('lily.tif');%加载图像文件格式的图像lilyBW=im2bw(RGB,0.5);%将RGB图像转换为二值图像figure(7);%选择图像输出的窗口subplot(1,2,1);%选择图像输出的位置imshow(RGB);%显示RGB图像title('RGB图像');%显示图像标题subplot(1,2,2);%选择图像输出的位置imshow(BW);%显示二值图像title('二值图像');%显示图像标题%将索引图像转换为二值图像loadtrees%加载图像treesBW=im2bw(X,map,0.4);%将索引图像转换为二值图像figure(8);%选择图像输出的窗口subplot(1,2,1);%选择图像输出的位置imshow(X,map);%显示索引图像title('索引图像');%显示图像标题subplot(1,2,2);%选择图像输出的位置imshow(BW);%显示图像标题title('二值图像');%显示二值图像5.2功能仿真图由实验仿真结果可知,单边带