触控魔方 / 使用文档 / 图像

图像匹配检测节点

图像 · 使用文档

图像匹配检测节点

功能说明

增强版图像匹配检测 - 在检测图片中查找模板图片的位置,支持多种特征提取和智能过滤

核心功能

输入说明

模板图片输入(要查找的图片)

支持以下多种输入方式(按优先级处理):

  1. 文件路径列表:逗号分隔的文件路径,如:/sdcard/template1.png,/sdcard/template2.png
  2. 文件夹路径:包含模板图片的文件夹路径
  3. Bitmap对象:直接从其他节点获取的Bitmap
  4. URI列表:内容URI列表

检测图片输入(要在其中查找的图片)

支持以下多种输入方式(按优先级处理):

  1. 文件路径列表:逗号分隔的文件路径,如:/sdcard/test1.png,/sdcard/test2.png
  2. 文件夹路径:包含检测图片的文件夹路径
  3. Bitmap对象:直接从其他节点获取的Bitmap
  4. URI列表:内容URI列表

检测参数配置

基本检测参数

坐标名称相关配置

特征提取配置

单一特征提取器(当增强特征匹配禁用时)

过滤功能

过滤数据来源

  1. 坐标列表输入:JSON数组或坐标对象列表
  2. JSON文件:包含坐标数据的JSON文件路径
  3. JSON文件夹:包含多个JSON坐标文件的文件夹路径

过滤模式

过滤参数

输出接口

执行状态输出

匹配结果输出

最佳匹配输出

状态判断输出

图片信息输出

特征信息输出

使用流程示例

基本使用流程

  1. 准备模板图片:截取要查找的按钮或图标作为模板
  2. 配置检测参数:设置相似度阈值、最大匹配数等
  3. 连接图片源:将检测图片连接到节点输入
  4. 执行匹配检测:运行节点进行图像匹配
  5. 处理匹配结果:根据匹配结果执行后续操作

连接建议

高级特性

增强特征匹配模式

当启用"增强特征匹配"时,系统会自动使用以下特征提取器组合:

这种多特征融合方式能显著提高在不同光照、角度变化下的匹配准确性。

智能坐标命名

基于图像特征自动生成有意义的坐标名称:

  1. 在匹配位置周围提取图像特征
  2. 将特征编码为紧凑字符串
  3. 生成类似"feature_abc123"的坐标名称
  4. 便于后续的坐标过滤和重用

批量处理能力

支持以下批量处理场景:

  1. 单模板多检测:用一个模板图片在多个检测图片中查找
  2. 多模板单检测:用多个模板图片在一个检测图片中查找
  3. 多模板多检测:用多个模板图片在多个检测图片中查找

应用场景

UI测试

文档处理

图像分析

参数调优建议

  1. 相似度阈值:
    • 简单场景:0.8-0.9
    • 复杂场景:0.7-0.8
    • 模糊匹配:0.6-0.7
  2. 特征区域大小:
    • 小图标:50×50像素
    • 中等元素:100×100像素
    • 大区域:200×200像素

内存管理

  1. 批量处理限制:单次处理图片不宜过多,建议不超过50张
  2. 使用文件路径:大图片建议使用文件路径而不是Bitmap输入

错误处理

常见错误及解决方案

  1. 未找到匹配:

    • 降低相似度阈值
    • 检查模板图片是否正确
    • 检查模板内容是否包含检测图片
    • 调整特征提取参数
  2. 匹配过多:

    • 提高相似度阈值
    • 启用过滤功能
    • 调整特征相似度阈值
  3. 性能问题:

    • 减少同时处理的图片数量
    • 使用较小的图片尺寸

调试建议

  1. 使用"特征图片列表"输出检查特征提取效果
  2. 通过"匹配数量"和"原始数量"对比过滤效果

示例配置

批量UI元素检测

模板图片文件夹:/sdcard/screenshots/
检测图片文件夹:/sdcard/ui_templates/
相似度阈值:0.9
过滤模式:排除模式
过滤JSON文件:/sdcard/filter_coordinates.json

技术实现说明

匹配算法原理

  1. 模板匹配:使用OpenCV的模板匹配算法进行初步定位
  2. 特征提取:在匹配位置周围提取多种图像特征
  3. 特征融合:加权融合多种特征计算综合相似度
  4. 结果过滤:根据阈值和过滤规则筛选最终结果

坐标数据结构

每个匹配坐标包含以下信息:

{
  "center": {
    "x": 150,
    "y": 200
  },
  "similarity": 0.95,
  "searchImageIndex": 0,
  "templateImageIndex": 0,
  "coordinateName": "feature_a1b2c3",
  "searchImageName": "button_template",
  "templateImageName": "screen_shot",
  "boundingBox": {
    "left": 120,
    "top": 180,
    "right": 180,
    "bottom": 220
  },
  "featureRegionBox": {
    "left": 100,
    "top": 160,
    "right": 200,
    "bottom": 240
  }
}