链码表和线段表在PCB孔位检测中的应用

[09-12 18:55:41]   来源:http://www.88dzw.com  PCB设计   阅读:8688

文章摘要:具体编码过程为:设目标物体的灰度级为G1,背景灰度级为G2。对整个PCB 板的图 像进行搜索,当某一点A 满足G1 的灰度级时,即视为边界点,从A 开始,顺时针进行搜 索孔位的边界,定义初时值为链码值等于4 的方向进行搜索下一个点,若下一个点灰度值等 于G1,即为下一个边界点,否则,搜索方向再顺时针旋转45 度,继续搜索链码值为3 的点, 这样一直找到第一个满足灰度值等于G1 的点B 为止。然后把B 作为新的边界点,并置跟 踪结束标志为0,若在邻点中没有找到边界点,则置跟踪结束标志为1,表示它为孤立点。B 点作为新的边界点,取它的链码值为起始链码的方向,顺时针方向重复上面的跟踪,一直 到最后的

链码表和线段表在PCB孔位检测中的应用,标签:pcb培训,pcb是什么,pcb软件,http://www.88dzw.com


  具体编码过程为:设目标物体的灰度级为G1,背景灰度级为G2。对整个PCB 板的图 像进行搜索,当某一点A 满足G1 的灰度级时,即视为边界点,从A 开始,顺时针进行搜 索孔位的边界,定义初时值为链码值等于4 的方向进行搜索下一个点,若下一个点灰度值等 于G1,即为下一个边界点,否则,搜索方向再顺时针旋转45 度,继续搜索链码值为3 的点, 这样一直找到第一个满足灰度值等于G1 的点B 为止。然后把B 作为新的边界点,并置跟 踪结束标志为0,若在邻点中没有找到边界点,则置跟踪结束标志为1,表示它为孤立点。

  B 点作为新的边界点,取它的链码值为起始链码的方向,顺时针方向重复上面的跟踪,一直 到最后的一个边界点为A 点为止,单个孔位图跟踪完毕,并对此区域进行颜色填充标记, 代表已经搜索过,所跟踪的链码值存入链码表中。本文把链码表存放在一维整形数组code[ ] 中,下标为0 和1 的存放内容分别为起始边界点的坐标X 和Y,在下标为2 的单元中存放 总的链码个数N,从下标为3 的单元开始一次存放第一个边界点的链码值,第二个边界点的 链码值……一直到最后的第N 个边界点的链码值。


  3 线段表

  (1)线段表的定义

  由于链码表只能表示目标体的边界,而不能表示边界的内外,链码表无法表示目标体的 内部像素,但实际上,对一个图像进行处理除了要得到边界点和周长,也取得其他的参数, 如本文着重要得到的孔心数据,以及面积等,要实现内部像素的处理和运算,还需要另外的 一个种结构——线段表。

  区域也可以看成由一条条水平的线段所组成。每一个线段可由它的两个端点来表示。将 区域中的所有水平线段按扫描顺利排列起来的端点表称为线段表。线段表的每一个点由两部 分组成,偶数点表示左端点的坐标,奇数点表示右端点的坐标,如果定义一个结构DOT 来 表示线段表,用一个一维数组dot[ ], 设i 表示线段的个数,则此此线段的左端点可以表示为 dot[2*i],右端点为dot[2*i+1]。

  (2)线段表的应用

  线段表获取了每一条线段和线段的端点值,所以通过运算可以非常方便的获取区域的内 部像素,并求出图像的其他重要参数,如本文需要求出的参数:计算区域的面积,重心;对 某个区域进行快速填充(避免重复搜索,提高效率);区域的形状参数,其公式表示为:F =L*L/4 πS

  本项目的目的重在检测圆孔的圆心,所以对于区域的形状检测也尤为重要,上述公式中 L 是周长,S 是面积,通过这种比值得出的形状参数F,圆的形状参数为1,与1 的差异越 大,与圆的形状相差就越大,为了统计PCB 板孔中圆孔的个数和圆心,可以用到此形状参 数进行判断,如果在1 附近的,可以近似作为圆孔进行处理,否则直接填充为非圆孔颜色标 记,不记入结果之中。

  (3) 链码表到线段表的转换[5]

  用线段表表示可以得出图像其他的重要参数,与链码表向线段表的转换可以依照表2。




  具体步骤如下:

  链码经过表的转化后,得到三种类型[6]:中间点、类型号0;左端点、类型号1;右端 点、类型号2;奇异点、类型号3。根据链码表中的数据可知进入的链码值和离开的链码值, 对这两者的方向可以确定出此点的类型。在程序设计上面,可以依照表3 进行点的类型判定, 若为左右端点,则将其坐标存入临时数组中,奇异点可以看成是一个相同的左右点重合,即 应存两次,中间点不用存入。在线段表中端点按Y 坐标的大小排序,在同一行中按X 坐标 的大小排序。

上一页  [1] [2] [3]  下一页


Tag:PCB设计pcb培训,pcb是什么,pcb软件PCB设计

《链码表和线段表在PCB孔位检测中的应用》相关文章