create_templateT_create_templateCreateTemplateCreateTemplatecreate_template创建模板(算子)
名称
create_templateT_create_templateCreateTemplateCreateTemplatecreate_template — 准备模板匹配模式。
警告
create_templatecreate_templateCreateTemplateCreateTemplateCreateTemplatecreate_template 已过时,仅出于向后兼容性考虑而保留。新应用程序应改用基于形状或基于 NCC 的算子。
签名
void CreateTemplate(const HObject& Template, const HTuple& FirstError, const HTuple& NumLevel, const HTuple& Optimize, const HTuple& GrayValues, HTuple* TemplateID)
void HTemplate::HTemplate(const HImage& Template, Hlong FirstError, Hlong NumLevel, const HString& Optimize, const HString& GrayValues)
void HTemplate::HTemplate(const HImage& Template, Hlong FirstError, Hlong NumLevel, const char* Optimize, const char* GrayValues)
void HTemplate::HTemplate(const HImage& Template, Hlong FirstError, Hlong NumLevel, const wchar_t* Optimize, const wchar_t* GrayValues)
(
Windows only)
void HTemplate::CreateTemplate(const HImage& Template, Hlong FirstError, Hlong NumLevel, const HString& Optimize, const HString& GrayValues)
void HTemplate::CreateTemplate(const HImage& Template, Hlong FirstError, Hlong NumLevel, const char* Optimize, const char* GrayValues)
void HTemplate::CreateTemplate(const HImage& Template, Hlong FirstError, Hlong NumLevel, const wchar_t* Optimize, const wchar_t* GrayValues)
(
Windows only)
HTemplate HImage::CreateTemplate(Hlong FirstError, Hlong NumLevel, const HString& Optimize, const HString& GrayValues) const
HTemplate HImage::CreateTemplate(Hlong FirstError, Hlong NumLevel, const char* Optimize, const char* GrayValues) const
HTemplate HImage::CreateTemplate(Hlong FirstError, Hlong NumLevel, const wchar_t* Optimize, const wchar_t* GrayValues) const
(
Windows only)
static void HOperatorSet.CreateTemplate(HObject template, HTuple firstError, HTuple numLevel, HTuple optimize, HTuple grayValues, out HTuple templateID)
public HTemplate(HImage template, int firstError, int numLevel, string optimize, string grayValues)
void HTemplate.CreateTemplate(HImage template, int firstError, int numLevel, string optimize, string grayValues)
HTemplate HImage.CreateTemplate(int firstError, int numLevel, string optimize, string grayValues)
描述
算子 create_templatecreate_templateCreateTemplateCreateTemplateCreateTemplatecreate_template 会对作为图像传递的模式(TemplateTemplateTemplateTemplatetemplatetemplate)进行预处理,以便进行模板匹配。转换完成后,该模板会被分配一个编号(TemplateIDTemplateIDTemplateIDTemplateIDtemplateIDtemplate_id),以便在后续处理中使用。TemplateTemplateTemplateTemplatetemplatetemplate 的形状和大小可以任意选择。需要注意的是,匹配操作仅适用于图像中 TemplateTemplateTemplateTemplatetemplatetemplate 能够完全嵌入的区域。
该模板的选取方式确保其不包含(变化的)背景像素。在此,您可以利用模板的任意形状,而不仅限于矩形。要创建模板区域,您可以使用阈值
thresholdthresholdThresholdThresholdThresholdthreshold 等分割算子,或 draw_* 系列算子之一。若需实现亚像素级精确匹配,则
TemplateTemplateTemplateTemplatetemplatetemplate 还需比模式小一个像素(即与变化的背景之间留有一个像素的边距)。例如,可通过应用
erosion_circleerosion_circleErosionCircleErosionCircleErosionCircleerosion_circle 算子来实现。
参数 NumLevelNumLevelNumLevelNumLevelnumLevelnum_level 指定可用于匹配的金字塔层数(NumLevelNumLevelNumLevelNumLevelnumLevelnum_level = 1 表示仅使用原始灰度值)。后续用于匹配的层数将小于或等于该值。如果因缩放导致模式过小,金字塔层数的最大值将自动减少(且不会显示错误信息)。
参数 GrayValuesGrayValuesGrayValuesGrayValuesgrayValuesgray_values 用于定义是使用原始灰度值('original'"original""original""original""original""original"、'normalized'"normalized""normalized""normalized""normalized""normalized"),还是使用边缘幅度('gradient'"gradient""gradient""gradient""gradient""gradient", 'sobel'"sobel""sobel""sobel""sobel""sobel")。选择 'original'"original""original""original""original""original" 时,将差值之和作为特征,在光照条件不变的情况下,该方法非常稳定且快速。若光照条件发生变化,则应使用 'normalized'"normalized""normalized""normalized""normalized""normalized"。该方法速度稍慢,且稳定性稍逊。请注意,'normalized'"normalized""normalized""normalized""normalized""normalized" 模式可补偿累加的光照变化。如果灰度值还存在乘法变化,则应使用基于相关性的匹配方法(create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model)。如果光照条件不变,则应使用
'original'"original""original""original""original""original" 模式。边缘幅度是另一种不受光照变化影响的方法。其缺点是执行时间增加,且对模式形状变化的敏感度更高。'gradient'"gradient""gradient""gradient""gradient""gradient" 模式稍快,但对噪声更敏感。
在使用边缘幅度时,匹配的最大误差通常需要设得更高。若使用 GrayValuesGrayValuesGrayValuesGrayValuesgrayValuesgray_values 选项,系统会在匹配过程中自动调用合适的滤波器(如有必要)。
如果已知光照的变化情况,可以使用
set_offset_templateset_offset_templateSetOffsetTemplateSetOffsetTemplateSetOffsetTemplateset_offset_template 算子作为梯度方法的替代方案。
参数 OptimizeOptimizeOptimizeOptimizeoptimizeoptimize 用于指定是否需要对模式进行运行时优化。这种优化会延长模板的创建时间,但能缩短匹配所需的时间。此外,优化还能提高匹配的稳定性,即减少漏掉正确匹配的可能性。优化过程会选取最稳定且最具代表性的灰度值,在匹配过程中优先进行测试。利用这种技术,可以在非常早的阶段就排除错误的匹配。
模板的参考位置是其重心。也就是说,如果将模板应用到原始图像上,返回的将是该图像的重心。可以通过 set_reference_templateset_reference_templateSetReferenceTemplateSetReferenceTemplateSetReferenceTemplateset_reference_template 算子调整此默认参考位置。
在亚像素模式下,系统会计算出一种特殊的定位校正值,并在每次匹配后将其添加进去:将模板应用到原始图像上,并将找到的位置与质心之间的差值用作校正向量。这对纹理背景中的模式或不对称模式尤为重要。对于大多数模板而言,该校正向量接近于零。
在使用模板(其存储与图像尺寸无关)之前,可通过调用 adapt_templateadapt_templateAdaptTemplateAdaptTemplateAdaptTemplateadapt_template 方法将其显式适配至特定图像尺寸。
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 未采用并行化处理。
此算子返回一个句柄。请注意,即使该句柄被用作特定算子的输入参数,这些算子仍可能改变此句柄类型的实例状态。
参数
TemplateTemplateTemplateTemplatetemplatetemplate (输入对象) singlechannelimage → objectHImageHObjectHImageHobject (byte)
输入图像,其图像域将用于模式匹配处理。
FirstErrorFirstErrorFirstErrorFirstErrorfirstErrorfirst_error (输入控制) integer → HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
尚未使用。
默认值:
255
值列表:
255
NumLevelNumLevelNumLevelNumLevelnumLevelnum_level (输入控制) integer → HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
金字塔层数的上限。
默认值:
4
值列表:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
OptimizeOptimizeOptimizeOptimizeoptimizeoptimize (输入控制) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
优化类型。
默认值:
'sort'
"sort"
"sort"
"sort"
"sort"
"sort"
值列表:
'none'"none""none""none""none""none", 'sort'"sort""sort""sort""sort""sort"
GrayValuesGrayValuesGrayValuesGrayValuesgrayValuesgray_values (输入控制) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
灰度值类型。
默认值:
'original'
"original"
"original"
"original"
"original"
"original"
值列表:
'gradient'"gradient""gradient""gradient""gradient""gradient", 'normalized'"normalized""normalized""normalized""normalized""normalized", 'original'"original""original""original""original""original", 'sobel'"sobel""sobel""sobel""sobel""sobel"
TemplateIDTemplateIDTemplateIDTemplateIDtemplateIDtemplate_id (输出控制) template → HTemplate, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
模板编号。
结果
如果参数有效,算子
create_templatecreate_templateCreateTemplateCreateTemplateCreateTemplatecreate_template 返回值 2 (H_MSG_TRUE)。如有必要,则抛出异常。
可能的前趋
draw_regiondraw_regionDrawRegionDrawRegionDrawRegiondraw_region,
reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain,
thresholdthresholdThresholdThresholdThresholdthreshold
可能的后继
adapt_templateadapt_templateAdaptTemplateAdaptTemplateAdaptTemplateadapt_template,
set_reference_templateset_reference_templateSetReferenceTemplateSetReferenceTemplateSetReferenceTemplateset_reference_template,
clear_templateclear_templateClearTemplateClearTemplateClearTemplateclear_template,
write_templatewrite_templateWriteTemplateWriteTemplateWriteTemplatewrite_template,
set_offset_templateset_offset_templateSetOffsetTemplateSetOffsetTemplateSetOffsetTemplateset_offset_template,
best_matchbest_matchBestMatchBestMatchBestMatchbest_match,
best_match_mgbest_match_mgBestMatchMgBestMatchMgBestMatchMgbest_match_mg,
fast_matchfast_matchFastMatchFastMatchFastMatchfast_match,
fast_match_mgfast_match_mgFastMatchMgFastMatchMgFastMatchMgfast_match_mg
替代
create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model,
create_template_rotcreate_template_rotCreateTemplateRotCreateTemplateRotCreateTemplateRotcreate_template_rot,
read_templateread_templateReadTemplateReadTemplateReadTemplateread_template
模块
匹配