3D Slicer:从入门到精通——数据模块之DICOM

news/2024/7/25 2:49:00/文章来源:https://blog.csdn.net/walt3433/article/details/139232454

DICOM


文章目录

  • DICOM
    • 概述
      • DICOM简介
      • Slicer DICOM数据库
      • DICOM插件
    • 如何操作
      • 创建DICOM数据库
      • 将DICOM文件读入场景
        • DICOM导入
        • DICOM加载
      • 从DICOM数据库中删除数据
      • 将数据从场景导出到DICOM数据库
      • 将数据从场景导出到DICOM文件
      • DICOM网络传输
        • DICOMweb网络传输
      • 查看DICOM元数据
    • 面板及其用途
      • 基本用法
    • 故障排除
      • 如何知道我拥有的文件是否使用DICOM格式存储?我如何入门?
      • 当我点击“将选择加载到Slicer”时,收到错误消息“无法将...加载为标量体积”
      • 我尝试导入DICOM文件目录,但浏览器中没有显示任何内容
      • 显示了内容,但不是我预期的
        • 我预期看到不同的图像
        • 图像在一个轴上被拉伸或压缩


概述

该模块允许导入、导出和网络传输DICOM数据。Slicer支持DICOM功能的常用子集,其特定功能由临床研究的需求驱动:从磁盘读取写入数据集,并通过DIMSE和DICOMweb网络协议进行网络传输——查询检索发送接收数据集。

DICOM简介

医学数字成像和通信(DICOM)是信息交换数字放射学的广泛使用标准。在大多数情况下,医院使用的成像设备(CT和MR扫描仪)将生成保存为DICOM对象的图像。

DICOM按以下层次结构组织数据

  • 患者 … 可以有1个或多个
    • 研究(单次成像检查) … 可以有1个或多个
      • 系列(单次图像采集,通常对应于单个图像体积) … 可以有1个或多个
        • 实例(通常,每个系列包含多个实例,每个实例对应图像的单个切片)

成像检查的结果是,成像设备生成DICOM文件,每个文件对应一个实例,并标记有信息以确定系列、研究和患者信息,从而将其放置在层次结构中的正确位置。

标准定义了各种DICOM对象。最常见的对象类型是存储CT和MR扫描仪生成的图像体积的对象。这些对象通常每个系列会有多个文件(实例)。图像处理任务通常涉及分析整个图像体积,通常对应于单个系列。

有关DICOM标准的更多信息:

  • DICOM主页:https://dicom.nema.org/
  • 维基百科上的DICOM:https://en.wikipedia.org/wiki/DICOM
  • 简洁的DICOM标签浏览器:https://dicom.innolitics.com
  • 一个有用的标签查找网站:http://dicomlookup.com/
  • 超链接版本的标准:https://web.archive.org/web/20180624030937/http://dabsoft.ch/dicom/

Slicer DICOM数据库

为了组织数据并允许更快的访问,Slicer保留了一个本地DICOM数据库,其中包含DICOM文件的副本(或链接),以及每个文件内容的基本信息。您可以在计算机上同时拥有多个数据库,并在它们之间切换,例如,如果它们包含不同研究项目的数据。每个数据库只是本地磁盘上的一个目录,其中有一些SQLite文件和子目录来存储图像数据。请勿手动修改这些目录的内容。DICOM数据可以通过文件导入或通过DICOM网络传输进入数据库。Slicer模块也可以使用计算结果填充DICOM数据库。

请注意,DICOM标准没有指定文件在磁盘上的组织方式,因此如果您从CDROM或其他方式从扫描仪传输DICOM数据,通常无法从文件或目录名称中看出内容。然而,一旦数据导入数据库,它将根据DICOM标准的患者/研究/系列层次结构进行组织。

DICOM插件

DICOM模块的主要功能是将采集数据组织映射到体积表示。即,DICOM文件通常描述图像捕获的属性,如CT采集期间表位置的序列,而Slicer在规则间隔的像素图像体积上操作。例如,如果在采集过程中表运动的速度不一致(这种情况在某些对比剂’螺栓追踪’扫描中可能发生),Slicer’s DICOM模块会警告用户采集几何不一致,用户在解释分析结果(如测量)时应谨慎。

