基于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);

% 提取每个点的光谱曲线保存到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读取高光谱影像每个像素的光谱信息_第1张图片

 3.2 图像所有像素光谱信息

行:每一行代表一个像素

列:1,2列是图像像素坐标(以左上角的像素设置为原点进行编码),后面的每一列代表一个波段,其值为反射率值。

基于MATLAB读取高光谱影像每个像素的光谱信息_第2张图片

 

你可能感兴趣的:(matlab,开发语言)