VPI - Vision Programming Interface

3.2 版本

立体视差估计器

从立体图像对估计视差。 更多...

数据结构

struct  VPIStereoDisparityEstimatorCreationParams
 定义 vpiCreateStereoDisparityEstimator 参数的结构体。 更多...
 
struct  VPIStereoDisparityEstimatorParams
 定义 vpiSubmitStereoDisparityEstimator 参数的结构体。 更多...
 

枚举

enum  VPIStereoDisparityConfidenceType
 定义置信度值的计算方式。 更多...
 

函数

VPIStatus vpiInitStereoDisparityEstimatorCreationParams (VPIStereoDisparityEstimatorCreationParams *params)
 使用默认值初始化 VPIStereoDisparityEstimatorCreationParams更多...
 
VPIStatus vpiCreateStereoDisparityEstimator (uint64_t backends, int32_t imageWidth, int32_t imageHeight, VPIImageFormat inputFormat, const VPIStereoDisparityEstimatorCreationParams *params, VPIPayload *payload)
 vpiSubmitStereoDisparityEstimator 创建负载 (payload)。 更多...
 
VPIStatus vpiInitStereoDisparityEstimatorParams (VPIStereoDisparityEstimatorParams *params)
 使用默认值初始化 VPIStereoDisparityEstimatorParams更多...
 
VPIStatus vpiSubmitStereoDisparityEstimator (VPIStream stream, uint64_t backend, VPIPayload payload, VPIImage left, VPIImage right, VPIImage disparity, VPIImage confidenceMap, const VPIStereoDisparityEstimatorParams *params)
 在一对图像上运行立体处理并输出视差图。 更多...
 

详细描述

从立体图像对估计视差。

有关更多详细信息和用法示例,请参阅 立体视差估计器


数据结构文档

◆ VPIStereoDisparityEstimatorCreationParams

struct VPIStereoDisparityEstimatorCreationParams

定义 vpiCreateStereoDisparityEstimator 参数的结构体。

定义于文件 StereoDisparity.h 的第 82 行。

+ VPIStereoDisparityEstimatorCreationParams 的协作图
数据字段
int32_t maxDisparity 匹配搜索的最大视差。
  • 必须为正数。
  • 在 OFA 或 OFA+PVA+VIC 后端,maxDisparity 必须为 128 或 256。
  • 在 CUDA 后端,maxDisparity 必须 >= 0 且 <= 256。
int32_t downscaleFactor 输出相对于输入分辨率的降采样因子。
  • 对于 OFA 和 OFA+PVA+VIC 后端,允许的值为 1、2、4 或 8。
  • 对于其他后端,仅支持 1,即输出维度等于输入维度。
int8_t includeDiagonals 在半全局匹配 (SGM) 计算中包含对角线或倾斜路径。

包含对角线路径会使立体视差估计器速度变慢,但会提高结果质量。包含对角线路径还会增加 CUDA 后端中的内存使用量。如果为零,则表示不包含对角线路径,即仅水平和垂直路径。如果不为零,则表示包含对角线路径,即水平、垂直和倾斜路径。仅在使用 CUDA 和 OFA 后端时适用。

◆ VPIStereoDisparityEstimatorParams

struct VPIStereoDisparityEstimatorParams

定义 vpiSubmitStereoDisparityEstimator 参数的结构体。

定义于文件 StereoDisparity.h 的第 220 行。

+ VPIStereoDisparityEstimatorParams 的协作图
数据字段
int32_t windowSize 表示 OFA+PVA+VIC 后端的中值滤波器大小或算法中使用的 census 变换窗口大小(其他后端)。
  • 在 CUDA 后端,此参数被忽略。而是使用 9x7 窗口。
  • 在 OFA 后端,此参数被忽略。
  • 在 OFA+PVA+VIC 后端,有效值为 1、3、5 或 7。
