Prepare satellite images and training data for use with deep learning models
Project description
rschip
Split satellite images into smaller 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. Can min-max normalise or standard scale before writing chips as required.
- Mask Segmentation: Generate segmentation mask images from geopackage or shapefile features for supervised segmentation, e.g using U-Net.
- Check Background Chips: Identify image chips containing only background. Useful for when preparing training and testing datasets.
Installation
Install rschip with pip:
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_path="path/to/output_directory_image",
pixel_dimensions=128,
offset=64,
)
# set a min max normaliser
# e.g for 16 bit Sentinel 2 RGB might use
image_chipper.set_normaliser(min_val=500, max_val=3000)
# Generate chips
image_chipper.chip_image()
Each resulting tile is named using a suffix that represents the bottom left (x, y)
pixel coordinate position. 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_path="path/to/output_directory_mask",
output_name="large_image",
pixel_dimensions=128,
offset=64,
)
image_chipper.chip_image()
3. CheckBackgroundOnly Class
The CheckBackgroundOnly class provides functionality to list image chips that contain only background. Filtering out images only containing background helps to prepare a dataset more suitable for training models.
from rschip import CheckBackgroundOnly
# Initialize the CheckBackgroundOnly instance
checker = checkBackgroundOnly(background_val=0, non_background_min=1)
# Find chips with only background
checker.check_background_chips(
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 considered on checking for
image to mask equivalent using the bottom left (x,y) indices found in the outputs generated by ImageChip.create_chips().
4. Create training, validation, test dataset
The DatasetSplitter class can be used to split a directory of image chips into a training, a validation, and (optionally) a test set. The process creates a dataset directory as follows:
final_dataset_output/
└── dataset/
├── images/
│ ├── train/
│ │ ├── image_chip_1.tif
│ │ └── ...
│ ├── val/
│ │ ├── image_chip_2.tif
│ │ └── ...
│ └── test/
│ ├── image_chip_3.tif
│ └── ...
└── masks/
├── train/
│ ├── image_chip_1.tif
│ └── ...
├── val/
│ ├── image_chip_2.tif
│ └── ...
└── test/
├── image_chip_3.tif
└── ...
By default this process uses the CheckBackgroundOnly to first find chips with only background and not use those in the list of images to split. This means you can skip straight to this step without explicitly running the CheckBackgroundOnly process first if you wish.
from rschip import DatasetSplitter
# initialize the DatasetSplitter
splitter = DatasetSplitter(
image_dir="path/to/image_chips",
mask_dir="path/to/mask_chips",
output_dir="path/to/final_dataset_output",
train_ratio=0.7,
val_ratio=0.2,
test_ratio=0.1,
seed=42,
filter_background_only=True,
)
# the split
splitter.split()
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rschip-0.4.3.tar.gz.
File metadata
- Download URL: rschip-0.4.3.tar.gz
- Upload date:
- Size: 20.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce920d45e19efb494f362fd029ba48771017de4d40d4d7448dad43c031b6ac16
|
|
| MD5 |
4008ed1eed502b9fa272fef51985bd2b
|
|
| BLAKE2b-256 |
08e87dabdd532fe5a2a3eb4dfb77f8837bfbac9e710955c2eb1764115e99c571
|
Provenance
The following attestation bundles were made for rschip-0.4.3.tar.gz:
Publisher:
publish.yml on tomwilsonsco/rs-chip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rschip-0.4.3.tar.gz -
Subject digest:
ce920d45e19efb494f362fd029ba48771017de4d40d4d7448dad43c031b6ac16 - Sigstore transparency entry: 1041672532
- Sigstore integration time:
-
Permalink:
tomwilsonsco/rs-chip@680ee322a01b19dac58c3e49a484a87225cbc1bb -
Branch / Tag:
refs/tags/0.4.3 - Owner: https://github.com/tomwilsonsco
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@680ee322a01b19dac58c3e49a484a87225cbc1bb -
Trigger Event:
release
-
Statement type:
File details
Details for the file rschip-0.4.3-py3-none-any.whl.
File metadata
- Download URL: rschip-0.4.3-py3-none-any.whl
- Upload date:
- Size: 16.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d00387d13cb3b5fc1650d9ea6fbd82aea9810f3205662613f3db4b0f5483ecf1
|
|
| MD5 |
e5b663f4937affef0b1d5707753aad7a
|
|
| BLAKE2b-256 |
838f05b4ae7c5685edef4072c0d30e53587e35c42c56fcd061034f3cd58013fe
|
Provenance
The following attestation bundles were made for rschip-0.4.3-py3-none-any.whl:
Publisher:
publish.yml on tomwilsonsco/rs-chip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rschip-0.4.3-py3-none-any.whl -
Subject digest:
d00387d13cb3b5fc1650d9ea6fbd82aea9810f3205662613f3db4b0f5483ecf1 - Sigstore transparency entry: 1041672860
- Sigstore integration time:
-
Permalink:
tomwilsonsco/rs-chip@680ee322a01b19dac58c3e49a484a87225cbc1bb -
Branch / Tag:
refs/tags/0.4.3 - Owner: https://github.com/tomwilsonsco
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@680ee322a01b19dac58c3e49a484a87225cbc1bb -
Trigger Event:
release
-
Statement type: