Source code for draugr.opencv_utilities.color_space.gamma

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = "Christian Heider Nielsen"
__doc__ = r"""

           Created on 25/03/2020
           """

import numpy

__all__ = [
    "gamma_correct_byte",
    "gamma_correct_fast_to_byte",
    "gamma_correct_float_to_byte",
    "linear_correct_byte",
    "linear_correct_float_to_byte",
]


# from numba import njit # PERFORM EXPERIMENTS


# @njit
[docs]def gamma_correct_byte(image: numpy.ndarray, gamma: float = 2.2) -> numpy.ndarray: """ :param image: :type image: :param gamma: :type gamma: :return: :rtype:""" return gamma_correct_float_to_byte(image / 255, gamma)
# @njit
[docs]def gamma_correct_fast_to_byte(image: numpy.ndarray) -> numpy.ndarray: """ :param image: :type image: :return: :rtype:""" return ((image**0.454545) * 255).astype(numpy.uint8)
# @njit
[docs]def gamma_correct_float_to_byte( image: numpy.ndarray, gamma: float = 2.2 ) -> numpy.ndarray: """ :param image: :type image: :param gamma: :type gamma: :return: :rtype:""" return ((image ** (1.0 / gamma)) * 255).astype(numpy.uint8)
# @njit
[docs]def linear_correct_float_to_byte( image: numpy.ndarray, gamma: float = 2.2 ) -> numpy.ndarray: """ :param image: :type image: :param gamma: :type gamma: :return: :rtype:""" return ((image**gamma) * 255).astype(numpy.uint8)
# @njit
[docs]def linear_correct_byte(image: numpy.ndarray, gamma: float = 2.2) -> numpy.ndarray: """ :param image: :type image: :param gamma: :type gamma: :return: :rtype:""" return gamma_correct_float_to_byte(image / 255, gamma)
if __name__ == "__main__": inp = numpy.random.random((2, 2)) print(gamma_correct_fast_to_byte(inp)) print(gamma_correct_float_to_byte(inp)) print(linear_correct_float_to_byte(inp)) print(linear_correct_byte(inp)) print(gamma_correct_byte(inp))