import numpy as np import scipy.signal # pip3 install scipy from skimage import color, io # pip3 install scikit-image full = color.rgba2rgb(io.imread("lena.png")) h, w, c = full.shape # Global contrast, RGB i = full * 2 - 0.5 i = i.clip(0.0, 1.0) rgb_result = full.copy() rgb_result[:, :w//2, :] = i[:, :w//2, :] io.imshow(rgb_result) io.show() # Lab global contrast lab = color.rgb2lab(full) # Numpy Indexing for images: # http://scikit-image.org/docs/dev/user_guide/numpy_images.html lab[:, :, 0] *= 2 lab[:, :, 0] -= 50 lab[:, :, 0] = lab[:, :, 0].clip(0.0) # Warning: turns back the image to RGB, but using 0.0 - 1.0 float # encoding (unlike the source image). i = color.lab2rgb(lab) lab_contrast = full.copy() lab_contrast[:, :w//2, :] = i[:, :w//2, :] io.imshow(lab_contrast) io.show() # Lab local contrast with simple convolution matrix lab = color.rgb2lab(full) amount = .05 convmat = np.ones([5, 5]) * -amount convmat[2, 2] = 25*amount + 1 print(convmat) convoluted = scipy.signal.convolve2d(lab[:, :, 0], convmat, mode='same') lab[:, :, 0] = convoluted.clip(0.0) print("lab2rgb") i = color.lab2rgb(lab) lab_result = full.copy() lab_result[:, :w//2, :] = i[:, :w//2, :] io.imshow(lab_result) io.show()