使用MATLAB自动生成遥感影像数据的HDR文件
欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/
声明:算法仅供参考,需要根据自身需求进行适当更改,不要拿来主义!
前言
遥感影像数据的常用格式有很多,其中使用ENVI读取数据时,我们经常会发现很多数据都会带有 .HDR 后缀的文件,而且这个文件名称与影像数据同名,如果删除之后,影像就无法读取。其实这是遥感影像数据中的hdr头文件,包含了遥感影像中的关键信息,在ENVI读取的时首先通过读取其头文件,在获取相关的行、列、波段等相关信息之后才能成功读取遥感影像数据,所以这个文件很重要。
那么问题来了,很多从事数据图像处理或者遥感影像处理的童鞋或者科研工作者,往往使用matlab进行数据处理和程序设计,这时候我们生成的 .mat 文件数据保存成 .img 数据时,往往没有头文件信息,因此在ENVI中进行读取时还需要手动配置相关参数,否则无法读取成功。
下面分享笔者使用matlab程序编写的自动生成HDR文件的程序,以童鞋们交流学习!
1. 头文件信息
下图是一个比较简单的高光谱影像数据的头文件信息
2. matlab 程序
- 根据以上头文件信息,我们可以写出如下程序:
% 保存图像结果
% 声明:算法仅供参考,需要根据自身需求进行适当更改,不要拿来主义!
% 导入数据文件
load data.mat
[rows,cols,bands]=size(data);
% 保存文件路径设置
[FileName, PathName] = uiputfile({'*.img';'*.mat';'*.m';'*.slx';'*.*'},'Save The Result Images As');
% 对文件保持窗口选择是否保存进行判断
if isequal(FileName,0) || isequal(PathName,0)
disp('User pressed cancel')
else
disp(['Save The Result Images As: ', fullfile(PathName, FileName)])
savefile_name=strcat(PathName,FileName);
%% ==================================================
% 利用matlab自带multibandwrite函数将矩阵转换成tif文件格式,第一个参数gt是需要写入的矩阵,第二参数为存储路径和命名
multibandwrite(result,char(savefile_name),'bsq','machfmt','ieee-le','precision','double');% 注意:result为需要保存的数据
%%============下面是生成HDR文件程序=================
% 生成*.hdr文件
h1='ENVI';
h2='description = { Binary Data }';
h3=['samples = ',num2str(cols)]; % 使用矩阵形式,可以将空格写入TXT文本文件中,使用strcat则无法写入空格
h4=['lines = ',num2str(rows)];
h5=['bands = ',num2str(bands)];
h6='header offset = 0';
h7='file type = ENVI Standard';
h8='data type = 5';
h9='interleave = bsq';
h10='sensor type = Unknown';
h11='byte order = 0';
h12='wavelength units = Unknown';
h={};
h={h1;h2;h3;h4;h5;h6;h7;h8;h9;h10;h11;h12};
if ~isempty(strfind(FileName,'.'))==0;
fid=fopen(strcat(PathName,strcat(FileName,'.hdr')),'wt');
else
hdr_nam=FileName(1:end-4);
hdr_name=strcat(hdr_nam,'.hdr');
fid=fopen(strcat(PathName,hdr_name),'wt');
end
for i=1:12;
fprintf(fid,'%s\n',h{i});
end
fclose(fid);
end
%% ===================================================
OK,现在就可以看到生成的HDR文件了,如上所示,就可以配合我们保存的img格式影像在ENVI中打开了。关于保存多维矩阵为img影像,就很简单了!