VPI - 视觉编程接口

3.2 版本

快速傅里叶变换

对 2D 图像应用快速傅里叶变换及其逆变换的操作。 更多信息...

函数

VPIStatus vpiCreateFFT (uint64_t backends, int32_t inputWidth, int32_t inputHeight, const VPIImageFormat inFormat, const VPIImageFormat outFormat, VPIPayload *payload)
 为直接快速傅里叶变换算法创建负载 (payload)。 更多信息...
 
VPIStatus vpiSubmitFFT (VPIStream stream, uint64_t backend, VPIPayload payload, VPIImage input, VPIImage output, uint64_t flags)
 对单个图像运行直接快速傅里叶变换。 更多信息...
 
VPIStatus vpiCreateIFFT (uint64_t backends, int32_t outputWidth, int32_t outputHeight, const VPIImageFormat inFormat, const VPIImageFormat outFormat, VPIPayload *payload)
 为逆快速傅里叶变换算法创建负载 (payload)。 更多信息...
 
VPIStatus vpiSubmitIFFT (VPIStream stream, uint64_t backend, VPIPayload payload, VPIImage input, VPIImage output, uint64_t flags)
 对单个图像运行逆快速傅里叶变换。 更多信息...
 

详细描述

对 2D 图像应用快速傅里叶变换及其逆变换的操作。

有关 FFT 的更多详细信息和使用示例,请参阅 FFT

有关 IFFT 的更多详细信息和使用示例,请参阅 逆 FFT

FFT 和逆 FFT 都需要在应用程序初始化阶段创建负载 (payload),其中定义了图像尺寸、输入和输出格式。 然后,只要图像的尺寸和格式与负载 (payload) 创建期间定义的相匹配,该负载 (payload) 就可以用于提交对不同图像的操作。

函数文档

◆ vpiCreateFFT()

VPIStatus vpiCreateFFT ( uint64_t  backends,
int32_t  inputWidth,
int32_t  inputHeight,
const VPIImageFormat  inFormat,
const VPIImageFormat  outFormat,
VPIPayload payload 
)

#include <vpi/algo/FFT.h>

为直接快速傅里叶变换算法创建负载 (payload)。

创建的负载 (payload) 随后可以与 vpiSubmitFFT 一起使用。

注意
为了使此函数成功执行,系统必须安装库 libcufft.so.10。
参数
[输入]backends将执行算法的 VPI 后端。
[输入]inputWidth, inputHeight要使用的输入/输出图像的尺寸。
  • 必须 >= 1x1。
  • 对于 CPU 后端,图像宽度必须为偶数。
[输入]inFormat输入图像格式。
[输入]outFormat输出图像格式。
[输出]payload指向接收创建句柄的负载 (payload) 变量的指针。
返回值
VPI_ERROR_INVALID_ARGUMENTpayload 为 NULL。
VPI_ERROR_INVALID_ARGUMENTinputWidthinputHeight 超出有效范围。
VPI_ERROR_INVALID_ARGUMENTbackend 指的是无效的后端。
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持 FFT 算法。
VPI_ERROR_INVALID_CONTEXT当前上下文已销毁。
VPI_IMAGE_FORMAT_INVALID不支持 outFormat
VPI_ERROR_OUT_OF_MEMORY无法分配所需的资源。
VPI_ERROR_INVALID_OPERATION后端在当前上下文中未启用。
VPI_ERROR_INVALID_OPERATION系统未安装库 libcufft.so.10。
VPI_SUCCESS操作成功执行。

◆ vpiSubmitFFT()

VPIStatus vpiSubmitFFT ( VPIStream  stream,
uint64_t  backend,
VPIPayload  payload,
VPIImage  input,
VPIImage  output,
uint64_t  flags 
)

#include <vpi/algo/FFT.h>

对单个图像运行直接快速傅里叶变换。

参数
[输入]stream操作将排队到其中的流。
  • 不得为 NULL。
  • 流必须已启用将执行算法的后端。
[输入]backend将执行算法的后端。
  • 必须是在负载 (payload) 创建期间指定的后端,或者为 0 以使用此后端作为简写。
[输入]payload使用 vpiCreateFFT 创建的负载 (payload)
[输入]input空间域中的输入图像。
  • 不得为 NULL。
  • 必须具有与负载 (payload) 创建期间指定的格式和尺寸相同的格式和尺寸。
  • 图像必须已启用将执行算法的后端。
  • 当使用 CPU 后端时,输入行必须与 4 字节对齐。
[输出]output将在其中写入频域结果的图像。 输出的左上角像素表示 DC (0 Hz) 分量。
  • 不得为 NULL。
  • 必须具有与负载 (payload) 创建期间指定的格式相同的格式。
  • 图像必须已启用将执行算法的后端。
  • 当使用 CPU 后端时,输出行必须与 4 字节对齐。
  • 输出尺寸取决于输入的格式,如下所示
    输入格式输出大小
    VPI_IMAGE_FORMAT_2F32 W x H
    VPI_IMAGE_FORMAT_F32 floor(W/2)+1 x H
  • 当输入为实数时,输出仅包含完整 Hermitian(对称共轭)的左半部分。
[输入]flags控制标志。
  • 目前必须为 0。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTinputoutput 为 NULL。
