一、文件操作
1.1 查看指定文件夹是否存在,如果存在删除重建
savepath=['../saved/'];
if exist(savepath,'dir')
rmdir(savepath,'s');
end
mkdir(savepath);
1.2 查看目标文件夹下所有指定格式文件,删除文件
picFormat='tif';%图片格式
files_list = dir(fullfile(data_file,['*.',picFormat]));%查看指定格式文件
delete([data_file,files_list(end).name]); %删除列表中最后一个文件
1.3 查看目标文件夹下所有子文件夹
files_list = dir(path);
1.4 判断目标文件是否存在,如果存在则删除
if exist(txtname,'file')
delete(txtname);
end
1.5 写txt或ini文件
a=1:100;
b=321;
txtname='output.txt';
if exist(txtname,'file')
delete(txtname);
end
fid_txt=fopen(txtname,'a');
fprintf(fid_txt,'[node1]');
fprintf(fid_txt,'\r\n');
fprintf(fid_txt,'a=');
fprintf(fid_txt,'\r\n');
for i=1:length(a)-1
fprintf(fid_txt,[num2str(a(i)),',']);
end
fprintf(fid_txt,[num2str(a(end))]);
fprintf(fid_txt,'\r\n');
fprintf(fid_txt,'[node2]');
fprintf(fid_txt,'\r\n');
fprintf(fid_txt,['b=',num2str(b)]);
fprintf(fid_txt,'\r\n');
fprintf(fid_txt,'txt write finished!');
fprintf(fid_txt,'\r\n');
fclose(fid_txt);
disp(['test finish!']);
1.6 写xlsx文件
a=1:100;
b=321;
c=3.1415926;
xlsxname='data.xlsx';
if exist(xlsxname,'file')
delete(xlsxname);
end
sheetname='sheet1';
xlswrite(xlsxname,{'a','b','c','xlsx write finished!'},sheetname,'A1');
xlswrite(xlsxname,a',sheetname,'A2');
xlswrite(xlsxname,b,sheetname,'B2');
xlswrite(xlsxname,c,sheetname,'C2');
写dat和hdr,支持ENVI直接打开
% 创建mat矩阵pb
p=ones(640,512);
b=4:4:256;
pb=[];
for i=1:length(b)
pb(:,:,i)=p*b(i);
end
pb30=pb(:,:,30);
figure;
imshow(uint8(pb30));
%保存dat
fid_cmati = fopen('pb.dat','w');
fwrite(fid_cmati,pb,'double');
fclose(fid_cmati);
%保存hdr
fid_dp=fopen('pb.hdr','a');
fprintf(fid_dp,'ENVI');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'description = {');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,' File Imported into ENVI.}');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,['samples = ',num2str(size(pb,1))]);
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,['lines = ',num2str(size(pb,2))]);
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,['bands = ',num2str(size(pb,3))]);
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'header offset = 0');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'file type = ENVI Standard');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'data type = 5');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'interleave = bsq');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'sensor type = Unknown');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'byte order = 0');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'band names = {');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'band 1');
for ii=2:size(pb,3)
fprintf(fid_dp,[',band ',num2str(ii)]);
end
fprintf(fid_dp,'}');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,'wavelength = {');
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,num2str(b(1)));
for ii=2:length(b)
fprintf(fid_dp,[', ',num2str(b(ii))]);
end
fprintf(fid_dp,'}');
fclose(fid_dp);
二、自定义函数
2.1 raw文件读取,raw转mat
function mat=raw2mat(allpath,col,row,band,way)
% col=512;
% row=640*54;
fid=fopen(allpath,'r');
A=fread(fid,[col,row*band],way);
A=A';
fclose(fid);
% figure;
% imshow(uint8(A(1:640,1:512)));
mat=[];
for i=1:band
mat(:,:,i)=A(row*(i-1)+1:row*i,1:col);
% figure;
% imshow(uint8(B(:,:,i)));
% title(num2str(i));
end
end
2.2 .asc文件读取
1-1-505.asc文件内容:
asc文件中第91行开始为要用的数据。
[wavei,valuei]=textread('1-1-505.asc', '%f %f','headerlines', 90);
2.3 读取xml文件
function doubleDataPt = myreadxml(allpath, NodeName)
% 读取xml文件:读取xml指定节点下的数据,保存成mat
%输入:allpath:xml文件的全路径,包括文件名
% NodeName:节点名
%输出:doubleDataPt:指定节点中的数据
xmlDoc = xmlread(allpath); %读取xml文件。
doubleDataPt=[];
DataPt_array= xmlDoc.getElementsByTagName(NodeName); % 将所有DataPt节点放入数组DataPt_array
for i = 0 : DataPt_array.getLength-1 % DataPt_array.getLength
charDataPt= char(DataPt_array.item(i).getFirstChild.getData); % 提取当前节点的内容,内容为char型
doubleDataPt(i+1,1)=str2double(charDataPt); %将插入型转化为double型
%fprintf('%d %f \n',i+1,num(i+1)); %输出double型数据
end
return;
xml文件内容:
函数调用:
bi = myreadxml('8.5.xml', 'DataPt');
2.4 曲线寻峰函数
function [posi,widthi]=myxunfengLeftRight(sIi)
[maxv,maxi]=max(sIi);
minv=min(sIi);
midv=(maxv+minv)/2;
%left
ww_left=abs(sIi(1:maxi)-midv);
[~,mini_left]=min(ww_left);
%right
ww_right=abs(sIi(maxi+1:end)-midv);
[~,mini_right]=min(ww_right);
posi=(mini_left+mini_right+maxi)/2;
widthi=mini_right+maxi-mini_left;
end
2.5 曲线平滑
function xc=myWindowsFilter(x,windowSize,dim)
%x为一维向量
%windowSize为窗口尺寸
%xc为平滑后的一维向量
a = (1/windowSize)*ones(1,windowSize);
if dim == 1
b = conv(ones(length(x),1),a,'same');
else if dim==2
b = conv(ones(1,length(x)),a,'same');
end
end
y = conv(x,a,'same');
xc = y./b;
end
2.6 光谱角填图匹配SAM
function angle = mysam(a, b)
% 光谱角填图算法:计算两个一维向量的光谱角相似度
%输入:a,b均为一维向量
%输出:a,b间的光谱角
% [p,N] = size(a);
% errRadians = zeros(1,N);
% for k=1:N
% tmp = a(:,k);
% errRadians(k) = acos(dot(tmp, b)/ (norm(b) * norm(tmp)));
% end
xtxi=sum(sum(a.*b));
x11=sqrt(sum(a.^2));
xi11=sqrt(sum(b.^2));
angle=acos(xtxi/x11/xi11);
return;
2.7 批量最小二乘回归,批量计算一次线性拟合的k和b
function [k,b,r2] = LinearRegForArr(x,y,dim)
%最小二乘法一次线性回归函数
%x,y为原始数据
%dim控制按行计算还是按列计算的参数,1为按列计算(1列为1组数据),2为按行计算
%k、b、r2分别为拟合后的k、b、r2的矩阵
n = size(y,dim);
x2=sum(x.^2,dim); % 求Σ(xi^2)
x1=sum(x,dim); % 求Σ(xi)
x1y1=sum(x.*y,dim); % 求Σ(xi*yi)
y1=sum(y,dim); % 求Σ(yi)
k=(n.*x1y1-x1.*y1)./(n.*x2-x1.*x1); %解出直线斜率b=(y1-a*x1)/n
b=(y1-k.*x1)./n; %解出直线截距
yfit=x.*k+b; %求拟合值
sst=sum(((y-mean(y,dim)).^2),dim);
ssr=sum(((yfit-mean(yfit,dim)).^2),dim);
r2=ssr./sst; %求拟合的R2
end
2.8 获取目标文件夹下所有子文件夹的路径
function [SubFolders] = GetFolders(ParentFolder)
%GetFolders
% 函数功能为获取父文件夹下所有子文件夹的路径
% 函数的输入为ParentFolder:父文件夹路径。eg: 'D:\myFiles'
% 函数的输出为SubFolders:子文件夹路径。为一个元胞数组,eg: {'D:\myFiles\file1\doc1'}
SubFolderNames = dir(ParentFolder);
for i=1:length(SubFolderNames)
if( isequal( SubFolderNames( i ).name, '.' )||...
isequal( SubFolderNames( i ).name, '..')||...
~SubFolderNames( i ).isdir) % 如果不是目录则跳过
continue;
end
SubFolder(i).SubFolderName = fullfile( ParentFolder, SubFolderNames( i ).name );
end
temp = {SubFolder.SubFolderName};
idx = cellfun(@(x)~isempty(x),temp,'UniformOutput',true); % 利用cellfun函数得到元胞数组中所有非空元素的下标
SubFolders = temp(idx);
end
2.9 获得目标文件夹下,指定格式所有文件名
function [FileNames] = GetFileNames(Path,Format)
% GetFileNames
% 函数的功能为获得某一路径下,某种格式所有文件名
% 函数的输入1为Path,要获取的路径。eg: 'D:\myFiles\docs'
% 函数的输入2为Format,要获取路径的文件格式。eg: '*.txt','*.docx','*.png'
fileFolder=fullfile(Path);
dirOutput=dir(fullfile(fileFolder,Format));
FileNames={dirOutput.name};
end
三、绘图
3.1 画热度图
%画热度分布图
figure(1);
set(gcf,'position',[50 50 1200 900]);
colormap jet;
imagesc(a);%矩阵a尺寸为w*h*1
xlim([0 w]);
ylim([0 h]);
set(gca,'XTick',0:floor(w/8):w);
set(gca,'YTick',0:floor(h/8):h);
colorbar;
title('pic');
3.2 在图片上写字
%x,y为文字的位置
%hello为文字的内容
%'horiz','left' 左对齐
%'fontsize',11 字号为11
text(x,y,'hello','horiz','left','fontsize',11);
四、其他
4.1 延时和计时
pause(1);%延时1s
t1=clock;%开始计时
......
......
......
t2=clock;%结束计时
time=etime(t2,t1);%计算时间,单位秒
4.2 小数保留固定位数
c=3.1415926;
d_str=sprintf('%.4f',c);%保留4位小数后的字符串
d=str2num(d_str);%字符串转数字
4.3 矩阵旋转和左右翻转
%矩阵先顺时针转90度
mat1=rot90(mat1);
%矩阵左右翻转
mat2=fliplr(mat1);
4.4 矩阵按指定维度从大到小排序
[max_value9,max_index9]=sort(mat,3,'descend');%mat按第3维度从大到小排序
4.5 矩阵卷积
kenel = 1/25 * ones(5,5);%5*5卷积核
b=conv2(a,kenel,'valid');%对a进行卷积操作
4.6 矩阵元素统计
statistics1=tabulate(mat);%统计mat中的元素
statistics1(find(statistics1(:,2)==0),:)=[];%去掉没有出现过的元素
statistics1_index=find(statistics1(:,2)>1);%找出现次数大于1的元素的索引
statistics2=statistics1(statistics1_index,:);%统计出现次数大于1的元素
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。1
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