Operator ImageBufferMultiRoIDyn

Operator Library: Memory

此算子支持为每个缓冲图像提供多个动态感兴趣区 (ROI)。 ROI 坐标使用附加的输入连接进行定义。

有关 operator 延迟的信息,请参见 Table 46, 'Individual Latencies of the Operators in Library Memory'。

所有 ROI 会作为单独的图像依次读取: ROI 0、ROI 1、ROI 2,依此类推,直到 ROI N-1。 N 是允许的最大 ROI 数量。 只要不超过帧尺寸,所有可能的矩形区域均受支持, 即单个像素、单行、单列、矩形区域或整帧均可定义为 ROI。 不同的 ROI 不需要具有相同的尺寸。 每个 ROI 都可以单独定义。 ROI 之间可以重叠。 违反最大图像尺寸的 ROI 会被算子过滤掉,即系统会将其跳过。 此外,所有非法的 ROI 也会被跳过,例如高度或宽度为负数的 ROI。

算子将图像流缓冲在 Frame Grabber RAM (DRAM) 中。 需要一个类型为 RAM 的 VisualApplets 资源(请参见 'Allocation of Device Resources')。

ROI 坐标通过包含 ROI 坐标的图像在单独的算子输入连接上提供。 这些图像中的每个像素都被算子视为一组有效的 ROI 坐标。 因此,ROI 输入图像的大小决定了 ROI 的数量。 对于输入连接 I 处的每个输入图像,都需要一组新的 ROI 坐标图像。 ROI 输入由 4 个坐标输入连接组成。 即分别对应 ROI 左上角 X 和 Y 坐标的连接,以及对应 ROI 右下角 X 和 Y 坐标的连接。

请注意,系统会对 ROI X 坐标进行转换,以满足其 Parallelism 定义的输入连接 I 的 x 粒度,即 算子 ImageBufferMultiRoIDyn 只能按 Parallelism 的粒度裁剪线条。 坐标 XTopLeft 必须是并行字中第一个分量的索引。 坐标 XBottomRight 必须是并行字中最后一个像素的索引。

让我们通过一个示例来解释算子的行为: 假设输入连接 I 的 Parallelism 为 4。 因此 XTopLeft 必须为:0、4、8、12,... XBottomRight 必须为 3、7、11、15,... 如果坐标不符合这些约束条件,系统会对其进行向下取整 (XTopLeft) 或向上取整 (XBottomRight)。 例如,如果 ROI x 坐标为 3 和 7,则 ROI 的第一列是输入图像的第 3 列,最后一列是第 7 列。 算子将 XTopLeft 向下取整为 0;XBottomRight 保持 7 不变;因此,宽度变为 8。 ROI 的高度与 Parallelism 无关,因此可以是任何合法的值。

[注意] 公式:

XTopLeft* = floor(XTopLeft / Parallelism) * Parallelism

XBottomRight* = ceil((XBottomRight + 1) / Parallelism) * Parallelism - 1

[注意] 示例:

当输入连接 I 的 Parallelism 为 4 时:

  • 112 到 551 变为 112 到 551。因此宽度变为 = 551 + 1 - 112 = 440
  • 101 到 540 变为 100 到 543。因此宽度变为 = 543 + 1 - 100 = 444

所有 4 个 ROI 输入彼此同步,即这些连接上的图像必须具有相同的尺寸并同时同步提供。 当它们由通过任意 O 型模块网络连接的同一个 M 类型模块提供源时,情况始终如此。 有关更多信息,请参见同步规则('M-type Operators with Multiple Inputs')。 ROI 坐标与输入连接 I 异步。

一旦图像和所有 ROI 坐标完全传输到缓冲区中,算子就会开始读取 ROI。 在实践中,可以从输入图像计算和确定 ROI 坐标,但这并非必需。 例如,用户也可以使用 CreateBlankImage 算子来生成 ROI 坐标。

当 ROI 图像为空(即不包含任何像素)时,算子将在其输出端提供一个空图像。 空图像不包含任何像素。如果任何 ROI 非法,算子将为该 ROI 提供一个空图像。

ImageBufferMultiRoIDyn 对由输入连接最大图像宽度和高度参数定义的固定大小图像进行操作。 这意味着由算子执行输入帧尺寸控制。

小于最大图像尺寸的图像将在不经修改的情况下进行缓冲。 但是,ROI 的读取将在可能的最大图像尺寸的帧上执行。 缺失的帧像素包含随机数据,在后续处理中应被视为未定义。

超出最大帧高度或最大帧宽度的图像将被裁剪至最大帧尺寸,并以此状态进行缓冲。 ROI 的读取将再次基于最大尺寸的帧进行。

当发生溢出(即由于缓冲区已满而无法存储更多图像)时, 所有传入的图像都将被丢弃,直到缓冲区中有足够的可用空间来存储至少一个帧。 发生溢出的原因可能多种多样,但所有这些原因都会导致与写入相比读取操作执行得太慢。 这可能是因为定义了太多 ROI,或者是因为后续处理管线引起的阻塞条件, 又或者是由于输入图像流过快。 在设计平衡的正常情况下,绝不会发生溢出。

