本算法以随机的方式对每张图像选取三种加雾算法中的一种,使得训练后的神经网络不容易出现过拟合现象
在进行去雾算法实验的过程中我发现如果使用单一的加雾算法,得到的训练集进行训练后效果并不理想。之后尝试了这种方法,在某些情况下效果还不错。
import cv2, math
import numpy as np
def AddHaze1(img):
img_f = img
(row, col, chs) = img.shape
A = 0.5 # 亮度
beta = 0.08 # 雾的浓度
size = math.sqrt(max(row, col)) # 雾化尺寸
center = (row // 2, col // 2) # 雾化中心
for j in range(row):
for l in range(col):
d = -0.04 * math.sqrt((j - center[0]) ** 2 + (l - center[1]) ** 2) + size
td = math.exp(-beta * d)
img_f[j][l][:] = img_f[j][l][:] * td + A * (1 - td)
return img_f
def AddHaze2(img):
A = np.random.uniform(0.6,0.95)
t = np.random.uniform(0.3,0.95)
img_h = img*t + A*(1-t)
return img_h
def AddHaze(img):
l = np.random.uniform(0, 1)
if l > 0.7:
img_T = AddHaze1(img)
else:
img_T = AddHaze2(img)
return img_T