高光谱raw+python分析高光谱图像

正如上图表示的那样,高光谱则是由很多通道组成的图像,具体有多少个通道,这需要看传感器的波长分辨率,每一个通道捕捉指定波长的光。把光谱想象成一条直线,由于波长分辨率的存在,每隔一定距离才能“看到”一个波长。“看到”这个波长就可以收集这个波长及其附近一个小范围的波段对应的信息,形成一个通道。也就是一个波段对应一个通道。注意对图中土壤的高光谱图像,如果我们沿着红线的方向,即对高光谱上某一个像素的采样,就可以针对此像素生成一个“光谱特征”。

高光谱中hdr文件的含义

# ENVI

# samples = 800(图像列数)

# lines = 703(图像行数)

# bands = 128(波段数)

# header offset = 0

# file type = ENVI Standard

# data type= 12(数据类型)

# interleave = bil(数据组织方式即存储格式)

# sensor type = Unknown

# wavelength units = nm

# binning = {1,8}

interleave = bil:在BIL组织方式下,raw存储数据方式是按行存放,会先存储第一行所有波段的反射率,而后是第二行所有波段的反射率,以此类推。我的数据为800*703*128。下方代码是将高光谱数据根据dhr文件格式转化为多通道的图片格式,图片长为800,宽为703,通道数为128维。

import matplotlib.pyplot as plt
import numpy as np
import cv2 as cv
imagePath = r"E:\2,13\2,13\random_leaf_ref.raw"
print(type(imagePath))
rawImage = np.fromfile(imagePath,"flo32")
print(type(rawImage))
rawShape = rawImage.shape
print(rawShape)
formatImage = np.zeros((703,800,128))
for row in range(0,703):
    for dim in range(0,128):
        formatImage[row,:,dim] = rawImage[(dim + row*128) * 800:(dim + 1 + row*128)* 800]
#选择通道数为12/46/96的三个通道相当于rgb三通道的图片
imgR = formatImage[:,:,12]
imgG = formatImage[:,:,46]
imgB = formatImage[:,:,96]

rgbImg = cv.merge([imgR,imgG,imgB])
print(rgbImg.shape)
print(type(rgbImg))
cv.imshow('test',rgbImg)
cv.waitKey()

高光谱图片显示

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值