基于python的高光谱数据加载与可视化教程

引言

高光谱数据在遥感、地质勘探、农业监测等领域有着广泛的应用。在处理高光谱数据时,首先需要完成数据的加载,然后对其进行可视化展示,以便直观地了解数据特征。本文将基于 Python 代码,详细介绍高光谱数据的加载和可视化过程。

对应代码数据链接:https://download.csdn.net/download/lestatlu/90685101

一、代码整体概述

此代码的主要功能是加载不同的高光谱数据集,并将其假彩色影像和真实标签(Ground Truth)进行可视化展示。代码主要包含数据加载函数和可视化函数两部分。

二、数据加载函数

2.1 导入必要的库

import matplotlib.pyplot as plt
import scipy.io as sio
import os
import h5py
import numpy as np

这里导入了用于绘图的matplotlib.pyplot、处理.mat文件的scipy.io、操作文件路径的os、处理.h5文件的h5py以及用于数值计算的numpy

2.2 定义数据加载函数

def loadData(name):
    data_path = os.path.join('your_dataset_folder')
    if name == 'IP1':
        data = sio.loadmat(os.path.join(data_path, 'Indian_pines.mat'))['indian_pines']
        labels = sio.loadmat(os.path.join(data_path, 'Indian_pines_gt.mat'))['indian_pines_gt']
    elif name == 'IP2':
        data = sio.loadmat(os.path.join(data_path, 'Indian_pines_corrected.mat'))['indian_pines_corrected']
        labels = sio.loadmat(os.path.join(data_path, 'Indian_pines_gt.mat'))['indian_pines_gt']
    # 其他数据集的加载情况,此处省略部分代码
    elif name == 'DC':
        data = sio.loadmat(os.path.join(data_path, 'dc_hx.mat'))['dc']
        labels = sio.loadmat(os.path.join(data_path, 'dc_gt.mat'))['dc_gt']
    return data, labels

loadData函数接收一个数据集名称作为参数,根据不同的名称从指定文件夹your_dataset_folder中加载对应的.mat.h5文件。这里需要将your_dataset_folder替换为实际存放数据集的文件夹路径。函数会返回加载的高光谱数据和对应的标签。

三、数据可视化函数

python

def visualize_data_and_gt(data, labels, bands=None):
    if len(data.shape) != 3:
        raise ValueError("输入的高光谱数据维度应为 (H, W, C)。")
    if len(labels.shape) != 2:
        raise ValueError("输入的标签数据维度应为 (H, W)。")
    if bands is None:
        bands = [0, 1, 2]
    if max(bands) >= data.shape[2]:
        raise ValueError("选择的波段索引超出数据的波段范围。")
    rgb_image = data[:, :, bands]
    rgb_image = (rgb_image - np.min(rgb_image)) / (np.max(rgb_image) - np.min(rgb_image))
    plt.figure(figsize=(12, 6))
    plt.subplot(1, 2, 1)
    plt.imshow(rgb_image)
    plt.title("False Color Composite")
    plt.axis("off")
    plt.subplot(1, 2, 2)
    cmap = plt.cm.get_cmap("tab20", np.max(labels) + 1)
    plt.imshow(labels, cmap=cmap)
    plt.title("Ground Truth")
    plt.axis("off")
    plt.colorbar(ticks=range(np.max(labels) + 1), label="Class")
    plt.tight_layout()
    plt.show(block=True)

visualize_data_and_gt函数用于将高光谱数据的假彩色影像和真实标签进行可视化展示。该函数会检查输入数据和标签的维度是否符合要求,若不符合则抛出异常。若未指定合成假彩色影像的波段索引,默认选择前三个波段。将选择的波段数据进行归一化处理后,使用matplotlib库绘制假彩色影像和真实标签图,并添加颜色条以显示类别信息。

四、主程序调用

data, labels = loadData("DC")
visualize_data_and_gt(data, labels, bands=[30, 50, 70])

在主程序中,调用loadData函数加载名为DC的数据集,然后调用visualize_data_and_gt函数将该数据集的假彩色影像和真实标签进行可视化展示,这里选择第 30、50、70 波段进行假彩色合成。

五、总结

通过上述代码,我们可以方便地加载多种高光谱数据集,并将其进行可视化展示。在实际应用中,可根据需要选择不同的数据集和波段组合,以更好地观察和分析高光谱数据的特征。同时,可根据需求继续扩展loadData函数,添加更多数据集的加载逻辑。

对应代码和部分数据见链接:https://download.csdn.net/download/lestatlu/90685101

结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI_RSER

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值