仿真

VisualApplets 提供了强大且实用的仿真功能,用于模拟设计。 您可以使用仿真对已实现的图像处理算法进行初步测试和验证。 您可以在编辑完设计后直接启动仿真,而无需生成 *.hap 文件。

VisualApplets 中的仿真属于功能仿真,即它会模拟硬件实现的行为什么。 与底层仿真相比,这使得它的速度非常快。 功能仿真带来的一个副作用是它不考虑时序。 算子的仿真行为与真实硬件上最终 applet 的图像处理完全一致(100% 相同)。

为了在 VisualApplets 中模拟设计的行为,提供了两种仿真元素:

  • 仿真源(simulation sources),以及

  • 仿真探针(simulation probes)。

仿真源用于数据输入。您可以将单张图像或整个图像序列加载到仿真源中(从图像文件)。 您可以将一个仿真源或一个仿真探针放置在设计中的任何链路(link)上。 因此,沿这些链路传输的数据将被连接的源模块覆盖,或者由相应的探针模块进行检查。

[注意] 注意

某些算子也可以充当图像源,例如算子 CreateBlankImage。

您可以将仿真探针生成的图像保存到图像文件中。

出于可视化优化的目的,VisualApplets 仿真基于 2D 图像。

尽管如此,只要仿真源包含至少一个 2D 图像(参见 'Image Protocols, Image Dimensions and Data Structure'),您同样可以进行仿真,即使仿真源所连接的链路是 0D(像素流)、1D(行流)或 2D(帧流)。

限制

仿真具有以下限制:

  • 无法仿真 SIGNAL 图像协议。这是因为 SIGNAL 图像协议的仿真模拟的是功能,而不是设计的时序。 然而,对于 SIGNAL 图像协议的仿真,同样有必要对时序进行仿真。

  • 0D 图像协议的仿真仅限于正好一个仿真步骤。 这是因为为了进行仿真,来自一个源的所有像素数据都被聚合到了单个 2D 帧中。 不过,后续步骤可以针对其余设计进行仿真,但生成 0D 内容的算子在第一步期间只会发出一次数据。

  • 算子 PseudoRandomNumberGen 在仿真中返回的结果与硬件上不一致。 这是因为该算子是非确定性的。 此例外情况也在 Operator Reference 中进行了说明。

  • 算子 Blob Analysis 1D 在仿真中返回的结果与硬件上不一致。 这是因为该算子具有 FlushI 端口,但由于清空(flush)操作相对于图像数据是异步的,因此无法仿真出与硬件完全相同的行为。 此例外情况也在 Operator Reference 中进行了说明。

支持的图像格式

VisualApplets 中的仿真支持以下图像格式,既适用于源图像,也适用于保存输出图像:

位图(Bitmap)

BMP 1 位黑/白(行长度必须是 8 的倍数)

BMP 8 位灰度

BMP 24 位 (R8 G8 B8) sRGB 色彩空间

保存 BMP 文件时不支援 RLE 压缩。

TIFF(标记图像文件格式)/TIF

TIFF 1 位黑/白(行长度必须是 8 的倍数)

TIFF 8 位灰度

TIFF 24 位彩色 sRGB 色彩空间

TIFF 48 位彩色 sRRB 色彩空间

压缩:无、LZW、ZIP/Deflate 或 JPEG

JPEG/JPG
PNG

此外, .raw 为仿真探测器临时生成的文件可以加载到仿真源中。

仿真工作流

在设计中模拟图像数据处理包含以下步骤:

  1. 在设计中插入所需的仿真源和仿真探测器。

  2. 将要用于仿真的图像文件加载到仿真源中。

  3. 通过像素合并和像素对齐等参数优化图像输入。

  4. 在主仿真窗口中设置仿真的处理周期数并启动仿真。

  5. 评估仿真结果。

  6. 保存仿真结果。

以下章节将详细介绍这些步骤。

在设计中插入源和探测器

为准备仿真,您必须首先将仿真源和探测器插入到设计中:

  1. 从主菜单中选择 Analysis → New Simulation Source / New Simulation Probe,或者使用工具栏中的相应图标将源和探测器插入当前设计窗口中。

创建新的仿真源和仿真探测器

图 85:创建新的仿真源和仿真探测器


仿真源和仿真探测器均显示为带有磁性锚点的的小型图像帧:

仿真源为灰色图像帧,仿真探测器为绿色图像帧

图 86:仿真源为灰色图像帧,仿真探测器为绿色图像帧


  1. 使用锚点将源或探测器连接到设计中的 Link。您可以轻松区分仿真源和仿真探测器,因为源为灰色,探测器为绿色。

  2. 使用拖放操作来定位您的源和探测器。

  3. 使用拖放操作将您的源和探测器连接到设计中的 Link。如果锚点图标变为蓝色,则表示连接有效。

