QQ登录

只需一步,快速开始

5.3 halcon实现电路板海棉板等检测

[ 复制链接 ]
帖子实现在电路析上如何打到垫板的方法。
以及稳定精准的确定垫板的位置,旋转角度及尺寸。
跟前边帖子一样也是通过几何拟合的相关函数。
fit_rectangle2_contour_xld实现精准提取几何参数。

具体代码与注释如下

halcon实现电路板海棉板等检测

halcon实现电路板海棉板等检测

  1. dev_update_pc ('off')
  2. dev_update_window ('off')
  3. dev_update_var ('off')
  4. read_image (Image, 'die_pads')
  5. dev_close_window ()
  6. get_image_size (Image, Width, Height)
  7. dev_open_window (0, 0, Width * 2, Height * 2, 'black', WindowHandle)
  8. dev_set_part (0, 0, Height - 1, Width - 1)
  9. *通过blob分析快速找到图片中的垫板
  10. fast_threshold (Image, Region, 180, 255, 20)
  11. connection (Region, ConnectedRegions)
  12. *此函数的几何特征选择算子。ConnectedRegions, SelectedRegions分别为输入及结果输出变量。
  13. *['area','anisometry']表示选择面积与椭圆参数特征。anisometry表示长轴与短轴比值。and表示抉择全部满足条件区域。
  14. *[200,1], [1200,2]一一对应前面特征的低高范围。
  15. select_shape (ConnectedRegions, SelectedRegions, ['area','anisometry'], 'and', [200,1], [1200,2])
  16. * Construct a ROI for subpixel-accurate edge detection.
  17. *构造一个亚像素的ROI
  18. *将区域内的孔洞填充。
  19. fill_up (SelectedRegions, RegionFillUp)
  20. *将区域RegionFillUp,进行凸性转换输出RegionTrans
  21. shape_trans (RegionFillUp, RegionTrans, 'convex')
  22. *使用形态学提取图像中边界,'inner'表示提取的是内边界
  23. boundary (RegionTrans, RegionBorder, 'inner')
  24. dilation_circle (RegionBorder, RegionDilation, 2.5)
  25. union1 (RegionDilation, RegionUnion)
  26. *执行亚像素精度的边缘检测
  27. reduce_domain (Image, RegionUnion, ImageReduced)
  28. edges_sub_pix (ImageReduced, Edges, 'sobel_fast', 0.5, 20, 40)
  29. *选择属于垫板的边缘段
  30. select_shape_xld (Edges, SelectedContours, 'contlength', 'and', 10, 200)
  31. * Merge adjacent edge fragments to obtain one contour per pad.
  32. *合并邻近轮廓的亚像素,将端点很近的轮廓连接起来。SelectedContours, UnionContours分别为输入与输出轮廓。
  33. *2表示两轮廓的绝对距离, 1两轮廓相对距离比值阈值, 'attr_keep'表示表示各轮廓 属性值 是否被忽略。
  34. *其实就是临近两个轮廓的端点距离即没有超过2,也没有超过两较长轮廓的长度乘以1,则此两个邻近轮廓相连。
  35. union_adjacent_contours_xld (SelectedContours, UnionContours, 2, 1, 'attr_keep')
  36. *根据垫板边缘进行矩形拟合
  37. *UnionContours为输入轮廓,'tukey'为拟合算法名称。-1表示拟合 采用的最多轮廓点,-1表示所有点都参与拟合。
  38. *0被认为是封闭轮廓首尾点的最大距离。
  39. *0表示轮廓开始结束点参与拟合的个数。3表示迭代次数,2表示离群剪切因子,越小离群值越多。随后的为输出参数。
  40. fit_rectangle2_contour_xld (UnionContours, 'tukey', -1, 0, 0, 3, 2, Row, Column, Phi, Length1, Length2, PointOrder)
  41. *根据拟合的矩形参数生成一个矩形用于显示。
  42. gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2)
  43. dev_display (Image)
  44. dev_set_colored (12)
  45. dev_display (Rectangle)
复制代码


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索