Skip to main content

Minimalistic set of image reader agnostic tools to easily iterate over large images

Project description

Build Status Coverage Status Documentation Status

Image Tiling Utils

Minimalistic set of image reader agnostic tools to easily iterate over large images

Example 1

Let's iterate over a large image with overlapping tiles of the same size tiles in pixels. At boundaries we add "no-data" pixels. Let's assume the data access is provided with an example function

def read_data(x, y, width, height, out_width=None, out_height=None):
    out_width = width if out_width is None else out_width
    out_height = height if out_height is None else out_height    
    img.read(x, y, width, height, out_width, out_height)

Thus, overlapping tiles can be extracted as

from tiling import ConstStrideTiles

tiles = ConstStrideTiles(image_size=(500, 500), tile_size=(256, 256), stride=(100, 100), 
                         origin=(-100, -100),
                         scale=1.0,
                         include_nodata=True)

print("Number of tiles: %i" % len(tiles))
for extent, out_size in tiles:
    x, y, width, height = extent
    data = read_data(x, y, width, height, 
                     out_width=out_size[0], 
                     out_height=out_size[1])
    print("data.shape: {}".format(data.shape))

# Access a tile:
i = len(tiles) // 2 
extent, out_size  = tiles[i]

example 1 tiles

Example 2

Let's iterate over a large image with overlapping tiles of the same size in pixels. In this case we prefer to not going outside the input image and fill tiles with nodata. In this situation, overlapping is not constant. Let's assume the data access is provided with an example function

def read_data(x, y, width, height, out_width=None, out_height=None):
    out_width = width if out_width is None else out_width
    out_height = height if out_height is None else out_height    
    img.read(x, y, width, height, out_width, out_height)

Thus, overlapping tiles can be extracted as

from tiling import ConstSizeTiles

tiles = ConstSizeTiles(image_size=(500, 500), tile_size=(256, 256), min_overlapping=15, scale=1.0)

print("Number of tiles: %i" % len(tiles))
for extent, out_size in tiles:
    assert out_size[0] == tiles.tile_size[0]
    assert out_size[1] == tiles.tile_size[1]
    x, y, width, height = extent
    data = read_data(x, y, width, height, 
                     out_width=out_size[0], 
                     out_height=out_size[1])
    print("data.shape: {}".format(data.shape))

# Access a tile:
i = len(tiles) // 2 
extent  = tiles[i]

example 2 tiles

Installation:

from pip

pip install tiling

from sources

pip install git+https://github.com/vfdev-5/ImageTilingUtils.git

Examples

For more practical examples, see notebooks

Project details


Download files

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

Files for tiling, version 0.3.0
Filename, size File type Python version Upload date Hashes
Filename, size tiling-0.3.0-py2.py3-none-any.whl (7.6 kB) File type Wheel Python version py2.py3 Upload date Hashes View hashes
Filename, size tiling-0.3.0-py3.6.egg (13.4 kB) File type Egg Python version 3.6 Upload date Hashes View hashes
Filename, size tiling-0.3.0.tar.gz (5.3 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page