align_metrology_modelT_align_metrology_modelAlignMetrologyModelAlignMetrologyModelalign_metrology_model对齐计量模型(算子)
名称
align_metrology_modelT_align_metrology_modelAlignMetrologyModelAlignMetrologyModelalign_metrology_model — 计量模型的对齐。
签名
描述
align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model 可将整个计量模型 MetrologyHandleMetrologyHandleMetrologyHandleMetrologyHandlemetrologyHandlemetrology_handle 相对于图像坐标系进行平移和旋转操作,该坐标系的原点位于图像左上角。
有关二维计量概念的说明,请参阅 二维计量 一章的引言。
对齐操作确保计量模型的位置和方向与当前图像中待测对象相匹配。然后,apply_metrology_modelapply_metrology_modelApplyMetrologyModelApplyMetrologyModelApplyMetrologyModelapply_metrology_model 使用对齐进行测量。首先,计量模型按 AngleAngleAngleAngleangleangle 旋转,随后按 RowRowRowRowrowrow 和 ColumnColumnColumnColumncolumncolumn 平移。对齐值将在下次调用 align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model 时被覆盖。
对齐参数的计算
对齐参数可通过多种方法确定。此处列出三种确定参数的可能性:
- 使用区域分析:
-
若能通过区域处理提取计量模型,且该区域在后续图像中的姿态变化微小,则可利用区域分析推导出计量模型参考系及对齐的参数。下图中采用 thresholdthresholdThresholdThresholdThresholdthreshold 和 smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2smallest_rectangle2 获取了这些参数。
-
设置参考系统
在定义计量模型的图像中,提取包含计量对象的区域。通过 set_metrology_model_paramset_metrology_model_paramSetMetrologyModelParamSetMetrologyModelParamSetMetrologyModelParamset_metrology_model_param 确定该区域相对于图像坐标系的位置姿态,并将其设置为计量模型的参考系统。此步骤仅在建立计量模型时执行一次。
示例:
threshold(Image, Region, 0, 50)threshold(Image, Region, 0, 50)Threshold(Image, Region, 0, 50)Threshold(Image, Region, 0, 50)Threshold(Image, Region, 0, 50)threshold(Image, Region, 0, 50)
smallest_rectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)smallest_rectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)SmallestRectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)SmallestRectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)SmallestRectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)smallest_rectangle2(Region, RowOrig, ColumnOrig, AngleOrig,
Length1, Length2)
set_metrology_model_param(MetrologyHandle, 'reference_system',
[RowOrig, ColumnOrig, AngleOrig])set_metrology_model_param(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])set_metrology_model_param(MetrologyHandle, "reference_system",
[RowOrig, ColumnOrig, AngleOrig])
-
确定对齐方式
在计量模型处于不同姿态的图像中,将确定所提取区域的当前姿态。随后利用该姿态对计量模型进行对齐。
示例:
threshold(CurrentImage, Region, 0, 50)threshold(CurrentImage, Region, 0, 50)Threshold(CurrentImage, Region, 0, 50)Threshold(CurrentImage, Region, 0, 50)Threshold(CurrentImage, Region, 0, 50)threshold(CurrentImage, Region, 0, 50)
smallest_rectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)smallest_rectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)SmallestRectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)SmallestRectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)SmallestRectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)smallest_rectangle2(Region, RowAlign, ColumnAlign, AngleAlign,
Length1, Length2)
align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)
- 使用形状模型:
-
若使用形状模型对计量模型进行对齐,则需设置计量对象所基于的参考系统,使其与形状模型使用的坐标系完全一致。此时,get_generic_shape_model_resultget_generic_shape_model_resultGetGenericShapeModelResultGetGenericShapeModelResultGetGenericShapeModelResultget_generic_shape_model_result 的输出结果 ('row'"row""row""row""row""row", 'column'"column""column""column""column""column", 'angle'"angle""angle""angle""angle""angle") 可直接用于 align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model,实现当前图像中计量模型的对齐。具体操作步骤如下所示:
-
设置参考系统
在定义计量模型的图像中,通过 set_metrology_model_paramset_metrology_model_paramSetMetrologyModelParamSetMetrologyModelParamSetMetrologyModelParamset_metrology_model_param 确定形状模型的原点姿态,并将其设定为计量模型的参考系统。此步骤仅在建立计量模型时执行一次。
示例:
train_generic_shape_model(Image, ModelID)train_generic_shape_model(Image, ModelID)TrainGenericShapeModel(Image, ModelID)TrainGenericShapeModel(Image, ModelID)TrainGenericShapeModel(Image, ModelID)train_generic_shape_model(Image, ModelID)
area_center(Image, Area, RowOrig, ColumnOrig)area_center(Image, Area, RowOrig, ColumnOrig)AreaCenter(Image, Area, RowOrig, ColumnOrig)AreaCenter(Image, Area, RowOrig, ColumnOrig)AreaCenter(Image, Area, RowOrig, ColumnOrig)area_center(Image, Area, RowOrig, ColumnOrig)
set_metrology_model_param(MetrologyHandle, 'reference_system',
[RowOrig,ColumnOrig,0])set_metrology_model_param(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])SetMetrologyModelParam(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])set_metrology_model_param(MetrologyHandle, "reference_system",
[RowOrig,ColumnOrig,0])
-
确定对齐方式
在图像中,当待测对象呈现不同姿态时,需通过 align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model 确定形状模型的当前姿态,并将其设置到计量模型中。
示例:
find_generic_shape_model(CurrentImage, ModelID, MatchResultID,
NumMatchResult)find_generic_shape_model(CurrentImage, ModelID, MatchResultID,
NumMatchResult)FindGenericShapeModel(CurrentImage, ModelID, MatchResultID,
NumMatchResult)FindGenericShapeModel(CurrentImage, ModelID, MatchResultID,
NumMatchResult)FindGenericShapeModel(CurrentImage, ModelID, MatchResultID,
NumMatchResult)find_generic_shape_model(CurrentImage, ModelID, MatchResultID,
NumMatchResult)
get_generic_shape_model_result(MatchResultID, 'all', 'row',
RowAlign)get_generic_shape_model_result(MatchResultID, "all", "row",
RowAlign)GetGenericShapeModelResult(MatchResultID, "all", "row",
RowAlign)GetGenericShapeModelResult(MatchResultID, "all", "row",
RowAlign)GetGenericShapeModelResult(MatchResultID, "all", "row",
RowAlign)get_generic_shape_model_result(MatchResultID, "all", "row",
RowAlign)
get_generic_shape_model_result(MatchResultID, 'all', 'column',
ColumnAlign)get_generic_shape_model_result(MatchResultID, "all", "column",
ColumnAlign)GetGenericShapeModelResult(MatchResultID, "all", "column",
ColumnAlign)GetGenericShapeModelResult(MatchResultID, "all", "column",
ColumnAlign)GetGenericShapeModelResult(MatchResultID, "all", "column",
ColumnAlign)get_generic_shape_model_result(MatchResultID, "all", "column",
ColumnAlign)
get_generic_shape_model_result(MatchResultID, 'all', 'angle',
AngleAlign)get_generic_shape_model_result(MatchResultID, "all", "angle",
AngleAlign)GetGenericShapeModelResult(MatchResultID, "all", "angle",
AngleAlign)GetGenericShapeModelResult(MatchResultID, "all", "angle",
AngleAlign)GetGenericShapeModelResult(MatchResultID, "all", "angle",
AngleAlign)get_generic_shape_model_result(MatchResultID, "all", "angle",
AngleAlign)
align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)AlignMetrologyModel(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)align_metrology_model(MetrologyHandle, RowAlign, ColumnAlign,
AngleAlign)
- 使用刚性二维变换:
-
若某些模型点(以[PRowModel]、[PColumnModel]形式给出)能够被明确识别,且在后续图像中(其中待测对象可能发生位移或旋转)仍能被清晰识别,则可在这些点之间计算刚性变换。随后可直接利用该变换参数对模型进行对齐。在此情况下,计量模型的基准点无需调整。
-
确定点对应关系
-
估计模型姿态
以下算子序列通过模型图像与另一图像中的对应点,计算模型姿态参数 (RowRowRowRowrowrow, ColumnColumnColumnColumncolumncolumn, AngleAngleAngleAngleangleangle)。
示例:
vector_to_rigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)vector_to_rigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)VectorToRigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)VectorToRigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)VectorToRigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)vector_to_rigid(PRowModel, PColumnModel, PRowCurrent,
PColumnCurrent, HomMat2D)
hom_mat2d_to_affine_par(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)hom_mat2d_to_affine_par(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)HomMat2dToAffinePar(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)HomMat2dToAffinePar(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)HomMat2dToAffinePar(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)hom_mat2d_to_affine_par(HomMat2D, Sx, Sy, Angle, Theta,
Row, Column)
align_metrology_model(MetrologyHandle, Row, Column, Angle)align_metrology_model(MetrologyHandle, Row, Column, Angle)AlignMetrologyModel(MetrologyHandle, Row, Column, Angle)AlignMetrologyModel(MetrologyHandle, Row, Column, Angle)AlignMetrologyModel(MetrologyHandle, Row, Column, Angle)align_metrology_model(MetrologyHandle, Row, Column, Angle)
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 未采用并行化处理。
此算子修改后续输入参数的状态:
在执行此算子时,若该参数值需在多个线程间使用,则必须对其访问进行同步。
参数
MetrologyHandleMetrologyHandleMetrologyHandleMetrologyHandlemetrologyHandlemetrology_handle (输入控制,状态被修改) metrology_model → HMetrologyModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
计量模型的句柄。
RowRowRowRowrowrow (输入控制) real → HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
对齐的行坐标。
默认值:
0
ColumnColumnColumnColumncolumncolumn (输入控制) real → HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
对齐的列坐标。
默认值:
0
AngleAngleAngleAngleangleangle (输入控制) angle.rad → HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
对齐的旋转角度。
默认值:
0
示例(HDevelop)
read_image (Image, 'metal-parts/circle_plate_01')
create_metrology_model (MetrologyHandle)
get_image_size (Image, Width, Height)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
CircleParam := [354,274,53]
CircleParam := [CircleParam,350,519,53]
add_metrology_object_generic (MetrologyHandle, 'circle', CircleParam, 20,\
5, 1, 30, [], [], CircleIndices)
create_generic_shape_model (ModelID)
set_generic_shape_model_param (ModelID, 'metric', 'use_polarity')
set_generic_shape_model_param (ModelID, 'min_contrast', 20)
train_generic_shape_model (Image, ModelID)
* Determine location of shape model origin
area_center (Image, Area, RowOrigin, ColOrigin)
set_metrology_model_param (MetrologyHandle, 'reference_system', \
[RowOrigin,ColOrigin,0])
read_image (CurrentImage, 'metal-parts/circle_plate_02')
find_generic_shape_model (CurrentImage, ModelID, MatchResultID, \
NumMatchResult)
get_generic_shape_model_result (MatchResultID, 'all', 'row', Row)
get_generic_shape_model_result (MatchResultID, 'all', 'column', Col)
get_generic_shape_model_result (MatchResultID, 'all', 'angle', Angle)
align_metrology_model (MetrologyHandle, Row, Col, Angle)
apply_metrology_model (CurrentImage, MetrologyHandle)
get_metrology_object_result (MetrologyHandle, CircleIndices, 'all', \
'result_type', 'all_param', Rectangle)
get_metrology_object_result_contour (Contour, MetrologyHandle, \
CircleIndices, 'all', 1.5)
结果
如果参数有效,算子
align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model 返回值 2 (H_MSG_TRUE)。如有必要,则抛出异常。
可能的前趋
set_metrology_model_paramset_metrology_model_paramSetMetrologyModelParamSetMetrologyModelParamSetMetrologyModelParamset_metrology_model_param,
add_metrology_object_genericadd_metrology_object_genericAddMetrologyObjectGenericAddMetrologyObjectGenericAddMetrologyObjectGenericadd_metrology_object_generic
可能的后继
apply_metrology_modelapply_metrology_modelApplyMetrologyModelApplyMetrologyModelApplyMetrologyModelapply_metrology_model
另见
get_metrology_object_model_contourget_metrology_object_model_contourGetMetrologyObjectModelContourGetMetrologyObjectModelContourGetMetrologyObjectModelContourget_metrology_object_model_contour
模块
二维计量