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

  这个项目萌芽于2016年,期间利用业余时间陆陆续续做了一些开发,包括软件、算法。这里做一下阶段性总结。

 

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

 

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

 

  由于当时项目开发已经从 Winform 转移至 WPF。这个软件框架便基于WPF搭建,算法采用 OpencvC++ 二次开发的方式。

  一个能满足常规视觉项目的算法最小系统必须包含:【图像匹配】、【相机标定】、【坐标系统】、【卡尺】、【搜索直线】、【搜索圆】、【斑点】以及一些几何计算。

 

软件包含【任务】【变量】【设备】等模块。

算法包含【图像匹配】【斑点】【卡尺】【搜索直线】【搜索圆】【棋盘格标定】【多点标定】【坐标系】等。

 

【图像匹配】C++从零开始编码,也是耗时最久的一个算法。目前在计算效率和稳定性上初步达到了预期效果。当然跟业界商业软件还有一定差距,后续还需要继续优化。

【相机标定】支持标准棋盘格、点阵棋盘格和DataMatrix棋盘格,其中标准棋盘格和点阵棋盘格标定方法基于 Opencv,DataMatrix棋盘格标定方法基于libdmtx库。目前DataMatrix棋盘格标定方法还不稳定,在优化中;

【卡尺】  支持单个/多个边缘或者单个/多个边缘对查找;支持中间数据可视化分析;

【搜索直线】【搜索圆】基于【卡尺】方法实现;

【斑点】  支持固定阈值、相对阈值分割;目前还缺少连通域参数分析;

 

软件界面:

 

【标定】棋盘格:

 

【标定】基于DataMatrix棋盘格:

  

【图像匹配】界面:

   

【图像匹配】示例:

                         

 

【卡尺】:

 

 

【卡尺】数据分析:

 

 

【搜索直线】:

 

【搜索圆】:

 

【斑点】:

 

【斑点】直方图分析:

  

【坐标系】:

 

 这是一个简单的测量案例示例:

  

posted @ 2021-11-02 22:44  Imgproc  阅读(1166)  评论(6编辑  收藏  举报