Python 在光栅中剪裁图像会添加黑色像素

Python 在光栅中剪裁图像会添加黑色像素,python,gis,Python,Gis,不确定这是在这里还是在GIS板上 我有大的sentinel(geotiff)图像,我想剪辑到一个较小的感兴趣区域。我的RIO只是一个形状文件,其中包含一个QGIS制作的正方形 我有一堆时间哨兵图像,因为我想随着时间的推移计算NDVI。所以我把我所有的卫星图像,连同一张额外的作物地图,都剪辑到我的投资回报率 然后我计算每幅图像的NDVI 然后使用geotiff边界内随机生成的像素,我可以从我所有的卫星图像中提取该像素的NDVI,以及从我的作物地图中提取地面真实信息,以便训练我自己的分类器 我使用以

不确定这是在这里还是在GIS板上

我有大的sentinel(geotiff)图像,我想剪辑到一个较小的感兴趣区域。我的RIO只是一个形状文件,其中包含一个QGIS制作的正方形

我有一堆时间哨兵图像,因为我想随着时间的推移计算NDVI。所以我把我所有的卫星图像,连同一张额外的作物地图,都剪辑到我的投资回报率

然后我计算每幅图像的NDVI

然后使用geotiff边界内随机生成的像素,我可以从我所有的卫星图像中提取该像素的NDVI,以及从我的作物地图中提取地面真实信息,以便训练我自己的分类器

我使用以下python代码剪辑sentinel乐队:

b2 = rasterio.open(imagePaths['B02']) # BLUE BAND

b2Clipped, b2Transform = mask(b2, shapes, crop=True, nodata = 1, all_touched = True)

outMeta = b2.meta.copy()
outMeta.update({
    "driver": "Gtiff",
    "height": b2Clipped.shape[1],
    "width": b2Clipped.shape[2],
    "transform": b2Transform
})
b2Name = os.path.join(basePath, b2filename)
b2Out = rasterio.open(
    b2Name,
    "w",
    **outMeta
)
b2Out.write(b2Clipped)
b2Out.close()
我正在剪辑我所有的波段,包括B4和B8,以便可以计算NDVI

我的问题是rasterio的mask函数,当我的卫星图像被屏蔽时,会因为任何原因添加一堆0

当我在QGIS中打开图像以查看发生了什么时,看起来图像已经被转换,所以它是平的、剪裁的,然后再转换回来——当我将图像转换回来时,一堆新像素被添加为0

添加的0使从我的图像中随机采样的像素被破坏:如果从边缘附近采样,像素值将为0,而不是从我的图像中实际采样的图像

添加0也会使NDVI计算本身出错,因为它试图将一些数字除以0

有没有一种方法可以让我的图像保持原样

您可以在此处看到我的剪裁区域和剪裁多边形的图像:


我可以在python中剪裁图像而不添加所有这些像素吗?

似乎在掩码函数中添加filled=True可以修复我的问题。添加filled=True可以使图像中添加0个nodata像素,但剪裁后的图像仍然比掩码大。