ukis_sat2h5
can be used to convert many (similar sized) GeoTiff images into a HDF-5
array while
keeping track of spatial extent and projections. HDF-5
arrays are easier to use in deep learning
applications. All images will be padded to fit the same dimensions. ukis_sat2h5
also includes
tools for tiling images (with optional overlap) and converting images back to GeoTiff files.
Imagine a folder structure like this:
images
├── image1
│ ├── image.tif
│ └── label.tif
├── image2
│ ├── image.tif
│ └── label.tif
└── image3
├── image.tif
└── label.tif
ukis_sat2h5
will convert this into a HDF-5
file with the following structure:
images.hdf5
/affine : Dataset {<nimages>, 6}
/epsg : Dataset {<nimages>}
/img : Dataset {<nimages>, <nbands>, <nrows>, <ncols>}
/img_means : Dataset {<nbands>}
/img_stds : Dataset {<nbands>}
/lbl : Dataset {<nimages>, <nrows>, <ncols>}
/path : Dataset {<nimages>}
$ python -m ukis_sat2h5 img_to_h5 -r ~/tmp/sen2_ref_images -d ~/tmp/sen2_ref_images.h5 -f "*.vrt" -l "*label*" -b 2 3 4 8
$ python -m ukis_sat2h5 tile_h5 -s ~/tmp/sen2_ref_images.h5 -d ~/tmp/sen2_ref_images_tiled.h5 -t 256 -o 128 -a 1024
$ python -m ukis_sat2h5 h5_to_image -s ~/tmp/sen2_ref_images_tiled.h5 -d ~/tmp/tiles_to_images -i 1 42 128
This project uses a conda
environment. For installing dependencies use:
conda env create
For the latest list of dependencies check the environment.yml
.
This package provides standalone CLI functionality
usage: ukis_sat2h5 [-h] {img_to_h5,h5_to_img,tile_h5} ...
Convert geographic images to H5 file and back and tile them for Deep Learning applications
positional arguments:
{img_to_h5,h5_to_img,tile_h5}
Tools
img_to_h5 Convert geographic images to H5 arrays
h5_to_img Convert H5 arrays (created with this tool) to back to geographic images
tile_h5 Tile H5 array and preserve geographic location
options:
-h, --help show this help message and exit
The main functionality is encapsulated inside the follwing functions
import ukis_sat2h5
ukis_sat2h5.conversion.convert_img_to_h5(src_path, dst_file, file_glob, image_bands)
ukis_sat2h5.conversion.convert_h5_to_img(src_file, dst_folder, index)
ukis_sat2h5.tiling.tile_h5(h5_file, h5_file_tiled, tile_size, overlap, target_size)
Some development guardrails are enforced via pre-commit
. This is to
ensure we follow similar code styles or it automatically cleans up jupyter notebooks.
To install pre-commit
(not necessary if you installed the conda
environment):
$ # conda/pip install pre-commit
To initialize all pre-commit hooks, run:
$ pre-commit install
To test whether pre-commit
works:
$ pre-commit run --all-files
It will check all files tracked by git and apply the triggers set up in
.pre-commit-config.yaml
. That is, it will run triggers, possibly
changing the contents of the file (e.g. black
formatting). Once set up, pre-commit
will run, as
the name implies, prior to each git commit
. In its current config, it will format code with
black
and isort
, clean up jupyter notebook
output cells, remove trailing whitespaces and will
block large files to be committed. If it fails, one has to re-stage the affected files (git add
or
git stage
), and re-commit.
We use pytest for testing the code and coverage.py
to analyze code coverage:
$ # pip install pytest coverage
$ coverage erase;
$ coverage run --concurrency=multiprocessing -m pytest
$ coverage combine # requried as we use multiprocessing
$ coverage report
$ coverage html
The UKIS team creates and adapts libraries which simplify the usage of satellite data. Our team includes (in alphabetical order):
- Weigand, Matthias
German Aerospace Center (DLR)
This software is licensed under the Apache 2.0 License.
Copyright (c) 2023 German Aerospace Center (DLR) * German Remote Sensing Data Center * Department: Geo-Risks and Civil Security
See changelog.
The UKIS team welcomes contributions from the community. For more detailed information, see our guide on contributing if you're interested in getting involved.
The DLR project Environmental and Crisis Information System (the German abbreviation is UKIS, standing for Umwelt- und Kriseninformationssysteme aims at harmonizing the development of information systems at the German Remote Sensing Data Center (DFD) and setting up a framework of modularized and generalized software components.
UKIS is intended to ease and standardize the process of setting up specific information systems and thus bridging the gap from EO product generation and information fusion to the delivery of products and information to end users.
Furthermore, the intention is to save and broaden know-how that was and is invested and earned in the development of information systems and components in several ongoing and future DFD projects.