You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从高光谱超立方体数据绘制近红外反射率-波长图?

绘制高光谱反射率-波长关系图的Python实现

核心步骤

  • 读取ENVI格式高光谱数据与ROI掩码
  • 提取目标区域的反射率统计值
  • 从头文件中获取波长信息
  • 绘制反射率随波长变化的曲线

依赖库安装

先安装所需工具包:

pip install spectral pillow matplotlib numpy

示例代码

import numpy as np
import spectral as spy
from PIL import Image
import matplotlib.pyplot as plt

# 读取高光谱立方体与ROI掩码
hypercube = spy.open_image('cube_envi32.hdr')
reflectance_data = hypercube.load()  # 数据形状:(行数, 列数, 波段数)
roi_mask = np.array(Image.open('roi_masks.bmp'))

# 校验掩码与高光谱数据的空间维度一致性
assert roi_mask.shape == reflectance_data.shape[:2], "掩码与高光谱数据空间维度不匹配"

# 提取ROI区域的反射率(假设掩码中白色255为目标区域)
roi_pixels = reflectance_data[roi_mask == 255]
# 计算ROI区域的平均反射率(按波段取均值)
mean_reflectance = np.mean(roi_pixels, axis=0)

# 从ENVI头文件中读取波长信息
wavelengths = hypercube.bands.centers

# 绘制关系图
plt.figure(figsize=(10, 6))
plt.plot(wavelengths, mean_reflectance, color='#1f77b4', linewidth=2)
plt.xlabel('波长 (nm)')
plt.ylabel('反射率')
plt.title('ROI区域平均反射率-波长曲线')
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()

关键注意事项

  • 掩码值适配:如果你的ROI掩码用其他灰度值标记目标区域(比如黑色0),需修改roi_mask == 255中的数值。
  • 数据类型转换:若反射率数据为整数类型,建议转为浮点型(reflectance_data = reflectance_data.astype(np.float32))避免计算偏差。
  • 统计量替换:除了平均反射率,可替换为中位数、最大值/最小值,只需将np.mean改为np.median、np.max、np.min。
  • 多ROI处理:若掩码包含多个不同灰度值的区域,可循环提取各区域反射率并在同图绘制多条曲线。

内容的提问来源于stack exchange,提问作者S.EB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:32:05