9

衛星画像に適用するランド マスクを作成しようとしています。これにより、ランド マスと交差するラスターのピクセルが 0 に設定されます。

gdal、skimage、pyplot などを試した後、rasterio クックブックに記載されている方法が迅速かつ簡単であることがわかりました。ただし、ポリゴンの外側のピクセルを0に設定していますが、これを逆にしようとしています。

可能であれば、rasterio を使用し続けます。地理空間座標のピクセル位置を計算したり、ラスターの範囲を超えて負になっているクリッピング フィーチャを処理したりする必要はありません。また、私が扱っている未加工の画像のファイルサイズにとって重要な FAST です。

ここから: https://mapbox.s3.amazonaws.com/playground/perrygeo/rasterio-docs/cookbook.html#masking-raster-with-a-polygon-feature

私のコードは次のとおりです。

import fiona
import rasterio
from rasterio.tools.mask import mask

with fiona.open("/Users/Cate/UK_Mainland.shp", "r") as shapefile:
    geoms = [feature["geometry"] for feature in shapefile]

with rasterio.open("jan_clip.tif") as src:
    out_image, out_transform = mask(src, geoms, crop=True)
    out_meta = src.meta.copy()

out_meta.update({"driver": "GTiff",
                 "height": out_image.shape[1],
                 "width": out_image.shape[2],
                 "transform": out_transform})

with rasterio.open("masked2.tif", "w", **out_meta) as dest:
    dest.write(out_image)

ポリゴンと交差しない領域ではなく、交差する領域をマスクするにはどうすればよいですか?

4

1 に答える 1

11

rasterio.tools.mask.mask(最近のバージョンではrasterio.mask.mask) にはオプションが含まれていますinvert。の場合invert=True、マスクはシェイプの外側の領域ではなく、シェイプに重なるピクセルに適用されます。したがって、上記の行を次のように変更できます。

out_image, out_transform = mask(src, geoms, invert=True)
于 2017-01-04T16:28:59.110 に答える