视觉软件及算法的一些探索
这个项目萌芽于2016年,期间利用业余时间陆陆续续做了一些开发,包括软件、算法。这里做一下阶段性总结。
2014年毕业后进入一家外资制造型企业工作,开发基于 Opencv 的上位机软件。后来因为项目需要,接触了 Halcon、VisionPro 等商业视觉软件。当时对 VisionPro 图形化的操作印象深刻,虽然在实际项目中还是需要进行二次开发,但是最复杂、最核心的视觉逻辑部分只需通过连线、拖拽的方式完成,很大程度上降低了开发周期。
2016年前后,离开原来的公司从事非标项目开发,工作内容也从对产线的自给自足转变为满足客户的各种定制化需求。从事非标的同仁应该都有深刻体会,一个项目留给上位机开发和调试的时间非常有限。机构出图、加工、组装、电气接线等,到能调试时,设备往往都已经发到客户现场,我们只能在这过程中见缝插针进行调试。在这过程中,利用空闲开始整理之前项目中积累下来的常用模块,包括通信、相机、算法应用等,在这过程中萌生了尝试开发视觉软件的想法。
由于当时项目开发已经从 Winform 转移至 WPF。这个软件框架便基于WPF搭建,算法采用 Opencv 和 C++ 二次开发的方式。
一个能满足常规视觉项目的算法最小系统必须包含:【图像匹配】、【相机标定】、【坐标系统】、【卡尺】、【搜索直线】、【搜索圆】、【斑点】以及一些几何计算。
软件包含【任务】【变量】【设备】等模块。
算法包含【图像匹配】【斑点】【卡尺】【搜索直线】【搜索圆】【棋盘格标定】【多点标定】【坐标系】等。
【图像匹配】C++从零开始编码,也是耗时最久的一个算法。目前在计算效率和稳定性上初步达到了预期效果。当然跟业界商业软件还有一定差距,后续还需要继续优化。
【相机标定】支持标准棋盘格、点阵棋盘格和DataMatrix棋盘格,其中标准棋盘格和点阵棋盘格标定方法基于 Opencv,DataMatrix棋盘格标定方法基于libdmtx库。目前DataMatrix棋盘格标定方法还不稳定,在优化中;
【卡尺】 支持单个/多个边缘或者单个/多个边缘对查找;支持中间数据可视化分析;
【搜索直线】【搜索圆】基于【卡尺】方法实现;
【斑点】 支持固定阈值、相对阈值分割;目前还缺少连通域参数分析;
软件界面:
【标定】棋盘格:
【标定】基于DataMatrix棋盘格:
【图像匹配】界面:
【图像匹配】示例:
【卡尺】:
【卡尺】数据分析:
【搜索直线】:
【搜索圆】:
【斑点】:
【斑点】直方图分析:
【坐标系】:
这是一个简单的测量案例示例: