VPI - 视觉编程接口

3.2 版本

高斯金字塔生成器

概述

高斯金字塔生成器接受一个输入图像,并用输入图像的降采样版本填充输出图像金字塔。

输入输出

实现

该函数通过从基础层(第 0 层)到更粗糙的层生成高斯金字塔来实现。

如果输入图像实际上封装了图像金字塔的第一层,则此层不执行任何操作。 否则,输入图像内容将被复制到第一个图像金字塔层。

更粗糙的层是通过获取前一层,并使用钳位边界扩展与以下内核进行卷积来生成的

\[ k = \begin{bmatrix} 1 \\ 4 \\ 6 \\ 4 \\ 1 \end{bmatrix} \cdot \begin{bmatrix} 1 & 4 & 6 & 4 & 1 \end{bmatrix} \]

由于仅支持 2 倍降采样,因此结果通过保留所有具有偶数坐标的像素进行二次采样。

该算法重复执行,直到生成所有层。

C API 函数

有关实现该算法的限制、约束和后端的列表,请查阅以下函数的参考文档

函数描述
vpiSubmitGaussianPyramidGenerator 从输入图像计算高斯金字塔。

用法

语言
  1. 导入 VPI 模块
    import vpi
  2. 返回使用 CUDA 后端从输入图像创建的 4 级高斯金字塔。 输入是 VPI 图像,输出是 VPI 金字塔。
    with vpi.Backend.CUDA
    output = input.gaussian_pyramid(4)
  1. 初始化阶段
    1. 包含定义高斯金字塔生成器函数的头文件。
      声明处理高斯金字塔的函数。
    2. 定义输入图像对象。
      VPIImage input = /*...*/;
      struct VPIImageImpl * VPIImage
      图像的句柄。
      Definition: Types.h:256
    3. 使用所需的层数 (4) 和缩放因子 (0.5) 创建输出金字塔。 它从输入图像获取其尺寸和格式。
      int32_t w, h;
      vpiImageGetSize(input, &w, &h);
      vpiImageGetFormat(input, &type);
      VPIPyramid output;
      vpiPyramidCreate(w, h, type, 4, 0.5, 0, &output);
      uint64_t VPIImageFormat
      预定义的图像格式。
      Definition: ImageFormat.h:94
      VPIStatus vpiImageGetFormat(VPIImage img, VPIImageFormat *format)
      获取图像格式。
      VPIStatus vpiImageGetSize(VPIImage img, int32_t *width, int32_t *height)
      以像素为单位获取图像尺寸。
      VPIStatus vpiPyramidCreate(int32_t width, int32_t height, VPIImageFormat fmt, int32_t numLevels, float scale, uint64_t flags, VPIPyramid *pyr)
      使用指定的标志创建空的图像金字塔实例。
      struct VPIPyramidImpl * VPIPyramid
      图像金字塔的句柄。
      Definition: Types.h:262
    4. 创建算法将提交执行的流。
      VPIStream stream;
      vpiStreamCreate(0, &stream);
      struct VPIStreamImpl * VPIStream
      流的句柄。
      Definition: Types.h:250
      VPIStatus vpiStreamCreate(uint64_t flags, VPIStream *stream)
      创建流实例。
  2. 处理阶段
    1. 将算法连同输入图像和输出金字塔提交到流。 它将由 CPU 后端执行。
      VPIStatus vpiSubmitGaussianPyramidGenerator(VPIStream stream, uint64_t backend, VPIImage input, VPIPyramid output, VPIBorderExtension border)
      从输入图像计算高斯金字塔。
      @ VPI_BACKEND_CPU
      CPU 后端。
      Definition: Types.h:92
      @ VPI_BORDER_CLAMP
      边界像素无限重复。
      Definition: Types.h:279
    2. 可选地,等待直到处理完成。
      vpiStreamSync(stream);
      VPIStatus vpiStreamSync(VPIStream stream)
      阻塞调用线程,直到此流队列中的所有已提交命令都完成(队列为空)...
  3. 清理阶段
    1. 释放流、输入图像和输出金字塔所持有的资源。
      void vpiImageDestroy(VPIImage img)
      销毁图像实例。
      void vpiPyramidDestroy(VPIPyramid pyr)
      销毁图像金字塔实例及其拥有的所有资源。
      void vpiStreamDestroy(VPIStream stream)
      销毁流实例并释放所有硬件资源。

有关更多信息,请参阅《VPI - 视觉编程接口》的“C API 参考”部分中的“高斯金字塔生成器”。

性能

有关如何使用下面的性能表的信息,请参阅“算法性能表”。
在比较测量结果之前,请查阅“比较算法运行时间”。
有关如何对性能进行基准测试的更多信息,请参阅“性能基准测试”。

 -