halcon算子(模板匹配)

《创建灰度值模板》

创建基于灰度值模版(基于归一化相关性模版)

*参数1: 输入的图片 做模版的图片

*参数2: 金字塔层级,设置为auto自动选择金字塔层级, 值越大,匹配速度越快, 不同分辨率下的模版

*参数3: 起始角度 rad(-180) 转成弧度数

*参数4:结束角度

*参数5:角度递增量

*参数6:'use_polarity' 使用极性 ignore_global_polarity 忽略极性

*参数7 ModelID 模版的id 获取匹配的结果可以通过id进行获取

create_ncc_model (ImageReduced, 'auto', rad(-180), rad(180), 'auto', 'use_polarity', ModelID)

《查找模板匹配结果》

find_ncc_model (Image1, ModelID, rad(-180), rad(180), 0.8, 1, 0.5, 'true', 0, Row1, Column1, Angle, Score)

*1 输入的图片

*2 模版id

*3、4 开始角度和结束角度

*5 最小得分

*6 匹配的个数 1 就是1个,0匹配多个

*7 重叠率 0.5 超出0.5 谁的得分高 就匹配到谁,

*8 是否启用亚像素级别 true使用

*9 金字塔层级 0 保留的细节多,计算量比较大

*10、11 模版匹配点的坐标

*12 模版匹配结果的角度

*13 模版匹配的得分

《释放模板句柄》

clear_ncc_model (ModelID) // 释放模版句柄

《模板的导入》

read_ncc_model ('1.shm', ModelID) // 导入模版

*参数1 模板的路径

*参数2 输出的图片

《模板的导出》

write_ncc_model (ModelID,'1.shm' )//导出模版

*参数1 输入的图片

*参数2 导出的路径

《基于形状的模板》

create_scaled_shape_model (ImageReduced, 'auto', rad(-45), rad(90), 'auto', 0.8, 1.1, 'auto', 'auto', 'ignore_global_polarity', 'auto', 'auto', ModelID)

*参数6、7 缩放比例最小值和最大值

*参数8 缩放的递增量

*参数9 Optimization优化方式 自动模型优化方式

*参数11 Contrast: 对比度 自动计算对比度

*参数12 MinContrast 最小的对比度

《获取模板中心点坐标》

get_shape_model_contours (ModelContours, ModelID, 1) // 获取模版轮廓信息

《刚性的仿射变换》

vector_angle_to_rigid (0, 0, 0, Row, Column, 0, HomMat2D)

*从第一个点的位置、角度变换到第二点的位置、角度

*HomMat2D 输出参数 获取变换矩阵

坐标原点 (0,0)不旋转(角度 0) 移动到 (Row, Column)仍然不旋转(角度 0) 生成一个纯平移矩阵 ,存到 HomMat2D

《把变换矩阵使用指定轮廓》

affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)

ModelContours:模板的原始轮廓(默认在原点)

HomMat2D移动指令(移到哪、转多少)

ContoursAffineTrans移动后的轮廓(画在图上就是匹配框)

《模板匹配》

find_scaled_shape_model (Image1, ModelID, rad(-45), rad(90), 0.8, 1.1, 0.5, 0, 0.5, 'least_squares', 0, 0.8, Row1, Column1, Angle, Scale, Score)

*参数SubFixel:是否启用亚像素级别 None:不启用,least_squares 启用亚像素级匹配 最小二乘法查找亚像素

*参数Greediness 贪婪度(值越大查找速度越快)

Image1

在找在这张图片里搜索目标。

ModelID

用啥找create_scaled_shape_model 创建好的模板 ID。

rad(-45)

最小角度 目标最少能旋转 -45°(逆时针 45 度)

rad(90)

最大角度 目标最多能旋转 90°(顺时针 90 度)

0.8

最小缩放 目标最小可以缩到原来的 0.8 倍

1.1

最大缩放 目标最大可以放到原来的 1.1 倍

0.5

最小得分(最关键!)

得分范围:0 ~ 1

低于 0.5 的结果直接丢掉

