Halcon 算子 create_aniso_shape_model 和 find_aniso_shape_model 的应用
前言
使用halcon算子实现模板匹配。find_aniso_shape_model算子用于在图像中找到各向异性尺度不变形状模型的实例。
创建模板
create_aniso_shape_model
匹配模板
find_aniso_shape_model
案例演示
代码
dev_clear_window ()
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
**读取图像
read_image (Image, 'printer_chip/printer_chip_01')
dev_set_draw ('margin')
*绘制ROI
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
**裁剪ROI图像
reduce_domain (Image, Rectangle, ImageReduced)
**创建模板
create_aniso_shape_model (ImageReduced, 'auto',\
-180, 360, \
'auto', 0.9, 1.1,\
'auto', 0.9, 1.1, \
'auto', 'auto', 'use_polarity',\
'auto', 'auto', ModelID)
*******模板轮廓显示方式1
**查找模板轮廓
find_aniso_shape_model (ImageReduced, ModelID, -180, 360, \
0.9, 1.1, 0.9, 1.1,\
0.6, 1, 0.5, 'least_squares', \
0, 0.9, ModelRow, ModelColumn, \
ModelAngle, ModelScaleR, ModelScaleC, ModelScore)
**
**获取轮廓并仿射变换显示
get_shape_model_contours (ModelContours, ModelID, 1)
vector_angle_to_rigid(0, 0, 0, ModelRow,ModelColumn, ModelAngle, HomMat2D)
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)
disp_cross(WindowHandle, ModelRow, ModelColumn, 100, ModelAngle)
*******模板轮廓显示方式1
**自己计算:不容的ROI有不同的计算方式
* ModelRow :=(Row1+Row2)/2
* ModelColumn :=(Column1+Column2)/2
* get_shape_model_contours (ModelContours, ModelID, 1)
* vector_angle_to_rigid(0, 0, 0, ModelRow,ModelColumn, 0, HomMat2D)
* affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)
stop ()
dev_clear_window ()
dev_display (Image)
* 参数说明:
* 1、要匹配的图元 2、模型句柄 3、模型最小旋转角 4、模型最大旋转角
* 5、行方向的最小缩放比 6、行方向最大缩放比 7、列方向最小缩放比 8、列方向最大缩放比
* 9、找到模型的最小分数、10、找到模型的数量 11、模型的最大重叠
* 12、亚像素精度 13、金字塔数 14、贪婪值 15、
* 16、找到的图像的中心坐标;17、18行列的缩放比 20、得分
find_aniso_shape_model (Image, ModelID, rad(-20), rad(340), \
0.9, 1.1, 0.9, 1.1,\
0.6, 0, 0.5, 'least_squares', \
0, 0.9, Row, Column, \
Angle, ScaleR, ScaleC, Score)
**遍历索引
for Index := 0 to |Row|-1 by 1
get_shape_model_contours (ModelContours, ModelID, 1)
vector_angle_to_rigid(0, 0, 0, Row[Index],Column[Index], Angle[Index], HomMat2D)
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)
disp_cross(WindowHandle, Row[Index], Column[Index], 100, Angle[Index])
dev_disp_text ('得分:'+Score[Index], 'image', Row[Index], Column[Index], 'green', [], [])
endfor
*释放句柄
clear_shape_model (ModelID)
stop()
dev_clear_obj (Image)
dev_clear_obj (Rectangle)
dev_clear_obj (ImageReduced)
dev_clear_obj (ModelContours)
dev_clear_obj (ContoursAffineTrans)
dev_close_window ()