天天看點

一文學會,膠位偏移、缺膠、斷膠、溢膠檢測(含源碼)

檢測任務

點膠檢查檢測以下缺陷:

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、使用建立的模闆檢測點膠軌迹,得到結果

一文學會,膠位偏移、缺膠、斷膠、溢膠檢測(含源碼)

————————————————

本文僅做學術分享,如有侵權,請聯系删文。​

—THE END—