当前位置:   article > 正文

MATLAB读取高光谱图像

MATLAB读取高光谱图像

一.高光谱图像数据格式

一张高光谱原图有两个数据文件,一个是.hdr格式的头文件,另一个是记录像素及波段的数据文件,格式可以是.raw,也可以是其他任意命名格式。高光谱图像通常使用ENVI软件来打开和处理,通常的处理方式是提取光谱曲线。

二.高光谱图像的MATLAB处理

下面分析一段代码,代码展示了使用matlab打开一张高光谱图像,并且使用k-means算法进行聚类,分割出图像目标物体的像素,并统计目标像素的平均光谱。 运行以下代码需要准备: 1.数据:.hdr格式的头文件和数据文件。 2.ENVI包:搜索read_envihdr下载即可。

% 读取高光谱图像
hdr = read_envihdr('169.hdr');
Image = multibandread('169.raw',hdr.size,hdr.format,hdr.header_offset,hdr.interleave,'ieee-le');

img = double(Image); % 将图像转换为double类型以进行计算

% 调整图像大小(可选,根据需要)
img = imresize(img, [900,900]);

% 获取图像尺寸和波段数
[height, width, bands] = size(img);

% 将图像转换为波段向量
img_vec = reshape(img, height*width, bands);

% 使用k-means算法进行聚类
num_clusters = 3; % 聚类数目
max_iterations = 100; % 最大迭代次数
[cluster_idx, cluster_center] = kmeans(img_vec, num_clusters, 'MaxIter', max_iterations);

% 将聚类结果重新组织为图像形式
segmented_img = reshape(cluster_idx, height, width);

% 计算每个聚类的平均光谱
average_spectrum = zeros(num_clusters, bands);
for i = 1:num_clusters
    cluster_pixels = img_vec(cluster_idx == i, :);
    average_spectrum(i, :) = mean(cluster_pixels, 1);
end

% 显示每个聚类的平均光谱
figure;
plot(average_spectrum', 'LineWidth', 2);
xlabel('波段');
ylabel('平均光谱值');
legend('Cluster 1', 'Cluster 2', 'Cluster 3');
title('聚类的平均光谱');


% 可选:显示分割后的图像
figure;
imagesc(segmented_img);
title('分割结果');

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

运行结果:左图是目标分割结果,右图是每种类别的平均光谱

左图是目标分割结果,右图是每种类别的平均光谱

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/338624
推荐阅读
相关标签
  

闽ICP备14008679号