美文网首页
Halcon模板匹配之形状匹配

Halcon模板匹配之形状匹配

作者: 抬头望天低头走路 | 来源:发表于2019-04-02 13:04 被阅读0次

    一、匹配流程

    就是:创建模板和匹配模板,其中:

    创建模板:

    通过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)

        endif

    endwhile

    *五、释放资源

    clear_shape_model (ModelID)

    close_framegrabber (AcqHandle)

    相关文章

      网友评论

          本文标题:Halcon模板匹配之形状匹配

          本文链接:https://www.haomeiwen.com/subject/csawbqtx.html