Halcon学习之create_shape_model案例分解

avatar
作者
猴君
阅读量:0

示例程序: 

*将图像限定在模型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)

  1. ImageROI(输入):指明用于创建形状模型的输入图像或图像区域(ROI)。这是之前通过 create_shape_model 算子创建形状模型时所使用的图像或区域。

  2. ShapeModelImage(输出):输出的形状模型图像。这个图像是由形状模型的轮廓绘制而成的,可以用于可视化模型的形状。它帮助用户确认模型是否正确捕捉了目标对象的关键特征。

  3. ShapeModelRegion(输出):输出的形状模型区域。这是一个二值区域,表示形状模型在图像中的位置和形状。该区域与 ShapeModelImage 相关联,用于可视化模型在图像中的实际覆盖范围。

  4. Background(输入):背景灰度值。该值用于设置 ShapeModelImage 的背景灰度级别。常用的设置有 0(黑色背景)和 255(白色背景),或者介于两者之间的灰度值。这有助于在不同的对比度条件下更好地查看模型的轮廓。

  5. 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)

  1. ShapeModel(输出):输出的形状模型轮廓。这个参数返回一组 XLD 轮廓对象,这些对象表示形状模型中的轮廓线。这些轮廓可以用于进一步的处理或可视化,以查看形状模型的具体细节。

  2. ModelID(输入):形状模型的句柄,即通过 create_shape_model 创建的形状模型的标识符。该句柄用于指定要提取轮廓的具体形状模型。

  3. 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)

参数说明:

  1. Image (输入): 要在其中搜索模型的输入图像。
  2. ModelID (输入): 通过 create_shape_model 创建的形状模型的ID。
  3. AngleStart (输入): 搜索的起始角度,以弧度为单位。0 表示无旋转。
  4. AngleExtent (输入): 搜索的角度范围,以弧度为单位。例如,0 表示无角度搜索,π 表示从 -π/2 到 +π/2 的搜索范围。
  5. MinScore (输入): 匹配的最低分数。值在 0 到 1 之间,表示模型匹配的最低置信度。
  6. NumMatches (输入): 期望找到的匹配数量。如果设置为 0,则找到所有可能的匹配。
  7. MaxOverlap (输入): 允许的最大重叠比例。值在 0 到 1 之间。较小的值会避免找到多个相似的匹配。
  8. SubPixel (输入): 是否启用亚像素级别的精度。可以设置为 'true'、'false' 或 'none'。
  9. NumLevels (输入): 金字塔层数,用于加速匹配过程。值为 0 表示不使用金字塔。
  10. Greediness (输入): 贪婪系数,用于控制匹配算法的速度和精度。值在 0 到 1 之间,值越大越贪婪,匹配速度越快,但可能精度降低。

输出:

  1. Row (输出): 找到的模型中心的行坐标。
  2. Column (输出): 找到的模型中心的列坐标。
  3. Angle (输出): 找到的模型的旋转角度,以弧度为单位。
  4. 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)。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!