中易网

链码表和线段表如何应用在PCB孔位检测中?

答案:1  悬赏:30  
解决时间 2021-01-21 11:46
链码表和线段表如何应用在PCB孔位检测中?
最佳答案
用freeman链码对边缘进行轮廓跟踪,采用链码表和线段表存储和处理数据。

  1图像的获取和预处理

  (1)本文采用背光照明和高分辨率的相机获得高对比度和高质量的图像,图像分辨率为409*096,图像源的质量非常重要,它将直接影响到后续图像处理的效果。

  (2)采用中值滤波对图像进行平滑处理,其目的是尽量减少或消除噪声的影响,改善图像质量。中值滤波在一定的条件下可以克服线性滤波器如最小均方滤波、均值滤波等带来的图像细节模糊,而且对滤波脉冲干扰及图像扫描噪声最为有效,对于本文涉及的图像是PCB板的孔位细节缺陷,所以采取中值滤波更为合适,它的好处是既可以消除噪声又不破坏图像的边缘。

  (3)用OSTU(最大类间方差法)进行阈值分割,此方法简单且稳定有效,它是在判定最小函数和二乘法原理的基础上自动选取阈值的二值化方法,其思路是将图像直方图用某一灰度分割成两组,被分割成的两组中方差最大时,此灰度就被定了最佳阈值[2]。

  2用链码表和线段表[3]对图像的数据结果进行描述

  (1)用Freeman链码轮廓跟踪Freeman链码[4]分为八连通和四连通链码,八连通链码用中心像素指向它的8个邻点的方向来定义,四连通是用中心像素指向它的4个邻点方向,取值0~3。本文运用八连通链码,如下图2所示,8连通链码按顺时针方向旋转,每顺时针旋转45度,链码值就减少1;链码值加4,则方向反向,加8则又回到原来的方向。链码值超过8或者小于0的时候,就用模8运算除去或者补上8。

  (2)链码表的应用

  对于PCB板中单个孔位的跟踪,本文采用Freeman链码方式来对目标物体求取边界链码,当搜索到某一点为目标体的灰度级时,此点即为目标体的边界点,如果此点未进行编码过,则此点即为某一个孔位的起始点,从该点开始用Freeman链码的方式进行轮廓跟踪,可以跟踪到边界上每个点的链码值,并且根据中心点与各邻点坐标的偏差值,如表1,可由起始点的坐标得到每一个边界点的坐标,即可表达为一个二维数组inc[8][2]。

  具体编码过程为:设目标物体的灰度级为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坐标的大小排序。

  4实验结果

  本实验采取本项目PCB图像的一个截图来进行处理,截图和处理填充后的图像。

  对截图用本文的算法和程序进行处理,用链码表和线段表进行数据的存储,可以得到PCB孔位的一些参数信息。

  5结束语

  本文采用背光源获取高质量的PCB图像,并用OSTU阈值分割法稳定而简单的获取源图像的二值图像,扫描并进行轮廓跟踪,采用向右追踪下一点的原则,更准备更省时,运用链码表和线段表存储数据和数据处理,非常方便和精确地获取到PCB板的周长,面积和孔位形心,成功地解决了PCB板打孔时的定位问题。本实验在VisualC++软件平台上进行了运行和验证,可以在31us的时间内检测并处理216个圆孔,获取本项目所要求的速度和精度,结果证明此方法是可行的。
文章引自深圳宏力捷
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
52岁后槽牙松动
方太液化气改天然气灶的喷嘴直径多大
节哀顺变和节哀顺便两个词的区别在哪里?
正在解码图像数据并初始化模拟程序。。。;neb
红果果怎么去啊,我要去那办事
上市公司与非上市公司财务管理制度的区别?
福纳特洗衣地址在哪,我要去那里办事
谁有关于我国北斗二代中GEO,MEO,和IGSO卫星
内蒙古机电职业技术学院——这个学校咋样呀?
驾校业务员主要做些什么?
智格教育(上海嘉定区)地址在什么地方,我要处
我堂妹十四岁去年被查出尿毒症,请问怎么样才
应届生网上投简历的话需要写求职信吗,外企的
这样还能长高吗?帮忙看下
粤语锅锅仔什么意思
推荐资讯
T字部很黄,而且毛孔粗大,有脂肪粒,脸颊就
添加什么可让水泥快速凝固
估算716除9,就是把716看作什么,在除以9,约等
请问九月份去那里旅游结婚好呢,国外和国内都
everlight的槽型光电开关有神马型号的?
六个月宝宝吃什么饭对长高有帮助呢?我家宝宝
如何购买抗风红?怎么购买抗风红?
win7输入热键失效,中英文标点不能热键切换.控
短路和断路对于串 并联电路有何联系.我只知道
怎样才不晕车?
鄢陵县许昌鄢陵中心医院地址是什么,有没有知
夫妻想恩爱有什么办法
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?