Operator Library: Memory
该算子将图像流缓冲在 Frame Grabber RAM (DRAM) 中。 需要一个类型为 RAM 的 VisualApplets 资源。请查看 'Allocation of Device Resources' 了解更多信息。 该算子还支持兴趣区 (ROI)。 总比特数(Bit Width 乘以 Parallelism)不得超过相应图像采集卡的内存限制。
有关 operator 延迟的信息,请参见 Table 46, 'Individual Latencies of the Operators in Library Memory'。
该算子的工作方式类似于 FIFO。 任何输入数据都会立即转发到输出端。 但是,如果输出被阻塞(例如,因为后续算子无法处理输入带宽),算子将存储数据。 因此,只有在算子无法输出数据时才会填充 memory。 该算子通常用于补偿峰值输入带宽。
在内部,图像缓冲区按图像行进行操作。 这种内部行缓冲区特性可实现非常短的 Memory 延迟。 当然,如果缓冲区填充了更多的行,延迟就会增加。 例如,传输到 Memory 中的图像将立即转发到输出端。 在应用中,部分相机图像可以在相机仍在传输剩余图像行时转发到 PC。
您可以使用参数 XOffset、XLength、 YOffset 和 YLength 来定义 ROI 大小。 如果输入图像宽度小于 XOffset 和 XLength 的总和,算子仍会读取参数化的 XLength。 在这种情况下,算子将为额外的像素输出未定义的 memory 内容。 如果输入图像高度小于请求的输出图像高度,算子将仅输出可用行。
在 Line1D 应用模式下,YOffset 和 YLength 设置不影响缓冲区。
为了测量缓冲区的 Fill Level,该算子提供了 2 个参数: FillLevel 和 Overflow。 FillLevel 以 25% 的步长显示 RAM 的 Fill Level。 当 FillLevel 接近或等于 100% 且下一个要存储在缓冲区中的图像将超出 RAM 容量时,Overflow 参数设置为 1。 如果发生溢出,输入数据将被丢弃,输入图像高度会减小。 因此,不完整的图像会被存储在 memory 中。 用户必须轮询 overflow 参数。 由于溢出状态持续时间可能非常短,它可能会在算子的轮询周期内发生。
参数 InfiniteSource 用于指定算子是直接连接到相机还是与其他 memory 算子串联。 请查看 'Infinite Sources / Connecting Cameras' 了解更多信息。
算子限制
-
不支持空帧。
![]() |
可用内存空间 |
|---|---|
|
该算子需要额外的 memory 空间来存储内部数据。因此,并非所用 RAM 资源的全部数量都可以用于缓冲图像数据。 实际可用于缓冲图像数据的空间取决于硬件平台(Platform RAM Size 和 Platform RAM Interface Width)以及链路配置。 有关 Platform RAM Size 和 Platform RAM Interface Width 的信息,请参见 Device Resources。) 您可以使用以下公式计算 RAM 资源的可用容量:
公式中使用的缩写和计量单位:
|
流经使用 采集卡 RAM (DRAM) 的算子的理论带宽 [bits/second] 根据以下公式计算:

然而,由于 DRAM 效率的限制,实际带宽总是小于理论带宽。
当 Bit Width 和 Parallelism 的乘积等于内部 RAM Port Width 时,通过算子的 maximum bandwidth 将达到最大值。
![]() |
平台特定值 |
|---|---|
|
RAM Port Width 和 System Clock 是平台相关的。 请参阅 Device Resources 以获取有关您各个平台的详细信息。 |
|
对于无符号输入,输入 Bit Width 的范围是 [1, 64]。 对于有符号输入,范围是 [2, 64]。 对于无符号彩色输入,范围是 [3, 63],对于有符号彩色输入,范围是 [6, 63]。 |
|
|
Bit Width 与 Parallelism 的乘积不得超过本机 RAM 数据宽度。 请查看 Device Resources 了解更多信息。 |
| XOffset | |
|---|---|
| 键入 | 动态/静态读/写参数 |
| 默认 | 0 |
| 范围 | [0, Max.Img Width - XLength] |
|
该参数定义 ROI 左上角的 x 坐标。 步长为 Parallelism。 |
|
| XLength | |
|---|---|
| 键入 | 动态/静态读/写参数 |
| 默认 | 1024 |
| 范围 | [2*parallelism, Max.Img Width - XOffset] |
|
该参数定义了 ROI 的宽度。 步长为 Parallelism。 |
|
| YOffset | |
|---|---|
| 键入 | 动态/静态读/写参数 |
| 默认 | 0 |
| 范围 | [0, Max.Img Height - YLength] |
|
该参数定义 ROI 左上角的 y 坐标。 |
|
| YLength | |
|---|---|
| 键入 | 动态/静态读/写参数 |
| 默认 | 1024 |
| 范围 | [1, Max.Img Height - YOffset] |
|
该参数定义了 ROI 的高度。 |
|
| FillLevel | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 0 |
| 范围 | [0%, 100%] |
|
该参数以 25% 的步长提供 DRAM 的 Fill 级别。 |
|
| Overflow | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 0 |
| 范围 | [0, 1] |
|
此参数表示发生缓冲区溢出。 |
|
| InfiniteSource | |
|---|---|
| 键入 | static 参数 |
| 默认 | ENABLED |
| 范围 | {ENABLED, DISABLED} |
|
此参数激活对无限源 operators(如相机 operators)的支持。 请参阅 'Infinite Sources / Connecting Cameras' 了解更多信息。 |
|
以下示例展示了 ImageBuffer 算子的使用方法:
-
使用入门
-
图 29,“简单的 VisualApplets Design”
基本原则 - 了解 VisualApplets 的设计理念
-
数据流 - 了解 VisualApplets 中使用的流水线结构
-
Synchronization 规则 - 在 O-type Network 中使用该 operator。
-
'Infinite Sources / Connecting Cameras'
Infinite Sources - 将算子连接到相机。(DRC2 Latency Error)
-
设计参数化
-
设计参数化 - 禁用参数
-
设计参数化 - 非法参数值
-
了解算子设备资源的分配。
-
基本指南 基本采集 - ImageBuffer operator 处的非法条件
-
Example - Histogram thresholding
-
示例 - 展示了运算符 Blob_Analysis_1D 在线扫描应用中的用法。
-
示例 - 将斑点分析运算符应用于输入的相机图像。 该小程序展示了斑点数据在小程序中的用法。 在这种情况下,将定位面积最大的对象,并使用其坐标从原始图像中裁剪出该对象。
-
“使用算子 JPEG_Encoder 进行 JPEG 压缩”
示例 - 展示算子 JPEG_Encoder 用法的简单示例。
-
示例 - 展示用于彩色 JPEG 压缩的 JPEG 用户库元素用法的简单示例。
-
示例 - 展示针对 microEnable 4 和 5 平台已弃用的 JPEG_Encoder_Gray 算子用法的简单示例。
-
示例 - 测量图像尺寸,并可用于分析设计流程。
-
示例 - 当由发生器提供图像时序时,可以分析设计的数据流。
-
示例 - 出于调试目的,可以手动插入图像。
-
Examples - 计算连续两幅图像之间的差值。 对这些差值进行阈值处理,并经由 DMA 通道输出。
-
示例 - 说明如何为线扫描相机实现滤波器。
-
示例 - 一个 High Speed 且稳健的激光线检测算法。 该算法可确定重心坐标,从而获得亚像素分辨率的结果。
-
'A rolling average is applied on a dynamic number of images'
Examples - Rolling Average - Loop

![[注意]](../common/images/admon/note.png)



上一页

