在工业生产中,产品的图片对齐一直是决定生产稳定性的大问题。除了硬件保证产品对齐特性外。软件的矫正对齐也很重要。在一些刚性产品生产中,到检测工位,产品表面的轮廓和特征区域基本已经确定。由于来料的不稳定性,和产品自身的加工一致性会存在差异,需要对产品自身根据模板区域进行畸变矫正。下面就是一个基于标准姿态模板定位的方法,输出标准姿态的产品图片,并进行简单的比对,获取缺陷区域。
下面是一个简单的halcon样例:
*读取模板图片
read_image (ModelImage, 'gasket/gasket_model')
*创建模型
create_local_deformable_model (ModelImage, 'auto', [], [], 'auto', 0.9, [], 'auto', 0.9, [], 'auto', 'none', 'use_polarity', 'auto', 'auto', [], [], ModelID)
*循环读取图片
for Index := 1 to 7 by 1
*读取实时图片
read_image (Image, 'gasket/gasket_' + Index$'02')
*进行模板查找
find_local_deformable_model (Image, ImageRectified, VectorField, DeformedContours, ModelID, rad(-10), rad(20), 1, 1, 1, 1, 0.93, 1, 0.7, 0, 0.4, 'image_rectified', 'deformation_smoothness', 200, Score, Row, Column)
*两个图片做差
abs_diff_image (ImageRectified, ModelImage, ImageAbsDiff, 1)
endfor
核心功能:
create_local_deformable_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleRMin, ScaleRMax, ScaleRStep, ScaleCMin, ScaleCMax, ScaleCStep, Optimization, Metric, Contrast, MinContrast, ParamName, ParamValue : ModelID)
Template:输入参数,输入图像,用来创建模型。
NumLevels:输入参数,金字塔(分析法)最大层数。默认'auto',列表【0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto'】。
AngleStart:输入参数,匹配的起始角度。默认[]。
AngleExtent:输入参数,匹配的角度范围。默认[]。
AngleStep:输入参数,角度的步进值。默认'auto',建议值【 'auto', 0.0175, 0.0349, 0.0524, 0.0698, 0.0873】,范围≥0。
ScaleRMin:输入参数,y值方向的最小缩放比例。默认1.0,建议值【0.5, 0.6, 0.7, 0.8, 0.9, 1.0】,范围>0。
ScaleRMax:输入参数,y值方向的最大缩放比例。默认 []。
ScaleRStep:输入参数,y值方向比例缩放的步长。默认 'auto',建议值【 'auto', 0.01, 0.02, 0.05, 0.1, 0.15, 0.2】,范围≥0。
ScaleCMin:输入参数,x值方向的最小缩放比例。默认1.0,建议值【0.5, 0.6, 0.7, 0.8, 0.9, 1.0】,范围>0。
ScaleCMax:输入参数,x值方向的最大缩放比例。默认 []。
ScaleCStep:输入参数,x值方向比例缩放的步长。默认 'auto',建议值【 'auto', 0.01, 0.02, 0.05, 0.1, 0.15, 0.2】,范围≥0。
Optimization:输入参数,提升时间效率的方式(即优化),定义模板定位时使用的特征点的数量,在模板数据量大时有必要降低数据量,以提高定位速度。默认 'none',列表【'auto', 'none', 'point_reduction_high', 'point_reduction_low', 'point_reduction_medium'】。
Metric:输入参数,设置匹配方法,是否使用极性。默认'use_polarity',列表
【
'ignore_color_polarity', 表示匹配过程忽略颜色对比度的变化,一般适用于多通道图像。如果不确定检测时会显示哪个通道的图像,可以选择此项(用在单通道图像上效果与ignore_local_polarity效果相同)。
'ignore_global_polarity', 可以为目标与模板极性完全相反,适用于全局对比度发生变化的情况,表示忽略全局对比度的变化,即匹配过程中的图像对比度可以与模板中的完全相反。例如,模板中是一个暗背景上有一个亮的目标,那么在检索时,即使目标对象很亮而背景很暗,也能匹配成功。
'ignore_local_polarity', 允许部分极性相反,表示忽略局部对比度的变化,如果图像因为光照改变等原因发生局部对比度变化,可以选择这一项。
'ignore_part_polarity',允许不同极性部分之间的变化,极性相同的部分内部不得改变。
'use_polarity'表示匹配得到的图像必须和模板图像的对比度“方向”相同。(即如果使用use_polarity,图像中的对象和模型必须具有相同的对比度。)例如:模板中是一个暗背景上有一个亮的目标,那么在检索时,只有符合匹配条件并且亮度比背景亮的目标才能匹配成功。
其中use_polarity与ignore_globle_polarity仅能用在亚像素精度上。
】。
Contrast:输入参数,模板图像中对象的对比度设置的滞后阈值。默认 'auto',建议值【'auto', 10, 20, 30, 40, 60, 80, 100, 120, 140, 160】。
MinContrast:输入参数,搜索图像中目标的最小对比度。默认'auto',建议值【 'auto', 1, 2, 3, 5, 7, 10, 20, 30, 40】,范围MinContrast < Contrast。
ParamName:输入参数,需要设置的参数的名称。默认 [],列表【 [], 'min_size', 'part_size'】。
ParamValue:输入参数,需要设置的参数的值。默认[],列表【[], 'big', 'medium', 'small'】。
ModelID:输出参数,输出模型句柄。
find_local_deformable_model(Image : ImageRectified, VectorField, DeformedContours : ModelID, AngleStart, AngleExtent, ScaleRMin, ScaleRMax, ScaleCMin, ScaleCMax, MinScore, NumMatches, MaxOverlap, NumLevels, Greediness, ResultType, GenParamName, GenParamValue : Score, Row, Column)
Image:输入参数,输入需要匹配的图像。
ImageRectified:输出参数,输出修正过后的模型图像。
VectorField:输出参数,输出句柄形变模型的变换矩阵。
DeformedContours:输出参数,与模型匹配到的实例。
ModelID:输入参数,输入模型的句柄。
AngleStart:输入参数,匹配的起始角度。默认 -0.39,建议值【-3.14, -1.57, -0.78, -0.39, -0.20, 0.0】。
AngleExtent:输入参数,匹配的角度范围。默认 0.79,建议值【 6.29, 3.14, 1.57, 0.78, 0.39, 0.0】,范围≥0。
ScaleRMin:输入参数,y值方向的最小缩放比例。默认1.0,建议值【0.5, 0.6, 0.7, 0.8, 0.9, 1.0】,范围>0。
ScaleRMax:输入参数,y值方向的最大缩放比例。默认1.0,建议值【1.0, 1.1, 1.2, 1.3, 1.4, 1.5】,范围ScaleRMax >= ScaleRMin。
ScaleCMin:输入参数,x值方向的最小缩放比例。默认1.0,建议值【 0.5, 0.6, 0.7, 0.8, 0.9, 1.0】,范围>0。
ScaleCMax:输入参数,x值方向的最大缩放比例。默认1.0,建议值【 1.0, 1.1, 1.2, 1.3, 1.4, 1.5】,范围ScaleCMax >= ScaleCMin。
MinScore:输入参数,最小的匹配得分。最小的匹配得分。默认0.5,建议值【 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0】,范围0 ≤ MinScore ≤ 1。
NumMatches:输入参数,匹配结果的个数。默认1,建议值【 0, 1, 2, 3, 4, 5, 10, 20】。
MaxOverlap:输入参数,重叠系数。默认1.0,建议值【0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0】,范围 0 ≤ MaxOverlap ≤ 1。
NumLevels:输入参数,金字塔层数。默认0,列表【0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10】。
Greediness:输入参数,贪婪度,查找效率系数。默认0.9,建议值【0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0】,范围 0 ≤ Greediness ≤ 1。
ResultType:输入参数,结果图像模式。默认 [],列表【 [], 'deformed_contours', 'image_rectified', 'vector_field'】。
GenParamName:输入参数,需要设置的参数的名称。默认 [],列表【 [], 'angle_step', 'deformation_smoothness', 'expand_border', 'expand_border_bottom', 'expand_border_left', 'expand_border_right', 'expand_border_top', 'scale_c_step', 'scale_r_step', 'subpixel'】。
GenParamValue:输入参数,需要设置的参数的值。默认 [],列表【[], 'least_squares', 'least_squares_high', 'least_squares_very_high', 'none'】。
Score:输出参数,输出目标模型匹配得分。
Row:输出参数,匹配结果重心的行坐标。
Column:输出参数,匹配结果重心的列坐标。