仿真

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

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

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

  • 仿真源,以及

  • 仿真探针。

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

[注意] 注意

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

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

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

尽管如此,只要仿真源包含至少一张 2D 图像(参见 ‘图像协议、图像尺寸和数据结构’),您同样可以对仿真源所连接的链路为 0D(像素流)、1D(行流)或 2D(帧流)的情况进行仿真。

局限性

仿真具有以下局限性:

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

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

  • 算子 PseudoRandomNumberGen 在仿真中返回的结果与在硬件上的结果不一致。这是因为该算子是非确定性的。此异常情况也在算子参考手册中进行了说明。

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

支持的图像格式

对于源图像以及保存输出图像,VisualApplets 中的仿真支持以下图像格式:

Bitmap

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

BMP 8 位灰度

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

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

TIFF (Tagged Image File Format) / TIF

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

TIFF 8 位灰度

TIFF 24 位彩色 sRGB 色彩空间

TIFF 48 位彩色 sRGB 色彩空间

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

JPEG / JPG
PNG

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

仿真工作流

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

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

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

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

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

  5. 评估仿真结果。

  6. 保存仿真结果。

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

在设计中插入 Source 和 Probe

要准备仿真,必须先将仿真源和仿真探针插入您的设计中:

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

创建新的仿真源和仿真探针

图 85. 创建新的仿真源和仿真探针


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

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

图 86. 仿真源为灰色图像帧,仿真探针为绿色图像帧


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

  2. 使用拖放操作定位源和探针。

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

[Caution] 将仿真源和仿真探针连接到传输 Kernel 或信号的链接

您可以将仿真源连接到传输 Kernel 的链接,但仿真源必须为每个 Kernel 提供且仅提供一个输入图像。您可以将仿真 probe 连接到传输信号的链接,但此时该仿真探针不会提供任何数据。

将图像文件加载到仿真 Source

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

在这里,您可以调整模拟设置,例如输入像素合并的值,或者定义像素对齐的偏移量。

Display Properties

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

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

像素值

图 89. Pixel Values


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

您可以通过使用工具栏中的相应图标来放大和缩小显示通道中显示的图像,也可以使用CTRL+鼠标滚轮向上放大,使用CTRL+鼠标滚轮向下缩小。

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

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

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

Zooming in the Magnifier

图 90. Zooming in the Magnifier


如果您想要更改 Magnifier 的缩放倍数:

  1. 激活 Tools → Magnifier 窗口。

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

如果您选择非常高的缩放倍数,将显示像素网格以便于更好地定位。

将图像加载到 Source 中

要将 Test Images 或测试图像序列加载到您的源中,

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

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

[注意] 注意

您可以在以下路径的 VisualApplets 安装文件夹中找到一些实用的 Test Images: \Testimages.

[提示] 提示

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

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

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

源中的缩略图显示

图 91. 源中的缩略图显示


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

用于仿真的高亮图像部分

图 92. 用于仿真的高亮图像部分


[Caution] 转换您的图像

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

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

一旦您将新图像加载到源中,该图像就会显示在 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 中,您会看到一个表格,左侧是当前图像(从文件加载时)的图像尺寸,右侧是 link 的图像尺寸:

图像尺寸

图 96. 图像尺寸


Merged Pixels 列在 'Pixel Spitting and Merging' 中进行了说明。

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

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

超出的图像尺寸

图 97. 超出的图像尺寸


[提示] 提示

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

图像文件映射

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

图像和链路的 Bit Widths

图 98. 图像和链路的 Bit Widths


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. 显示对齐


Pixel Spitting and Merging

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

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

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

若要将具有高 Bit Width 并已存储为 BMP 或 TIFF 文件的图像加载到您的仿真源中,您必须将相邻像素(它们共享原先一个像素的颜色信息)合并回一个像素。因此,仿真源查看器可以合并像素拆分图像以进行正确的映射。拆分操作可以在 Simulation Probe Viewer (看 “评估仿真结果”)中进行。您可以在 Simulation Source Viewer 选项卡 Image File – Mapping:

中定义像素合并设置

图 103. 像素合并


在以下示例中,一个 2048x1024 BMP file with a bit width (color depth) of 8 bit has been loaded into the source. It is to be interpreted as a 16 bit 1024x1024 image.

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

合并前:

合并因子 = 1,图像属性与链路属性不匹配

图 104. 合并因子 = 1,图像属性与链路属性不匹配


合并后:

合并因子 = 2,合并后的图像属性与链路属性匹配

图 105. 合并因子 = 2,合并后的图像属性与链路属性匹配


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

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

[Caution] 使用 Simulation Probes

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

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

    随后将打开 Simulation 窗口:

    仿真窗口

    图 106. 仿真窗口


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

    在窗口的下半部分窗格中,您可以看到设计规则检查 1(Design Rules Check 1)的结果。

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

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

    • 所有源 (All Sources) 和 所有探针 (All Probes) 显示您设计中的所有数据源和数据目的地。

    更改源和探针显示

    图 107. 更改源和探针显示


