Operator SYNC

运算符 Library: Synchronization

算子 SYNC 用于对所有输入链路进行时间和图像尺寸同步。 需要同步的链路数量在实例化算子时指定。 所有输出链路上的输出图像是同步的,即它们在同一 时间输出且具有相同的图像尺寸。 因此,该算子将异步链路进行同步,使其变为 O 同步(O-synchronous) 状态,并可用于 O 类型的 VisualApplets 算子网络中。

该算子不支持空行或空帧。

在进行混合域同步(如 2D 与 1D 和 0D 流同步)时, 算子会将输出链路转换为最高的输入域。 使用 SYNC 将 2D 链路与 1D 链路同步时,两个输出链路都将设置为 2D 格式。 如果 1D 链路提供的行数不足,则会发出错误提示。 使用该算子将 1D 链路与 0D 链路同步时,所有输出链路都将采用 1D 格式。 在这种情况下,如果 0D 链路提供的像素不足,则会发出错误提示。

对于输入图像尺寸不同的情况,算子会同步图像,以确保所有输出图像 具有相同的大小。

[提示] 同步规则

在使用 SYNC 算子之前,请确保您了解所有同步规则。 用户手册以及“基础与示例”(Basics and Examples)详细解释了同步规则,请参阅:

以下将对时序同步和图像尺寸同步进行详细说明。

时序同步

在像素传输过程中,由于流控制或链路带宽超过图像源的带宽, 可能会出现暂停。 上图展示了如何对 2 条链路执行时间同步。两个输入链路具有不同的时序。 然而,输出链路数据是同步的,即像素在所有链路上同时输出。

该算子对所有输入链路起到了阀门的作用: 在所有输入端都出现有效像素之前,输入链路保持关闭状态。 随后,算子会将所有输入的像素转发到输出端,即打开阀门。

图像维度同步

SYNC 算子能够使用不同的图像协议 VALT_IMAGE2D、VALT_LINE1D 或 VALT_PIXEL0D 来同步图像。 以下三张图展示了不同图像协议的一些图像。

  • 2D

    2D 图像具有有限的高度 H 和有限的宽度 W。 图中所示的第一张图像是常规 2D 图像。第二张图像是不规则 2D 图像,具有不同的行长度。

  • 1D

    1D 线条具有有限的宽度 W,但高度无限。 此类类型的图像通常在线扫描应用中创建。 同样,图中所示的第二张图像具有不同的行长度。

  • 0D

    0D 流不具有任何宽度或高度。这些流是无限的数据流。

如果输入链路上的图像具有不同的图像尺寸(即不同的宽度或行长度以及不同的高度), 则应用图像尺寸同步。 图像尺寸同步可确保输出端的所有图像具有相同的尺寸。 SYNC 算子支持两种同步模式:同步到最小图像 (SyncToMin) 和同步到最大图像 (SyncToMax)。 您可以通过参数 SyncMode 选择同步模式。 SyncToMin 模式会裁剪较大的图像以适应最小的图像。 SyncToMax 模式会扩展较小的图像以适应最大的图像。 缺失的像素将用虚拟零像素(黑色像素)填充。 将这两种模式与三种不同的图像域结合使用,可以得出以下基础同步组合:

2D 到 2D SyncToMin

2D 到 2D SyncToMax

填充像素为零像素。

1D 到 1D SyncToMin

1D 到 1D SyncToMax

填充像素为零像素。

0D 到 0D SyncToMin / SyncToMax

由于 0D 图像没有图像尺寸,因此 0D 图像之间的同步属于纯时间同步。

2D 到 1D SyncToMin

针对 2D 到 1D 图像的 SyncToMin 同步执行宽度的图像尺寸同步。 输出图像保留输入 2D 图像的图像高度。1D 线条流被分割成与 2D 图像具有相同高度的图像。

2D 到 1D SyncToMax

针对 2D 到 1D 图像的 SyncToMax 同步执行宽度的图像尺寸同步。 输出图像保留输入 2D 图像的图像高度。1D 线条流被分割成与 2D 图像具有相同高度的图像。

2D 到 0D SyncToMin / SyncToMax

