Halcon基于形状的模板匹配及坐标转换关系详解 | 您所在的位置:网站首页 › 颜色模板匹配怎么设置 › Halcon基于形状的模板匹配及坐标转换关系详解 |
Halcon模板匹配坐标转换关系详解
预备知识仿射变换及其变换矩阵
Halcon中基于形状的模板匹配过程举例坐标转换原理解析第一步:创建模板第二步:设置原点第三步:匹配模板第四步:坐标转换,得到模板ROI和检测ROI
预备知识
仿射变换及其变换矩阵
本小节参考文章:https://www.cnblogs.com/shine-lee/p/10950963.html 仿射变换(affine transformation)包括平移(translation)、旋转(rotation)、缩放(scaling)、剪切(shear)、镜像( reflection),以及这些变换任意次序任意次数的组合。各种变换的图示如下: 因为基于形状的模板匹配只存在平移和旋转的变换,所以以下只介绍平移和旋转。 因为只做平移和旋转变换,图形的大小和形状不会改变,只是位置发生变化,所以平移和旋转的组合变换又称刚体变换。 假设变换前的二维点坐标为(x,y),变换后的点坐标为(x’,y’); 平移变换矩阵形式表示为:[ x ′ y ′ ] = [ x y ] + [ d x d y ] \left[ \begin{matrix} x' \\ y' \end{matrix} \right] = \left[ \begin{matrix} x\\ y \end{matrix} \right] + \left[ \begin{matrix} dx \\ dy \end{matrix} \right] [x′y′]=[xy]+[dxdy] 其中dx,dy分别为x和y的平移量。 旋转变换矩阵形式表示为:[ x ′ y ′ ] = [ c o s θ − s i n θ s i n θ c o s θ ] ⋅ [ x y ] \left[ \begin{matrix} x' \\ y' \end{matrix} \right] = \left[ \begin{matrix} cosθ&-sinθ\\ sinθ&cosθ \end{matrix} \right]· \left[ \begin{matrix} x \\ y \end{matrix} \right] [x′y′]=[cosθsinθ−sinθcosθ]⋅[xy] 其中θ为绕原点逆时针旋转的角度。 以上是针对一个点在同一个坐标系中的变换,如果存在两个坐标系A和B,点P在A中的坐标为(x,y),在B中的坐标为(x’,y’),则存在如下关系: [ x ′ y ′ 1 ] = [ c o s θ − s i n θ d x s i n θ c o s θ d y 0 0 1 ] ⋅ [ x y 1 ] = T R X \left[ \begin{matrix} x' \\ y'\\ 1 \end{matrix} \right] = \left[ \begin{matrix} cosθ&-sinθ&dx\\ sinθ&cosθ&dy\\ 0&0&1 \end{matrix} \right]· \left[ \begin{matrix} x \\ y\\ 1 \end{matrix} \right]= TRX ⎣⎡x′y′1⎦⎤=⎣⎡cosθsinθ0−sinθcosθ0dxdy1⎦⎤⋅⎣⎡xy1⎦⎤=TRX 其中,dx,dy分别为 O A O_A OA在B中的坐标,θ为由 O B X B O_BX_B OBXB转到 O A X A O_AX_A OAXA的角度,包含符号,逆时针为正,顺时针为负。
https://blog.csdn.net/feidaji/article/details/81358257 Halcon中基于形状的模板匹配过程Halcon中一个完整的模板匹配过程如下: 读取并显示图像;确定模板ROI及检测ROI;创建模型;匹配模板;ROI仿射变换,得到ROI位置。 举例如上图所示,每一张图上芯片的位置和角度不固定,需要定位到绿色框内的针脚进行检测,如果以绿色框作为模板ROI,因为图片上有很多针脚,可能会匹配到其他位置,因此,以红色框作为模板ROI,蓝色框作为检测ROI。 以下是测试效果:
上述例程中涉及到坐标的算子主要有: create_shape_modelset_shape_model_originfind_shape_modelvector_angle_to_rigidaffine_trans_contour_xldaffine_trans_region 第一步:创建模板 create_shape_model (ImageReduced, 4, rad(0), rad(360), 'auto', 'auto', 'ignore_local_polarity', 30, 10, ModelID)算子原型:create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID) –Template :用于创建模板的图像,是原图的模板ROI区域; –NumLevels:金字塔层的最大层数; –AngleStart:模板的最小旋转角度,以弧度为单位; –AngleExtent:旋转角度范围,必须≥0,以弧度为单位;如果超出角度范围,则模型搜索不到 –AngleStep:角度步长,以弧度为单位; –Optimization:生成模型的优化方法; –Metric:模板匹配的条件,在模板与图像亮暗发生反转时可使用; –Contrast:创建模型时,模型点的对比度; –MinContrast :在搜索的图像中,搜索对象的最小对比度,必须<Contrast; –ModelID:模型的句柄。 算子使用时可能出现的错误: 通过帮助文档看到是模板的点数太少,当绘制的模板ROI区域太小,或模板ROI区域内特征不明显时会出现,可以扩大模板ROI区域。 第二步:设置原点 area_center (Rectangle, Area, Row, Column) set_shape_model_origin (ModelID, -Row, -Column)在算子get_shape_model_contours和set_shape_model_origin的帮助文档中有说明:默认情况下,模板轮廓的原点位于模型区域的重心,即通过area_center获取的模板ROI的坐标,如下图所示的坐标系 O 模 X 模 Y 模 O_模X_模Y_模 O模X模Y模是模板轮廓的原始坐标系。 首先使用area_center (Rectangle, Area, Row, Column)获取 O 模 O_模 O模在 O 图 O_图 O图中的坐标; 然后使用set_shape_model_origin (ModelID, -Row, -Column)将 O 模 X 模 Y 模 O_模X_模Y_模 O模X模Y模移动至与 O 图 X 图 Y 图 O_图X_图Y_图 O图X图Y图重合, 第三步:匹配模板 find_shape_model (Image, ModelID, 0, rad(60), 0.4, 1, 0.5, 'least_squares', 0, 0.7, Row3, Column3, Angle, Score)算子原型:find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score) – Image :输入图像; –ModelID:模型的句柄; –AngleStart:模板的最小旋转角度,以弧度为单位; –AngleExtent:旋转角度范围,必须≥0,以弧度为单位;如果超出角度范围,则模型搜索不到 –MinScore:要搜索到的模型实例的最小得分,如果低于此分数,则搜索不到; –NumMatches:要搜索到的模型实例的个数; –MaxOverlap:要找到的模型实例的最大重叠; –SubPixel:确定找到的目标是否使用亚像素精度提取; –NumLevels:搜索过程中使用的金字塔级别的数量 ; –Greediness :搜索启发式的“贪婪度”,(0:安全但缓慢;1:快,但可能匹配不到) –Row:找到的模型实例的行坐标,坐标值是找到模板的原点在图像坐标系中的行坐标; –Column:找到的模型实例的列坐标,坐标值是找到模板的原点在图像坐标系中的列坐标; –Angle:找到的模型实例的角度; –Score: 找到的模型实例的分数。 第四步:坐标转换,得到模板ROI和检测ROI vector_angle_to_rigid (0, 0, 0, Row3, Column3, Angle, HomMat2D) affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D) affine_trans_region (Rectangle1, RegionAffineTrans, HomMat2D, 'false')计算变换矩阵 算子原型:vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D) –Row1:原始点的行坐标; –Column1:原始点的列坐标; –Angle1:原始点的角度; –Row2:变换点的行坐标; –Column2:变换点的列坐标; –Angle2:变换点的角度; –HomMat2D:输出的变换矩阵。 ROI坐标转换 使用算子:affine_trans_contour_xld和affine_trans_region |
CopyRight 2018-2019 实验室设备网 版权所有 |