機器視覺,圖像處理,halcon學習,印刷缺陷檢測

機器視覺,圖像處理,halcon學習,印刷缺陷檢測

variation model

變化的模板的主要原理是當前圖片與理想的模板圖像作對比,算法找出不通過,也就是在實際使用中,印刷缺陷的檢測可以使用的varation Model.

理想圖片和變化的圖片

在這裡的理想圖片的獲取通常是通過一系列OK的圖片進行訓練而得到的,訓練的時候也會允許每個點灰度值的一定變化,這個信息保存在變化的圖像中,再通過write_vartion_model保存到文件,理想圖片和變化圖片都保存在變化的模板variation model中,這個模型就用來與當前獲取的圖片進行比較。

實現步驟

機器視覺,圖像處理,halcon學習,印刷缺陷檢測

var_model的實現步驟

矯正圖片到標準位置

這裡的標準位置是我們選擇的一個初始位置,用來做訓練的圖片都需要通過仿射變換到標準位置,在做變化的模板的時候,一定要校準圖像到標準位置,那麼在使用變化的模板的時候,同樣需要把圖片校準到標準的圖像位置,這個步驟非常重要。

關鍵算子

area_center 獲取模板中心的座標

create_shape_model創建模板

find_shape_mode查找模板

vector_angle_to_rigid生成一個仿射變換矩陣

affine_trans_image應用一個矩陣到圖像,轉換圖像到標準位置

訓練變化的模板

訓練變化的模板是使用一系列好的樣本進行訓練,trainf_variation_model用來訓練,訓練生成一個理性圖片和變化的圖片,變化的圖像可以理解為像素點公差範圍。 在這裡也可以用一張圖片來進行訓練,變化的圖像可以使用邊緣濾波來得到。

準備和使用模板

如果使用一系列的圖片來創建變化的模板,可以使用prepare_variation_model來進行準備,使用compare_variation_model來查找出缺陷,再通過select_shape來選擇對應特徵的缺陷、判斷即可。如果使用一張圖片來創建的模板,使用prepare_direct_variation_model來進行準備模板,使用compare_ext_variation_model.

銷燬變化的模板

在halcon中,只要在使用create_*這個算子中,就要使用clear_*來進行成對的進行釋放資源,否則會造成內存和句柄洩露

例程

訓練部分

*提取字符部分
threshold (Image, Region, 100, 255)
fill_up (Region, RegionFillUp)
difference (RegionFillUp, Region, RegionDifference)
shape_trans (RegionDifference, RegionTrans, 'convex')
dilation_circle (RegionTrans, RegionDilation, 8.5)
reduce_domain (Image, RegionDilation, ImageReduced)
inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, 20)
gen_contours_skeleton_xld (ModelRegions, Model, 1, 'filter')

*獲取模板中心
area_center (RegionDilation, Area, RowRef, ColumnRef)
*創建模板
create_shape_model (ImageReduced, 5, rad(-10), rad(20), 'auto', 'none', 'use_polarity', 20, 10, ShapeModelID)
*創建變化的模板
create_variation_model (Width, Height, 'byte', 'standard', VariationModelID)

for I := 1 to 15 by 1
read_image (Image, 'pen/pen-' + I$'02d')
*查找模板
find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
if (|Score| == 1)
*圖像對準變換
vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)
affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')
*訓練模板
train_variation_model (ImageTrans, VariationModelID)
dev_display (ImageTrans)
dev_display (Model)
endif
endfor
*獲取變化模板信息
get_variation_model (MeanImage, VarImage, VariationModelID)
*準備模板
prepare_variation_model (VariationModelID, 20, 3)
* 清空var model內存
clear_train_data_variation_model (VariationModelID)

處理部分

for I := 1 to 30 by 1
read_image (Image, 'pen/pen-' + I$'02d')
*查找模板
find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
if (|Score| == 1)
*矯正圖片
vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)
affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')
reduce_domain (ImageTrans, RegionROI, ImageReduced)

compare_variation_model (ImageReduced, RegionDiff, VariationModelID)
connection (RegionDiff, ConnectedRegions)
select_shape (ConnectedRegions, RegionsError, 'area', 'and', 20, 1000000)
count_obj (RegionsError, NumError)
dev_clear_window ()
dev_display (ImageTrans)
dev_set_color ('red')
dev_display (RegionsError)
set_tposition (WindowHandle, 20, 20)
if (NumError == 0)
dev_set_color ('green')
write_string (WindowHandle, 'Clip OK')
else

dev_set_color ('red')
write_string (WindowHandle, 'Clip not OK')
endif
endif
if (I < NumImages)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor
clear_shape_model (ShapeModelID)
clear_variation_model (VariationModelID)
機器視覺,圖像處理,halcon學習,印刷缺陷檢測

參考圖片

機器視覺,圖像處理,halcon學習,印刷缺陷檢測

變化的圖片

機器視覺,圖像處理,halcon學習,印刷缺陷檢測

NG1

機器視覺,圖像處理,halcon學習,印刷缺陷檢測

NG2

寫到最後,公眾號好 VisionManMaster

關注我

機器視覺,圖像處理,halcon學習,印刷缺陷檢測


分享到:


相關文章: