Rinspect_gasket_local_deformable.hdev
检测垫圈局部变形
*这个例子演示了如何利用局部变形匹配(local deformable matching)来寻找出垫圈是否变形
dev_update_off()
Smoothness:=25
read_image(ModelImage,..
read_image( Image,......
下面是ModelImage和Image(两个基本相近,肉眼难辨)
显示信息不予赘述。。。
一:创建variation model (差异模型)
sobel_amp(ModelImage, EdgeAmplitude, 'thin_max_abs', 5)
*/ 'thin_sum_abs' (thin(|a|) + thin(|b|)) / 4来求得幅值大小, 其中a,b是sobel卷积之后所求单一像素的输出值(横向,纵向)/*
1 , create_variation_model( 425,410,'byte', 'direct', VariationModelId)
create_variation_model( : : , , , : )
创建一个差异比较的模型
描述:这个函数创建一个用于图像比较的handle, variation model是典型的从不合格产品中分辨出合格产品的应用模型(根据灰度图比较)。
差异模型(VariationModel)包含两部分,第一部分是理想的标准图(用于之后的比较,compare_variation_model或者compare_ext_variation_model),第二部分是一张图片,它包含了训练图中各张之间或者平均的差异信息。
/*差异模型(VM)使用多张标准图来进行训练,它的本质需要这些训练用的图片能够在同一个位置合同一个角度,当无法保证同位置同角度的时候,可以使用find_shape_model匹配来使图片转换到正确位置(利用affine_trans_image)*/
这里的type指的是对比的图像类型,Mode参数决定了如何训练标准图以及如何进行侧视图和标准图之间的差异匹配,Mode:
' standard' :标准图由训练图的平均值来得到(经过矫正位置之后的训练图),差异值的计算是标准图与测试图的标准差 (这种方法的优势是可以通过迭代来训练标准图,直接使用train_variation_model进行训练,缺点是必须花费很大代价来确认训练图的正确性,保证准确率)
' robust' : 标准图由多张训练图的中值来计算,差异值的计算是由训练图经过正确缩放后与测试图进行比较得到的一组数值得中值(这种模式对误差的容忍度搞,不过不可以迭代训练,必须通过concat_obj 和train_variation_model来训练)
2, prepare_direct_variation_model(ModelImage, EdgeAmplitude, VariationModelID, 30, 1.5)
对进行的比较做准备,使用这个函数,前面的创建差异模型时候的mode必须是’direct'。direct在这里相对于prepare_variation_model的差别是,标准图和相应的差异图并不是使用train_variation_model计算出来的,而是直接在RefImage和VarImage中指出来,作为函数输入。此函数非常适合标准图只有一张,即没有多张训练图的情况。这种情况下,差异图variation image应该由边缘函数'sobel_amp, edges_image, gray_range_rect' 等生成。(variation image指的是an image that represents the amount of gray value variation at every point of the object)
二:创建本地可变性模型
1, create_local_deformable_model(ModelImage, 'auto', rad(-10), rad(20),'auto',0.9,1.1, 'auto', 'none', 'use_polarity', 'auto', 'auto', [],[],ModelID)
描述:
这个操作把模板Template做准备工作用来后续的局部变形检测,变形模型的ROI作为此模板的roi
变形检测用来检测一个对象是否局部变形,这个检测模型在保持严格的基础上允许一些细小的变形,
和find_shape_model(在图中找到相应图形的最佳匹配)不同,create_local_deformable_model更加智能化,它可以预估变形程度并且修正图像中物体的位置
(物体相对于图像的相对位置),它可以处理更大的变形。
模型中,参照点(reference point)是由标准图中对象的重力中心点位置决定的,并且使用物体模板的axis-aligned cnclosing rectangle(个人理解就是一个矩形的长短轴相关)来决定搜索区域(使用find_local_deformable_model)
参数介绍:
Template:输入多通道图像,用来创建model
NumLevels:输入integer,用来控制最多有多少层金字塔层数:'auto', 0,1,2,3,。。。
AngleStart:输入角度,控制初始的最小角度(调整匹配时候开始的最小角度,默认-0.39)
AngleExtent: