AI科技大本营|Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码( 四 )


a= cov_Ip / (var_I + eps)
b= m_p - a * m_I
m_a = cv2.boxFilter(a, -1, (r, r))
m_b = cv2.boxFilter(b, -1, (r, r))
returnm_a * I + m_b
defgetV1(m, r, eps, w, maxV1): # 输入rgb图像 , 值范围[0,1]
'''计算大气遮罩图像V1和光照值A, V1 = 1-t/A'''
V1 = np.min(m, 2) # 得到暗通道图像
V1 = guidedfilter(V1, zmMinFilterGray(V1, 7), r, eps) # 使用引导滤波优化
bins = 2000
ht = np.histogram(V1, bins) # 计算大气光照A
d= np.cumsum(ht[ 0]) / float(V1.size)
forlmax inrange(bins - 1, 0, -1):
ifd[lmax] <= 0.999:
break
A= np.mean(m, 2)[V1 >= ht[ 1][lmax]].max
V1 = np.minimum(V1 * w, maxV1) # 对值范围进行限制
returnV1, A
defdeHaze(m, r= 81, eps= 0.001, w= 0.95,maxV1= 0.80, bGamma=False) :
Y= np.zeros(m.shape)
V1, A = getV1(m, r, eps, w, maxV1) # 得到遮罩图像和大气光照
fork inrange( 3):
Y[:, :, k] = (m[:, :, k] - V1) / ( 1- V1 / A) # 颜色校正
Y= np.clip(Y, 0, 1)
ifbGamma:
Y = Y ** (np.log( 0.5) / np.log(Y.mean)) # gamma校正,默认不进行该操作
returnY
video = "1.mp4"
cap = cv2.VideoCapture(video)
whilecap.isOpened:
_,frame = cap.read
frame = cv2.flip(frame, -180)
cv2.imwrite( "temp.jpg",frame)
m= deHaze(frame / 255.0) * 255
height, width = m.shape[: 2]
#缩小图像
size = (int(width * 0.5), int(height * 0.5))
shrink = cv2.resize(m, size, interpolation=cv2.INTER_AREA)
cv2.imwrite( 'defog.jpg', shrink)
img = cv2.imread( "defog.jpg")
cv2.imshow( "frame",img)
key = cv2.waitKey( 1) & 0xFF
ifkey == ord( "q"):
break
cap.release
cv2.destroyAllWindows
作者介绍:
李秋键 , CSDN 博客专家 , CSDN达人课作者 。 硕士在读于中国矿业大学 , 开发有taptap安卓武侠游戏一部 , vip视频解析 , 文意转换工具 , 写作机器人等项目 , 发表论文若干 , 多次高数竞赛获奖等等 。
源码GitHub地址:
https://github.com/zhilin007/FFA-Net


推荐阅读