番外:高光谱特征工程可视化实战|假彩色、PCA、LBP 与光谱曲线(逐段讲解 + 可直接运行)

基于python的高光谱数据加载与可视化教程 本文基于 Python 代码介绍高光谱数据的加载与可视化,先导入必要库,loadData函数根据数据集名称从指定文件夹加载.mat或.h5格式的高光谱数据及对应标签,visualize_data_and_gt函数检查数据维度、选择波段进行假彩色合成并归一化,绘制并展示假彩色影像和真实标签图,主程序调用函数加载 “DC” 数据集并可视化,选择第 30、50、70 波段合成,可按需扩展函数及选择不同数据集和波段组合分析数据特征。 阅读详情

这篇我们不做建模,而是用 KSC 数据做 4 种常见可视化:
假彩色合成、PCA 主成分合成、LBP 纹理、各类别平均光谱曲线。

1. 环境与数据加载

1.1 导入依赖 & 画图风格

import os
import numpy as np
import scipy.io
import matplotlib
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from skimage.feature import local_binary_pattern
from skimage import img_as_ubyte, exposure

# Matplotlib 全局风格(中文 & 清晰)
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.dpi'] = 120

解释

  • scipy.io.loadmat 读 .mat 文件;PCA 用于主成分;local_binary_pattern 计算 LBP。
  • 设置中文字体与 DPI,避免中文乱码、图像发糊。

1.2 路径与加载函数

# 数据路径(按你的实际路径修改)
DATA_DIR = r"your_path"
X_FILE = "KSC.mat"
Y_FILE = "KSC_gt.mat"

def load_data(x_path, y_path):
    """从 .mat 读取影像与标签,返回 X:(H,W,B), y:(H,W)"""
    x_data = scipy.io.loadmat(x_path)
    y_data = scipy.io.loadmat(y_path)
    x_key = [k for k in x_data.keys() if not k.startswith('__')][0]
    y_key = [k for k in y_data.keys() if not k.startswith('__')][0]
    return x_data[x_key], y_data[y_key]

# 读取数据
X_img, y_img = load_data(os.path.join(DATA_DIR, X_FILE),
                         os.path.join(DATA_DIR, Y_FILE))
h, w, bands = X_img.shape
print(f"图像尺寸: {
     
     h}×{
     
     w},波段数: {
     
     bands}")

解释

  • .mat 文件通常包含多个键,过滤掉 __header__ 这类系统键。
  • X_img 是三维高光谱数据 (H, W, Bands),y_img 是标签图 (H, W)(0 表示未标注)。

2. 工具函数(统一做拉伸/归一/类型转换)

def minmax_norm(arr):
    """全局 min-max 到 [0,1](避免除零)"""
    a_min, a_max = np.min(arr), np.max(arr)
    if a_max - a_min < 1e-12:
        return np.zeros_like(arr, dtype=np.float32)
    return (arr - a_min) / (a_max - a_min)

def perc_stretch(arr, p_low=2, p_high=98):
    """百分位拉伸,更鲁棒(减少极端值影响),输出 [0,1]"""
    low, high = np.percentile(arr, [p_low, p_high])
    arr = np.clip(arr, low, high)
    return minmax_norm(arr)

def to_uint8(gray01):
    """把 [0,1] 灰度安全转为 uint8,供 LBP 使用(消除 skimage 浮点警告)"""
    gray01 = np.clip(gray01, 0, 1)
    return img_as_ubyte(gray01)  # 等价于 (gray01*255).astype(np.uint8)

解释

  • 百分位拉伸比简单 min-max 更稳,适合遥感影像可视化。
  • LBP 官方建议用整型图像,我们先归一化再转 uint8,不会再弹警告。

3. 假彩色合成(任意 3 波段 → RGB)

def show_false_color(X, bands_rgb=(50, 30, 10), title="假彩色合成图"):
    """选择三个波段分别映射到 R/G/B 通道"""
    r, g, b = bands_rgb
    R = perc_stretch(X[:, :, r])
    G = perc_stretch(X[:, :, g])
    B = perc_stretch(X[:, :, b])
    rgb = np.dstack([R, G, B])

    plt.figure(figsize=(7, 6))
    plt.imshow(rgb)
    plt.title(f"{
     
     title}(R/G/B = {
     
     r}/{
     
     g}/{
     
     b})")
    plt.axis('off')
    plt.tight_layout()
    plt.show()

# 示例:两组组合
show_false_color(X_img, bands_rgb=(50, 30, 10))
show_false_color(X_img, bands_rgb=(100, 50, 20), title="假彩色合成图(另一组合)")