这意味着Slicer通常会建议多种解释数据的方法(例如,将DICOM文件读取为扩散数据集或标量体积)。当通过检查文件可计算时,DICOM模块将默认选择最可能的解释选项。到目前为止,标准插件包括标量体积和扩散体积,而扩展可用于分割对象、RT数据和PET/CT数据。预计未来版本会有更多插件。长期目标是能够在DICOM数据对象中表示Slicer的大部分(如果不是全部)数据,因为标准会进化以支持它们。

如何操作

创建DICOM数据库

创建DICOM数据库是所有DICOM操作的前提。当第一次打开DICOM模块时,Slicer会自动创建一个新数据库。选择创建新数据库或打开先前创建的数据库。

您可以随时在DICOM模块面板/ DICOM数据库设置/ 数据库位置中打开其他位置的数据库。

将DICOM文件读入场景

由于DICOM文件通常位于多个文件夹中,它们可以互相引用,并且通常可以以不同的方式解释,因此将DICOM文件读入场景分为两个独立步骤:导入(索引文件以便在DICOM数据库浏览器中显示它们)和加载(在Slicer场景中显示选定的DICOM项)。

DICOM导入
  1. 确保安装了所有必需的Slicer扩展。Slicer核心包含用于导入图像的DICOM导入插件,但其他信息对象可能需要额外的扩展。例如,SlicerRT扩展需要用于导入/导出放射治疗信息对象(RT结构集、剂量、图像、计划)。定量报告扩展需要导入导出DICOM分割对象、结构化报告和参数图。 参见支持的数据格式部分中的完整列表。
  2. 转到DICOM模块
  3. 选择包含DICOM文件的文件夹
    • 选项A:将包含DICOM文件的文件夹拖放到Slicer应用程序窗口。
    • 选项B:单击DICOM浏览器左上角的“导入”按钮。选择包含DICOM文件的文件夹。
      • 导入按钮有一个下拉菜单,可以通过单击右侧的小向下箭头按钮显示。当前菜单中的唯一项是“将导入的文件复制到DICOM数据库”选项。启用此选项以将所有导入的DICOM文件从其原始位置复制到Slicer DICOM数据库。这在从可移动媒体(CD/DVD/USB驱动器或远程驱动器)加载数据时很有用,以便在媒体弹出后仍能加载数据集。如果禁用复制选项,则DICOM数据库中只会存储导入文件的路径(以及最常用的DICOM标签的值)。

:::{note}

将文件夹拖放到Slicer应用程序时,Slicer会显示一个弹出窗口,询问该怎么做——单击确定(“将目录加载到DICOM数据库中”)。导入完成后,转到DICOM模块。

:::

DICOM加载
  1. 转到DICOM模块。如果DICOM数据库窗口尚未显示,请单击“显示DICOM数据库”(显示患者、研究和系列列表)。
  2. 双击要加载的患者、研究或系列。
  3. 单击“显示DICOM数据库”按钮以在数据库浏览器(加载更多数据)和查看器(查看已加载到场景中的内容)之间切换

:::{admonition} 提示

选择的患者/研究/系列可以一次加载,首先选择要加载的项。Shift单击以选择范围,Ctrl单击以选择/取消选择单个项目。如果选择患者或研究列表中的项目,则默认情况下将加载属于该项目的所有系列。单击“加载”按钮加载选定的项目。

:::

高级数据加载:DICOM数据通常可以以不同的方式解释。如果应用程序加载的数据与预期不同,请选中“高级”复选框,单击“检查”按钮,选择底部列表中的所有项目(包含DICOM数据、读取器、警告列),然后单击“加载”。

从DICOM数据库中删除数据

通过右键单击患者、研究或系列,可以从DICOM数据库中删除条目。请注意,为避免意外数据丢失,如果仅将链接添加到数据库,则Slicer不会删除相应的图像数据文件。复制到DICOM数据库的DICOM文件将从数据库中删除。

将数据从场景导出到DICOM数据库

