VPI - 视觉编程接口

3.2 版本

金字塔 LK 光流

用于跟踪从一帧到下一帧的点的算法。 更多...

数据结构

结构体  VPIOpticalFlowPyrLKParams
 定义 vpiSubmitOpticalFlowPyrLK 参数的结构体。 更多...
 

枚举

枚举  VPIEpsilonType
 定义误差测量类型。 更多...
 

函数

VPIStatus vpiInitOpticalFlowPyrLKParams (uint64_t backends, VPIOpticalFlowPyrLKParams *params)
 使用默认值初始化 VPIOpticalFlowPyrLKParams更多...
 
VPIStatus vpiCreateOpticalFlowPyrLK (uint64_t backends, int32_t width, int32_t height, VPIImageFormat fmt, int32_t levels, float scale, VPIPayload *payload)
 vpiSubmitOpticalFlowPyrLK 创建负载。 更多...
 
VPIStatus vpiSubmitOpticalFlowPyrLK (VPIStream stream, uint64_t backend, VPIPayload payload, VPIPyramid prevPyr, VPIPyramid curPyr, VPIArray prevPts, VPIArray curPts, VPIArray trackingStatus, const VPIOpticalFlowPyrLKParams *params)
 在两个帧上运行金字塔 LK 光流。 更多...
 

详细描述

用于跟踪从一帧到下一帧的点的算法。

有关更多详细信息和用法示例,请参阅 金字塔 LK 光流


数据结构文档

◆ VPIOpticalFlowPyrLKParams

struct VPIOpticalFlowPyrLKParams

定义 vpiSubmitOpticalFlowPyrLK 参数的结构体。

定义于文件 OpticalFlowPyrLK.h 的第 92 行。

+ VPIOpticalFlowPyrLKParams 的协作图
数据字段
uint32_t useInitialFlow 当此标志不为 0 时,使用存储在当前帧关键点数组中的初始估计值;否则,将上一帧关键点复制到当前帧关键点数组,并将其视为初始估计值。
uint32_t termination 指定终止条件。
VPIEpsilonType epsilonType 指定跟踪误差类型。
float epsilon 指定用于终止算法的最小误差阈值。

仅当终止标志包含 VPI_TERMINATION_CRITERIA_ITERATIONS 时适用。

int32_t numIterations 指定最大迭代次数。

仅当终止标志包含 VPI_TERMINATION_CRITERIA_ITERATIONS 时适用。

  • 必须 >= 1 且 <= 32。
int32_t windowDimension 指定执行算法的窗口大小。
  • 必须 >= 6 且 <= 32。
  • 对于 PVA 后端:必须为 7、9 或 11。

枚举类型文档

◆ VPIEpsilonType

#include <vpi/algo/OpticalFlowPyrLK.h>

定义误差测量类型。

枚举器
VPI_LK_ERROR_L1 

先前特征和下一个特征之间的 L1 距离。

定义于文件 OpticalFlowPyrLK.h 的第 83 行。

函数文档

◆ vpiInitOpticalFlowPyrLKParams()

VPIStatus vpiInitOpticalFlowPyrLKParams ( uint64_t  backends,
VPIOpticalFlowPyrLKParams params 
)

#include <vpi/algo/OpticalFlowPyrLK.h>

使用默认值初始化 VPIOpticalFlowPyrLKParams

返回与所有给定后端兼容的默认金字塔 LK 光流参数。

默认值

  • useInitialFlow = 0
  • termination = VPI_TERMINATION_CRITERIA_ITERATIONS | VPI_TERMINATION_CRITERIA_EPSILON
  • epsilonType = VPI_LK_ERROR_L1
  • epsilon = 0
  • windowDimension = 如果后端包含 VPI_BACKEND_PVA,则为 11,否则为 15
  • numIterations = 6
参数
[输入]backends指定获取默认值的后端。
[输入]params要填充默认值的结构体。
返回值
VPI_ERROR_INVALID_ARGUMENTparams 为 NULL。
VPI_SUCCESS操作成功执行。

◆ vpiCreateOpticalFlowPyrLK()

VPIStatus vpiCreateOpticalFlowPyrLK ( uint64_t  backends,
int32_t  width,
int32_t  height,
VPIImageFormat  fmt,
int32_t  levels,
float  scale,
VPIPayload payload 
)

#include <vpi/algo/OpticalFlowPyrLK.h>

vpiSubmitOpticalFlowPyrLK 创建负载。

参数
[输入]backends有资格执行该算法的 VPI 后端。
[输入]fmt指定金字塔的格式。
[输入]width,height指定最精细分辨率下金字塔的尺寸。
  • 必须 >= 0。
