ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

听听Malcon的原创作者说说Halcon的形状匹配和灰度匹配

2022-05-03 12:31:41  阅读:169  来源: 互联网

标签:匹配 NumLevels Halcon 灰度 识别 模板


Malcon:https://www.cnblogs.com/Malcon/

本人用Halcon差不多有10年了,从当时的Halcon8用到现在的Halcon20,大大小小的很多的工业视觉应用场景都经历过,主要有两类:
第一类:运动控制类设备,如激光焊接和雕刻,丝印机,贴片机,数控机床等自动化设备,视觉就是模板匹配,先做好Mark点,然后在生产中快速进行形状或者灰度模板匹配,定位产品的位置,最后进行焊接或者贴合的工艺动作。这种设备量产最多,市场同行之间竞争很激烈,基本上是标准机,对模板匹配的速度和精度都有很高的要求,一台机器里往往有几个相机和十几个轴,对成本控制的非常严格。
第二类:AOI检测设备,如检孔机、PCB和手机玻璃外观检测,目前很多是非标机,根据客户要求来订制光源镜头相机,视觉功力要深厚些,基本上是先定位,再检测。定位用到的很多是形状或者灰度匹配。
说到这里,回到本文的主题,到底形状和灰度有什么差别或者优缺点呢?Halcon的算子的参数怎么设定呢?可以分别应用在什么场合呢?市场上商用的其他工业软件库品牌收费和特点怎样呢?
推荐看看中国的Malcon跟德国的Halcon的相比的优缺点
https://blog.csdn.net/lindrs/article/details/114113280

模板匹配特点:
形状匹配,find_shape_model,顾名思义,就是用产品的形状来做匹配,或者说是产品边缘来做匹配,Halcon的形状匹配可以做到即使存在严重遮挡、混乱或非线性光照变化,也能实现极高的识别率;
灰度匹配,find_ncc_model,就是框什么就识别什么,不仅识别产品的边缘,也识别产品本身的内部的信息,即使存在线性均匀的光照变化,也能识别,非线性的光照变化的话,识别不了,出来的分数很低,有个相似度的公式,比较复杂,这里就不做说明,感兴趣可以网上搜索下,很多资料。

优缺点和应用场合分析:
形状匹配:Halcon的识别算法有个公式,在其帮助文档里,大概原理是在做产品模板时候提取每个边缘点的XY方向信息和梯度值,然后在生产时,先计算搜索图的每一个点的XY方向信息和梯度值,在每一个点的位置上,循环跟模板每一个边缘点进行汇总比较,得分值在0-1之间。显而易见,如果边缘点个数比较多的话,就用时较多;因为比较的是模板边缘点,即使产品本身被遮挡了,只有其边缘还能提取出来部分大于你设定的分数阈值,产品还是能识别出来的,主要应用场合是在有多个产品的识别要求,放在流水线上或者传送带上,用机械手抓取的。
NCC灰度匹配的公式很多年前就已经提出来了,很成熟,市场上很多商用软件包括Halcon,都包含有对应的模块,并且相对于形状匹配来说价格一套可以便宜几千块,识别速度很快,精度也能达到亚像素,上边说的第一类设备基本上都是用灰度匹配,因为其用的LED光源光照均匀,即使作业员调暗或者调亮光源或者改变相机的曝光时间,都能准确识别出来。在做产品时,往往只有一个产品,不需要识别遮挡、混乱的情况,并且有时若是有遮挡,相当于产品粘合在一起,必须报警,所以从根本上就不能用形状匹配的。

