我正在尝试为某些测试自动化工作开发焦点算法的图像。我选择使用aforge.net,因为它似乎是一个不错的成熟.NET友好系统。

不幸的是,我似乎找不到有关从头开始构建自动对焦算法的信息,因此我已经为此提供了最好的尝试:

拍摄图像。应用Sobel边缘检测过滤器,该滤波器生成灰度边缘轮廓。生成直方图并保存标准开发。将摄像机移到一个接近主题的一步中,然后拍摄另一张照片。如果标准开发人员比以前的开发小,我们将获得更多的焦点。否则,我们已经超越了拍照的最佳距离。

有没有更好的办法?

更新:顺便说一句,这很大。我得到的 过去的 最佳焦点点,我的“焦点图像”值继续增长。您会期望抛物线功能从距离/焦点值来看,但实际上您会得到更对数的东西

更新2:好的,所以我回到了这个问题,我们正在探索的当前方法得到了一些已知的边缘(好吧,所以我确切地知道图片中的对象是什么),我进行了手动像素强度比较。随着结果图变得越来越陡峭,我会更加焦点。一旦核心算法从MATLAB移植到C#(是的,Matlab ..:S)后,我将发布代码。

更新3:最终更新。再次回到这个。最终代码看起来像这样:

步骤1:从图像列表中获取图像(我从重点点拍摄了一百张照片)

步骤2:找到我要聚焦的物体的边缘(在我的情况下是一个矩形对象,总是在同一位置,因此我裁剪了一个边缘的高和狭窄的矩形)

步骤3:获取该裁剪图像的水平强度统计数据(Aforge.net类)。

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

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

步骤6:当您的坡度最大时,就是您处于最重点的时候。

有帮助吗?

解决方案

对于您的需求,这可能有点简单,但是我的效果很好,使用了一种简单的算法,该算法着眼于相邻像素的区别。 2 awa的像素差的总和似乎是图像对比度的合理衡量标准。我找不到布伦纳在70年代的原始论文,但在 http://www2.die.upm.es/im/papers/autofocus.pdf

另一个问题是,当图像极为不足时,焦点信息很少,因此很难说出哪种方式“靠近”或避免局部最大值。

其他提示

您可以查看NASA好奇心火星漫游者中使用的技术。

该技术在本文中进行了描述

Edgett,Kenneth S.等。好奇心的火星手镜头成像仪(Mahli)调查。 太空科学评论, 2012, 170.1-4: 259-317.

可以作为一个 PDF在这里.

引用文章:

7.2.2自动对焦

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

可以在整个Mahli视野上执行自动对焦,也可以在与包括要研究的对象的场景部分相对应的子框架上执行。根据主题的性质和Mahli机器人臂定位中不确定性的知识,用户可能会选择获得集中的自动对焦子框架,或者他们可能会选择一个偏心的自动对焦子框架,如果定位知识足以确定位置子框架应位于。强烈建议使用子框架进行自动对焦,因为这通常会导致该受试者的焦点比将自动对焦应用于完整的CCD时的焦点更好。此外,使用子框架从自动对焦产生的运动计数位置通常会更准确地确定与像素量表的工作距离。

以下是图23:

Autofocus in NASA Curiosity Mars Rover

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

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

对比度测量

对比度测量是通过通过镜头内测量传感器场中的对比度来实现对比度的。传感器相邻像素之间的强度差自然会随正确的图像焦点而增加。因此,可以调整光学系统,直到检测到最大对比度为止。在这种方法中,AF根本不涉及实际距离测量,并且通常比相位检测系统慢,尤其是在昏暗的光下运行时。但是,由于它不使用单独的传感器,因此对比度检测自动对焦可以更灵活(因为它在软件中实现),并且可能更准确。这是摄像机和消费者级数码相机中缺乏百叶窗和反射镜的常见方法。一些DSLR(包括Olympus E-420,Panasonic L10,Nikon D90,Nikon D5000,Nikon D5000,Nikon D300在三脚架模式下,佳能EOS 5D Mark II,佳能EOS 50D)使用此方法时使用此方法。一个新的可互换镜头系统,微型四分之二,专门使用对比度测量自动对焦,据说提供了与相位检测系统相当的性能。

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

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

尽管Sobel是一个不错的选择,但我可能会选择在几个小型代表区域对X和Y方向的投影进行边缘幅度计算。基于OpenCV的另一个.NET友好选择是 @ http://www.emgu.com/wiki/index.php/main_page.

我想知道标准偏差是否是最佳选择:如果图像变得更加清晰,Sobel滤波器图像在边缘上会包含更明亮的像素,但同时又减少了明亮的像素,因为边缘越来越薄。也许您可以尝试使用Sobel图像中平均使用1%最高像素值?

聚焦度量的另一个口味可能是:

抓住几张图像并普通它们(降噪)。然后FFT平均图像,并使用高频率的能量比。这种口粮越高,重点越好。在工具箱的演示中可用MATLAB演示(不包括平均阶段):)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top