Spectral Python (SPy)是一个用于处理高光谱图像数据的纯Python模块。它具有读取、显示、操作和分类高光谱图像的功能。
之所以用它是因为这个对多波段图像的支持更好
参考

一、SPy 安装

依赖模块

虽然可以只用Python和NumPy来使用SPy来处理高光谱数据,但如果想使用SPy的任何图形功能,你还需要其他几个模块

要在IPython中使用SPy,您需要在" pylab "模式下启动IPython(请参阅启动IPython)

安装

pip install spectral

二、读取高光谱图像

import spectral
img = open_image('92AV3C.lan')
print(img)

这个时候会显示图片信息,包括长宽波段数等,如下:

Data Source:   '.\.\./92AV3C.lan'
# Rows:            145
# Samples:         145
# Bands:           220
Interleave:        BIL
Quantization:  16 bits
Data format:     int16

读取图像文件中的特殊子类实例方法

方法 描述
read_band Reads a single band into an MxN array
read_bands Reads multiple bands into an MxNxC array
read_pixel Reads a single pixel into a length B array
read_subregion Reads multiple bands from a rectangular sub-region of the image
read_subimage Reads specified rows, columns, and bands

三、显示图像

1 固定显示

按理就是如下

import spectralimg = spectral.open_image('./92AV3C.lan')
print(img)
view = spectral.imshow(img)

但是图像一闪而过,并且spectral好像没有类似CV2waitKey方法。所以无法暂停,解决方法有三:

  1. 断点
    加断点调试,
  2. 进入ipython模式,
    终端下输入ipython并回车
In [1]: from spectral import *In [2]: img = open_image('92AV3C.lan')In [3]: view = imshow(img,(29,19,9))
Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created.


图片显示出来。

  1. 借助CV2的waitKey
    这个是真的离谱,但是还挺好用
import spectral
import cv2img = spectral.open_image('./92AV3C.lan')img_1 = img[:,:,19].reshape(145,145)view = spectral.imshow(img,(29,19,9))cv2.imshow('1',img_1)
cv2.waitKey(0)


左边那幅小图就是opencv显示的。有点透。

2 spectral的特点

  1. 图像放大镜
    按下z键盘键,将打开变焦窗口,显示图像的放大视图。通过按住‎‎ctrl‎‎键并在原始窗口中用鼠标左键单击,缩放窗口将显示原始窗口中选中的像素

  2. 显示像素光谱信息
    双击原始图或者缩放窗口中的点,将会显示该点的全波段信息。点可以叠加。

  3. 显示RGB 数据

In [1]: from spectral import *In [2]: img = open_image('92AV3C.lan')In [3]: view = imshow(img, (29, 19, 9))
In [4]: print(view)
ImageView object:Display bands       :  (29, 19, 9)Interpolation       :  <default>RGB data limits     :R: [2054.0, 6317.0]G: [2775.0, 7307.0]B: [3560.0, 7928.0]

imshow(img, (29, 19, 9))中的(29,19,9)就是从光谱中分别抽取的第29,19,9个波段来当替代RGB三个波段。形成伪RGB图像。(原因是谱相机可能避开了可见光部分波段,无法形成真RGB图)
4. 类地图显示

import spectral
import cv2img = spectral.open_image('./92AV3C.lan')
img_1 = img[:,:,19].reshape(145,145)# 显示真实地物分类
gt = spectral.open_image('92AV3GT.GIS').read_band(0)
view = spectral.imshow(classes=gt)cv2.imshow('1',img_1)
cv2.waitKey(0)

import spectral
import cv2img = spectral.open_image('./92AV3C.lan')
img_1 = img[:,:,19].reshape(145,145)#显示遮罩图像
gt = spectral.open_image('92AV3GT.GIS').read_band(0)
view = spectral.imshow(img, (30, 20, 10), classes=gt)
view.set_display_mode('overlay') #显示模式为覆盖
view.class_alpha = 0.5 #透明度cv2.imshow('1',img_1)
cv2.waitKey(0)


可以按键盘上的c,d,shift+C来互相切换。关于键鼠方面的快捷方式,可以通过按h键来在终端输出。
如下:

Mouse Functions:
----------------
ctrl+left-click          ->   pan zoom window to pixel
shift+left-click&drag    ->   select rectangular image region
left-dblclick            ->   plot pixel spectrumKeybinds:
---------
0-9     -> enter class ID for image pixel labeling
ENTER   -> apply specified class ID to selected rectangular region
a/A     -> decrease/increase class overlay alpha value
c       -> set display mode to "classes" (if classes set)
C       -> set display mode to "overlay" (if data and classes set)
d       -> set display mode to "data" (if data set)
h       -> print help message
i       -> toggle pixel interpolation between "nearest" and SPy default.
z       -> open zoom window

3 光谱立方体显示

个人觉得超立方显示光谱图像不具备分析效用,但是的确巨塔马好看

这部分需要安装wx包,openGL包,
wx基于 wxPython 模块实现

pip3 install wxPython
pip3 install PyOpenGL