int32_t maxDisparity 匹配搜索的最大视差。
  • 最大视差必须为 0(使用来自 payload 的值),或者为正数且小于或等于 payload 中配置的值。
  • 对于 CUDA,它必须等于 payload 中配置的值(或 0)
int32_t confidenceThreshold 置信度阈值,高于此阈值,视差值被认为是有效的。

仅在 CUDA 和 OFA+PVA+VIC 后端中使用。

  • 必须是 U16 范围内的值,即从 0 到 65535。
int32_t quality 已忽略,请勿使用。
  • 必须是介于 1 和 8 之间的值。
VPIStereoDisparityConfidenceType confidenceType 用于生成置信度输出的计算类型。
int32_t minDisparity 最小可能的视差值。

仅在使用 CUDA 后端时适用。通常为零,但可以根据输入图像进行调整。

  • 必须介于 0 和最大视差之间。
int32_t p1 相邻像素之间视差变化 +/- 1 的惩罚值。

通常是一个较小的值,在(最小,最大)视差范围内,用于惩罚视差的微小变化,即 1。使用较低的 P1 惩罚值可以适应倾斜或弯曲的表面。(请参阅 paper_sgm 了解惩罚如何影响视差值。)仅在使用 CUDA 和 OFA 后端时适用。

  • 必须为正值。
  • 必须小于或等于 P2。
int32_t p2 相邻像素之间视差变化大于 1 的惩罚值。

通常是一个较大的值,在(最小,最大)视差范围内,用于惩罚视差的较大变化。使用较高的 P2 惩罚值可以避免视差的突变,即不连续性。(请参阅 paper_sgm 了解惩罚如何影响视差值。)仅在使用 CUDA 和 OFA 后端时适用。

  • 必须为正值。
  • 必须等于或大于 P1。
  • 在 CUDA 后端,必须小于 256。
  • 在 OFA 后端,必须小于或等于 217 - P1。
  • 在使用 VPI_STEREO_CONFIDENCE_INFERENCE 的 OFA+PVA+VIC 后端中,必须小于或等于 89 - P1。
int32_t p2Alpha Alpha 用于启用自适应大惩罚值(自适应 P2)功能。

它用于更好地保留对象边界和细小对象。较高的 alpha 值表示 P2 根据像素强度的自适应性较低。它是公式 P2' = - (1 / alpha) * abs(I_cur - I_prev) + P2 中的 alpha 值;其中 P2' 是给定 P2 惩罚值的自适应版本。abs(I_cur - I_prev) 是沿着路径成本评估方向的当前像素位置和先前像素位置之间强度值的绝对差值。这种自适应背后的直觉是,如果大的视差差异与大的强度变化相吻合,则应减少对它们的惩罚。alpha 值可以是 0、1、2、4 或 8。使用 alpha 值为 0 会禁用自适应 P2 功能。仅在使用 OFA 后端时适用。

  • 必须为 0、1、2、4 或 8。
float uniqueness 唯一性比率,范围为 [0, 1],是最佳成本值应超过第二佳成本值的边距。

值为 1 表示标记为无效的像素较少,因为在与当前最佳成本进行比较时,会考虑全部成本。值小于 1 表示仅考虑成本的比率作为最佳成本。值为 0 表示标记为无效的像素较多,因为仅考虑 +/- 1 像素的视差变化。使用它可以提高计算出的视差的确定性。使用 [0, 1] 范围之外的值(例如 -1)可以忽略唯一性计算。仅在使用 CUDA 后端时适用。

int8_t numPasses 内存高效半全局匹配 (eSGM) 计算中的pass次数。

值为 1 或 2 表示每个方向执行一次正向或一次正向和一次反向pass。值为 3 表示在正向和反向pass之后再执行一次正向pass。将pass次数设置为 3 会使立体视差估计器速度变慢,但会提高结果质量。仅在使用 OFA 后端时适用。

  • 必须为 1、2 或 3。

枚举类型文档

◆ VPIStereoDisparityConfidenceType