由于 0D 数据流没有形状,因此 2D 到 0D 的同步只是对两条链路的简单旁路。 当然,SYNC 算子仍会执行时序同步。 对于该组合,SyncToMin 和 SyncToMax 操作没有区别。

1D 到 0D SyncToMin / SyncToMax

由于 0D 数据流没有形状,因此 1D 到 0D 的同步只是对两条链路的简单旁路。 当然,SYNC 算子仍会执行时序同步。 对于该组合,SyncToMin and SyncToMax 操作没有区别。

2D 到 1D 到 0D SyncToMin / SyncToMax

此操作是 2D 到 1D、2D 到 0D 以及 1D 到 0D 操作的组合。 2D 图像和 1D 线条流在行长度上进行同步。 1D 链路必须提供至少包含 2D 图像的行数。 此外,0D 链路必须提供至少由 2D 到 1D 同步结果所产生的像素数量。 如果这两个条件都得到满足,算子将输出结果。

[Caution] 注意

警告:模拟混合操作模式(如从 2D 到 1D、1D 到 0D 或这三者的任意组合)需要满足以下条件:

  1. 高度无限但宽度有限的链路(即 1D 链路)必须包含参与同步的所有 2D 通道的最大 (SyncToMax) / 最小 (SyncToMin) 行数。

  2. 宽度和高度无限的链路(即 0D 链路)必须提供所有 2D 到 2D 以及 2D 到 1D 操作结果所能产生的最大(SyncToMax)/ 最小(SyncToMin)像素量。

  3. 除非满足特定条件,否则无法对混合域同步的图像序列进行模拟,因为无限行不可能包含行序列,否则它将不再是无限的。高度也是如此。如果高度是有限的,它就不是 1D 链路,而是 2D 链路。为了在所有链路上模拟图像序列,0D 通道上的像素量必须与 2D 到 1D 同步后的像素量完全相同。1D 通道上的行数必须与 2D 到 1D 同步后的结果完全相同。超出此范围的行(1D)或像素(0D)不会延续到下一个图像序列中。

有关不同图像协议的更多信息,请参见 'Image Protocols, Image Dimensions and Data Structure'。

I/O Property

Property 值
Operator Type M
输入链路 I[0],数据输入
I[k],数据输入
Output Link O[k],数据输出

Supported Link Format

Link Parameter 输入链路 I[0] 输入链路 I[k] 输出链路 O[k]
Bit Width [1, 64]1 [1, 64]2 同 I[k]
Arithmetic {unsigned, signed} {unsigned, signed} 同 I[k]
Parallelism any 同 I[0] 同 I[0]
Kernel Columns any any 同 I[k]
Kernel Rows any any 同 I[k]
Img Protocol {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} auto3
Color Format any any 同 I[k]
Color Flavor any any 同 I[k]
Max. Img Width any any auto4
Max. Img Height any any auto5

1 2

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

3

如果至少有一个输入的图像协议是 VALT_IMAGE2D,则输出图像协议为 VALT_IMAGE2D;如果至少有一个输入的图像协议是 VALT_LINE1D,则输出图像协议为 VALT_LINE1D;如果所有输入的图像协议都是 VALT_PIXEL0D,则输出图像协议为 VALT_PIXEL0D。

4

如果参数 SyncMode 为 SyncToMin,则最大输出图像宽度为输入最大图像宽度中的最小值。如果该参数设置为 SyncToMax,则最大输出图像宽度为输入最大图像宽度中的最大值。

5

如果参数 SyncMode 为 SyncToMin,则最大输出图像高度为输入最大图像高度中的最小值。如果该参数设置为 SyncToMax,则最大输出图像高度为输入最大图像高度中的最大值。

同步和异步输入

  • 所有输入相互异步,即它们可能通过由 O 型算子组成的任意网络由不同的 M 型算子提供来源。

参数

SyncMode
键入 static 参数
默认 SyncToMin
范围 {SyncToMin, SyncToMax}

该参数指定了运行模式:在 SyncToMin 模式下,算子会将所有输入图像同步到最小的图像,即裁剪较大的图像。在 SyncToMax 模式下,算子会将所有较小的图像扩展到最大的图像。参见上文说明。

使用示例

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