[注意] 将仿真源和仿真探测器连接到传输内核或信号的 Link

您可以将仿真源连接到传输内核的 Link,但仿真源需要为每个内核精确提供一个输入图像。您可以将仿真 probe 连接到传输信号的 Link,但该仿真 probe 随后将不提供任何数据。

将图像文件加载到仿真源

Simulation Source Viewer

在 Simulation Source Viewer 中,您可以加载 Test Images 或测试图像序列,并使其可用于仿真。

首先,让我们快速了解一下 Simulation Source Viewer。

  1. 要打开 Simulation Source Viewer,请在您的设计中双击一个源。

Simulation Source Viewer 随即打开:

Simulation Source Viewer

图 87. Simulation Source Viewer


菜单正下方是工具栏。工具栏上的图标提供以下选项(从左到右):

  • 用于打开和保存图像文件的文件工具栏。

  • 提供不同图像显示选项的视图工具栏。这些选项与 View 菜单的前几个选项相同:

    Viewing Options

    图 88. Viewing Options


  • 用于在图像序列中进行导航的箭头。

  • 显示主查看器窗口(和放大镜)显示面板当前可见图像的详细信息:显示图像在加载到模拟器的图像序列中的位置,以及图像文件的路径

左侧是带有两个标签页的设置面板:

Image File – Mapping

在此处,您可以调整模拟设置,例如输入像素合并的值,或定义像素对齐的 offset。

Display Properties

在此处,您可以定义在自己的屏幕上显示 Test Images 的设置。由于显示器总是使用 8 位彩色显示,有时您必须决定要查看像素的哪一部分以便评估 Test Images。您在 Display Properties 下定义的任何设置都不会对模拟或其结果产生影响。

此外,您还可以在此处看到所选像素的颜色值以及显示值。显示值是用于在用户显示器上显示的映射值。

像素值

图 89. Pixel Values


右侧是显示面板,用于显示当前选定的图像。

您可以使用工具栏中的相应图标,或者使用 CTRL+MouseWheelUp 放大以及使用 CTRL+MouseWheelDown 缩小,来放大或缩小显示通道中显示的图像。

如果您选择非常高的缩放系数,将显示像素网格以便于定位,并显示每个像素的十六进制/十进制值。

在模拟查看器的底部,还有一个面板:这就是 Sequence viewer。如果源中使用了多个图像,您可以在此处查看图像序列中的所有图像、更改序列的图像顺序,或者选择要在显示面板和放大镜中显示的图像。

Magnifier 实际上是 Source Viewer 的第二个窗口,您可以通过拖放操作轻松将其从主 Source Viewer 窗口中分离出来。Magnifier 始终显示与主 Source Viewer 显示面板中相同的图像。其指针始终位于 Magnifier 窗口的中心,并准确地定位在您在显示面板中所指向的像素上。Magnifier 窗口的巨大优势在于,您可以使用完全不同的缩放系数来显示图像的一部分:

在放大镜中缩放

图 90. 在放大镜中放大


如果要在 Magnifier 中更改缩放比例:

  1. 激活 Tools → Magnifier 窗口。

  2. 使用 CTRL+MouseWheelUp 放大,并使用 CTRL+MouseWheelDown 缩小。

如果选择非常高的缩放比例,系统将显示像素网格以便于更好地方便观察。

将图像加载到源中

要将测试图像或测试图像序列加载到源中,请执行以下操作:

  1. 通过双击设计中的源,打开 Simulation Source Viewer。

  2. 从 Simulation Source Viewer 的主菜单中,选择 File → Open 或点击工具栏中的相应图标。在随后的对话框中,选择仿真输入图像文件并点击 Open。

[注意] 注意

您可以在以下位置的 VisualApplets 安装文件夹中找到一些实用的测试图像: \Testimages.

[提示] 提示

或者,您也可以简单地将图像文件从 Windows Explorer 拖放到查看器中,或者从 Windows Explorer 拖放到图表中的源上。

此时,输入图像将显示在 Simulation Source Viewer 中。

关闭 Simulation Source Viewer 后,您将在相应源的预览框架中看到图像的缩略图:

源中的缩略图显示

图 91. 源中的缩略图显示


将源连接到链路后,源将立即采用该链路的参数设置(例如最大图像尺寸、Bit Width 和 Color Format)。如果您加载的图像大于链路的最大图像尺寸,图像上将显示一个绿色矩形,框选出将用于仿真的图像部分:

用于仿真的高亮图像区域

图 92. 用于仿真的高亮图像区域


[注意] 转换图像

