前言

​在之前的一篇文章中,介绍了高光谱图像的特点和表达形式。高光谱图像最突出的一个特点拥有大量光谱波段,使得图像堆叠成一个超立方体。由于最近研究需要,想可视化展示HSI图像的3D立方体。于是,搜索了一些资料,展开了工作。以下是绘制的两种方式。

一、使用python

​这种方法很简单,几行代码就可以搞定,废话不多说,直接上代码。

​需要的环境:spectral,ipython,matplotlib

import os

import scipy.io as sio

from spectral import *

dataset_path = os.path.join('data') # 数据集路径

data = sio.loadmat(os.path.join(dataset_path, 'indian_pines_corrected.mat'))['indian_pines_corrected']

spectral.settings.WX_GL_DEPTH_SIZE = 100

view_cube(data, bands=[29, 19, 9])

以“pylab”模式启动IPython。命令行输入:ipython --pylab

将以下代码(注意修改数据集路径)复制到ipython命令窗口中,回车。

这个时候,会弹出Hypercube的窗体,就可以看到绘制的3D图像了。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUxOTcwNw==,size_16,color_FFFFFF,t_70#pic_center

​值得一提的是,可以通过鼠标和键盘对绘制的图像进行旋转,放大,缩小等操作。

Mouse Functions:

left-click & drag -> Rotate cube (选择)

CTRL+left-click & drag -> Zoom in/out(放大/缩小)

SHIFT+left-click & drag -> Pan(平移)

Keybinds:

l -> toggle light(调整亮度)

t/g -> stretch/compress z-dimension(拉伸)

h -> print help message(帮助信息)

q -> close window(关闭窗口)

二、使用ENVI

​作为一个强大的遥感处理平台,Envi做这点小事简直不在话下。但是这里却到了一个问题,由于使用的高光谱数据集是mat格式,Envi是不支持这种格式的。无奈只能先将mat格式转成了tif格式。

使用MatLab将mat格式转为tif,废话不多说,直接上代码。(参考https://blog.csdn.net/Eric_Fisher/article/details/90230072)

% mat2tif

% 将高光谱mat文件,保存为tif

clc; clear; close all;

%% load the hyperspectral image

img = load ('E:\HSI_Data\Indian Pines\Indian_pines_corrected.mat');

img = img.indian_pines_corrected

% 获取数组维度信息

[row, col, bands] = size(img);

% double类型转unit8

img_8 = uint8(img(:,:,:)/10000*256);

% 保存为tif图像

t = Tiff('imageIndiaP.tif','w');

% 影像信息

tagstruct.ImageLength = size(img_8,1);

tagstruct.ImageWidth = size(img_8,2);

% 颜色空间解释方式

tagstruct.Photometric = 1;

% 每个像素的数值位数,这里转换为unit8,所以为8位

tagstruct.BitsPerSample = 8;

% 每个像素的波段个数,一般图像为1或3,但是对于遥感影像存在多个波段所以常常大于3

tagstruct.SamplesPerPixel = bands;

tagstruct.RowsPerStrip = 16;

tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;

% 表示生成影像的软件

tagstruct.Software = 'MATLAB';

% 表示对数据类型的解释

tagstruct.SampleFormat = 1;

% 设置Tiff对象的tag

t.setTag(tagstruct);

% 以准备好头文件,开始写数据

t.write(img_8);

% 关闭影像

t.close;

使用Envi打开第一步中所生成的tif图。在Envi工具栏中选择Spectral->Build 3D Cube。在3D Cube File对话框中选择高光谱数据集,单击OK按钮。

20200331124122230.png#pic_center

当单开3D Cube RGB Face Input Bands对话框时,通过点击所需的波段,选择置于图像表面的RGB波段,这里使用的Indian pines数据集,RGB分别使用了29,19,9波段,单击OK按钮。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUxOTcwNw==,size_16,color_FFFFFF,t_70#pic_center

在打开3D Cube Parameters对话框中,设置以下参数:

(1)Color Table使用了默认参数。

(2)波普缩放系数(Spectral Scale):波普放大系数,对于多光谱等波段数较少的数据,可以适当的设置这个系数。

(3)选择输出路径及文件名,单O击OK按钮执行。

20200331124207348.png#pic_center

​(4)显示结果图。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUxOTcwNw==,size_16,color_FFFFFF,t_70#pic_center

参考链接

https://blog.csdn.net/gwj992/article/details/79274511?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

参考书籍

ENVI 遥感图像处理方法(第二版)[邓书斌 陈秋锦 杜会建 徐恩惠]

原文链接:https://blog.csdn.net/weixin_43519707/article/details/105219995

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