【VisionMaster 行业应用案例】第四讲 单相机螺纹测量应用

前言

本案例是真实的“高血压”需求,物料无明显特征,只能观察图像来分析特征,方案设计具有一定挑战性。但是只要思想不滑坡,办法总比困难多。通过一系列VM模块“组合拳”,最终检测率达到97%以上。

场景介绍

螺纹起点如箭头所示
场景要求:视觉引导螺纹中心位置(X,Y,R),需要根据螺纹起始点与螺孔圆心确认并修改相应的R值。拍照位固定且每次只有一个物料,来料位置固定。物料规格为1cm1cm0.5cm。
这样看起来还挺简单,不就一个X,Y,R引导嘛,找个圆心确定X,Y坐标,再找到对应的螺纹起点和圆心点点连线确定角度。问题来了,这个起点,真不好找…

硬件选型

相机:500W
镜头:50mm+10mm接圈
光源:P-RL-170-20-B
镜头到产品的距离:170mm,相机垂直倾斜角度:0
光源到产品的距离:10mm
环境搭建

成像分析&方案设计

接下来,观察下方的三张图片,分析是否有共同特征,能否拿对应的特征进行起点查找。
图片1图片2图片3
我们将图片中的特征进行梳理总结:
1、物料为圆形,除底部缺口外并无明显特征,并且螺纹起点的形状并不固定,无法使用模板匹配定位起点,也无法使用顶点检测模块(使用模板匹配、顶点检测定位起点,思路PASS)。
2、每个物料的底部缺口是否与螺纹起点有关联(与客户联系,明确该特征不稳定,与螺纹起点关联无明确刚体关系,思路PASS)。
3、螺纹轨迹特征在图像上可能会与螺纹外圈存在连通域连通现象,无法通过二值化将螺纹的轨迹与螺纹外圈分离开来,单独分析(二值化处理分离螺纹轨迹与螺纹外圆,思路PASS)。
4、每个螺纹的起始点与螺纹外圆接近,物料螺纹成像的排布密集程度从图像上看从圆心往外圆显示为从密到疏,最外一圈有明显螺纹轨道。能否从最靠近螺纹外圆的螺纹轨道入手分析,屏蔽较为密集的部分,只留下稀疏的起点那一圈螺纹轨迹。屏蔽后,实际的检测范围是一个圆环。对于圆环,通过极坐标进行展开,得到一个常规的矩形图像,再对转换后的图像处理,找到螺纹起点后可以通过特征的X与图像长度做对比得到相应的角度信息(该方案貌似可行,我们先按照这个思路往下走)。

方案搭建

