算子 ImageBufferSpatial

操作员Library: Memory

硬件平台的可用性
请注意,此算子仅适用于 microEnable 4 系列的目标平台(包括 Pixelplant)。

该算子计算其颜色分量的 Spatial Correction。 此外,还包含一个感兴趣区 (ROI) 功能。 总比特数(Bit Width x Parallelism)不得超过相应采集卡的 Memory 限制。

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

有关运算符延迟的信息,请参阅表 46,“库内存中运算符的各个延迟” 。

该算子的核心功能是校正三线线阵彩色相机的空间偏移。 对于红色、绿色和蓝色这三个颜色分量,可以使用参数 DeltaRed、DeltaGreen 和 DeltaBlue 定义相对偏移。 偏移是指输入图像与结果输出图像之间的行延迟。 偏移量为 0 时,输入图像保持不变。 例如,如果 DeltaRed = 0、DeltaGreen = 1 且 DeltaBlue = 2,则输出图像的第一行包含以下 分量: 红色分量从第一幅输入图像行读取,绿色分量从第二幅输入图像行读取,蓝色 分量从第三幅输入图像行读取。 若要将读出方向从正向切换为反向,只需更改参数:DeltaRed = 2、DeltaGreen = 1 且 DeltaBlue = 0。 Delta 偏移可以是负数、0 或正数。

该缓冲区在内部将 delta 值转换为相对 delta。 该转换实现了以下公式:

其中 delta 是 DeltaRed、DeltaGreen 或 DeltaBlue。 此转换在内部执行。 算子的 delta 参数保持不变并显示指定的值。 转换为相对 delta 会导致一个 delta 偏移变为 0,另外两个变为 0 或负数, 例如配置 [DeltaRed = 1, DeltaGreen = 2, DeltaBlue = 1] 等效于 [DeltaRed = -1, DeltaGreen = 0, DeltaBlue = -1]。 配置 [DeltaRed = -3, DeltaGreen = -3, DeltaBlue = -3] 和 [DeltaRed = 1, DeltaGreen = 1, DeltaBlue = 1] 两者都 等效于 [DeltaRed = 0, DeltaGreen = 0, DeltaBlue = 0]。 诸如 [DeltaRed = 1, DeltaGreen = 1, DeltaBlue = 1] 的配置表示使用配置 [DeltaRed = 0, DeltaGreen = 0, DeltaBlue = 0] 执行 Spatial Correction 并裁剪掉第一行。 由于该算子仅支持相对 delta 偏移,因此裁剪第一行的操作将不由该算子执行。 然而,通过使用 CoordinateY 和 RemoveLine 等 VA 算子,在算子外部实现裁剪相对比较容易。

对于每一读出,算子都会提供一个与输出链路 O 同步的 line ID 标记。 line ID 是一个全局标记,可用于检测由于缓冲区溢出而丢失行的情况。 当发生溢出时,缓冲区将丢弃输入行,直到解除溢出条件(即 RAM 拥有足够 容纳至少 1 个 RoI 行的存储空间)。 连续 2 行之间的差值减 1 即为缓冲区溢出导致的丢失行数。

该算子将持续校正空间偏移——这是许多线阵应用的典型需求。 然而,当采集开始时,缓冲区需要至少一定数量的行才能输出校正后的行。 当未达到此阈值时,不输出任何行。 缓冲区仅输出已校正的行。 不需要输出校正第 1 个图像行所需的启动行。 阈值取决于指定的 delta 偏移,例如 DeltaRed = 0、DeltaGreen = 1、DeltaBlue = -3 需要 5 行来执行校正。 因此阈值为 5。 在第 5 行之后,缓冲区开始输出行。 换句话说,缓冲区一旦能够校正行就开始输出它们。

在幅面校正应用(VALT_IMAGE2D 输入)中,Spatial Correction 将对每一幅面单独执行, 即对于每个幅面,Spatial Correction 都会重新开始。

