Skip to main content

geotiff-cutout

Create rectangular pixel cutouts from a GeoTIFF centred on GeoJSON Polygons or Points, with an optional random shift. All intersecting annotations are returned in COCO format — boxes that extend beyond the cutout edge are clipped and flagged with is_truncated, Polygons will also be returned as segmentation. Classes must be indicated in the properties of the features.


Installation

pip install geotiff-cutout

Note: rasterio and fiona depend on GDAL. On most platforms the wheels ship GDAL bundled, so a plain pip install is sufficient. If you hit build errors, install via conda:

conda install -c conda-forge rasterio fiona
pip install geotiff-cutout

Quick start

Python API

from geotiff_cutout import make_cutout

# Rectangular cutouts with moderate random shift saved to disk
make_cutouts(
    "image.tif",
    "annotation.geojson",
    "data",
    coco_path="annotations.json",
    cutout_width_px=400,
    cutout_height_px=200,
    random_shift=0.5,
    method="fallback"
)

Command line

# Square cutouts, default settings
geotiff-cutout ortho.tif annotations.geojson

# Rectangular cutouts with custom shift and output directory
geotiff-cutout ortho.tif annotations.geojson \
    --width 640 --height 480 \
    --shift 0.8 \
    --output my_cutouts/

# Full help
geotiff-cutout --help

The random_shift parameter

Value Effect
0.0 Cutout centred exactly on the feature centroid.
0.5 Centroid can wander up to half the available slack.
1.0 Maximum shift: the target bbox may touch (but never cross) the cutout edge.

Shift is applied independently on each axis, so rectangular cutouts behave correctly — a wide cutout allows more absolute horizontal shift than a tall one.


COCO output format

Each call returns a standard COCO dict:

{
  "images": [{
    "id": 0
    "width": 512,
    "height": 512,
    "file_name": "cutout_<uuid>.png",
    "geotiff_source": "ortho.tif",
    "geojson_source": "annotations.geojson",
    "cutout_col_offset": 340,
    "cutout_row_offset": 120
  }],
  "categories": [{"id": 1, "name": "car"}],
  "annotations": [{
    "id": 0,
    "image_id": 0,
    "category_id": 1,
    "bbox": [12.0, 34.5, 80.0, 60.0],
    "bbox_mode": "xywh",
    "area": 4800.0,
    "iscrowd": 0,
    "is_truncated": false,
    "original_bbox": [12.0, 34.5, 80.0, 60.0],
    "segmentations":[[12.0, 34.5, ...,  80.0, 60.0]],
    "origina_segmentations":[[12.0, 34.5, ...,  80.0, 60.0]]
  }]
}

all coordinates in coco annotation are local image pixel coordinates bbox is the annotation clipped to the cutout boundary ([x, y, w, h] in local cutout pixels).
original_bbox is the full, unclipped box (may have negative coordinates or values exceeding the cutout dimensions for truncated boxes).
segmentation similar to bbox but Polygon segemnt if input was not Point. original_segmentation similar to original_bbox but Polygon segemnt if input was not Point. is_truncated is true when the box was clipped.

The category name is read from the first matching GeoJSON property key: categoryclasslabel"object" (fallback).


License

AGPL 3

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

geotiff_cutout-0.1.20.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

geotiff_cutout-0.1.20-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file geotiff_cutout-0.1.20.tar.gz.

File metadata

  • Download URL: geotiff_cutout-0.1.20.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for geotiff_cutout-0.1.20.tar.gz
Algorithm Hash digest
SHA256 e45f9c4b02b011c49e6b278f4334c1cd2d0211b5396379326b36cadef84de2b3
MD5 5497f984306cc48838c05da47efe082b
BLAKE2b-256 82cb5213eae295c9b1702a425fcf09899b5740bb9f912215757e48705dd9fb2c

See more details on using hashes here.

File details

Details for the file geotiff_cutout-0.1.20-py3-none-any.whl.

File metadata

File hashes

Hashes for geotiff_cutout-0.1.20-py3-none-any.whl
Algorithm Hash digest
SHA256 35c437881d66180bf682b48194ddd21043732692b33cff49b443899735fccfbc
MD5 31e8a57ad5a5ae0e11b9f3a767f142e5
BLAKE2b-256 334fe79c2e43757314cb073f932cc1709ad81f4ee7cb54f2b9cd4be9560b69b0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page