|
import numpy as np |
|
import random |
|
from scipy.stats import tukeylambda |
|
|
|
camera_params = { |
|
"Kmin": 0.2181895124454343, |
|
"Kmax": 3.0, |
|
"G_shape": np.array( |
|
[ |
|
0.15714286, |
|
0.14285714, |
|
0.08571429, |
|
0.08571429, |
|
0.2, |
|
0.2, |
|
0.1, |
|
0.08571429, |
|
0.05714286, |
|
0.07142857, |
|
0.02857143, |
|
0.02857143, |
|
0.01428571, |
|
0.02857143, |
|
0.08571429, |
|
0.07142857, |
|
0.11428571, |
|
0.11428571, |
|
] |
|
), |
|
"Profile-1": { |
|
"R_scale": { |
|
"slope": 0.4712797750747537, |
|
"bias": -0.8078958947116487, |
|
"sigma": 0.2436176299944695, |
|
}, |
|
"g_scale": { |
|
"slope": 0.6771267783987617, |
|
"bias": 1.5121876510805845, |
|
"sigma": 0.24641096601611254, |
|
}, |
|
"G_scale": { |
|
"slope": 0.6558756156508007, |
|
"bias": 1.09268679594838, |
|
"sigma": 0.28604721742277756, |
|
}, |
|
}, |
|
"black_level": 2048, |
|
"max_value": 16383, |
|
} |
|
|
|
|
|
|
|
def addPStarNoise(img, K): |
|
return np.random.poisson(img / K).astype(np.float32) * K |
|
|
|
|
|
|
|
|
|
def addGStarNoise(img, K, G_shape, G_scale_param): |
|
|
|
a, b = np.histogram(G_shape, bins=10, range=(-0.25, 0.25)) |
|
a, b = np.array(a), np.array(b) |
|
a = a / a.sum() |
|
|
|
rand_num = random.uniform(0, 1) |
|
idx = np.sum(np.cumsum(a) < rand_num) |
|
lam = random.uniform(b[idx], b[idx + 1]) |
|
|
|
|
|
log_K = np.log(K) |
|
log_G_scale = ( |
|
np.random.standard_normal() * G_scale_param["sigma"] * 1 |
|
+ G_scale_param["slope"] * log_K |
|
+ G_scale_param["bias"] |
|
) |
|
G_scale = np.exp(log_G_scale) |
|
|
|
|
|
return img + tukeylambda.rvs(lam, scale=G_scale, size=img.shape).astype(np.float32) |
|
|
|
|
|
|
|
|
|
def addRowNoise(img, K, R_scale_param): |
|
|
|
log_K = np.log(K) |
|
log_R_scale = ( |
|
np.random.standard_normal() * R_scale_param["sigma"] * 1 |
|
+ R_scale_param["slope"] * log_K |
|
+ R_scale_param["bias"] |
|
) |
|
R_scale = np.exp(log_R_scale) |
|
|
|
|
|
row_noise = np.random.randn(img.shape[0], 1).astype(np.float32) * R_scale |
|
return img + np.tile(row_noise, (1, img.shape[1])) |
|
|
|
|
|
|
|
|
|
def addQuantNoise(img, q): |
|
return img + np.random.uniform(low=-0.5 * q, high=0.5 * q, size=img.shape) |
|
|
|
|
|
def sampleK(Kmin, Kmax): |
|
return np.exp(np.random.uniform(low=np.log(Kmin), high=np.log(Kmax))) |
|
|