code学习

机器视觉软件及算法的一些探索

基于C# WPF + Opencv + C++ 的机器视觉软件及算法的探索

  这个项目萌芽于2016年,期间利用业余时间陆陆续续做了一些开发,包括软件、算法。中间也因为各种事情,中断过几次。为了项目的延续性,也防止再次荒废,这里记录一下开发过程中的心得,也做一下阶段性总结,希望能在接下来的时间中敦促自己继续完善。

  2014年毕业后进入一家外资制造型企业工作,延续了在学校的课题方向,配合生产线开发基于Opencv的视觉检测上位机软件。后来因为项目需要,接触了Halcon、VisionPro等商业视觉软件。当时对VisionPro图形化的操作印象深刻,虽然在实际项目中还是需要进行二次开发,但是最复杂、最核心的视觉逻辑部分只需通过连线、拖拽的方式完成,已经可以很大程度上降低开发周期。

  2016年前后,离开原来的公司从事非标项目开发,工作内容也从对产线的自给自足转变为满足客户的各种定制化需求。从事非标的同仁应该都有深刻体会,一个项目留给上位机开发和调试的时间非常有限。机构出图、加工、组装、电气接线等,到能调试时,设备往往都已经发到客户现场,我们只能在这过程中见缝插针进行调试。在这过程中,利用空闲开始整理之前项目中积累下来的常用模块,包括通信、相机、算法应用等,在这过程中萌生了尝试开发视觉软件的想法。

  由于当时项目开发已经从 C# Winform 转移至 C# WPF,这个软件框架便基于WPF搭建,算法采用 Opencv 和 C++ 二次开发的方式。软件最大的困难来自算法,一个能满足常规视觉项目的算法最小系统必须包含:相机标定、图像匹配、坐标系统、卡尺、找线、找圆、斑点以及一些几何计算(因为项目中用VisionPro较多,以上算法名称也参照VisionPro)。算法的主要技术瓶颈在模板匹配,从前期调研查阅各种资料,到开始编码尝试,整个实现及改进过程从2017年前后一直延续至今,在计算效率和稳定性上初步达到了预期效果,当然跟业界商业软件还有一定差距,后续还需要继续优化,先达到或者复现出他们的效果是第一目标,如果有能力,在这基础上再做进一步提升。

软件用到了以下开源库,感谢大佬们的付出与贡献,希望有朝一日也能给开源世界出一份力:

界面风格:MahApps.Metro

图表:oxyplot

日志:log4net

脚本编辑器:ICSharpCode.AvalonEdit,ICSharpCode.NRefactory,ICSharpCode.CodeCompletion

算法:Opencv

软件包含【任务】【变量】【设备】【人机界面】四个模块。

目前算法已经实现【图像匹配】【斑点】【卡尺】【搜索直线】【搜索圆】【棋盘格标定】【多点标定】【坐标系统】等。

界面参考了部分VisionPro的交互风格。

万事开头难,第一次写文章,也拖了很久,后面会继续督促自己。

软件界面:

机器视觉软件及算法的一些探索

【图像匹配】- 模板:

机器视觉软件及算法的一些探索

【图像匹配】界面:

机器视觉软件及算法的一些探索

【图像匹配】的示例(这里借用VisionPro例子中的图像):

机器视觉软件及算法的一些探索