|
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))) |
|
|