文章插图
2.代码实现
由于OpenCV中暂时没有ACE算法包,下面的代码是借鉴“zmshy2128”老师的文章,修改实现的彩色直方图均衡化处理 。后面有机会作者详细分析其代码实现过程 。
- 自动色彩均衡(ACE)快速算法 - zmshy2128老师
# -*- coding: utf-8 -*- # By:Eastmount CSDN 2021-03-12 # 惨zmshy2128老师文章并修改成Python3代码 import cv2 import numpy as np import math import matplotlib.pyplot as plt #线性拉伸处理 #去掉最大最小0.5%的像素值 线性拉伸至[0,1] def stretchImage(data, s=0.005, bins = 2000): ht = np.histogram(data, bins); d = np.cumsum(ht[0])/float(data.size) lmin = 0; lmax=bins-1 while lmin=s: break lmin+=1 while lmax>=0: if d[lmax]<=1-s: break lmax-=1 return np.clip((data-ht[1][lmin])/(ht[1][lmax]-ht[1][lmin]), 0,1) #根据半径计算权重参数矩阵 g_para = {} def getPara(radius = 5): global g_para m = g_para.get(radius, None) if m is not None: return m size = radius*2+1 m = np.zeros((size, size)) for h in range(-radius, radius+1): for w in range(-radius, radius+1): if h==0 and w==0: continue m[radius+h, radius+w] = 1.0/math.sqrt(h**2+w**2) m /= m.sum() g_para[radius] = m return m #常规的ACE实现 def zmIce(I, ratio=4, radius=300): para = getPara(radius) height,width = I.shape zh = [] zw = [] n = 0 while n < radius: zh.Append(0) zw.append(0) n += 1 for n in range(height): zh.append(n) for n in range(width): zw.append(n) n = 0 while n < radius: zh.append(height-1) zw.append(width-1) n += 1 #print(zh) #print(zw) Z = I[np.ix_(zh, zw)] res = np.zeros(I.shape) for h in range(radius*2+1): for w in range(radius*2+1): if para[h][w] == 0: continue res += (para[h][w] * np.clip((I-Z[h:h+height, w:w+width])*ratio, -1, 1)) return res #单通道ACE快速增强实现 def zmIceFast(I, ratio, radius): print(I) height, width = I.shape[:2] if min(height, width) <=2: return np.zeros(I.shape)+0.5 Rs = cv2.resize(I, (int((width+1)/2), int((height+1)/2))) Rf = zmIceFast(Rs, ratio, radius) #递归调用 Rf = cv2.resize(Rf, (width, height)) Rs = cv2.resize(Rs, (width, height)) return Rf+zmIce(I,ratio, radius)-zmIce(Rs,ratio,radius) #rgb三通道分别增强 ratio是对比度增强因子 radius是卷积模板半径 def zmIceColor(I, ratio=4, radius=3): res = np.zeros(I.shape) for k in range(3): res[:,:,k] = stretchImage(zmIceFast(I[:,:,k], ratio, radius)) return res #主函数 if __name__ == '__main__': img = cv2.imread('car.png') res = zmIceColor(img/255.0)*255 cv2.imwrite('car-Ice.jpg', res)
运行结果如图所示,ACE算法能有效进行图像去雾处理,实现图像的细节增强 。
文章插图
文章插图
最后是目标检测去雾和女神去雾的效果,哈哈,继续加油!
文章插图
文章插图
三.暗通道先验去雾算法
该算法是计算机视觉领域何恺明大佬于2009年提出的图像去雾经典算法,并获取当年CVPR最佳论文 。论文题目为《Single Image Haze Removal Using Dark Channel Prior》 。下图是大佬的百科简介,是真的厉害,值得我们大家学习 。
- 2003年5月,何恺明拿到保送清华的资格,是当年执信中学唯一保送上清华大学的学生;高考结果出炉以后,何恺明获得满分900分的成绩,成为当年广东省9位满分状元之一 。
- 2009年,何恺明成为首获计算机视觉领域三大国际会议之一CVPR“最佳论文奖”的中国学者 。
- 在2015年的ImageNet图像识别大赛中,何恺明和他的团队用“图像识别深度差残学习”系统,击败谷歌、英特尔、高通等业界团队,荣获第一 。
- 何恺明作为第一作者获得了CVPR 2009,CVPR 2016和ICCV 2017(Marr Prize)的最佳论文奖,并获得了ICCV 2017最佳学生论文奖 。
- 2018年,第31届计算机视觉和模式识别大会(Conference on Computer Vision and Pattern Recognition, CVPR)在美国盐湖城召开,何恺明获得本届大会的PAMI年轻学者奖 。
推荐阅读
- python中非常好用的图像处理库
- 招聘|一线访谈丨2022职场突围记:这一年他们以退为进
- 东南三菱蓝瑟汽车;东南汽车被三菱“抛弃”,福州交投揽下25%股份丨汽车产经?
- Python面向对象详解
- 含免注册链接 用Python实现ChatGPT
- Python文件读写技巧
- 护肤品|海乐集焕颜乳霜丨美国小众护肤牌子
- kite的英文怎么读音 python kite 安装
- 县委大院|终评丨《县委大院》好就好在,始终闪耀着实事求是的精神光芒
- 翡翠|?翡翠丨中千入手的大马坎翡翠原石,巧色巧雕齐天大圣,意境十足!