#include <vpi/algo/StereoDisparity.h>

定义置信度值的计算方式。

VPI_STEREO_CONFIDENCE_[ABSOLUTE|RELATIVE] 基于从左到右 (D_lr) 和从右到左 (D_rl) 的视差差异,以及可能的最大视差 (MAX_DISP)。有关详细信息,请参见公式。

VPI_STEREO_CONFIDENCE_INFERENCE 使用卷积神经网络 (CNN) 来确定置信度。仅适用于 OFA+VIC+PVA 后端的组合。

置信度值低于给定置信度阈值参数的值会使输出视差无效。

枚举器
VPI_STEREO_CONFIDENCE_ABSOLUTE 

像素的 U16 置信度值由下式给出:[ 1 - abs(D_lr - D_rl) / MAX_DISP ] * 0xFFFF。

VPI_STEREO_CONFIDENCE_RELATIVE 

像素的 U16 置信度值由下式给出:[ 1 - abs(D_lr - D_rl) / D_lr ] * 0xFFFF。

VPI_STEREO_CONFIDENCE_INFERENCE 

像素的置信度值在 0:UINT16_MAX 范围内,映射范围从 0% 到 100%。

定义于文件 StereoDisparity.h 的第 199 行。

函数文档

◆ vpiInitStereoDisparityEstimatorCreationParams()

VPIStatus vpiInitStereoDisparityEstimatorCreationParams ( VPIStereoDisparityEstimatorCreationParams params)

#include <vpi/algo/StereoDisparity.h>

使用默认值初始化 VPIStereoDisparityEstimatorCreationParams

默认值

  • maxDisparity = 64
  • downscaleFactor = 1
  • includeDiagonals = 1
参数
[in]params要填充默认值的结构体。
返回值
VPI_ERROR_INVALID_ARGUMENTparams 为 NULL。
VPI_SUCCESS操作成功执行。

◆ vpiCreateStereoDisparityEstimator()

VPIStatus vpiCreateStereoDisparityEstimator ( uint64_t  backends,
int32_t  imageWidth,
int32_t  imageHeight,
VPIImageFormat  inputFormat,
const VPIStereoDisparityEstimatorCreationParams params,
VPIPayload payload 
)

#include <vpi/algo/StereoDisparity.h>

vpiSubmitStereoDisparityEstimator 创建负载 (payload)。

参数
[in]backends有资格执行该算法的 VPI 后端。
[in]imageWidth, imageHeight输入图像尺寸。
  • 必须 >= 0。
  • 在 OFA 上,应用 downscaleFactor 后,输入宽度和高度必须在 16 到 16384 之间。
  • 在 OFA+PVA+VIC 上,输入宽度必须至少为 max(64, maxDisparity/downscaleFactor) * downscaleFactor。
[in]inputFormat输入图像格式。
[in]params创建参数。 传递 NULL 以使用 vpiInitStereoDisparityEstimatorCreationParams 给出的默认值。
[out]payload指向接收创建句柄的 payload 变量的指针。
返回值
VPI_ERROR_INVALID_IMAGE_FORMAT不支持 inputFormat
VPI_ERROR_INVALID_ARGUMENTpayload 为 NULL。
VPI_ERROR_INVALID_ARGUMENTimageWidthimageHeight 超出有效范围。
VPI_ERROR_INVALID_ARGUMENTbackends 指的是无效的后端。
VPI_ERROR_INVALID_ARGUMENTparams 中的最大视差超出有效范围。
VPI_ERROR_NOT_IMPLEMENTED给定的后端不支持立体视差估计器算法。
VPI_ERROR_INVALID_OPERATION后端硬件不可用。
VPI_ERROR_INVALID_CONTEXT当前上下文已销毁。
VPI_ERROR_OUT_OF_MEMORY无法分配所需的资源。
VPI_ERROR_INVALID_OPERATION后端在当前上下文中未启用。
VPI_SUCCESS操作成功执行。

