示例程序:
*将图像限定在模型ROI区域内。 reduce_domain (ModelImage, ModelROI, ImageROI) *创建一个形状模型,其中包括旋转角度、极性和精度等参数,结果存储在 ModelID 中。 create_shape_model (ImageROI, 4, 0, 0, 'auto', 'none', 'use_polarity', 30, 10, ModelID) *检查形状模型,显示模型图像和区域。 inspect_shape_model (ImageROI, ShapeModelImage, ShapeModelRegion, 1, 30) *获取形状模型的轮廓。 get_shape_model_contours (ModelContours, ModelID, 1) *在图像中找到模版匹配的对象 find_shape_model(Image, ModelID1, 0, 0, 0.8, 0, 0.5, 'least_squares', 0, 0.7, Rows, Columns, Angles, Score1) if (|Score1| > 0) for i := 0 to |Score1| - 1 by 1 *对于每个匹配的对象,计算仿射变换,确定对象的位移和旋转角度。 vector_angle_to_rigid (0, 0, 0, Rows[i], Columns[i], Angles[i], MovementOfObject) *对于每个匹配的对象。轮廓进行仿射变换 affine_trans_contour_xld (ModelContours, ModelAtNewPosition, MovementOfObject) dev_display (ModelAtNewPosition) endfor endif stop ()
create_shape_model:
create_shape_model是 HALCON 中用于创建形状匹配模型的算子。形状匹配是一种计算机视觉技术,用于在图像中找到特定形状的对象。该算子创建的模型可以用来检测和定位图像中的特定形状。
算子解析:create_shape_model (Image : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, MinContrast, Contrast : ModelID)
ImageROI:输入的图像或区域(ROI),即要基于其创建形状模型的图像部分。
NumLevels:金字塔层级数,表示用于匹配的图像金字塔层数。较多的层级可以加快匹配速度,但可能降低精度。设置为 4 意味着使用 4 层金字塔。
AngleStart:形状模型旋转的起始角度(单位:弧度)。例如,0 表示从 0 度开始。
AngleExtent:旋转角度范围(单位:弧度)。例如,0 表示不旋转,
2*pi
表示全360度旋转。此处设置为 0 表示不进行旋转搜索。AngleStep:角度步长(单位:弧度)。表示在角度范围内进行旋转的步长。设置为 'auto' 表示由系统自动选择合适的步长。
Optimization:优化选项,影响形状模型创建时的速度和精度。常见的设置包括 'none' 和 'point_reduction'。设置为 'none' 表示不进行优化。
Metric:度量方法,用于定义如何衡量图像中的点与形状模型的匹配程度。常用选项有 'use_polarity'、'ignore_global_polarity' 等。'use_polarity' 表示使用极性信息,这有助于更准确地匹配对比度反转的区域。
Contrast:对比度参数(用于模型创建时使用),对比度在这里指的是图像中像素灰度值的变化率,表示一个像素与其邻域像素之间灰度值的差异。对比度值越大,边缘越明显。用于过滤噪声。如果
Contrast
设置得高,只有非常明显的边缘(即灰度值变化很大的地方)才会被包括在形状模型中。这样做的好处是可以减少噪声的影响,因为较小的对比度变化(通常是由噪声引起的)会被忽略。设置为 30 表示只有对比度大于 30 的边缘才会被考虑。MinContrast:最小对比度参数(用于检测对象时使用),它决定了模型匹配过程中考虑的最低边缘强度。值越高,模型在匹配过程中忽略的弱边缘越多,从而减少噪声干扰。设置为 10 表示忽略对比度小于 10 的边缘。
ModelID:输出参数,用于存储生成的形状模型的句柄。这个句柄是后续匹配操作所需的关键。
inspect_shape_model
:
inspect_shape_model
是 HALCON 图像处理库中的一个算子,用于检查和可视化已经创建的形状模型。该算子生成可视化的形状模型图像和区域,以便用户了解模型的结构和特征,验证模型是否正确。
算子解析:inspect_shape_model (Image : ShapeModelImage, ShapeModelRegion : ModelID, ModelImage, NumLevels, Threshold)
ImageROI(输入):指明用于创建形状模型的输入图像或图像区域(ROI)。这是之前通过
create_shape_model
算子创建形状模型时所使用的图像或区域。ShapeModelImage(输出):输出的形状模型图像。这个图像是由形状模型的轮廓绘制而成的,可以用于可视化模型的形状。它帮助用户确认模型是否正确捕捉了目标对象的关键特征。
ShapeModelRegion(输出):输出的形状模型区域。这是一个二值区域,表示形状模型在图像中的位置和形状。该区域与
ShapeModelImage
相关联,用于可视化模型在图像中的实际覆盖范围。Background(输入):背景灰度值。该值用于设置
ShapeModelImage
的背景灰度级别。常用的设置有 0(黑色背景)和 255(白色背景),或者介于两者之间的灰度值。这有助于在不同的对比度条件下更好地查看模型的轮廓。Quality(输入):质量参数,影响形状模型图像的生成方式。常用的值范围在 1 到 100 之间,其中 1 表示最低质量,100 表示最高质量。较高的质量值会生成更详细的模型图像,但也可能需要更多的计算时间。
get_shape_model_contours
:
get_shape_model_contours
是 HALCON 中用于获取形状模型轮廓的算子。该算子从已经创建的形状模型中提取轮廓,并返回表示这些轮廓的 XLD(eXtended Line Description)对象。XLD 对象是 HALCON 用于表示几何图形(如轮廓、边界等)的数据结构。
算子解析:get_shape_model_contours (ShapeModelContours, ModelID, Level)
ShapeModel(输出):输出的形状模型轮廓。这个参数返回一组 XLD 轮廓对象,这些对象表示形状模型中的轮廓线。这些轮廓可以用于进一步的处理或可视化,以查看形状模型的具体细节。
ModelID(输入):形状模型的句柄,即通过
create_shape_model
创建的形状模型的标识符。该句柄用于指定要提取轮廓的具体形状模型。Level(输入):用于控制返回的轮廓的金字塔层级。形状模型可以在不同的分辨率层级上进行创建和存储。此参数决定从哪一层提取轮廓。通常,层级从 1 开始,表示最高分辨率层级。较高的层级表示更低的分辨率,这些层级可能包含更简化的轮廓。
find_shape_model
:
find_shape_model
是 HALCON 图像处理库中的一个算子,用于在图像中查找事先创建的形状模型。这是一个常用的匹配算法,可以用于图像识别、物体检测等场景。
算子解析:find_shape_model(Image: Hobject, ModelID: HTuple, AngleStart: HTuple, AngleExtent: HTuple, MinScore: HTuple,NumMatches: HTuple, MaxOverlap: HTuple, SubPixel: HTuple, NumLevels: HTuple,Greediness: HTuple, Row: HTuple, Column: HTuple, Angle: HTuple, Score: HTuple)
参数说明:
- Image (输入): 要在其中搜索模型的输入图像。
- ModelID (输入): 通过
create_shape_model
创建的形状模型的ID。 - AngleStart (输入): 搜索的起始角度,以弧度为单位。0 表示无旋转。
- AngleExtent (输入): 搜索的角度范围,以弧度为单位。例如,0 表示无角度搜索,
π
表示从 -π/2 到 +π/2 的搜索范围。 - MinScore (输入): 匹配的最低分数。值在 0 到 1 之间,表示模型匹配的最低置信度。
- NumMatches (输入): 期望找到的匹配数量。如果设置为 0,则找到所有可能的匹配。
- MaxOverlap (输入): 允许的最大重叠比例。值在 0 到 1 之间。较小的值会避免找到多个相似的匹配。
- SubPixel (输入): 是否启用亚像素级别的精度。可以设置为 'true'、'false' 或 'none'。
- NumLevels (输入): 金字塔层数,用于加速匹配过程。值为 0 表示不使用金字塔。
- Greediness (输入): 贪婪系数,用于控制匹配算法的速度和精度。值在 0 到 1 之间,值越大越贪婪,匹配速度越快,但可能精度降低。
输出:
- Row (输出): 找到的模型中心的行坐标。
- Column (输出): 找到的模型中心的列坐标。
- Angle (输出): 找到的模型的旋转角度,以弧度为单位。
- Score (输出): 匹配得分,表示匹配的置信度。
vector_angle_to_rigid :
vector_angle_to_rigid
是 HALCON 函数, 用于计算一个从参考坐标系(RefRow, RefColumn, RefAngle)到目标坐标系(Row, Column, Angle)的刚性变换矩阵。该矩阵可以用于将图像中的点、区域或轮廓从一个坐标系变换到另一个坐标系。
算子解析:vector_angle_to_rigid (RefRow, RefColumn, RefAngle, Row, Column, Angle, HomMat2D)
- RefRow: 输入参数。参考点的行坐标(y 坐标)。
- RefColumn: 输入参数。参考点的列坐标(x 坐标)。
- RefAngle: 输入参数。参考点的角度。
- Row: 输入参数。目标点的行坐标(y 坐标)。
- Column: 输入参数。目标点的列坐标(x 坐标)。
- Angle: 输入参数。目标点的角度。
- HomMat2D: 输出参数。二维刚性变换矩阵(Homogeneous Matrix)。
affine_trans_contour_xld:
affine_trans_contour_xld
用于将仿射变换矩阵应用到 XLD 轮廓对象上,从而对轮廓进行平移、旋转、缩放和剪切等变换。该函数在机器视觉、图像处理和计算机视觉应用中广泛使用,用于调整图像中对象的位置和形状。
算子解析:affine_trans_contour_xld (ModelContours, ModelAtNewPosition, HomMat2D)
- ModelContours: 输入参数。要进行仿射变换的 XLD 轮廓对象。
- ModelAtNewPosition: 输出参数。变换后的 XLD 轮廓对象。
- HomMat2D: 输入参数。定义仿射变换的二维同类矩阵(Homogeneous Matrix)。