博客
关于我
【MATLAB】学习笔记(二次整理)
阅读量:551 次
发布时间:2019-03-09

本文共 6581 字,大约阅读时间需要 21 分钟。

目录

MATLAB基础

程序一:imread、imshow、max、min

data=imread('..\data\data1\fig.jpg');imshow(data)min(data(:))		% 0max(data(:))		% 247disp(max(data(:)));data=data/2;max(data(:))		% 124imshow(data)

解析:

  1. 图像读取 data = imread('E:\ABCPhoto\practice\fig.jpg');
  2. 图片的显示 imshow(data)
  3. max(data(:))表示data中的所有数值都参与运算;a = data(:,:,1)中a表示data中的第一波段;max(a(:))表示计算第一波段中的最大值;

注意:

  • 图片的名称并不是fig.jpg,而是fig,后面的后缀是图片的格式
  • 若不想再MATLAB中将所有像元信息列出来,可以在末尾添加一个;
  • 将矩阵转换为向量,用
  • 将向量转换成矩阵,用reshape
imwrite(data, '..\tmp\fig.jpg');imwrite(data, '..\tmp\fig.tif');help imread  // 帮助文档,查看书写格式help imwriteMenu: Help > Product Help > imread

解析:

  1. imwrite可以存储与书写数据,最后.jpg.tif可以换成想要的格式
  2. help imread/imwrite等命令可以查看帮助文档;或者直接在菜单栏中找到帮助窗口
cd 'D:\tmp'	% Change current working directorya=1:5b=6:10c=11:15d=16:20e=21:25data=[a;b;c;d;e] or data=[a,b,c,d,e] or data=[a b c d e]dlmwrite('data.csv', data)clear  // 清空变量区的变量值type: help dlmwrite or dlmwrite

解析:

  1. cd转换工作文件夹
  2. a~e是按顺序排列的五个数
  3. data的拼接形式,第一种为上下拼接,第二种与第三种为左右拼接
  4. csv是 Comma Separated Values的缩写。
  5. dlmwrite书写数据的时候可以用不同分隔符。若如上书写,则分隔符为。若写成dlmwrite('data.csv',data,'\t'),则如下框中所示:
  6. clear:清除所有变量与内存;clc:清除屏幕而不清除内存
