4、基于统计的评价函数:方差函数、熵函数、直方图对比度、拉普拉斯能量函数
聊完了基于梯度的那些评价函数,咱们来看看另一大类——基于统计的方法。这类函数不直接看像素之间的差值,而是从图像整体的统计特性出发,来判断清晰度。说白了,就是问一个问题:这张图的像素分布,到底有多“散”?
我个人觉得,统计类函数在某些场景下比梯度类更鲁棒。比如你拍的是纹理特别少的物体,梯度信息很少,但像素值的统计分布依然能反映出离焦模糊的程度。嗯,咱们一个一个来看。
4.1 方差函数(Variance)
方差函数是最直观的统计评价方法。它的逻辑很简单:图像越清晰,像素值之间的差异就越大,方差就越高。反之,图像越模糊,像素值越趋于平均,方差就越低。
公式长这样:
V = (1 / (M * N)) * Σ Σ (I(x, y) - μ)²
其中 μ 是整幅图像的灰度均值,M、N 是图像尺寸。
我在项目中遇到过一个问题:用方差函数评价一张夜景照片,结果方差特别低,但人眼看其实挺清晰的。为什么?因为夜景整体偏暗,像素值集中在低灰度区域,方差自然小。所以,方差函数对光照变化非常敏感。你想想看,同样的场景,开灯和关灯,方差能差好几倍。
4.2 熵函数(Entropy)
熵这个概念来自信息论。图像熵衡量的是图像中灰度分布的混乱程度。公式是:
E = - Σ p(i) * log₂(p(i))
其中 p(i) 是灰度级 i 出现的概率。
清晰图像的灰度分布更丰富,熵值更高。模糊图像的灰度分布更集中,熵值更低。这个逻辑听起来很完美,对吧?
但实际用起来有个坑。我曾经用熵函数去评价一张有大量平坦区域的图像(比如天空、白墙),结果发现熵值很低,但图像其实是清晰的。为什么会这样?因为平坦区域的灰度分布本来就单一,熵值天然就低。所以,熵函数更适合纹理丰富的场景。
4.3 直方图对比度(Histogram Contrast)
直方图对比度,说白了就是看灰度直方图的“胖瘦”。清晰图像的直方图通常更“宽”,因为像素值分布范围广。模糊图像的直方图更“窄”,像素值向中间集中。
常用的计算方式有两种:
- 直方图范围:最大灰度值 - 最小灰度值
- 直方图标准差:直接计算灰度值的标准差
我个人习惯用直方图标准差,因为它比范围更稳定。为什么?因为直方图范围容易受单个噪声点影响。比如一个像素因为传感器噪声变成了255,范围就拉大了,但标准差不会这么敏感。
| 评价指标 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 直方图范围 | 计算简单,速度快 | 易受噪声干扰 | 快速粗调焦 |
| 直方图标准差 | 抗噪性好,稳定 | 计算量稍大 | 精调焦、高精度场景 |
4.4 拉普拉斯能量函数(Laplacian Energy)
这个函数有点特殊。它虽然叫“能量函数”,但本质上还是基于二阶梯度。不过因为它用的是统计的方式汇总能量值,所以我把它归到统计类里。
公式:
E = Σ Σ (∇²I(x, y))²
其中 ∇²I 是拉普拉斯算子对图像卷积的结果。拉普拉斯算子对边缘和细节非常敏感,清晰图像的拉普拉斯响应值大,能量高。
我记得有一次做显微镜自动对焦,试了好几种评价函数都不理想。最后换成拉普拉斯能量函数,效果立竿见影。为什么?因为显微镜图像通常有大量细胞边缘和结构细节,拉普拉斯算子能很好地捕捉这些高频信息。
4.5 四种函数的对比与选择
说了这么多,到底怎么选?我整理了一个对比表,方便你快速决策:
| 函数名称 | 计算速度 | 抗噪性 | 光照敏感度 | 纹理依赖度 | 推荐场景 |
|---|---|---|---|---|---|
| 方差函数 | 快 | 中 | 高 | 低 | 固定光源、工业检测 |
| 熵函数 | 中 | 高 | 低 | 高 | 纹理丰富、自然场景 |
| 直方图对比度 | 快 | 中 | 中 | 低 | 快速粗调焦 |
| 拉普拉斯能量 | 慢 | 低 | 中 | 高 | 高精度、显微镜、医疗影像 |
你想想看,没有万能的评价函数。关键是根据你的应用场景,选最合适的那个。如果拿不准,我建议你做一个简单的实验:用几种函数跑一遍你的数据,看看哪个曲线的单峰性最好、最平滑。
最后说一句,统计类函数和梯度类函数不是互斥的。我在实际项目中经常把它们组合使用。比如先用直方图对比度做粗调焦,快速找到大致位置,再用拉普拉斯能量做精调焦。这样既保证了速度,又保证了精度。