场景中的数据可以导出为DICOM格式,存储在DICOM数据库或导出为DICOM文件:

  1. 确保安装了所有必需的Slicer扩展。Slicer核心包含用于导出图像的DICOM导出插件,但其他信息对象可能需要额外的扩展。
    • SlicerRT扩展需要导入/导出放射治疗信息对象:RT结构集、RT剂量、RT图像、RT计划。
    • 定量报告扩展需要导入/导出DICOM分割对象、结构化报告和参数图。
    • 参见支持的数据格式页面中的完整列表。
  2. 转到数据模块或DICOM模块。
  3. 右键单击数据树中的数据节点,将其转换为DICOM格式。
  4. 在导出对话框的左下角选择导出类型。这是必要的,因为可能有几种DICOM信息对象可以存储相同类型的数据。例如,分割可以存储为DICOM分割对象(现代DICOM)或RT结构集(传统表示,主要用于放射治疗计划)。
    • “Slicer数据包”导出类型通过将场景MRB包封装在DICOM文件中,将整个场景写入DICOM格式。结果是DICOM次要捕获对象,可以存储在任何DICOM存档系统中。此次要捕获信息存储了场景的所有细节,但只有3D Slicer可以解释数据。
    • 导出类型:一旦用户选择了一个节点,DICOM插件会为它们可以导出的系列生成可导出项。结果列表出现在此部分中,按插件分组。置信度数是该插件单个系列的置信度数的平均值。
  5. 可选:编辑将用于导出数据集的DICOM标签。选择研究的元数据将自动填充到导出对话框中,您可以选择要导出的Slicer体积。
    • DICOM标签编辑器由多个表格组成。顶部是患者和研究的常用标签表,下面是各个系列的标签表。
    • 显示表格中的“标签”并不总是直接写入DICOM标签,它们只是供DICOM插件在导出的文件中填写DICOM标签。这提供了更大的灵活性,DICOM插件可以自动填充一些信息,插件可以在此列表中公开其他导出选项(例如压缩、命名约定)。
    • 保存修改的标签:选中此复选框以将新标签值持久保存到场景中。
    • 如何设置唯一标识符标签:
      • StudyInstanceUID标签指定新系列将添加到的患者和研究。如果值设置为空,则会创建一个新研究。建议在同一研究的系列中保持所有患者和研究值(PatientNamePatientIDStudyID等)相同。
      • SeriesInstanceUID标签标识图像系列。默认情况下,其值设置为空,这将导致创建新的UID,从而创建新的系列。在极少数情况下,用户可能希望指定UID,但UID不能是任何现有的UID,因为这会导致导出的图像切片混入另一个系列。因此,仅当UID不用于数据库中已有图像时才接受该UID。
      • FrameOfReferenceUID标签指定空间参考。如果两个图像具有相同的参考框架UID值,则意味着它们在空间上对齐。默认情况下,该值为空,这意味着创建一个新的参考框架UID,因此导出的图像不与任何其他图像相关联。如果一个图像在空间上注册到另一个图像,则建议从另一个图像复制参考框架UID值,因为在某些图像审查软件中,这可能是融合显示图像所必需的。
  6. 单击导出
    • 如果发生任何错误,会显示简短的消息。有关错误的更多详细信息,请参阅应用程序日志。

注意:

  • 要在不将DICOM文件添加到DICOM数据库的情况下创建DICOM文件,请选中“导出到文件夹”选项并选择输出文件夹。
  • 在临床情况下处理这些文件时应格外小心,因为非标准或不正确的DICOM文件可能会干扰临床操作。
  • 要在导出前手动准备DICOM患者和研究,请转到数据模块(主题层次标签),右键单击数据树中的空白区域并选择创建新主题。同样可以在患者下创建新研究。

这个工作流程也在一个2分钟的视频教程中解释。

将数据从场景导出到DICOM文件

存储在数据库中的DICOM数据可以通过右键单击患者/研究/系列列表并选择“导出到文件系统”导出为DICOM文件。

加载到场景中的数据节点可以通过右键单击数据模块中的项目,选择导出为DICOM,启用“导出到文件夹”选项,并指定输出文件夹,直接导出为文件系统中的DICOM文件。

DICOM网络传输

