对图像加雾

随机对图片采取三种加雾算法中的一种,使训练不容易产生过拟合。

import cv2, math
import numpy as np

def AddHaze1(img):

	img_f = img
	# img = cv2.imread(img_path,-1)
	#print(img.shape)  参数-1为按原通道读入,
	#不写的话默认读入三通道图片,例如(112,112,3)
	#print(img.shape[0])#读入的时图片的高度height
	#print(img.shape[1])#读入的时图片的宽度weight
	(row, col, chs) = img.shape

	A = 0.5  # 亮度
	beta = 0.08  # 雾的浓度
	# math.sqrt()返回数字x的平方根。 
	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):
# np.random.uniform()详见:https://blog.csdn.net/qq_40373651/article/details/119867325?spm=1001.2014.3001.5501
	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 AddHaze3(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 AddHaze(img):
	l = np.random.uniform(0, 1)
	if l<0.33:
		img_T = AddHaze1(img)
	elif l>0.66:
		img_T = AddHaze2(img)
	else:
		img_T = AddHaze3(img)
	return img_T
  • 0
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值