训练匹配模板

本文介绍了一种基于形状匹配的硬币识别算法,该算法能够区分不同国家的20分硬币,包括德国、意大利、希腊和西班牙等。通过训练模板并进行匹配,实现了硬币的有效识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、区分各自硬币

* distinguishing of coins with the help of shape-based matching

dev_close_window ()
dev_open_window (0, 0, 652, 494, 'black', WindowHandle)
dev_update_window ('off')
Names := ['german','italian','greek','spanish']
Models := []

*制作多个模板
for i := 0 to 3 by 1
    read_image (Image, 'coins/20cent_'+Names[i])
    dev_display (Image)

    *训练模板函数(后面有详述)
    train_model (Image, ModelID)

    *将获取的模板ModelID,存于Models 元组中
    Models := [Models,ModelID]
endfor

*依次匹配目标结果
for i := 1 to 13 by 1
    read_image (Image, 'coins/20cent_'+i$'.2'+'.png')

    *搜索匹配函数(后面有详述)
    find_coin (Image, Models, Row, Column, Angle, Score, Model)
    display_model (Image, Model, Row, Column, Angle, Names, WindowHandle)
    stop ()
endfor
* destroy models
for i := 0 to 3 by 1
    clear_shape_model (Models[i])
endfor


2、训练模板函数train_model (Image, ModelID)

函数展开:

*硬币特征区域获取函数(后面有详述)

locate_coin (Image, Coin)
Contrast := 20
HysteresisContrast := [Contrast/2,Contrast+6,10]

*截取特征区域图片,存在ImageReduced中
reduce_domain (Image, Coin, ImageReduced)
* Called during the test phase to see if Contrast is selected correctly
* inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, HysteresisContrast)

*从特征区域图片中提取模板,存于ModelID中
create_shape_model (ImageReduced, 'auto', 0, rad(360), 'auto', 'none', 'ignore_local_polarity', HysteresisContrast, 5, ModelID)
return ()


3、硬币特征区域获取函数locate_coin (Image, Coin)

函数展开:

threshold (Image, Region, 70, 255)

*将二值化结果进行连通域划分

connection (Region, ConnectedRegions)

*找到最大面积的连通域
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 0)

*通过形状变换函数获取连通域凸包
shape_trans (SelectedRegions, RegionTrans, 'convex')

*获取特征区域
area_center (RegionTrans, Area, Row, Column)
gen_circle (Coin, Row, Column, 120)
return ()


4、搜索匹配函数find_coin (Image, Models, Row, Column, Angle, Score, Model)

函数展开:

locate_coin (Image, Coin)
area_center (Coin, Area, Row, Column)
gen_circle (Circle, Row, Column, 35)
reduce_domain (Image, Circle, ImageReduced)
find_shape_models (ImageReduced, Models, 0, rad(360), 0.6, 1, 0, 'least_squares', 0, 1, Row, Column, Angle, Score, Model)
return ()



在 VisionPro 中使用模板匹配(如 PMAlign 工具)进行视觉检测任务时,训练失效是一个常见但可排查的问题。模板匹配训练失败可能由多种因素引起,包括图像质量、模板设置不当、环境条件变化等。 ### 常见原因及解决方案 #### 1. 图像质量问题 - **原因**:图像模糊、噪声干扰严重或对比度不足会导致特征点提取失败。 - **解决方案**:在图像采集阶段使用高斯滤波去噪,并通过直方图均衡化增强图像对比度,以提高模板训练的准确性[^1]。 #### 2. 模板区域选择不当 - **原因**:选取的模板区域包含过多背景信息或非关键特征,导致模型无法准确识别目标。 - **解决方案**:确保选取的模板区域为无缺陷的关键特征区域,并尽量避免包含动态变化或重复性不强的结构。 #### 3. 角度缩放参数设置不合理 - **原因**:训练时设定的角度容差或缩放范围过小,导致实际图像中姿态变化超出匹配工具的容忍范围。 - **解决方案**:合理调整 `CogPMAlignTool` 的角度容差(如 ±5°)和缩放范围(如 90%-110%),使其覆盖可能出现的姿态变化[^1]。 #### 4. 光照条件不稳定 - **原因**:光照强度或方向的变化会影响图像的一致性,从而影响模板匹配效果。 - **解决方案**:采用稳定的工业光源系统,确保每次图像采集时光照条件一致;必要时可在软件中加入自动增益控制(AGC)机制。 #### 5. 模板更新未及时同步 - **原因**:当产品外观发生微小变化(如工艺改进)时,原有模板未能及时更新。 - **解决方案**:定期评估模板匹配性能,发现匹配率下降时应及时重新采集样本并更新模板。 #### 6. 硬件设备配置问题 - **原因**:相机分辨率不足或镜头畸变未校正,影响图像几何一致性。 - **解决方案**:推荐使用 4K 分辨率相机,精度达到 0.075mm/pixel,并在校准过程中使用标定板进行镜头畸变校正。 #### 7. 软件版本或库文件缺失 - **原因**:VisionPro 版本过旧或缺少必要的运行库,导致部分功能无法正常执行。 - **解决方案**:升级至最新版 VisionPro 并安装所有必需的依赖库文件,确保所有工具链完整可用。 --- ### 示例代码片段(设置 PMAlign 参数) ```csharp CogPMAlignTool pmAlignTool = new CogPMAlignTool(); pmAlignTool.Pattern.Train(); // 开始训练模板 pmAlignTool.RunParams.AcceptThreshold = 0.8; // 设置接受阈值 pmAlignTool.RunParams.MaxAngleSearch = 5; // 设置最大角度搜索范围(±5°) pmAlignTool.RunParams.MinScaleSearch = 0.9; // 设置最小缩放比例 pmAlignTool.RunParams.MaxScaleSearch = 1.1; // 设置最大缩放比例 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天上人间555

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值