实验一:Matlab图像处理工具箱针对不同的领域需要不同的图像处理算法,因此掌握一门高级语言来编写自己的图像处理程序,MATLAB无疑是一个不错的选择。2.1Matlab简介Matlab(MatrixLaboratory)是当今很流行的科学计算软件。信息技术、计算机技术发展到今天,科学计算在各个领域得到了广泛的应用,在诸如控制论、时间序列分析、系统仿真、图像信号处理等方面产生了大量的矩阵及其他计算问题。Matlab软件适时推出,为人们提供了一个方便的数值计算和动态仿真平台。Matlab简介-特点1高效、简单的程序环境2强大的数值运算功能3丰富的工具箱Matlab是一个交互式的系统,其开发环境是MATLAB语言的基础和核心部分,全部功能都能在开发环境中实现。提供大量的矩阵及其它运算函数,方便地进行一些很复杂的计算,而且运算效率极高。Matlab命令和数学中的符号、公式非常接近,可读性强,容易掌握。根据各专门领域中的特殊需要提供了许多可选的工具箱,已有涉及数学、控制、通信、信号处理、图像处理、经济、地理等多种学科的20多种Matlab工具箱投入应用。可以在提示符后键入各种命令变量管理中心,可以显示变量的名称、尺寸、字节和类别等信息。提供当前路径下文件的操作。显示已执行过的命令及相应时间。系统中全部程序和帮助文件的管理和启动功能。Matlab简介-开发环境Matlab简介-M文件Matlab通常使用命令驱动方式,当单行命令输入时,Matlab立即处理并显示结果,同时将运行说明和命令存入历史命令窗口。Matlab语句的磁盘文件称作M文件,因为这些文件名的末尾是.M形式。M文件有两种类型:命令(Script)文件函数(function)文件2.1MATLAB基础语法2.1.1变量名的命名规则1.必须以字母开头,后可跟字母,数字和下划线2.区分大小写3.不超过31个字符Matlab常用命令clear工作空间中清除所有变量clc清除命令窗口中显示内容help命令名获得在线帮助命令功能clf清除图形窗口内容who列出当前工作空间中的变量whos列出当前工作空间中的变量及信息2.2Matlab常用的基本命令(1)全0A=zeros(n):生成n×n的全0A=zeros(m,n):生成m×n的全0A=zeros(a1,a2,a3,…):生成a1×a2×a3×…的全0矩A=zeros(size(B)):生成与矩阵B大小相同的全0矩阵。1.常用矩阵的生成(2)全1A=ones(n):生成n×n的全1A=ones(m,n):生成m×n的全1A=ones([m,n]):生成m×n的全1A=ones(a1,a2,a3,…):生成a1×a2×a3×…的全1矩阵;A=onse(size(B)):生成与矩阵B大小相同的全1矩阵。(3)A=eye(n):生成n×nA=eye(m,n):生成m×nA=eye([m,n]):生成m×nA=eye(size(B)):生成与矩阵B大小相同的单位矩阵。(4)A=rand(n):生成n×nA=rand(m,n):生成m×nA=rand([m,n]):生成m×nA=rand(a1,a2,a3,…):生成a1×a2×a3×…的随机矩阵;A=rand(size(B)):生成与矩阵B大小相同的随机矩阵。*x=[12345]%产生1×5的数组*b=x(3)%寻访数组x的第3个元素*b=x([125])%寻访x的第1、2、5元素*b=x(1:3)%寻访前三个元素*b=x(3:end)%寻访第三个元素到最后一个*b=x(find(x3))%由大于3的元素构成数组*b=x(3:-1:1)%由前3个数倒排成数组*b=x([12344321])%对元素的重复访问2.寻访矩阵中的数据*x=[1,2,3;4,5,6;7,8,9]%产生3×3的矩阵*b=x(find(x4))%大于4的元素构成数组*x(2,2)=10%第2行第2列值改为10*x(3,:)=20%第3行的值改为20*x=ones(5)%产生5×5全为1的矩阵*x(2:4,2:4)=0%第2、3、4行的第2、3、4列元素改03.修改数据A=[3:6;1:4]%产生2×4的矩阵s=size(A)%返回s为[行数列数][r,c]=size(A)%返回r为行数,c为列数r=size(A,1)%只返回行数c=size(A,2)%只返回列数n=length(A)%返回行数、列数最大者5.矩阵的规模2.3图像处理工具箱简介Matlab是一种基于向量(数组)而不是标量的高级程序语言,因而Matlab从本质上就提供了对图像的支持。数字图像实际上是一组有序离散的数据,使用Matlab可以对这些离散数据形成的矩阵进行一次性的处理。Matlab对图像的处理功能主要集中在它的图像处理工具箱(ImageProcessingToolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、数学形态学处理等图像处理操作。图像处理工具箱主要有:*ImageAcquisitionToolbox*ImageProcessingToolbox*SignalProcessingToolbox*WaveletToolbox*StatisticsToolbox*BioinformaticsToolbox*MatlabCompiler*MatlabCOMbuilder2.4Matlab中的图像类型及类型转换Matlab中的数字图像是由一个或多个矩阵表示的,Matlab强大的矩阵运算功能完全可以应用于图像,那些适用于矩阵运算的语法对Matlab中的数字图像同样适用。2.4.1图像和图像数据缺省:double(64位浮点数)uint8(无符号8位整型)2.4.2图像处理工具箱所支持的图像类型图像处理工具箱支持4真彩色图像(RGBimages索引色图像(indeximages灰度图像(intensityimages二值图像(binaryimages)此外,Matlab还支持由多帧图像组成的图像序列。2.4.4图像文件的显示Matlab7.0图像处理工具箱提供了一个高级的图像显示函数imshow灰度图像imshow(I)imshow(I,n)imshow(I,[lowhigh])其中n为灰度级数目,缺省值为256。[lowhigh]为图像数据的值域。2.灰度图像及其显示一幅灰度图像是一个数据矩阵I,其中数据均代表了在一定范围内的颜色灰度值。Matlab把灰度图像用数据矩阵的形式进行存储,每个元素则表示了图像中的每个像素。矩阵元素可以是doudle、uint8整数类型。多数情况下,灰度图像很少和颜色映像表一起保存,但在显示灰度图像时,Matlab仍然在后台使用系统预定义的缺省灰度颜色映像表。(1)灰度图像显示最基本的调用格式imshow(I)Matlab中imshow函数使用一个灰度级系统调色板(R=G=B)来显示灰度图像。如果I是double型,若像素值为0.0,则显示为黑色,1.0则显示为白色,0.0和1.0之间的像素值将显示为灰影。imshowimshow(I,n)例如:以下语句将显示一幅32个灰度级的图像Iimshow(I,32)(2)使用明确指定的灰度级数目(3)某些情况下,可能将一些超出数据惯例范围的数据显示为一幅灰度图像☆对于double型数组为[0,1],对于uint8型数组为[0,255]为了将超过数据范围的数据显示为图像,用户可以直接定义数据范围,其调用格式如下,imshow(I,[lowhigh])其中low、high分别为数据的最小和最大值。如果用户使用一个空矩阵[]指定数据范围,imshow将自动进行数据标度。补充:多幅图像文件的显示figure,imshow功能:新建一个图像窗口,用于显示新图像(从而不让新的图像覆盖原来图像)。1.创建新的图像窗口,每个图像显示在一个窗口中调用imshow函数显示图像,如下页图所示。I=imread(′rice.png′);J=filter2([12;-1-2],I);%用模板[12;-1-2]对imshow(I)figure,imshow(J,[])思考:如果没有figure的话,将产生什么结果?用imshow显示滤波前后的图像subplot(m,n,k),imshow%绘制并显示m行n列第k个子图例:X1=imread('rice.png');X2=imread('coins.png');X3=imread('bag.png');subplot(1,3,1),imshow(X1)subplot(1,3,2),imshow(X2)subplot(1,3,3),imshow(X3)2.用子图、多个图像显示在一个图像窗口中子图显示效果图像的运算imadd(X,Y);Y可以是另一幅图像,也可以是一个常数。例1:I=imread('rice.png');J=imread('cameraman.tif');K=imadd(I,J);subplot(1,3,1),imshow(I);subplot(1,3,2),imshow(J);subplot(1,3,3),imshow(K)△图像的加法例2:实现亮度的增加RGB=imread('greens.jpg');RGB1=imadd(RGB,50);subplot(1,2,1);imshow(RGB);subplot(1,2,2);imshow(RGB1);△图像的减法Z=imsubtract(X,Y);计算X与Y的像素之差,负数将被截取为0。Z=imabsdiff(X,Y);计算X与Y的像素之差的绝对值,结果为非负的。图像的空间变换将输入图像的像素映射到输出图像的新位置,如调整图像大小、旋转、剪切等。△调整图像的大小-imresizeY=imresize(X,M);其中M>1表示放大,0<M<1表示缩小。Y=imresize(X,[MN]);产生一个指定的M×N大小的图像Y。△图像的旋转-imrotateY=imrotate(X,angle,method);Y=imrotate(X,angle,method,’crop’);其中angle为逆时针旋转的角度,method为插值方法,指定‘crop’参数对旋转后的图像进行剪切。例:I=imread('lena.bmp');J1=imrotate(I,45);J2=imrotate(I,45,'crop');subplot(1,3,1),imshow(I);subplot(1,3,2),imshow(J1);subplot(1,3,3),imshow(J2);