create_variation_modelT_create_variation_modelCreateVariationModelCreateVariationModelcreate_variation_model创建变异模型(算子)
名称
create_variation_modelT_create_variation_modelCreateVariationModelCreateVariationModelcreate_variation_model — 创建用于图像比较的变异模型。
签名
void CreateVariationModel(const HTuple& Width, const HTuple& Height, const HTuple& Type, const HTuple& Mode, HTuple* ModelID)
void HVariationModel::HVariationModel(Hlong Width, Hlong Height, const HString& Type, const HString& Mode)
void HVariationModel::HVariationModel(Hlong Width, Hlong Height, const char* Type, const char* Mode)
void HVariationModel::HVariationModel(Hlong Width, Hlong Height, const wchar_t* Type, const wchar_t* Mode)
(
Windows only)
void HVariationModel::CreateVariationModel(Hlong Width, Hlong Height, const HString& Type, const HString& Mode)
void HVariationModel::CreateVariationModel(Hlong Width, Hlong Height, const char* Type, const char* Mode)
void HVariationModel::CreateVariationModel(Hlong Width, Hlong Height, const wchar_t* Type, const wchar_t* Mode)
(
Windows only)
static void HOperatorSet.CreateVariationModel(HTuple width, HTuple height, HTuple type, HTuple mode, out HTuple modelID)
public HVariationModel(int width, int height, string type, string mode)
void HVariationModel.CreateVariationModel(int width, int height, string type, string mode)
描述
create_variation_modelcreate_variation_modelCreateVariationModelCreateVariationModelCreateVariationModelcreate_variation_model 用于创建可用于图像比较的变异模型。该变异模型的句柄将通过 ModelIDModelIDModelIDModelIDmodelIDmodel_id 返回。
通常,变异模型用于区分制造正确的物体(“合格物体”)与制造错误的物体(“不合格物体”)。其假设是,仅凭物体的灰度值即可进行区分。
变异模型由两部分组成:一是物体的理想图像(后续将通过 compare_variation_modelcompare_variation_modelCompareVariationModelCompareVariationModelCompareVariationModelcompare_variation_model 或 compare_ext_variation_modelcompare_ext_variation_modelCompareExtVariationModelCompareExtVariationModelCompareExtVariationModelcompare_ext_variation_model 与待测试物体的图像进行比对);二是代表物体每个点灰度值变异程度的图像。用于训练物体模型以及后续比对的图像尺寸分别通过
WidthWidthWidthWidthwidthwidth 和 HeightHeightHeightHeightheightheight 参数传入。用于训练和比对的图像类型通过
TypeTypeTypeTypetypetype 参数传入。
变体模型是通过多张良好物体的图像进行训练的。因此,训练图像中物体的位置和旋转必须保持一致。如果无法通过外部手段保证这一点,则可以通过匹配方法(参见
find_generic_shape_modelfind_generic_shape_modelFindGenericShapeModelFindGenericShapeModelFindGenericShapeModelfind_generic_shape_model)来确定物体的姿态。随后,可以使用 affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image 将图像变换为参考姿态。
参数 ModeModeModeModemodemode 用于确定理想物体图像及对应变异图像的计算方式。对于 ModeModeModeModemodemode='standard'"standard""standard""standard""standard""standard",物体的理想图像计算为所有训练图像在相应图像位置上的均值。相应的变异图像计算为训练图像在相应图像位置上的标准差。此模式的优势在于变异模型可以迭代训练,即一旦获得正常物体的图像,即可使用
train_variation_modeltrain_variation_modelTrainVariationModelTrainVariationModelTrainVariationModeltrain_variation_model 进行训练。此模式的缺点在于必须格外谨慎以确保仅使用良好物体的图像进行训练,因为均值和标准差对异常值不具有稳健性,即若不慎将不良物体的图像纳入训练,理想物体图像与变异图像的准确度都可能下降。
如果无法避免在训练变异模型时使用某些可能包含错误的物体图像,可以将 ModeModeModeModemodemode 设置为 'robust'"robust""robust""robust""robust""robust"。在此模式下,理想物体的图像将作为所有训练图像在相应图像位置上的中值来计算。相应的变体图像则通过计算训练图像与中值图像在相应图像位置上的中值绝对偏差(经适当缩放)来生成。该模式的优势在于对异常值具有稳健性。其缺点是无法进行迭代训练,即必须使用
concat_objconcat_objConcatObjConcatObjConcatObjconcat_obj 累积所有训练图像,并通过 train_variation_modeltrain_variation_modelTrainVariationModelTrainVariationModelTrainVariationModeltrain_variation_model 进行单次调用完成训练。
在某些情况下,无法获取多张训练图像。此时,无法仅凭单张训练图像训练出有用的变异图像。为解决此问题,可合成生成训练图像的变体,例如沿行和列方向将训练图像平移 像素,或使用灰度形态学运算(如
gray_erosion_shapegray_erosion_shapeGrayErosionShapeGrayErosionShapeGrayErosionShapegray_erosion_shape 和 gray_dilation_shapegray_dilation_shapeGrayDilationShapeGrayDilationShapeGrayDilationShapegray_dilation_shape),然后对这些合成修改后的图像进行训练。从单张图像创建变异模型的另一种方法是使用 ModeModeModeModemodemode='direct'"direct""direct""direct""direct""direct" 创建模型。在此情况下,变异模型只能通过使用
prepare_direct_variation_modelprepare_direct_variation_modelPrepareDirectVariationModelPrepareDirectVariationModelPrepareDirectVariationModelprepare_direct_variation_model 直接指定理想图像和变异图像来训练。由于变异通常在物体边缘处较为显著,因此应使用
sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp、edges_imageedges_imageEdgesImageEdgesImageEdgesImageedges_image 或 gray_range_rectgray_range_rectGrayRangeRectGrayRangeRectGrayRangeRectgray_range_rect 等边缘算子来生成变异图像。
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 未采用并行化处理。
此算子返回一个句柄。请注意,即使该句柄被用作特定算子的输入参数,这些算子仍可能改变此句柄类型的实例状态。
参数
WidthWidthWidthWidthwidthwidth (输入控制) extent.x → HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
待比较图像的宽度。
默认值:
640
建议值:
160, 192, 320, 384, 640, 768
HeightHeightHeightHeightheightheight (输入控制) extent.y → HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
待比较图像的高度。
默认值:
480
建议值:
120, 144, 240, 288, 480, 576
TypeTypeTypeTypetypetype (输入控制) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
待比较的图像类型。
默认值:
'byte'
"byte"
"byte"
"byte"
"byte"
"byte"
建议值:
'byte'"byte""byte""byte""byte""byte", 'int2'"int2""int2""int2""int2""int2", 'uint2'"uint2""uint2""uint2""uint2""uint2"
ModeModeModeModemodemode (输入控制) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
用于计算变异模型的方法。
默认值:
'standard'
"standard"
"standard"
"standard"
"standard"
"standard"
建议值:
'standard'"standard""standard""standard""standard""standard", 'robust'"robust""robust""robust""robust""robust", 'direct'"direct""direct""direct""direct""direct"
ModelIDModelIDModelIDModelIDmodelIDmodel_id (输出控制) variation_model → HVariationModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
变异模型的 ID。
复杂度
使用 create_variation_modelcreate_variation_modelCreateVariationModelCreateVariationModelCreateVariationModelcreate_variation_model
创建的变异模型,当 ModeModeModeModemodemode = 'standard'"standard""standard""standard""standard""standard" 和 ModeModeModeModemodemode =
'robust'"robust""robust""robust""robust""robust" 且 TypeTypeTypeTypetypetype = 'byte'"byte""byte""byte""byte""byte" 时,需要 12*WidthWidthWidthWidthwidthwidth*HeightHeightHeightHeightheightheight 字节的内存。对于
TypeTypeTypeTypetypetype = 'uint2'"uint2""uint2""uint2""uint2""uint2" 和 TypeTypeTypeTypetypetype =
'int2'"int2""int2""int2""int2""int2",则需要 14*WidthWidthWidthWidthwidthwidth*HeightHeightHeightHeightheightheight 字节。当 ModeModeModeModemodemode = 'direct'"direct""direct""direct""direct""direct" 且使用 clear_train_data_variation_modelclear_train_data_variation_modelClearTrainDataVariationModelClearTrainDataVariationModelClearTrainDataVariationModelclear_train_data_variation_model 清空训练数据后,对于 TypeTypeTypeTypetypetype = 'byte'"byte""byte""byte""byte""byte" 需要
2*WidthWidthWidthWidthwidthwidth*HeightHeightHeightHeightheightheight 字节,对于其他图像类型则需要
4*WidthWidthWidthWidthwidthwidth*HeightHeightHeightHeightheightheight 字节。
结果
create_variation_modelcreate_variation_modelCreateVariationModelCreateVariationModelCreateVariationModelcreate_variation_model 在所有参数正确时返回 2 (H_MSG_TRUE)。
可能的后继
train_variation_modeltrain_variation_modelTrainVariationModelTrainVariationModelTrainVariationModeltrain_variation_model,
prepare_direct_variation_modelprepare_direct_variation_modelPrepareDirectVariationModelPrepareDirectVariationModelPrepareDirectVariationModelprepare_direct_variation_model
另见
prepare_variation_modelprepare_variation_modelPrepareVariationModelPrepareVariationModelPrepareVariationModelprepare_variation_model,
clear_variation_modelclear_variation_modelClearVariationModelClearVariationModelClearVariationModelclear_variation_model,
clear_train_data_variation_modelclear_train_data_variation_modelClearTrainDataVariationModelClearTrainDataVariationModelClearTrainDataVariationModelclear_train_data_variation_model,
find_generic_shape_modelfind_generic_shape_modelFindGenericShapeModelFindGenericShapeModelFindGenericShapeModelfind_generic_shape_model,
affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image
模块
匹配