Skip to main content

Prepare satellite images and training data for use with deep learning models

Project description

rschip

PyPI version License Build Status Coverage Status

Split satellite images into small, fixed-sized tiles, for input into convolutional neural networks (cnn), or vision transformers (ViT) such as Segment Anything.

Features

  • Tile Satellite Images: Split large satellite images into smaller chips of specified dimensions. Includes option to sample pixels for standard scaling and write a scaler object to use when making predictions from a trained model.
  • Mask Segmentation: Generate segmentation mask images from geopackage or shapefile features for supervised segmentation, e.g using U-Net.
  • Remove Background Chips: Filter out image chips containing only background. Useful for when preparing training and testing datasets.

Installation

To install rschip, clone the repository and install the package in editable mode:

pip install rschip

Requires rasterio, numpy, geopandas, and shapely.

Usage

1. ImageChip Class

The ImageChip class provides functionality for creating tiles (also known as chips) from large satellite images.

from rschip import ImageChip

# Initialize the ImageChip instance for 128 by 128 tiles
image_chipper = ImageChip(
    input_image_path="path/to/large_image.tif",
    output_dir="path/to/output_directory_image",
    pixel_dimensions=128,
    offset=64,
    output_format="tif",
)

# Generate chips
image_chipper.create_chips()

With the output_format parameter set to "tif", each resulting tile is named using a suffix that represents the bottom left (x, y) pixel coordinate position. If output_format is set to "npz", the resulting .npz zip file contains a dictionary of arrays, where the keys are the same as these tile names. By default, the prefix of each tile name is taken from the input image file name (input_image_path), unless you specify output_name.

Using the parameter use_multiprocessing=True (default) makes chipping process faster by using multiple cores.

2. SegmentationMask Class

The SegmentationMask class is used to create a segmentation mask images from geopackage or shapefile using an input image as extent and pixel size reference.

Once the segmentation mask has been created, the segmentation image can also be split into tiles. Some deep learning frameworks expect images and corresponding masks to have the same file name in separate directories. The output_name argument of ImageChip can ensure this is the case.

from rschip import SegmentationMask, ImageChip

# Initialize the SegmentationMask
seg_mask = SegmentationMask(
    input_image_path="path/to/large_image.tif",
    input_features_path="path/to/geopackage_features.gpkg",
    output_path="path/to/output_mask.tif",
    class_field="ml_class"
)

# Generate segmentation mask image
seg_mask.create_mask()

# Chip the segmentation image to match satellite image
image_chipper = ImageChip(
    input_image_path="path/to/output_mask.tif",
    output_dir="path/to/output_directory_mask",
    output_name="large_image",
    pixel_dimensions=128,
    offset=64,
    output_format="tif",
)
image_chipper.create_chips()

3. RemoveBackgroundOnly Class

The RemoveBackgroundOnly class provides functionality to remove image chips (either could be tifs or numpy arrays inside npz file) that contain only background. Filtering out images only containing background helps to prepare a dataset more suitable for training models.

from rschip.remove_background_only import RemoveBackgroundOnly

# Initialize the RemoveBackgroundOnly instance
remover = RemoveBackgroundOnly(background_val=0, non_background_min=100)

# Remove chips with only background
remover.remove_background_only_files(
    class_chips_dir='path/to/mask_directory',
    image_chips_dir='path/to/image_directory'
)

The default assumption is that image and mask equivalent have the same file names as shown in example 2. above. If that is not the case, use the masks_prefix, images_prefix arguments which are prefix strings which are removed on checking for image to mask equivalent using the bottom left (x,y) indices found in the outputs generated by ImageChip.create_chips().

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

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

Source Distribution

rschip-0.1.0.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

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

rschip-0.1.0-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file rschip-0.1.0.tar.gz.

File metadata

  • Download URL: rschip-0.1.0.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for rschip-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1cd9bb3604ff85eeecb644b945f7df604be01c5a9040315b16aa27dda1e12885
MD5 3b7d709beba483cd1492434ab46685e8
BLAKE2b-256 61da0386d33338b9804198e9d7048cfe50a526dcc8ab910fc816e9d6039da60f

See more details on using hashes here.

File details

Details for the file rschip-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: rschip-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for rschip-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5ae7c8e07b18da34ae05c06d37cde1d128fbfa7a59b4bb4bc265d7c6c4db66d2
MD5 50f1c5f94e523a8fb75592d7e112d1c9
BLAKE2b-256 b6c1da06367a8bd395ebee9ba4a0380c338701025e2bbc9b96be0fa81c48344f

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 Pingdom Monitoring Sentry Error logging StatusPage Status page