【使用find_aniso_shape_model算子实现各向异性模板匹配】

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、找到的图像的中心坐标;1718行列的缩放比 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 ()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值