DICOM也是一种网络通信标准,规定了数据在系统之间传输的方式。Slicer提供以下功能:

  • DICOM监听器(C-STORE SCP):接收从远程计算机发送的任何数据并存储在Slicer DICOM数据库中
  • DICOM发送器(C-STORE SCU):从Slicer DICOM数据库中选择数据并将其发送到远程计算机。支持传统的DIMSE和新的DICOMweb协议。
  • 查询/检索(C-FIND SCU,C-FIND SCU):查询远程服务器上可用的图像列表并检索选定的数据。

注意: 要使用这些功能,您必须与您希望通信的其他DICOM节点的操作员协调。例如,您必须就网络端口和应用程序实体标题(AE Titles)等主题达成协议。请注意,并非所有设备都支持所有网络选项,因此配置可能具有挑战性且通常难以排除故障。

连接端口:端口104是标准的DICOM端口。所有低于1024的端口在类Unix系统(Linux和Mac)上需要root访问权限。因此,您可以使用sudo命令运行Slicer以便为DICOM监听器打开端口。或者,您可以使用其他端口,例如11112。您需要在连接的双方进行配置。一次只能有一个进程监听一个端口,因此如果有一个监听器在运行,第二个将无法启动。如果发生异常情况(崩溃),可能会保持端口打开,您需要杀死storescp辅助进程(或只需重新启动计算机)以释放端口。有关诊断信息,请查看错误日志。

DICOMweb网络传输

Slicer支持使用DICOMweb协议将DICOM项发送到远程服务器。在发送数据窗口中,在“目标地址”中设置完整的服务器URL并选择“DICOMweb”协议。

查看DICOM元数据

  1. 转到DICOM模块
  2. 右键单击要检查的DICOM数据库窗口中的项目
  3. 选择“查看DICOM元数据”

面板及其用途

基本用法

  • 导入DICOM文件:将选定文件夹中的所有DICOM文件(包括子文件夹)扫描并添加到Slicer DICOM数据库。如果“导入目录模式”设置为“复制”,则Slicer会将导入的文件复制到数据库文件夹。建议从可移动媒体(CD/DVD/USB驱动器)导入文件时复制数据,以便在媒体弹出后仍能加载数据集。否则,它们只会在其原始位置被引用。
  • 显示DICOM数据库:在DICOM浏览器和查看器(切片视图、3D视图等)之间切换
  • 患者列表:显示数据库中的患者。所选患者的研究列在研究列表中。可以选择多个患者。
  • 研究列表:显示当前选定患者的研究。可以选择多个研究。
  • 系列列表:显示所选研究的系列(图像、结构集、分割、注册对象等)列表。
  • 加载:单击此按钮将当前选定的可加载项加载到Slicer中。
  • 已加载数据:显示当前加载到场景中的所有内容,可以通过单击眼睛图标在查看器中显示

其他选项:

  • 搜索框:可以通过在这些字段中输入内容来过滤每个患者/研究/系列。
  • 右键菜单项在患者/研究/系列列表中:
    • **查看DICOM元数据:**查看选定系列文件头中存储的元数据
    • **删除:**从数据库中删除选定项。如果数据集已复制到DICOM数据库中,则DICOM文件也会被删除。
    • **导出到文件系统:**将选定项导出为DICOM文件到选定文件夹
    • **发送到DICOM服务器:**使用DIMSE(C-store SCP)或DICOMweb(STOW-RS)协议将选定项发送到远程DICOM服务器。

高级加载(允许使用非默认选项加载DICOM数据集):

  • **高级:**选中此复选框以显示高级加载选项
  • **插件选择器部分:**您可以选择允许哪些插件检查选定系列以进行加载。如果单击DICOM模块面板底部的“DICOM插件”可折叠按钮,则显示此部分。
  • **检查按钮:**在当前选定系列上运行每个DICOM插件,并在可加载项列表表中提供结果。
  • **可加载项列表:**显示所选插件对选定系列的所有可能解释。默认情况下,最有可能正确解释该系列的插件被选中。如果要以不同方式加载数据,可以覆盖默认设置。并非总是存在一对一的映射,从所选系列到可加载项列表。