无法在单通道灰度链路上加载彩色图像,反之亦然。如果您的测试图像不符合源所连接链路的属性,则需要转换该图像。请使用提供必要功能的任何图像处理程序来转换您的测试图像。请使用 VisualApplets 支持的图像格式。有关支持的图像格式的信息,请参见 'Supported Image Formats'。

将图像序列加载到仿真源中

一旦将新图像加载到源中,该图像就会显示在 Simulation Source Viewer 的显示面板中,并被添加至源的图像序列中。您可以在位于 Simulation Source Viewer 底部的 Sequence Viewer 中查看图像序列中的所有图像。

只有显示在显示通道中的选定图像才会存储在计算机的 RAM 中。序列中的其他图像将在需要时加载到 RAM 中。因此,将长图像序列加载到源中几乎不会对 RAM 使用率产生影响。

加载图像序列后,您可以在加载后更改图像的顺序。在 Sequence Viewer 中,使用拖放操作将图像放置到序列中的所需位置。

您可以轻松删除序列中的一个或多个图像:

  1. 按住 CTRL 并选择要删除的图像。

  2. 按 DEL 或从菜单中选择 Edit → Remove Selected。

在 Sequence Viewer 中,sim[x] 表示在下一个仿真步骤中正在进行姆拟的图像。您可以在 Simulation 对话框中点击 Reset 按钮,将 sim[x] 重置为序列的第一张图像。如果您想了解有关仿真步骤和重置的更多信息,请参阅 'Setting the Number of Processing Cycles and Starting the Simulation'。仿真顺序不受显示面板当前显示的图像的影响。

sim[x] 指示序列中正在进行姆拟的图像

图 93. sim[x] 指示序列中正在进行姆拟的图像


如果您通过映射更改图像 Property(参见 'Image File Mapping '),缩略图不会自动刷新。默认情况下,Sequence Viewer 显示原始图像的缩略图。

您有两种方法调整缩略图显示。从菜单中选择以下选项之一

  • View → Mapped Thumbs 以预览应用当前仿真映射设置后图像的外观,或者

  • View → Refresh 以显示反映图像当前外观的缩略图。

通过参数优化图像输入

您现在可以通过参数优化图像输入。所有参数都显示在 Simulation Source Viewer 中。

像素值

实际上,在显示面板的每个像素上都会显示两个十字光标。如果您看不到这两个十字光标,请放大显示面板中的图像:

显示窗口和放大镜中的十字光标

图 94. 显示窗口和放大镜中的十字光标


白色/黑色十字光标显示鼠标光标的位置。

彩色的十字光标位于鼠标光标指向的像素中心。该十字光标也会精确显示在 Magnifier 的相同像素上。

在设置面板标签页 Display Properties 中将显示相应的像素值:

像素值

图 95. 像素值


您可以选择是将像素值显示为无符号十进制、有符号十进制还是十六进制数字。

Display 显示屏幕上呈现的值。如果向源加载了 16 位或 48 位图像,此值可能与实际颜色值(或灰度值)不同,因为屏幕上每个颜色通道只能显示 8 位。

图像尺寸

在 Simulation Source Viewer 标签页 Image File – Mapping 中,左侧是当前图像(从文件加载时)的图像尺寸表格,右侧是链接的图像尺寸:

图像尺寸

图 96. 图像尺寸


关于 Merged Pixels 列的说明,请参见 'Pixel Spitting and Merging'。

如果图像文件的尺寸小于链接的尺寸,则图像将以 1:1 的比例传输到链接上。

如果图像文件的尺寸超过了链接的尺寸,则仅使用图片的一部分进行仿真。您可以在显示面板的绿色矩形中看到将用于姆拟的图片部分。此外,相应的值会以黄色高亮显示:

超出的图像尺寸

图 97. 超出的图像尺寸


[提示] 提示

如果在显示屏中看不到绿色矩形,请将查看选项设置为 View → Fit to Window。

图像文件映射

在 Simulation Source Viewer 选项卡的 Image File – Mapping 中,您还可以找到关于测试图像(文件)Bit Width 以及源所连接的链路 Bit Width 的信息:

图像与链路的 Bit Width

图 98. 图像与链路的 Bit Width


关于 Merged Pixels 列的说明,请参见 'Pixel Spitting and Merging'。

如果要加载 Bit Width 高于链路的图像,您可以选择要用于模拟的图像位。您可以通过滑块进行选择:

定义要使用的图像位的偏移量

图 99. 定义要使用的图像位的偏移量


