欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

检测-PCB板线路

程序员文章站 2022-06-13 11:46:31
...

本次分享的示例代码很简单,总共加起来不到20行,但是这个很简单的案例,确有两个很重要的halcon知识点,因此该示例算是小而精的典范。

先上代码:

* PCB板线路检测
* 读图像
read_image (Image, 'pcb')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
* detect defects ...
* 灰度图像进行腐蚀和开运算 暗的像素变多
* 灰度图像进行膨胀和闭运算 亮的像素变多
* 通过灰度图像的开运算,让线路板中断开的地方连接起来了
gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon')
* 通过灰度图像的闭运算,让线路板中断开的地方断得更开了
gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon')
* 动态二值化,达到差分的效果
* 两个输入的灰度图像,以offset为基础,按照指定的条件,选择特定的灰度值组成输出的结果灰度图像
dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal')
dev_display (Image)
dev_set_color ('red')
dev_set_draw ('margin')
dev_display (RegionDynThresh)

两个重点:
1. 关于形态学,可以对两种不同的对象进行处理,一种是区域,一种是灰度图像。在本示例代码中,是对灰度图像进行的处理。
对灰度图像处理:
腐蚀和开运算 -> 暗的像素变多
膨胀和闭运算 -> 亮的像素变多
对区域进行处理:
腐蚀和开运算 -> 区域变小
膨胀和闭运算 -> 区域变大
2. 在此示例中,通过灰度形态学处理+dyn_threashold这个算子结合处理,达到了difference算子进行区域差分达到的效果。也通过差分,从而得到了PCB线路中的断开区域。

机器视觉在3C行业的使用,PCB板的检测是一个很重要的方面,同时和机械臂结合起来,能真正实现机器代替人,将有缺陷的PCB板区分出来。当然,本案例只是一个简单的示例,实际的使用会比这个要复杂,但是,在实际场景中,本示例所使用的方法,是可以借鉴的。

更多最新文章,请关注公众号:

检测-PCB板线路

代码的执行效果如下所示:

待处理的PCB板图像,通过肉眼,可以看到是有断线的。

检测-PCB板线路

灰度图像开运算:

检测-PCB板线路

灰度图像闭运算:

检测-PCB板线路

通过dyn_threshold处理后,得到的差分区域,红色的都是:

检测-PCB板线路

在原图中标记出断线位置:

检测-PCB板线路