DICOM模块设置:

  • DICOM网络传输:使用查询检索从远程服务器下载数据,设置通过C-store SCP接收数据
  • DICOM数据库设置:允许您在磁盘上选择一个位置作为Slicer’s DICOM文件数据库。应用程序管理此文件夹的内容(存储元数据和导入的DICOM文件的副本):请勿手动将任何数据复制到此文件夹中。
  • 其他设置可在菜单中找到:编辑 / 应用程序设置 / DICOM:
    • 通用DICOM设置:
      • 加载引用的系列将为您提供在打开分割时轻松加载源卷的选项。这也可以自动完成。
    • DICOMScalarVolumePlugin设置:
      • 您可以选择使用哪个后端库(当前为GDCM、DCMTK或GDCM与DCMTK后备,最后一个选项为默认选项)。这在某些数据不受任何一个库支持的情况下提供了选择。
      • 采集几何规则化选项支持创建非线性变换,以纠正采集中的缺失切片或机架倾斜等问题。规则化变换也可以硬化到体积。更多信息参见此处
      • 按时间自动加载子系列是将一些4D采集分解为单个体积的选项,但这是可选的,因为有些体积也按时间单位采集,不应拆分。

故障排除

如何知道我拥有的文件是否使用DICOM格式存储?我如何入门?

DICOM文件不需要特定的文件扩展名,可能很难轻松回答这个问题。然而,如果您有一个由临床扫描仪生成的数据集,它很可能是DICOM格式的。如果您怀疑您的数据可能是DICOM格式,最简单的方法可能是尝试将其加载为DICOM:

  1. 将包含数据的目录拖放到Slicer窗口。您将收到一个提示“选择用于您的数据的读取器?将目录加载到DICOM数据库中。”接受该选择。您将看到目录内容被索引时的进度更新。如果目录包含DICOM数据,并且导入成功,完成后您将看到成功导入了多少患者/研究/系列/实例项的消息。
  2. 导入完成后,您将看到DICOM浏览器窗口列出当前索引的所有患者/研究/系列。接下来,您可以从DICOM浏览器窗口中选择各个项目并加载它们。
  3. 一旦使用DICOM浏览器将数据加载到Slicer中,可以切换到“数据”模块以检查导入的内容。

当我点击“将选择加载到Slicer”时,收到错误消息“无法将…加载为标量体积”

加载失败的常见原因是由于不正确的匿名化导致DICOM文件损坏。患者姓名、患者ID和系列实例UID字段不应为空或缺失(匿名化器应将它们替换为其他有效字符串)。尝试加载原始的、未匿名化的序列和/或更改匿名化过程。

如果以上都没有帮助,请检查Slicer错误日志并在Slicer论坛上报告错误。如果您共享数据(例如,将其上传到Dropbox并在错误报告中添加链接),Slicer开发人员可以更快地重现和修复问题。

我尝试导入DICOM文件目录,但浏览器中没有显示任何内容

DICOM是一种复杂的数据表示方式,扫描仪和其他软件经常会生成“非标准”文件,这些文件声称是DICOM但实际上不符合规范。此外,规范本身有许多变体和特殊格式,Slicer无法理解。Slicer最常用于CT和MR DICOM对象,因此这些通常可以工作。

