【遥感图像处理】绘制高光谱3D立方体
当单开3D Cube RGB Face Input Bands对话框时,通过点击所需的波段,选择置于图像表面的RGB波段,这里使用的Indian pines数据集,RGB分别使用了29,19,9波段,单击OK按钮。但是这里却到了一个问题,由于使用的高光谱数据集是mat格式,Envi是不支持这种格式的。(2)波普缩放系数(Spectral Scale):波普放大系数,对于多光谱等波段数较少的数据,可
使用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图像了。![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Ky7n4MQ-1585629618430)(D:%5CUseTools%5CTypora%5Cimages%5Cimage-20200331120413960.png)]](https://i-blog.csdnimg.cn/blog_migrate/52a4380044e1bba700c17fa0961d0109.png)
值得一提的是,可以通过鼠标和键盘对绘制的图像进行旋转,放大,缩小等操作。
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按钮。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7N7oVUt-1585629618431)(D:%5CUseTools%5CTypora%5Cimages%5Cimage-20200331121800317.png)]](https://i-blog.csdnimg.cn/blog_migrate/2b23973ae4345b34694c3db842c38e15.png)
当单开3D Cube RGB Face Input Bands对话框时,通过点击所需的波段,选择置于图像表面的RGB波段,这里使用的Indian pines数据集,RGB分别使用了29,19,9波段,单击OK按钮。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AhoOK6YF-1585629618434)(D:%5CUseTools%5CTypora%5Cimages%5Cimage-20200331122313148.png)]](https://i-blog.csdnimg.cn/blog_migrate/93869ddc721a9a796c8b5da951ad1031.png)
在打开3D Cube Parameters对话框中,设置以下参数:
(1)Color Table使用了默认参数。
(2)波普缩放系数(Spectral Scale):波普放大系数,对于多光谱等波段数较少的数据,可以适当的设置这个系数。
(3)选择输出路径及文件名,单O击OK按钮执行。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6eHnYl1-1585629618436)(D:%5CUseTools%5CTypora%5Cimages%5Cimage-20200331122737659.png)]](https://i-blog.csdnimg.cn/blog_migrate/8b1a270f2b94b2d7ff2dd1ca1ff2adbf.png)
(4)显示结果图。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vh9IzKkN-1585629618438)(D:%5CUseTools%5CTypora%5Cimages%5Cimage-20200331123121614.png)]](https://i-blog.csdnimg.cn/blog_migrate/378556153e2bd57d8669cb63a3434a6b.png)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)