matlab|基于MATLAB读取高光谱影像每个像素的光谱信息

1.安装高光谱工具箱 首先,利用MATLAB对高光谱影像进行处理需要安装高光谱工具箱,这要求MATLAB版本至少为2020版本及以上,否则会出现不兼容的问题。
下载地址:https://ww2.mathworks.cn/help/images/ref/hyperspectralviewer-app.html
2.示例代码

clear, clc, close all;
hcube = hypercube('temp.hdr'); % caijian.hdr 为高光谱数据
datacube = hcube.DataCube;
wl = hcube.Wavelength;

% lines 为行数,samples 为列数,bands 为波段数
[lines, samples, bands] = size(datacube);

% 新建表格用于存放光谱数据,行数为画面中所有像素点的数据,列数包括像素x,y的坐标列和波长列
data_table = zeros(lines*samples, bands+2);
【matlab|基于MATLAB读取高光谱影像每个像素的光谱信息】
% 提取每个点的光谱曲线保存到data_table中
sum = 0;
for x = 1:1:lines
for y = 1:1:samples
sum = sum+1;
data_table(sum, 1) = x; % 第一列为像素的行索引
data_table(sum, 2) = y; % 第二列为像素的列索引
spectrum = datacube(x, y, :);
spectrum_1d = reshape(spectrum, [1, bands]);
data_table(sum, 3:end) = spectrum_1d; % 第三列到最后一列为波段
end
end

% % 通过两种方式,绘制第3行,第10列像素的光谱曲线,验证提取的光谱曲线是否准确
wl_1d = reshape(wl, [1, bands]);
figure, plot(wl_1d, data_table((3-1)*samples+10, 3:end), "LineWidth",5, "Color","blue"); % 从data_table 中取点
hold on;
spectrum_1d = reshape(datacube(3, 10, :), [1, bands]); % 从图像中取点
plot(wl_1d, spectrum_1d, "LineWidth", 1, "Color","red");
hold off
3.结果展示 3.1 单个像素光谱信息
matlab|基于MATLAB读取高光谱影像每个像素的光谱信息
文章图片

3.2 图像所有像素光谱信息
行:每一行代表一个像素
列:1,2列是图像像素坐标(以左上角的像素设置为原点进行编码),后面的每一列代表一个波段,其值为反射率值。
matlab|基于MATLAB读取高光谱影像每个像素的光谱信息
文章图片


    推荐阅读