python白平衡-光照问题之常见算法比较(附Python代码)

一、灰度世界算法

① 算法原理

灰度世界算法以灰度世界假设为基础,该假设认为:对于一幅有着大量色彩变化的图像,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)

① 效果图对比

75922-20180531215254573-1725870945.png

75922-20180531215311008-2140942169.png

75922-20180531215326122-763090216.png

75922-20180531215359363-327295995.png

第一组图片场景颜色丰富,利用灰度世界假设法校正效果明显;第二组图片中颜色相对单一,校正效果也不是很理想;这也就导致了"灰度世界假设算法’无法通用.

二、直方图均衡化

① 算法原理

直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果

假设,一张图像的直方图如下图(左)所示,均衡化后,图像直方图如下图(右)显示

75922-20180531215538850-789319893.png

75922-20180531215552486-1507651717.png

② 算法优缺点

直方图均衡化,一般可用于灰度图像的对比增强(如:人脸阴影部位增强);

如果直接对彩色图像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

  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值