create_aniso_shape_model_xldT_create_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld创建各向异性形状模型扩展线描述(算子)

名称

create_aniso_shape_model_xldT_create_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld — 准备一个各向异性缩放的形状模型,以便从扩展线描述轮廓进行匹配。

签名

create_aniso_shape_model_xld(Contours : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleRMin, ScaleRMax, ScaleRStep, ScaleCMin, ScaleCMax, ScaleCStep, Optimization, Metric, MinContrast : ModelID)

Herror T_create_aniso_shape_model_xld(const Hobject Contours, const Htuple NumLevels, const Htuple AngleStart, const Htuple AngleExtent, const Htuple AngleStep, const Htuple ScaleRMin, const Htuple ScaleRMax, const Htuple ScaleRStep, const Htuple ScaleCMin, const Htuple ScaleCMax, const Htuple ScaleCStep, const Htuple Optimization, const Htuple Metric, const Htuple MinContrast, Htuple* ModelID)

void CreateAnisoShapeModelXld(const HObject& Contours, const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& ScaleRMin, const HTuple& ScaleRMax, const HTuple& ScaleRStep, const HTuple& ScaleCMin, const HTuple& ScaleCMax, const HTuple& ScaleCStep, const HTuple& Optimization, const HTuple& Metric, const HTuple& MinContrast, HTuple* ModelID)

void HShapeModel::HShapeModel(const HXLDCont& Contours, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, double ScaleRMin, double ScaleRMax, const HTuple& ScaleRStep, double ScaleCMin, double ScaleCMax, const HTuple& ScaleCStep, const HTuple& Optimization, const HString& Metric, Hlong MinContrast)

void HShapeModel::HShapeModel(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const HString& Optimization, const HString& Metric, Hlong MinContrast)

void HShapeModel::HShapeModel(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const char* Optimization, const char* Metric, Hlong MinContrast)

void HShapeModel::HShapeModel(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const wchar_t* Optimization, const wchar_t* Metric, Hlong MinContrast)   ( Windows only)

void HShapeModel::CreateAnisoShapeModelXld(const HXLDCont& Contours, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, double ScaleRMin, double ScaleRMax, const HTuple& ScaleRStep, double ScaleCMin, double ScaleCMax, const HTuple& ScaleCStep, const HTuple& Optimization, const HString& Metric, Hlong MinContrast)

void HShapeModel::CreateAnisoShapeModelXld(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const HString& Optimization, const HString& Metric, Hlong MinContrast)

void HShapeModel::CreateAnisoShapeModelXld(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const char* Optimization, const char* Metric, Hlong MinContrast)

void HShapeModel::CreateAnisoShapeModelXld(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const wchar_t* Optimization, const wchar_t* Metric, Hlong MinContrast)   ( Windows only)

HShapeModel HXLDCont::CreateAnisoShapeModelXld(const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, double ScaleRMin, double ScaleRMax, const HTuple& ScaleRStep, double ScaleCMin, double ScaleCMax, const HTuple& ScaleCStep, const HTuple& Optimization, const HString& Metric, Hlong MinContrast) const

HShapeModel HXLDCont::CreateAnisoShapeModelXld(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const HString& Optimization, const HString& Metric, Hlong MinContrast) const

HShapeModel HXLDCont::CreateAnisoShapeModelXld(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const char* Optimization, const char* Metric, Hlong MinContrast) const

HShapeModel HXLDCont::CreateAnisoShapeModelXld(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const wchar_t* Optimization, const wchar_t* Metric, Hlong MinContrast) const   ( Windows only)

static void HOperatorSet.CreateAnisoShapeModelXld(HObject contours, HTuple numLevels, HTuple angleStart, HTuple angleExtent, HTuple angleStep, HTuple scaleRMin, HTuple scaleRMax, HTuple scaleRStep, HTuple scaleCMin, HTuple scaleCMax, HTuple scaleCStep, HTuple optimization, HTuple metric, HTuple minContrast, out HTuple modelID)

public HShapeModel(HXLDCont contours, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, double scaleRMin, double scaleRMax, HTuple scaleRStep, double scaleCMin, double scaleCMax, HTuple scaleCStep, HTuple optimization, string metric, int minContrast)

public HShapeModel(HXLDCont contours, int numLevels, double angleStart, double angleExtent, double angleStep, double scaleRMin, double scaleRMax, double scaleRStep, double scaleCMin, double scaleCMax, double scaleCStep, string optimization, string metric, int minContrast)