>>data = [a;b;c;d;e]data =     1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19    20    21    22    23    24    25>>data = [a,b,c,d,e]  or data=[a b c d e]  列 1 至 15     1     2     3     4     5     6     7     8     9    10    11    12    13    14    15  列 16 至 25    16    17    18    19    20    21    22    23    24    25
data=dlmread('..data\data1\data.csv’)- 读的是excel、asc、csv等- 读写图片用imread、imwritedlmwrite('data1.csv',data)dlmwrite('data2.txt',data*2)dlmwrite('data2.asc',data / 2)

解析:

  1. .csv.txt.asc均是文件存储的格式;

计算均值、方差、标准差

啊这?噗,那换一下换一下

xlsread is not recommended. Use readtable, readmatrix, or readcell instead. For more information, see Compatibility Considerations.

data = readmatrix('E:\MATLAB\math-geo\data.xlsx')  // 想要确定输出矩阵中小数点精度,不知道怎么弄data1 = mean(data)  // 按矩阵计算,算出了每一列的均值data2 = mean(data(:))  // 将矩阵转换成向量,算出了所有了数的均值// 可以进行套娃mean(data(:)) = mean(mean(data))
  • MATLAB中使用的var()函数定义的是样本方差,分母除的是(n-1)
  • MATLAB中使用的std()函数定义的是样本标准差,分母除的是(n-1)

归一化

洛伦兹曲线

1.cumsum()可计算向量、矩阵、逻辑值。矩阵中可按行计算也可按列计算。

2.linspace()线性等分向量。
3.interp1()插值。
4.trapz()计算基尼系数,梯形数值积分。

语法:Q = trapz(Y)Q = trapz(X,Y)Q = trapz(___,dim)说明:Q = trapz(Y) 通过梯形法计算 Y 的近似积分(采用单位间距)。Y 的大小确定求积分所沿用的维度:- 如果 Y 为向量,则 trapz(Y) 是 Y 的近似积分。- 如果 Y 为矩阵,则 trapz(Y) 对每列求积分并返回积分值的行向量。- 如果 Y 为多维数组,则 trapz(Y) 对其大小不等于 1 的第一个维度求积分。该维度的大小变为 1,而其他维度的大小保持不变。Q = trapz(X,Y) 根据 X 指定的坐标或标量间距对 Y 进行积分。- 如果 X 是坐标向量,则 length(X) 必须等于 Y 的大小不等于 1 的第一个维度的大小。- 如果 X 是标量间距,则 trapz(X,Y) 等于 X*trapz(Y)。Q = trapz(___,dim) 使用以前的任何语法沿维度 dim 求积分。必须指定 Y,也可以指定 X。如果指定 X,则它可以是长度等于 size(Y,dim) 的标量或向量。例如,如果 Y 为矩阵,则 trapz(X,Y,2) 对 Y 的每行求积分。

5.cftool()拟合曲线。

6.画图去掉右侧与上侧的刻度。

box offax2 = axes('Position',get(gca,'Position'),...           'XAxisLocation','top',...           'YAxisLocation','right',...           'Color','none',...           'XColor','k','YColor','k');set(ax2,'YTick', []);set(ax2,'XTick', []);box on

7.去掉标注周围的黑框,用legend('boxoff')

8.再已经完成的图像上加点方法:
(1)Figure的Brush/Select Data功能。(为尝试)
(2)
hold on;
plot(1000,200,’.’,‘MarkerEdgeColor’,‘k,‘MarkerSize’,16);
在图中(x,y)坐标为(1000,200)画一个黑色的点。其中:’.'是点的形状;‘MarkerEdgeColor’是定义点的颜色,这里’k’是黑色;‘MarkerSize’是定义点的大小。
(3)可添加一组数据进去。或许一个点不知道可不可以。
hold on
scatter(x,y);
(4)gtext(’(x,y)’);
9.限定x轴y轴范围:axis([xmin xmax ymin ymax])。只限定y轴ylim([ymin ymax])

主成分分析

变量与样本

% 数据标准化并计算相关系数mv=mean(data,1);                                 % 计算各变量的均值st=std(data);                                    % 计算各变量的标准差[n m]=size(data);                                % 计算矩阵的函数和列数X=(data-mv(ones(n,1),:))./st(ones(n,1),:);       % 原始数据集体标准化R=corrcoef(X);                                   % 计算相关系数矩阵% 主成分分析的完整计算过程[U,V]=eig(R);                                    % 计算特征向量U和特征值矩阵VE=transpose(rot90(U));                           % 将特征向量矩阵U旋转90度再转置G=rot90(rot90(V));                               % 将对角矩阵旋转180度eigv=diag(G);                                    % 提取对角矩阵的对角线元素per=100*eigv/sum(eigv);                          % 计算方差贡献百分比Cum=cumsum(per);                                 % 计算方差贡献累积百分比C=sqrtm(G);                                      % 将对角矩阵对角线元素化为平方根A=E*C;                                           % 计算载荷矩阵H=A(:,1:3);                                      % 提取第一、第二、第三主成分的载荷

遥感影像

1.随机生成三维的矩阵,a=rand([3,2,3]);

2.按列计算平均值mean(a(:,1));,按行计算平均值mean(a(:,2));,按像元计算平均值mean(a(:,3));,按波段计算平均值mean(mean(a));
3.计算每个波段的标准差

A(:,:,1)=[2 4; -2 -1];A(:,:,2)=[9 13; -5 7];A(:,:,3)=[4 4; 8 -3];S=std(A,0,[1 2])S = S(:,:,1) =    2.5000S(:,:,2) =    7.7460S(:,:,3) =    4.5735

随堂笔记

多元统计

1.两个%%加一个空格,可以将文本分区。

2.一般开头都用clear all; clc
原因:避免别的元素造成干扰。
3.用于做回归的函数regress。去help看一下。
help 函数 在MATLAB中打开;
helpwin 函数 在windows中打开;
edit 函数 打开函数的具体代码。
4.当不想要函数输出的某些量,但需要得到后面的变量,可以打~。如[a,b,~,~,c]=regress(Y,X)
5.ctrl+c,打断命令。
6.plot(X(:,2),1,'o-'),最右边的'o-'的意思,会在图形上显示有圈圈。plot(Y,'v-')这个会在图片上显示三角形,因此黑白打印时能区分曲线。画图时有颜色与形状区分。可双击图片对显示进行设置。对图像进行操作时,可右键显示代码,得到代码。
7.hold on,可在两条曲线画图的时候,先画一条,然后停下来,再继续画另一条。figure能显示图片,若没有figure,结果显示会被覆盖。
8.有很多图的时候,用close all关掉全部
8.ones(9,1)九行一列的1,2*ones(9,1)九行一列的2,zeros(9,1)九行一列的0。
9.函数importdata

遥感图像处理

1.计算协方差矩阵cov(data);

2.计算特征向量与特征值[V,D]=eig(cov(data));,对协方差矩阵求特征值和特征向量。根据D中的值大小进行排序;V是所求的旋转矩阵。
3.计算相关系数corr(data);
4.表示逆矩阵inv(data);

数量地理学

指数换数拟合

1.plotfit():进行多项式拟合。其数学原理

图像增强

1.*.*的区别:

(1)在进行数值运算和数值乘矩阵的时候,没有区别。
(2)矩阵和矩阵运算时,
*表示普通的矩阵乘法,要求前面矩阵的列数等于后面矩阵的行数;
.*表示两个矩阵对应元素相乘,要求两个矩阵行数列数都相等。

例如A,B分别为两个矩阵,则:

A.*B表示的是两个矩阵的对应元素相乘,其中生成的同阶矩阵C的对应的矩阵元素为:C(i,j)=A(i,j)*B(i,j);而如果A*B的话,则是正常的矩阵相乘,并非是对应的元素相乘。

>> a=[1 1 ; 1 1]a=	1	1	1	1>>a^2ans=	2	2	2	2>>a.^2ans=	1	1	1	1

2.除与点除

(1)数值运行时,两种没有区别。
(2)数值与矩阵运算时,要分数值在前还是在后。
  a.数值在前,只能用./
  b.数值在后,两者相同。
(3)矩阵与矩阵运算时,对应元素相除,要求两者行数列数相等。
(4)矩阵除矩阵,A/B可粗略地看作A*inv(B)
在可逆形式下转换成逆矩阵,右除对右边矩阵逆,左除对左边矩阵逆。
  a.C/B=C*(inv(B)) (C右除B等于C乘以B的逆)
  b.A\C=inv(A)*C (A左除C=A的逆乘以C)
3.fspecial():create predefined 2-D filter.

h = fspecial(type)h = fspecial('average',hsize)h = fspecial('disk',radius)h = fspecial('gaussian',hsize,sigma)h = fspecial('laplacian',alpha)h = fspecial('log',hsize,sigma)h = fspecial('motion',len,theta)h = fspecial('prewitt')h = fspecial('sobel')

4.imfilter():N-D filtering of multidimensional images.

B = imfilter(A,h)B = imfilter(A,h,options,...)

5.imnoise()

(1)要将数值限制在0-1之间。
6.两数平方和再开方:p=sqrt(double(p1).^2+double(p2).^2);

多光谱转换

1.pca():MATLAB自带主成分分析函数。

2.显示RGB:432波段。

ims=multibandread(input,[nrows ncols bands],'uint8',offset,interleave,byteorder,{'Band','Direct',[4 3 2]});ims=multibandread(input,[nrows ncols bands],'uint8',offset,interleave,byteorder);imgmul=cat(3,ims(:,:,4),ims(:,:,3),ims(:,:,2));  % 合成三维矩阵imshow(uint8(imgmul))

3.repmat()

转载地址:http://vrwsz.baihongyu.com/

你可能感兴趣的文章
MSB与LSB
查看>>
MSCRM调用外部JS文件
查看>>
MSCRM调用外部JS文件
查看>>
MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
查看>>
MsEdgeTTS开源项目使用教程
查看>>
msf
查看>>
MSSQL数据库查询优化(一)
查看>>
MSSQL数据库迁移到Oracle(二)
查看>>
MSSQL日期格式转换函数(使用CONVERT)
查看>>
MSTP多生成树协议(第二课)
查看>>
MSTP是什么?有哪些专有名词?
查看>>
Mstsc 远程桌面链接 And 网络映射
查看>>
Myeclipse常用快捷键
查看>>
MyEclipse更改项目名web发布名字不改问题
查看>>
MyEclipse用(JDBC)连接SQL出现的问题~
查看>>
mt-datetime-picker type="date" 时间格式 bug
查看>>
myeclipse的新建severlet不见解决方法
查看>>
MyEclipse设置当前行背景颜色、选中单词前景色、背景色
查看>>
Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
查看>>
myeclipse配置springmvc教程
查看>>