python中快速生成多边形掩膜的方法

作者: 汪善勤 | 来源:发表于2020-09-19 20:49 被阅读0次

    使用Sentinel等遥感数据,生成的时序植被指数数据的波段数通常较大。gdal和rasterio都可以读取栅格数据,但是,两者进行读取的过程有区别。

    图像进行分割后,生成大量的多边形,保存在shp文件中。然后需要计算每个多边形覆盖范围内的图像的纹理特征。gdal和rasterio都能读取shp文件,并访问指定多边形后生成掩膜后,再计算纹理特征。但是两者生成掩膜的过程和结果差别比较大,经过比较和分析,发现使用rasterio能够更快地生成合格的掩膜,相关代码如下:

    import gdal

    from shapely.Geometry import Polygon

    from affine import Affine

    raster = gdal.Open('p.tif')

    shp = gdal.Open('p.shp')

    lyr = shp.GetLayer()

    feat = lyr.GetNextFeature()

    # TODO: 使用rasterio和shapely处理多边形掩膜,速度快

    # 将ogr.Geometry转换为shapely.Geometry.Polygon

    geom = [feat.GetGeometryRef()]

    geom_dict =eval(geom[0].ExportToJson())

    geom = [Polygon(geom_dict['coordinates'][0]).__geo_interface__]

    # TODO: rasterio不支持gdal形式的transform,转换为Affine

    transform = raster.GetGeoTransform()

    pixelWidth = transform[1]

    pixelHeight = transform[5]

    transform = Affine.from_gdal(xmin, pixelWidth, 0, ymax, 0, pixelHeight)

    datamask = np.logical_not(features.geometry_mask(geom, [xcount, ycount], transform))

    datamask就是多边形生成的掩膜,用它就可以计算多边形覆盖范围内的图像的各种特征,比如均值,方差,各种纹理特征,等等

    相关文章

      网友评论

        本文标题:python中快速生成多边形掩膜的方法

        本文链接:https://www.haomeiwen.com/subject/ntjyyktx.html