VPI - 视觉编程接口

3.2 版本

通用类型

定义了多个组件使用的通用类型。 更多...

数据结构

struct  VPIPyramidalKeypointF32
 存储基于 float32 金字塔的关键点坐标。坐标包括金字塔内图像中的 (x, y) 位置,以及用于选择该金字塔上特定图像的(八度和层)。 更多...
 
struct  VPIKeypointF32
 存储 float32 关键点坐标。坐标相对于图像的左上角。 更多...
 
struct  VPIKeypointU32
 存储 U32 关键点坐标。坐标相对于图像的左上角。 更多...
 
struct  VPIHomographyTransform2D
 存储通用的 2D 单应性变换。 更多...
 
struct  VPIBoundingBox
 存储通用的 2D 边界框。 更多...
 
struct  VPIAxisAlignedBoundingBoxF32
 存储轴对齐的 32 位浮点 2D 边界框。 更多...
 
struct  VPIStats
 存储图像的统计信息。 更多...
 
struct  VPIMatches
 存储 2 个描述符之间的匹配项。 更多...
 
struct  VPIRectangleI
 存储矩形的几何信息。 更多...
 
struct  VPIPose
 估计从一个 3D 坐标系到另一个 3D 坐标系的变换,并带有对象空间误差。 更多...
 

#define VPI_TERMINATION_CRITERIA_ITERATIONS   (1u << 0)
 定义了终止条件宏。 更多...
 

枚举

enum  VPIInterpolationType
 多个算法支持的插值类型。 更多...
 
enum  VPIBorderExtension
 图像边界扩展指定应如何构建图像域外部的像素值。 更多...
 
enum  VPIOpticalFlowQuality
 定义了光流算法的质量。 更多...
 
enum  VPILockMode
 定义了内存锁定函数使用的锁定模式。 更多...
 
enum  VPIEventState
 定义了事件的状态。 更多...
 

详细描述

定义了多个组件使用的通用类型。


数据结构文档

◆ VPIPyramidalKeypointF32

struct VPIPyramidalKeypointF32

存储基于 float32 金字塔的关键点坐标。坐标包括金字塔内图像中的 (x, y) 位置,以及用于选择该金字塔上特定图像的(八度和层)。

金字塔用于用一个或多个分辨率级别(也称为八度)来近似尺度空间,其中每个八度可以有一个或多个平滑层。一个例子是在 ORB 算法 中,其输入是一个金字塔,表示其基础图像的尺度空间,通常有几个八度,其中每个八度有一层。八度定义为双图像金字塔的级别,即比例为 0.5 的 VPIPyramid

定义在文件 Types.hTypes.h 319 行。

+ VPIPyramidalKeypointF32 的协作图
数据字段
float x 关键点的 x 坐标。
float y 关键点的 y 坐标。
float octave 关键点所在的金字塔八度(或金字塔级别)。
float layer 关键点所在的八度内的金字塔层。

◆ VPIKeypointF32

struct VPIKeypointF32

存储 float32 关键点坐标。坐标相对于图像的左上角。

定义在文件 Types.hTypes.h 333 行。

+ VPIKeypointF32 的协作图
数据字段
float x 关键点的 x 坐标。
float y 关键点的 y 坐标。

◆ VPIKeypointU32

struct VPIKeypointU32

存储 U32 关键点坐标。坐标相对于图像的左上角。

定义在文件 Types.hTypes.h 345 行。

+ VPIKeypointU32 的协作图
数据字段
uint32_t x 关键点的 x 坐标。
uint32_t y 关键点的 y 坐标。

◆ VPIHomographyTransform2D

struct VPIHomographyTransform2D

存储通用的 2D 单应性变换。

当只需要缩放和平移变换时,这些参数必须按如下方式排列在矩阵中

\[ \begin{bmatrix} s_x & 0 & p_x \\ 0 & s_y & p_y \\ 0 & 0 & 1 \end{bmatrix} \]

缩放 \((s_x,s_y)\) 相对于图像块的中心,位置 \((p_x,p_y)\) 相对于图像的左上角。

在一般情况下,给定一个齐次 2D 点 \(P(x,y,1)\) 和矩阵 \(M^{3x3}\),欧几里得 2D 点 \(O(x,y)\) 定义为

