Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def reinhard(target, img):
- #converts image and target from BGR colorspace to l alpha beta
- lAB_img = cv2.cvtColor(img, cv2.COLOR_BGR2Lab)
- lAB_tar = cv2.cvtColor(target, cv2.COLOR_BGR2Lab)
- #finds mean and standard deviation for each color channel across the entire image
- (mean, std) = cv2.meanStdDev(lAB_img)
- (mean_tar, std_tar) = cv2.meanStdDev(lAB_tar)
- #iterates over image implementing formula to map color normalized pixels to target image
- for y in range(512):
- for x in range(512):
- lAB_tar[x, y, 0] = (lAB_img[x, y, 0] - mean[0]) / std[0] * std_tar[0] + mean_tar[0]
- lAB_tar[x, y, 1] = (lAB_img[x, y, 1] - mean[1]) / std[1] * std_tar[1] + mean_tar[1]
- lAB_tar[x, y, 2] = (lAB_img[x, y, 2] - mean[2]) / std[2] * std_tar[2] + mean_tar[2]
- mapped = cv2.cvtColor(lAB_tar, cv2.COLOR_Lab2BGR)
- return mapped
- lAB_tar[:,:,0] = (lAB_img[:,:,0] - mean[0])/std[0] * std_tar[0] + mean_tar[0]
- lAB_tar[:,:,1] = (lAB_img[:,:,1] - mean[1])/std[1] * std_tar[1] + mean_tar[1]
- lAB_tar[:,:,2] = (lAB_img[:,:,2] - mean[2])/std[2] * std_tar[2] + mean_tar[2]
- # implementing the formula
- #(Io - mo)/so*st + mt = Io * (st/so) + mt - mo*(st/so)
- ratio = (std_tar/std_ori).reshape(-1)
- offset = (mean_tar - mean_ori*std_tar/std_ori).reshape(-1)
- lab_tar = cv2.convertScaleAbs(lab_ori*ratio + offset)
- # 2019/02/19 by knight-金
- # https://stackoverflow.com/a/54757659/3547485
- import numpy as np
- import cv2
- def reinhard(target, original):
- # cvtColor: COLOR_BGR2Lab
- lab_tar = cv2.cvtColor(target, cv2.COLOR_BGR2Lab)
- lab_ori = cv2.cvtColor(original, cv2.COLOR_BGR2Lab)
- # meanStdDev: calculate mean and stadard deviation
- mean_tar, std_tar = cv2.meanStdDev(lab_tar)
- mean_ori, std_ori = cv2.meanStdDev(lab_ori)
- # implementing the formula
- #(Io - mo)/so*st + mt = Io * (st/so) + mt - mo*(st/so)
- ratio = (std_tar/std_ori).reshape(-1)
- offset = (mean_tar - mean_ori*std_tar/std_ori).reshape(-1)
- lab_tar = cv2.convertScaleAbs(lab_ori*ratio + offset)
- # convert back
- mapped = cv2.cvtColor(lab_tar, cv2.COLOR_Lab2BGR)
- return mapped
- if __name__ == "__main__":
- ori = cv2.imread("ori.png")
- tar = cv2.imread("tar.png")
- mapped = reinhard(tar, ori)
- cv2.imwrite("mapped.png", mapped)
- mapped_inv = reinhard(ori, tar)
- cv2.imwrite("mapped_inv.png", mapped)
Add Comment
Please, Sign In to add comment