VPI - Vision Programming Interface

3.2 版本

稠密光流

用于估计从前一帧图像到当前帧图像的运动向量的算法。 更多...

数据结构

struct  VPIOpticalFlowDenseSGMParams
 用于半全局匹配的稠密光流参数。 更多...
 

函数

VPIStatus vpiCreateOpticalFlowDense (uint64_t backends, int32_t width, int32_t height, VPIImageFormat inputFmt, const int32_t *gridSize, int32_t numLevels, VPIOpticalFlowQuality quality, VPIPayload *payload)
 vpiSubmitOpticalFlowDense 创建负载。 更多...
 
VPIStatus vpiSubmitOpticalFlowDense (VPIStream stream, uint64_t backend, VPIPayload payload, VPIImage prevImg, VPIImage curImg, VPIImage mvImg)
 在两个帧上运行稠密光流,输出运动向量。 更多...
 
VPIStatus vpiSubmitOpticalFlowDensePyramid (VPIStream stream, uint64_t backend, VPIPayload payload, VPIPyramid prevPyr, VPIPyramid curPyr, VPIImage mvImg)
 在两个帧上运行稠密光流,输出运动向量。 更多...
 
VPIStatus vpiOpticalFlowDenseGetSGMParams (VPIPayload payload, VPIOpticalFlowDenseSGMParams *sgmParams)
 检索在稠密光流负载中设置的半全局匹配参数。 更多...
 
VPIStatus vpiOpticalFlowDenseSetSGMParams (VPIPayload payload, const VPIOpticalFlowDenseSGMParams *sgmParams)
 设置半全局匹配参数,供具有给定负载的稠密光流操作使用。 更多...
 

详细描述

用于估计从前一帧图像到当前帧图像的运动向量的算法。

有关更多详细信息和用法示例,请参阅 稠密光流


数据结构文档

◆ VPIOpticalFlowDenseSGMParams

struct VPIOpticalFlowDenseSGMParams

用于半全局匹配的稠密光流参数。

每个金字塔层级都可以与不同的参数关联。数组中的第一个值对应于底部(精细)层级,最后一个值对应于顶部(粗略)层级。

定义于文件 OpticalFlowDense.h 的第 259 行。

+ VPIOpticalFlowDenseSGMParams 的协作图
数据字段
int32_t p1[VPI_MAX_PYRAMID_LEVEL_COUNT] 使用的半全局匹配算法的 P1 惩罚值。

仅由 OFA 后端使用,其他后端忽略。

int32_t p2[VPI_MAX_PYRAMID_LEVEL_COUNT] 使用的半全局匹配算法的 P2 惩罚值。

仅由 OFA 后端使用,其他后端忽略。

int32_t p2Alpha[VPI_MAX_PYRAMID_LEVEL_COUNT] 半全局匹配中使用的自适应 P2 的 Alpha 值。
  • 有效值为 0(禁用自适应 P2)、1、2、4 或 8。仅由 OFA 后端使用,其他后端忽略。
int32_t numPasses[VPI_MAX_PYRAMID_LEVEL_COUNT] 半全局匹配的次数。
  • 有效范围为 1 到 3,包括 1 和 3。仅由 OFA 后端使用,其他后端忽略。
int8_t includeDiagonals[VPI_MAX_PYRAMID_LEVEL_COUNT] 启用/禁用半全局匹配中的对角线方向。
  • 要禁用,请将其设置为 0,任何其他值都将启用它。仅由 OFA 后端使用,其他后端忽略。

函数文档

◆ vpiCreateOpticalFlowDense()

VPIStatus vpiCreateOpticalFlowDense ( uint64_t  backends,
int32_t  width,
int32_t  height,
VPIImageFormat  inputFmt,
const int32_t *  gridSize,
int32_t  numLevels,
VPIOpticalFlowQuality  quality,
VPIPayload payload 
)

#include <vpi/algo/OpticalFlowDense.h>

vpiSubmitOpticalFlowDense 创建负载。

参数
[in]backends有资格执行该算法的 VPI 后端。
[in]width,height当前图像和上一张图像的尺寸。输出尺寸取决于 gridSize 和输入尺寸。
  • 必须 >= 0。
