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的视觉工作流",欢迎前往阅读。

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

相关推荐
㓗冽2 小时前
2026.03.27(第三天)
数据结构·c++·算法
Magic--2 小时前
经典概率题:飞机座位分配问题(LeetCode 1227)超详细解析
算法·leetcode·职场和发展
OidEncoder2 小时前
绝对值编码器在AGV舵轮上的应用与调试(含硬件对接+故障排查+代码实例)
人工智能·物联网·自动化·智慧城市·信息与通信
BitaHub20242 小时前
Bitahub算力上新 RTX3080 10G重磅登场
人工智能·bitahub·rtx3080 10g显卡
新缸中之脑2 小时前
在树莓派上运行OpenClaw
人工智能
urkay-2 小时前
Android 图片轮廓提取与重叠轮廓合并处理
android·算法·iphone
七七肆十九2 小时前
PTA 7-38 数列求和-加强版
数据结构·算法
ccLianLian2 小时前
深度学习·GAN系列
人工智能·深度学习·生成对抗网络