解释

  • 选择 3 个光谱波段映射到 RGB,直观看地物分布。
  • 先做百分位拉伸,视觉层次更自然。

4. PCA 前三主成分合成(PC1/2/3 → RGB)

def show_pca_composite(X, n_components=3, title="PCA前三主成分合成图"):
    
Python高光谱图像可视化展示(imgvision 1.7.3) imgvision.spectra()通过一行代码将任意分辨率光谱图像转换至任意光源下的RGB或XYZ空间,配合imgvision.cvtcolor()可以实现任意颜色空间转换 阅读详情

相关推荐

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析

把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。

Smell_of_earth的博客 283

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 700

Tessent实战:网表扫描链插入全流程解析

本文详细解析了使用Tessent工具为网表插入扫描链(Scan Chain)的全流程。从前期环境配置、网表检查,到扫描链数量、时钟域等核心配置,再到执行扫描单元替换与连接,最后进行结果验证与文件输出。文章提供了关键命令与实用技巧,帮助工程师高效完成DFT设计,确保芯片可测试性。

hhh00的博客 744

MatterPort3D 数据集下载

【代码】MatterPort3D 数据集下载。

qq_44106838的博客 6770

软件测试方法——等价类划分法详解

!如果下面这些资料用得到的话可以直接拿走:1、自学开发或者测试必备的完整项目源码与环境2、测试工作中所有模板(测试计划、测试用例、测试报告等)3、软件测试经典面试题4、Python/Java自动化测试实战.pdf5、Jmeter/postman接口测试全套视频获取6、Python学习路线图。

MXB1220的博客 1万+

SAP 清账凭证 完整生成逻辑(超详细原理 + 底层规则 + 分录逻辑 + 互清特殊规则)

【SAP清账凭证核心逻辑摘要】(149字) SAP清账凭证生成遵循两大类型:1)资金往来对冲型(如F-32/F-44互清),强制生成含完整借贷分录的独立凭证,通过AUGDT/AUGBL字段绑定未清项,典型场景如应收冲应付(借:应付账款 贷:应收账款);2)纯核销型(如F.13自动清账),仅标记行项目状态不产生实际分录。关键规则:①仅未清项管理科目可清账;②互清必须配置主数据关联;③差额清账自动补差(折扣/汇差);④原始凭证永不修改,仅更新BSIK/BSAD等表状态。清账凭证均保留可追溯性,支持FBRA重置还

金牌架构师 542

11.8 LangGraph生产级AI Agent开发:从节点定义到高并发架构的终极指南

本文介绍了如何使用 LangGraph 构建生产级 AI Agent,重点解析了 LangGraph 的核心设计、节点与边的实现方法论、生产级实现技巧以及性能优化策略。LangGraph 通过图结构抽象复杂 AI 工作流,核心组件包括节点、边、状态和检查点。节点通过 Python 函数封装原子业务逻辑,边通过条件分支实现动态工作流。生产级实现技巧包括状态管理、多会话控制和错误处理机制。性能优化策略涉及并行执行和缓存机制设计。文章还提供了旅行规划 Agent 的实战案例和常见问题解决方案,帮助开发者构建高效、

yonggeit的博客 3266

JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

【代码】JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 466

080、多轴运动控制:插补器设计(螺旋线插补)

本文分享了螺旋线插补器设计的实战经验。针对五轴点胶机Z轴抖动问题,作者分析了螺旋线数学本质,提出基于归一化时间参数的速度规划方法,强调各轴严格同步的重要性。文章详细介绍了速度分解、加减速处理、嵌入式优化技巧(查表法、定点化),并总结了起点闭合、速度波动、数值处理等常见问题解决方案。最后给出5条实用建议:注重速度规划而非纯数学推导、预先仿真、保留调试接口、考虑机械谐振、防范编码器丢脉冲。通过优化插补周期、电子齿轮比和S形速度曲线,成功将设备良率从60%提升至95%。

m0_50546716的博客 83

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 深度学习与遥感入门(三)|基于PyTorch Geometric的GCN模型:图神经网络在高光谱图像分类与全图预测实战教程
下一篇: 深度学习与遥感入门(四)|空间–光谱联合构图的 GCN:更稳更准的高光谱分类与全图预测(PyTorch Geometric)
遥感AI实战
博客等级 码龄9年 1002粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

遥感AI实战

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

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

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

打赏作者

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

抵扣说明:

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

余额充值