VPI_ERROR_INVALID_ARGUMENTpayload 不是使用 vpiCreateFFT 创建的。
VPI_ERROR_INVALID_ARGUMENTinput 图像尺寸和格式与 payload 关联的尺寸和格式不匹配。
VPI_ERROR_INVALID_ARGUMENToutput 图像格式与 payload 关联的格式不匹配。
VPI_ERROR_INVALID_ARGUMENT不支持的 flags
VPI_ERROR_INVALID_ARGUMENToutput 尺寸与输入不一致。
VPI_ERROR_INVALID_PAYLOAD_TYPEpayload 无效。
VPI_ERROR_INVALID_OPERATION所需的后端在 streaminputoutput 中未启用。
VPI_SUCCESS操作成功执行。

◆ vpiCreateIFFT()

VPIStatus vpiCreateIFFT ( uint64_t  backends,
int32_t  outputWidth,
int32_t  outputHeight,
const VPIImageFormat  inFormat,
const VPIImageFormat  outFormat,
VPIPayload payload 
)

#include <vpi/algo/FFT.h>

为逆快速傅里叶变换算法创建负载 (payload)。

创建的负载 (payload) 随后可以与 vpiSubmitIFFT 一起使用。

注意
为了使此函数成功执行,系统必须安装库 libcufft.so.10。
参数
[输入]backends将执行算法的 VPI 后端。
[输入]outputWidth, outputHeight输出图像尺寸。
  • 必须 >= 1。
[输入]inFormat输入图像格式。
[输入]outFormat输出图像格式。
  • 必须具有与负载 (payload) 创建期间指定的格式相同的格式。
  • 对于 CPU 后端,输出宽度必须为偶数。
  • 支持的格式
[输出]payload指向接收创建句柄的负载 (payload) 变量的指针。
返回值
VPI_ERROR_INVALID_ARGUMENTpayload 为 NULL。
VPI_ERROR_INVALID_ARGUMENToutputWidthoutputHeight 超出有效范围。
VPI_ERROR_INVALID_ARGUMENTbackends 指的是无效的后端。
VPI_ERROR_NOT_IMPLEMENTED给定后端不支持 IFFT 算法。
VPI_ERROR_INVALID_CONTEXT当前上下文已销毁。
VPI_IMAGE_FORMAT_INVALID不支持 outFormat
VPI_ERROR_OUT_OF_MEMORY无法分配所需的资源。
VPI_ERROR_INVALID_OPERATION后端在当前上下文中未启用。
VPI_ERROR_INVALID_OPERATION系统未安装库 libcufft.so.10。
VPI_SUCCESS操作成功执行。

◆ vpiSubmitIFFT()

VPIStatus vpiSubmitIFFT ( VPIStream  stream,
uint64_t  backend,
VPIPayload  payload,
VPIImage  input,
VPIImage  output,
uint64_t  flags 
)

#include <vpi/algo/FFT.h>

对单个图像运行逆快速傅里叶变换。

参数
[输入]stream操作将排队到其中的流句柄。
  • 不得为 NULL。
  • 流必须已启用将执行算法的后端。
[输入]backend将执行算法的后端。
  • 必须是在负载 (payload) 创建期间指定的后端,或者为 0 以使用此后端作为简写。
[输入]payload使用 vpiCreateIFFT 创建的负载 (payload)
[输入]input频域中的输入图像。 输入的左上角像素表示 DC (0 Hz) 分量。
  • 不得为 NULL。
  • 必须具有与负载 (payload) 创建期间指定的格式和尺寸相同的格式和尺寸。
  • 图像必须已启用将执行算法的后端。
  • 当使用 CPU 后端时,输入行必须与 4 字节对齐。
  • 当输出为实数时,输入仅包含完整 Hermitian(对称共轭)的左半部分。
  • 输入尺寸取决于输出的格式,如下所示
    输出格式输入大小
    VPI_IMAGE_FORMAT_2F32 W x H
    VPI_IMAGE_FORMAT_F32 floor(W/2)+1 x H
[输出]output将在其中写入空间域结果的图像。
  • 不得为 NULL。
  • 必须具有与负载 (payload) 创建期间指定的格式相同的格式。
  • 图像必须已启用将执行算法的后端。
  • 当使用 CPU 后端时,输出行必须与 4 字节对齐。
[输入]flags控制标志。
  • 有效值是一个或多个以下标志的组合
    • 0 表示默认处理,其中输出已缩放。
    • VPI_DENORMALIZED_OUTPUT : 输出保持非归一化状态。由于通常不需要归一化,这可以加快执行速度。 如果没有此标志,则将缩放输出,将其除以总像素数。 这使得输出与直接快速傅里叶变换完全相反。
返回值
VPI_ERROR_INVALID_ARGUMENTstream 为 NULL。
VPI_ERROR_INVALID_ARGUMENTinputoutput 为 NULL。
VPI_ERROR_INVALID_ARGUMENTpayload 不是使用 vpiCreateIFFT 创建的。
VPI_ERROR_INVALID_ARGUMENTinput 图像尺寸和格式与 payload 关联的尺寸和格式不匹配。
VPI_ERROR_INVALID_ARGUMENToutput 图像格式与 payload 关联的格式不匹配。
VPI_ERROR_INVALID_ARGUMENTflags 包含不支持的标志。
VPI_ERROR_INVALID_ARGUMENToutput 尺寸与输入不一致。
VPI_ERROR_INVALID_PAYLOAD_TYPEpayload 无效。
VPI_ERROR_INVALID_OPERATION所需的后端在 streaminputoutput 中未启用。
VPI_SUCCESS操作成功执行。