选择滑块的 Bit Width 与链路的 Bit Width 相同。使用滑块,您可以为偏移量定义新位置。偏移量是您在图像 Bit Width 上进行位选择的起点。根据这些设置,Simulation Source Viewer 会立即计算出修改后的图像并将其显示在显示面板中。在上面的屏幕截图中,从 8 位图像的 8 位中选择了高 4 位。因此,用于模拟的测试图像将只有 16 个灰度值,而不是 256 个。

[注意] 在 Simulation Source Viewer 中可视化修改后的测试图像

由于 PC 显示器上的显示基于每个像素 8 位的信息,因此只有 16 个灰度值的图像无法正确显示。因此,为了在屏幕上进行可视化,测试图像的 16 个灰度值被映射到 8 位显示器的 256 个灰度值。这种映射不会改变显示的灰度级数量(16),但会增强它们之间的对比度(0 = 黑色,15 = 白色)。

4 位图像的显示属性

图 100. 4 位图像的显示属性


相反,如果您加载的图像的 Bit Width 小于其加载到的链路(即源模块连接到的链路),您可以使用 Image File – Mapping 选项卡中的同一个滑块,在链路的 Bit Width 上为图像的位定义一个偏移量。链路的其余位设置为 NULL。

下图显示了一个示例,其中将 8 位灰度图像加载到了 Bit Width 为 12 位的链路上:

定义要使用的链路位的偏移量

图 101. 定义要使用的链路位的偏移量


显示对齐

您可以通过显示对齐方式在 Simulation Source Viewer 中为可视化修改后的测试图像定义一些设置:

如果链路的 Bit Width 大于 8 位,则必须定义要在显示面板中显示链路 Bit Width 中的哪 8 位。由于 PC 显示器上的显示每个颜色通道限制为 8 位,因此无法显示更高的 Bit Width。

在 Simulation Source Viewer 选项卡 Display properties 中,您可以定义要在显示面板中显示链路中的哪 8 位。使用滑块选择可显示 8 位的偏移量。此显示对齐设置对模拟没有影响。

在下面的示例中,链路的 Bit Width 为 12 位。使用滑块,您可以决定要显示 12 位中的哪几位。

显示对齐

图 102. 显示对齐


像素拆分与合并

即: BMP 文件格式允许像素的每个颜色通道最多有 8 位。 TIFF 格式允许每个颜色通道最多 16 位。更高的 Bit Width 无法简单地保存在标准图像文件格式中。

VisualApplets 提供了像素拆分功能来规避这些限制。

为了以标准图像文件格式存储具有高像素 Bit Width 的图像,每个像素被拆分为多个图像文件像素。因此,每个颜色通道最多可以存储 BMP 或 TIFF 文件格式,例如 8 x 8-bit 像素。这些图像可以在常规图像文件查看器或图像处理程序中查看。当然,由 VisualApplets 生成的像素拆分图像会以水平扩展的方式显示。因此,在 VisualApplets 中,像素拆分只是针对具有高 Bit Width(色深)的图像的一种存储选项。

要将以 BMP 或 TIFF 文件形式存储的高 Bit Width 图像加载到您的仿真源中,您必须将共享一个原始像素色彩信息的相邻像素重新合并为一个像素。这样,仿真源查看器就可以合并像素拆分图像以进行正确的映射。拆分操作可以在 Simulation Probe Viewer (请参阅 “评估仿真结果”)中进行。您可以在 Simulation Source Viewer 选项卡 Image File – Mapping:

Pixel Merge

图 103. Pixel Merge


在以下示例中,已将一个 Bit Width(色深)为 8 bit 的 2048x1024 BMP 文件加载到源中。它将被解释为 16 bit 的 1024x1024 图像。

如果您在 Merge N pixel into 1 pixel 字段中输入 2,则源中图像的 Bit Width 将从每个颜色通道 8 bit 更改为 16 bit,而源中图像的行长度将缩短一半,从而从 2048 像素变为 1024 像素。

合并前:

Merging Factor = 1, Image Properties Do Not Fit Link Properties

图 104. Merging Factor = 1, Image Properties Do Not Fit Link Properties


合并后:

Merging Factor = 2, Properties of Merged Image Fit Link Properties

图 105. Merging Factor = 2, Properties of Merged Image Fit Link Properties


设置处理循环次数并启动仿真

将测试图像或测试图像序列加载到源中并定义了图像的所有设置后,即可启动仿真。

[注意] 使用仿真探针