如果您在导入DICOM数据时遇到问题,请尝试以下步骤:

  • 确保您遵循了DICOM加载说明。
  • 我们不断改进应用程序(每天发布新的预览版本),因此您遇到的问题可能已在最近的版本中解决。尝试使用最新稳定版和最新夜间版的Slicer加载数据。
  • 确保Slicer临时文件夹可写。可以在菜单:编辑 / 应用程序设置 / 模块 / 临时目录中选择临时文件夹。
  • 尝试将数据和数据库目录移动到仅包含美国英语字符(ASCII)的路径,以避免可能的解析错误。不允许使用特殊的国际字符。
  • 确保数据库目录位于有足够可用空间的驱动器上(1GB可用空间应该足够)。如果空间不足,您可能会在“内部错误”弹出窗口中看到此错误消息:在事件中抛出异常:调用未初始化的ctkDICOMItem上的方法
  • 从本地存储(物理驱动器或直接连接到计算机的USB记忆棒)导入文件(不是网络驱动器、共享驱动器、云驱动器、Google驱动器、虚拟文件系统等)。
  • 确保文件名不太长(低于几十个字符),并且在Windows上的完整文件路径低于约200个字符
  • 要确认您的Slicer安装是否正确读取数据,请尝试加载其他数据,例如此匿名示例DICOM系列(CT扫描)
  • 尝试使用不同的DICOM读取器导入:在应用程序设置 / DICOM / DICOMScalarVolumePlugin / DICOM读取器方法中:从DCMTK切换到GDCM(或从GDCM切换到DCMTK),重新启动Slicer,然后再次尝试加载数据集。
  • 查看SlicerDcm2nii扩展是否会转换您的图像。您可以使用扩展管理器安装此模块。安装后,您将能够从Slicer使用Dcm2niixGUI模块。
  • 尝试DICOM修补程序模块。
  • 查看错误日志(菜单:查看 / 错误日志)中的信息。
  • 通过选择添加数据中的一个文件尝试加载数据。 注意:确保打开显示选项,然后关闭单文件选项,以便将选定的系列加载为一个体积。一般来说,不建议这样做,因为加载的数据可能不完整或失真,但在某些情况下,当正确的DICOM加载失败时,它可能有效。
  • 如果仍然无法加载数据,您可能需要找到一个将数据转换为Slicer可以读取的格式的工具。有时工具如FreeSurfer、FSL或MRIcron可以理解Slicer不原生处理的特殊格式。这些系统通常会导出Slicer可以读取的NIfTI文件。
  • 对于存档研究,您确定您的数据是DICOM格式,还是可能存储在DICOM之前的专有MR或CT格式中?如果是后者,您可能希望尝试到2016年随MRIcron分发的dcm2nii工具。更新版本的MRIcron包括dcm2niix,它更适合现代DICOM图像。然而,旧版dcm2nii支持GE、Philips、Siemens和Elscint的专有格式。
  • 如果以上都没有帮助,您可以通过在Slicer论坛上发布简短描述,描述您期望数据集包含的内容以及关于数据集的以下信息,向Slicer开发团队寻求帮助:
    • 如果DICOM文件不包含患者机密信息,您可以共享这些文件:将数据集上传到某处(Dropbox、OneDrive、Google drive,…)并发布下载链接。请注意不要意外泄露私人健康信息(患者姓名、出生日期、ID等)。如果您希望从DICOM文件中删除标识符,可以查看DicomCleaner、gdcmanon或RSNA临床试验处理器软件。
    • 如果无法共享DICOM文件,您可以共享DICOM元数据和应用程序日志。确保从文本中删除患者姓名、出生日期、ID和所有其他私人健康信息,将文件上传到某处(Dropbox、OneDrive、Google drive,…),并发布下载链接。
      • 获取DICOM元数据:右键单击DICOM浏览器中的系列,选择查看元数据,并单击复制元数据按钮。将复制的文本粘贴到任何文本编辑器中。
      • 获取DICOM加载的详细应用程序日志:为DICOM启用详细日志记录(菜单:编辑 / 应用程序设置 / DICOM / 详细日志记录),然后尝试加载系列(在DICOM浏览器中选择系列并单击“加载”按钮),并获取日志(菜单:帮助 / 报告错误 -> 将日志消息复制到剪贴板)。

显示了内容,但不是我预期的

我预期看到不同的图像

当您从DICOM加载研究时,它可能包含多个数据集,默认情况下Slicer可能不会显示您最感兴趣的数据集。转到数据模块/主题层次部分,单击“眼睛”图标显示/隐藏加载的数据集。显示体积后,您可能需要单击切片选择滑块左侧的小矩形图标(“调整切片查看器的视野…”)。

如果没有一个数据集是正确的,请按照“我尝试导入DICOM文件目录,但浏览器中没有显示任何内容”部分中描述的步骤进行操作。

图像在一个轴上被拉伸或压缩

