机器视觉,图像处理,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学习,印刷缺陷检测


分享到:


相關文章: