图像焦点计算

我正在尝试为一些测试自动化工作开发图像聚焦算法。 我选择使用AForge.net,因为它看起来像一个很好的成熟.net友好系统。

不幸的是,我似乎无法从头开始找到有关构建自动对焦算法的信息,所以我给了它最好的尝试:

拍照。 应用sobel边缘检测滤波器,生成灰度边缘轮廓。 生成直方图并保存标准开发。 将相机移近主体一步并拍摄另一张照片。 如果标准开发小于前一个,我们将获得更多关注。 否则,我们已经超过拍摄照片的最佳距离。

有没有更好的办法?

更新:顺便说一下,这有很大的缺陷。 当我超越最佳焦点时,我的“焦点图像”价值继续增长。 你期望抛物线函数看距离/焦点值,但实际上你会得到一些更对数的东西

更新2:好的,所以我回到这个,我们正在探索的当前方法给出了一些已知的边缘(好吧,所以我确切地知道图片中的对象是什么),我做了手动像素强度比较。 随着结果图变得越来越陡峭,我得到了更多关注。 一旦核心算法从matlab移植到c#(是的,matlab ..:S),我就会发布代码

更新3:yay最终更新。 又回来了。 最终的代码如下所示:

第1步:从图像列表中获取图像(我通过聚焦点拍摄了一百张照片)

第2步:找到我正在聚焦的物体的边缘(在我的情况下,它是一个总是在同一个地方的矩形物体,所以我裁剪出一个边缘的HIGH和NARROW矩形)

第3步:获取该裁剪图像的Horizo​​ntalIntensityStatistics(Aforge.net类)。

第4步:获取直方图(灰色,在我的情况下)

步骤5:找到直方图值的导数

第6步:当你的坡度最大时,就是你处于最集中的地方。

对于您的需求可能有点简单,但我通过一个简单的算法得到了很好的结果,该算法着眼于与相邻像素的差异。 两个像素差的总和似乎是图像对比度的合理度量。 我在70年代找不到Brenner的原始论文,但在http://www2.die.upm.es/im/papers/Autofocus.pdf中提到了它。

另一个问题是当图像极度失焦时,焦点信息非常少,因此很难分辨哪种方式“靠近”或避免局部最大值。

您可以查看NASA好奇号火星探测器中使用的技术。

本文介绍了该技术

EDGETT,Kenneth S.,et al。 好奇号的火星手镜成像仪(MAHLI)调查。 空间科学评论 ,2012,170.1-4:259-317。

这里有PDF格式 。

引用文章:

7.2.2自动对焦

预计自动对焦是MAHLI专注于火星的主要方法。 自动对焦命令指示摄像机移动到指定的起始电机计数位置并收集图像,移动指定的步数并收集另一个图像,并继续这样做,直到达到指定的图像总数,每个图像由指定的电机分开计数增量。 这些图像中的每一个都是JPEG压缩的(联合图像专家组;参见CCITT(1993)),其中应用了相同的压缩质量因子。 每个压缩图像的文件大小是场景细节的度量,其又是焦点的函数(对焦图像显示比同一场景的模糊,离焦视图更多的细节)。 如图23所示,相机确定JPEG文件大小和电机计数之间的关系,并将抛物线拟合到三个相邻的最大文件大小。 抛物线的顶点提供了最佳聚焦马达计数位置的估计。 做出此决定后,MAHLI将镜头焦点组移动到最佳电机位置并获取图像; 存储此图像时,不保存用于确定自动对焦位置的较早图像。

可以在整个MAHLI视场上执行自动聚焦,或者可以在与包括要研究的对象的场景部分相对应的子帧上执行自动聚焦。 根据受试者的性质和MAHLI机器人arm定位的不确定性的知识,用户可能选择获取居中的自动对焦子框架,或者如果定位知识足以确定位置,他们可能会选择偏心自动对焦子框架应该找到子框架。 强烈建议使用子帧来执行自动对焦,因为这通常会导致拍摄对象比自动对焦应用于完整CCD的情况更好; 此外,使用子帧从自动聚焦得到的电机计数位置通常导致从像素尺度更准确地确定工作距离。

以下是图23:

NASA好奇号火星漫游者的自动对焦

在这个答案中也提出了这个想法: https : //stackoverflow.com/a/2173259/15485

这可能很有用。 这是相机的自动对焦系统实际工作的方式 – 被动自动对焦

对比度测量

通过透镜测量传感器区域内的对比度来实现对比度测量。 传感器的相邻像素之间的强度差异自然地随着正确的图像聚焦而增加。 由此可以调节光学系统直到检测到最大对比度。 在该方法中,AF根本不涉及实际距离测量,并且通常比相位检测系统慢,尤其是在昏暗光线下操作时。 然而,由于它不使用单独的传感器,因此对比度检测自动对焦可以更灵活(因为它在软件中实现)并且可能更准确。 这是摄像机和消费级数码相机中常见的方法,缺少快门和反光镜。 一些数码单反相机(包括奥林巴斯E-420,松下L10,尼康D90,尼康D5000,三脚架模式下的尼康D300,佳能EOS 5D Mark II,佳能EOS 50D)在聚焦于实时取景模式时使用此方法。 一种新的可互换镜头系统Micro Four Thirds专门使用对比度测量自动对焦,据说可提供与相位检测系统相媲美的性能。

我自己没有建立一个,但我的第一个想法是在图像的一部分上进行2D DFT。 失焦时,高频将自动消失。

对于惰性原型,您可以尝试使用JPEG(高质量)压缩图像区域,并查看输出流大小。 大文件意味着很多细节,这反过来意味着图像是焦点。 请注意,相机不应太嘈杂,并且当然不能比较不同场景下的文件大小。

虽然索贝尔是一个不错的选择,但我可能会选择对几个小代表区域的x和y方向上的投影进行边缘幅度计算。 基于OpenCV的另一个.NET友好选择是@ http://www.emgu.com/wiki/index.php/Main_Page

我想知道标准偏差是否是最佳选择:如果图像变得更清晰,则sobel滤镜图像将在边缘处包含更亮的像素,但同时更少的亮像素,因为边缘变得更薄。 也许您可以尝试使用sobel图像中平均1%的最高像素值?

焦点度量的另一种风格可能是:

抓取几张图像并对其进行平均(降噪)。 然后FFT平均图像并使用高频到低频能量比。 这个比例越高,焦点越好。 在工具箱的演示中可以使用Matlab演示(不包括平均阶段):)