我正在编写一个控制工业机械的用户界面程序。
本机是用于电子生产行业的全自动在线丝印机。该机器的确切用途是将焊膏印刷到裸 PCB 上。该系统包括 2 个摄像头,它们形成了一个视觉系统,用于定位基准点并自动化机器所涉及的过程。我遇到的问题是我需要能够在从摄像头拍摄的图像中定位形状和对象,这是直截了当,但是 - 为了获得所需的精度,我需要能够以亚像素精度来做到这一点。
两个摄像头组成一个双视觉摄像头,一个摄像头将向上看模板,另一个摄像头向下看 PCB。双视觉相机位于可在 X 和 Y 方向移动的移动托架上。PCB 被夹在桌子上,可以在 X、Y 和 theta 方向移动。视觉系统用于检测 PCB 位置和模板位置之间的差异,然后调整工作台以将两者对齐。
编辑:
这是从现有 UI 程序中截取的部分屏幕截图:
模板图像是顶部图像,PCB 是底部图像,这里的图像是灰度图像 - 在我正在查看的新系统中,我正在使用颜色,但需要使用灰度。
注意:当您阅读本文时,您可能在想“为什么不直接使用现有 UI 中使用的任何内容?” 现有的 UI 是用 VB6 编写的,我想摆脱它,程序的视觉方面是由不再存在的第三方公司编写的 .ocx。
我玩了一点 AForge.NET,发现它真的很容易使用,我可以用它来定位各种不同的形状并找到它们的中心,这很棒,但它没有亚像素精度. 但是,我可以将此作为起点,然后将子像素算法应用于单个中心像素甚至整个形状。
编辑:
这是从我使用 AForge 编写的测试程序中获取的示例图像:
红色轮廓和十字准线是我作为视觉辅助/实验添加的。这是用我可能使用的相机拍摄的,它的分辨率为 1280 x 1024,但镜头不是我将使用的实际镜头,这就是图像略微“鱼眼”的原因。感兴趣的对象也会比这更好。
在实际系统中,镜头将在模板和 PCB 上看到 10mm x 8mm 的正方形,这意味着每个像素将代表 7.8125um^2,但是我可以一次以 1.25um 的增量移动 XYY 表,这基本上没用如果我不能用相机看到这些动作。我需要 1um(亚)像素精度。
有谁知道我可以用什么来做到这一点?我已经搜索了很长一段时间,但我似乎找到的只是有关以亚像素精度渲染图像的信息。
或者,更好的是,有谁知道我如何自己写一些东西来做到这一点?我什至不知道从哪里开始!
任何反馈将不胜感激。