zoukankan      html  css  js  c++  java
  • halcon极坐标转换与亮暗缺陷检测结合的案例(转)

     3 dev_set_draw ('margin')
     4 dev_set_line_width (2)
     5 set_font (3600, '-Courier New-16-*-*-*-*-1-')
     6 
     7 list_files ('C:/Users/Administrator/Desktop/bottle', ['files','follow_links','recursive'], ImageFiles)
     8 tuple_regexp_select (ImageFiles, ['\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
     9 
    10 for Index := 1 to |ImageFiles| - 1 by 1
    11     read_image (Image, ImageFiles[Index])
    12     get_image_size (Image, Width, Height)
    13     threshold (Image, Region, 0, 60)
    14     fill_up (Region, RegionFillUp)
    15     opening_circle (RegionFillUp, RegionOpening, 8.5)
    16     smallest_circle (RegionOpening, Row0, Column0, Radius0)
    17  
    18     *下面这个函数是自己写的抓圆的函数,细节不表。你也可以用fit_circle_contour_xld  gen_circle_contour_xld实现类似功能
    19     find_circle (Image, PartCircleXLD, Regions, Cross, Circle, Row0, Column0, Radius0 + 10, 0, 360, 30, 70, 20, 1, 50, 'negative', 'first', 'inner', 10, 'circle', RowCenter, ColCenter, Radius)
    20     dev_display (Image)
    21     dev_display (Circle)
    22     
    23     *该算子对一个图像的圆弧区域进行极坐标变换,圆弧外径是Radius,内径是Radius - 100,即圆弧厚度是100
    24     *同理,圆弧展开成矩形后,矩形宽度应该是外弧圆圈的周长,即6.28319 * Radius(周长 = 2π × r) ;矩形高度应该是圆弧厚度,即100
    25     polar_trans_image_ext (Image, PolarTransImage, RowCenter, ColCenter, 0, 6.28319, Radius - 100, Radius, 6.28319 * Radius, 100, 'nearest_neighbor')
    26     
    27     *下面这句仅用于观察image的反向极坐标变换,生成的图片的宽高还是设置为最原始图像的Width, Height
    28     polar_trans_image_inv  (PolarTransImage, XYTransImage, RowCenter, ColCenter, 0, 6.28319, Radius - 100, Radius, Width, Height, 'nearest_neighbor')
    29     
    30     *mean_image选择主要沿水平方向进行模糊,动态阈值的'not_equal'参数同时筛选出了跟周围比过亮和过暗的区域(因为过暗和过亮都是缺陷)
    31     mean_image (PolarTransImage, ImageMean, 500, 3)
    32     dyn_threshold (PolarTransImage, ImageMean, Region1, 30, 'not_equal')
    33     
    34     fill_up_shape (Region1, RegionFillUp1, 'area', 1, 100)
    35     *开运算去掉细小干扰
    36     opening_circle (RegionFillUp1, RegionOpening1, 1.5)
    37     connection (RegionOpening1, ConnectedRegions)
    38     
    39     *之所以要进行极坐标转换,就是为了这里用'height'来筛选,这是本例使用极坐标变换最关键的原因
    40     select_shape (ConnectedRegions, SelectedRegions, 'height', 'and', 10, 99999)
    41     polar_trans_region_inv (SelectedRegions, XYTransRegion, RowCenter, ColCenter, 0, 6.28319, Radius - 100, Radius, 6.28319 * Radius, 100, Width, Height, 'nearest_neighbor')
    42     dev_display (Image)
    43     dev_display (XYTransRegion)
    44     
    45     stop ()
    46 endfor


    虽然极坐标变换是本例中的核心思路,但是仍有三句非常巧妙的代码,仔细想想为什么这三句代码很巧妙:

    31 mean_image (PolarTransImage, ImageMean, 500, 3) 32 dyn_threshold (PolarTransImage, ImageMean, Region1, 30, 'not_equal')
    40     select_shape (ConnectedRegions, SelectedRegions, 'height', 'and', 10, 99999)

    原文连接 https://www.cnblogs.com/xh6300/p/10406753.html
  • 相关阅读:
    centos7.6 安装与配置 MongoDB yum方式
    MongoDB 介绍
    centos 关闭selinux
    前端 HTML标签属性
    前端 HTML 标签嵌套规则
    前端 HTML 标签分类
    前端 HTML body标签相关内容 常用标签 表单标签 form里面的 input标签介绍
    前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类
    前端 HTML form表单标签 select标签 option 下拉框
    POJ 1426
  • 原文地址:https://www.cnblogs.com/bile/p/13355602.html
Copyright © 2011-2022 走看看