2、数字图像中的曝光:直方图分析、过曝与欠曝的判定标准、曝光值(EV)计算

聊曝光,不能光靠眼睛看。你想想看,同一张图,在亮屏手机和暗屏显示器上,感觉完全不一样。那怎么客观地判断一张图到底是亮还是暗?

答案是:看直方图。这是数字图像里最基础、也最实用的工具。我做了这么多年图像算法,遇到曝光问题,第一反应就是拉直方图出来看看。

2.1 直方图:图像的“体检报告”

直方图说白了,就是统计图像里每个亮度级别有多少个像素。横轴是亮度值(0到255,8位图),纵轴是像素数量。

核心理解:直方图的形状,直接反映了图像的曝光状态。

举个例子。一张正常的风景照,直方图应该是中间高、两边低,像个山丘。如果山丘整体偏左,说明图像偏暗;偏右,说明偏亮。

我在项目中遇到过一件事。有一次做自动曝光算法,发现手机在逆光场景下总是拍出人脸过暗的背景。后来一查直方图,发现人脸区域的像素全挤在0-50的区间,背景却在150-255。这就是典型的动态范围不足。直方图一眼就看出来了。

直方图的三种典型形态

形态 直方图特征 对应曝光状态
左偏峰 像素集中在0-85区间 欠曝(偏暗)
右偏峰 像素集中在170-255区间 过曝(偏亮)
中间峰 像素集中在85-170区间 正常曝光
双峰/多峰 多个峰值 高动态场景(如逆光)

我的习惯:看直方图时,别只看整体。我会把图像分成9宫格,分别看每个区域的直方图。这样能发现局部过曝或欠曝的问题。

2.2 过曝与欠曝的判定标准

怎么才算过曝?怎么才算欠曝?不能凭感觉。我们需要量化的标准。

2.2.1 基于像素值的判定

最直接的方法:统计像素值在0和255附近的占比。

  • 过曝判定:像素值等于255(纯白)的像素占比超过某个阈值。比如,超过5%就算严重过曝。
  • 欠曝判定:像素值等于0(纯黑)的像素占比超过某个阈值。比如,超过5%就算严重欠曝。

但这里有个坑。我曾经做过一个夜景算法,发现直方图左边堆了一堆0值像素。一开始以为是欠曝,后来仔细一看,是图像里有一块纯黑的背景区域。所以,不能只看全局,要结合场景分析。

避坑指南:我曾经在自动曝光算法里直接用全局像素占比做判定,结果在暗光场景下频繁误触发。后来改成只统计图像中心区域的像素,效果好了很多。因为人眼关注的是主体,不是背景。

2.2.2 基于直方图形状的判定

除了看端点,还要看形状。

  • 过曝特征:直方图右侧出现“断崖”或“堆积”。像素在250-255区间突然增多,说明高光细节丢失。
  • 欠曝特征:直方图左侧出现“断崖”或“堆积”。像素在0-5区间突然增多,说明暗部细节丢失。

我习惯用“直方图宽度”来辅助判断。正常曝光的直方图,宽度应该覆盖大部分亮度区间(比如50-200)。如果宽度很窄,说明对比度低,图像发灰。

2.2.3 量化指标:曝光异常指数

为了算法落地,我们需要一个数值指标。我常用的是:

曝光异常指数 = (过曝像素占比 × 权重1) + (欠曝像素占比 × 权重2)

权重可以根据场景调整。比如,人像场景,欠曝的权重更高,因为人脸暗了不好看。风景场景,过曝的权重更高,因为天空过曝了很难看。

场景 过曝权重 欠曝权重 说明
人像 0.4 0.6 优先保证人脸亮度
风景 0.6 0.4 优先保留高光细节
夜景 0.3 0.7 避免暗部噪声放大

2.3 曝光值(EV)计算

EV是摄影里的概念,但在数字图像处理里同样重要。它把光圈、快门、ISO统一成一个数值,方便我们量化曝光量。

2.3.1 EV的定义

EV的计算公式:

EV = log2(N² / t)

其中:

  • N:光圈值(F数)
  • t:快门速度(秒)

ISO的影响:标准EV是基于ISO 100的。如果ISO变了,需要补偿:

EV_iso = EV_100 + log2(ISO / 100)

说白了,EV每增加1,曝光量翻倍。EV每减少1,曝光量减半。

2.3.2 实际应用:从图像亮度反推EV

在算法里,我们经常需要根据图像的平均亮度,反推当前场景的EV。这样就能知道是应该增加还是减少曝光。

我常用的方法:

  1. 计算图像的平均亮度(Y通道均值)。
  2. 将平均亮度映射到18%灰(标准反射率)。
  3. 根据映射关系,计算当前EV与目标EV的差值。
delta_EV = log2(平均亮度 / 目标亮度)

如果delta_EV > 0,说明图像偏亮,需要减少曝光。反之,需要增加曝光。

我的经验:目标亮度不一定是128(8位图的中值)。我习惯根据场景动态调整。比如,夜景的目标亮度可以设低一些(比如100),避免噪声放大。雪景的目标亮度可以设高一些(比如180),避免雪地发灰。

2.3.3 EV与直方图的结合

EV和直方图是互补的。EV告诉你整体曝光量,直方图告诉你细节分布。

举个例子。一张图EV正常,但直方图显示高光区域有堆积。这说明整体亮度没问题,但局部过曝了。这时候,单纯调整EV没用,需要做局部曝光补偿或HDR融合。

我在做多帧融合算法时,就是先用EV判断整体曝光趋势,再用直方图分析局部细节。两者结合,才能做出准确的曝光决策。

2.4 本章知识体系

下面这张图,把本章的核心逻辑串起来了。你可以看到,从直方图分析到过曝/欠曝判定,再到EV计算,是一条完整的技术链路。

曝光分析知识体系 曝光分析知识体系 曝光状态判定 直方图分析 曝光值(EV)计算 过曝/欠曝判定 左偏/右偏/中间峰 局部区域分析 EV = log2(N²/t) ISO补偿 像素占比阈值 直方图形状分析 三者结合:EV定整体,直方图看细节,判定做决策 最终输出:曝光补偿量或曝光策略