概述
暴力匹配器算法使用作为输入提供的查询和参考描述符,并为每个查询描述符找到最近的(按距离)参考描述符。还提供了一个额外的交叉检查选项,该选项通知算法仅输出那些在两个方向上彼此最接近的匹配项,即如果 A 是一个查询描述符,B 是一个参考描述符,则 B 是 A 的最近参考描述符,A 是 B 的最近查询描述符。
实现
暴力匹配器算法计算作为输入提供的查询和参考描述符之间的距离。距离计算的范数由用户提供。用户还可以选择每个查询描述符所需的匹配数量,在这种情况下,将提供最小的 N 个(每个查询的匹配数量 <= 3)距离匹配。用户还可以选择启用或禁用交叉检查。
C API 函数
有关实现该算法的限制、约束和后端列表,请查阅以下函数的参考文档
用法
语言
C/C++
初始化阶段
包含定义所需函数和结构的头文件。
定义输入描述符数组。它们必须是 VPI_ARRAY_TYPE_BRIEF_DESCRIPTOR 类型。
VPIStatus vpiArrayCreate(int32_t capacity, VPIArrayType type, uint64_t flags, VPIArray *array)
创建一个空数组实例。
struct VPIArrayImpl * VPIArray
数组的句柄。
@ VPI_ARRAY_TYPE_BRIEF_DESCRIPTOR
VPIBriefDescriptor 元素。
创建输出数组。它必须是 VPI_ARRAY_TYPE_MATCHES 类型。
@ VPI_ARRAY_TYPE_MATCHES
VPIMatches 元素。
创建将在其中提交算法以供执行的流。
struct VPIStreamImpl * VPIStream
流的句柄。
VPIStatus vpiStreamCreate(uint64_t flags, VPIStream *stream)
创建流实例。
处理阶段
提交暴力匹配器算法。它将由 CPU 后端执行。
VPIStatus vpiSubmitBruteForceMatcher(VPIStream stream, uint64_t backend, VPIArray queryDescriptor, VPIArray referenceDescriptor, VPINormType normType, int32_t maxMatchesPerQuery, VPIArray matches, uint32_t algoFlag)
在描述符上运行暴力匹配器算法。
可选地,等待直到处理完成。
VPIStatus vpiStreamSync(VPIStream stream)
阻止调用线程,直到此流队列中的所有提交命令都完成(队列为空)...
清理阶段
释放流以及输入和输出数组所持有的资源。
void vpiArrayDestroy(VPIArray array)
销毁一个数组实例。
void vpiStreamDestroy(VPIStream stream)
销毁流实例并释放所有硬件资源。
有关更多信息,请参阅 VPI - 视觉编程接口 的 “API 参考” 部分中的 Brute Force Matcher 。
性能
有关如何使用下面的性能表的信息,请参阅 算法性能表 。 在比较测量结果之前,请查阅 比较算法运行时间 。 有关性能基准测试方式的更多信息,请参阅 性能基准 。
清除过滤器
设备
Jetson AGX Orin
- 流
1
2
4
8