接下来我们按照上面梳理的思路搭建视觉检测方案。
第一步
我们可以通过定位模块定位目标圆的信息,根据实际成像效果,这边我选择了blob分析模块,blob选中区域的外接矩形框中心点就是我们求的螺纹外圈中心(X,Y)。
在这里插入图片描述
第二步
我们可以参考螺纹外接矩形框的大小后,使用圆环展开模块,通过调整圆环内径、外径、起始角度、角度范围、角度方向将圆形展开。结合成像效果,我们主要管控内径最终我们选择
外径:外接矩形框宽/2 + + + 150
内径:外接矩形框宽/2 − - 60
在这里插入图片描述
第三步
我们查看图片发现仍然有不少脏污影响成像,这里可以使用blob分析模块、形态学处理模块或图像滤波等模块,我选择了blob分析模块。
在这里插入图片描述在这里插入图片描述
针对这个问题,继续观察相似图片是否存在共同点。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
观察根据上述图片,我们发现第一张图片的起点可能处于图片的临界边缘,为了降低误判的可能性,我们可以加大图像范围,选择2个圆环展开配合图像拼接。
第四步
使用2个圆环展开模块进行展开后,使用图像拼接模块进行图像硬拼接,可以避免图像中的螺纹起始特征处于图像的临界边缘从而漏检。
在这里插入图片描述
拼接后,螺纹起点在图像中的位置发生改变,一共展开了540度,所以存在180度的图像重合。根据图像效果,增加图像组合模块腐蚀白色区域,让线条更加平滑。效果如下:
在这里插入图片描述根据之前观察,发现图像无法使用模板匹配以及顶点检测来寻找螺纹起点,但是发现几个图像特征:

  1. 螺纹起点的右侧为黑色连通区域,是否能使用图像处理将对应的黑色连通区域找到并输出0度外接矩形框的左侧边缘起点(测试发现部分有干扰,导致图像不兼容,思路PASS
  2. 观察螺纹起点附近白色区域,发现如果从上往下从百到黑进行采样,相邻点存在Y方向的落差,如下图的1与2所示。但要避免找错找到3与4,还需要一个参照物防呆,我们选择螺丝外圈(蓝线)进行对比,靠近蓝线的才是起点。
    在这里插入图片描述下一步,需要对螺丝外圈从下到上、从黑到白,选取第一条进行采样,再对图像从上到下、从黑到白,选取第一条进行采样。
    第五步
    由于需要大批量的数据采样,此处使用直线查找模块进行数据采样,上边采样来获取数据后续计算相邻点位是否存在Y轴跳变,通过底边采样获取的数据后续会对存在相邻点位Y值跳变的点位进行二次评判,判断是否为真实起点。
    但是遇到一个问题,当白色连通域与图像上边沿重叠,直线查找无法正常采样使用。如下图所示,我们想要找到黄色的线,但实际只能找到绿色的线。
    在这里插入图片描述
    第六步
    使用图像拼接模块上下拼接,确保直线查找模块的能够正常使用。为让采样不剔除,我们将剔除点数设置为0,剔除距离设大。
    在这里插入图片描述最终,我们得到了以下效果:
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    第七步
    将采集的数据进行汇总收集,转换的字符串作为后面脚本模块的输入。
    在这里插入图片描述
    第八步
    通过脚本模块将输入的点位数据进行处理。VM的脚本模块支持C#语言编写,整理思路并对数据处理。
    脚本思路:
    第一步筛选,将每个相邻点的Y做差,得到dy=Y(n+1)-Y(n),将所有的dy进行排列,选取最大的5个,然后进行第二步筛选。
    第二步筛选,将目标点分别对比相同X对应的底边Y,若底边与目标点的距离非常大,则不是边缘起始点。然后进行第三步
    第三步筛选,将剩下的点进行自定义的防呆,根据测试,添加Y(N+5) − - Y(N-5) > > > 15。
    最后将剩下的点进行排列,差值最大的就是待输出的目标对象。
    示例代码如下:
using System;
using System.Text;
using System.Windows.Forms;
using Script.Methods;
public partial class UserScript:ScriptMethods,IProcessMethods
{
    //the count of process
	//执行次数计数
    int processCount ;  
    string Y;
    string CompareY;
    int ccount;

    /// <summary>
    /// Initialize the field's value when compiling
	/// 预编译时变量初始化
    /// </summary>
    public void Init()
    {
        //You can add other global fields here
		//变量初始化,其余变量可在该函数中添加
        processCount = 0;
    }
    public bool Process()
    {
        //You can add your codes here, for realizing your desired function
		//每次执行将进入该函数,此处添加所需的逻辑流程处理
		//底边的参考值
		GetIntValue("CCount",ref ccount);
		GetStringValue("DownY",ref CompareY);
		string [] CompareYList= CompareY.Split(',');
		//直线采样的离散值
        GetStringValue("Ylist",ref Y);
        string [] ylist= Y.Split(',');
        int count=ylist.Length;
        SetIntValue("count",count);
        //对直线离散值转换为float
        float[] Yvalue=new float[count];
         for(int i=0;i<count;i++)
       	{
         Yvalue[i]=float.Parse(ylist[i]);
        }
         //对离散值相邻做差
       float [] sublist=new float[ccount];
       for(int i=0;i<(ccount-5);i++)
       	{
         sublist[i]=Yvalue[i+1]-Yvalue[i];
        }
       //拷贝相邻做差的集合并排序
        float [] sublistcopy=new float[ccount];
        sublistcopy=(float[])sublist.Clone();
        Array.Sort(sublistcopy);
        
        //找到相邻差值最大的五个值的索引
        int index1=Array.IndexOf(sublist,sublistcopy[(ccount-1)]);
        int index2=Array.IndexOf(sublist,sublistcopy[(ccount-2)]);
        int index3=Array.IndexOf(sublist,sublistcopy[(ccount-3)]);
        int index4=Array.IndexOf(sublist,sublistcopy[(ccount-4)]);
        int index5=Array.IndexOf(sublist,sublistcopy[(ccount-5)]);
        //将5个索引丢进一个集合
        int[] indexlist=new System.Int32[5]{index1,index2,index3,index4,index5}; 
       //将这五个索引值对应的离散点Y-底边Y
        float[]result=new float[5];
        result[0]=float.Parse(CompareYList[index1])-Yvalue[index1];
        result[1]=float.Parse(CompareYList[index2])-Yvalue[index2];
        result[2]=float.Parse(CompareYList[index3])-Yvalue[index3];
        result[3]=float.Parse(CompareYList[index4])-Yvalue[index4];
        result[4]=float.Parse(CompareYList[index5])-Yvalue[index5];
        //将得到的值进行汇总并拷贝排序
        float[]resultCopy=new float[5];
        resultCopy=(float[])result.Clone();
        Array.Sort(resultCopy);
        //
          for(int i=0;i<5;i++)
       	{
             int index= indexlist[i];
             SetIntValue("index",index);
             if(result[i]<60&&sublist[indexlist[i]]>5&&((Yvalue[index+5]-Yvalue[index-5])>15))
             {
             SetFloatValue("result",sublist[indexlist[i]]);
             SetFloatValue("tobottom",result[i]);
             break;
             }else
             	{
             SetFloatValue("result",0);
             SetFloatValue("tobottom",0);
             SetIntValue("index",0);
             }
        }
        return true;
    }
}

第九步:
步骤8已计算出起点所在采样集合的对应索引,我们使用几何创建模块,将得到的集合索引绑定(X,Y)数据以直观的形式展现,帮助确定起点是否查找正确。
在这里插入图片描述经过跑图测试,稳定性不错。接下来进行最后一步,将找到的点X,逆推回原图之中,最后确认R。
R = = = 540 ∗ * 目标X / / / 展开画面长
第十步:
变量计算模块可以进行简单的数学运算,用它来计算起点的X坐标与画面宽度的比例来计算起点在原始图像中的角度信息。使用几何创建模块来渲染显示,拟合直线的角度就是待求的R。
在这里插入图片描述
剩下就是标定转换,不再过多介绍。
经过上述十步操作,我们使用100余张图片图像进行测试,准确率达到97%以上。

总结

在这里插入图片描述

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: Halcon测量螺纹使用的器材主要包括测量仪器和辅助工具。 首先是测量仪器,常用的有光学测量影像处理系统。这种系统利用光学设备和计算机技术,通过获取螺纹的影像数据并进行处理,实现对螺纹尺寸、形状、精度等参数的测量。光学测量影像处理系统具有快速、准确、非接触等优点,能够适应各种螺纹测量需求。 除了光学测量影像处理系统,还可以使用投影测量仪、激光扫描仪等传感器来进行螺纹测量。这些仪器能够捕捉螺纹的三维几何信息,结合相应的软件进行分析和测量,从而获得螺纹的各项参数。 其次是辅助工具,包括测量夹具、测量工位等。测量夹具用于固定待测螺纹样本,防止其在测量过程中产生移动或摇晃,以保证测量结果的准确性。测量工位则提供了一个有利于操作和检测螺纹的工作环境,例如倾斜角度、光线条件等。 此外,还可以结合常规的测量设备,如千分尺、游标卡尺等手动测量工具,用于在实际测量中对螺纹进行初步的尺寸测量。 总的来说,Halcon测量螺纹使用的器材主要包括光学测量影像处理系统、投影测量仪、激光扫描仪等测量仪器,以及测量夹具、测量工位等辅助工具,同时也可以结合常规的手动测量工具进行测量。这些器材的使用可以有效地实现对螺纹测量任务。 ### 回答2: Halcon是一种用于测量螺纹的高精度测量工具。它由一组特殊设计的测量器材组成,用于检测和量化螺纹的细微差异和几何参数。 首先,Halcon测量螺纹需要使用一台高精度测量仪器,例如三坐标测量机或投影测量仪,以确保测量结果的准确性和稳定性。 其次,针对螺纹的特殊形状与尺寸,还需要使用相应的测量夹具。这些夹具通常由专门的设计师根据螺纹的要求制作,以确保被测量螺纹能够保持稳定的位置和角度。 此外,为了对螺纹进行高精度的测量,还需要使用一些辅助器材,例如高精度测量针或测量探针。这些针或探针通常由特殊的材料制成,并经过精细加工,以确保其具有尖锐的测量端和较低的表面粗糙度,从而实现更精确的测量结果。 另外,Halcon测量螺纹还需要使用一些特殊的测量软件。这些软件通常由Halcon公司提供,并具有专门用于螺纹测量算法和功能。这些软件可以与测量仪器和控制系统进行连接,实时获取并处理螺纹测量数据,并提供准确的测量结果和分析。 综上所述,Halcon测量螺纹所需的器材包括高精度测量仪器、测量夹具、测量针或探针,以及专门的测量软件。这些器材的协调使用可以有效地实现对螺纹的精确测量和分析。 ### 回答3: Halcon是一种常用于工业测量图像处理的软件平台,它广泛应用螺纹测量中。测量螺纹所需的器材通常包括以下几种: 1. 显微镜:用于放大螺纹的图像,以便进行精确的测量。常见的显微镜类型包括光学显微镜和电子显微镜。 2. 光源:提供足够亮度的光线,用于照亮待测螺纹,确保螺纹轮廓清晰可见。光源可以是LED灯或者其他光源设备。 3. 高精度测量仪器:可用于测量螺纹的几何参数,如直径、步距、棱角等。常见的测量仪器包括千分尺、千分表、投影仪等。 4. 相机:用于拍摄螺纹的图像。相机的选择应根据螺纹尺寸、要求的分辨率和测量精度等因素来确定。 5. 计算机:用于安装Halcon软件平台,进行螺纹图像的分析和测量。 除了以上基本器材外,根据具体的螺纹测量任务,还可能需要一些辅助装置,如夹具固定待测螺纹、滑台用于移动样品等。 总之,Halcon测量螺纹所需的器材包括显微镜、光源、高精度测量仪器、相机以及计算机等。这些器材的选用应根据具体需求和测量精度要求来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值