[in]gridSize每个金字塔层级的网格大小数组。如果使用输入图像而不是金字塔,则 gridSize 指向使用的单个网格大小,就像它是用于只有一个层级的金字塔一样。数组中的第一个值对应于底部(精细)层级,最后一个值对应于顶部(粗略)层级。传递 1 允许使用稠密网格。如果为 2 或更大,则网格将是稀疏的。输出图像尺寸取决于 gridSize 中的第一个值和输入尺寸。
[in]numLevels要处理的金字塔层级数。当使用金字塔作为输入时,这指定要考虑的层级数。当使用图像时,numLevels 必须为 1。
  • 在 OFA 上,层级数受最小金字塔层级的尺寸限制。它必须 >= 32x32。此外,将此最小层级除以 gridSize 后,结果必须 >= 4x4。
  • 有效值
    后端最小值最大值
    VPI_BACKEND_NVENC 1 1
    VPI_BACKEND_OFA 1 7
[in]inputFmt当前和上一张图像/金字塔的格式。
[in]quality稠密光流算法的质量。
[out]payload指向接收创建的句柄的负载变量的指针。
返回值
VPI_IMAGE_FORMAT_INVALID不支持 inputFmt
VPI_ERROR_INVALID_ARGUMENTpayload 为 NULL。
VPI_ERROR_INVALID_ARGUMENTwidthheightnumLevelsgridSize 超出有效范围。
VPI_ERROR_INVALID_ARGUMENTbackends 指的是无效的后端。
VPI_ERROR_INVALID_OPERATION后端硬件不可用。
VPI_ERROR_INVALID_OPERATION后端未在当前上下文中启用。
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持稠密光流算法。
VPI_ERROR_INVALID_CONTEXT当前上下文已销毁。
VPI_ERROR_OUT_OF_MEMORY无法分配所需资源。
VPI_SUCCESS操作成功执行。

◆ vpiSubmitOpticalFlowDense()

VPIStatus vpiSubmitOpticalFlowDense ( VPIStream  stream,
uint64_t  backend,
VPIPayload  payload,
VPIImage  prevImg,
VPIImage  curImg,
VPIImage  mvImg 
)

#include <vpi/algo/OpticalFlowDense.h>

在两个帧上运行稠密光流,输出运动向量。

参数
[in]stream将在其中排队操作的流。
  • 不能为 NULL。
  • 流必须已启用将执行该算法的后端。
[in]backend将执行该算法的后端。
  • 必须是在负载创建期间指定的后端,或 0 作为使用此后端的简写。
[in]payloadvpiCreateOpticalFlowDense 创建的负载。
  • 负载中指定的金字塔层级数必须为 1。
[in]prevImg上一帧。
  • 不能为 NULL。
  • 必须具有与负载创建期间指定的格式和尺寸相同的格式和尺寸。
  • 图像必须已启用将执行该算法的后端。
[in]curImg当前帧。
  • 不能为 NULL。
  • 必须具有与 prevImg 相同的格式和尺寸。
  • 图像必须已启用将执行该算法的后端。
[out]mvImg运动向量输出。
  • 不能为 NULL。
  • 图像必须已启用将执行该算法的后端。
  • 宽度和高度取决于输入尺寸和负载上指定的网格大小。它通过以下公式计算:
    • output_width = (input_width + gridSize-1)/gridSize
    • output_height = (input_height + gridSize-1)/gridSize
  • 支持的格式
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTprevImgcurImgmvImg 为 NULL。
VPI_ERROR_INVALID_ARGUMENTpayload 不是使用 vpiCreateOpticalFlowDense 生成的。
VPI_ERROR_INVALID_ARGUMENTpayload 中指定的金字塔层级数不是 1。
VPI_ERROR_INVALID_ARGUMENTprevImgcurImg 尺寸与 payload 关联的尺寸不匹配。
VPI_ERROR_INVALID_IMAGE_FORMATprevImgcurImg 格式与 payload 关联的格式不匹配。
VPI_ERROR_INVALID_PAYLOAD_TYPEpayload 无效。
VPI_ERROR_INVALID_OPERATION所需的后端未在 streamprevImgcurImgmvImg 中启用。
VPI_SUCCESS操作成功执行。

◆ vpiSubmitOpticalFlowDensePyramid()

