关于图像对比度【5】——局部自适应对比度调整

关于图像对比度【5】——局部自适应对比度调整

之前说的对比度都是对整幅图像来说的,在进行对比度调整的时候,也是对整幅图像使用了相同的参数,比如用线性变换的方法来做对比度调整,即y=kx+b,对于所有的像素点k和b的值都是相同的。

但是有时候,显然这不满足我们的需求,有时候图像有暗区和亮区,从整幅图像来说,亮暗对比很明显,似乎图像的对比度很好,但是这不是我们想要的结果。因为在图像的暗区,一些细节我们看不清(或者在亮区一些细节看不清)。什么时候会遇到这种情况呢?比如逆光拍摄的时候,像下面这张,(当然如果你想要的就是这种剪影的效果那这种就很好):
关于图像对比度【5】——局部自适应对比度调整_第1张图片

上面这张图像里面,比如一些头发的细节、脸部特征的细节都看不清楚,因为太暗了。

但是,如果我对它y=kx+b,k>1,的话,很显然阳光照过来的比较亮的区域就要过曝了。

所以很自然的想法就是,我希望暗区域k值>1,亮区域k值<1。

怎么让程序自己去确定k值就是key了。首先程序要评估像素点周围的区域亮度,人为的设定一个暗区域阈值和一个亮区域阈值,当我计算出来的区域亮度小于暗区阈值的时候,我就认为像素出在暗区域,因此k值要大于1,这里简单的将k值定义为(暗区阈值/区域亮度)。亮区同理。另外把b值全都定义为0,再然后就是线性变换了,不多说。

看一下效果:
关于图像对比度【5】——局部自适应对比度调整_第2张图片

很显然这个图里面亮的区域不如原图那么亮,暗的区域也不如原图那么暗,一些原来看不清的细节就出来了。

代码在这里:
https://github.com/jingweizhanghuai/image/blob/master/adapt_contrast.c

你可能感兴趣的:(图像处理)