一种强化的基于局部直方图裁剪均衡化的对比度调节算法。

  在很久前实现对比度受限的自适应直方图均衡化时,就曾经想过对该算法进行一定程度的扩展,之后使用自动对比度和自动色阶代替直方图均衡化也提出了新的算法,也达到了不错的效果。本文进一步对该算法进行一定程度的扩展和补充优化。

一、本文算法的概述

  根据选取的优化的水平和垂直网格数,将图像切分成一个一个的子块,然后统计每个子块的直方图信息,并和原图整体的直方图信息进行某种混合,对于彩色图像,为了避免不同通道之间处理后变化过于不协调,还增加了各通道直方图与亮度通道直方图的信息合成,然后对合成后的直方图进行直方图裁剪和均衡化的,获取各子块新的映射直方图,为了避免新的映射表中的数据有较大的奇点或噪音,对映射表的数据进行多点取样,然后使用样条插值算法对取样点进行插值,或者对新的映射表进行一定程度的高斯模糊,得到一张较为平滑的映射表。最后使用类似CLAHE算法中的双线性插值对每个子块之间的映射表进行插值得到新的像素值。本方法计算量小,速度很快,对映射表进行平滑插值或高斯模糊能有效的抑制对比度调整时产生的噪声,防止了信息的过度放大造成图片失真,是一种高效并且效果突出的对比度增强算法。

二、算法过程详解

  1、水平和垂直网格数的确定

  类似于CALHE算法,对网格的合理选取也会对本算法的结果产生重要的影响,过多的网格数会使得计算量显著加大,过少的网格数使得结果趋于接近整体的直方图均衡化,一般情况下,可选择8*8个网格,这里可以通过以下原则来简单的做个优化:图像的亮度的均方差越小,即整幅图像的明暗比较一致,使用较多的网格数,比如8*8,否则使用较少的网格,比如4*4。这是因为当图像明暗较为一致时,各小块的直方图数据差异不会很大,而如果明暗不一致,选择较小的块,各块之间的直方图信息差异可能很大,会造成插值时出现明显的瑕疵。

    2、按规定的网格数划分图像,并获取每块的直方图信息HistB,HistG,HistR。

  3、获取全图的直方图数据HistgramB,HistgramG,HistgramR以及亮度直方图HistgramL。

       其中亮度定义为:  Lightness = (R*19595 + G*38469 + B*7472) >> 16

    4、对子块直方图和全局直方图进行融合,如下代码所示:

HistB[Index] = (HistB[Index] * Adaptation + (100 - Adaptation) * HistgramB[Index]) / 100;
HistG[Index] = (HistG[Index] * Adaptation + (100 - Adaptation) * HistgramG[Index]) / 100;
HistR[Index] = (HistR[Index] * Adaptation + (100 - Adaptation) * HistgramR[Index]) / 100;
HistL[Index] = (HistL[Index] * Adaptation + (100 - Adaptation) * HistgramL[Index]) / 100;

  其中Adaptation为融合因子,其有效范围为[0,100],当取值越小时,全局直方图其主导作用,效果越接近普通的直方图均衡。

  5、对上述融合后的结果再次和亮度直方图进行融合,融合过程如下所示:

