VPI - 视觉编程接口

3.2 版本

变换估计器

估计源和目标关键点之间的变换。 更多...

数据结构

struct  VPIConstrainedHomography2DConfig
 保存约束 2D 单应变换的配置。 更多...
 
union  VPITransformConfig
 变换参数。 更多...
 
struct  VPITransformEstimatorParams
 用于调整变换估计器算法的参数。 更多...
 

枚举

enum  VPITransformType
 支持的变换类型。 更多...
 
enum  VPITransfomEstimationMethod
 变换估计方法。 更多...
 

函数

VPIStatus vpiCreateTransformEstimator (uint64_t backends, int32_t maxKeypoints, VPIPayload *payload)
 vpiSubmitTransformEstimator 创建负载。 更多...
 
VPIStatus vpiInitTransformEstimatorParams (VPITransformType type, VPITransformEstimatorParams *params)
 使用给定变换类型的默认值初始化 VPITransformEstimatorParams更多...
 
VPIStatus vpiSubmitTransformEstimator (VPIStream stream, uint64_t backend, VPIPayload payload, VPIArray srcKeypoints, VPIArray tgtKeypoints, VPIArray matches, VPIArray outTransform, VPIArray outInliers, const VPITransformEstimatorParams *params)
 向流提交 变换估计器 操作。 更多...
 

详细描述

估计源和目标关键点之间的变换。

有关更多详细信息和使用示例,请参阅 变换估计器


数据结构文档

◆ VPIConstrainedHomography2DConfig

struct VPIConstrainedHomography2DConfig

保存约束 2D 单应变换的配置。

定义于文件 TransformEstimator.h 的第 104 行。

+ VPIConstrainedHomography2DConfig 的协作图
数据字段
float minRotation 有效旋转范围,单位为弧度。

如果 min==-FLT_MAX,则不对最小旋转施加限制。 如果 max==FLT_MAX,则不对最大旋转施加限制。 如果 min==max,则不会估计旋转,它将被视为 min。

float maxRotation 有效旋转范围,单位为弧度。

如果 min==-FLT_MAX,则不对最小旋转施加限制。 如果 max==FLT_MAX,则不对最大旋转施加限制。 如果 min==max,则不会估计旋转,它将被视为 min。

float minXScale 有效的水平缩放范围。

如果 isIsotropicScale != 0 (true),则此范围适用于各向同性缩放。 如果为 0,则不限制。 如果 min==max,则不会估计水平缩放,它将被视为 min。

  • 如果 max != 0,则 min 必须 <= max。
float maxXScale 有效旋转范围,单位为弧度。

如果 min==-FLT_MAX,则不对最小旋转施加限制。 如果 max==FLT_MAX,则不对最大旋转施加限制。 如果 min==max,则不会估计旋转,它将被视为 min。

float minYScale 有效的垂直缩放范围。

仅当 isIsotropicScale 为 0 (false) 时使用。 如果为 0,则不限制。 如果 min==max,则不会估计垂直缩放,它将被视为 min。

  • 如果 max != 0,则 min 必须 <= max。
float maxYScale 有效的垂直缩放范围。

仅当 isIsotropicScale 为 0 (false) 时使用。 如果为 0,则不限制。 如果 min==max,则不会估计垂直缩放,它将被视为 min。

  • 如果 max != 0,则 min 必须 <= max。
float minXTranslation 有效的水平平移范围。

如果 min==-FLT_MAX,则不对最小水平平移施加限制。 如果 max==FLT_MAX,则不对最大水平平移施加限制。 如果 min==max,则不会估计水平平移,它将被视为 min。

  • min 必须 <= max。
float maxXTranslation 有效的水平平移范围。

如果 min==-FLT_MAX,则不对最小水平平移施加限制。 如果 max==FLT_MAX,则不对最大水平平移施加限制。 如果 min==max,则不会估计水平平移,它将被视为 min。

  • min 必须 <= max。
float minYTranslation 有效的垂直平移范围。

如果 min==-FLT_MAX,则不对最小垂直平移施加限制。 如果 max==FLT_MAX,则不对最大垂直平移施加限制。 如果 min==max,则不会估计垂直平移,它将被视为 min。

  • min 必须 <= max。
float maxYTranslation 有效的垂直平移范围。

如果 min==-FLT_MAX,则不对最小垂直平移施加限制。 如果 max==FLT_MAX,则不对最大垂直平移施加限制。 如果 min==max,则不会估计垂直平移,它将被视为 min。

  • min 必须 <= max。
float minShear 有效的剪切范围。