一些非临床(工业或前临床)成像系统不会生成有效的DICOM数据集。例如,它们可能错误地假设切片厚度标签定义图像几何,而根据DICOM标准,图像切片位置必须用于确定图像几何。DICOM修补程序模块可以修复其中一些图像:从Slicer的DICOM数据库中删除图像文件,使用DICOM修补程序模块处理图像文件,然后将处理后的文件重新导入Slicer的DICOM数据库。如果图像仍然失真,请转到体积模块,打开体积信息部分,并调整图像间隔值。

扫描仪可能会生成具有不同图像切片间隔的图像体积。Slicer可以通过应用非线性变换在场景中表示此类图像。要启用此功能,请转到菜单:编辑 / 应用程序设置 / DICOM,并将采集几何规则化设置为应用规则化变换。切片视图、分割和许多其他功能直接在非线性变换体积上工作。对于某些其他功能,如体积渲染,您需要在体积上硬化变换:转到数据模块,在体积节点的行中,右键单击变换列,并选择硬化变换

请注意,如果Slicer显示关于非均匀切片间隔的警告,则可能是由于DICOM文件丢失或损坏。没有可靠的机制来区分由于减少患者剂量而未采集的切片(例如,为了减少患者剂量)或采集后丢失的切片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1053371.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

目录 一、前言 二、static关键字是什么? 三、static关键字修饰的对象是什么? 四、C 语言中的 static 🍎static的C用法 🍉static的重点概念 🍐static修饰局部变量 💦static在修饰局部变量和函数的作用 &a…

ARM鲲鹏920-oe2309-caffe

参考链接:Caffe | Installation 安装依赖包 dnf install dnf update dnf install leveldb-devel snappy-devel opencv.aarch64 boost-devel hdf5-devel gflags-devel glog-devel lmdb-devel openblas.aarch64 dnf install git wget tar gcc-g unzip automake libtool autoco…

5.28 学习总结

一.CSS学习(一) 一、CSS简介 1、什么是CSS CSS:Cascading Style Sheet 层叠样式表是一组样式设置的规则,用于控制页面的外观样式 2、为什么使用CSS 实现内容与样式的分离,便于团队开发样式复用,便于网站的后期维护页面的精确…

【从零开始学习RabbitMQ | 第三篇】什么是延迟消息

目录 前言: 延迟消息: 延迟消息实现方式: 死信交换机: 延迟消息插件: 1.基于注解的方式 2.基于Bean的方式 总结: 前言: 在现代软件开发中,异步消息处理已成为构建可扩展、高可…

基于Django的图书管理系统

文章目录 前言一、页面展示1.登录2.前端页面3.后端页面 二、项目上传(1)导入数据库(2)导入项目(3)数据库密码修改(4)进入网站 总结 前言 本网站调用Django编写了图书管理网站&#…

深度学习设计模式之组合模式

文章目录 前言一、介绍二、详细分析1.核心组成2.实现步骤3.代码示例4.优缺点优点缺点 5.使用场景 总结 前言 组合模式是将对象组合成树形结构来表现"整体/部分"层次结构,可以更好的实现管理操作。 一、介绍 组合设计模式又叫部分整体模式,将…

微软开源多模态大模型Phi-3-vision,微调实战来了

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型& AIGC 技术趋势、大模型& AIGC 落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了…

[XYCTF新生赛]-Reverse:你是真的大学生吗?解析(汇编异或逆向)

无壳 查看ida 没有办法反汇编,只能直接看汇编了。 这里提示有输入,输入到2F地址后,然后从后往前异或,其中先最后一个字符与第一个字符异或。这里其实也有字符串的长度,推测应该是cx自身异或之后传给了cx 完整exp&am…

多模态MLLM都是怎么实现的(9)-时序LLM是怎么个事儿?

时序预测这东西大家一般不陌生,随便举几个例子 1- 金融,比如预测股票(股市有风险,入市需谨慎),纯用K线做,我个人不太推荐 2- 天气,比如预测云图,天气预报啥的 3- 交通,早晚高峰,堵车啥的,车啥时候加油,啥时候充电之类的 4- 医疗,看你病史和喝酒的剂量建模,看你会…

el-transfer和el-tree进行结合搞一个树形穿梭框