\begin{align} T &= M \cdot P \\ O &= (T_x/T_z, T_y/T_z) \end{align}

定义在文件 Types.hTypes.h 403 行。

+ VPIHomographyTransform2D 的协作图
数据字段
float mat3[3][3] 定义单应性的 3x3 齐次矩阵。

◆ VPIBoundingBox

struct VPIBoundingBox

存储通用的 2D 边界框。

尽管此结构可以存储由任何单应性变换的 2D 边界框,但有时它存储轴对齐的边界框。要检索它,请执行以下操作

float x = xform.mat3[0][2];
float y = xform.mat3[1][2];
float w = width * xform.mat3[0][0];
float h = height * xform.mat3[1][1];
float width
边界框宽度。
定义: Types.h:426
float height
边界框高度。
定义: Types.h:427
VPIHomographyTransform2D xform
定义边界框左上角及其单应性。
定义: Types.h:425
float mat3[3][3]
定义单应性的 3x3 齐次矩阵。
定义: Types.h:405

定义在文件 Types.hTypes.h 423 行。

+ VPIBoundingBox 的协作图
数据字段
VPIHomographyTransform2D xform 定义边界框左上角及其单应性。
float width 边界框宽度。
float height 边界框高度。

◆ VPIAxisAlignedBoundingBoxF32

struct VPIAxisAlignedBoundingBoxF32

存储轴对齐的 32 位浮点 2D 边界框。

定义在文件 Types.hTypes.h 435 行。

+ VPIAxisAlignedBoundingBoxF32 的协作图
数据字段
float left 定义边界框左边缘的坐标。
float top 定义边界框顶边缘的坐标。
float width 边界框宽度。
float height 边界框高度。

◆ VPIStats

struct VPIStats

存储图像的统计信息。

定义在文件 Types.hTypes.h 547 行。

+ VPIStats 的协作图
数据字段
float mean[4] 每通道均值。
float covariance[4][4] 每通道协方差矩阵,对角线的平方根是标准差。
int32_t pixelCount 总像素数。
float sum[4] 每通道总和。

◆ VPIMatches

struct VPIMatches

存储 2 个描述符之间的匹配项。

定义在文件 Types.hTypes.h 573 行。

+ VPIMatches 的协作图
数据字段
int refIndex[VPI_MAX_MATCHES_PER_DESCRIPTOR] 匹配参考索引。
float distance[VPI_MAX_MATCHES_PER_DESCRIPTOR] 查询描述符和参考描述符之间的距离。

◆ VPIRectangleI

struct VPIRectangleI

存储矩形的几何信息。

定义在文件 Types.hTypes.h 587 行。

+ VPIRectangleI 的协作图
数据字段
int32_t x
int32_t y
int32_t width
int32_t height

◆ VPIPose

struct VPIPose

估计从一个 3D 坐标系到另一个 3D 坐标系的变换,并带有对象空间误差。

定义在文件 Types.hTypes.h 795 行。

+ VPIPose 的协作图
数据字段
float transform[3][4] 从一个 3D 坐标系到另一个 3D 坐标系的变换。

\begin{bmatrix} R_{3\times3} & T_{3\times1} \end{bmatrix}

其中:\(R_{3\times3}\): 旋转矩阵。 \(T_{3\times1}\): 源系统原点在目标系统坐标中表示的 3D 位置。

源坐标系 \(A\) 中的点可以通过以下公式变换为目标坐标系 \(B\) 中的同一点

\(\begin{bmatrix} x_B \\ y_B \\ z_B \end{bmatrix} = \begin{bmatrix} R_{3\times3} & T_{3\times1} \end{bmatrix} \begin{bmatrix} x_A \\ y_A \\ z_A \\ 1 \end{bmatrix}\)

float error 姿态估计的对象空间误差。

宏定义文档

◆ VPI_TERMINATION_CRITERIA_ITERATIONS

#define VPI_TERMINATION_CRITERIA_ITERATIONS   (1u << 0)

#include <vpi/Types.h>

定义了终止条件宏。

基于最大迭代次数的终止。

定义在文件 Types.hTypes.h 638 行。

枚举类型文档

