如何计算多边形内多个波段的平均像素值

2024-05-28 23:34:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个农业领域的高光谱光栅图像,有270个光谱带。我创建了一个多边形shapefile,它描述了属于每个处理的像素。有250个单独的多边形,每个多边形对应于每个处理的复制。我想找到每个像素带内每个像素的平均值。在

Image of raw hyperspectral data

Image of polygons delineating treatments

我尝试在ArcGIS和QGIS中使用分区统计工具,但这两种工具一次只能在一个波段上运行统计数据。这样做270次似乎有点过分。在

我还尝试使用ArcGIS中的分割光栅工具将光栅划分为250个对应于每个多边形的光栅。分割光栅后,我尝试使用band collection statistics工具,但发现我无法同时输入所有光栅,尽管该工具似乎可以这样做。每次尝试都会导致以下错误:错误000964指定的范围无效。在

我在ArcGIS Pro、QGIS(v.3.4.11)和Python(v.3.7)中主要使用GDAL进行分析。因此,我愿意使用这些选项中的任何一个来进行进一步的分析。我认为在Python中这可能是可行的,但我的编码技能并不出色,我不知道从哪里开始。在


Tags: 工具of图像image光栅错误光谱像素
1条回答
网友
1楼 · 发布于 2024-05-28 23:34:34

您可以使用Spectral Python软件包读取您的高光谱图像。 比如说

from spectral import*
img=open_image('<file location>')  #read into img

从您创建的多边形形状文件中创建一个numpy蒙版图像,可能是根据类别(颜色编码)制作的。从该图像中,您可以提取像素坐标。在

^{pr2}$

假设你为一个多边形指定了类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

相关问题 更多 >

    热门问题