You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将一个区域适配到另一个区域?Halcon仿射变换求解

Halcon区域匹配获取仿射变换矩阵(HHomMat2D)方法

核心思路是通过提取两个区域的特征关键点或几何参数,计算出对应的仿射变换矩阵,再用affine_trans_region完成区域匹配。以下是具体可落地的步骤:

1. 提取区域的特征/几何参数

方法A:提取轮廓关键点(通用场景)

针对任意形状区域,先提取轮廓再获取稳定关键点:

  • 生成区域轮廓:gen_contour_region_xld(RegionRef, ContourRef, 'border'),对目标区域RegionTarget执行相同操作得到ContourTarget
  • 提取角点/关键点:points_harris(ContourRef, 5, 0.04, 20, RowRef, ColRef),调整参数(窗口大小、响应阈值)适配你的区域;目标区域用同样方法得到RowTarget, ColTarget

方法B:提取规则区域几何参数(规则形状专属)

如果区域是矩形、圆形等规则形状,直接提取核心几何参数:

  • 矩形区域:smallest_rectangle2(RegionRef, RowRefCenter, ColRefCenter, AngleRef, Length1Ref, Length2Ref),得到中心坐标、旋转角、长宽;目标区域同理得到RowTargetCenter, ColTargetCenter, AngleTarget, Length1Target, Length2Target

2. 计算HHomMat2D变换矩阵

场景1:用特征点对计算(通用)

使用vector_to_hom_mat2d,输入至少3对一一对应的特征点即可生成矩阵:

vector_to_hom_mat2d(RowRef, ColRef, RowTarget, ColTarget, HomMat2D)

注意:特征点的顺序必须严格对应(参考区域第i个点对应目标区域第i个点),点数越多计算精度越高。

场景2:用规则区域参数构造(规则形状)

通过分步构造变换矩阵组合出最终结果:

  1. 初始化单位矩阵:hom_mat2d_identity(HomMat2DIdentity)
  2. 将参考区域中心平移到原点:hom_mat2d_translate(HomMat2DIdentity, -RowRefCenter, -ColRefCenter, HomMat2DTranslate1)
  3. 旋转到目标区域角度:hom_mat2d_rotate(HomMat2DTranslate1, AngleTarget - AngleRef, 0, 0, HomMat2DRotate)
  4. 缩放至目标区域尺寸:hom_mat2d_scale(HomMat2DRotate, Length1Target/Length1Ref, Length2Target/Length2Ref, 0, 0, HomMat2DScale)
  5. 平移到目标区域中心:hom_mat2d_translate(HomMat2DScale, RowTargetCenter, ColTargetCenter, HomMat2DFinal)

3. 应用变换并验证

用生成的矩阵处理参考区域,再验证匹配效果:

affine_trans_region(RegionRef, RegionTrans, HomMat2DFinal, 'nearest_neighbor')

可通过计算重叠区域验证:intersection(RegionTrans, RegionTarget, RegionIntersect),根据重叠比例判断匹配精度。

补充提示

  • 若特征点提取不稳定,可先对区域做预处理(如dilation_rectangle1膨胀、smooth_contours_xld平滑轮廓)
  • 若区域存在透视变形,需改用vector_to_proj_hom_mat2d计算投影变换矩阵,配合projective_trans_region处理

内容的提问来源于stack exchange,提问作者Ness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:56:01