【发布时间】:2010-01-25 19:20:49
【问题描述】:
我正在尝试为一些测试自动化工作开发图像聚焦算法。我选择使用 AForge.net,因为它看起来是一个成熟的、对 .net 友好的系统。
不幸的是,我似乎无法找到有关从头开始构建自动对焦算法的信息,因此我已尽我所能:
拍照。应用 sobel 边缘检测滤波器,生成灰度边缘轮廓。生成直方图并保存标准开发。将相机移近拍摄对象并拍摄另一张照片。如果标准开发比以前的开发更小,我们就会更加关注。否则,我们已经超过了拍照的最佳距离。
有没有更好的方法?
更新:顺便说一句,这方面存在巨大缺陷。当我超过最佳焦点时,我的“焦点图像”价值会继续增长。您会期望看到距离/焦点值的抛物线函数,但实际上您会得到更对数的结果
更新 2:好的,所以我回到了这个,我们正在探索的当前方法给出了一些已知的边缘(好的,所以我确切地知道图片中的对象是什么),我做了一个手动像素强度比较。随着结果图变得越来越陡峭,我的注意力也越来越集中。一旦核心算法从 matlab 移植到 c# 中,我将发布代码(是的,matlab .. :S)
更新 3:是的最终更新。又回到了这个。最终代码如下所示:
第一步:从图片列表中获取图片(我通过焦点拍了一百张照片)
第 2 步:为我正在聚焦的对象找到一个边缘(在我的例子中,它是一个始终在同一个位置的矩形对象,因此我裁剪了一个边缘的 HIGH 和 NARROW 矩形)
第 3 步:获取该裁剪图像的 HorizontalIntensityStatistics(Aforge.net 类)。
第 4 步:获取直方图(在我的情况下为灰色)
第五步:求直方图值的导数
第 6 步:当你的斜率最大时,就是你在最集中的点。
【问题讨论】:
-
我认为你至少在正确的轨道上。如果我没记错的话,数码相机中的自动对焦会做类似的事情。
-
昨晚我在玩自动对焦相机时才意识到这一点。工作中的人本质上是一个愚蠢的针孔。启用自动对焦时,您通常可以听到呼呼声。也就是相机在不同距离采样并猜测最佳距离。
标签: c# image-processing automated-tests computer-vision aforge