[Caution] 错误和警告的影响

只有在设计规则检查 1 期间未检测到错误时,才能启动仿真。设计规则检查 1 生成的警告不会阻止启动仿真。

[注意] 注意

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

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

未连接的仿真模块

图 108. 未连接的仿真模块


[注意] 注意

相机算子在仿真过程中不发出数据。需要将仿真源连接到输出链路,以提供仿真数据。

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

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

仿真设置

图 109. 仿真设置


取消选中 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) 将被锁定。

在 仿真 (Simulation) 视图中选择所需的 处理周期 (Processing Cycles) 数量后,可以通过单击 开始 (Start) 按钮来运行仿真。由于保留了所有操作的内部状态,只要保持仿真对话框打开,就可以从同一窗口启动连续运行。关闭对话框后,所有算子都将重置为其初始化状态。

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

第二步模拟

图 110. 第二步模拟


在模拟对话框保持打开状态的同时,可以执行一个额外的(第三个)模拟周期,该周期反过来会在连接的模拟探测器处提供数据。

第三步模拟

图 111. 第三步模拟


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

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

在一个新的处理周期中,始终处理加载到源的图像序列中的下一个图像。当序列中的所有图像都已处理完毕后,将再次处理序列中的第一图像。

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

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

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

重置会产生以下效果:

  • 所有模拟源中的图像序列都会被重置,也就是说,新的模拟将再次从该序列的第一张图像开始。

  • 所有探测器的内容都将被删除。

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

现在,您已准备好开始对设计中定义的数据处理进行模拟。

  1. 点击 Start 开始模拟。

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

[提示] 提示

如果您愿意,可以在模拟过程中保持模拟模块的 Viewer 窗口打开。但是,这会减慢模拟速度。

模拟成功

图 112. 模拟成功


在模拟进行的同时,模拟探测器模块会填充结果图像。模拟结果的缩略图显示在预览图像框中。打开模拟探测器的模拟 Viewer 窗口后,结果将以完整尺寸显示。

[注意] 自动模拟重置

当您更改设计时,模拟将自动重置。重置时,所有模拟探测器也将被清除。

评估仿真结果

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

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

当仿真探针包含非常大的图像时,由于Memory限制,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 的相同像素上。

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

像素值探针

图 113. 像素值探针


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

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

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

  • 此外,您可以定义一个Scaling因子,该因子会与这些值相乘。这对于执行辐射度到角度等线性转换非常有用。

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

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

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

图像序列

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

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

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

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

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

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

Varying Row Length

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

此类图像的图像大小由 VisualApplets 计算如下:

[提示] 计算具有不同行长度的图像的图像大小

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

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

未定义图像区域的显示

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


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

空图像符号

图 115. 空图像符号


显示对齐

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

  • 如果您激活 Link View,则图像将以通过链路传递给探针时的外观显示。

  • 如果您激活 File View,则图像将以使用当前设置将其保存到文件时的外观显示。

由于显示器总是为每个颜色通道使用 8 bit,因此无法直接显示具有更高或更低 Bit Width 的图像。

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

Link View

图 116. Link View


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

如果图像的 Bit Width 小于 8 bit,测试图像的灰度值会自动映射到 8 位显示器的 256 个灰度值。这种映射不会改变显示的灰度级数,但会增强它们之间的对比度。如果没有这种映射,人眼可能根本无法看清图像。以 1-bit 图像为例:如果在显示时不进行映射而使用值 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. 保存的文件格式选项


如果您想将 1-bit 模拟结果保存为 8-bit 文件格式,请勾选 Normalize gray values 复选框。此处的 Normalizing 是指将 0 映射为 0(黑色),将 1 映射为 255(白色)。

Pixel Alignment

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

如果图像的 Bit Width 小于文件格式的 Bit Width,您可以使用滑块更改像素对齐偏移量。通过这种方式,您可以将模拟结果的 bits 保存到(较大)文件格式像素内的特定位置。例如,将 12-bit link 的 bits 保存到 16-bit 的最低 12 位或最高 12 位 TIFF 图像中。

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

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

Pixel Splitting

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

例如,如果您想在 8-bit BMP 文件中保存 16-bit 模拟结果,请将 Split 1 Pixel into

设置为 2 个像素。现在,图像的 16-bit 像素被拆分为两个 8-bit 像素。

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


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

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

拆分图像的重新转换

保存

[重要] 重要提示

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

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

  1. 从主菜单中选择 File → Save。

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

  3. 点击 Save。

[提示] 保存图像序列

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

常见问题

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

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

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

A: 您可能没有模拟足够的仿真周期。请增加周期数。此外,您的算法可能未生成任何输出图像。请查看算子参考中的相应算子限制。另外,连接到信号链路的仿真探针绝不会显示输出数据。

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

A: 每次修改设计时,仿真探针可能会被清空。对设计的微小更改(例如移动模块或修改不影响当前端口的算子内部参数)不会导致此情况。如果更改改变了设计的拓扑结构,或者参数更改通过链路传播到了连接的算子,探针则会失效。