基于matlab读取envi格式高光谱图像数据

本文介绍了光谱原理、高光谱遥感数据的三维结构,以及如何使用MATLAB读取和处理envi格式的高光谱数据。通过学习元数据和数据整理,探讨了如何将一维数据转换为三维矩阵,并展示了头文件信息的提取和数据类型处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1关于光谱:

电磁波按波长大小分为射线,可见光,近红外(780nm-2526nm),无线电等。

波长:一个振动周期内传播的距离。

什么是光谱:复色光色散后按波长大小排列的图案。

什么是高光谱:1光谱信息丰富的光谱信息2光谱分辨率足够高

什么叫光谱信息丰富:区分光波段范围足够细。

光谱分辨率足够高:1在一固定波长内波段越多的光谱,分辨率越高。2波段越小,分辨率越高。

什么是半高全宽:看分辨率有多高,波段有多宽。

高光谱遥感数据光谱特征的三层体系

高光谱遥感影像是一个空间-光谱数据立方体。

每一层为一个波段,每一个像元各波段的属性值都构成一个光谱向量

通过对光谱向量的分析,可以提取许多对分类、信息提取都用的信息

高光谱数据格式之一:标准envi格式是两个文件,一个HDR一个DAT。

2基于matlab简单读取函数

function [image]=freadhyperspectraldata(fname)

fid=fopen(fname);%打开冰箱
image=fread(fid);%放进大象 
fclose(fid);     %关上冰箱门   
%%简单的读取函数,得到一个一维结果。1*161200000.

将高光谱文件每一个数值进行读取,输出一个一维数组。

3按头文件,将上述数组reshape

我们无法处理上述一维数据,所以需要把高光谱数据变成三维矩阵,以便矩阵运算。

我们需要处理矩阵行数,列数,通道数(波段数),数据类型,这四个值在头文件有标明。

所以reshape之前使用基本语句读取到上述四个值,得到一个三位矩阵(表示高光谱数据尺寸)和一个数据类型。

clc
clear
fname='G:\轻工大学\1高光谱\高光谱数据\T1\1\capture\1-1'
rfid = fopen(strcat(fname,'.hdr'),'r'); %打开头文件%strcat是连接字符串,rfid是指定头文件
while 1
    tline = fgetl(rfid);%fget是读取每一行并去掉换行符
    if ~ischar(tline), break, end
    [first,second]=strtok(tline,'=');%将=作为分割节点,
                                        %=前为first,=后为second
d={'bit8' 'int16' 'int32' 'float32' 'float64' 'uint16' 'uint32' 'int64' 'uint64'};

    switch first%获取头文件中samples,lines,bands的值,即行数、列数、波段数信息
        
        case 'samples '
            [f,s]=strtok(second);
            p(1)=str2num(s);
            first
           % a=1
        case 'lines '
            [f,s]=strtok(second);
            p(2)=str2num(s);
        case 'bands '
            [f,s]=strtok(second);
            p(3)=str2num(s);
            
    end

end
t='uint16'%本次实验为了加快进度未设置如何搜索数据类型,直接赋值
fname='G:\轻工大学\1高光谱\高光谱数据\T1\1\capture\1-1.dat'
fid=fopen(fname);
image=fread(fid,t);
image=reshape(image,[p(1),p(2),p(3)]);
fclose(fid);
  

运行结果:image:1024*948*224

p指光谱数据矩阵尺寸,image指reshape后的光谱数据已经被读取并转换为三维矩阵。

ps:envi标准高光谱数据格式分为两个文件:1头文件 hdr文件2数据文件dat(有一点不懂为什么记事本打开dat文件全是乱码而不是数字矩阵,按头文件说的应该uint16。如果不是数字那么matlab里的image三维矩阵又是什么呢。)

今天学习了元数据的读取和数据整理,下一次我们可以看看这些数据如何在matlab里显示和修改。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值