VPI - 视觉编程接口

3.2 版本

卷积

使用 2D 卷积核对图像进行卷积。 更多...

函数

VPIStatus vpiSubmitConvolution (VPIStream stream, uint64_t backend, VPIImage input, VPIImage output, const float *kernelData, int32_t kernelWidth, int32_t kernelHeight, VPIBorderExtension border)
 对图像执行通用 2D 卷积。 更多...
 
VPIStatus vpiSubmitSeparableConvolution (VPIStream stream, uint64_t backend, VPIImage input, VPIImage output, const float *kernelXData, int32_t kernelXSize, const float *kernelYData, int32_t kernelYSize, VPIBorderExtension border)
 对图像执行通用 2D 卷积操作,针对可分离卷积核进行了优化。 更多...
 

详细描述

使用 2D 卷积核对图像进行卷积。

有关卷积的更多详细信息和用法示例,请参阅 卷积。有关可分离卷积的更多详细信息和用法示例,请参阅 可分离卷积

vpiSubmitConvolution 用于通用 2D 卷积核,无论是否可分离。 对于可分离卷积核,通常使用 vpiSubmitSeparableConvolution 更有效。

函数文档

◆ vpiSubmitConvolution()

VPIStatus vpiSubmitConvolution ( VPIStream  stream,
uint64_t  backend,
VPIImage  input,
VPIImage  output,
const float *  kernelData,
int32_t  kernelWidth,
int32_t  kernelHeight,
VPIBorderExtension  border 
)

#include <vpi/algo/Convolution.h>

对图像执行通用 2D 卷积。

参数
[输入]stream操作将排队进入的流句柄。
  • 不能为空。
  • 流必须已启用将执行该算法的后端。
[输入]backend将执行该算法的后端。
[输入]input要与卷积核进行卷积的输入图像。
[输出]output结果写入的输出图像。
  • 不能为空。
  • 必须与输入图像具有相同的尺寸。
  • 图像必须已启用将执行该算法的后端。
  • 对于 PVA,它必须与输入图像具有相同的格式。
  • 对于其他后端,格式可以是
[输入]kernelWidth,kernelHeight卷积核尺寸。
  • 必须在 1x1 到 11x11 之间,并且可以是非正方形。
[输入]kernelData卷积核系数,以行优先布局。 卷积核元素被复制到内部缓冲区。 传递的缓冲区可以在调用后被释放。
  • 不能为空。
  • 它必须指向一个包含 kernelWidth * kernelHeight 元素的缓冲区,否则将导致未定义的行为
  • 在 PVA 后端,卷积核权重被限制为 |weight|<=1
[输入]border如何处理图像边界外的像素。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTinputoutput 为 NULL。
VPI_ERROR_INVALID_ARGUMENTkernelWidthkernelHeight 超出有效范围。
VPI_ERROR_INVALID_ARGUMENTkernelData 为 NULL。
VPI_ERROR_INVALID_ARGUMENTkernelData 中的某些权重超出有效范围。
VPI_ERROR_INVALID_ARGUMENTinputoutput 尺寸超出有效范围。
VPI_ERROR_INVALID_ARGUMENTinputoutput 图像必须具有相同的尺寸。
VPI_ERROR_INVALID_ARGUMENT不支持 border
VPI_ERROR_INVALID_ARGUMENTbackend 无效或未知。
VPI_ERROR_INVALID_IMAGE_FORMAT不支持 inputoutput 格式。
VPI_ERROR_INVALID_IMAGE_FORMATinputoutput 格式不兼容。
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持卷积算法。
VPI_ERROR_INVALID_OPERATION后端硬件不可用。
VPI_ERROR_INVALID_OPERATION所需的后端未在 streaminputoutput 中启用。
VPI_SUCCESS操作成功执行。

◆ vpiSubmitSeparableConvolution()

VPIStatus vpiSubmitSeparableConvolution ( VPIStream  stream,
uint64_t  backend,
VPIImage  input,
VPIImage  output,
const float *  kernelXData,
int32_t  kernelXSize,
const float *  kernelYData,
int32_t  kernelYSize,
VPIBorderExtension  border 
)

#include <vpi/algo/Convolution.h>

对图像执行通用 2D 卷积操作,针对可分离卷积核进行了优化。

参数
[输入]stream操作将排队进入的流句柄。
  • 不能为空。
  • 流必须已启用将执行该算法的后端。
[输入]backend将执行该算法的后端。
[输入]input要与卷积核进行卷积的输入图像。
[输出]output结果写入的输出图像。
  • 不能为空。
  • 必须与输入图像具有相同的尺寸和格式。
  • 图像必须已启用将执行该算法的后端。
[输入]kernelXSize,kernelYSizeX 和 Y 方向上的卷积核尺寸。
  • 必须在 1x1 到 11x11 之间。
[输入]kernelXData,kernelYData卷积核系数,分别在 X 和 Y 方向上。 卷积核元素被复制到内部缓冲区。 传递的缓冲区可以在调用后被释放。
  • kernelXDatakernelYData 必须分别指向包含 kernelXSizekernelYSize 元素的缓冲区。
  • 它们不能为空。
  • 在 PVA 后端,卷积核权重被限制为 |weight|<1
[输入]border如何处理图像边界外的像素。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTinputoutput 为 NULL。
VPI_ERROR_INVALID_ARGUMENTkernelXDatakernelYData 为 NULL。
VPI_ERROR_INVALID_ARGUMENTkernelXSizekernelYSize 超出有效范围。
VPI_ERROR_INVALID_ARGUMENTkernelData 中的某些权重超出有效范围。
VPI_ERROR_INVALID_ARGUMENTinputoutput 图像尺寸超出有效范围。
VPI_ERROR_INVALID_ARGUMENT不支持 border
VPI_ERROR_INVALID_ARGUMENTinputoutput 图像尺寸和格式不匹配。
VPI_ERROR_INVALID_ARGUMENTbackend 无效或未知。
VPI_ERROR_INVALID_IMAGE_FORMAT不支持 inputoutput 格式
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持可分离卷积算法。
VPI_ERROR_INVALID_OPERATION后端硬件不可用。
VPI_ERROR_INVALID_OPERATION所需的后端未在 streaminputoutput 中启用。
VPI_SUCCESS操作成功执行。