不确定这应该在这里还是在GIS板上。
我有大的哨兵(geotif)图像,我想剪辑到一个较小的感兴趣区域。我的RIO只是一个shapefile,其中包含一个在QGIS中制作的正方形。
我有一堆时间哨兵图像,因为我想计算一段时间内的NDVI。所以我把所有的卫星图像,沿着一个额外的作物Map,并把它们都剪辑到我的ROI。
然后我计算每幅图像的NDVI。
然后,在geotif的边界内随机生成一个像素,我可以从所有卫星图像中提取该像素的NDVI,以及从作物Map中提取地面真实信息,以便训练我自己的分类器。
我用下面的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的遮罩功能,当我的卫星图像被遮罩时,不知什么原因添加了一堆0?
当我在QGIS中打开图像来查看发生了什么时,看起来图像已经被转换,所以它是平面的,裁剪,然后转换回来-当转换我的图像回来时,一堆新的像素被添加为0。
添加的0使它从我的图像随机采样像素是打破:如果从边缘附近采样,像素值将为0,而不是来自我的图像的实际图片。
添加的0也会使NDVI计算本身博尔克,因为它试图将一些数字除以0。
有没有办法把我的照片照原样遮起来?
您可以在此处看到剪裁区域和剪裁多边形的图像:https://imgur.com/a/AXoTAZS
我可以在python中剪辑我的图像而不添加所有这些像素吗?
1条答案
按热度按时间tmb3ates1#
我最近遇到了这个问题。也许在绘图之前可以尝试通过以下方法来改变它:
如光栅文档所示,没有数据的单元格用0填充。所以我想也许你可以选择不显示它们,给这些单元格NaN值。
但对于你的取样任务,我不确定。