halcon |
您所在的位置:网站首页 › halcon圆形检测 › halcon |
引言
机器视觉中缺陷检测分为一下几种: blob分析+特征 模板匹配(定位)+差分:halcon——缺陷检测常用方法总结(模板匹配(定位)+差分) - 唯有自己强大 - 博客园 (cnblogs.com) 光度立体:halcon——缺陷检测常用方法总结(光度立体) - 唯有自己强大 - 博客园 (cnblogs.com) 特征训练 测量拟合 频域+空间域结合:halcon——缺陷检测常用方法总结(频域空间域结合) - 唯有自己强大 - 博客园 (cnblogs.com) 深度学习本篇主要总结一下缺陷检测中测量拟合的方法。通过测量被测物的尺寸(长短粗细、高矮胖瘦、间隙宽窄,包括我以前做过的平面度、平行度、轮廓度)等问题来检测产品是否合格。 测量拟合在产品生产过程中会不可避免的产生尺寸缺陷和表面外观缺陷,前几篇的缺陷着重于表面外观的检测,本篇基于尺寸缺陷检测用测量拟合的方法来实现。 🧡halcon中测量算子分析:在机器视觉中,测量是必不可少的一个分支。测量主要包括有物体大小的测量、距离的测量以及物体完整度检测等。在工业机器视觉里面常用的有1维测量和2维测量,不过大部分的测量都是要基于标定之后(需要获取环境参数,比如得到pixel的物理大小)不经过标定的测量都只是测量物体的相对大小(像素大小)。 1️⃣维测量: 像点到点的距离,边缘对的距离等沿着一维方向的测量都属于1D测量范畴。Halocn的一维测量的步骤: 创建测量矩形或者测量扇形区域(gen_measure_rectangle2,gen_measure_arc) 测量单边缘或边缘对(measure_pos,measure_pairs) 显示相关算子: gen_measure_rectangle2(形成测量矩形) gen_measure_rectangle2( Row, Column, Phi, Length1, Length2, Width, Height, Interpolation : MeasureHandle) 参数列表: Row//仿射矩形中心行坐标 Column//仿射矩形中心列坐标 Phi//仿射矩形的纵轴水平角,单位弧度 ,注意:测量矩形的测量方向的选择 Length1//仿射矩形宽度的一半 Length2//仿射矩形高度的一半 Width//图像的宽度 Height//图像的高度 Interpolation //插值类型('bicubic', 'bilinear', 'nearest_neighbor') MeasureHandle//测量对象句柄
二者区别: 1,测量液体线高度 本案例通过测量矩形测量液位线的位置来判断液体是装多了还是装少了。(测量矩形使用形状模板匹配定位跟随测量) 整体思路: 以瓶底为模板进行模板匹配 设定标准液线,高液线,低液线(瓶内液体在该范围内判定合格) 将测量矩形移动到测量位置进行测量 显示 dev_get_window (WindowHandle) set_display_font (WindowHandle, 15, 'mono', 'true', 'false') read_image (Image, 'ampoules/ampoules_01') * 创建模板 get_image_size (Image, Width, Height) gen_rectangle1 (ModelRegion, 264, 54, 321, 100) reduce_domain (Image, ModelRegion, TemplateImage) create_shape_model (TemplateImage, 3, rad(-5), rad(10), 'auto', ['none','no_pregeneration'], 'use_polarity', [25,54,4], 4, ModelID) get_shape_model_contours (ModelContours, ModelID, 1) NumImages := 8 for Index := 1 to NumImages by 1 read_image (Image, 'ampoules/ampoules_' + Index$'.2d') * 寻找实例 find_shape_model (Image, ModelID, rad(-5), rad(10), 0.7, 0, 0.5, 'least_squares', [3,1], 0.75, Row, Column, Angle, Score) MeanRows:=mean(Row) Length1:=52 Length2:=20 gen_measure_rectangle2 (0, 0, rad(90), Length1, Length2,Width, Height, 'nearest_neighbor', MeasureHandle) * 设置两条参考线 MeasureRow:=MeanRows-180 standard:=120//标准液线 offset:=20//允许液线偏移量 RefLineHigh:=standard-offset//高液线 RefLineLow:=standard+offset//低液线 dev_set_color ('cyan') dev_set_line_width (1) set_line_style (WindowHandle, 10) gen_contour_polygon_xld (ContourLineHigh, [RefLineHigh,RefLineHigh], [0,Width]) gen_contour_polygon_xld (ContourLineLow, [RefLineLow,RefLineLow], [0,Width]) gen_contour_polygon_xld (ContourStand, [standard,standard], [0,Width]) dev_display (Image) dev_display (ContourStand) dev_display (ContourLineHigh) dev_display (ContourLineLow) for I := 0 to |Score| - 1 by 1 * 将测量矩形移动到测量位置 dev_set_line_width (3) set_line_style (WindowHandle, 0) * 转换度量对象 translate_measure (MeasureHandle, MeasureRow, Column[I]) measure_pos (Image, MeasureHandle, 2.6, 7, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance) if(|RowEdge|>0) if(RowEdgeRefLineLow) dev_set_color ('red') gen_contour_polygon_xld (Contour, [RowEdge,RowEdge], [ColumnEdge-24,ColumnEdge+24]) dev_display (Contour) disp_message (WindowHandle, '低出'+(RowEdge-RefLineLow), 'image', RowEdge, ColumnEdge-30, 'red', 'false') else dev_set_color ('green') gen_contour_polygon_xld (Contour, [RowEdge,RowEdge], [ColumnEdge-24,ColumnEdge+24]) dev_display (Contour) endif endif endfor stop() endfor2,检测矩形通孔的缺陷 如图,该例程是对矩形区域的冲压通孔的缺陷检测,由图可以看到有的区域边缘有缺陷,具体表现就是边缘不齐整,向下突出了一块。 于是我们就自然想到了:提取矩形的实际轮廓xld,再拟合一个标准的轮廓xld,利用dist_rectangle2_contour_points_xld 这个算子求实际轮廓与理论轮廓点对点的距离,只要这个距离超过了我们的设定值,就认为边缘有缺陷了。而且还可以根据距离的大小和超出设定距离的点的数量来评价这个缺陷的严重程度。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |