C# 基于OpenCv的视觉工作流-章44-直线卡尺

C# 基于OpenCv的视觉工作流-章44-直线卡尺

本章目标:
一、卡尺原理;
二、卡尺制作;
三、卡尺定位;
四、卡尺找点;
五、拟合直线;

直线查找,用霍夫直线、边缘提取等方法也可实现,但选取的直线,需过滤处理,且当目标发生位置、角度变化时,过滤的复杂程度变得更难以捉摸。

工业应用中,要对工件进行直线查找测量,往往有更高的要求,如明确性、简单性、高效性、可控性、稳定性等,而稳定性、可控性更是关注重点。稳定性不够就会把合格的判定为不合格,相反类同;可控性要求对算法实现可控、对识别过程可控;给持续优化、提升带来更多的理论依据,由此引出了一种实用的方式,直线卡尺。

一、卡尺原理

在图像中,一条直线表现出来的形式,往往是颜色发生剧烈变化的地方(详细阅读章13-边缘提取),将这些地方瓜分细化来看,其实就是一个个的像素点。反过来,如果先找到这些颜色变化剧烈的交界点,再将这些点拟合成直线,也就找到了所需的直线。

1、划分区域

一条直线,用两个点就可以定义,所以不用捕捉交界处的所有像素点,仅需捕捉到交界处一定数量的代表点即可。本例中将卡尺划分为多个可指定数量的ROI区域,每个ROI区域计算出一个代表点。

2、区域代表点

通过ROI区域,截取出此局部图像,再将图像进行按行或列投影,得到仅一个像素一行或仅一个像素一列的图像,即按行或按列统计像素值(参考章34-投影向量)。

如下图,统计出的像素值结果是一个数组,而数组中像素值发生剧烈变化的地方即为交界点,交界点一般有两处,上升沿和下降沿,至于要取哪个点作为代表点,则由指定的搜索方向决定。本例中如果设置由黑到白取直线,则为上长沿点,由白到黑取直线,则为下降沿点。

二、卡尺制作

卡尺制作需较强的C#基础知识,本文仅介绍关键点,要完全掌握需亲身试验。

1、绘制矩形ROI

创建矩形可如下使用,参数含义网络查询即可;

RectangleF rect = new RectangleF(x, y, width, height);

2、绘制可拖拽的控制小框

同1绘制小的矩形框及圆,接着判断鼠标在控制框时,拖拽实现ROI宽高及角度控制。

3、绘制箭头(扫描方向)

绘制箭头用C#直线绘制,画3根直线即可。需要注意的是箭头方向,随着ROI旋转时自动旋转方向,要点是判断ROI旋转度数在0-360度之间,什么度数,箭头需要何时反向及转多少度。

4、绘制卡尺框

卡尺ROI即图中的青色框,根据设置个数,自动根据红色ROI尺寸,划分为指定个数;

三、卡尺定位

卡尺定位需与模板匹配相互配合,由模板匹配定位出工件的整体位置(解决工件摆放位置、角度的变化问题),在整体位置的坐标基础上,通过仿射变换(参考章20-仿射变换)定位出卡尺位置。

四、卡尺找点

遍历所有模板匹配的匹配对象,根据卡尺定位,截取ROI局部区域图像,按步骤一中描述的原理计算取得各代表点。

五、拟合直线

OpenCv拟合直线可如下使用:

var line = Cv2.FitLine(pointList, DistanceTypes.L2, 0, reps, aeps);

其中:参数1,点数组;

参数2,为距离计算方式;

参数3,为距离计算的附加参数;

参数4,为半径精度(直线到原点的距离精度阈值,默认 0.01)‌,数值越小,精度越高;

参数5,为角度精度(直线方向向量的角度变化阈值,默认 0.01),数值越小,精度越高;

参考链接

https://blog.csdn.net/weixin_40280870/article/details/131351519

https://blog.csdn.net/qq_37299618/article/details/119606955

https://blog.csdn.net/qq_42857680/article/details/126500909

"VisionTool 探迹"免费视觉工具

下载地址:https://pan.baidu.com/s/11tktKOSnepLNIEqNbvnv6w?pwd=qv5i

"VisionTool Halcon"付费视觉工具

下载地址:https://pan.baidu.com/s/1v832KTonDYS6oNnWG2iZtQ?

对应系列文章"C# 基于Halcon的视觉工作流",欢迎前往阅读。

上述内容需要一定的技术功底,本章至此已结束,欢迎阅读下章,谢谢!

相关推荐
youcans_1 分钟前
【HALCON 实战入门】2. HALCON 快速入门
图像处理·人工智能·计算机视觉·halcon
蓉蓉的数码视界3 分钟前
当人形机器人走进我们的生活
人工智能
紧固视界4 分钟前
汽车紧固件有哪些?应用场景与技术要求全解析(2026上海紧固件展专题)
人工智能·汽车·上海紧固件展·上海紧固件专业展
xwz小王子4 分钟前
CFC:基于双层世界模型的角色 - 流体耦合仿真
人工智能
im_AMBER5 分钟前
Leetcode 158 数组中的第K个最大元素 | 查找和最小的 K 对数字
javascript·数据结构·算法·leetcode·
脱氧核糖核酸__10 分钟前
LeetCode热题100——48.旋转图像(题解+答案+要点)
c++·算法·leetcode
Deepoch11 分钟前
VLA 分布式智能:Deepoc 开发板助力森林防火无人机集群自主巡检
人工智能·科技·无人机·具身模型·deepoc
数数科技的数据干货11 分钟前
官宣!数数科技正式更名为 ThinkingAI
大数据·人工智能·科技·agent
木井巳12 分钟前
【递归算法】字母大小写全排列
java·算法·leetcode·决策树·深度优先
宵时待雨13 分钟前
优选算法专题2:滑动窗口
数据结构·c++·笔记·算法