美文网首页halcon视觉专栏
halcon第十二讲,毛刺去除

halcon第十二讲,毛刺去除

作者: 青莲居士_村长 | 来源:发表于2019-10-16 21:15 被阅读0次

    在视觉测量中我们很会被毛刺问题困扰,产生干扰的因素很多,有打光问题和产品本生带毛刺,接下来给兄弟们带来两种去毛刺的方法。

    第一种

    read_image (Image1323153Ba0b96cf52f88f1, '1') 
    rgb1_to_gray (Image1323153Ba0b96cf52f88f1, GrayImage) 
    laplace_of_gauss (GrayImage, ImageLaplace, 0.5) 
    threshold_sub_pix (ImageLaplace, Border, 1) 
    select_obj (Border, ObjectSelected, 1) 
    smooth_contours_xld (ObjectSelected, SmoothedContours, 15) 
    get_contour_xld (SmoothedContours, Row1, Col1) 
    get_contour_xld (ObjectSelected, Row2, Col2) 
    
    *错误距离阈值 
    errdist:=0.5 
    
    distRow:=  sqrt((Row1-Row2)*(Row1-Row2)+(Col1-Col2)*(Col1-Col2)) 
    a:=find(distRow[>]errdist,1) 
    e:=Row2[a] 
    g:=Col2[a] 
    
    dev_display (Image1323153Ba0b96cf52f88f1) 
    gen_cross_contour_xld (Cross, e, g, 10, 0.785398)
    

    运行结果


    image.png
    image.png

    第二种

    read_image(Image,'1')
    get_image_size(Image,Width,Height)
    dev_close_window()
    dev_open_window(0,0,Width/3,Height/3,'black',WindowHandle)
    dev_set_draw ('margin')
    dev_set_color ('cyan')
    dev_set_line_width(2)
    rgb1_to_gray(Image,GrayImage)
    dev_display(GrayImage)
    
    *鼠标画你要找的roi区域
    draw_rectangle1(WindowHandle,Row1,Column1,Row2,Column2)
    *显示roi区域
    gen_rectangle1(roi1, Row1, Column1, Row2, Column2)
    *减少其他区域,显示你画的roi区域
    reduce_domain(GrayImage,roi1,ImageReduced)
    
    threshold (ImageReduced, Regions, 200, 255)
    opening_circle(Regions,ReigionsoOpening,3.5)
    closing_circle(ReigionsoOpening,ReigionsoClosibng,3.5)
    *fill_up(ReigionsoClosibng,ReigionFillup)
    *boundary(ReigionFillup,ReigionBoundary,'outer')
    *ilation_circle(ReigionBoundary,ReigionDilation,1)
    reduce_domain(Image,ReigionsoClosibng,ImageReduced1)
    gen_contour_region_xld(ImageReduced1,Contours, 'border')
    *edges_sub_pix(ImageReduced1,Edges,'canny',1,10,60)
    dev_display(ImageReduced1)
    dev_display(Contours)
    stop()
    
    *根据长度裁剪
    select_shape_xld(Contours, AreaEdges1, 'contlength', 'and', 50, 9999)
    *根据xld找寻区域轮廓的所有x,y坐标
    count_obj (AreaEdges1, Number)
    *遍历亚像素坐标点
    y2:=[]
    x2:=[]
    for x := 0 to Number-1 by 1
    select_obj (AreaEdges1, ObjectSelected, x+1)
    get_contour_xld (ObjectSelected, Row, Column)
    y2 := [Row, y2]
    x2 := [Column, x2]
    endfor
    
    *找最大最小x,y
    min_x:=min(x2)
    max_x:=max(x2)
    min_y:=min(y2)
    max_y:=max(y2)
    *画直线
    disp_line (WindowHandle, min_y,min_x , min_y, max_x)
    disp_line (WindowHandle,  min_y,min_x ,max_y , min_x)
    disp_line (WindowHandle, max_y , min_x, max_y, max_x)
    disp_line (WindowHandle, max_y, max_x, min_y, max_x)
    
    

    运行结果


    image.png
    image.png

    有什么需求,可以评论一起探讨思路

    相关文章

      网友评论

        本文标题:halcon第十二讲,毛刺去除

        本文链接:https://www.haomeiwen.com/subject/idcpmctx.html