Python处理高光谱数据#1 图像显示

基于Python的高光谱图像显示

  • 高光谱数据:点击此处可下载
  • 用到的库:matplotlib 2.23、scipy 1.10、spectral 0.21
  • 主要内容:图像显示、类别显示、图像立方体显示、N维特征显示

欢迎有兴趣的朋友交流指点。最后,废话不多说直接上代码

import matplotlib.pyplot as plt
from scipy.io import loadmat
import spectral as spy


# 获取mat格式的数据,loadmat输出的是dict,所以需要进行定位
input_image = loadmat('D:/Hyper/Salinas_corrected.mat')['salinas_corrected']
gt = loadmat("D:/Hyper/Salinas_gt.mat")['salinas_gt']

view1 = spy.imshow(data=input_image, bands=[69, 27, 11], title="img")  # 图像显示

view2 = spy.imshow(classes=gt, title="gt")  # 地物类别显示

view3 = spy.imshow(data=input_image, bands=[69, 27, 11], classes=gt)
view3.set_display_mode("overlay")
view3.class_alpha = 0.3  # 设置类别透明度为0.3

spy.view_cube(input_image, bands=[69, 27, 11])  # 显示后会打印相应功能及操作

pc = spy.principal_components(input_image)  # N维特征显示 view_nd与view_cube需要ipython 命令行输入:ipython --pylab
xdata = pc.transform(input_image)  # 把数据转换到主成分空间
spy.view_nd(xdata[:, :, :15], classes=gt)

plt.pause(60)
  1. ImageView附加功能:显示图像窗口时按“h”显示所有键控和鼠标功能
  2. 显示图像窗口状态下(view1),按下“z”键将打开放大窗口显示放大视图,之后按“Ctrl”键并左键单击原始窗口,可将放大窗口平移到单击的像素位置。双击窗口中的特定位置,显示点击像素的二维光谱图
  3. 交互式编辑类标签:可选择地物类别图像中的矩形区域分配新的类别ID来交互式地修改像素类ID。类ID为非负整数。(view2)中按住Shift拖动鼠标左键选择区域,输入数字类ID回车赋值,再回车确定。可提前设置一个二维数组,然后用此方法赋值,估计分类检验有用
spy.save_rgb('rgb.jpg', img, [29, 19, 9])  # 保存RGB图像
spy.save_rgb('gt.jpg', gt, colors=spy_colors)  # 保存索引图像

View1:

Python处理高光谱数据#1 图像显示_第1张图片
放大窗口显示:

Python处理高光谱数据#1 图像显示_第2张图片

光谱曲线显示:

Python处理高光谱数据#1 图像显示_第3张图片

view2:

Python处理高光谱数据#1 图像显示_第4张图片
编辑部分标签后:

Python处理高光谱数据#1 图像显示_第5张图片

view3:

Python处理高光谱数据#1 图像显示_第6张图片

图像立方体:

Python处理高光谱数据#1 图像显示_第7张图片

N维特征显示:

Python处理高光谱数据#1 图像显示_第8张图片
Python处理高光谱数据#1 图像显示_第9张图片

任意特征显示:

Python处理高光谱数据#1 图像显示_第10张图片
from scipy.io import loadmat
import spectral as spy
import numpy as np


# 读取ENVI的.hdr文件、Erdas的.lan文件以及aviris文件
data = spy.open(file_name)

# 读取Matlab的.mat文件
data = loadmat(file_name)['key']  # 返回的是dict,所以需要key

# 读取.raw的文件(BIL)
raw_image = np.fromfile(file_name, dtype)
format_image = np.zeros((lines, samples, bands))  # 参数分别对应文件行数、列数、波段数,对应的hdr文件可查询
for row in range(0, lines):
    for dim in range(0, bands):
        format_image[row, :, dim] = raw_image[(dim + row * bands) * samples:(dim + 1 + row * bands) * samples]

# 最后读取结果应该都是了,方便进一步处理操作

在这里插入图片描述

你可能感兴趣的:(高光谱,python)