void HShapeModel.CreateAnisoShapeModelXld(HXLDCont contours, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, double scaleRMin, double scaleRMax, HTuple scaleRStep, double scaleCMin, double scaleCMax, HTuple scaleCStep, HTuple optimization, string metric, int minContrast)

void HShapeModel.CreateAnisoShapeModelXld(HXLDCont contours, int numLevels, double angleStart, double angleExtent, double angleStep, double scaleRMin, double scaleRMax, double scaleRStep, double scaleCMin, double scaleCMax, double scaleCStep, string optimization, string metric, int minContrast)

HShapeModel HXLDCont.CreateAnisoShapeModelXld(HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, double scaleRMin, double scaleRMax, HTuple scaleRStep, double scaleCMin, double scaleCMax, HTuple scaleCStep, HTuple optimization, string metric, int minContrast)

HShapeModel HXLDCont.CreateAnisoShapeModelXld(int numLevels, double angleStart, double angleExtent, double angleStep, double scaleRMin, double scaleRMax, double scaleRStep, double scaleCMin, double scaleCMax, double scaleCStep, string optimization, string metric, int minContrast)

def create_aniso_shape_model_xld(contours: HObject, num_levels: Union[int, str], angle_start: float, angle_extent: float, angle_step: Union[float, str], scale_rmin: float, scale_rmax: float, scale_rstep: Union[float, str], scale_cmin: float, scale_cmax: float, scale_cstep: Union[float, str], optimization: MaybeSequence[str], metric: str, min_contrast: int) -> HHandle

描述

算子 create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 根据传递至 ContoursContoursContoursContourscontourscontours 的 XLD 轮廓创建用于匹配的各向异性缩放形状模型。XLD 轮廓代表待搜索对象的灰度值边缘。与从模板图像创建形状模型的 create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModelcreate_aniso_shape_model 算子不同,create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 算子直接基于 XLD 轮廓创建形状模型,即无需使用模板图像。

输出参数 ModelIDModelIDModelIDModelIDmodelIDmodel_id 是该模型的句柄,用于后续调用 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model。模型的原点(参考点)采用 ContoursContoursContoursContourscontourscontours 中最小的平行于坐标轴的包围矩形的重心。可通过 set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOriginset_shape_model_origin 设置不同原点。该模型针对多个图像金字塔层级生成,并存储在内存中。若选择完整预生成模型(见下文),则在各层级上按多旋转角度与各向异性尺度(即行方向与列方向独立尺度)生成模型。可通过 set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutterset_shape_model_clutter 添加杂波参数扩展模型。

输入参数的详细说明

NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels

金字塔层数由参数 NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels 决定。该参数应尽可能取大值,因为这样能显著缩短对象搜索所需时间。另一方面,NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels 的选择必须确保模型仍可识别,且最高金字塔层包含足够数量的点(至少四个)。 若生成的模型点不足,系统将内部减少金字塔层数,直至在最高金字塔层找到足够的模型点。若此函数将导致模型无金字塔层(即最低金字塔层的模型点数已过少)create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 返回一条错误消息。

如果 NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels 设置为 'auto'"auto""auto""auto""auto""auto", create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 将自动确定金字塔层数。计算出的金字塔层数可通过 get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParamsget_shape_model_params 进行查询。在极少数情况下,create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 可能确定的金字塔层数过大或过小。若金字塔层数选择过大,模型可能无法在图像中被识别,或需在 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 中将 MinScoreMinScoreMinScoreMinScoreminScoremin_scoreGreedinessGreedinessGreedinessGreedinessgreedinessgreediness 参数设置得极低才能找到模型。若金字塔层数选择过小,find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 中查找模型所需的时间可能增加。在这些情况下,应手动选择金字塔层数。

AngleStartAngleStartAngleStartAngleStartangleStartangle_startAngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extentAngleStepAngleStepAngleStepAngleStepangleStepangle_step

