Как отобразить изображения с цветовой коррекцией после оценки освещенности путем глубокого обучения в Python и Keras? - PullRequest
1 голос
/ 31 мая 2019

Я делаю контролируемый метод коррекции цвета изображения путем глубокого изучения Python и Keras.Я закончил тренировать свои данные, и я предсказал значения на проверенных данных.Теперь, Я хотел бы показать некоторые из этих изображений с цветовой коррекцией из набора данных, чтобы я мог визуально сравнить их с исходными изображениями. Я застрял в цикле и не знаю, как решить эту проблему,Может ли кто-нибудь помочь мне с кодом или какими-нибудь советами?

Я уже сравнил числа предсказанного освещения и первого истинного уровня земли, но я хочу построить изображения того, как они выглядят с предсказанным освещением.Я использую 3-кратную перекрестную проверку, что делает ее еще сложнее.У меня более 1000 изображений, но, скажем так, у меня всего 12 ради простоты в цифрах.Я буду тренироваться на 8 из них и тестировать на 4 из них.

#this is the part where the training and testing is happening, images are loaded
#in xs variable and ground truth illumination is loaded in ys variable

for i in range (3):
    print('\nFold ',i)
    X_train = xs [folds[i]==0, :]
    X_test = xs [folds[i]==1, :]
    Y_train = ys [folds[i]==0, :]
    Y_test = np.zeros((4,3), dtype=np.uint8)

    model = None
    model = create_model()
    history = model.fit(X_train, Y_train, epochs=10, batch_size=8)

    Y_test = model.predict(X_test, batch_size=4)
    print("Predicted values for fold %d:" % i, Y_test)
    for y in Y_test[:]:
        predicted.append(y)

Эта часть кода функционирует отлично, я не знаю, как построить или даже просто сохранить каждый из них.из этих 12 изображений после цветовой коррекции с предсказанным освещением.

РЕДАКТИРОВАТЬ: я извлек предсказанные значения для каждой фотографии.Как я могу применить их к изображению?

1 Ответ

1 голос
/ 04 июня 2019

Если я правильно понимаю, вы хотите сбалансировать цвета с отлитыми цветами с помощью источника света, предсказанного вашей моделью.Ваш прогноз состоит из 3 значений (скажем, [альфа, бета, ceta]), которые представляют собой поправочные коэффициенты, которые будут применены к каждому каналу (синий, зеленый, красный) ваших изображений с цветной заливкой.

Однако, прежде чем применить усиление коррекции, необходимо выполнить гамма-линеаризацию изображений (дополнительная информация здесь ).

Вот несколько примеров кодов, которые помогутВы:

import cv2
import numpy as np

def gamma_decode(B_gamma, G_gamma, R_gamma):
    B_gamma = B_gamma/255
    G_gamma = G_gamma/255
    R_gamma = R_gamma/255 

    gamma = 1/2.2
    B_gamma_decode = 255*(B_gamma**(1/gamma)) 
    G_gamma_decode = 255*(G_gamma**(1/gamma))
    R_gamma_decode = 255*(R_gamma**(1/gamma))
    return (B_gamma_decode, G_gamma_decode, R_gamma_decode)


def gamma_encode(B_channel, G_channel, R_channel):
    B_channel = B_channel/255
    G_channel = G_channel/255
    R_channel = R_channel/255

    gamma = 1/2.2
    if np.all(B_channel <= 0):
        B_gamma_cor = (B_channel**(gamma + 0j))
        B_gamma_cor = 255*(abs(B_gamma_cor))
    else:
        B_gamma_cor = 255*(B_channel**gamma)

    if np.all(G_channel <= 0):
        G_gamma_cor = (G_channel**(gamma + 0j))
        G_gamma_cor = 255*(abs(G_gamma_cor))
    else:
        G_gamma_cor = 255*(G_channel**gamma)

    if np.all(R_channel <= 0):
        R_gamma_cor = (R_channel**(gamma + 0j))
        R_gamma_cor = 255*(abs(R_gamma_cor))
    else:
        R_gamma_cor = 255*(R_channel**gamma)

    return (B_gamma_cor, G_gamma_cor, R_gamma_cor)


def white_balance(img, pred_illum) 
   B_channel, G_channel, R_channel = cv2.split(img)
   alpha, beta, ceta = pred_illum

   #Gamma_decoding
   B_channel, G_channel, R_channel = gamma_decode(B_channel, G_channel, R_channel)

   #Correction
   B_cor = (alpha*B_channel)
   G_cor = (beta*G_channel)
   R_cor = (ceta*R_channel)

   #Gamma encoding
   B_cor, G_cor, R_cor = gamma_encode(B_cor, G_cor, R_cor)

   #Convert to uint8 to display
   B_cor = B_cor.astype(np.uint8)
   G_cor = G_cor.astype(np.uint8)
   R_cor = R_cor.astype(np.uint8)
   img_white_balanced = cv2.merge((B_cor, G_cor, R_cor))
   return img_white_balanced
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...