我有一个具有270个光谱带的农田的高光谱光栅图像。我创建了一个多边形shapefile,该轮廓文件描述了每个处理属于哪些像素。有250个单独的多边形,每个多边形对应于每个处理的重复项。我想找到每个多边形内所有像素的每个波段的平均像素值。
Image of raw hyperspectral data
Image of polygons delineating treatments
我尝试在ArcGIS和QGIS中使用区域统计工具,但是这两个工具一次只能在一个波段上运行统计信息。这样做270次似乎有点多余。
我还尝试使用ArcGIS中的分割栅格工具将栅格分为与每个多边形相对应的250个单独栅格。分割栅格后,我尝试使用波段收集统计工具,但是发现我无法同时输入所有栅格,尽管该工具似乎可以这样做。每次尝试都会导致以下错误:错误000964指定的范围无效。
我一直在主要使用GDAL在ArcGIS Pro,QGIS(v.3.4.11)和Python(v.3.7)中进行分析。因此,我愿意使用任何这些选项进行进一步分析。我认为这在Python中可能是可行的,但是我的编码技巧并不出色,而且我不确定从哪里开始。
答案 0 :(得分:0)
您可以使用Spectral Python包来读取您的高光谱图像。 可以说
from spectral import*
img=open_image('<file location>') #read into img
可能会根据类别(颜色编码)从创建的多边形shapefile中创建一个numpy蒙版图像。从该图像中,可以提取像素坐标。
import numpy as np
from matplotlib.image import imread
mask_img=imread('<polygon mask image location>')
让我们说,您为一个多边形分配了1类,因此为1类多边形中的所有像素点分配了
x,y=np.where(mask_img==1) #get the required co-ordinates
在高光谱图像上使用相同的图像
band_avg=[]
for band in np.arange(270):
sum,avg=0.0,0.0
for i in np.arange(len(x)): #no. of pixels in polygon class1
sum+= img[x[i],y[i]]
avg=sum/len(x)
band_avg.append(avg)
print(band_avg)
band_avg将为特定类别/多边形颜色的所有像素返回每个波段的平均像素值。您可以通过获取不同类ID的x,y来对其他类/多边形重复以上操作。