【MATLAB】学习笔记(二次整理)

【MATLAB】符号系统

MATLAB基础

程序一:imread、imshow、max、min

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

data=data/2;
max(data(:))		% 124
imshow(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 imwrite
Menu: Help > Product Help > imread

解析:

  1. imwrite可以存储与书写数据,最后.jpg.tif可以换成想要的格式
  2. help imread/imwrite等命令可以查看帮助文档;或者直接在菜单栏中找到帮助窗口
cd 'D:\tmp'	% Change current working directory
a=1:5
b=6:10
c=11:15
d=16:20
e=21:25
data=[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、imwrite
dlmwrite('data1.csv',data)

dlmwrite('data2.txt',data*2)

dlmwrite('data2.asc',data / 2)

解析:

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

计算均值、方差、标准差

Matlab读取excel文件中的数据
啊这?噗,那换一下换一下

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)

归一化

Matlab–三种归一化方法

洛伦兹曲线

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 off
ax2 = 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和特征值矩阵V
E=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.5000

S(:,:,2) =

    7.7460

S(:,:,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^2
ans=
	2	2
	2	2
>>a.^2
ans=
	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()

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值