安装好了就可以显示了,输入以下代码

import spectral
import cv2img = spectral.open_image('./92AV3C.lan')
img_1 = img[:,:,19].reshape(145,145)spectral.view_cube(img, bands=[29, 19, 9])
#这里也可以不选波段,但是打开会慢很多cv2.imshow('1',img_1)
cv2.waitKey(0)


这里注意,打开的窗口产生空白画布(未显示立方体),如果是显示器不支持32位深度缓冲区,可以使用如下命令改变缓冲器大小位16位等

spectral.settings.WX_GL_DEPTH_SIZE = 16

四、保存图像

spectral.save_rgb('rgb.jpg', img, [29, 19, 9])

‎保存索引彩色图像类似于保存 RGB 图像

python下的spectral模块(高光谱图像处理)相关推荐

  1. Python下使用tarfile模块来实现文件归档压缩与解压

    Python下使用tarfile模块来实现文件归档压缩与解压   部分转自:http://www.diybl.com/course/3_program/python/20110510/555345.h ...

  2. Python下使用optparse模块实现对多个文件进行统计【二】

    一个取代shell wc -l 命令的python小脚本 1.通过python下optparse模块下OptionParser类是新对文件的统计 #!/opt/data/ipy/bin/python ...

  3. python下的mysql模块包装

    #!/usr/bin/env python # -*- coding: utf-8 -*-""" 设计db模块的原因:1. 更简单的操作数据库一次数据访问: 数据库连接 ...

  4. python下最全的cv2图像处理入门知识!!!!灰度图 RGB图 针对某种颜色做提取、高斯模糊等等

    早些时候实验的关于图像的知识,一直放着感觉发挥不出它的作用,故自己将它发上来,大家可以看看. 1.头文件 import cv2 import numpy from scipy.misc import ...

  5. Python下安装Pywifi进行WiFi密码破解

    Python下安装Pywifi进行WiFi密码破解 能成功的在Python下安装Pywifi模块的方法及软件 前段时间在网上看了一些关于Python下安装Pywifi模块的方法,很多都是安装不成功的, ...

  6. 基于python的Spectral模块读取高光谱影像信息的一些笔记

    1. 安装spectral模块 spectral模块的安装需要有numpy.pillow.wxpython.matplotlib.ipython等这几个包的铺垫,而且安装spectral模块时看的教程 ...

  7. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

  8. python下tkinter模块和mysql构建图书管理系统实验

    前言与准备 本次实验是大二数据库期末大作业,我采用的是python语言和mysql8.0.27制作的基于cs构架的数据库框架,由于之前从未了解过python语言,所以代码部分语言较为粗暴,未成年人请在 ...

  9. Python下对setup.py模块的安装方法

    Python下对setup.py模块的安装方法 setup.py文件的build和install setup.py文件的build和install 举例说明 在终端进入该模块文件的目录 接着输入 py ...

最新文章

  1. 邬贺铨:工业物联网的技术与前景
  2. 确定关键质量的5大原则
  3. python 基于UDP协议的socket 报错:OSError: [WinError 10049] 在其上下文中,该请求的地址无效(绑定的ip要跟本地ip对应)
  4. 数据分页 THINKPHP3.2 分页 三种分页方法
  5. ps图片拖不进去_PS教学:你的logo还不够高大上?7步教做出黄色金属质感logo
  6. Linux C学习--getline()函数
  7. 如何在github上发起一个pull request
  8. 今日头条新出算法大赛!短视频内容理解与推荐竞赛
  9. flask-bootstrap插件
  10. 面试之js 数组插入删除
  11. c语言CRC16校验(8005)
  12. 网站中使用中文个性字库字体--@font-face解决方案探索 l(转)
  13. web server linux,GitHub - markparticle/WebServer: C++ Linux WebServer服务器
  14. 精益创业实战 - 第5章 开始实验
  15. 在Mac上使用中国银行和工商银行网银
  16. LIC2020 百度语言与智能技术竞赛(一)——语义解析冠军方案
  17. MAX-SUM算法信息传递规则的优化
  18. 【点宽专栏】模型投资的风险和矛盾
  19. 圣诞来了,给喜欢的人做个表白网站(附完整源码)
  20. 中华英才网张建国:规划人生三级跳(转)

热门文章

  1. maven项目-加载不到spring文件,BeanFactory not initialized or already closed - call 'refresh' bef
  2. 第十三天-Http-GET、POST
  3. 【网页特效】12 个炫酷背景特效库
  4. RGB与16进制值互相转换
  5. sql server的缺陷 将截断字符串或二进制数据 哪个字段
  6. 录音转文字软件哪个好?推荐这三款软件给你
  7. 何钦铭c语言第三版第9章答案,c语言程序设计第3版何钦铭 颜 晖 第9章 结构.pdf...
  8. 什么是TLC颗粒?与MLC、SLC区别
  9. 服务器系统启用来宾用户,系统日志中出现Internet来宾账户
  10. linux中来宾用户权限,linux权限分配