VPIStatus vpiSubmitOpticalFlowDensePyramid ( VPIStream  stream,
uint64_t  backend,
VPIPayload  payload,
VPIPyramid  prevPyr,
VPIPyramid  curPyr,
VPIImage  mvImg 
)

#include <vpi/algo/OpticalFlowDense.h>

在两个帧上运行稠密光流,输出运动向量。

参数
[in]stream将在其中排队操作的流。
  • 不能为 NULL。
  • 流必须已启用将执行该算法的后端。
[in]backend将执行该算法的后端。
  • 必须是在负载创建期间指定的后端,或 0 作为使用此后端的简写。
[in]payloadvpiCreateOpticalFlowDense 创建的负载。
[in]prevPyr上一金字塔帧。
  • 不能为 NULL。
  • 必须具有与负载创建期间指定的格式和尺寸相同的格式和尺寸。
  • 金字塔高度必须 >= 负载中指定的金字塔层级数。
  • 金字塔必须已启用将执行该算法的后端。
[in]curPyr当前金字塔帧。
  • 不能为 NULL。
  • 必须具有与 prevImg 相同的格式和尺寸。
  • 金字塔层级数必须与负载中指定的层级数相同。
  • 金字塔必须已启用将执行该算法的后端。
[out]mvImg运动向量输出。
  • 不能为 NULL。
  • 图像必须已启用将执行该算法的后端。
  • 宽度和高度取决于输入尺寸和负载中指定的底部金字塔层级的网格大小。它通过以下公式计算:
    • output_width = (input_width + gridSize-1)/gridSize
    • output_height = (input_height + gridSize-1)/gridSize
  • 支持的格式
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTprevPyrcuurPyrmvImg 为 NULL。
VPI_ERROR_INVALID_ARGUMENTpayload 不是使用 vpiCreateOpticalFlowDense 生成的。
VPI_ERROR_INVALID_ARGUMENTprevPyrcuurPyr 尺寸与 payload 关联的尺寸不匹配。
VPI_ERROR_INVALID_ARGUMENTprevPyrcurPyr 层级数超出有效范围。
VPI_ERROR_INVALID_IMAGE_FORMATprevPyrcurPyr 格式与 payload 关联的格式不匹配。
VPI_ERROR_INVALID_PAYLOAD_TYPEpayload 无效。
VPI_ERROR_INVALID_OPERATION所需的后端未在 streamprevPyrcuurPyrmvImg 中启用。
VPI_SUCCESS操作成功执行。

◆ vpiOpticalFlowDenseGetSGMParams()

VPIStatus vpiOpticalFlowDenseGetSGMParams ( VPIPayload  payload,
VPIOpticalFlowDenseSGMParams sgmParams 
)

#include <vpi/algo/OpticalFlowDense.h>

检索在稠密光流负载中设置的半全局匹配参数。

参数
[in]payloadvpiCreateOpticalFlowDense 创建的负载。
  • 负载必须使用 OFA 后端。
[out]sgmParams参数将写入到的结构。
  • 不能为 NULL。
返回值
VPI_ERROR_INVALID_PAYLOAD_TYPEpayload 无效。
VPI_ERROR_INVALID_ARGUMENTsgmParams 为 NULL。
VPI_ERROR_INVALID_OPERATIONpayload 不是为 OFA 稠密光流创建的。
VPI_SUCCESS操作成功执行。

◆ vpiOpticalFlowDenseSetSGMParams()

VPIStatus vpiOpticalFlowDenseSetSGMParams ( VPIPayload  payload,
const VPIOpticalFlowDenseSGMParams sgmParams 
)

#include <vpi/algo/OpticalFlowDense.h>

设置半全局匹配参数,供具有给定负载的稠密光流操作使用。

这些参数仅对给定负载上未来的稠密光流操作有效。已提交的操作不会受到影响。

参数
[in]payloadvpiCreateOpticalFlowDense 创建的负载。
  • 负载必须使用 OFA 后端。
[in]sgmParams供未来使用给定负载的稠密光流提交使用的 SGM 参数。
  • 不能为 NULL。
返回值
VPI_ERROR_INVALID_PAYLOAD_TYPEpayload 无效。
VPI_ERROR_INVALID_ARGUMENTsgmParams 为 NULL。
VPI_ERROR_INVALID_OPERATIONpayload 不是为 OFA 稠密光流创建的。
VPI_SUCCESS操作成功执行。