确保在要检查图像处理结果的所有位置插入(并连接)了仿真探针(请参阅 “在设计中插入源和探针”)。

  1. 从主菜单中选择 分析 → Start Simulation,或点击工具栏图标 Start Simulation。 现在,VisualApplets 会自动触发设计规则检查 1 (Design Rules Check 1)。

    Simulation 窗口已打开:

    Simulation Window

    图 106. Simulation Window


    在上方窗格中,列出了当前设计中处于活动状态的所有仿真源和仿真探针。该列表仅供参考。

    在窗口的下方窗格中,您将看到 Design Rules Check 1 的结果。

    您可以通过下拉列表框更改列表的显示方式:

    • Simulation Sources 和 Simulation Probes 仅显示您为仿真设置的源和探针。

    • All Sources 和 All Probes 显示设计中的所有数据源和数据目的地。

    更改源和探针显示

    图 107. 更改源和探针显示


[注意] 错误和注意事项的影响

只有在 Design Rules Check 1 期间未检测到错误时,才能启动仿真。Design Rules Check 1 生成的警告不会阻止启动仿真。

[注意] 注意

无法选择单个算子进行仿真。仿真总是会遍历设计的所有算子。

如果主仿真窗口中的列表显示带有黄色警告三角形标记的仿真源或探针,则表示该源/探针未连接到设计的链路上,将在仿真过程中被忽略。

未连接的仿真模块

图 108. 未连接的仿真模块


[注意] 注意

相机算子在仿真期间不发射数据。需要将仿真源连接到输出链路以为仿真提供数据。

在 Processing Cycle 字段中,您可以指定希望程序执行的处理周期数。

您还可以通过 System Settings 菜单配置仿真和处理周期:Settings → System Settings → Simulation:

仿真设置

图 109. Simulation Settings


未勾选 Simulate data flow synchronization:设计中的每个源(例如仿真源以及诸如 CreateBlankImage 或 CoefficientBuffer 的算子)每个周期发射一个数据集。当没有更多数据需要处理或传输时,周期结束。简化的数据管理允许算子偏离硬件中相应实体的行为。这意味着,算子可能不会将传入的数据存储在输入端口内部,而是实现不切实际的巨大内部缓冲区。

勾选 Simulate data flow synchronization:整个设计在每个周期内从源到宿(sink)进行一次仿真。重点是对依赖关系进行精确建模以及进行准确的数据管理。允许源每个周期提供一个或多个数据集。如果先前生成的数据仍待处理,仿真可能会阻止源发射数据。因此,算子将传入的数据保留在输入端口中,直到数据处理需要收集它为止。只要有效数据存储在传入端口中,就会阻止上游算子产生数据。这会导致拥塞,对应于硬件中的禁止(inhibit)概念,并允许检测死锁。

Simulate 1D line by line:可以通过将多行聚合成一个 2D 帧来处理 1D 数据,并像任何其他 2D 数据一样对其进行仿真。这快速且稳定,但将仿真限制为正好一个仿真周期。如果选择 Simulate 1D line by line,则每一行都会被单独处理,从而允许进行多步仿真,例如处理 1D 循环。此功能依赖于数据流同步,这意味着只有在选中 Simulate data flow synchronization 的情况下才能选择此选项。

[注意] 在 Simulate 1D line by line 期间仿真探针的行为

对于连接到 1D 链路的仿真探针,传入的行数据会附加到仿真探针中的最后一帧。在每个处理周期之后,相应的行将完成,并启动一个新帧。在仿真对话框打开时,Sequence Viewer 被锁定。

在 Processing Cycles 视图中选择所需的 Simulation 数量后,点击 Start 按钮即可运行仿真。由于会保留所有操作的内部状态,只要保持仿真对话框打开,就可以在同一个窗口中连续运行。关闭对话框后,所有算子都将重置为其初始化状态。

例如:指定的 AppendImage 算子需要输入三个图像进行拼接。连接的源每处理周期提供一个图像。运行两个周期的仿真后,连接到 AppendImage 输出链路的仿真探针尚不会显示任何数据,因为 AppendImage 仍然缺少一个额外的图像来开始处理。

第二个仿真步骤

图 110. 第二个仿真步骤


在仿真对话框保持打开的状态下,可以执行一个额外的(第三个)仿真周期,从而在连接的仿真探针处提供数据。

第三个仿真步骤

图 111. 第三个仿真步骤


如果在此时关闭并重新打开对话框,则会在初始化设计后执行额外的仿真周期,因此将为 AppendImage 提供所需的三个图像中的第一个。

[注意] 源模块中图像的处理顺序

在新处理周期中,总是处理加载到源的图像序列中的下一个图像。处理完序列中的所有图像后,将再次处理序列中的第一个图像。

如果只向源加载了一个图像,则在每个处理周期中都会反复处理该图像。例如,如果指定四个处理周期,源的单个图像最多将被处理四次。

根据您的设计,输入到设计中的图像数量可能与您作为输出获得的图像数量不同,例如当您使用算子 SplitImage 或 RemoveImage 时。因此,在一个处理周期中,探针中作为结果获得的图像数量可能会比设计中的源模块数量多或少。另请参见 VisualApplets Basics and Examples 中的示例 Multiple DMA Channel Designs 。

