[db:标题]

摘要:关于Halcon中variation_model模型这方面的资料网络上也基本是空白,不过好在Halcon的帮助文档非常人性化,经过自己的尝试,基本复现了这个算子的各个细节,分享供大家共同研究。
十一期间在家用期间研读了下Halcon的variation_model模型,基本上全系复现了他的所有技术要求和细节,这里做个记录。   其实这个模型的所有原理都不是很复杂的,而且Halcon中的帮助文档也讲的很是清楚,所以通过猜测、测试、编码基本能搞清楚是怎么回事。   关于这个模型,Halcon里有如下十来个函数:   create_variation_model、prepare_variation_model, train_variation_model、compare_variation_model、prepare_direct_variation_model、clear_variation_model, clear_train_data_variation_model, compare_ext_variation_model, get_thresh_images_variation_model, get_variation_model、 clear_train_data_variation_model, write_variation_model 。   看起来涉及到了蛮多的东西的。   那么一般的工作流程是:create_variation_model ---> train_variation_model ---> prepare_variation_model ---> compare_variation_model --->clear_variation_mode。   即: 创建模型,然后训练模型,接着就是准备模型,这个时候就可以使用了,那么可以开始做输入比较了,比较完事了,清楚模型。   所谓的variation_model的模型呢,其实是从一系列已经确认是OK的样图中,训练出2幅结果图,即上限图和下限图,也可以认为是训练出图像公差带,当要进行比较的时候,就看输入的图像的每个像素是否位于这个公差带之类,如果是,则这个点是合格的,不是,则这个像素点就是不合格的区域。   那么在Halcon中,把这个工作就分解为了上面这一大堆函数。我们稍微来对每个函数做个解析。   一、create_variation_model 创建模型。   这个算子有如下几个参数:       create_variation_model( : : Width, Height, Type, Mode : ModelID)   这里主要是注意Type和Mode两个参数。     其中Type可以取'byte', 'int2', 'uint2' 这三种类型,我这里的解读是这个算子支持我们常用的8位灰度图像 和 16位的Raw图像, 16位因为有signed short和unsigned short,所有这里也有int2 和uint2两种类型。   Mode参数有3个选择,: 'standard', 'robust', 'direct',这也是这个算子的灵魂所在,具体的做法后续再说,在创建时只是保存了他们的值,并没有做什么。   那么创建的工作要做的一个事情就是分配内存,Halcon里的帮助文章是这样描述的:   A variation model created with create_variation_model requires 12*Width*Height bytes of memory for Mode = 'standard' and Mode = 'robust' for Type = 'byte'. For Type = 'uint2' and Type = 'int2', 14*Width*Height are required. For Mode = 'direct' and after the training data has been cleared with clear_train_data_variation_model, 2*Width*Height bytes are required for Type = 'byte' and 4*Width*Height for the other image types.   为什么是这样的内存,我们后续再说,接着看下一个函数。   二、train_variation_model 训练模型   这个算子是这个功能的最有特色的地方,他用于计算出variation_model 模型中的ideal image和variation image,即理想图像和方差图像。   当Mode选择'standard', 'robust'时,此算子有效,当Mode为'direct'无效。
阅读全文