Skip to main content

渐进加载体积

体积视口交错解码

由于对于体积视口,我们主要处理实际体积的重建视图(MPR)的渲染,理想的情况是尽快获取体积的初始图像(即使是有损的),以避免渲染出灰色体积。我们可以通过交错请求来实现这一点。

图像的交错适用于任何体积编码。 也就是说,首先获取每第 N 张图像可以显示 1/N 频率的图像。 然后,交错代码仅复制缺失位置的图像,以在纵向方向生成低分辨率图像。

然后,这种交错可以与任何有损图像的离散获取结合使用——即以非流式解码方式获取图像,一次性返回整个请求。

性能

在体积视口上使用渐进加载的性能提升因数据大小和 DICOMweb 服务器组件的能力而有很大差异。

请注意,所有时间均不包括加载解码器的时间,仅在首次渲染时看到。这些时间对于两种类型来说是相似的。

类型大小网络首次渲染完成时间
HTJ2K 流式传输33 M4g2503 ms8817 ms
HTJ2K 字节范围33 M4g1002 ms8813 ms

HTJ2K 字节范围的速度略慢于直接的 JLS,但可以在任何支持 HTJ2K 和字节范围请求的 DICOMweb 服务器上进行。

  • 4g 速度 - 下载 30 mbit/s,上行 5 mbit/s,延迟 10 ms
  • 全尺寸图像为 512x512x174
  • 降低分辨率的图像为 128x128,经过有损压缩

HTJ2K 流式传输

请注意,这个阶段模型将通过队列的选择和请求的优先级在不同视口之间交错各种阶段的请求。交错并不完美,因为它交错的是阶段而不是单个请求,但在不需要复杂逻辑在体积之间工作的情况下,外观效果相当不错。

正如在高级检索配置中了解到的,我们可以利用 decimateoffset 和不同的优先级来实现交错。

抽取是以 F 偏移量选择每第 N 张图像,描述为 N/F,例如 4/3 是位置 3,7,11,... 这是通过按顺序检索以下阶段来完成的:

  • 初始图像 - 位置 0、50%、100% 的图像
  • 使用 multipleFast 检索类型的 4/3 抽取图像
    • 完成后以低分辨率显示完整体积
  • 使用 multipleFast 检索类型的 4/1 抽取图像
    • 以两倍分辨率更新初始体积
  • 使用 multipleFinal 的 4/2 和 4/0 抽取图像
    • 用全分辨率图像替换复制的图像
  • 使用 multipleFinal 的 4/3 和 4/1 抽取图像
    • 用全分辨率图像复制低分辨率图像

配置如下:

  stages: [
{
id: 'initialImages',
// positions 选择特定位置 - 中间图像、第一张和最后一张
positions: [0.5, 0, -1],
// 为这些使用默认的渲染类型,这应该检索全分辨率
retrieveType: 'default',
// 使用交互队列
requestType: RequestType.INTERACTION,
// 优先级 10,首先执行
priority: 10,
// 从这些数据填充附近的帧
nearbyFrames: {....},
},
{
id: 'quarterThumb',
decimate: 4,
offset: 3,
retrieveType: 'multipleFast',
priority: 9,
nearbyFrames,
},
... 其他版本
// 用最终数据替换第一批数据
{
id: 'finalFull',
decimate: 4,
offset: 3,
priority: 4,
retrieveType: 'multipleFinal',
},
],
  1. 以全分辨率获取最初显示的图像(第一张和最后一张)
  2. 首先获取每第 4 张图像的 initialByteRange 字节
  • 获取字节范围 [0,64000]
  • 立即显示部分分辨率版本
  • 使用部分分辨率版本显示附近的切片
  1. 其他步骤
  • 此处有其他部分和全分辨率视图来填充数据
  1. 获取第 2 步的剩余数据(不重新获取原始数据)
  • 用全数据替换第 2 步的低分辨率数据

HTJ2K 字节范围

体积渐进加载扩展了基本堆栈加载,具备交错各种图像的能力,从降低分辨率的版本在图像内和图像间进行插值。也就是说,单个图像可能最初以 1/4 尺寸(CT 为 256x256)获取,然后仅显示最初显示的图像和每第 4 张图像,其他图像通过插值生成。在这种情况下,使用复制插值以最小化插值开销。最后,在获取有损的初始版本后,获取剩余的图像。

默认的检索顺序如下,其中 Decimate 描述为包含图像之间的间隔以及该组中的偏移量。

  • 初始图像,全分辨率
  • 4/3 抽取,部分分辨率
    • 插值图像 -2...+1(最近邻)
  • 4/1 抽取,部分分辨率
  • 4/2 抽取,全分辨率
  • 4/4 抽取,全分辨率
  • 4/3 抽取,全分辨率
  • 4/1 抽取,全分辨率

如果未配置部分分辨率,则执行相同的排序,除了最后两个阶段不会运行,因为部分分辨率已经加载了这些。这确实允许结果的插值非常快速地显示出来。