• pedrofreire's avatar
    Add adjustment operations for RGB Tensor Images. (#1525) · e79caddf
    pedrofreire authored
    * Add adjustment operations for RGB Tensor Images.
    
    Right now, we have operations on PIL images, but we want to have a version of the opeartions that act directly on Tensor images.
    
    Here, we add such operations for adjust_brightness, adjust_contrast and adjust_saturation.
    
    In PIL, those functions are implemented by generating an degenerate image from the first, and then interpolating them together.
    - https://github.com/python-pillow/Pillow/blob/master/src/PIL/ImageEnhance.py
    - https://github.com/python-pillow/Pillow/blob/master/src/libImaging/Blend.c
    
    A few caveats:
    * Since PIL operates on uint8, and the tensor operations might be on float, we can get slightly different values because of int truncation.
    * We assume here the images are RGB; in particular, to handle an alpha channel, we need to check whether it is present, in which case we copy it to the final image.
    
    * Keep dtype and use broadcast in adjust operations
    
    - We make our operations have input.dtype == output.dtype, at the cost of
    adding a few type checks and branches.
    
    - By using Tensor broadcast, we can simplify the calls to _blend.
    
    * Use is_floating_point to check dtype.
    
    * Remove unpacking in tuple
    
    It seems Python 2 does not support this type of unpacking, so it broke
    Python 2 builds. This should fix it.
    
    * Add from __future__ import division for Python 2
    e79caddf
functional_tensor.py 3.5 KB