#灵感# 在短暂的高通平台调试中,很看重直方图调整的理解。后来其它平台,不怎么调整这个了。但还是记录一下。 我个人还是倾向 招式简单,但应用到极致。
绝大部分内容来自:刘斯宁,Image Enhancement - CLAHE - 知乎 (zhihu.com)
穿插个人的部分理解。
目录
英文解释:
A histogram is a type of graph that has wide applications in statistics. Histograms provide a visual interpretation of numerical data by indicating the number of data points that lie within a range of values. These ranges of values are called classes or bins. The frequency of the data that falls in each class is depicted by the use of a bar.
翻译过来就是,直方图是统计学中广泛使用的一类图表,它以可视化的形式呈现统计数据,能够显示数据点在给定的数值区间内的分布情况。
以常用的8位精度图像为例,直方图的X轴为0~255,共256个桶,每个桶刚好覆盖1个像素值,直方图的Y轴表示每个桶盛纳了多少个像素。
对比度:
图像对比度指一幅图像中最亮的白和最暗的黑之间灰度反差的大小。差异越大代表对比越大,否则对比越小。一种常用的定量度量方法是Michelson对比度,定义为
当一幅图像最白和最黑像素灰度都是128时,图像对比度最低,C=0。
当一幅图像最白像素灰度=255,最黑像素灰度=0时,图像对比度最高,C=1.0。
当一幅图像最白像素灰度=140,最黑像素灰度=80时,图像对比度C=0.27。-----自己算个例子√
当一幅图像最白像素灰度=140,最黑像素灰度=60时,图像对比度C=0.4。
--------------------所以最白和最黑的差距越大时,图像对比度会越大。
图像的直方图集中在中间的几个桶,图像看起来灰蒙蒙的,英语中使用dull(阴沉的;低沉的;无光泽的;萧条的;隐约的;不鲜明的;隐隐约约的;不清晰的;令人生厌的;不明亮的) 描述这种效果。
相反,如果黑白像素的跨度较大,则图像富有通透感,英语中使用clarity(清楚;(画面、物质或声音的)清晰,清澈;)描述这种效果。
简单---对比度拉伸:
将一个灰蒙蒙的图像,拉伸直方图,使画面更通透。
基本思想是用一个下图所示分段线性函数(Piece-Wise Linear, PWL Function)对像素亮度进行映射。------------线性的、分段、3个函数
局限:对比度拉伸适合处理低动态(LDR)图像,这类图像的特点是直方图的跨度较小,存在向两极拉伸的空间。对于高动态(HDR)图像,直方图跨度已经很大,对比度拉伸没有操作的空间,
升级---直方图均衡化 HE:
均衡化被认为是提升图像对比度最为有效的方法,它的基本思想是用数学方法重新调整像素的亮度分布(和拉伸差不多),使调整后的直方图具有最大的动态范围,每个桶(bin/bucket)盛纳的像素数量几乎相等。------这样就会使图像的灰度级增加,从而可达到图像对比度整体增强的效果。!
直方图均衡的方法是dy=p(x)dx,意义是将源直方图dx宽度所盛纳的p(x)dx个像素映射到目标直方图的dy宽度中,映射前后像素数量不变,密度发生变化,分布更均匀。如下图所示。
右侧图的中部、亮部区域的像素分布更加均匀。
对直方图拉伸和均衡两种方法的效果做比较:
-----------------(此图直方图均衡后,好像效果也没那么好)
直方图均衡的局限:
当原图的直方图比较集中时,这意味着原图实际上只出现了少数几个颜色值,如果对原图进行拉伸操作,则这些颜色之间的距离就会变大,直方图上留下了更多空洞,这样,原本比较接近的颜色在拉伸后的图上会出现显著的差异,图像出现颜色分层现象(banding),或者叫分色现象。
------------右图出现很多异常颜色
对齐问题:
直方图均衡的一个重要特征是把原图中最亮的像素对齐到预设的最大值(比如8bit图是255)。当原图中颜色比较丰富时,这个操作一般问题不大。但是当原图中所有像素都是一个值(例如8,这对应一幅纯黑的图像,可能是拍摄于夜间),则均衡之后所有像素都被映射到255,图像变成了纯白的。于是,直方图均衡相当于无脑改变了原图的色调。----------比如下图的映射,改变了色调。
另外还会产生噪声问题,如果一个区域的像素分布大体是均匀的,但是图像中带有一些噪声,则HE变换函数会把原图中很窄的x值分布映射到整个y值空间,这同时也就放大了原图中的噪声。
改进---自适应直方图均衡化(AHE):
将图像分成若干个区域(tile),比如8x8=64个tile,直方图均衡的基本单位不再是整个图像,而是对每个小区域做直方图均衡。AHE 更适合于用来改善图像的局部对比度,以及增强图像边缘信息,但是并没有解决直方图均衡会放大图像噪声的问题。
-------------每一小块图像统计一个各自专属的分布函数,这样有利于更好地处理图像数据的局部细节,但是由于图像被等分为几块分别处理,这会导致算法的时间复杂度提高不少,降低了图像处理效率。 并且还有另一个缺点,由于AHE算法是对每个像素块独立进行处理映射,也就是块与块之间并没有做一个过渡处理,这样会导致一个问题现象,那就是图像呈现出来的效果就像是被切割成了几个块。
限制对比度+自适应直方图均衡 CL AHE:
削峰填谷,把我们认为多余的概率平均分摊给其它像素,使亮度增益相对均匀地散布到所有像素上,而不是让某一个颜色突然地对齐到最大亮度。【分析那个黑图像被对齐到全白的例子。如果用CLAHE来处理这个黑图,我们可以拍脑袋规定直方图每个bin的频数不能超过总像素数的50%,超过的部分要被均摊到各个bin中。】
以下图为例,由于CLAHE 人为削减了最亮像素的频数(比如不超过10%),所以CLAHE图的亮区得到了抑制,而暗区的亮度得到了明显的提升。
----------------------------------------------无脑的HE均衡化。-------------分区均衡化 + 增益分布均匀。
original histogram HE histogram CLAHE histogram
高通平台的直方图调整---好像不一样:
按下述取target 的方案,高通的直方图调整是整体的亮度,不能兼顾:亮部压制+ 暗处提亮。
另个平台的直方图-----只是参与亮度计算:
将直方图划分区域,判断画面过曝情况,然后进行target 调整。也无法做到亮处+暗处的调整。
通过high level 计算出高亮的highCut, highCut越大则表示过曝区越多,则降低曝光,
直到把highCut收敛到highCutTarget结束。