使用MATLAB自动生成遥感影像数据的HDR文件

使用MATLAB自动生成遥感影像数据的HDR文件

欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/

声明:算法仅供参考,需要根据自身需求进行适当更改,不要拿来主义!

前言

遥感影像数据的常用格式有很多,其中使用ENVI读取数据时,我们经常会发现很多数据都会带有 .HDR 后缀的文件,而且这个文件名称与影像数据同名,如果删除之后,影像就无法读取。其实这是遥感影像数据中的hdr头文件,包含了遥感影像中的关键信息,在ENVI读取的时首先通过读取其头文件,在获取相关的行、列、波段等相关信息之后才能成功读取遥感影像数据,所以这个文件很重要。

那么问题来了,很多从事数据图像处理或者遥感影像处理的童鞋或者科研工作者,往往使用matlab进行数据处理和程序设计,这时候我们生成的 .mat 文件数据保存成 .img 数据时,往往没有头文件信息,因此在ENVI中进行读取时还需要手动配置相关参数,否则无法读取成功。

下面分享笔者使用matlab程序编写的自动生成HDR文件的程序,以童鞋们交流学习!

1. 头文件信息

下图是一个比较简单的高光谱影像数据的头文件信息
HDR 头文件信息

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影像,就很简单了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值