图像自动去暗角算法

暗角图像是一种在现实中较为常见的图像,其主要特征就是在图像四个角有较为显著的亮度下降,比如下面两幅图:


在2014年Y.Zheng等人的《Single image vignetting correction》以及同样有他们撰写的论文《Single image vignetting correction using radial gradient symmetry》有讲这方面的算法,不过其实现的复杂度较高,即使能编程实现,速度估计也很慢,其实用性就不高了。

另一篇名为《Single-Image Vignetting Correction by Constrained Minimization of log-Intensity Entropy》的论文提供了相对简单的算法。该论文的核心思想为:

第一:

去暗角可以说是阴影校正的一种特例,而将整副图像的熵最小化也被证明为进行阴影校正的一种有效方法,但是普通的熵在优化过程中会优化到局部最优的。因此论文中提出了一种对数熵的概念(Log-Intensity Entropy),论文中用数据做了说明,假设一副普通正常的图像其直方图是单峰分布,那么如果这幅图像有暗角,其直方图必然会存在另外一个低明度的分布,如下图所示:


我们校正暗角的过程就是使低明度的分布向原来的正常明度靠近,由上图第一行的数据可以看到,普通的熵计算直到两个直方图有部分重叠的时候熵才会下降,之前熵一直都是增加的,而对数熵则在没有重叠前至少是保持不增的,因此能够更好的获取全局最优解。

论文提出的对数熵的实现:

1.1 将亮度进行对数映射,公式为:


就是将[0,255]内的像素值映射到[0, N-1]内,但不是线性映射,而是基于对数关系的映射,通常N就是取256,这样映射后的像素范围还是[0,255],但是注意这里的i(L)已经是浮点数了。我们绘制出N等于256时上式的曲线:


由上图可见,这种操作实际上把图像整体调亮了。由于映射后的色阶已经是浮点数了,因此,直方图信息的统计就必须换种方式了,论文给出的公式为:


公式很复杂, 其实就是有点类似线性插值那种意思,不认识了那两个数学符号了,就是向上取整和向下取整。这样的对数熵直方图信息会由于巨大的色阶调整,导致很多色阶是没有直方图信息的,一般可以对这个直方图信息进行下高斯平滑的,得到新的直方图。

最后图像的对数熵,计算方法如下:


第二:

一个暗角图像亮度下降的关系式:


其中,x和y是图像每一点的坐标,而则表示暗角的中心位置,他们和a、b、c均为未知量。我们可以看到,当r=0时,校正系数为1,即无需校正。当r=1时,校正系数为1+a+b+c。

那么经过暗角校正后的图像就为:


论文总结了满足下述关系的a,b,c:


第三:

上面描述了校正暗角图像的公式(带参数)以及评价一副图像是否有暗角的指标,那么最后一步就是用这个指标来确定公式的参数。我们未知的参数有5个,即a、b、c以及暗角的中心点。解这种受限的最优问题是有专门的算法的,也是非常计算耗时的。因此,作者提出了一种快速的算法:Hill climbing with rejection of invalid solutions.

我稍微看了下这个算法,确实是个不错的想法,不过我并没有去实践,我采用了另外一种粗略的优化方式。
首先,很明显,为了计算这些最优参数,我们没有必要直接在原图大小上直接计算,这点在原论文也有说明,我们即使把他们的宽高分别缩小到原图的1/5甚至1/10计算出来的结果也不会有太大的差异,而这些参数的差异对最终的的结果影响也不大,但是计算量就能减少到原来的1/25和1/100。
接着,我们观察到a、b以及c的最优结果范围一般都在-2和2之间,并且从g的计算公式中知道,由于r是属于0和1之间的正数,r^2, r^4, r^6在数值递减的非常快,比如r=0.8,则三者对应的结果就分别为0.64、0.4096、0.2621,因此,a和b及c在公式中的对最后结果的影响也依次越来越小。
那么,我们可以参考以前的对比度保留之彩色图像去色算法---基础算法也可以上档次一文中的优化方式,把a, b ,c 三个参数分别在[-2,2]之间离散化,考虑到参数稍微差异不会对结果有太大的影响,以及a、b、c的重要性,我们可以设置a、b、c三者的离散间隔分别为0.2、0.3、0.4,然后综合上述判断a、b、c是否为合理组合的函数,离散取样的计算量组合大概有300种可能,对小图计算着300种可能性的耗时是完全可以接受的,甚至考虑极端一点,把c的计算放到循环外侧,即C取固定值0,然后计算出优选的a和b值后,在计算C值。
上述计算过程并未考虑暗角中心点的范围,我们是固定把暗角的中心点放置在图像的正中心位置的,即 (Width/2, Height /2),实际上,对于大部分拍摄的图来说,暗角就是位于中心位置的,因此这种假设也无可厚非,因为暗角中心计算的增加必然会严重增加计算量, 为了求出暗角中心的合理位置,我们在计算出上述a、b、c后,在小图中以一定步长按照公式计算出粗略的中心位置,再放大到原图中去。
计算出上述a、b、c以及中心点后,就可以再次按照校正公式来进行校正了,注意暗角的影响对每个通道都是等同的,因此,每个通道都应该乘以相同的值。
下面贴出一些用论文中的算法处理的结果图:




  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值