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,Row1Index, Column1Index, HomMat2DTranslate)

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

hom_mat2d_rotate (HomMat2DTranslate, AngleIndex,Row1Index, Column1Index, HomMat2DRotate)

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

hom_mat2d_scale (HomMat2DRotate, ScaleIndex, ScaleIndex,Row1Index, Column1Index, 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作用:拉斜、歪着变换(一般匹配不用)

相关推荐
互联网江湖7 分钟前
解禁时刻开启,但MiniMax还没到“验牌”时刻
人工智能
狂热开发者8 分钟前
用 Typeoff 把会后口述整理成 Markdown 决策记录
人工智能·windows·macos·ios·安卓
不加辣椒18 分钟前
第21章 内容创作领域的提示词工程
人工智能
sunneo20 分钟前
S16.1第一性原理做产品(1):从《创新者的窘境》看AI颠覆——为什么大模型不是护城河
人工智能·产品运营·产品经理·ai编程·ai-native
EMBA寰球网23 分钟前
互动展厅设计核心逻辑、实施路径与落地实施要点专业解析:名瑞展览展陈行业实践深度洞察
大数据·人工智能
aiqianji27 分钟前
有哪些支持长文的AI生成短篇小说软件?
人工智能·python
lisw0529 分钟前
人-智能体协同的信任研究!
人工智能·机器学习·软件工程
ofoxcoding40 分钟前
Codex Computer Use 完整指南:AI 自动操控 Mac 与 Windows 桌面实战详解
人工智能·windows·macos·ai
OpenCSG42 分钟前
第三场黑客松!OpenCSG联合主办南京都市圈OPC超级个体挑战赛正式启动
人工智能·开源·开放传神
甄同学1 小时前
第十五篇:Stream Processor流式处理器,实时响应的幕后机制
人工智能