如果 min==-FLT_MAX,则不对最小剪切施加限制。 如果 max==FLT_MAX,则不对最大剪切施加限制。 如果 min==max,则不会估计剪切,它将被视为 min。

  • min 必须 <= max。
float maxShear 有效的剪切范围。

如果 min==-FLT_MAX,则不对最小剪切施加限制。 如果 max==FLT_MAX,则不对最大剪切施加限制。 如果 min==max,则不会估计剪切,它将被视为 min。

  • min 必须 <= max。
int8_t isAffine 是否限制为仿射变换。

如果 != 0,则将变换限制为仿射变换。 如果为 0,则允许透视变换。

int8_t isIsotropicScale 缩放是否在所有方向上均匀(各向同性)。

如果 != 0,则假定缩放是各向同性的。 如果为 0,则允许不同的水平和垂直缩放。

◆ VPITransformConfig

union VPITransformConfig

变换参数。

定义于文件 TransformEstimator.h 的第 178 行。

+ VPITransformConfig 的协作图
数据字段
VPIConstrainedHomography2DConfig constrainedHomography2D

◆ VPITransformEstimatorParams

struct VPITransformEstimatorParams

用于调整变换估计器算法的参数。

定义于文件 TransformEstimator.h 的第 193 行。

+ VPITransformEstimatorParams 的协作图
数据字段
VPITransfomEstimationMethod method 用于变换估计的方法。
int32_t solverMaxIterations 非线性求解器应采取的最大迭代次数。
int32_t ransacMaxIterations RANSAC 的最大迭代次数。
float ransacReprojErrorTolerance 点被视为内点的最大允许重投影误差。
float ransacConfidenceLevel 点被视为内点的最大允许重投影误差。
int32_t ransacSeed 要使用的随机数种子。
int32_t maxRefinementIterations 模型细化步骤的最大迭代次数。

传递 0 以跳过细化。 当变换不是仿射变换时,通常需要这样做。

VPITransformType xftype 要估计的变换类型。
VPITransformConfig xfcfg 变换配置,例如可信边界等。

枚举类型文档

◆ VPITransformType

#include <vpi/algo/TransformEstimator.h>

支持的变换类型。

枚举器
VPI_XFORM_CONSTRAINED_HOMOGRAPHY_2D 

表示约束 2D 单应变换。

定义于文件 TransformEstimator.h 的第 171 行。

◆ VPITransfomEstimationMethod

#include <vpi/algo/TransformEstimator.h>

变换估计方法。

枚举器
VPI_XFORM_ESTIM_METHOD_REGULAR 

使用最小二乘法最小化方法。

VPI_XFORM_ESTIM_METHOD_RANSAC 

使用 RANSAC 和最小二乘法的鲁棒估计。

定义于文件 TransformEstimator.h 的第 184 行。

函数文档

◆ vpiCreateTransformEstimator()

VPIStatus vpiCreateTransformEstimator ( uint64_t  backends,
int32_t  maxKeypoints,
VPIPayload payload 
)

#include <vpi/algo/TransformEstimator.h>

vpiSubmitTransformEstimator 创建负载。

参数
[in]backends将执行算法的 VPI 后端。
[in]maxKeypoints处理的最大关键点数。
  • 必须 > 0。
[out]payload指向接收创建句柄的负载变量的指针。
返回值
VPI_ERROR_INVALID_ARGUMENTpayload 为 NULL。
VPI_ERROR_INVALID_ARGUMENTmaxKeypints 超出有效范围。
VPI_ERROR_INVALID_ARGUMENTbackend 指的是无效的后端。
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持变换估计器算法。
VPI_ERROR_INVALID_CONTEXT当前上下文已被销毁。
VPI_ERROR_INVALID_OPERATION后端在当前上下文中未启用。
VPI_ERROR_OUT_OF_MEMORY无法分配所需的资源。
VPI_SUCCESS操作执行成功。

◆ vpiInitTransformEstimatorParams()

VPIStatus vpiInitTransformEstimatorParams ( VPITransformType  type,
VPITransformEstimatorParams params 
)

#include <vpi/algo/TransformEstimator.h>

使用给定变换类型的默认值初始化 VPITransformEstimatorParams