◆ VPIInterpolationType

#include <vpi/Interpolation.h>

多个算法支持的插值类型。

枚举器
VPI_INTERP_NEAREST 

最近邻插值。

\[ P(x,y) = \mathit{in}[\lfloor x+0.5 \rfloor, \lfloor y+0.5 \rfloor] \]

VPI_INTERP_LINEAR 

线性插值。

插值权重定义为

\begin{align*} w_0(t)& \triangleq t-\lfloor t \rfloor \\ w_1(t)& \triangleq 1 - w_0(t) \\ \end{align*}

双线性插值的值由以下公式给出

\[ P(x,y) = \sum_{p=0}^1 \sum_{q=0}^1 \mathit{in}[\lfloor x \rfloor+p, \lfloor y \rfloor+q]w_p(x)w_q(y) \]

VPI_INTERP_CATMULL_ROM 

Catmull-Rom 立方插值。

Catmull-Rom 插值权重,其中 \(A=-0.5\) 定义如下

\begin{eqnarray*} w_0(t) &\triangleq& A(t+1)^3 &-& 5A(t+1)^2 &+& 8A(t+1) &-& 4A \\ w_1(t) &\triangleq& (A+2)t^3 &-& (A+3)t^2 &\nonumber& &+& 1 \\ w_2(t) &\triangleq& (A+2)(1-t)^3 &-& (A+3)(1-t)^2 &\nonumber& &+& 1 \\ w_3(t) &\triangleq& \rlap{1 - w_0(t) - w_1(t) - w_2(t) } \end{eqnarray*}

双三次插值的值由以下公式给出

\[ P(x,y) = \sum_{p=-1}^2 \sum_{q=-1}^2 \mathit{in}[\lfloor x \rfloor+p, \lfloor y \rfloor+q]w_p(x)w_q(y) \]

定义在文件 Interpolation.hInterpolation.h 69 行。

◆ VPIBorderExtension

#include <vpi/Types.h>

图像边界扩展指定应如何构建图像域外部的像素值。

枚举器
VPI_BORDER_ZERO 

图像外部的所有像素均被视为零。

VPI_BORDER_CLAMP 

边界像素无限重复。

VPI_BORDER_REFLECT 

edcba|abcde|edcba

VPI_BORDER_MIRROR 

dedcb|abcde|dcbab

VPI_BORDER_LIMITED 

将图像视为受限,不访问外部像素。

VPI_BORDER_INVALID 

无效边界。

定义在文件 Types.hTypes.h 276 行。

◆ VPIOpticalFlowQuality

#include <vpi/Types.h>

定义了光流算法的质量。

枚举器
VPI_OPTICAL_FLOW_QUALITY_LOW 

快速但低质量的光流实现。

VPI_OPTICAL_FLOW_QUALITY_MEDIUM 

速度和质量介于 VPI_OPTICAL_FLOW_QUALITY_LOWVPI_OPTICAL_FLOW_QUALITY_HIGH 之间。

VPI_OPTICAL_FLOW_QUALITY_HIGH 

慢速但高质量的光流实现。

定义在文件 Types.hTypes.h 597 行。

◆ VPILockMode

#include <vpi/Types.h>

定义了内存锁定函数使用的锁定模式。

枚举器
VPI_LOCK_READ 

仅锁定内存以进行读取。

在锁定以进行读取时写入内存会导致未定义的行为。

VPI_LOCK_WRITE 

仅锁定内存以进行写入。

在锁定以进行读取时读取内存会导致未定义的行为。 预计将写入整个内存。 如果有未写入的区域,则在解锁期间可能无法正确更新。 在这种情况下,最好使用 VPI_LOCK_READ_WRITE。

仅锁定以进行写入可能效率稍高,尤其是在执行非共享内存映射时。

VPI_LOCK_READ_WRITE 

锁定内存以进行读取和写入。

定义在文件 Types.hTypes.h 613 行。

◆ VPIEventState

#include <vpi/Types.h>

定义了事件的状态。

枚举器
VPI_EVENT_STATE_NOT_SIGNALED 

事件尚未发出信号。

VPI_EVENT_STATE_SIGNALED 

事件已发出信号。

定义在文件 Types.hTypes.h 695 行。