◆ vpiInitStereoDisparityEstimatorParams()

VPIStatus vpiInitStereoDisparityEstimatorParams ( VPIStereoDisparityEstimatorParams params)

#include <vpi/algo/StereoDisparity.h>

使用默认值初始化 VPIStereoDisparityEstimatorParams

默认值

  • windowSize = 5
  • maxDisparity = 0(使用 payload 构建期间设置的视差)
  • confidenceThreshold = 32767
  • confidenceType = VPI_STEREO_CONFIDENCE_ABSOLUTE
  • minDisparity = 0
  • p1 = 3
  • p2 = 48
  • p2Alpha = 0
  • uniqueness = -1
  • numPasses = 3
参数
[in]params要填充默认值的结构体。
返回值
VPI_ERROR_INVALID_ARGUMENTparams 为 NULL。
VPI_SUCCESS操作成功执行。

◆ vpiSubmitStereoDisparityEstimator()

VPIStatus vpiSubmitStereoDisparityEstimator ( VPIStream  stream,
uint64_t  backend,
VPIPayload  payload,
VPIImage  left,
VPIImage  right,
VPIImage  disparity,
VPIImage  confidenceMap,
const VPIStereoDisparityEstimatorParams params 
)

#include <vpi/algo/StereoDisparity.h>

在一对图像上运行立体处理并输出视差图。

参数
[in]stream操作将排队到的流。
  • 不得为 NULL。
  • 流必须已启用将执行算法的后端。
[in]backend将执行算法的后端。
  • 必须是在 payload 创建期间指定的后端,或者为 0 以用作使用此后端的简写。
[in]payload要与其他参数一起提交的 Payload。
[in]left左立体输入图像。
  • 不得为 NULL。
  • 必须具有与 payload 创建期间指定的图像相同的格式和尺寸。
  • 图像必须已启用将执行算法的后端。
[in]right右立体输入图像。
  • 不得为 NULL。
  • 必须具有与 left 相同的格式和尺寸。
  • 图像必须已启用将执行算法的后端。
[out]disparity将在其中写入视差值的图像。 返回值采用 Q10.5 格式,即带有 5 个小数位的有符号定点数。 将其除以 32.0f 可将其转换为浮点数。
[out]confidenceMap包含置信度分数的图像,指示视差的准确程度。 如果不需要,请传递 NULL。 返回的置信度范围为 0 到 65535。 置信度越高,相应的视差越准确。
  • OFA 后端不支持置信度图输出,它必须为 NULL。
  • 图像格式必须为 VPI_IMAGE_FORMAT_U16
  • 必须与 disparity 尺寸相同。
  • 图像必须已启用将执行算法的后端。
[in]params指向算法控制参数的指针。 如果为 NULL,它将使用 vpiInitStereoDisparityEstimatorParams 给出的默认值。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTleftrightdisparity 为 NULL。
VPI_ERROR_INVALID_ARGUMENTparams 中的最大视差超出有效范围。
VPI_ERROR_INVALID_ARGUMENTparams 中的窗口大小超出有效范围。
VPI_ERROR_INVALID_ARGUMENTleftright 图像必须具有相同的尺寸。
VPI_ERROR_INVALID_ARGUMENT输入图像尺寸必须等于 payload 中配置的尺寸。
VPI_ERROR_INVALID_ARGUMENTconfidenceMapdisparity 必须具有相同的尺寸。
VPI_ERROR_INVALID_ARGUMENT后端不输出置信度图。
VPI_ERROR_INVALID_IMAGE_FORMATleftright 格式与 payload 图像格式不匹配。
VPI_ERROR_INVALID_IMAGE_FORMATdisparity 格式无效。
VPI_ERROR_INVALID_PAYLOAD_TYPEpayload 无效。
VPI_ERROR_INVALID_OPERATION所需的后端在 streamleftrightdisparityconfidenceMap 中未启用。
VPI_SUCCESS操作成功执行。