【问题标题】:How to calculate average pixel values for multiple bands that fall within polygons如何计算多边形内多个波段的平均像素值
【发布时间】:2019-09-16 20:18:11
【问题描述】:

我有一张具有 270 个光谱波段的农田的高光谱光栅图像。我创建了一个多边形 shapefile,它描述了哪些像素属于每个处理。有 250 个单独的多边形,每个多边形对应于每个处理的复制。我想为每个多边形内的所有像素找到每个波段的平均像素值。

Image of raw hyperspectral data

Image of polygons delineating treatments

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

我还尝试使用 ArcGIS 中的拆分栅格工具将栅格分成 250 个单独的栅格,对应于每个多边形。拆分栅格后,我尝试使用波段收集统计工具,但发现我无法同时输入所有栅格,尽管该工具似乎能够这样做。每次尝试都会导致以下错误:ERROR 000964 Specified extent is invalid.

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

【问题讨论】:

  • 我没有直接的答案给你,但也许this link 会帮助你更多地了解使用 QGIS 进行编码。祝你好运!

标签: python gis arcgis gdal qgis


【解决方案1】:

您可以使用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 来对其他类/多边形重复上述操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2021-10-14
    • 2019-05-03
    • 2014-01-23
    • 1970-01-01
    相关资源
    最近更新 更多