Image Tool

An utility model for image augmentation.

Example usage:

from singa import image_tool

tool = image_tool.ImageTool()
imgs = tool.load('input.png').        resize_by_list([112]).crop5((96, 96), 5).enhance().flip().get()
for idx, img in enumerate(imgs):
    img.save('%d.png' % idx)
class singa.image_tool.ImageTool

A tool for image augmentation.

For operations with inplace=True, the returned value is the ImageTool instance self, which is for chaining multiple operations; Otherwise, the preprocessed images would be returned.

For operations that has countable pre-processing cases, argument num_case could be set to decide the number of pre-processing cases to apply. Typically, it is set to 1 for training phases and to the max for test phases.

color_cast(offset=20, inplace=True)

Add a random value from [-offset, offset] to each channel

Parameters:
  • offset – cast offset, >0 and <255
  • inplace – inplace imgs or not ( return new_imgs)
crop3(patch, num_case=1, inplace=True)

Crop a max square patch of the input image at given position and scale it into given size.

According to img size, crop position could be either (left, center, right) or (top, middle, bottom).

Parameters:
  • patch (tuple) – the width and height the output image
  • num_case – num of cases, must be in [1,3]
  • inplace – inplace imgs or not ( return new_imgs)
crop5(patch, num_case=1, inplace=True)

Crop at positions from [left_top, left_bottom, right_top, right_bottom, and center].

Parameters:
  • patch (tuple) – width and height of the result image.
  • num_case – num of cases, must be in [1,5]
  • inplace – inplace imgs or not ( return new_imgs)
crop8(patch, num_case=1, inplace=True)

This is a union of patch_5 and patch_and_scale.

You can follow this example to union any num of cases of imgtool methods

enhance(scale=0.2, inplace=True)

Apply random enhancement for Color,Contrast,Brightness,Sharpness.

Parameters:
  • scale (float) – enhancement degree is from [1-scale, 1+scale]
  • inplace – inplace imgs or not ( return new_imgs)
flip(num_case=1, inplace=True)

Randomly flip a img left to right.

Parameters:
  • num_case – num of cases, must be in {1,2}; if 2, then add the orignal and flipped img
  • inplace – inplace imgs or not (return new_imgs)
num_augmentation()

Return the total number of augmentations to each image

random_crop(patch, inplace=True)

Crop the image at random offset to get a patch of the given size.

Parameters:
  • patch (tuple) – width and height of the patch
  • inplace (Boolean) – replace the internal images list with the patches if True; otherwise, return the patches.
resize_by_list(size_list, num_case=1, inplace=True)
Parameters:
  • num_case – num of resize cases, must be <= the length of size_list
  • inplace – inplace imgs or not ( return new_imgs)
resize_by_range(rng, inplace=True)
Parameters:
  • rng – a tuple (begin,end), include begin, exclude end
  • inplace – inplace imgs or not ( return new_imgs)
rotate_by_list(angle_list, num_case=1, inplace=True)
Parameters:
  • num_case – num of rotate cases, must be <= the length of angle_list
  • inplace – inplace imgs or not ( return new_imgs)
rotate_by_range(rng, inplace=True)
Parameters:
  • rng – a tuple (begin,end) in degree, include begin, exclude end
  • inplace – inplace imgs or not ( return new_imgs)
singa.image_tool.color_cast(img, offset)

Add a random value from [-offset, offset] to each channel

singa.image_tool.crop(img, patch, position)

Crop the input image into given size at given position.

Parameters:
  • patch (tuple) – width and height of the patch
  • position (list(str)) – left_top, left_bottom, right_top, right_bottom
  • center. (and) –
singa.image_tool.crop_and_resize(img, patch, position)

Crop a max square patch of the input image at given position and resize it into given size.

Parameters:
  • patch (tuple) – width, height
  • position (list(str)) – left, center, right, top, middle, bottom.
singa.image_tool.enhance(img, scale)

Apply random enhancement for Color,Contrast,Brightness,Sharpness.

Parameters:scale (float) – enhancement degree is from [1-scale, 1+scale]
singa.image_tool.load_img(path, grayscale=False)

Read the image from a give path

singa.image_tool.resize(img, small_size)

Resize the image to make the smaller side be at the given size