数值越高,匹配越准,但更容易找不到

你第三个框不准,就是这个值设太低了

0

最多找几个目标

0 = 找到所有符合的目标

1 = 只找一个

0.5

金字塔重叠度不用管,默认 0.5 就行。

'least_squares'

精度模式 least_squares = 高精度亚像素定位

0

插值默认 0 即可。

0.8

贪婪度

越大:找得越快,但可能漏检

越小:找得越准,但更慢0.8 是平衡值。

输出结果

Row1, Column1

目标中心坐标(画框用)

Angle

目标旋转角度

Scale

目标缩放倍数

Score

匹配得分 越接近 1 越准,低于 0.5 都是误匹配

《展示基于形状模版匹配结果》

dev_display_shape_matching_results (ModelID, 'red', Row1, Column1, Angle, Scale, Scale, 0)

ModelID你做好的模板 ID,用来画轮廓。

'red' 匹配框画成红色,也可以写 'green'、'blue'。

Row1, Column1 匹配到的目标中心位置

Angle 目标旋转角度

Scale, Scale 目标缩放大小(等比例缩放写两个一样就行)。

0 固定参数,直接写 0 就完事。

《仿射变换查找结果》

*基础的变换 平移变换、旋转变换、缩放变换、倾斜变换

for Index := 0 to |Row1|-1 by 1

*1创建初始化的仿射矩阵

hom_mat2d_identity (HomMat2DIdentity)

*2 生成平移变换矩阵 参数1初始化的矩阵 参数2和参数3移动的位置

hom_mat2d_translate (HomMat2DIdentity,Row1[Index], Column1[Index], HomMat2DTranslate)

*3 生成一个旋转矩阵 参数1是平移矩阵

hom_mat2d_rotate (HomMat2DTranslate, Angle[Index],Row1[Index], Column1[Index], HomMat2DRotate)

*4 生成一个缩放矩阵 参数1是旋转矩阵

hom_mat2d_scale (HomMat2DRotate, Scale[Index], Scale[Index],Row1[Index], Column1[Index], HomMat2DScale)

*5 使用矩阵

affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DScale)

*6展示变换之后轮廓信息

dev_display (ContoursAffineTrans)

平移变换 hom_mat2d_translate

作用:移动位置把轮廓从原点 → 移到目标中心。

旋转变换 hom_mat2d_rotate

作用:调整角度让框跟着目标的旋转角度一起转。

缩放变换 hom_mat2d_scale

作用:调整大小让框的大小匹配目标大小。

倾斜变换(你没用到)

hom_mat2d_slant作用:拉斜、歪着变换(一般匹配不用)

相关推荐
空中湖2 分钟前
大模型修炼秘籍 第十二章:人师指路——RLHF之精髓
人工智能·深度学习·transformer
xiaotao1314 分钟前
01-编程基础与数学基石:Python错误与异常处理
开发语言·人工智能·python
YummyJacky17 分钟前
Hermes Agent自进化的实现方式
人工智能·python
普鲁夕格29 分钟前
【AI翻唱】RVC和SVC声音音色模型难找?推荐这个下载网站
人工智能
亚马逊云开发者1 小时前
【Bedrock AgentCore】AI Agent 回答不一致怎么办?双 Memory 架构实现服务标准化(附完整代码)
大数据·人工智能·架构
悟纤1 小时前
Seedance 2.0 API 已上线 | 支持「人像视频生成」|支持100并发 | 满血版 [灵龙AI API]
人工智能·音视频·seedance 2.0
男孩李1 小时前
什么是workbuddy
人工智能·语言模型
人工智能AI技术1 小时前
终身学习 Agent:积累知识、不遗忘、可进化
人工智能
DFCED1 小时前
突发!Sora 之父 Bill Peebles 离职:OpenAI 理想主义的又一次落幕
人工智能·大模型·agent·sora
_Evan_Yao1 小时前
RAG中的“Chunk”艺术:我试过10种切分策略后总结的结论
java·人工智能·后端·python·软件工程