要清除仿真并将其重置为启动状态,请使用 Reset 按钮。

重置会产生以下效果:

  • 重置所有仿真源中的图像序列,也就是说,新的仿真将再次从序列的第一幅图像开始。

  • 删除所有探针的内容。

  • 所有算子都重置为其启动状态(例如,图像计数器、输入端口中未收集的数据)。

现在,您可以开始对设计中定义的数据处理进行仿真。

  1. 点击 Start 开始仿真。

Simulation 视图底部的进度条会显示当前的仿真状态。警告和错误会显示在 Log 面板中,您可以通过点击 Show Details/Hide Details 按钮来打开或关闭该面板。一旦发生警告或错误,将自动显示 Log 面板。

[提示] 提示

如果需要,您可以在仿真过程中保持仿真模块的查看器窗口打开。但是,这会减慢仿真速度。

仿真成功

图 112. 仿真成功


在仿真进行期间,仿真探针模块将填充生成的图像。预览图像框中会显示仿真结果的缩略图。打开仿真探针的仿真查看器窗口后,结果将以全尺寸显示。

[注意] 自动仿真重置

当您更改设计时,仿真将自动重置。重置时,所有仿真探针也会被清除。

评估仿真结果

仿真结束后,您可以在探针中找到仿真结果。

[注意] 某些图像未在探针中显示

当仿真探针包含非常大的图像时,由于内存限制,VisualApplets 可能无法正确显示这些图像。 在这种情况下,将显示一个灰色图像(即所有像素的值均为 205 (0xCD))。如果发生这种情况,请在仿真中使用较小的图像。

双击设计中的探针以打开 Simulation Probe Viewer。

它类似于 Simulation Source Viewer(参见 'Loading the Image File(s) to your Simulation Source(s) '): 设置通道位于左侧,显示通道位于右侧,Sequence Viewer 位于 Simulation Probe Viewer 窗口的底部。

在 Simulation Probe Viewer 中,您可以看到显示的仿真结果,以便进行初步评估。您可以通过像素对齐来更改显示选项,并将图像保存到文件。保存时有多种选项可用,例如像素分割。

您可以使用工具栏中的相应图标,或者使用 CTRL+MouseWheelUp 放大以及 CTRL+MouseWheelDown 缩小显示通道中显示的图像。

如果您选择非常高的缩放系数,系统将显示像素网格以便于更好地定位,并以文本形式表示相应的像素值。

像素值

与在 Simulation Source Viewer 中一样,显示面板中每个像素上都会显示两个十字光标。如果您看不到这两个十字光标,请放大显示面板中的图片。白色/黑色十字光标显示鼠标光标当前所在的位置,而彩色十字光标则位于鼠标光标指向的像素中心。该十字光标也会精确显示在Magnifier的同一像素上。

在设置面板中,将显示相应的像素值:

Pixel Values 探针

图 113. Pixel Values 探针


您有多种选项可用于调整所选像素的颜色值解释:

  • 您可以选择将它们显示为十六进制数,还是显示为有符号或无符号十进制数。

  • 您可以为定点数的解释设置小数位数。

  • 此外,您可以定义一个与数值相乘的 Scaling 因子。这对于执行弧度转度等线性转换非常有用。

Display 显示屏幕上显示的值。如果您的探针中包含 16 位或 48 位图像,此/这些值可能与实际颜色值(或灰度值)不同,因为屏幕上每个颜色通道只能显示 8 位。

您可以选择一个在 Display 中的值与图像窗口中显示的颜色之间执行色调映射的色卡。这在处理有符号图像数据或所包含的图像特征在灰度表示中不易看清时特别有用。

如果仿真探针连接到传输内核的链路,则可以在内核面板的内核行和内核列微调框中选择各个内核图像。

图像序列

图像一旦模拟完成,就会立即显示在 Simulation Probe Viewer 中并添加到 Sequence Viewer 中。

您无法更改 Simulation Probe Viewer 中图像的顺序。

但是,您可以删除序列中的一个或多个图像:

  1. 按住 CTRL 并选择要删除的图像。

  2. 按 DEL 或从菜单中选择 Edit → Remove Selected。

如果您通过映射更改图像属性(例如,当您将 16 位图像保存在 BMP 文件中时),缩略图不会自动刷新。默认情况下, Sequence Viewer 显示原始仿真结果的缩略图。

可变行长

VisualApplets 不仅限于处理和显示行长度相同的矩形图像,它还可以显示行长度不同的图像。

VisualApplets 按照以下方式计算此类图像的图像大小:

