第四章Matlab语言基础——Matlab语言程序简洁、可读性很强而且调试十分容易。是MALAB的重要组成部分。MATLAB的数据类型各种数据类型的层次关系§4.1Matlab语言的数据结构每一种数据都以矩阵或数组的形式存在§4.1Matlab语言的数据结构Matlab共有六种基本数据类型,每一种数据都以矩阵的形式存在。包括:数值型:双精度(double),单精度(single),整数型(integer)字符型:char单元型:cell结构型:struct逻辑类:logical函数句柄型:functionhandle一般只在大型程序中使用在MATLAB中,所有的数据类型都用双精度类型double来存储和运算uint8类型:数值范围从0~255。在图像处理工具箱中,图像中每个像素的灰度值均为uint类型。一般用于存储图象数据整数型在MATLAB中,所有的数据类型都用双精度类型double来存储和运算;可对unit等类型数组进行基本操作,但不能对它们执行任何数学运算,在执行数学运算之前必须用double函数把这类数组转换成双精度型。如对图像进行运算时,要将读入MATLAB的图像数据转换为double类型,运算结束后,要显示图像或保存图像,则必须将double类型转换成uint类型。y2=mat2gray(detxdata);imshow(y2)subimage(y2);txdata=imread(‘lena.bmp');double_txdata=double(txdata);对图像进行运算时,要将其转换为double类型,运算结束后,要显示图像或保存图像,则必须将double类型转换成uint类型。本节侧重介绍MATLAB中的字符Lenna/Lena是一张数字化了的1972年12月份的美国《花花公子》插页clc,cleartp=imread('lena.bmp');imshow(tp)double_tp=double(tp);out=double_tp+sqrt(2000)*randn(size(double_tp));y2=mat2gray(out);figure(2)%imshow(y2)subimage(y2);1002003004005001002003004005004.1.1字符字符串变量是指字符向量或矩阵下面介绍字符向量和字符矩阵的创建s=‘UniversityofPetroleumofChina’;s=UniversityofPetroleumofChina1.字符向量的构造:‘’[]一、字符向量和字符矩阵的创建(1)直接赋值的方法:加单引号S(10)为字母yS(15)为P可见s为33个元素的字符向量size(s)%查看变量的维数ans=133----两种方法(2)用[]构造字符串向量:将多个串变为一个串说明:当在字符向量内出现单引号时,应改为两个单引号(注意不是双引号),如:s=[‘China’,‘‘,‘UniversityofPetroleum’]s=['China','UniversityofPetroleum']ChinaUniversityofPetroleums=‘It’’syours.’%屏幕上显示内容为It’syours.%将多个字符串连接在一起,与数值矩阵结果一致%可人为加空格2.字符矩阵的构造字符矩阵的构造有三种方法:[]、char、str2mat一般使用函数char及str2mat函数char及str2mat自动在较短的字符行向量后面补上空格,以使每行的长度相同。S1=[‘Beijing[]’;‘Tianjin[]‘;‘Shanghai’];S2=char('Beijing','Tianjin','Shanghai')S3=str2mat(‘Beijing’,‘Tianjin’,‘Shanghai’);S1=[‘Beijing[]’;‘Tianjin[]‘;‘Shanghai’];S2=char('Beijing','Tianjin','Shanghai')S3=str2mat(‘Beijing’,‘Tianjin’,‘Shanghai’);S1=BeijingTianjinShanghaiS1,S2,S3相同,均为3行8列的字符矩阵%char及str2mat自动补空格,且各串中间必须使用,号,不能用;分号,因函数参数之间要用,逗号%若用[]给字符矩阵赋值,需手动加空格二.字符串函数(strfun库)abs字符串到ASCII转换setstrASCII转换成字符串dec2bin十进制数到二进制字符串转换bin2dec二进制字符串转换成十进制数hex2num十六进制字符串转换成IEEE浮点数num2str数值转换成字符串int2str将数值取整后转换成字符串upper字符串转换成大写lower字符串转换成小写sprintf用格式控制,数字转换成字符串sscanf用格式控制,字符串转换成数字str2num字符串转换成数值,如‘0111’:111str2mat字符串转换成一个字符矩阵下面介绍MATLAB中对字符串的几类常用操作方法。abs('abcd')ans=9798991001.abs函数:字符串到ASCII转换,即查看ASCII值2.setstr函数:ASCII转换成字符串u=[979899100]y=setstr(u)y=abcd%把数字按照ASCII码构造为字符串向量3.char([97,98,99,100])【举例】4.num2str函数:num2str([97.79899100])ans=97.79899100数值矩阵转换成字符串矩阵【例】许多情况下,希望把一个数值嵌入到字符串中。%函数disp不显示变量名t,而直接显示变量所代表的字符串Acircleofradius2.5hasanareaof19.63.rad=2.5;area=pi*rad^2;字符串转换函数可完成这个任务t=[‘Acircleofradius’,num2str(rad),‘hasanareaof‘,num2str(area),'.'];disp(t)5.bin2dec函数:二进制字符串转换成为十进制数6.str2num函数:字符串转换成为数值bin2dec(‘1111’)ans=15str2num(‘4.2’)ans=4.20007.int2str函数:数值取整后转换成字符串int2str([97.79899100])ans=989899100%把数值取整后再转换为字符串isstr(a)%若变量a为字符串或字符矩阵时,输出为1;否则输出为08.isstr函数-判断一个变量是否为字符串9.blanks函数-用于定义空格符s=blanks(10)%s为字符串,其内容为10个空格10.deblank函数-用于去除字符串尾部的空格(1)所有字符串都用单引号括起来。(2)字符串中的每一个字符(不是单词)都是该字符串变量(矩阵或向量)中的一个元素。每个字符都用8个字节来存储。(3)注意abs,bin2dec等字符串转换函数要求由字符串转为其他。总结:MATLAB中的字符串使用基本规则Xfram=[011];NumTrans=bin2dec(num2str(Xfram_re));【例1】将已知二进制序列按每3位转为十进制数bin2dec要求对字符串进行转换【例2】要求把一个字符串转换成大写,不用upper函数。(1)函数find用来找出小写字母的下标值;(2)小写元素减去32;(得出一个数)(3)用setstr把求得的数按ASCII码转换成字符串表示分析:s='IfIhavemoretime,';setstr函数:ASCII转换成字符串如何找出小写字母?s='IfIhavemoretime,';%定义字符向量s=IFIHAVEMORETIME,i=Columns1through1426789111213141617181920注意:i为索引值s(i)=setstr(s(i)-(‘a’-‘A’));%ASCII码转字符串%或s(i)=setstr(s(i)-32)si=find(s=‘a’&s=‘z’);clc,clears='IfIhavemoretime,'%定义字符向量si=find(s='a'&s='z');s(i)=setstr(s(i)-('a'-'A'))%ASCII码转字符串%s(i)=char(s(i)-('a'-'A'))%或p(i)=setstr(s(i)-32)i=Columns1through1426789111213141617181920注意:i为索引值s=IFIHAVEMORETIME,Thankyouforyourcooperation