由于业务需求需要在穿梭框里使用树形结构,但是本身element里并不支持,于是参考了别的大佬发的文章作为思路及后续自己新增了一些处理功能。 目录 1.拷贝代码放到自己的项目目录中 2.改造el-transfer的源码 3.修改tree-transfer-panel.vue文件 4.修改…

私域如何高效管理多微信并实现聚合聊天?

在私域经营中,管理多个微信号是一项具有挑战性的任务。为了提高工作效率,辅助工具成为必不可少的一部分。而个微管理系统将为大家带来高效的多微信号管理体验,让大家能够更好地聚合聊天。 首先,个微管理系统提供了一个统一的界面…

操作系统课程实验1-进程调度模拟实验

操作系统课程实验1-进程调度模拟实验 一、实验介绍 1.1 实验目的 本实验模拟在单处理机环境下的处理机调度,帮助理解进程调度的概念,深入了解进程控制块的功能,以及进程的创建、撤销和进程各个状态间的转换过程。 1.2 实验内容 进程调度算…

nuxt3+Element Plus项目搭建过程记录

背景 本文只记录项目搭建过程中遇到的一些问题和关键点&#xff0c;nuxt框架的说明和API请参照官网学习 官网&#xff1a;https://nuxt.com/docs/getting-started/introduction 1. 初始化项目 指令如下: npx nuxilatest init <project-name>我在安装过程中出现报错&a…

黑马头条day6总结

1、wemedian错误 一开始没加EnableFeignClients(basePackages "com.heima.apis")导致获取ischeduleClient错误&#xff0c;找不到bean。 我看教程的代码中没有&#xff0c;【ComponentScan({"com.heima.apis","com.heima.wemedia"})】&#x…

话术巧妙分隔沟通效果更佳看看这个小技巧

客服回复客户咨询&#xff0c;如果遇到比较复杂的问题&#xff0c;经常会有大段的文字回复&#xff0c;用聊天宝的分段符功能&#xff0c;在需要分段的地方点击右上角的“插入分隔符”&#xff0c;就可以在指定位置分段&#xff0c;实现多段发送的目的。 前言 客服回复客户咨询…

作业job——kettle开发30

一、作业 大多数ETL项目都需要完成各种各样的维护工作。 例如&#xff0c;如何传送文件;验证数据库表是否存在&#xff0c;等等。而这些操作都是按照一定顺序完成。因为转换以并行方式执行&#xff0c;就需要一个可以串行执行的作业来处理这些操作。 一个作业包含一个或多个作…

JavaScript写个.ts视频文件Url生成器,使用了string.padStart

0 缘起 想从网上下载一个电视连续剧到平板电脑&#xff0c;在有空时看。 用浏览器的开发者工具监测发现视频是由一序列.ts文件组成的。 ts文件&#xff0c;ts即"Transport Stream"的缩写&#xff0c;特点就是要求从视频流的任一片段开始都是可以独立解码的&#xf…

开发依赖与运行依赖

1. 概念 开发依赖&#xff1a;devDependencies 运行依赖&#xff1a;dependencies 2. 理解 &#xff08;1&#xff09;devDependencies 在线上状态不需要使用的依赖&#xff0c;就是开发依赖。为什么 npm 要把它单独分拆出来呢&#xff1f;最终目的是为了减少 node_modul…

go语言基准测试Benchmark 最佳实践-冒泡排序和快速排序算法基准测试时间复杂度对比

在go语言中Benchmark基准测试( 在后缀为_test.go的文件中&#xff0c;函数原型为 func BenchmarkXxx(b *testing.B) {}的函数 )可以用来帮助我们发现代码的性能和瓶颈&#xff0c; 其最佳实践 应该是我们最常用的 冒泡排序和快速排序的测试了&#xff0c;废话不说&#xff0c;直…

[图解]SysML和EA建模住宅安全系统-07 to be块定义图

1 00:00:01,970 --> 00:00:05,040 入侵者这里有个∞ 2 00:00:05,530 --> 00:00:07,000 说明它下面已经有子图了 3 00:00:07,010 --> 00:00:08,080 我们看看里面子图 4 00:00:10,200 --> 00:00:17,000 这里&#xff0c;我们看位置 5 00:00:19,030 --> 00:00:…