python下的spectral模块(高光谱图像处理)

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

一、SPy 安装

依赖模块

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

python下的spectral模块(高光谱图像处理)
要在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_bandReads a single band into an MxN arrayread_bandsReads multiple bands into an MxNxC arrayread_pixelReads a single pixel into a length B arrayread_subregionReads multiple bands from a rectangular sub-region of the imageread_subimageReads specified rows, columns, and bands

三、显示图像

1 固定显示

按理就是如下

import spectral

img = 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.

python下的spectral模块(高光谱图像处理)
图片显示出来。
  1. 借助CV2的waitKey
    这个是真的离谱,但是还挺好用
import spectral
import cv2

img = 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)

python下的spectral模块(高光谱图像处理)
左边那幅小图就是opencv显示的。有点透。

2 spectral的特点

  1. 图像放大镜
    按下 z键盘键,将打开变焦窗口,显示图像的放大视图。通过按住‎‎ ctrl‎‎键并在原始窗口中用鼠标左键单击,缩放窗口将显示原始窗口中选中的像素
    python下的spectral模块(高光谱图像处理)
  2. 显示像素光谱信息
    双击原始图或者缩放窗口中的点,将会显示该点的全波段信息。点可以叠加。
    python下的spectral模块(高光谱图像处理)
  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]
</default>

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

import spectral
import cv2

img = spectral.open_image('./92AV3C.lan')
img_1 = img[:,:,19].reshape(145,145)

&#x663E;&#x793A;&#x771F;&#x5B9E;&#x5730;&#x7269;&#x5206;&#x7C7B;
gt = spectral.open_image('92AV3GT.GIS').read_band(0)
view = spectral.imshow(classes=gt)

cv2.imshow('1',img_1)
cv2.waitKey(0)

python下的spectral模块(高光谱图像处理)
import spectral
import cv2

img = spectral.open_image('./92AV3C.lan')
img_1 = img[:,:,19].reshape(145,145)

#&#x663E;&#x793A;&#x906E;&#x7F69;&#x56FE;&#x50CF;
gt = spectral.open_image('92AV3GT.GIS').read_band(0)
view = spectral.imshow(img, (30, 20, 10), classes=gt)
view.set_display_mode('overlay') #&#x663E;&#x793A;&#x6A21;&#x5F0F;&#x4E3A;&#x8986;&#x76D6;
view.class_alpha = 0.5 #&#x900F;&#x660E;&#x5EA6;

cv2.imshow('1',img_1)
cv2.waitKey(0)

python下的spectral模块(高光谱图像处理)
可以按键盘上的 c, d, shift+C来互相切换。关于键鼠方面的快捷方式,可以通过按 h键来在终端输出。
如下:
Mouse Functions:
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 光谱立方体显示

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

python下的spectral模块(高光谱图像处理)

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

pip3 install wxPython
pip3 install PyOpenGL

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

import spectral
import cv2

img = spectral.open_image('./92AV3C.lan')
img_1 = img[:,:,19].reshape(145,145)

spectral.view_cube(img, bands=[29, 19, 9])
#&#x8FD9;&#x91CC;&#x4E5F;&#x53EF;&#x4EE5;&#x4E0D;&#x9009;&#x6CE2;&#x6BB5;&#xFF0C;&#x4F46;&#x662F;&#x6253;&#x5F00;&#x4F1A;&#x6162;&#x5F88;&#x591A;

cv2.imshow('1',img_1)
cv2.waitKey(0)

python下的spectral模块(高光谱图像处理)
这里注意,打开的窗口产生空白画布(未显示立方体),如果是显示器不支持32位深度缓冲区,可以使用如下命令改变缓冲器大小位16位等
spectral.settings.WX_GL_DEPTH_SIZE = 16

四、保存图像

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

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

Original: https://blog.csdn.net/YH_24H/article/details/115544591
Author: YH_24H
Title: python下的spectral模块(高光谱图像处理)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/703131/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球