首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >USB显微镜的自动聚焦算法

USB显微镜的自动聚焦算法
EN

Stack Overflow用户
提问于 2010-11-19 12:10:34
回答 4查看 9.9K关注 0票数 16

我正在设计一个低成本USB显微镜的自动对焦系统。我一直在开发硬件方面的精密PAP马达,能够调整焦点旋钮在显微镜,现在我在困难的部分。

我一直在考虑如何实现这个软件。硬件有两个USB接口,一个用于显微镜摄像机,另一个用于电机。我最初的想法是用C#编写一个应用程序,该应用程序能够从显微镜中获取图像,并将马达前后移动,到目前为止还不错:)

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

我一直在谷歌但没有成功..。我将感激任何帮助/想法/推荐!

非常感谢:)

编辑:谢谢各位的回答,我会尝试所有选项,然后带着结果(或者更多的问题)回到这里。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-19 12:22:48

最重要的部分是代码,它告诉你图像有多少不对焦。由于非聚焦图像丢失了高频数据,所以我尝试如下所示:

代码语言:javascript
复制
long CalculateFocusQuality(byte[,] pixels)
{
  long sum = 0;
  for(int y = 0; y<height-1; y++)
    for(int x=0; x<width-1; x++)
    {
      sum += Square(pixels[x+1, y] - pixels[x, y]);
      sum += Square(pixels[x, y] - pixels[x, y+1]);
    }
  return sum;
}

int Square(int x)
{
  return x*x;
}

如果图像有噪声,这种算法不能很好地工作。在这种情况下,您可以降低它的样本,或者使用更复杂的算法。

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

代码语言:javascript
复制
long CalculateFocusQuality(byte[,] pixels)
{
  long sum = 0;
  long sumOfSquares = 0;
  for(int y=0; y<height; y++)
    for(int x=0; x<width; x++)
    {
      byte pixel=pixels[x,y];
      sum+=pixel;
      sumofSquares+=pixel*pixel;
    }
  return sumOfSquares*width*height - sum*sum;
}

这些函数工作在单色图像上,因为RGB图像只是信道的值之和。

使用这个函数会改变焦点,试图最大限度地利用CalculateFocusQuality。如果连续几次尝试提高质量,则增加步长;如果步骤降低质量,则减小步长并反转方向。

票数 8
EN

Stack Overflow用户

发布于 2010-11-19 12:39:28

微观镜的自动对焦是光学研究中一个由来已久的课题。

您可以了解一下涉及到的算法这里

所涉及的问题不仅是如何保证离焦,还包括如何以最优的方式移动光轴,以及如何对剩余像差进行算法校正。

哈哈!

票数 7
EN

Stack Overflow用户

发布于 2012-05-29 17:32:57

只是我尝试解决类似任务的一些经验。在我的系统中,使用了200倍的壮丽。Z方向的步进分辨率为0.001um。

我面临的问题是:-Shaking。理论上更好的位置上的图像可能会因为突然的震动而被评估得更差。由于我的系统的API不允许移动z-axix并并行地生成图像,所以我不得不分步骤移动并连续捕获。每次移动-停止都会引起震动。有趣的是,下移时的震动比向上移动时更严重。

-Mechanical不精确。进行扫描并在理论上达到最佳位置可能会产生误差,因为控制器中的步进位置可能与机械位置不同。

-Exposure:根据应用程序的不同,图像的亮度可能会有所不同,因此曝光应该进行调整。根据焦点评估算法(无论亮度是否涉及计算),曝光可能需要固定。这导致了鸡蛋问题-如何设置曝光,如果图像亮度未知,如何聚焦,如果需要曝光是未知的。

最后,为了避免机械问题,我已经(重新)存储了在聚焦时找到的最佳图像,并在最后返回。对于聚焦值的算法,最好的是寻找与颜色总数(直方图宽度)相结合的边缘。但当然,这取决于你处理的图像类型。

你好,瓦伦丁·海尼茨

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4224817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档