引言
高光谱数据在遥感、地质勘探、农业监测等领域有着广泛的应用。在处理高光谱数据时,首先需要完成数据的加载,然后对其进行可视化展示,以便直观地了解数据特征。本文将基于 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