Я пытаюсь реализовать метод Рейнхарда, чтобы использовать распределение цветов целевого изображения для нормализации цвета переданного изображения для исследовательского проекта.Я получил код для работы, и он выводит правильно, но это довольно медленно.Для перебора 300 изображений требуется около 20 минут.Я уверен, что узким местом является то, как я обращаюсь с применением этой функции к каждому изображению.В настоящее время я перебираю каждый пиксель изображения и применяю приведенные ниже функции к каждому каналу.
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
Мой руководитель сказал мне, что я могу попробовать использовать матрицу дляприменить функцию сразу, чтобы улучшить время выполнения, но я не совсем уверен, как это сделать.