《2023年Matlab学习笔记.pdf》由会员分享,可在线阅读,更多相关《2023年Matlab学习笔记.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学习必备 欢迎下载 Matlab 学习笔记%matlab 是区分大小写的,M 文件不要用纯数字作为名称%修改后的界面窗口也是可以恢复的。恢复的操作步骤也是很简单的:打开 MATLAB,依次点击:“Desktop”-“Desktop Layout”-“Default”,就可以恢复 MATLAB 初始界面窗口。%自定义 shortcuts 的添加方法:在记事本上写下经常用到的程序代码,如:clc clear all close all 将上面写好的代码选中拖入到 matlab 主界面的 shortcuts tools工具栏上,会出现以下界面:给创建的 shortcuts 起个名字 clearen,
2、这样每次执行上面指令只需单击创建的 shortcuts 名。addpath(E:matlab实验程序)%添加路径:addpath(当前路径中的文件夹名 1,当前路径下的文件夹名 2,当前路径中的文件夹名 n);【即可一次性添加多个路径】rmpath(E:matlab实验程序)%去除路径:rmpath(当前路径中的文件夹名 1,当前路径下的文件夹名 2,当前路径中的文件夹名 n);【即可一次性去除多个路径】path%查看路径 学习必备 欢迎下载%输入 edit 命令直接调出 M 文件编辑器,M 文件运行直接按%M 文件写好之后,可直接发布成网页:在 Editor 窗口 File 菜单中选择“Pu
3、blish 文件名.m”%输入 guide 命令,可打开图形用户界面 GUI 文件(*.fig)或者创建新的 GUI 文件(*.fig)%键盘向上向下键 寻找历史命令,shift 键可以选择多个历史命令,双击运行 what%列出当前路径的所有 m 文件%figure 表示重新打开一个窗口画 plot,否则覆盖画%hold on、hold off 用于保存绘制句柄,用于在同一张图上绘制多条曲线的情形 a=2;%分号;表示不输出结果 p=-1:0.1:1;%-1为起始值,1 为终止值,0.1 为增量 p=1 2 3.4 5 6%.为换行连接符,.不能放在等号后面使用,不能放在变量名中间使用,起作用
4、时默认显蓝色 clc%清屏 clear%清除 workspace中的变量 clear all%是清除所有工作空间中的变量 close all%是关闭所有窗口(程序运行产生的,不包括命令窗,editor 窗和帮助窗)exit%退出 matlab%【Esc】键:命令窗口中,可清除当前输入行%【Tab】键:在 command窗口,输入一个命令的前几个字符,然后按 tab 键,会弹出前面含这几个字符的所有命令,找到你要的命令,回车,就可以自动完成。%help+函数名或 help+函数类名 精确查询%doc+函数名 打开帮助窗口,精确查询%lookfor+关键字 这个是 matlab 中的谷歌,模糊查询
5、%【Ctrl+C】(或【CtrlBreak】):在 matlab 程序运行过程中,可能由于程序编写的失误,导致程序不停的运行,在命令窗口输入“Ctrl+C”可以将运行的程序停下来,而不需要将整个 Matlab 程序关掉。不过进行此操作的前提是能够激活切换到命令窗口才行 码如将上面写好的代码选中拖入到主界面的工具栏上会出现以下界面给加多个路径实验程序去除路径当前路径中的文件夹名当前路径下的文件在窗口菜单中选择文件名输入命令可打开图形用户界面文件或者创建新学习必备 欢迎下载%【Ctrl+R】:editor 窗口中,添加注释(对多行有效)%【Ctrl+T】:editor 窗口中,去掉注释(对多行有效
6、)%【Ctrl+】:editor 窗口中,减少缩进,对多行有效%【Ctrl+】或【Tab】:editor 窗口中,增加缩进,对多行有效%【Ctrl+I】:editor 窗口中,自动缩进,对多行有效%【F12】:editor 窗口中,设置或取消程序断点 plot(P,T,+)%绘图 P 横坐标,T 纵坐标,+为标记 title(test);%绘图 显示图像标题为 test xlabel(input vector);%绘图 显示 x 轴标识为 input vector ylabel(output vector);%绘图 显示 y 轴标识为 output vector subplot(2,2,1);
7、imshow(a1)%表示画 2 行,画 2 列,将 a1 画在第 1 幅图 pause%不加参数,直接用 pause 的话,就是程序暂停,直至用户按任意一个按键 pause(1.5)%加参数,表示程序暂停 1.5 秒后继续执行 echo off%神经网络训练时不显示每一步的梯度和误差性能 w1,b1,w2,b2=initff(P,S1,tansig ,T,purelin );%利用 initff 函数对 BP 神经网络权值及阈值进行赋值,其格式为w1,b1,w2,b2=initff(p,s1,f1,s2,f2);p为输入矢量,s1,s2 表示神经元数,f1,f2 为变换函数,s2 可以变为目
8、标矢量 T,输出神经元数就为 T 的行数%单层感知器 net=newp(minmax(P),1);%创建单层感知器,其中 P 为输入,神经元个数为 1 net=train(net,P,T);%训练感知器网络 Y=sim(net,P);%模拟感知器网络 net.trainParam.epochs=20;%设置网络训练次数为 20 次 a=imread(imgcar.jpg);%读取图片 imshow(car.jpg)%图像显示,或 imshow(a),其中 a 为图像变量 imwrite(bw,bwimg.jpg);%保存图像 bw 到当前文件夹下,保存为 bwimg.jpg inf=imfin
9、fo(car.jpg)%图像信息查询,显示图像的格式,长,宽等信息 ndims(i)%判断数据 i的维数,此函授可以判断图像对象的维数 X=rgb2gray(a);imshow(X)%彩色图像转灰度图像 码如将上面写好的代码选中拖入到主界面的工具栏上会出现以下界面给加多个路径实验程序去除路径当前路径中的文件夹名当前路径下的文件在窗口菜单中选择文件名输入命令可打开图形用户界面文件或者创建新学习必备 欢迎下载 X=grayslice(I,64);imshow(X,hot(64)%图像类型转换函数,将灰度图像转为索引色图像:索引颜色图像最多只能合用 256 种颜色,当图像模式转为索引颜色时,会构建一
10、个索引色彩表(CLUT),用来存放索引图像中的颜色。如果原图像中的颜色超出色彩表中的颜色范围,会自动选取色彩表中最相近的颜色或使用已有的颜色模拟该种颜色。索引颜色模式可以减小文件大小,同时保持视觉上的品质基本不变。(将灰度图像还原为彩色图像)X=im2bw(a);%将灰度图像转二值图像%图像类型之间的转换有时非常有用。MATLAB 提供的图像类型转换函数 函数 功能 dither 使用抖动方法,根据灰度图像创建二进制图像和根据 RGB图像创建索引图像 gray2ind 根据一幅灰度图像创建索引图像 grayslice 使用阈值截取方法,根据一幅灰度图像创建索引图像 im2bw 使用阈值截取方法
11、,根据一幅灰度图像,索引图像或 RGB图像创建二进制图像 ind2gray 根据一幅索引图像创建一幅灰度图像 ind2rgb 根据一幅索引图像创建一幅 RGB图像 mat2gray 通过数据缩放,在根据矩阵数据创建一幅灰度图像 rgb2gray 根据一幅 RGB图像创建一幅灰度图像 rgb2ind 根据一幅 RGB图像创建一幅索引图像 imhist(i);%直方图:imhist 函数用于数字图像的直方图显示,图像 i不能为彩色,即 i为二维灰度图像,不能为三维彩色图像。whos(i)%显示变量 i的名称、大小、类型等信息 whos%列出当前 workspace 里的变量名、大小、数据类型等信息
12、 class(i)%判断变量 i的数据类型 b=uint8(i);%i 表示数值,一般数值默认采取double 存储,double 型表示范围0,1,可以将 i转换为 uint8 型,范围0,255 round(0.789*255)%round 为取整函数,为最近的整数 I2=im2double(I1);%将图象数组转换成 double 精度类型。MATLAB 中读入图像的数据类型是 uint8,而在矩阵中使用的数据类型是 double,在 MATLAB 中,数值一般都采用 double型(64 位)存储和运算,如果不转换,在对 uint8 进行加减时会产生溢出,图像数据在进行计算前要转化为
13、double 类型的,这样可以保证图像数据运算的精度。uint8 表示范围0,255,double 型表示范围0,1 码如将上面写好的代码选中拖入到主界面的工具栏上会出现以下界面给加多个路径实验程序去除路径当前路径中的文件夹名当前路径下的文件在窗口菜单中选择文件名输入命令可打开图形用户界面文件或者创建新学习必备 欢迎下载 I=imread(a.jpg);%提取图像,进行编译检测的图像必须为 2 维的 BW1=edge(I,sobel);%用 SOBEL 算子进行边缘检测 BW2=edge(I,roberts);%用 Roberts 算子进行边缘检测 BW3=edge(I,prewitt);%用
14、 prewitt 算子进行边缘检测 BW4=edge(I,log);%用 log 算子进行边缘检测 BW5=edge(I,canny);%用 canny 算子进行边缘检测 h=fspecial(gaussian,5);I2=filter2(h,I,same);%进行高斯滤波 BW6=edge(I2,canny );%此为用高斯滤波后 Canny 算子边缘检测结果 subplot(2,3,1),imshow(BW1);title(sobel edge check);subplot(2,3,2),imshow(BW2);title(sobel edge check);subplot(2,3,3),
15、imshow(BW3);title(prewitt edge check);subplot(2,3,4),imshow(BW4);title(log edge check);subplot(2,3,5),imshow(BW5);title(canny edge check);subplot(2,3,6),imshow(BW6);title(gasussian&canny edge check);h1=fspecial(gaussian,4,0.3)I2=filter2(h1,I1,same)%进行高斯滤波 h2=fspecial(sobel)I3=filter2(h2,I1,same)%进行
16、sobel 滤波 h3=fspecial(prewitt)I4=filter2(h3,I1,same)%进行 prewitt 滤波 h4=fspecial(laplacian,0.5);I5=filter2(h4,I1,same);%进行拉普拉斯滤波 h5=fspecial(log,4,0.3);I6=filter2(h5,I1,same);%进行高斯拉普拉斯滤波 h6=fspecial(average);I7=filter2(h6,I1,same);%进行均值滤波 h7=fspecial(unsharp,0.3);I8=filter2(h7,I1,same);%进行模糊滤波 h8=0-1 0
17、;-1 5-1;0-1 0;I9=filter2(h8,I1,same);%进行高通高斯滤波 h9=I1;I10=medfilt2(h9);%进行中值滤波 码如将上面写好的代码选中拖入到主界面的工具栏上会出现以下界面给加多个路径实验程序去除路径当前路径中的文件夹名当前路径下的文件在窗口菜单中选择文件名输入命令可打开图形用户界面文件或者创建新学习必备 欢迎下载%注意,在 matlab 中文件名不能跟系统函数名冲突,不然会在调用原有函数时出错。val=get(hObject,Value);set(handles.txt_display,String,num2str(val);%hObject 是当
18、前控件的句柄,handles 包含了整个程序所有的句柄。在当前控件的 callback 里可以用 hObject,也可用 handles.*;在别的控件的 callback 里可以用 handles.*来调用别的控件的句柄 L=bwlabel(BW,4)%bwlabel 函数的作用是对矩阵中的连通区域赋以标号。L 为标记矩阵,L=bwlabel(BW,n)返回一个和 BW 大小相同的 L 矩阵,包含了标记了 BW 中每个连通区域的类别标签,这些标签的值为 1、2、num(连通区域的个数)。n 的值为 4 或 8,表示是按 4 连通寻找区域,还是 8 连通寻找,默认为 8。四连通或八连通是图像处
19、理里的基本感念:而 8 连通,是说一个像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角连接着,则认为他们是联通的;4 连通是指,如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的,连通的,在左上角、左下角、右上角或右下角连接,则不认为他们连通。L,num=bwlabel(BW,n)这里 num 返回的就是 BW 中连通区域的个数。举例如下:BW=1 1 1 0 0 0 0 0;1 1 1 0 1 1 0 0;1 1 1 0 1 1 0 0;1 1 1 0 0 0 1 0;1 1 1 0 0 0 1 0;1 1 1 0 0 0 1 0;1 1 1 0 0 1
20、1 0;1 1 1 0 0 0 0 0;按 4 连通计算,方形的区域,和翻转的 L 形区域,有用是对角连接,不属于连通,所以分开标记,连通区域个数为 3 L=bwlabel(BW,4)结果如下:L=1 1 1 0 0 0 0 0 1 1 1 0 2 2 0 0 1 1 1 0 2 2 0 0 1 1 1 0 0 0 3 0 1 1 1 0 0 0 3 0 1 1 1 0 0 0 3 0 1 1 1 0 0 3 3 0 1 1 1 0 0 0 0 0 而 8 连通标记,它们是连通的:L,num=bwlabel(BW,8)结果如下 码如将上面写好的代码选中拖入到主界面的工具栏上会出现以下界面给加多
21、个路径实验程序去除路径当前路径中的文件夹名当前路径下的文件在窗口菜单中选择文件名输入命令可打开图形用户界面文件或者创建新学习必备 欢迎下载 L=1 1 1 0 0 0 0 0 1 1 1 0 2 2 0 0 1 1 1 0 2 2 0 0 1 1 1 0 0 0 2 0 1 1 1 0 0 0 2 0 1 1 1 0 0 0 2 0 1 1 1 0 0 2 2 0 1 1 1 0 0 0 0 0 这里 num=2 B=bwboundaries(BW,noholes)%B 是一个 P*1 的数组,P=length(B),代表 BW 中联通体个数,B 内每行代表一个联通体的边缘坐标,边缘坐标是一个
22、 Q*2 的矩阵,Q 每一行表示联通体的边界像素的位置坐标。bwAreaOpenBW=bwareaopen(originalBW,50);%函数 bwareaopen删除小面积对象。BW2=bwareaopen(BW,P,conn)删除二值图像 BW 中面积小于 P 的对象,默认情况下 conn使用 8 邻域。guide%打开图形编程界面%界面文件扩展名为*.fig,同名的*.m 文件保存所写的程序%Tag 属性很重要,比如保存的 Tag 属性是 m_file_save,那么它对应的 Callback 函数的名字就是 m_file_save_Callback level=graythresh(
23、I1);bw=im2bw(I1,level);%graythresh函数使用最大类间方差法找到图片的一个合适的阈值(threshold)。在使用 im2bw 函数将灰度图像转换为二值图像时,需要设定一个阈值,这个函数可以帮助我们获得一个合适的阈值。利用这个阈值通常比人为设定的阈值能更好地把一张灰度图像转换为二值图像。label2rgb(L,jet,.5.5.5)%label2rgb 函数功能:转换标记矩阵到 RGB 图像。即根据标记矩阵不同的值,转变为不同的颜色或灰度。调用格式之一 RGB=label2rgb(L,map,zerocolor);其中,L 为要转换的标记矩阵,map 可取值为je
24、t 或者gray,gray 为灰度条,jet 为彩色条,即变为彩色图像,jet 表示通过 jet 的句柄引用jet map。zerocolor为标记 0 的颜色,.5.5.5 即将标记 0 的颜色设为0.5 0.5 0.5。缺省值为1 1 1,即白色。stats=regionprops(L,Area,Centroid);area=stats(k).Area;%函数regionprops语法规则为:STATS=regionprops(L,properties);regionprops统计被标记的区域的面积分布,显示区域总数。该函数用来测量标注矩阵 L 中每一个标注区域的一系列属性。L 中不同的正
25、整数元素对应不同的区域,例如:L 中等于整数 1 的元素对应区域 1;L 中等于整数 2 的元素对应区域 2;以此类推。返回值 STATS 是一个 长度为 max(L(:)的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。Properties可以是由逗号分割的字符串列表、包含字符 串的单元数组、单个字符串all或者码如将上面写好的代码选中拖入到主界面的工具栏上会出现以下界面给加多个路径实验程序去除路径当前路径中的文件夹名当前路径下的文件在窗口菜单中选择文件名输入命令可打开图形用户界面文件或者创建新学习必备 欢迎下载 basic。如果 properties 等于字符串all,则表 4
26、.1 中的度量数据都将被计算;如果 properties等于字符串basic,则属性:Area,Centroid 和BoundingBox 将被计算。表 1 就是所有有效的属性字符串。表 1 属性字符串列表-度量图像区域的属性或功能 Area 图像各个区域中像素总个数 BoundingBox 包含相应区域的最小矩形 Centroid 每个区域的质心(重心)MajorAxisLength 与区域具有相同标准二阶中心矩的椭圆的长轴长度(像素意义下)MinorAxisLength 与区域具有相同标准二阶中心矩的椭圆的短轴长度(像素意义下)Eccentricity 与区域具有相同标准二阶中心矩的椭圆的
27、离心率(可作为特征)Orientation 与区域具有相同标准二阶中心矩的椭圆的长轴与 x 轴的交角(度)Image 与某区域具有相同大小的逻辑矩阵 FilledImage 与某区域具有相同大小的填充逻辑矩阵 FilledArea 填充区域图像中的 on 像素个数 ConvexHull 包含某区域的最小凸多边形 ConvexImage 画出上述区域最小凸多边形 ConvexArea 填充区域凸多边形图像中的 on 像素个数 EulerNumber 几何拓扑中的一个拓扑不变量欧拉数 Extrema 八方向区域极值点 EquivDiameter 与区域具有相同面积的圆的直径 Solidity 同时
28、在区域和其最小凸多边形中的像素比例 Extent 同时在区域和其最小边界矩形中的像素比例 PixelIdxList 存储区域像素的索引下标 PixelList 存储上述索引对应的像素坐标 axes(handles.axes_denoise);%用 axes 函数建立坐标轴之后,还可以调用 axes 函数将之设定为当前坐标轴,且坐标轴所在的图形窗口自动成为当前图形窗口:axes(坐标轴句柄)%function 所保存 GUI 文件名_OpeningFcn(hObject,eventdata,handles,varargin)就相当于界面的初始化函数,可对窗口进行一些初始化的操作,如设定菜单项 m
29、_imgpredo不可用:set(handles.m_imgpredo,Enable,off);%用 setappdata和 getappdata两个函数。我们可以为界面上面的任何一个具有 Tag 属性的空间添加应用程序数据。例如:setappdata(handles.figure_im2bw,h_pjimage,h_pjimage);h_pjimage=getappdata(handles.figure_im2bw,h_pjimage);setappdata(handles.主窗口 Tag,img_original,0);%setappdata(h,name,value)为句柄h 所指示的对象定义应用程序数据(即创建一个 name 共享数据)。数据的名称为 name,数据的值为 value。value 可以是任何类型的数据。h=im2bw;%在当前图形界面窗口调用另外一个图形界面窗口 im2bw.fig h_pjimage=findobj(Tag,figure_pjimage);%H=findobj(属性名称,属性值);依据对象的属性名称和属性值找出匹配的对象句柄值。码如将上面写好的代码选中拖入到主界面的工具栏上会出现以下界面给加多个路径实验程序去除路径当前路径中的文件夹名当前路径下的文件在窗口菜单中选择文件名输入命令可打开图形用户界面文件或者创建新