HALCON基于形状的模板匹配

来源:互联网 发布:程序员考试考什么 编辑:程序博客网 时间:2024/06/06 02:40
一、匹配流程
就是:创建模板和匹配模板,其中:
创建模板:
通过BLOB分析处理图像创建ROI,或读取ROI拿到模板图像。再通过相关参数创建模板匹配原型。
匹配模板:
使用匹配原型进行相应变换,在需要匹配的图像上找和模板一样的位置及相似的分数
二、通过XLD创建AOI
gen_region_contour_xld
gen_region_polygon_xld
修正函数
erosion_*  侵蚀,减小ROI
dilation_*  膨胀,扩大ROI
shape_trans  拟合边缘,形状转换
boundary  获取轮廓,像素级边界
move_region 平移
组合
Intersection 交集
Difference 差集
Union2  并集
三、生成模板
create_shape_model( 
Template , // 模板图像 
NumLevels,  // 图像金字塔,层数越高,像素越少
AngleStart,  // 起始角度 
AngleExtent,  // 角度范围 
AngleStep,  // 角度步长 
Optimization,  // 优化算法,none不减少像素,point_reduction_low大约一半点,point_reduction_medium 大约1/3,point_reduction_high大约1/4
Metric,   // 极性,如果图像有光线的变化,需要调整这个参数,但由于匹配的
极性模式: use_polarity 生成的模板就一个目标
极性模式: ignore_global_polarity 生成的模板有两个目标,一个是原图另一个是灰度值取反,黑的变白,白的变黑
极性模式: ignore_local_polarity 生成的模板有三个目标,除上面两个还有一个是灰度值渐变
Contrast,  // 对比度  (越大边缘越少,越小边缘越多)
MinContrast, // 最小对比度 
ModelID // 模板ID  )
以上参数可以通过Matching助手来设置的具体效果
相关算子介绍
create_shape_model//生成的匹配图像有移动和旋转
create_scaled_shape_model//除了移动和旋转还有放大缩小
create_aniso_shape_model//除了移动和旋转还有放大缩小,但这个的放大缩小是可以控制X轴Y轴放大缩小
以下为这三个算子的参数差异
create_aniso_shape_model  (Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleRMin, ScaleRMax, ScaleRStep, ScaleCMin, ScaleCMax, ScaleCStep, Optimization, Metric, Contrast, MinContrast : ModelID)
create_scaled_shape_model (Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep,                                      Optimization, Metric, Contrast, MinContrast : ModelID)
create_shape_model        (Template : : NumLevels, AngleStart, AngleExtent, AngleStep,                                                                     Optimization, Metric, Contrast, MinContrast : ModelID)
获取模板的参数
determine_shape_model_params
通过像素轮廓可以直接创建模板
create_shape_model_xld
create_scaled_shape_model_xld
create_aniso_shape_model_xld
四、模板匹配算子(find_scaled_shape_models:匹配多个模板)
find_scaled_shape_model(
Image,查找的图像
ModelID, 生成的模板参数
AngleStart, 匹配最小角度
AngleExtent, 匹配最大角度(一起就是匹配角度范围)
ScaleMin, 最小放大倍数
ScaleMax, 最大放大倍数
MinScore, 放大倍数步长
NumMatches, 匹配个数,0则自动选择,100则最多匹配100个
MaxOverlap, 要找到模型实例的最大重叠
SubPixel, 亚像素精度
NumLevels, 图像金字塔
Greediness,贪婪系数
Row, 中心点(X)
Column, 中心点(Y)
Angle, 角度
Scale, 放大倍数
Score)匹配的分数
五、释放资源
clear_shape_model (ModelID)
以下为示例代码:

open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'gray', -1, 'false', 'default', 'XXX', 0, -1, AcqHandle)grab_image (Image, AcqHandle)*一、画矩形,选择即将拿来做模板的区域draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)reduce_domain (Image, Rectangle, ImageReduced)inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 5, 5)area_center (Rectangle, Area, Row3, Column3)*二、生成模板create_shape_model (ImageReduced, 5, 0, rad(360), 'auto', 'pregeneration', 'use_polarity', 5, 'auto', ModelID)get_shape_model_contours (ModelContours, ModelID, 1)while (true)    grab_image (Image, AcqHandle)    *三、对模板进行匹配(find_shape_models多个模板匹配)    find_shape_model (Image, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row1, Column1, Angle, Score)    *四、找到后把模板的区域仿射到找到的区域(为了看效果)    if(|Score| == 1)        vector_angle_to_rigid (0, 0, 0, Row1, Column1, Angle, HomMat2D)        affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D)    endifendwhile*五、释放资源clear_shape_model (ModelID)close_framegrabber (AcqHandle)