HistB[Index] = (HistB[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;
HistG[Index] = (HistG[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;
HistR[Index] = (HistR[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;

 其中Correction为颜色校正因子,其有效范围为[0,100],当取值越大时,各通道之间越独立,效果越接近普通的直方图均衡。

  上述代码中Index表示直方图色阶的索引范围,有效值[0,Bins – 1],Bins为直方图的数量,8位时为256。

  6、按照CALHE的方式对直方图进行裁剪,之后对裁剪的直方图进行均衡化得到每个小块的映射表。

  7、局部均衡化后映射表的平滑。

    1)  将映射表的 Bins取K等份,得到每等份数据对应的映射表值,构成K个二维坐标点序列,亦可以根据直方图的累计数据,把累计数据平均分为K等分,得到K个二维序列点。

    2)根据K个二维坐标点,使用样条插值算法拟合出一条过各个取样点的平滑映射曲线。

    3)在平滑曲线表中取0至于Bins中各色阶对应的插值结果,作为新的映射表结果。

     对于Bins =256的图像,K值建议可取32左右。

    或者另外一种处理方式就是对映射表进行一维方向的均值或者高斯平滑,平滑窗口可选WindowSize = 7左右。

  这种平滑可以带来一定的好处,特别是对于图像变换比较平缓的区域,能够在一定程度上减弱由于增强带来的色块感觉,而且这种方式推广到所有基于直方图增强技术的算法中。

 8、按照CLAHE算法的过程对每个小块进行双线性插值得到最终的增强效果,当然对第一行、第一列、最后一行、最后一列的子块靠近图像边缘的那一半都只使用映射表单个方向的线性插值,而这些子块的其他部分以及其他子块均使用映射表双线性插值获得最终结果。

       如果输入图像是灰度图,由于只有一个通道,则本算法中的Correction在此场景中是可舍弃的。

  整个过程的流程框图如下所示:

     三、测试结果

下图为未经过处理的原始图像,可见原始图中对比度很差,图像的细节信息很少,图像饱和度也很差。右侧是使用本算法后处理的效果图,处理后图像饱和度自然,色彩鲜艳,隐藏在原图右侧的一些不可易见的细节也能清楚的展示出。

                  原始图像

                    Adaptation = 50,Correction = 50, ClipLimit = 20时的效果

              Adaptation = 0,Correction = 50, ClipLimit = 20时的效果

                                        Adaptation = 100,Correction = 50, ClipLimit = 20时的效果

          Adaptation = 50,Correction = 0, ClipLimit = 20时的效果

              Adaptation = 50,Correction = 100, ClipLimit = 20时的效果

     下面作图是另外一副未经处理的图像,这副图像信息较为完整,色彩也较为丰富,但是经过本算法处理后,得到的结果图(右图)则显得更为惊艳和夺目,因此对于正常的图像,本算法也具有较强的实用性。

  特别强调,该算法不适宜处理人脸图像。

       该算法难以使用SSE优化,我在考虑是否还有其他方式优化。速度上1080P的彩图大约30ms可以搞定。

       测试工程的地址:http://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar

      写博不易,欢迎点赞或者打赏。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能

CNN入门讲解:什么是采样层

各位看官老爷们 好久不见 这里是波波给大家带来的CNN卷积神经网络入门讲解 每周我将给大家带来绝对原创,脑洞大开,幽默风趣的深度学习知识点入门讲解 希望大家多多...

2488
来自专栏SIGAI学习与实践平台

视觉多目标跟踪算法综述(上)-附开源代码下载链接整理

目标跟踪是机器视觉中一类被广为研究的重要问题,分为单目标跟踪与多目标跟踪。前者跟踪视频画面中的单个目标,后者则同时跟踪视频画面中的多个目标,得到这些目标的运动轨...

2872
来自专栏琦小虾的Binary

Retinex图像增强算法(SSR, MSR, MSRCR)详解及其OpenCV源码

Retinex图像增强算法(SSR, MSR, MSRCR)详解及其OpenCV源码 Retinex是一种常用的建立在科学实验和科学分析基础上的图像增强方法,它...

9095
来自专栏和蔼的张星的图像处理专栏

数字图像处理:

冈萨里斯数字图像处理的那本书的一小点点东西,数字图像处理其实是学过了的,这里我只是把这本书完整看一遍,也是略略的看,查漏补缺,前两张略过了,从第三章开始。

1464
来自专栏应用案例

从传统方法到深度学习,人脸关键点检测方法综述

人脸关键点检测是人脸识别和分析领域中的关键一步,它是诸如自动人脸识别、表情分析、三维人脸重建及三维动画等其它人脸相关问题的前提和突破口。近些年来,深度学习方法由...

7938
来自专栏SIGAI学习与实践平台

视觉多目标跟踪算法综述(上)-附开源代码下载链接整理

目标跟踪是机器视觉中一类被广为研究的重要问题,分为单目标跟踪与多目标跟踪。前者跟踪视频画面中的单个目标,后者则同时跟踪视频画面中的多个目标,得到这些目标的运动轨...

2943
来自专栏磐创AI技术团队的专栏

深度学习之视频人脸识别系列三:人脸表征

【磐创AI导读】本文是深度学习之视频人脸识别系列的第三篇文章,介绍人脸表征相关算法和论文综述。在本系列第一篇文章里我们介绍了人脸识别领域的一些基本概念,分析了深...

583
来自专栏梦里茶室

TensorFlow 深度学习笔记 卷积神经网络

Convolutional Networks deep dive into images and convolutional models Convnet Ba...

1948
来自专栏机器学习算法与理论

基于机器学习的疲劳检测

首先,总结一下检测某一特征的方法: (1)模板匹配计算当前帧与模板相同位置处的灰度值或颜色值的差值,通过特定的距离公式来计算匹配程度。 稳定可靠与光照和姿势无...

50410
来自专栏新智元

不可错过的 GAN 资源:教程、视频、代码实现、89 篇论文下载

【新智元导读】这是一份生成对抗(神经)网络的重要论文以及其他资源的列表,由 Holger Caesar 整理,包括重要的 workshops,教程和博客,按主题...

66210

扫码关注云+社区