帖子实现在电路析上如何打到垫板的方法。
以及稳定精准的确定垫板的位置,旋转角度及尺寸。
跟前边帖子一样也是通过几何拟合的相关函数。
fit_rectangle2_contour_xld实现精准提取几何参数。
具体代码与注释如下
halcon实现电路板海棉板等检测
- dev_update_pc ('off')
- dev_update_window ('off')
- dev_update_var ('off')
- read_image (Image, 'die_pads')
- dev_close_window ()
- get_image_size (Image, Width, Height)
- dev_open_window (0, 0, Width * 2, Height * 2, 'black', WindowHandle)
- dev_set_part (0, 0, Height - 1, Width - 1)
- *通过blob分析快速找到图片中的垫板
- fast_threshold (Image, Region, 180, 255, 20)
- connection (Region, ConnectedRegions)
- *此函数的几何特征选择算子。ConnectedRegions, SelectedRegions分别为输入及结果输出变量。
- *['area','anisometry']表示选择面积与椭圆参数特征。anisometry表示长轴与短轴比值。and表示抉择全部满足条件区域。
- *[200,1], [1200,2]一一对应前面特征的低高范围。
- select_shape (ConnectedRegions, SelectedRegions, ['area','anisometry'], 'and', [200,1], [1200,2])
- * Construct a ROI for subpixel-accurate edge detection.
- *构造一个亚像素的ROI
- *将区域内的孔洞填充。
- fill_up (SelectedRegions, RegionFillUp)
- *将区域RegionFillUp,进行凸性转换输出RegionTrans
- shape_trans (RegionFillUp, RegionTrans, 'convex')
- *使用形态学提取图像中边界,'inner'表示提取的是内边界
- boundary (RegionTrans, RegionBorder, 'inner')
- dilation_circle (RegionBorder, RegionDilation, 2.5)
- union1 (RegionDilation, RegionUnion)
- *执行亚像素精度的边缘检测
- reduce_domain (Image, RegionUnion, ImageReduced)
- edges_sub_pix (ImageReduced, Edges, 'sobel_fast', 0.5, 20, 40)
- *选择属于垫板的边缘段
- select_shape_xld (Edges, SelectedContours, 'contlength', 'and', 10, 200)
- * Merge adjacent edge fragments to obtain one contour per pad.
- *合并邻近轮廓的亚像素,将端点很近的轮廓连接起来。SelectedContours, UnionContours分别为输入与输出轮廓。
- *2表示两轮廓的绝对距离, 1两轮廓相对距离比值阈值, 'attr_keep'表示表示各轮廓 属性值 是否被忽略。
- *其实就是临近两个轮廓的端点距离即没有超过2,也没有超过两较长轮廓的长度乘以1,则此两个邻近轮廓相连。
- union_adjacent_contours_xld (SelectedContours, UnionContours, 2, 1, 'attr_keep')
- *根据垫板边缘进行矩形拟合
- *UnionContours为输入轮廓,'tukey'为拟合算法名称。-1表示拟合 采用的最多轮廓点,-1表示所有点都参与拟合。
- *0被认为是封闭轮廓首尾点的最大距离。
- *0表示轮廓开始结束点参与拟合的个数。3表示迭代次数,2表示离群剪切因子,越小离群值越多。随后的为输出参数。
- fit_rectangle2_contour_xld (UnionContours, 'tukey', -1, 0, 0, 3, 2, Row, Column, Phi, Length1, Length2, PointOrder)
- *根据拟合的矩形参数生成一个矩形用于显示。
- gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2)
- dev_display (Image)
- dev_set_colored (12)
- dev_display (Rectangle)
复制代码
|