align_metrology_modelT_align_metrology_modelAlignMetrologyModelAlignMetrologyModelalign_metrology_model对齐计量模型(算子)

名称

align_metrology_modelT_align_metrology_modelAlignMetrologyModelAlignMetrologyModelalign_metrology_model — 计量模型的对齐。

签名

align_metrology_model( : : MetrologyHandle, Row, Column, Angle : )

Herror T_align_metrology_model(const Htuple MetrologyHandle, const Htuple Row, const Htuple Column, const Htuple Angle)

void AlignMetrologyModel(const HTuple& MetrologyHandle, const HTuple& Row, const HTuple& Column, const HTuple& Angle)

void HMetrologyModel::AlignMetrologyModel(const HTuple& Row, const HTuple& Column, const HTuple& Angle) const

void HMetrologyModel::AlignMetrologyModel(double Row, double Column, double Angle) const

static void HOperatorSet.AlignMetrologyModel(HTuple metrologyHandle, HTuple row, HTuple column, HTuple angle)

void HMetrologyModel.AlignMetrologyModel(HTuple row, HTuple column, HTuple angle)

void HMetrologyModel.AlignMetrologyModel(double row, double column, double angle)

def align_metrology_model(metrology_handle: HHandle, row: Union[int, float], column: Union[int, float], angle: Union[int, float]) -> None

描述

align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model 可将整个计量模型 MetrologyHandleMetrologyHandleMetrologyHandleMetrologyHandlemetrologyHandlemetrology_handle 相对于图像坐标系进行平移和旋转操作,该坐标系的原点位于图像左上角。

有关二维计量概念的说明,请参阅 二维计量 一章的引言。

对齐操作确保计量模型的位置和方向与当前图像中待测对象相匹配。然后,apply_metrology_modelapply_metrology_modelApplyMetrologyModelApplyMetrologyModelApplyMetrologyModelapply_metrology_model 使用对齐进行测量。首先,计量模型按 AngleAngleAngleAngleangleangle 旋转,随后按 RowRowRowRowrowrowColumnColumnColumnColumncolumncolumn 平移。对齐值将在下次调用 align_metrology_modelalign_metrology_modelAlignMetrologyModelAlignMetrologyModelAlignMetrologyModelalign_metrology_model 时被覆盖。

对齐参数的计算

对齐参数可通过多种方法确定。此处列出三种确定参数的可能性:

使用区域分析:

若能通过区域处理提取计量模型,且该区域在后续图像中的姿态变化微小,则可利用区域分析推导出计量模型参考系及对齐的参数。下图中采用 thresholdthresholdThresholdThresholdThresholdthresholdsmallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2smallest_rectangle2 获取了这些参数。

  1. 设置参考系统

    在定义计量模型的图像中,提取包含计量对象的区域。通过 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])

  2. 确定对齐方式

    在计量模型处于不同姿态的图像中,将确定所提取区域的当前姿态。随后利用该姿态对计量模型进行对齐。

    示例:

    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,实现当前图像中计量模型的对齐。具体操作步骤如下所示:

( 1) ( 2) ( 3)
(1) 计量模型的轮廓(2) 形状模型的轮廓(3) 设置正确坐标系后的计量模型轮廓
  1. 设置参考系统

    在定义计量模型的图像中,通过 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])

  2. 确定对齐方式

    在图像中,当待测对象呈现不同姿态时,需通过 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]形式给出)能够被明确识别,且在后续图像中(其中待测对象可能发生位移或旋转)仍能被清晰识别,则可在这些点之间计算刚性变换。随后可直接利用该变换参数对模型进行对齐。在此情况下,计量模型的基准点无需调整。

( 1) ( 2)
(1) 计量对象的轮廓及其在用于创建计量模型图像中的四个对应点。(2) 计量对象的轮廓及其在新图像中的四个对应点。
  1. 确定点对应关系

  2. 估计模型姿态

    以下算子序列通过模型图像与另一图像中的对应点,计算模型姿态参数 (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

模块

二维计量