Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 图像聚焦计算_C#_Image Processing_Automated Tests_Computer Vision_Aforge - Fatal编程技术网

C# 图像聚焦计算

C# 图像聚焦计算,c#,image-processing,automated-tests,computer-vision,aforge,C#,Image Processing,Automated Tests,Computer Vision,Aforge,我正在尝试为一些自动化测试工作开发一种图像聚焦算法。我选择使用org.net,因为它似乎是一个非常成熟的.net友好系统 不幸的是,我似乎无法从零开始找到构建自动对焦算法的信息,因此我已尽了最大努力: 拍照。应用sobel边缘检测过滤器,生成灰度边缘轮廓。生成直方图并保存标准设备。将相机移近拍摄对象一步,然后再拍摄一张照片。如果标准dev比前一个小,那么我们将更加关注它。否则,我们就超过了拍照的最佳距离 有更好的办法吗 更新:顺便说一句,这里面有一个巨大的缺陷。当我越过最佳焦点时,我的“聚焦图像

我正在尝试为一些自动化测试工作开发一种图像聚焦算法。我选择使用org.net,因为它似乎是一个非常成熟的.net友好系统

不幸的是,我似乎无法从零开始找到构建自动对焦算法的信息,因此我已尽了最大努力:

拍照。应用sobel边缘检测过滤器,生成灰度边缘轮廓。生成直方图并保存标准设备。将相机移近拍摄对象一步,然后再拍摄一张照片。如果标准dev比前一个小,那么我们将更加关注它。否则,我们就超过了拍照的最佳距离

有更好的办法吗

更新:顺便说一句,这里面有一个巨大的缺陷。当我越过最佳焦点时,我的“聚焦图像”价值继续增长。你可能期望一个抛物线函数来观察距离/焦点值,但实际上你得到的是更对数的东西

更新2:好的,我回到这里,我们正在探索的当前方法是给定一些已知的边缘(好的,所以我确切地知道图片中的对象是什么),我手动进行像素强度比较。当生成的图形变得更陡峭时,我会更加聚焦。一旦核心算法从matlab移植到c#,我将发布代码(是的,matlab..:S)

更新3:是的,最后更新。我又回到这个问题上来了。最后的代码如下所示:

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

第2步:为我聚焦的对象找到一条边(在我的例子中,它是一个始终在同一位置的矩形对象,因此我裁剪一条边的高而窄的矩形)

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

步骤4:获取直方图(在我的例子中为灰色)

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


第六步:当你的斜率最大时,就是你处于最聚焦点的时候。

我想知道标准偏差是否是最好的选择:如果图像变得更清晰,sobel过滤器图像的边缘将包含更亮的像素,但同时由于边缘越来越薄,明亮的像素会越来越少。也许您可以尝试在sobel图像中使用平均1%的最高像素值?

这可能很有用。这就是摄像机自动对焦系统的实际工作原理-

对比度测量

对比度测量是通过 测量传感器内的对比度 场,通过镜头。强度 图像相邻像素之间的差异 传感器随温度的升高而自然增加 正确的图像焦点。光学 因此,系统可以进行调整,直到 检测到最大对比度。在里面 这种方法,AF不涉及 所有位置的实际距离测量,以及 通常比相位慢 探测系统,尤其是当 在昏暗的灯光下工作。事实上 但是,不要使用单独的传感器, 对比度检测自动对焦可以更精确 灵活(如在 软件)和潜在的更多 精确的这是一种常见的方法 摄像机和消费者层面 没有快门和快门的数码相机 反射镜。一些数码单反(包括 奥林巴斯E-420、松下L10、尼康 三脚架中的D90、尼康D5000、尼康D300 模式,佳能EOS 5D Mark II,佳能EOS 50D)在聚焦时使用此方法 他们的实时查看模式。一个新的 微型可互换透镜系统 三分之四,专门使用对比度 测量自动对焦,并称为自动对焦 提供可与阶段相媲美的性能 检测系统


我自己还没有建立一个,但我的第一个想法是对图像的一部分进行二维DFT。失焦时,高频会自动消失


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

虽然sobel是一个不错的选择,但我可能会选择在几个小的代表性区域上对x和y方向上的投影进行边缘幅值计算。另一个基于OpenCV的.NET友好选择是@

对于您的需求来说,这可能有点过于简单,但我使用了一种简单的算法,可以查看与相邻像素的差异,结果很好。两个像素之间的差值之和似乎是图像对比度的合理度量。我找不到Brenner在70年代的原始论文,但在


另一个问题是,当图像严重失焦时,焦距信息非常少,因此很难判断哪种方式是“更近”或避免局部最大值。

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

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

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

本文介绍了这项技术

这是一个可用的

引述文章:

7.2.2自动对焦

预计自动对焦将是MAHLI使用的主要方法 关注火星。“自动对焦”命令指示相机移动到 指定的起动马达计数位置并采集图像,移动 指定的步骤数,然后收集另一个映像,并继续这样做 直到达到指定的图像总数,每个图像之间用 指定的马达计数增量。这些图像都是JPEG格式的 压缩(联合摄影专家组;见CCITT(1993))与 应用相同的压缩质量因子