|
import numpy as np |
|
from utils.color import rgb2ycc |
|
|
|
def illumination_parameters_estimation(current_image, illumination_estimation_option): |
|
ie_method = illumination_estimation_option.lower() |
|
|
|
if ie_method == "gw": |
|
ie = np.mean(current_image, axis=(0, 1)) |
|
ie /= ie[1] |
|
return ie |
|
elif ie_method == "sog": |
|
sog_p = 4. |
|
ie = np.mean(current_image**sog_p, axis=(0, 1))**(1/sog_p) |
|
ie /= ie[1] |
|
return ie |
|
elif ie_method == "wp": |
|
ie = np.max(current_image, axis=(0, 1)) |
|
ie /= ie[1] |
|
return ie |
|
elif ie_method == "iwp": |
|
samples_count = 10 |
|
sample_size = 10 |
|
rows, cols = current_image.shape[:2] |
|
data = np.reshape(current_image, (rows*cols, 3)) |
|
maxima = np.zeros((samples_count, 3)) |
|
for i in range(samples_count): |
|
maxima[i, :] = np.max(data[np.random.randint(low=0, high=rows*cols, size=(sample_size)), :], axis=0) |
|
ie = np.mean(maxima, axis=0) |
|
ie /= ie[1] |
|
return ie |
|
else: |
|
raise ValueError( |
|
'Bad illumination_estimation_option value! Use the following options: "gw", "wp", "sog", "iwp"') |
|
|
|
|
|
def ratios2floats(ratios): |
|
floats = [] |
|
for ratio in ratios: |
|
floats.append(float(ratio.num) / ratio.den) |
|
return floats |
|
|