需求
做模板匹配的过程中,需要保存当前的形状模板以便后续进行读取加载。
halcon 算子支持
1.保存形状模板
函数原型:
write_shape_model( ModelID, FileName : )
参数说明:
ModelID:模型的句柄
FileName :保存的文件名,形状模型的默认HALCON文件扩展名是’shm’。
2.读取形状模板
函数原型:
read_shape_model(FileName : ModelID)
参数说明:
FileName :要读取的文件名
ModelID : 形状模板的句柄
示例:
1.保存形状模板
*读取图像
read_image (ModelImage, 'rings_and_nuts')
get_image_pointer1 (ModelImage, Pointer, Type, Width, Height)
*做ROI
Row := 324
Column := 279
Radius := 60
gen_circle (ROI1, Row, Column, Radius)
reduce_domain (ModelImage, ROI1, ImageROI)
*创建形状模板
create_scaled_shape_model (ImageROI, 'auto', -rad(30), rad(60), 'auto', 0.6, 1.4, 'auto', 'none', 'use_polarity', 60, 10, ModelID)
inspect_shape_model (ImageROI, ShapeModelImage, ShapeModelRegion, 1, 30)
保存形状模板ModelFile := 'model.sbm'
write_shape_model (ModelID, ModelFile)
clear_shape_model (ModelID)
2.读取加载形状模板
*读取形状模板
read_shape_model (ModelFile, ReusedModelID)
*获取新装模板的轮廓,区域坐标等信息
get_shape_model_contours (ReusedShapeModel, ReusedModelID, 1)
get_shape_model_origin (ReusedModelID, ReusedRefPointRow, ReusedRefPointCol)
get_shape_model_params (ReusedModelID, NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Metric, MinContrast)
*读取新图像
read_image (SearchImage, 'rings_and_nuts')
*搜索匹配
find_scaled_shape_model (SearchImage, ReusedModelID, AngleStart, AngleExtent, ScaleMin, ScaleMax, 0.65, 0, 0, 'least_squares', 0, 0.8, RowCheck, ColumnCheck, AngleCheck, ScaleCheck, Score)
*对搜索到的形状轮廓做仿射变换
for i := 0 to |Score| - 1 by 1
vector_angle_to_rigid (ReusedRefPointRow, ReusedRefPointCol, 0, RowCheck[i], ColumnCheck[i], AngleCheck[i], MovementOfObject)
hom_mat2d_scale (MovementOfObject, ScaleCheck[i], ScaleCheck[i], RowCheck[i], ColumnCheck[i], MoveAndScalingOfObject)
affine_trans_contour_xld (ReusedShapeModel, ModelAtNewPosition, MoveAndScalingOfObject)
dev_display (ModelAtNewPosition)
endfor