[输入]levels要使用的金字塔层数。
[输入]scale要使用的金字塔比例。
[输出]payload指向接收创建的句柄的负载变量的指针。
返回值
VPI_IMAGE_FORMAT_INVALID不支持 fmt
VPI_ERROR_INVALID_ARGUMENTpayload 为 NULL。
VPI_ERROR_INVALID_ARGUMENTwidthheight 超出有效范围。
VPI_ERROR_INVALID_ARGUMENT不支持 fmt
VPI_ERROR_INVALID_ARGUMENTbackends 指的是无效的后端。
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持金字塔 LK 光流算法。
VPI_ERROR_INVALID_CONTEXT当前上下文已销毁。
VPI_ERROR_OUT_OF_MEMORY无法分配所需资源。
VPI_ERROR_INVALID_OPERATION后端在当前上下文中未启用。
VPI_SUCCESS操作成功执行。

◆ vpiSubmitOpticalFlowPyrLK()

VPIStatus vpiSubmitOpticalFlowPyrLK ( VPIStream  stream,
uint64_t  backend,
VPIPayload  payload,
VPIPyramid  prevPyr,
VPIPyramid  curPyr,
VPIArray  prevPts,
VPIArray  curPts,
VPIArray  trackingStatus,
const VPIOpticalFlowPyrLKParams params 
)

#include <vpi/algo/OpticalFlowPyrLK.h>

在两个帧上运行金字塔 LK 光流。

输出估计的特征点和跟踪状态。

参数
[输入]stream操作将被排队的流。
  • 不得为 NULL。
  • 流必须已启用将执行该算法的后端。
[输入]backend将执行该算法的后端。
  • 必须是在负载创建期间指定的后端,或 0 作为使用此后端的简写。
[输入]payload使用 vpiCreateOpticalFlowPyrLK 创建的负载。
[输入]prevPyr上一帧,表示为高斯金字塔。
  • 不得为 NULL。
  • 必须具有与负载创建期间指定的格式、比例和层数相同的格式、比例和层数。
  • 金字塔必须已启用将执行该算法的后端。
[输入]curPyr当前帧,表示为高斯金字塔。
  • 不得为 NULL。
  • 必须具有与 prevPyr 相同的层数、大小、比例和格式。
  • 金字塔必须已启用将执行该算法的后端。
[输入]prevPtsprevPyr 高分辨率金字塔中关键点的数组。
  • 不得为 NULL。
  • 数组类型必须为 VPI_ARRAY_TYPE_KEYPOINT_F32
  • 如果 params 中的 useInitialFlow 不为零,则 prevPts 必须与 curPts 具有相同的大小。
  • 数组必须已启用将执行该算法的后端。
[输入,输出]curPtscurPyr 第一层中关键点的数组。如果 params 中的 useInitialFlow 不为 0,则它用作 curPyr 中的起始搜索点。
  • 不得为 NULL。
  • 数组类型必须为 VPI_ARRAY_TYPE_KEYPOINT_F32
  • 如果 params 中的 useInitialFlow 不为零,则 curPts 必须与 prevPts 具有相同的大小。
  • 数组容量必须大于或等于 prevPts 数组大小。
  • 数组必须已启用将执行该算法的后端。
[输入,输出]trackingStatusprevPts 中每个输入的跟踪状态数组。如果元素为 0,则正在跟踪相应的关键点,否则,跟踪丢失。
  • 不得为 NULL。
  • 数组的类型必须为 VPI_ARRAY_TYPE_U8
  • 数组容量必须大于或等于 prevPts 数组大小。
  • 数组必须已启用将执行该算法的后端。
[输入]paramsLK 跟踪器的参数。如果为 NULL,则使用 vpiInitOpticalFlowPyrLKParams 返回的默认参数。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTprevPyrcurPyrprevPtscurPtstrackingStatus 为 NULL。
VPI_ERROR_INVALID_ARGUMENTpayload 不是使用 vpiCreateKLTFeatureTracker 生成的。
VPI_ERROR_INVALID_ARGUMENTprevPyrcurPyr 应具有相同的层数、大小、比例和格式。
VPI_ERROR_INVALID_ARGUMENTprevPyrcurPyr 格式应与 payload 创建中指定的格式匹配。
VPI_ERROR_INVALID_ARGUMENTparams 中提供了无效的终止条件。
VPI_ERROR_INVALID_ARGUMENTparams 中的迭代次数超出有效范围。
VPI_ERROR_INVALID_ARGUMENTparams 中的跟踪窗口尺寸无效。
VPI_ERROR_INVALID_ARGUMENTprevPtscurPts 具有不支持的数组类型。
VPI_ERROR_INVALID_ARGUMENTprevPtscurPts 的大小超出有效范围。
VPI_ERROR_INVALID_ARGUMENTprevPtstrackingStatus 的容量超出有效范围。
VPI_ERROR_INVALID_ARGUMENTtrackingStatus 具有不支持的数组类型。
VPI_ERROR_INVALID_PAYLOAD_TYPEpayload 无效。
VPI_ERROR_INVALID_OPERATION所需的后端在 streamprevPyrcurPyrprevPtscurPtstrackingStatus 中未启用。
VPI_SUCCESS操作成功执行。