[提示] 计算行长度不均匀图像的图像大小

图像大小 = 最长行的像素数 * 行数

行长度为 NULL 的行也会被计算在内。图像中未定义的区域在显示中会以蓝到青色的渐变色表示:

未定义图像区域的显示

图 114. 未定义图像区域的显示


空图像显示为符号 Empty Image,且无法保存。

空图像符号

图 115. 空图像符号


显示对齐

Simulation Probe Viewer 的显示面板提供了两种显示同一图像的方式:

  • 如果激活 Link View,图像将显示为通过链路传递给探针时的样子。

  • 如果激活 File View,图像将显示为使用当前设置保存到文件时的样子。

由于显示器始终对每个颜色通道使用 8 bit,因此位宽更高或更低的图像无法直接显示。

如果仿真结果的 Bit Width 高于 8 bit,您可以使用偏移滑块选择要在显示面板中显示的 8 bit:

Link View

图 116. Link View


在此示例中,选择了 16 位灰度图像的高 8 位进行显示。

如果图像的 Bit Width 小于 8 bit,测试图像的灰度值将自动映射到 8 位显示器的 256 个灰度值。这种映射不会改变显示的灰度级数量,但会增强它们之间的对比度。如果没有这种映射,人眼可能根本无法看到图像。例如 1 位图像:如果在显示时不进行映射而直接使用值 0 和 1,人眼都会将其解释为黑色。在这种情况下,VisualApplets 的自动 Bit Width 映射会将 0 解释为 0(黑色),将 1 解释为 255(白色)。

Line Profile

Line Profile 视图显示一行的各个颜色值或灰度值。您可以通过菜单 Tools 打开 Line Profile。

有两个输出区域:

  • Overview:显示整行的各个颜色值或灰度值。

  • Detail:放大在 Overview 视图中标记的区域。当前在 Detail 视图中显示的区域在 Overview 视图中以白色背景突出显示。您可以使用 Detail 视图下方的滚动条来移动在 Detail 视图中显示的区域。

Line Profile 视图

图 117. Line Profile 视图


使用数值框 Line Index,您可以在图像中选择特定的行,该行会在 Display 面板中标记出来。

对于彩色图像,您可以通过复选框 R、G、B 和 Y 来开启或关闭单独的颜色通道。Y 代表亮度。此外,您可以通过数值框 Position X 或青色标记选择行中的特定像素位置。要使用青色标记,只需将鼠标移动到 Detail 视图中。随后,数值将显示在 R、G、B 和 Y 中。

行直方图

Line Histogram 视图用于表示图像中仅选定行的颜色值或灰度值分布情况。您可以通过 Tools 菜单打开 Line Histogram。

Line Histogram 视图

图 118. Line Histogram 视图


直方图视图经过了缩放,使其始终占满图表的全高。

使用数值框 Line Index,您可以在图像中选择特定的行。与 Line Profile 视图一样,该行随后会在 Display 面板中标记出来。

对于彩色图像,您可以通过复选框 R、G、B 和 Y 来开启或关闭单独的颜色通道。Y 代表亮度。此外,您可以通过数值框 Value 或青色标记选择特定的颜色值。要使用青色标记,请将鼠标光标置于输出视图中。

对于更大的色深(例如 16 位图像),数值框 Bin 将显示在数值框 值 的旁边,并且 bin 范围会显示在旁边:

对于选定的 Value 或 Bin 编号,值在相应范围内的像素数量将显示在 Count 中。您可以手动在 Value 或 Bin 中输入数字,或者通过将鼠标指向图表来选择数字。

对于彩色图像,输出结果分为基本颜色值 RGB 和亮度值 Y。

显示统计数据

Line Histogram 视图还会显示针对所选行计算出的以下统计值:

  • Mean 值

  • 标准差 (St. Dev.)

  • Minimal (Min.) 值

  • Maximum (Max.) 值

图像直方图

Image Histogram 视图用于表示图像中颜色值或灰度值的分布情况。您可以通过 Tools 菜单打开 Image Histogram。

Image Histogram 视图

图 119. Image Histogram 视图


直方图视图经过了缩放,使其始终占满图表的全高。

对于彩色图像,您可以通过复选框 R、G、B 和 Y 来开启或关闭单独的颜色通道。Y 代表亮度。此外,您可以通过数值框 Value 或青色标记选择特定的颜色值。要使用青色标记,请将鼠标光标置于输出视图中。

对于更大的色深(例如 16 位图像),数值框 Bin 将显示在数值框 值 的旁边,并且 bin 范围会显示在旁边:

对于选定的 Value 或 Bin 编号,值在相应范围内的像素数量将显示在 Count 中。您可以手动在 Value 或 Bin 中输入数字,或者通过将鼠标指向图表来选择数字。

