USB显微镜自动对焦算法

我正在尝试为低成本USB显微镜设计自动对焦系统。 我一直在开发硬件方面,使用精密PAP电机,可以调整显微镜中的聚焦旋钮,现在我处在困难的部分。

我一直在考虑如何实现该软件。 硬件有两个USB端口,一个用于显微镜摄像头,另一个用于电机。 我最初的想法是用C#编写一个能够从显微镜获取图像并向前和向后移动电机的应用程序,到目前为止一切都很好:)

现在我需要一些自动对焦的帮助,如何实现它? 这有什么好的算法吗? 或者也许是一个图像处理库,可以帮助我完成任务?

我一直在googleling但没有成功…我会感谢任何帮助/想法/推荐!

非常感谢 :)

编辑:谢谢你的答案,我会尝试所有选项,并回到这里与结果(或更多的问题)。

最重要的部分是代码,它告诉你图像的焦点是多少。 由于未聚焦的图像丢失了高频数据,我会尝试以下内容:

long CalculateFocusQuality(byte[,] pixels) { long sum = 0; for(int y = 0; y 

如果图像有噪声,该算法不能很好地工作。 在这种情况下,您可以对其进行下采样,或使用更复杂的算法。

或者另一个想法是计算像素值的变化:

 long CalculateFocusQuality(byte[,] pixels) { long sum = 0; long sumOfSquares = 0; for(int y=0; y 

这些function适用于单色图像,RGB图像只是对通道的值求和。

使用此function可更改焦点,尝试最大化CalculateFocusQuality 。 如果连续多次尝试提高了质量,则增加步长,如果步骤降低了质量,则减少步长并反转方向。

自动对焦微型显微镜是光学研究中的一个长期主题。
您可以在这里了解所涉及的算法。

所涉及的问题不仅包括如何确保散焦,还包括如何以最佳方式移动光轴,以及如何在算法上校正残余像差。

HTH!

维基百科上有一些信息

从技术上讲,它可以实现为高通滤波器和一些系统,它可以在滤波器输出最高的位置周围移动镜头。 不需要数字处理

此外,我从Googling获得的“自动对焦算法”中的前6场比赛中有5场似乎有相关且有用的信息(尽管在一两个案例中,论文的全部细节需要付款)

只是我尝试解决类似任务的一些经验。 在我的系统上使用200倍的magnificatin。 步进式再溶解素在Z方向上0.001um。

我遇到的问题: – 惊恐。 由于突然发生震动,理论上更好的位置的图像可能会被评估得更糟。 由于我的系统的API不允许移动z-axix并使图像并行,我不得不分步移动并且后续捕获。 每次移动都会引起晃动。 有趣的是,在向下移动时摇晃比向上移动更严重。

– 机械不精确。 进行扫描并移动到理论上最佳位置可能会出错,因为控制器中的步进位置可能与机械位置不同。

– 曝光:根据应用程序的不同,图像的亮度可能会有所不同,因此应调整曝光。 根据焦点评估算法(计算中是否涉及亮度),可能需要修复曝光。 这会导致鸡蛋问题 – 如果图像亮度未知,如何设置曝光以及如何聚焦,如果需要曝光未知。

最后,为了避免机械问题,我(重新)存储了在聚焦时找到的最佳图像并在最后返回它。 关于聚焦值的算法,最好的是寻找与整数个颜色(直方图宽度)相结合的边缘。 但是,原因在于,它取决于您处理的图像类型。

此致,Valentin Heinitz