1、对焦评价函数概述

大家好,我是老张。做机器视觉这些年,我调试过几十套自动对焦系统。说实话,最让我头疼的往往不是算法本身,而是那个看似简单的评价函数选型。选对了,对焦又快又准;选错了,嗯,那画面太美我不敢看。

今天咱们先聊聊基础——什么是自动对焦,评价函数到底在干什么,以及市面上常见的函数都分哪些类。

1.1 什么是自动对焦

自动对焦,说白了就是让镜头自己找到最清晰的那个位置。你想想看,手动对焦时我们拧镜头,眼睛盯着画面,找到最锐利的那一点。自动对焦就是把这件事交给算法来做。

核心流程其实就三步:

  1. 移动镜头到某个位置
  2. 采集图像并计算清晰度得分
  3. 比较得分,找到得分最高的位置

我在项目中遇到过一种情况:客户说他们的对焦系统总是来回震荡,找不到稳定点。后来一查,是评价函数在平坦区域产生了多个局部峰值。这就是典型的函数选型问题。

核心要点:自动对焦的本质是一个搜索问题——在镜头行程范围内,找到使评价函数值最大的位置。

1.2 对焦评价函数的核心作用

评价函数就是一把尺子。它要量化一幅图像的清晰程度。好的评价函数,应该满足几个条件:

  • 单峰性:在正确对焦位置只有一个最大值
  • 灵敏度高:稍微离焦,得分就明显下降
  • 抗噪性强:不会因为一点点噪声就乱跳
  • 计算快:毕竟要实时处理

我记得有一次做工业检测项目,用了最简单的灰度方差函数。结果在低光照条件下,函数值波动特别大,对焦总是偏一点。后来换成基于梯度的函数,问题就解决了。这就是不同场景下,评价函数的表现天差地别。

注意:没有万能的评价函数。同一个函数,在显微成像和户外监控场景下,表现可能完全相反。选型必须结合具体应用。

1.3 评价函数的分类体系

我习惯把评价函数分成四大类。下面这张图可以帮你快速建立整体认知:

对焦评价函数分类体系 对焦评价函数 灰度域方法 梯度域方法 频域方法 信息论方法 灰度方差 灰度熵 直方图对比度 Sobel算子 Laplacian算子 Tenengrad FFT高频能量 DCT系数 小波变换 互信息 图像熵 联合熵 分类依据 灰度域:直接操作像素值 → 计算简单,但灵敏度有限 梯度域:利用边缘信息 → 灵敏度高,工业视觉首选 频域:分析频率成分 → 精度高,但计算量大

下面我详细说说每一类:

1.3.1 灰度域方法

这类方法最直观。它直接分析像素灰度值的分布情况。清晰图像通常灰度变化剧烈,模糊图像则灰度分布均匀。

常见的几个函数:

函数名称 计算方式 特点
灰度方差 计算所有像素灰度值的方差 最简单,但平坦区域失效
灰度熵 基于灰度直方图计算信息熵 对光照变化不敏感
直方图对比度 统计灰度级分布范围 速度快,但精度一般

我的经验:灰度方差函数适合纹理丰富的场景。如果图像本身很平坦,比如拍一张白纸,方差几乎不变,对焦就会失效。我曾经在一个PCB检测项目里踩过这个坑,后来换成了梯度方法才搞定。

1.3.2 梯度域方法

这是工业视觉里用得最多的一类。为什么?因为清晰图像的边缘更锐利,梯度值更大。说白了,就是找图像里的"突变"。

常用的算子:

  • Sobel算子:计算水平和垂直方向的梯度,然后求和。我习惯用它做快速对焦。
  • Laplacian算子:二阶微分,对边缘更敏感。但噪声也会被放大。
  • Tenengrad:基于Sobel梯度的平方和。灵敏度很高,我推荐在对焦精度要求高的场景使用。
// 一个简单的Sobel梯度评价函数实现
double focusMeasure(Mat& image) {
    Mat gradX, gradY;
    Sobel(image, gradX, CV_32F, 1, 0);
    Sobel(image, gradY, CV_32F, 0, 1);
    
    Mat magnitude;
    magnitude = abs(gradX) + abs(gradY);
    
    return mean(magnitude)[0];
}

注意:梯度方法对噪声敏感。如果图像信噪比低,建议先做高斯滤波。我见过有人直接对原始噪声图像算梯度,结果对焦曲线全是毛刺,根本找不到峰值。

1.3.3 频域方法

这类方法从频率角度分析。清晰图像包含更多高频成分,模糊图像则低频占主导。

常见做法:

  • FFT高频能量:对图像做傅里叶变换,统计高频区域的能量总和
  • DCT系数:类似JPEG压缩的思路,用离散余弦变换
  • 小波变换:多尺度分析,精度高但计算量大

频域方法的优点是精度高,但计算开销也大。我一般只在离线标定或者对焦精度要求极高的场合用它们。

1.3.4 信息论方法

这类方法比较"学术"。它把图像看作信息源,清晰图像包含的信息量更大。

典型代表:

  • 图像熵:统计灰度分布的不确定性
  • 互信息:衡量两幅图像的相关性,常用于多模态对焦

说实话,我在实际工程项目里很少用这类方法。它们计算复杂,而且效果不一定比梯度方法好。但在一些特殊场景,比如医学图像配准中,互信息方法确实有不可替代的优势。

选型建议:如果你是刚入门,我建议先从梯度域方法开始。Sobel算子加方差组合,能覆盖80%的工业对焦场景。等遇到瓶颈了,再考虑频域或信息论方法。