开启左侧

函数:滤除与检测区域接触的blob区域

[复制链接]
zazaniao 发表于 2015-6-14 21:03:49 | 显示全部楼层 |阅读模式
1、功能:
滤除与检测区域接触的blob区域,得到新的blob区域

2、函数原型:
remove_blobs_touching_border(Image, ROIRegion, BlobRegions : NewBlobRegions : : ErrorCode)

3、参数:
Image (input_object)
image → object
图像

ROIRegion (input_object)
object → object
检测区域

BlobRegions (input_object)
object → object
原始blob区域(包含多个区域的集合)

NewBlobRegions (output_object)
object → object
滤除与检测区域接触的区域后得到的新的blob区域(包含多个区域的集合)

ErrorCode (output_control)
any → (tuple)
返回错误类型。返回值为0,表示函数运行成功;非0,表示函数内部出现异常。

4、函数体:
  1. try
  2.     ErrorCode:=0
  3.     *确保检测区域在图像内
  4.     intersection (ROIRegion, Image, ROIRegionTemp)
  5.     *检测区域缩小
  6.     erosion_circle (ROIRegionTemp, RegionErosion, 2.5)
  7.     *获取检测区域的边界回型区域
  8.     difference (ROIRegionTemp, RegionErosion, RegionDifference)
  9.     *创建空的新Blob区域
  10.     gen_empty_obj (NewBlobRegions)
  11.     *去除与检测区域接触的blob区域
  12.     *原理:blob区域与检测区域接触,那么必定与检测区域的边界回型区域有交集,有交集,把该区域去掉
  13.     *无交集,把该blob区域保存在新的blob区域
  14.     count_obj (BlobRegions, Number)
  15.     for i:=1 to Number by 1
  16.         *选择一个blob区域
  17.         select_obj (BlobRegions, ObjectSelected, i)
  18.         *求交集,通过交集是否有效,来判断该blob区域是否为与边界接触,不接触,则保存
  19.         intersection (RegionDifference, ObjectSelected, RegionIntersection)
  20.         Area:=0
  21.         area_center (RegionIntersection, Area, Row, Column)
  22.         if(Area>0)

  23.         else
  24.             count_obj (NewBlobRegions, Number1)
  25.             if(Number1=0)
  26.                 copy_obj (ObjectSelected, NewBlobRegions, 1, 1)
  27.             else
  28.                 concat_obj (NewBlobRegions, ObjectSelected, NewBlobRegions)
  29.             endif
  30.         endif

  31.     endfor
  32. catch (Exception)
  33.     ErrorCode:=-1
  34.     *创建空的新Blob区域
  35.     gen_empty_obj (NewBlobRegions)
  36. endtry
  37. return ()
复制代码

5、使用方法:
解压缩后,把文件《select_max_length_contour.hdvp》放置在halcon安装硬盘的路径
Program Files\MVTec\HALCON-10.0\procedures
关闭并重新启动HDevelop。

6、文件:



remove_blobs_touching_border.hdev

886 Bytes, 下载次数: 89

remove_blobs_touching_border.hdvp

2.92 KB, 下载次数: 78

翱翔 发表于 2020-5-26 08:51:16 | 显示全部楼层
本帖最后由 翱翔 于 2020-5-26 08:55 编辑

多谢提供思路,for循环对于区域很多的滤除运行很慢,优化了一程序
[url=][/url]


捕获.PNG
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表