两者参数设定:
create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization,Metric, Contrast, MinContrast : ModelID)
create_ncc_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Metric : ModelID)
两者相同的参数基本上应用设定上的含义也相同,除了最后一个模板ID是输出外,其他的参数都是输入的,都是要设定的,
1、Template,可以由gen_rectangle1()生成一个矩形后用reduce_domain()会得到这个图像区域的ROI;
2、NumLevels,金字塔的层数,一般设为‘auto’,由Halcon自动由模板图像计算出,层数太少,耗时,层数太多,有可能找不到对象;
3、AngleStart,产品搜索的开始角度,单位是弧度,一般根据产品放置的方向来决定,以向上12点钟方向为基准,Halcon默认参数是-0.39,转换为角度单位是-0.3960=-24度,就是以向上12点钟方向为基准,向左的逆时针的24度为识别的开始角度;
4、AngleExtent:从开始角度延伸的识别角度,单位也是弧度,Halcon默认参数是0.79,转换为角度单位是0.7960=48度,结合刚才的-24度,就是说设定的识别角度范围为负24-正24,以向上12点钟方向为基准。
5、AngleStep:识别的角度每一次的步进值,单位是弧度,一般设为‘auto’,由Halcon自动由模板图像计算出,步进太少,耗时,步进太多,有可能找不到对象;假如你自己想设定为0.02,转换为角度单位是0.02*60=1.2度,就是第一次识别为-24度,第二次-22.8度,第三次-21.6度。。。。。。
6、Optimization,一般设为‘auto’,由Halcon自动由模板图像计算出,对于模板尺寸比较大的话,会自动减少模板的候选边缘点,减少内存和加快速度;
7、Metric:设为’use_polarity’,就是产品和背景要跟你做模板时候一样的对比度;设为Ignor_polarity,就是不一样的对比度也能识别出来;
8、Contrast:一般设为‘auto’,决定边缘候选点和最小尺寸的单个的模板部分。
9、MinContrast:一般设为‘auto’,物体是否具有较低的对比度,如果要求物体在任何状态下都能被识别,则应减小MinContrast值;
10、ModelID:模板的ID号,一般从0开始,创建后由FindModel来调用;

find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap,SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)
find_ncc_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap,SubPixel, NumLevels : Row, Column, Angle, Score)
以上的参数除了最后的4个是输出的YX角度分数信息外,其他的参数都是要输入的,
1、Image:搜索图,可能包含多个产品;
2、ModelID:之前创建的模板的ID号;
3、AngleStart, AngleExtent,跟以上的创建模板的一样的解释;
4、MinScore:要识别的最小的分数值,0-1的范围,0越不像,1越像;
5、NumMatches:要识别的对象的个数,Halcon会将识别出来的多个对象的分数值进行从高到低的排序,只有大于设定的最小分数值的对象才能识别出来;
6、MaxOverlap:最大的重叠的范围,由模板的最小紧贴的有角度的包含的矩形来计算重合范围;
7、SubPixel:默认设为:‘least_squares’,如果不需要太高精度,设为none,坐标就没有小数点,设为interpolation,有小数点,就是多项式拟合出来的结果,不会占用太多时间,设为’least_square’,’lease_square_high’,精度最高但这样会增加额外的时间;
8、NumLevels是在搜索时使用的金字塔层数,如果NumLevels=0,使用创建模板时金字塔的层数。另外NumLevels还可以包含第二个参数,这个参数定义了找到匹配模板的最低金字塔层数。NumLevels=[4,2]表示匹配在第四层金字塔开始,在第二层金字塔找到匹配(最低的设为1)。
9、Greediness :默认0.9,搜索时的“贪婪程度”,Halcon作者说如果设置Greediness=0.9,在几乎所有的情况下,总能找到模型的匹配。设置的越小,越早退出判断的循环,越有可能找不到对象。
10、Row, Column,出来的YX坐标,可以包含多个对象
11、Angle, 出来的角度坐标,单位为弧度,由三点钟方向为基准,顺时针为正,逆时针为负;
12、Score:0-1的识别出来的分数值,0越不像,1越像;
最后退出程序或者更换品种,记得ClearShapeModel或者ClearNccModel一下;

市场上商用的其他工业软件库品牌收费和特点怎样呢?
Halcon:形状和灰度分别大概5K左右,只是运行版本;
MIL:形状5K,灰度2K;
Cognex:大概多少,得问下…
Malcon:性价比最高。

标签:匹配,NumLevels,Halcon,灰度,识别,模板
来源: https://www.cnblogs.com/chinasoft/p/16218099.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有