Advertisement

halcon python缺陷检测_边缘缺陷检测

阅读量:

原图来自Ihalcon论坛

缺陷如在下图圆框中

首先,阈值分割+形态学处理,将包含边缘部分图像进行抠图

然后使用canny滤波器进行边缘检测

如下图红、绿双线

将凸起部分平滑掉,细节如下右图

计算待检测边缘上的点到平滑后边缘的距离,超过一定阈值公差即为缺陷

如下图

缺陷检测关键代码*选择待检测边缘

select_obj(UnionContours, ObjectSelected, Index)

*平滑边缘

smooth_contours_xld (ObjectSelected, SmoothedContours, 89)

*阈值公差

disTH := 5

*用于保存缺陷边缘X坐标

flawPtsX :=[]

*用于保存缺陷边缘Y坐标

flawPtsY :=[]

*得到待检测边缘点坐标

get_contour_xld(ObjectSelected, Row2, Col2)

*待检测边缘上点到平滑边缘的距离

tuple_length(Row2, Length)

for Index1 := 0 to Length-1 by 1

distance_pc(SmoothedContours, Row2[Index1], Col2[Index1], DistanceMin, DistanceMax)

*根据公差判断是否合格

if(DistanceMin > disTH)

flawPtsX :=[flawPtsX,Col2[Index1]]

flawPtsY :=[flawPtsY,Row2[Index1]]

endif

endfor

*将缺陷点生成区域,并进一步筛选

gen_region_points(Region1, flawPtsY, flawPtsX)

dilation_circle(Region1, RegionDilation, 5)

connection(RegionDilation, ConnectedRegions1)

select_shape(ConnectedRegions1, SelectedRegions1, 'area', 'and', 200, 99999)

gen_empty_obj(EmptyObject)

count_obj(SelectedRegions1, Number1)

*再从筛选后的区域,选择不合格的边缘

for Index1 := 1 to Number1 by 1

select_obj(SelectedRegions1, ObjectSelected2, Index1)

smallest_rectangle1(ObjectSelected2, Row11, Column11, Row21, Column2)

clip_contours_xld(ObjectSelected, ClippedContours, Row11, Column11, Row21, Column2)

concat_obj(EmptyObject, ClippedContours, EmptyObject)

endfor

*连接相邻不合格边缘缺陷

union_adjacent_contours_xld(EmptyObject, EmptyObject, 50, 1, 'attr_keep')

*合并缺陷

concat_obj(FlawEdgeObject, EmptyObject, FlawEdgeObject)

原图及详细注释的完整源代码见链接:

#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。

全部评论 (0)

还没有任何评论哟~