对于彩色图像,输出结果分为基本颜色值 RGB 和亮度值 Y。

显示统计数据

Image Histogram 视图还会显示针对所选图像计算出的以下统计值:

  • Mean 值

  • 标准差 (St. Dev.)

  • Minimal (Min.) 值

  • Maximum (Max.) 值

保存仿真结果

您可以将仿真结果保存为 TIFF/TIF、BMP、JPEG/JPG 和 PNG 格式的图像文件。其中 TIFF 格式原生支持每个颜色通道 8 位和 16 位,而 BMP 每个通道仅支持 8 位。

在实际将图像保存为 TIFF/TIF 或 BMP 文件之前,您应该在 Save Options 对话框中定义所有保存设置。

  1. 要打开该对话框,请从 Simulation Probe Viewer 的主菜单中选择 File → Save Options。随后,Save Options 面板将在 Simulation Probe Viewer 的右侧打开。

Save Options 对话框

图 120. Save Options 对话框


在 Destination File Format 中,您可以定义要保存图像的格式:

保存的文件格式选项

图 121. 保存的文件格式选项


如果要在 8 位文件格式中保存 1 位仿真结果,请勾选 Normalize gray values 复选框。此处的 Normalizing 是指将 0 映射为 0(黑色),将 1 映射为 255(白色)。

像素对齐

如果图像的 Bit Width(即链路的 Bit Width)与您选择用于保存的文件格式的 Bit Width 相同,则您可以按 1:1 的比例保存图像。

如果图像的 Bit Width 小于文件格式的 Bit Width,您可以使用滑块更改像素对齐偏移量。这样,您可以将仿真结果的位数保存在文件格式(较大)像素内的特定位置。例如,将 12 位链路的位数保存到 16 位图像的最低 12 位或最高 12 位中 TIFF 。

如果图像的 Bit Width 大于文件格式的 Bit Width,您可以使用滑块选择要保存到文件中的图像像素位数以及可以丢弃的位数。

若要预览将要保存到文件的(精简后的)图像:在 Simulation Probe Viewer 的主窗口中,将设置面板顶部的单选按钮设置为 File View。

像素拆分

如果您想使用 VisualApplets 的像素拆分选项,您可以定义将一个像素的颜色信息拆分为多少个像素(另请参见 'Pixel Spitting and Merging')。

例如,如果您想在 8 位文件中保存 16 位仿真结果 BMP , Split 1 Pixel into 设置为 2 个像素。现在,图像的 16 位像素被拆分为两个 8 位像素。

在 Save Options 对话框中设置拆分系数

图 122. 在 Save Options 对话框中设置拆分系数


通过拆分,行长度会加倍、三倍等(具体取决于拆分系数)。在我们的示例中,行长度加倍了。常规的图像显示/处理程序可以显示这些拆分后的图像。但由于它们假定 Bit Width 为 8 位,因此图像显示会在水平方向上拉伸。

[注意] 拆分图像的转换还原

您可以在仿真源中加载拆分后的图像,并通过使用像素合并选项将其重新转换为原始的 Bit Width(请参见 'Pixel Spitting and Merging')。

保存

[重要] 重要提示

当从主菜单中选择 File → Save 时,您在 Save Options 对话框中定义的所有设置都将生效。

要将仿真结果保存到文件,请执行以下操作:

  1. 从主菜单中选择 文件 → 保存。

  2. 定义保存位置和文件名。

  3. 单击 Save。

[提示] 保存图像序列

您还可以保存整个图像序列。要保存图像序列,请在 Simulation Viewer 中选择所有要保存的图像。为此,请按住 CTRL 键并点击这些图像。然后,从主菜单中选择 文件 → 保存。保存的图像将自动编号。

常见问题

问:我将彩色图像转换为灰度图像,并尝试将其加载到仿真源中。但是,VisualApplets 拒绝将该图像加载到单通道连接上。问题出在哪里?

答:该图像仍然使用 3 个通道(饱和度为 0%)来表示颜色信息。只需将您的图像转换为单通道图像即可。

问:我的仿真探针在仿真后不包含任何结果。问题出在哪里?

答:您可能没有模拟足够的仿真周期。请增加周期数。此外,您的算法可能没有生成任何输出图像。请检查算子参考中各自的算子限制。此外,连接到信号连接的仿真探针永远不会显示输出数据。

问:我的仿真探针被自动清除了。为什么?

答:每次修改设计时,仿真探针可能会被清除。对于设计的微小更改(如移动模块或修改不影响当前端口的算子内部参数),这种情况不会发生。对于更改设计拓扑的更改或通过连接传播到所连接算子的参数更改,探针会失效。