我正在尝试为一些测试自动化工作开发图像聚焦算法.我选择使用AForge.net,因为它看起来像一个很好的成熟.net友好系统.
不幸的是,我似乎无法从头开始找到有关构建自动对焦算法的信息,所以我给了它最好的尝试:
拍照.应用sobel边缘检测滤波器,生成灰度边缘轮廓.生成直方图并保存标准开发.将相机移近主体一步并拍摄另一张照片.如果标准开发小于前一个,我们将获得更多关注.否则,我们已经超过拍摄照片的最佳距离.
有没有更好的办法?
更新:顺便说一下,这有很大的缺陷.当我超越最佳焦点时,我的"焦点图像"价值继续增长.你期望一个抛物线函数看距离/焦点值,但实际上你会得到一些更对数的东西
更新2:好的,所以我回到了这个,我们正在探索的当前方法给出了一些已知的边缘(好吧,所以我确切地知道图片中的对象是什么),我做了一个手动像素强度比较.随着结果图变得越来越陡峭,我得到了更多关注.一旦核心算法从matlab移植到c#(是的,matlab ..:S),我就会发布代码
更新3:yay最终更新.再次回到这里.最终的代码如下所示:
第1步:从图像列表中获取图像(我通过聚焦点拍摄了一百张照片)
第2步:找到我正在聚焦的物体的边缘(在我的情况下,它是一个总是在同一个地方的矩形物体,所以我裁剪出一个边缘的HIGH和NARROW矩形)
第3步:获取该裁剪图像的HorizontalIntensityStatistics(Aforge.net类).
第4步:获取直方图(灰色,在我的情况下)
步骤5:找到直方图值的导数
第6步:当你的坡度最大时,就是你处于最关注点的时候.