Doodle Labeller (Doodler)

Doodle Labeller (Doodler)

  • Get Started
  • Guide
  • Blog

›Recent Posts

Recent Posts

  • What makes a "class"?
  • Splitting up large geoTIFF orthomosaics
  • merge a 3-band and 1-band image
  • no spaces in filenames!
  • batch "redoing"

Splitting up large geoTIFF orthomosaics

August 1, 2020

Dan Buscombe

Doodler can work with really large images, but it is usually best to keep your images < 10,000 pixels in any dimension, because then the program will do CRF inference on the whole image at once rather than in chunks. This usually results in better image segmentations that are more consistent with your doodles.

So, this post is all about how you make smaller image tiles from a very large geoTIFF format orthomosaic, using python. The smaller tiles will also be written out as image tiles, with their relative position in the larger image described in the file name, for easy reassembly

We'll need a dependency not included in the doodler environment: gdal

conda install gdal

Now, in python:

import os, gdal
from gdalconst import *
from glob import glob

How large do you want your output (square) image tiles to be? (in pixels)

tilesize = 5000

What images would you like to chop up?

bigfiles = [
'Sandwich/2017-01-09_Sandwich_5cm_ortho.tif',
'Sandwich/2017-02-14_Sandwich_5cm_ortho.tif',
'Sandwich/2017-03-16_Sandwich_5cm_ortho.tif',
'Sandwich/2018-01-10_Sandwich_5cm_ortho.tif',
]

List the widths and heights of those input bigfiles

widths = [13314, 13314, 13314, 19972]
heights = [6212, 6212, 6212, 9319]

Specify a new folder for each set of image tiles (one per big image)

folders = ['Sandwich/2017-01-09_5cm', 'Sandwich/2017-02-14_5cm',\
          'Sandwich/2017-03-16_5cm','Sandwich/2017-01-10_5cm']

Make file name prefixes by borrowing the folder name:

prefixes = [f.split('/')[-1] for f in folders]

Finally, loop through each file, chop it into chunks using gdal_translate, called by an os.system() command. Then moves the tiles into their respective folders

for b,f,p in zip(bigfiles, folders, prefixes):

    # chop the image into chunks
    for i in range(0, widths[k], tilesize):
        for j in range(0, heights[k], tilesize):
            gdaltranString = "gdal_translate -of GTIFF -srcwin "+str(i)+", "+str(j)+", "+str(tilesize)+", " \
                +str(tilesize)+" "+b+" "+p+"_"+str(i)+"_"+str(j)+".tif"
            os.system(gdaltranString)

    ##move those chunks to a directory
    os.mkdir(f)
    os.system('mv '+p+'*.tif '+f)
Recent Posts
Doodle Labeller (Doodler)
Docs
Getting StartedHow to DoodleFull user guide
Community
Stack OverflowTwitter
More
BlogGitHubStar
Follow @magic_walnut
Marda Science
Copyright © 2020 Marda Science, LLC