博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
人脸光照调整之Gamma校正
阅读量:5886 次
发布时间:2019-06-19

本文共 1716 字,大约阅读时间需要 5 分钟。

  人脸光照处理的理想状态是,在不损失图像内容的前提下,保持图像在各种环境下的图像光照一致。而像之前提到过的Gabor虽然能保持较好的光照统一性,但会造成一部分的低频信息丢失,另外的DCT变换,不能很好适应环境光的变化。所以,在实际使用中,往往不能把光照处理的压力都放在后期算法处理上,在摄像头采集时就需要对环境光做一定的过滤。比如近红外图像,采集时去除大多可见光对图像内容的影响,在此基础上再进行软件处理,往往能达到生产上的要求。

  1 传统Gamma校正及改进

  传统Gamma校正算法具有较好的光照调整效果,但是由于其容易造成校正过度的原因,因而使用范围受到限制。正如图1和2所示,Gamma函数容易对图像灰度比较“正常”的区域也做了调整,会产生失真的想象。

                

                                图传统Gamma校正曲线       图2 经传统Gamma函数校正后的灰度分布

  

  传统方法只是简单的将低灰度区域调高,高灰度区域调低,调节方式过于简单。

  改进后的校正曲线和灰度分部曲线:

           图3 Gamma曲线       图4 Gamma函数校正后的灰度

  校正效果:

              

    图5 原始图像                  图6 校正后图像

  

  2 人脸光照归一化

  上面效果虽然较好,但是应用到人脸识别当中,还需要做些调整。因为,人脸处在不同环境下,虽然有过滤片作用,但是还是会有较大差别。因此,可以采用阶梯式处理方法,一步步将不同情况下的人脸光照调整一致。另外,改进后的Gamma曲线控制参数有较多个,这里可以采用累积直方图来判断人脸光照强度,然后设计合适的参数进行调整。具体处理步骤如下:

 

  1. 由于CMOS自身噪声的影响,边缘部分的灰度扰动较大,因此对原始图像做一次3*3大小的均值滤波,增强后续处理的稳定性;
  2. 将原始图像的均值调为0,方差调为1;
  3. 根据累计直方图分布特点初步判断当前人脸图像属于高光还是低光照类型,并根据相应类型做灰度的初步微调;
  4. 最后根据累计直方图的分布,确定Gamma校正的各个参数大小,对图像做Gamma校正。

  第三步中的微调一般分为两类:光照过暗和光照过强。过暗时采用如下公式变换:

  过强时可采用如下公式变换:

  分别贴两组图显示下“微调”效果:

        

图7 亮度过暗图像调整  

   

图8 亮度过亮图像调整

  3 改进后的校正效果

  我们对同一人脸在不同光照下分别采集,然后用改进的Gamma对其进行校正:

 

图9 不同光照下的人脸及Gamma校正结果

  提取图像的梯度、亮度、标准差、对比度、熵等信息,综合来对上述原始图像和Gamma处理后的图像进行质量评价,从结果上可以看出,Gamma校正后的图像质量更好,而且质量基本趋于一致,也符合表1中所示的相同位置灰度差异很小的结果。

干扰光距头模距离

20cm

30cm

35cm

无干扰光

图像质量评价

Gamma

42.064

42.1036

40.1766

42.3888

原始图像

30.1077

30.298

18.3288

9.74179

表1 图像质量评价比较

  4 总结

  从以上效果可以发现,改进后Gamma校正的难点是Gamma校正参数的确定,其优点是在采用相同参数的情况下,其校正的灰度变化是相等的。加入“微调”可以减小不同Gamma参数对结果的影响权重,从而使得人脸图像的灰度更趋于稳定。作者采用OPENCV中的SURF方法(效果如图10所示),分别在不同环境下的人脸相同位置取点的灰度,发现本系统的Gamma校正可以将这种灰度差异减小到6~10个灰度级以内,效果如图11和图12所示。

图10 不同图像之间的配准

图11 各采样点灰度分布图(原始图像)

 

图12 各采样点灰度分布图(Gamma校正图像)

 

  参考文献:  

  Yihua Shi,Jinfeng Yang. REDUCING ILLUMINATION BASED ON NONLINEAR GAMMA CORRECTION.IEEE 2007.

转载于:https://www.cnblogs.com/ImageVision/archive/2012/04/16/2452671.html

你可能感兴趣的文章
动态SQL实现与注意事项(有返回值与无返回值动态SQL 实现)
查看>>
java struts2 debug
查看>>
解析 PHP 中 session 的实现原理以及大网站应用应该注意的问题
查看>>
[转].net mvc + vuejs 的项目结构
查看>>
Centos7安装Redis
查看>>
简单够用的设计
查看>>
javascript权威指南--学习笔记
查看>>
梦断代码阅读笔记02
查看>>
git和tortoisegit下载
查看>>
53. Maximum Subarray
查看>>
flask踩坑和排坑记录
查看>>
iOS UITableView 微信页面
查看>>
得到一定范围内的随机数
查看>>
使用Nodejs获取博客园博客数据并处理转发
查看>>
2003终端服务器授权,120天试用期限制
查看>>
springboot项目创建(myeclipse2017)
查看>>
Auto-encoder 在异常检测中的应用
查看>>
C#委托的介绍(delegate、Action、Func、predicate)
查看>>
mysql 中判断表是否存在 以及表存在则删除
查看>>
StringBuffer
查看>>