为了测量缓冲区的填充水平,算子提供了 2 个寄存器: FillLevel 和 Overflow。 FillLevel 显示 RAM 的百分比填充水平。 当 FillLevel 接近或达到 100% 并且要存储在缓冲区中的下一个图像将超出 RAM 容量时,Overflow 参数设置为 1。

一旦对应帧完全缓冲并且在 ROI 输入端接收到当前图像的所有 ROI 集,算子就会在其输出端提供 ROI 图像。

支持的最大 ROI 数量由 XTopLeft 输入连接的最大图像宽度和高度设置的乘积决定。 允许的最大 ROI 数量为 2E20-1。 ROI 坐标的缓冲需要 FPGA-internal block RAM。 因此,ROI 的数量受可用的 FPGA-internal block RAM 限制。

参数 InfiniteSource 用于指定算子是直接连接到相机还是与其它 Memory 算子串联。 请检查 'Infinite Sources / Connecting Cameras' 了解更多信息。

算子限制

  • 不支持输入连接 I 上的空帧或空行。

  • 完全支持端口 I 上具有不同行长的图像。

  • 完全支持 ROI 端口上的空帧或空行。

  • 完全支持 ROI 端口上具有不同行长的图像。

[注意] ImageBufferMultiRoiDyn 不适用于 imaFlex CXP-12 Quad 和 imaFlex CXP-12 Penta 平台

ImageBufferMultiRoiDyn 在 imaFlex CXP-12 Quad 和 imaFlex CXP-12 Penta 平台上不受支持,但您可以转而使用适用于 imaFlex CXP-12 Quad 和 imaFlex CXP-12 Penta 平台的等效用户库元素。有关如何使用用户库元素的说明,请参阅 ‘Delivered User Libraries’。

带宽优化

流经使用 采集卡 RAM (DRAM) 的算子的理论带宽 [bits/second] 根据以下公式计算:

然而,由于 DRAM 效率的限制,实际带宽总是小于理论带宽。

当 Bit Width 和 Parallelism 的乘积等于内部 RAM Port Width 时,通过算子的 maximum bandwidth 将达到最大值。

[注意] 平台特定值

RAM Port Width 和 System Clock 是平台相关的。 请参阅 Device Resources 以获取有关您各个平台的详细信息。

I/O Property

Property 值
Operator Type M
输入链路 I,图像数据输入
XTopLeft,坐标数据输入
YTopLeft,坐标数据输入
XBottomRight,坐标数据输入
YBottomRight,坐标数据输入
Output Link O,数据输入

同步和异步输入

  • 这 4 个 ROI 输入彼此同步。
  • ROI 输入与输入 I 异步。

Supported Link Format

Link Parameter Input Link I 输入链接 XTopLeft 输入链接 YTopLeft 输入链接 XBottomRight 输入链接 YBottomRight Output Link O
Bit Width [1, 64]12 auto3 auto4 auto3 auto4 as I
Arithmetic {unsigned, signed} unsigned unsigned unsigned unsigned as I
Parallelism 2^N,其中 N ={0,1,2...}2 1 1 1 1 as I
Kernel Columns 1 1 1 1 1 as I
Kernel Rows 1 1 1 1 1 as I
Img Protocol VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D as I
Color Format any VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY as I
Color Flavor any FL_NONE FL_NONE FL_NONE FL_NONE as I
Max. Img Width any5 2^20-16 同 XTopLeft 同 XTopLeft 同 XTopLeft as I
Max. Img Height any5 2^20-16 同 XTopLeft 同 XTopLeft 同 XTopLeft as I

1

对于无符号输入,输入 Bit Width 的范围是 [1, 64]。 对于有符号输入,范围是 [2, 64]。 对于无符号彩色输入,范围是 [3, 63],对于有符号彩色输入,范围是 [6, 63]。

2

Bit Width 与 Parallelism 的乘积不得超过原生 RAM 数据宽度 (RamDataWidth)。 请检查 Device Resources 以了解详情。

3

Bit Width 为

4

Bit Width 为

5

最大图像尺寸不得超过可用 RAM 的大小: 2^RamAddressWidth >= (I.Max.Img.Width * I.Max.Img.Height) / I.Parallelism

6

ROI 图像的最大像素数(因此也是每张图像的最大 ROI 数)不得超过 2^20-1: 2^20 > XTopLeft.Max.Img.Width * XTopLeft.Max.Img.Height

参数

RamDataWidth
键入 静态写参数
默认 不适用
范围 整型数字

此参数提供可在 RAM 接口处使用的数据位数。它是输入和输出的最大位数。

RamAddressWidth
键入 静态写参数
默认 不适用
范围 整型数字

此参数提供可用的地址位数。这有助于计算允许的最大图像尺寸。

FillLevel
键入 动态只读参数
默认 0
范围 [0%, 100%]

该参数以 25% 的步长提供 DRAM 的 Fill 级别。

Overflow
键入 动态只读参数
默认 0
范围 [0, 1]

此参数表示发生缓冲区溢出。

InfiniteSource
键入 static 参数
默认 ENABLED
范围 {ENABLED, DISABLED}

此参数激活对无限源 operators(如相机 operators)的支持。 请参阅 'Infinite Sources / Connecting Cameras' 了解更多信息。

使用示例

以下示例展示了算子 ImageBufferMultiRoIDyn 的使用方法: