HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量

HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量

示例程序源码(加注释)

  • 关于显示类函数解释
    dev_update_off ()
    dev_close_window ()
    FileName := ‘bonds/ball_bond_ccd_’
    read_image (Image, FileName + 1$‘02’)
    dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
    dev_set_line_width (2)
    set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
    dev_set_draw (‘margin’)
    get_system (‘store_empty_region’, StoreEmptyRegion)
    set_system (‘store_empty_region’, ‘false’)
  • 定义变量并初始化
    NumImages := 6
    for Index := 1 to NumImages by 1
    read_image (Image, FileName + Index$‘02’)
    dev_display (Image)
    • 获得运行时间
      count_seconds (S1)
    • 二值化
      threshold (Image, Region, 135, 255)
    • 分割连通域
      connection (Region, ConnectedRegions)
    • 使用宽度高度面积进行区域筛选
      select_shape (ConnectedRegions, SelectedRegions, [‘width’,‘height’,‘area’], ‘and’, [115,115,5000], [130,130,15000])
      fill_up (SelectedRegions, RegionFillUp)
      shape_trans (RegionFillUp, Pads, ‘convex’)
    • 求取内孔区域
      difference (Pads, RegionFillUp, RegionDifference)
    • 开运算
      opening_rectangle1 (RegionDifference, BondWire, 10, 10)
    • 求取最大内切圆
      shape_trans (BondWire, BallBonds, ‘inner_circle’)
    • select_shape_proto基于区域之间的某些关系选择区域,这里使用重叠区域
    • select_shape_proto(测量区域,对比区域:筛选出的区域:关系,最小值,最大值:)
      select_shape_proto (Pads, BallBonds, MissingBonds, ‘overlaps_rel’, 0, 0)
      count_seconds (S2)
      Time := (S2 - S1) * 1000
    • 膨胀
      dilation_circle (BallBonds, RegionDilation2, 10)
    • 求交集
      intersection (RegionDilation2, BondWire, RegionIntersection)
    • 求边缘的老方法了,之前的贴子传送门
      boundary (RegionIntersection, RegionBorder, ‘inner’)
      dilation_circle (RegionBorder, RegionDilation, 3.5)
      union1 (RegionDilation, RegionUnion)
      reduce_domain (Image, RegionUnion, ImageReduced)
      edges_sub_pix (ImageReduced, Edges, ‘canny’, 1, 20, 70)
    • union_adjacent_contours_xld - 计算端点靠近的轮廓的并集。
    • union_adjacent_contours_xld(边缘:合并的边缘:端点最大绝对阈值,端点最大相对阈值,模式:)
      union_adjacent_contours_xld (Edges, UnionContours, 10, 1, ‘attr_keep’)
    • 筛选XLD轮廓
      select_contours_xld (UnionContours, SelectedContours, ‘contour_length’, 20, 20000, -0.5, 0.5)
    • 通过XLD轮廓拟合圆形
      fit_circle_contour_xld (SelectedContours, ‘atukey’, -1, 0, 0, 5, 7, CircleRow, CircleColumn, Radius, StartPhi, EndPhi, PointOrder)
    • 绘制XLD轮廓圆形
      gen_circle_contour_xld (ContCircle, CircleRow, CircleColumn, Radius, 0, 6.28318, ‘positive’, 1)
      count_obj (BondWire, NBonds)
      gen_empty_obj (MeasureArrows)
    • 下边这些就非常简单的啦
      dev_display (Image)
      dev_set_color (‘cyan’)
      dev_display (ContCircle)
      dev_set_color (‘magenta’)
      area_center (RegionDilation2, Area, Row, Column)
      area_center (MissingBonds, AreaM, RowM, ColumnM)
      select_shape_proto (Pads, BallBonds, BallTooClose, ‘distance_contour’, 0, 10)
      area_center (BallTooClose, AreaB, RowB, ColumnB)
      dev_set_color (‘yellow’)
      dev_display (Pads)
      if (|AreaM| > 0 or |AreaB| > 0)
      dev_set_color (‘red’)
      dev_display (MissingBonds)
      dev_display (BallTooClose)
      for IndexE := 0 to |AreaM| - 1 by 1
      NRow := RowM[IndexE]
      NCol := ColumnM[IndexE]
      disp_message (WindowHandle, ‘Ball bond\nis missing’, ‘image’, NRow - 150, NCol - 110, ‘red’, ‘true’)
      endfor
      for IndexE := 0 to |AreaB| - 1 by 1
      NRow := RowB[IndexE]
      NCol := ColumnB[IndexE]
      disp_message (WindowHandle, ‘Ball bond is too\nclose to border’, ‘image’, NRow - 150, NCol - 150, ‘red’, ‘true’)
      endfor
      endif
      for IndexM := 1 to NBonds by 1
      select_obj (ContCircle, ObjectSelected, IndexM)
      • 求取XLD轮廓的最小外接矩形
        smallest_rectangle1_xld (ObjectSelected, minY, minX, maxY, maxX)
      • 求取XLD轮廓中心
        area_center_xld (ObjectSelected, Area1, Ybb, Xbb, PointOrder1)
      • 绘制XLD箭头
        gen_arrow_contour_xld (Arrow, Ybb, Xbb, minY, Xbb, 12, 12)
        concat_obj (MeasureArrows, Arrow, MeasureArrows)
        gen_arrow_contour_xld (Arrow, Ybb, Xbb, maxY, Xbb, 12, 12)
        concat_obj (MeasureArrows, Arrow, MeasureArrows)
        dev_set_color (‘green’)
        dev_display (MeasureArrows)
        select_obj (ContCircle, ObjectSelected, IndexM)
        area_center_xld (ObjectSelected, Area2, Ybb, Xbb, PointOrder2)
        disp_message (WindowHandle, (2 * Radius[IndexM - 1])KaTeX parse error: Expected 'EOF', got '\nin' at position 129: …ond(s) detected\̲n̲i̲n̲ ̲' + Time’.2f’ + ’ ms’, ‘window’, 12, 12, ‘black’, ‘true’)
    • Evaluate and display results
      if (Index != NumImages)
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endif
      endfor
      set_system (‘store_empty_region’, StoreEmptyRegion)

处理思路

这个例子是主要讲解了使用blob分析方法,结合XLD轮廓拟合,对电路焊点的检测与测量。count_seconds计时算子select_shape_proto、union_adjacent_contours_xld、select_contours_xld、fit_circle_contour_xld、gen_circle_contour_xld、gen_arrow_contour_xld、smallest_rectangle1_xld、area_center_xld、gen_arrow_contour_xld

后记
大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rank()over 函数的使用

1. over()是分析函数,可以和rank()函数配合使用,也可以和其他函数配合使用。取每个学科排名前三的分数,sql语句如下: select * from (select rank() over(partition by subject order by mark desc) rk,S.* from S) T where T.rk&…

天梯赛2016-L2

L2-001. 紧急救援 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你…

伺服系统控制网络的重要性! 现场总线的重要性! SSCNET运动控制系统与发展趋势

引言:在2010年的时候,在北京的一个数控公司工作。产品采用的是通过运动控制卡发脉冲的方式,控制机床的X、Y、Z轴进行加工。 机床在加工产品的时候,一直存在着精度的问题,例如DMG的机床可以达到0.01的加工精度&#x…

apache配置

wamp环境安装需要VC运行库的支持 apache如果需要外网访问,在其配置文件中寻找127.0.0.1然后替换为all 外网访问需要关闭防火墙?转载于:https://www.cnblogs.com/gremlin/p/5581486.html

TCP/IP 通信示例

TCP/IP 通信示例 Global String ReadData_P_All$, ReadData_P$(10), data$ Global Preserve Double x Global Integer foundnumber_PFunction TCPServerSetNet #201, "192.168.0.1", 4000, CRLF, NONE, 0OpenNet #201 As ClientWaitNet #201Print "TCP Connect…

MySQL分库分表总结参考

单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。 单库多表 随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对u…

小兔伴伴家庭动物园AR智能早教产品上市

2016年6月,经过乐卓大家庭所有人的共同努力,公司旗下首款新品——小兔伴伴之《家庭动物园》3D智能学习卡正式面世。 每个孩子都应该在合适的时间去体验丰富的声音、色彩和动作,《家庭动物园》,专为2-6岁儿童贴心设计,是…

EPSON 自带CCD图像处理包使用举例

EPSON 机器人可以购买CCD图像处理包选项,CCD图像处理包与SPEL语言高度结合,可以非常快的将项目投入应用,举例说明CCD图像处理包与SPEL的联合使用。 EPSON 以视觉序列定义图像处理的一个项目,视觉序列是一组按照特定顺序排列的视觉…

索引使用原则

前两篇文章我总结了一些SQL数据库索引的问题,这篇主要来分析下索引的优缼点,以及如何正确使用索引。 索引的优点:这个显而易见,正确的索引会大大提高数据查询,对结果进行排序、分组的操作效率。 索引的缺点…

根据时间变换页面背景

1.概述 有些时侯为了丰富页面的显示效果,将页面制作成根据时间变换页面背景的样式,这样会使浏览者对此网站不会感觉厌倦,同时也会觉得网站制作的非常新颖。本实例通过Date对象的getHours()方法获得当前系统时间的小时,然后根据不同…

EPSON 自带CCD图像处理包的典型应用框架

EPSON 自带CCD图像处理包的典型应用框架 Function main ******************************************** Very important statement below: Use the * //非常重要的是在实际运行时,用合适的Z数值代替预定义的 ZHeight 。Z height which you wrote down earlier in *…

EPSON 利用CCD图像处理包标定工具坐标系

EPSON 利用CCD图像处理包标定工具坐标系 仰视式安装的相机可以用来计算工具偏移,下例使用仰视式相机来计算工具偏移。该功能首先运行一个序列来定位工具的尖端。然后计算出工具偏移(前提是CCD已标定)。 Function CalcTool Boolean foundReal…

挂马方式研究、挂马检测技术研究

1. 挂马定义 所谓的挂马,就是黑客通过各种手段,包括SQL注入,网站敏感文件扫描,服务器漏洞,网站程序0day, 等各种方法获得网站管理员账号,然后登陆网站后台,通过数据库"备份/恢复"或者…

大幅面多相机高精度定位及测量解决方案

随着机器视觉应用的日益广泛,大幅面多相机视觉系统的需求越来越多,主要应用方向为大幅面高精度的定位与测量和场景拼接等。多相机视觉系统的难点在于多相机坐标系的统一,可以分为两类,一是相机视野间无重叠部分,二是相…

Hadoop 使用FileSystem API 读取数据

代码: package com.hadoop;import java.io.IOException; import java.io.InputStream; import java.net.URI;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.…

EPSON 机器人多任务下的互锁处理

在很多时候,有多个任务具有动作命令指令。为了防止多个任务运行动作命令时,对仅有的一个机器人产生的控制冲突,有必要进行连锁处理。一个任务进行机器人控制时,另一个任务则会等待控制权。这样,各任务就可以完全按照预…

mysql高可用方案MHA介绍

mysql高可用方案MHA介绍概述MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用.在宕机的时间内(通常10—30秒内),完成故障切换,部署MHA,可避免主从一致性问题,节…

SQL递归查询(with as)

SQL递归查询(with cte as) with cte as( select Id,Pid,DeptName,0 as lvl from Department where Id 2 union all select d.Id,d.Pid,d.DeptName,lvl1 from cte c inner join Department d on c.Id d.Pid)select * from cte1 表结构Id Pid …

庖丁解牛TLD(一)——开篇

最近在网上多次看到有关Zdenek Kalal的TLD的文章,说他做的工作如何的帅,看了一下TLD的视频,感觉确实做的很好,有人夸张的说他这个系统可以和Kniect媲美,我倒是两者的工作可比性不大,实现的方法也不同。但这…