默认值删除所有参数约束。 它设置以下参数

  • method: VPI_XFORM_ESTIM_METHOD_RANSAC
  • ransacMaxIterations: 2000
  • ransacReprojErrorTolerance: 3
  • ransacConfidenceLevel: 0.95
  • ransacSeed: 0
  • solverMaxIterations: 50
  • solverReprojErrorTolerance: 1e-6
  • solverParameterTolerance: 1e-8
  • maxRefinementIterations: 10
  • xftype: (传递的类型) 如果 xftype == VPI_XFORM_CONSTRAINED_HOMOGRAPHY_2D
  • xfcfg.constrainedHomography2D.minRotation: -FLT_MAX
  • xfcfg.constrainedHomography2D.maxRotation: +FLT_MAX
  • xfcfg.constrainedHomography2D.minXScale: 0
  • xfcfg.constrainedHomography2D.maxXScale: 0
  • xfcfg.constrainedHomography2D.minYScale: 0
  • xfcfg.constrainedHomography2D.maxYScale: 0
  • xfcfg.constrainedHomography2D.minXTranslation: -FLT_MAX
  • xfcfg.constrainedHomography2D.maxXTranslation: FLT_MAX
  • xfcfg.constrainedHomography2D.minYTranslation: -FLT_MAX
  • xfcfg.constrainedHomography2D.maxYTranslation: FLT_MAX
  • xfcfg.constrainedHomography2D.isAffine: 0
  • xfcfg.constrainedHomography2D.isIsotropicScale: 0
参数
[in]type要将结构初始化为的变换类型。
[in,out]params指向要初始化的结构的指针。
  • 不得为 NULL。
返回值
VPI_ERROR_INVALID_ARGUMENTparams 为 NULL。
VPI_ERROR_INVALID_ARGUMENT变换类型不被接受。
VPI_SUCCESS操作执行成功。

◆ vpiSubmitTransformEstimator()

VPIStatus vpiSubmitTransformEstimator ( VPIStream  stream,
uint64_t  backend,
VPIPayload  payload,
VPIArray  srcKeypoints,
VPIArray  tgtKeypoints,
VPIArray  matches,
VPIArray  outTransform,
VPIArray  outInliers,
const VPITransformEstimatorParams params 
)

#include <vpi/algo/TransformEstimator.h>

向流提交 变换估计器 操作。

参数
[in]stream操作将被排队的流。
  • 不得为 NULL。
  • 流必须已启用将执行算法的后端。
[in]backend将执行算法的后端。
  • 必须是在负载创建期间指定的后端,或者为 0 以用作此后端的简写。
[in]payload使用 vpiCreateTransformEstimator 创建的负载。
  • 不得为 NULL。
[in]srcKeypoints源关键点。 它定义了一组关键点,估计的变换将应用于这些关键点。
[in]tgtKeypoints目标关键点。 它定义了一组关键点,这些关键点是将变换应用于源关键点的结果。
[in]matches源关键点和目标关键点之间的对应关系。 如果不为 NULL,则对于 matches 中的每个第 i 个元素,对应关系由下式给出
  • src = srcKeypoints[i]
  • tgt = tgtKeypoints[matches[i].refIndex[0]] 如果为 NULL,则对于 srcKeypoints 中的每个第 i 个元素,对应关系由下式给出
  • src = srcKeypoints[i]
  • tgt = tgtKeypoints[i]
  • 如果不为 NULL,则它必须具有类型 VPI_ARRAY_TYPE_MATCHES
[out]outTransform将在其中写入估计的变换。 数组的类型指定要估计的变换类型。
[out]outInliers内点匹配的索引。 可选,如果不需要,则传递 NULL。
  • 容量必须 >= srcKeypoints 中的关键点数。
  • 数组类型必须为 VPI_ARRAY_TYPE_U32
[in]params指定要估计的变换参数的参数。 如果为 NULL,将对输出变换数组类型给出的变换执行无约束估计。 如果不为 NULL,则以下限制适用
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTpayload 为 NULL。
VPI_ERROR_INVALID_ARGUMENTsrcKeypointstgtKeypoints 为 NULL。
VPI_ERROR_INVALID_ARGUMENToutTransform 为 NULL。
VPI_ERROR_INVALID_ARGUMENTbackend 无效或未知。
VPI_ERROR_INVALID_ARGUMENTsrcKeypointstgtKeypoints 不一致。
VPI_ERROR_INVALID_ARGUMENT变换类型与输出变换数组类型不一致。
VPI_ERROR_INVALID_ARRAY_TYPEsrcKeypointstgtKeypointsmatchesoutInliers 的数组类型不正确。
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持变换估计器算法。
VPI_ERROR_INVALID_OPERATION后端硬件不可用。
VPI_ERROR_INVALID_OPERATION所需的后端在 streamsrcKeypointstgtKeypointsmatches 中未启用。
VPI_SUCCESS操作执行成功。