一文學會,膠位偏移、缺膠、斷膠、溢膠檢測

  • 博主寫作不容易,孩子需要您鼓勵
  • 萬水千山總是情 , 先點個贊行不行
  • 檢測任務

    點膠檢查檢測以下缺陷:
    1.缺少粘合膠的部分(斷膠)
    2.粘合劑過多或過少的部分(溢膠、缺膠)
    3.粘合膠離其預定位置太遠(點膠偏移)

    halcon對應示例程序:
    apply_bead_inspection_model.hdev

    效果圖示:
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

    檢測思路

    示例程序的圖像處理思路:

    1.使用halcon的可變形模板匹配,將檢測物品轉正,方便檢測
    這裏我們用的較少,因爲我們平時在做點膠檢測的時候,用普通的模板匹配,還有普通的2D仿射變換就可以保證圖像的一致性。

    2.定義粘合膠條的參考路徑,以及膠條的寬度,還有誤差容忍值
    注意,這裏halcon的官方例程是給了一個軌跡的點集,我們在實際的檢測中,可以使用CAD圖紙導入或者手繪路徑,完成此步驟。關於CAD圖紙導入halcon我會出一期教學博客,寫完了把鏈接貼上來。

    3. 利用算子create_bead_inspection_model 創建點膠軌跡模型
    創建點膠軌跡的模型,相當於我們使用模板匹配時候用到的穿件模板算子,也不難的。到第三步,我們已經完成了創建模板與點膠軌跡模型的步驟,準備工作都進行完畢,接下來就要進行檢測了。

    4.校正胎圈的位置,並生成四條平行輪廓,進行顯示
    顯示一下前面準備工作的結果,包括膠軌跡的樣子,可容許膠軌跡範圍等。

    5.讀入待檢測圖像,並進行校正,最後利用算子apply_bead_inspection_model進行點膠軌跡檢測
    從這一步開始,就使用前面幾部的模板,進行點膠軌跡的檢測了。首先我們先把圖片進行一個仿射變換,轉正圖片,讓我們處理的點膠區域每次都保持一致。這樣極大地減小了處理難度。再調用apply_bead_inspection_model進行點膠軌跡檢測,就檢測完成啦。是不是並不難。

    6.根據不同的檢測類型在窗口上進行相關顯示
    最後搞個交互界面顯示一下結果就OK了啦。

    點膠質量檢測代碼及解析

    在本例中,圖片矯正使用平面可變形匹配。
    dev_update_off ()

    首先使用仿射變換將圖片轉正,之後創建平面可變形模模板
    這一步就是爲了讓每次處理的圖片一致性好。

    prepare_alignment (RegionPart, RowT, ColumnT, ModelID)
    求取檢測區域的最小矩形,這樣的好處是隻對需要進行圖像處理的區域進行處理,使算法速度增加。
    smallest_rectangle1 (RegionPart, PartRow1, PartColumn1, PartRow2, PartColumn2)

    定義點膠軌跡的參考路徑
    //這裏使用軌跡點集創建點膠軌跡,也可以通過在參考圖像上繪製該路徑來生成,例如使用算子draw_nurbs.
    gen_contour_nurbs_xld (ContourRef, [701.767,626.953,538.867,443.54,390.447,360.28,354.247,363.9,400.1,458.02,509.907,588.34,659.533,696.94], [319.24,336.133,367.507,431.46,489.38,546.093,646.247,722.267,776.567,826.04,869.48,912.92,934.64,929.813], ‘auto’, [15,15,15,15,15,15,15,15,15,15,15,15,15,15], 3, 1, 5)

    定義點膠軌跡模板創建變量
    TargetWidth := 14
    WidthTolerance := 7
    PositionTolerance := 30
    Polarity := ‘dark’

    創建點膠軌跡模板
    //參數說明:參考輪廓(ContourRef);膠軌跡標準寬度(TargetWidth);膠軌跡寬度誤差大小(WidthTolerance);膠軌跡寬所在的區域範圍(PositionTolerance);膠軌跡顏色(Polarity);進行處理的sigma與閾值([], []);創建出的模板(BeadInspectionModel)
    create_bead_inspection_model (ContourRef, TargetWidth, WidthTolerance, PositionTolerance, Polarity, [], [], BeadInspectionModel)

    讀入圖片進行顯示點膠軌跡、描述信息等
    read_image (Image, ‘bead/adhesive_bead_01’)

    矯正圖像,使圖像與之前的圖像保持較好的一致性
    align_bead (Image, ImageAligned, ModelID, RowT, ColumnT) //校正

    創建兩個平行輪廓,用於顯示正確點膠軌跡的寬度,並將兩個輪廓合併到一個變量中
    gen_parallel_contour_xld (ContourRef, ModelSide1, ‘regression_normal’, TargetWidth * 0.5)
    gen_parallel_contour_xld (ContourRef, ModelSide2, ‘regression_normal’, -TargetWidth * 0.5)
    concat_obj (ModelSide1, ModelSide2, ModelSides)

    創建兩個平行輪廓,用於顯示正確點膠軌跡容許範圍,並將兩個輪廓合併到一個變量中
    gen_parallel_contour_xld (ContourRef, PositionToleranceSide1, ‘regression_normal’, PositionTolerance)
    gen_parallel_contour_xld (ContourRef, PositionToleranceSide2, ‘regression_normal’, -PositionTolerance)
    concat_obj (PositionToleranceSide1, PositionToleranceSide2, PositionToleranceSides)

    halcon顯示操作相關操作
    dev_close_window ()
    dev_open_window_fit_size (0, 0, PartColumn2 - PartColumn1 + 1, PartRow2 - PartRow1 + 41, -1, -1, WindowHandle)
    set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
    dev_set_part (PartRow1 - 20, PartColumn1, PartRow2 + 20, PartColumn2)
    dev_display (ImageAligned)
    dev_set_line_width (2)
    dev_set_color (‘green’)
    dev_display (ContourRef) //粘合膠條的參考路徑
    dev_set_line_width (1)
    dev_display (ModelSides) //膠條的寬度
    dev_set_color (‘yellow’)
    dev_display (PositionToleranceSides) //容許點膠範圍

    顯示描述文本
    Message := ‘Correct adhesive bead and the reference contour. The’
    Message[1] := ‘yellow contours indicate the range of position tolerance.’
    disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘black’, ‘true’)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()
    *
    開始讀入圖片進行檢測
    TextOffset := 20 //偏移值
    NumImages := 7
    for Index := 1 to NumImages by 1
    read_image (Image, ‘bead/adhesive_bead_’ + Index$‘02’)

    矯正圖片
    align_bead (Image, ImageAligned, ModelID, RowT, ColumnT)

    使用之前生成的點膠軌跡模板,進行點膠軌跡檢測
    //參數說明:進行檢測的圖像(ImageAligned);膠軌跡左輪廓(LeftContour);膠軌跡右輪廓(RightContour);膠軌跡寬缺陷所在位置(ErrorSegment);使用的模板(BeadInspectionModel);缺陷種類(ErrorType)
    apply_bead_inspection_model (ImageAligned, LeftContour, RightContour, ErrorSegment, BeadInspectionModel, ErrorType)

    顯示點膠軌跡,檢測結果等相關信息
    dev_display (ImageAligned)
    dev_set_line_width (1)
    dev_set_color (‘white’)
    dev_display (ContourRef)
    dev_display (ModelSides)
    dev_display (PositionToleranceSides)
    dev_set_line_width (2)
    dev_set_color (‘green’)
    dev_display (LeftContour) //檢測出的內部XLD
    dev_display (RightContour) //檢測出的外部XLD
    dev_set_color (‘red’)
    dev_display (ErrorSegment) //錯誤部分區域

    if (|ErrorType| == 0)
    沒有錯誤信息,顯示OK
    Message := ‘Adhesive bead is OK’
    disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘white’, ‘forest green’)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()
    else
    有錯誤信息,顯示not OK,並且顯示缺陷種類,標識缺陷位置
    Message[0] := ‘Adhesive bead is not OK:’
    ErrorClasses := [‘no bead’,‘too thin’,‘too thick’,‘incorrect position’]
    for ClassIndex := 0 to |ErrorClasses| - 1 by 1
    Class := ErrorClasses[ClassIndex]
    ErrorIndices := find(ErrorType,Class)
    if (ErrorIndices != -1)
    select_obj (ErrorSegment, SelectedSegments, ErrorIndices + 1)
    dev_set_color (‘red’)
    dev_set_line_width (3)
    if (Class != ‘no bead’)
    gen_display_segments (SelectedSegments, LeftContour, RightContour, ErrorParts)
    dev_display (ErrorParts)
    else
    dev_display (SelectedSegments)
    endif
    area_center_points_xld (SelectedSegments, Area, Row, Column)
    for E := 0 to |ErrorIndices| - 1 by 1
    disp_message (WindowHandle, ErrorIndices[E] + 1, ‘image’, Row[E], Column[E] - TextOffset, ‘white’, ‘red’)
    TextOffset := 20 - TextOffset
    endfor
    endif
    endfor
    disp_message (WindowHandle, Message, ‘window’, 12, 12, ‘white’, ‘red’)
    disp_message (WindowHandle, [1:|ErrorType|] + ': ’ + ErrorType, ‘image’, 500, 500, ‘red’, ‘false’)
    if (Index < NumImages)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()
    endif
    endif
    endfor

    釋放所有模板句柄
    clear_bead_inspection_model (BeadInspectionModel)
    clear_deformable_model (ModelID)

    圖示處理思路

    1、使用符合要求圖像,創建模板
    在這裏插入圖片描述
    2、讀入新圖像,矯正圖像(圖像仿射變換)

    矯正前圖像:
    在這裏插入圖片描述
    矯正後圖像:
    在這裏插入圖片描述
    3、使用創建的模板檢測點膠軌跡,得到結果
    在這裏插入圖片描述

  • 博主簡介:
  • 工業自動化上位機軟件工程師、機器視覺算法工程師、運動控制算法工程師。目前從業於智能製造自動化行業。 博主郵箱:[email protected]
  • 幫忙點個贊吧。哈哈。
  • 發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章