缓冲区输出的第一行始终拥有 line ID 0。 在 2D 应用模式下,第 1 个幅面行的 line ID 与前一个幅面的最后一行之间将存在间隙。 间隙大小等于为该第 1 个输出行执行校正所需的行数。 无法校正的行将被缓冲区抑制。

使用参数 XOffset 和 XLength 可以定义 ROI 大小。 如果 XLength 不能被链路 Parallelism 整除,算子将插入虚拟像素以填满最后一个并行字, 例如,链路 Parallelism 为 2,XOffset 为 0 且 XLength 为 7,算子将输出 4 个并行字,每个字包含 2 个像素。 最后一个字将包含一个虚拟像素。 该虚拟像素的值未定义。 在 VA 模拟中,为了更好的可视性,虚拟像素将被设为零。 XOffset 和 XLength 参数的总和不得超过最大链路图像宽度。 如果输入图像宽度小于 x 偏移与 x 长度的总和,算子仍将读取参数化的 x 长度。 在这种情况下,算子将向超出部分的像素输出未定义的 Memory 内容。

为了测量缓冲区的 Fill 级别,算子提供 2 个参数: FillLevel 和 Overflow。FillLevel 以 25% 为步长显示 RAM 的百分比 Fill 级别。 当 FillLevel 接近或达到 100% 且下一个要存储在缓冲区中的图像将超过 RAM 容量时,Overflow 参数设置为 1。 如果发生溢出,输入数据将被丢弃,输入图像高度会减小。 因此,不完整的图像会被存储在 Memory 中。 用户必须轮询溢出参数。 由于溢出状态持续时间可能非常短,它可能会发生在算子的轮询周期之间。

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

算子限制

  • 不支持空帧。

    不支持线条长度不一的图像。

带宽优化

穿过使用 Frame Grabber RAM (DRAM) 的算子的理论带宽 [位/秒] 计算公式如下:

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

当 Bit Width 和 Parallelism 的乘积等于内部 RAM 端口宽度(RAM Port Width)时,穿过算子的 最大带宽 达到峰值。

[注意] 平台特定值

RAM 端口宽度和系统时钟因平台而异。 有关您的各个平台的详细信息,请参见 Device Resources。

I/O Properties

财产 值
操作员类型 M
Input Link I,图像数据输入
输出链接 O,数据输入
LinkID,数据输入

Supported Link Format

链接参数 输入链路 I 输出链路 O 输出链路 LinkID
Bit Width [3, 63] 无符号,[6, 63] 有符号1 as I auto
Arithmetic {unsigned, signed} as I 未签名
Parallelism 任何2 as I as I
内核列 1 as I as I
内核行 1 as I as I
图像协议 {VALT_IMAGE2D, VALT_LINE1D} as I as I
Color Format VAF_COLOR as I VAF_GRAY
颜色口味 FL_RGB as I FL_NONE
Max. Img Width 任何 as I as I
Max. Img Height 任何 as I as I

1 2

bit width 与 parallelism 的乘积不得超过原生 ram 数据宽度。 请检查 Device Resources 以了解更多信息。

参数

XOffset
键入 动态/静态读/写参数
默认 0
范围 [0, Max.Img Width - XLength]

此参数定义 ROI 左上角的 x 坐标。

XLength
键入 动态/静态读/写参数
默认 1024
范围 [1, Max.Img Width - XOffset]

此参数用于定义 ROI 的宽度。

DeltaRed
键入 动态/静态读/写参数
默认 0
范围 任何

此参数定义红色分量的偏移。 delta 可以是正整数或负整数值。

DeltaGreen
键入 动态/静态读/写参数
默认 0
范围 任何

此参数定义绿色分量的偏移。 delta 可以是正整数或负整数值。

DeltaBlue
键入 动态/静态读/写参数
默认 0
范围 任何

此参数定义蓝色分量的偏移。 delta 可以是正整数或负整数值。

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

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

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

该参数表示缓冲区溢出。

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

该参数激活对相机等无限源运算符的支持。 有关更多信息,请参阅 '无限源 / 连接相机'。