mat标注数据可视化(shanghaiTech数据集)

该代码示例展示了如何从MAT文件中提取关键点坐标,并使用OpenCV在对应的图像上画出这些关键点,然后进行可视化展示。MAT文件存储在ground_truth文件夹中,与images文件夹中的图片相对应。程序处理单张图片,并在窗口中显示结果。

    
    关于shanghaiTech的介绍,可以看我之前的写的博客(https://blog.youkuaiyun.com/johnhamtom/article/details/104481186?spm=1001.2014.3001.5501)
    如标题所示,如下的代码根据mat文件中存储的关键点坐标信息将关键点画到了对应图片上,并利用opencv库在窗口上进行了可视化展示,其中要说明的是,(1)images文件夹存储着图片数据(IMG_打头),ground_truth文件夹存储着mat文件(GT_IMG_打头),images文件夹和ground_truth文件夹都是在同一个文件目录下。(2)代码实现的是对单张图片的可视化展示。
    代码如下:


import json
import os, cv2
import scipy.io as io

def MatVisual(imgpath):
    matpath = imgpath.replace('.jpg','.mat').replace('IMG_',
<think> 我们已知用户希望使用Python对EO-1 Hyperion的MAT数据集进行可视化。 EO-1 Hyperion是一种高光谱成像仪,其数据通常以.mat格式(MATLAB数据文件)存储,包含多个波段的光谱信息。 步骤: 1. 加载.mat文件:使用scipy.io.loadmat读取文件。 2. 理解数据结构:Hyperion数据通常是一个三维数组(行×列×波段)。 3. 可视化:可以选择单个波段(灰度图像)或组合多个波段(RGB彩色图像)进行显示。 注意:Hyperion数据可能有242个波段,但并非所有波段都有效。通常,需要去除未校准的波段(例如,波段1-7、58-76、225-242等可能被标记为坏波段)。 我们将进行: - 读取.mat文件 - 查看数据结构 - 选择有效波段(例如,波段8-57和77-224是相对干净的) - 可视化单波段图像 - 可视化假彩色合成图像(例如,选择三个波段作为R、G、B) 由于用户没有提供具体文件,我们将假设文件名为'EO1H.mat',并假设数据存储在变量'hyperion'中(三维数组)。 需要安装的库:scipy, matplotlib, numpy 如果尚未安装scipy,请先安装:pip install scipy 代码步骤: 1. 导入库 2. 加载.mat文件 3. 提取数据数组 4. 去除坏波段(这里我们根据常见情况去除,但具体文件可能不同,需要用户调整) 5. 选择波段进行可视化 注意:数据可能有噪声或需要归一化,我们将进行简单的拉伸以显示。 下面给出代码示例: </think> ### Python实现EO-1 Hyperion MAT数据集可视化 EO-1 Hyperion是一种高光谱成像仪,采集的数据通常存储为.mat格式(MATLAB数据文件)。以下是完整的可视化实现方案: #### 1. 环境准备 ```python # 安装必要库 !pip install scipy matplotlib numpy spectral ``` #### 2. 数据加载与预处理 ```python import scipy.io import numpy as np import matplotlib.pyplot as plt # 加载.mat文件 mat_data = scipy.io.loadmat('EO1H.mat') # 替换为实际文件名 # 提取高光谱数据立方体 # 通常存储在'hyperion'或'data'字段中 hyperspectral_cube = mat_data['hyperion'] # 三维数组 (height, width, bands) print(f"数据维度: {hyperspectral_cube.shape}") print(f"波段数量: {hyperspectral_cube.shape[2]}") # 数据归一化(0-1范围) normalized_cube = (hyperspectral_cube - np.min(hyperspectral_cube)) / \ (np.max(hyperspectral_cube) - np.min(hyperspectral_cube)) ``` #### 3. 基础可视化方法 ##### a) 单波段灰度图 ```python band_idx = 50 # 选择波段(0-241) plt.figure(figsize=(10, 8)) plt.imshow(normalized_cube[:, :, band_idx], cmap='gray') plt.title(f'Band {band_idx} ({(band_idx+1)*10} nm)') plt.colorbar(label='反射率') plt.show() ``` ##### b) RGB真彩色合成 ```python # 查找近似RGB波段(根据Hyperion波段设置) red_band = 29 # ~660nm green_band = 19 # ~560nm blue_band = 9 # ~480nm rgb_image = np.dstack(( normalized_cube[:, :, red_band], normalized_cube[:, :, green_band], normalized_cube[:, :, blue_band] )) plt.figure(figsize=(12, 10)) plt.imshow(rgb_image) plt.title('RGB Composite (Bands: R29/G19/B9)') plt.show() ``` #### 4. 高级可视化 ##### a) 波段剖面曲线 ```python pixel_x, pixel_y = 100, 100 # 选择像素位置 plt.figure(figsize=(12, 6)) plt.plot(np.arange(242), normalized_cube[pixel_y, pixel_x, :]) plt.xlabel('波段索引') plt.ylabel('反射率') plt.title(f'光谱剖面 @ Pixel({pixel_x}, {pixel_y})') plt.grid(True) plt.show() ``` ##### b) 假彩色合成 ```python # 使用植被敏感波段组合 nir_band = 49 # ~830nm red_edge = 35 # ~720nm green_band = 19 # ~560nm false_color = np.dstack(( normalized_cube[:, :, nir_band], normalized_cube[:, :, red_edge], normalized_cube[:, :, green_band] )) plt.figure(figsize=(12, 10)) plt.imshow(false_color) plt.title('假彩色合成 (NIR/RedEdge/Green)') plt.show() ``` #### 5. 交互式光谱查看器 ```python from spectral import imshow # 交互式光谱浏览器 viewer = imshow(normalized_cube, bands=(29, 19, 9)) # 初始RGB波段 viewer.set_title('EO-1 Hyperion Interactive Viewer') ``` ### 注意事项 1. **波段校正**:Hyperion有242个波段,但实际有效波段为8-57(VNIR)和77-224(SWIR),具体使用时需要验证 2. **坏道处理**:使用前应剔除未校准波段(1-7、58-76、225-242) 3. **辐射定标**:如需物理量值,需应用辐射定标系数 4. **大气校正**:定量分析需进行大气校正
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值