参数 AngleStartAngleStartAngleStartAngleStartangleStartangle_startAngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent 决定了对象在图像中可能出现的旋转范围。请注意,find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 只能在此角度范围内检测到该对象。AngleStepAngleStepAngleStepAngleStepangleStepangle_step 参数则决定了选定角度范围内的步进长度。因此,若在 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 中未指定亚像素精度,则该参数将决定 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 中角度测量的可达精度。AngleStepAngleStepAngleStepAngleStepangleStepangle_step 应根据对象尺寸选择。较小的模型在图像中具有较少的离散旋转状态,故应为其选择较大的 AngleStepAngleStepAngleStepAngleStepangleStepangle_step 值。若 AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent 并非 AngleStepAngleStepAngleStepAngleStepangleStepangle_step 的整数倍,则AngleStepAngleStepAngleStepAngleStepangleStepangle_step 将相应调整。 为确保 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 返回的模型实例不包含旋转角度值精确为 0.0 的情况,旋转角度的取值范围将按以下方式调整:若不存在正整数 n 使得 AngleStartAngleStartAngleStartAngleStartangleStartangle_start 加上 n 倍 AngleStepAngleStepAngleStepAngleStepangleStepangle_step 恰为 0.0,则 AngleStartAngleStartAngleStartAngleStartangleStartangle_start 最多减去 AngleStepAngleStepAngleStepAngleStepangleStepangle_stepAngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent 增加 AngleStepAngleStepAngleStepAngleStepangleStepangle_step

ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rminScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMaxscale_rmaxScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cminScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmaxScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep

参数 ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rminScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMaxscale_rmaxScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cminScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmax 决定了对象在行方向和列方向上各向异性缩放的可能范围。当两个缩放因子均为 1 时,对应模型原始尺寸。参数 ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep 决定选定缩放范围内的步长。因此,若 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 中未指定亚像素精度,这些参数将决定 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 中可实现的缩放精度。与 AngleStepAngleStepAngleStepAngleStepangleStepangle_step 类似,ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep 应根据对象尺寸选择。若对应的尺度范围不是 ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep 的整数倍,则相应调整 ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep 的值。

为确保 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 对未缩放的模型实例返回精确为 1.0 的缩放值,其可能缩放值的范围按以下方式调整:若不存在正整数 n 和 m 满足: ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rmin 加 n 倍 ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstep 等于 1.0 且 ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cmin 加 m 倍 ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep 等于 1.0,则 ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rminScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cmin 分别最多减小 ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep,同时 ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMaxscale_rmaxScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmax 相应增加,使可能的缩放范围分别扩大 ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep

请注意,变换在内部处理时会先应用缩放操作,再进行旋转操作。因此,模型通常应调整为在模型图像中呈现为水平或垂直状态。

OptimizationOptimizationOptimizationOptimizationoptimizationoptimization

对于特别大的模型,通过将 OptimizationOptimizationOptimizationOptimizationoptimizationoptimization 设置为不同于 'none'"none""none""none""none""none" 的值来减少模型点数可能有所帮助。当 OptimizationOptimizationOptimizationOptimizationoptimizationoptimization = 'none'"none""none""none""none""none" 时,所有模型点都会被存储。在其他所有情况下,点数会根据 OptimizationOptimizationOptimizationOptimizationoptimizationoptimization 的值进行减少。若减少点数,则在 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 中可能需要将 GreedinessGreedinessGreedinessGreedinessgreedinessgreediness 参数设为较小值(如 0.70.8)。对于小型模型,减少模型点数并不会提升搜索速度,因为此时通常需要检查更多潜在模型实例。

如果 OptimizationOptimizationOptimizationOptimizationoptimizationoptimization 设置为 'auto'"auto""auto""auto""auto""auto", create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 将自动确定模型点数的减少量。

MetricMetricMetricMetricmetricmetric

参数 MetricMetricMetricMetricmetricmetric 决定了模型在图像中被识别的条件。

如果 MetricMetricMetricMetricmetricmetric = 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity",则图像中的对象与模型必须具有相同的对比度。例如,如果模型是暗背景上的亮色对象,则只有当该对象也比背景更亮时才能被识别。

如果 MetricMetricMetricMetricmetricmetric = 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity",即使图像整体对比度发生反转,该对象仍会被识别。因此在上例中,即使对象比背景更暗,仍会被识别。在此情况下,find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 的运行时间将略有增加。

