一、灰度世界算法
① 算法原理
灰度世界算法以灰度世界假设为基础,该假设认为:对于一幅有着大量色彩变化的图像,R,G,B三个分量的平均值趋于同一灰度值Gray。从物理意义上讲,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为"灰色”。颜色平衡算法将这一假设强制应用于待处理图像,可以从图像中消除环境光的影响,获得原始场景图像。
一般有两种方法确定Gray值
1) 使用固定值,对于8位的图像(0~255)通常取128作为灰度值
2) 计算增益系数,分别计算三通道的平均值avgR,avgG,avgB,则:
Avg=(avgR+avgG+avgB)/3
kr=Avg/avgR , kg=Avg/avgG , kb=Avg/avgB
利用计算出的增益系数,重新计算每个像素值,构成新的图片
② 算法优缺点
这种算法简单快速,但是当图像场景颜色并不丰富时,尤其出现大块单色物体时,该算法常会失效。
③ 算法展示
1 defgrey_world(nimg):2 nimg = nimg.transpose(2, 0, 1).astype(np.uint32)3 avgB =np.average(nimg[0])4 avgG = np.average(nimg[1])5 avgR = np.average(nimg[2])6 7 avg = (avgB + avgG + avgR) / 38 9 nimg[0] = np.minimum(nimg[0] * (avg / avgB), 255)10 nimg[1] = np.minimum(nimg[1] * (avg / avgG), 255)11 nimg[2] = np.minimum(nimg[2] * (avg / avgR), 255)12 return nimg.transpose(1, 2, 0).astype(np.uint8)
① 效果图对比
第一组图片场景颜色丰富,利用灰度世界假设法校正效果明显;第二组图片中颜色相对单一,校正效果也不是很理想;这也就导致了"灰度世界假设算法’无法通用.
二、直方图均衡化
① 算法原理
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果
假设,一张图像的直方图如下图(左)所示,均衡化后,图像直方图如下图(右)显示
② 算法优缺点
直方图均衡化,一般可用于灰度图像的对比增强(如:人脸阴影部位增强);
如果直接对彩色图像R,G,B三通道分别均衡化后再合并,极容易出现颜色不均、失真等问题,所以,一般会将RGB图像转换到YCrCb空间,对Y通道进行均衡化(Y通道代表亮度成分)
③ 算法展示
在python中opencv3提供了能将灰度图直接均衡化的方法:equalizeHist(img),借助这个方法,可以实现彩色图像的均衡化
1 defhisEqulColor(img):2 ycrcb =cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB)3 channels =cv2.split(ycrcb)4 cv2.equalizeHist(channels[0], ch