请注意,只有当所有 ContoursContoursContoursContourscontourscontours 都提供定义边缘极性的 'edge_direction'"edge_direction""edge_direction""edge_direction""edge_direction""edge_direction" 属性时,才能选择这些指标('use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity"'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity")。该属性适用于通过 edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPixedges_sub_pix 等工具创建的轮廓,例如当参数 MethodMethodMethodMethodmethodmethod 设置为 'canny'"canny""canny""canny""canny""canny"。否则,可通过 set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric 算子选择这两项指标,该算子能从图像中确定边缘的极性。

如果 MetricMetricMetricMetricmetricmetric = 'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity",即使局部对比度发生变化,模型仍会被识别。例如,当对象包含一个中等灰度值的主体剖分,其内部存在更暗或更亮的子对象时,此模式便能发挥作用。由于在此情况下 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 的运行时间显著增加,通常更优的做法是使用 create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 创建多个反映目标对象可能对比度变化的模型,并通过 find_aniso_shape_modelsfind_aniso_shape_modelsFindAnisoShapeModelsFindAnisoShapeModelsFindAnisoShapeModelsfind_aniso_shape_models 同时匹配这些模型。

上述三项指标仅适用于单通道图像。若将多通道图像用作模型图像或搜索图像,则仅使用首个通道(且不会返回错误信息)。

如果 MetricMetricMetricMetricmetricmetric = 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity",即使局部颜色对比度发生变化,模型仍能被识别。例如当对象部分区域可变色(如从红色变为绿色)时即属此类情况。该模式尤其适用于无法预先确定对象在哪些通道可见的场景。在此模式下,find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 的运行时间可能显著增加。指标 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" 可用于任意通道数的图像。若应用于单通道图像,其效果等同于 'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity"。需要注意的是,当 MetricMetricMetricMetricmetricmetric = 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" 时,通道无需包含光谱分层信息(如 RGB 图像)。例如,这些通道还可能包含同一对象的图像,这些图像通过从不同方向照射对象获得。

请注意,前两个指标('use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity"'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity")仅在所有 ContoursContoursContoursContourscontourscontours 均提供定义边极性的 'edge_direction'"edge_direction""edge_direction""edge_direction""edge_direction""edge_direction" 属性时才可选取。有关 'edge_direction'"edge_direction""edge_direction""edge_direction""edge_direction""edge_direction" 等轮廓属性的更多信息,请参阅 get_contour_attrib_xldget_contour_attrib_xldGetContourAttribXldGetContourAttribXldGetContourAttribXldget_contour_attrib_xld。否则,可通过 set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric 算子选择这两项指标,该算子能从图像中确定边缘的极性。

MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast

通过 MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast,可确定在 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 进行的识别过程中,目标边缘必须具备的最小对比度阈值。换言之,该参数用于将图像中的目标与噪声分离。因此,理想设置应为图像噪声引发的灰度值变化范围。例如,若灰度值波动范围在 10 个灰度级内,则应将 MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast 设为 10。当模型与搜索图像均为多通道图像,且参数 MetricMetricMetricMetricmetricmetric 设为 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity"(参见前文)时,需将单通道噪声乘以通道数平方根来确定 MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast 值。例如:若单通道灰度值波动范围为 10 个灰度级,且图像为三通道图像,则 MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast 应设为 17。若需在极低对比度图像中识别模型,则需将 MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast 设置为相应较小的数值。若要求模型在严重遮挡时仍可识别,则应将 MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast 设置为略大于噪声产生的灰度值波动范围,以确保 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 能稳健准确地提取模型位置与旋转信息。

完成模型的预生成

可选地,可在 OptimizationOptimizationOptimizationOptimizationoptimizationoptimization 中传递第二个参数。该参数决定模型是否进行完全预生成。为此,需将 OptimizationOptimizationOptimizationOptimizationoptimizationoptimization 的第二个值设置为 'pregeneration'"pregeneration""pregeneration""pregeneration""pregeneration""pregeneration"'no_pregeneration'"no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration"。若未使用第二个参数(即仅传递单个参数),则采用通过 set_system('pregenerate_shape_models',...)set_system("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)set_system("pregenerate_shape_models",...) 设置的模式。默认值('pregenerate_shape_models'"pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models" = 'false'"false""false""false""false""false")下,模型不会进行完全预生成。模型的完整预生成通常会导致运行时间略微缩短,因为模型在运行时无需进行转换。但此模式下内存需求和模型创建时间将显著增加。需注意两种模式无法产生完全相同的结果,因为运行时转换模型必然导致转换后模型的内部数据与预生成转换模型存在差异。例如,若模型未完全预生成,find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 通常会返回略低的分数,此时需将 MinScoreMinScoreMinScoreMinScoreminScoremin_score 设置为比完全预生成模型略低的数值。此外,两种模式下通过插值获得的姿态可能存在细微差异。若追求最高精度,应通过最小二乘法调整确定模型姿态。

若选择完全预生成模型,则模型将针对选定的角度和缩放范围进行预生成并存储在内存中。存储模型所需的内存大小与角度步长数、缩放步长数以及模型中的点数成正比。因此,若 AngleStepAngleStepAngleStepAngleStepangleStepangle_stepScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep 过小,或 AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent 或缩放范围过大,可能导致模型无法完全容纳于(虚拟)内存中。在这种情况下,必须增大 AngleStepAngleStepAngleStepAngleStepangleStepangle_stepScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep,或缩小 AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent 或缩放的范围。无论如何,模型完全容纳于主内存是理想状态,因为这可避免操作系统进行分页操作,从而大幅缩短查找对象的时间。由于 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 可实现亚像素级角度测定,对于直径小于约 200 像素的模型,可选择 AngleStepAngleStepAngleStepAngleStepangleStepangle_step >= 1°且 ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep >= 0.02。

可通过 get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParamsget_shape_model_params 查询自动计算的角度步长和缩放步长。

若未选择完整预生成模型如果 AngleStepAngleStepAngleStepAngleStepangleStepangle_step = 'auto'"auto""auto""auto""auto""auto"ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstepScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep = 'auto'"auto""auto""auto""auto""auto" 被选中,create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 将根据模型的尺寸自动确定合适的角度步长或缩放步长。,则模型仅在每个金字塔层级的参考姿态下创建。此时,必须在运行时通过 find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model 将模型转换至不同角度和尺度。因此,该模型的识别过程可能需要稍长的时间。

请注意,预生成形状模型是针对特定图像尺寸定制的。出于运行时间考虑,不支持在搜索过程中使用相同模型并行处理不同尺寸的图像。此时必须使用相同模型的副本,否则程序可能崩溃!

注意

传递至 ContoursContoursContoursContourscontourscontours 的 XLD 轮廓应缩放至与搜索图像中目标平均尺寸大致相当。这意味着产物 应近似等于 1。

请注意,与 create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModelcreate_aniso_shape_model 算子不同,无法指定模型组件的最小尺寸。为避免形状模型中出现小模型组件,可在调用 create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 之前,使用 select_contours_xldselect_contours_xldSelectContoursXldSelectContoursXldSelectContoursXldselect_contours_xld 算子剔除短轮廓。

执行信息

此算子返回一个句柄。请注意,即使该句柄被用作特定算子的输入参数,这些算子仍可能改变此句柄类型的实例状态。

参数

ContoursContoursContoursContourscontourscontours (输入对象)  xld_cont(-array) objectHXLDContHObjectHXLDContHobject

用于创建模型的输入轮廓。

NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels (输入控制)  integer HTupleUnion[int, str]HTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

金字塔层数的最大值。

默认值: 'auto' "auto" "auto" "auto" "auto" "auto"

值列表: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto'"auto""auto""auto""auto""auto"

AngleStartAngleStartAngleStartAngleStartangleStartangle_start (输入控制)  angle.rad HTuplefloatHTupleHtuple (real) (double) (double) (double)

模式的最小旋转角度(弧度)。

默认值: -0.39

建议值: -3.14, -1.57, -0.79, -0.39, -0.20, 0.0

AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent (输入控制)  angle.rad HTuplefloatHTupleHtuple (real) (double) (double) (double)

旋转角度的范围。

默认值: 0.79

建议值: 6.29, 3.14, 1.57, 0.79, 0.39

限制: AngleExtent >= 0

AngleStepAngleStepAngleStepAngleStepangleStepangle_step (输入控制)  angle.rad HTupleUnion[float, str]HTupleHtuple (real / string) (double / string) (double / HString) (double / char*)

角度的步长(分辨率)。

默认值: 'auto' "auto" "auto" "auto" "auto" "auto"

建议值: 'auto'"auto""auto""auto""auto""auto", 0.0175, 0.0349, 0.0524, 0.0698, 0.0873

限制: AngleStep >= 0 && AngleStep <= pi / 2

ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rmin (输入控制)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

模式在行方向上的最小缩放。

默认值: 0.9

建议值: 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

限制: ScaleRMin > 0

ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMaxscale_rmax (输入控制)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

模式在行方向上的最大缩放。

默认值: 1.1

建议值: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5

限制: ScaleRMax >= ScaleRMin

ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStepscale_rstep (输入控制)  number HTupleUnion[float, str]HTupleHtuple (real / string) (double / string) (double / HString) (double / char*)

行方向的缩放步长(分辨率)。

默认值: 'auto' "auto" "auto" "auto" "auto" "auto"

建议值: 'auto'"auto""auto""auto""auto""auto", 0.01, 0.02, 0.05, 0.1, 0.15, 0.2

限制: ScaleRStep >= 0

ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cmin (输入控制)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

模式在列方向上的最小缩放。

默认值: 0.9

建议值: 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

限制: ScaleCMin > 0

ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmax (输入控制)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

模式在列方向上的最大缩放。

默认值: 1.1

建议值: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5

限制: ScaleCMax >= ScaleCMin

ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStepscale_cstep (输入控制)  number HTupleUnion[float, str]HTupleHtuple (real / string) (double / string) (double / HString) (double / char*)

列方向的缩放步长(分辨率)。

默认值: 'auto' "auto" "auto" "auto" "auto" "auto"

建议值: 'auto'"auto""auto""auto""auto""auto", 0.01, 0.02, 0.05, 0.1, 0.15, 0.2

限制: ScaleCStep >= 0

OptimizationOptimizationOptimizationOptimizationoptimizationoptimization (输入控制)  string(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

用于生成模型的优化类型及可选方法。

默认值: 'auto' "auto" "auto" "auto" "auto" "auto"

值列表: 'auto'"auto""auto""auto""auto""auto", 'no_pregeneration'"no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration", 'none'"none""none""none""none""none", 'point_reduction_high'"point_reduction_high""point_reduction_high""point_reduction_high""point_reduction_high""point_reduction_high", 'point_reduction_low'"point_reduction_low""point_reduction_low""point_reduction_low""point_reduction_low""point_reduction_low", 'point_reduction_medium'"point_reduction_medium""point_reduction_medium""point_reduction_medium""point_reduction_medium""point_reduction_medium", 'pregeneration'"pregeneration""pregeneration""pregeneration""pregeneration""pregeneration"

MetricMetricMetricMetricmetricmetric (输入控制)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

匹配指标。

默认值: 'ignore_local_polarity' "ignore_local_polarity" "ignore_local_polarity" "ignore_local_polarity" "ignore_local_polarity" "ignore_local_polarity"

值列表: 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity", 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity", 'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity", 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity"

MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast (输入控制)  number HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

搜索图像中对象的最小对比度。

默认值: 5

建议值: 1, 2, 3, 5, 7, 10, 20, 30, 40

ModelIDModelIDModelIDModelIDmodelIDmodel_id (输出控制)  shape_model HShapeModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

模型的句柄。

结果

如果参数有效,算子 create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXldCreateAnisoShapeModelXldcreate_aniso_shape_model_xld 返回值 2 (H_MSG_TRUE)。如有必要,则抛出异常。如果参数 NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels 的选择导致模型包含的点过少,则会引发错误 8510。

可能的前趋

read_contour_xld_dxfread_contour_xld_dxfReadContourXldDxfReadContourXldDxfReadContourXldDxfread_contour_xld_dxf, edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPixedges_sub_pix, select_contours_xldselect_contours_xldSelectContoursXldSelectContoursXldSelectContoursXldselect_contours_xld

可能的后继

find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModelfind_aniso_shape_model, find_aniso_shape_modelsfind_aniso_shape_modelsFindAnisoShapeModelsFindAnisoShapeModelsFindAnisoShapeModelsfind_aniso_shape_models, get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParamsget_shape_model_params, clear_shape_modelclear_shape_modelClearShapeModelClearShapeModelClearShapeModelclear_shape_model, write_shape_modelwrite_shape_modelWriteShapeModelWriteShapeModelWriteShapeModelwrite_shape_model, set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOriginset_shape_model_origin, set_shape_model_paramset_shape_model_paramSetShapeModelParamSetShapeModelParamSetShapeModelParamset_shape_model_param, set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric, set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutterset_shape_model_clutter

替代

create_generic_shape_modelcreate_generic_shape_modelCreateGenericShapeModelCreateGenericShapeModelCreateGenericShapeModelcreate_generic_shape_model

另见

set_systemset_systemSetSystemSetSystemSetSystemset_system, get_systemget_systemGetSystemGetSystemGetSystemget_system

模块

匹配