3d Slicer-DICOM模块之Query/Retrieve功能介绍

本文由Markdown语法编辑器编辑完成。

1. DICOM模块

3d Slicer作为医学影像的开源处理软件,当然离不开医学影像数据。
DICOM模块,就是专门负责DICOM影像的查找,获取,发送和接收的模块。

官方文档中关于DICOM的描述,见链接: https://slicer.readthedocs.io/en/latest/user_guide/modules/dicom.html
在这里插入图片描述
上述图像介绍了,3d Slicer加载医学影像的流程。
3d Slicer既支持加载DICOM影像数据,也支持加载非dcm数据,如NRRD, STL, JSON等格式的数据。
除了本地加载影像文件外,DICOM协议支持通过网络传输影像。也就是如上图中,红色框内的: DICOM query/retrieve。

2. Query/Retrieve功能介绍

Query/Retrieve功能,对应的是dicom协议中的findscu和movescu/getscu.

功能dcmtk指令
Queryfindscu
Retrievemovescu/getscu

在3d Slicer的DICOM页面中,有一个项目是: DICOM networking, 就是提供通过网络来进行DICOM影像传输的功能入口。
在这里插入图片描述
点击: "Query and retrieve"按钮,即可以进入如下的弹出页面。
页面中显示了,3d Slicer默认的AE Title为: “CTKSTORE”。
下面则是配置需要连接的PACS服务器的信息。
由于我已经在本地用dcm4chee搭建了一个PACS服务器。PACS服务器的AE Title是: DCM4CHEE,
Address是:192.168.109.83,Port是11112,且支持通过CGET的方式获取数据。
在这里插入图片描述
右侧的红框 Search Options, 就是通过一些已知的Patient/Study/Series的信息,来从PACS的服务器检索相关的数据。检索选择框下方的两列,看起来比较明显。一列是日期,另一列是Modality。
但是上方的 Name/Study/Series/ID, 就不是很明显。不知道应该输入什么信息,也不知道应该以什么样的格式来输入。
在Google上检索了很多关于3d Slicer的query/retrieve的文章,但都是关于如何利用下面的日期和Modality来query数据的,对于上面的Name/Study/Series/ID, 却没有介绍。

最后实在没有办法了。只能通过查询3d Slicer的源码来寻找有价值的信息了。
由于3d Slicer是一个持续了20多年的开源项目,因此代码量是相当庞大的。如何在如此庞大的代码量前面迅速地定位相关代码,也没有更好的办法。我只能是通过将代码加载在Visual Studio Code里面,然后利用编辑器自带的搜索功能,来搜索了。

我用的关键字是搜索框上方的"Search Options"。首先是在源码里面搜索,结果没有搜到任何信息。后来想到,3d Slicer在编译的过程中,同时还下载和编译了十几个项目的代码。因此,我又在3d Slicer bulid的目录下查找,结果真的找到了。

最后定位到的文件是位于3d Slicer的编译目录: Slicer-SuperBuild-Debug下的:
CTK/Libs/DICOM/Core/ctkDICOMQuery.cpp的函数: ctkDICOMQuery:query()中的Line 324 ~ 380.

  /* Now, for all keys that the user provided for filtering on STUDY level,
   * overwrite empty keys with value. For now, only Patient's Name, Patient ID,
   * Study Description, Modalities in Study, and Study Date are used.
   */
  QString seriesDescription;
  foreach( QString key, d->Filters.keys() )
    {
    if ( key == QString("Name") && !d->Filters[key].toString().isEmpty())
      {
      // make the filter a wildcard in dicom style
      d->Query->putAndInsertString( DCM_PatientName,
        (QString("*") + d->Filters[key].toString() + QString("*")).toLatin1().data());
      }
    else if ( key == QString("Study") && !d->Filters[key].toString().isEmpty())
      {
      // make the filter a wildcard in dicom style
      d->Query->putAndInsertString( DCM_StudyDescription,
        (QString("*") + d->Filters[key].toString() + QString("*")).toLatin1().data());
      }
    else if ( key == QString("ID") && !d->Filters[key].toString().isEmpty())
      {
      // make the filter a wildcard in dicom style
      d->Query->putAndInsertString( DCM_PatientID,
        (QString("*") + d->Filters[key].toString() + QString("*")).toLatin1().data());
      }
    else if ( key == QString("Modalities") && !d->Filters[key].toString().isEmpty())
      {
      // make the filter be an "OR" of modalities using backslash (dicom-style)
      QString modalitySearch("");
      foreach (const QString& modality, d->Filters[key].toStringList())
      {
        modalitySearch += modality + QString("\\");
      }
      modalitySearch.chop(1); // remove final backslash
      logger.debug("modalityInStudySearch " + modalitySearch);
      d->Query->putAndInsertString( DCM_ModalitiesInStudy, modalitySearch.toLatin1().data() );
      }
    // Rememer Series Description for later series query if we go through the keys now
    else if ( key == QString("Series") && !d->Filters[key].toString().isEmpty())
      {
      // make the filter a wildcard in dicom style
      seriesDescription = "*" + d->Filters[key].toString() + "*";
      }
    else
      {
      logger.debug("Ignoring unknown search key: " + key);
      }
    }

  if ( d->Filters.keys().contains("StartDate") && d->Filters.keys().contains("EndDate") )
    {
    QString dateRange = d->Filters["StartDate"].toString() +
                        QString("-") +
                        d->Filters["EndDate"].toString();
    d->Query->putAndInsertString ( DCM_StudyDate, dateRange.toLatin1().data() );
    logger.debug("Query on study date " + dateRange);
    }

正如这段代码的注释部分所描述的,3d Slicer的Search Options,目前的对应关系是:
在这里插入图片描述

Search OptionsDICOM TAG
NamePatient’s Name
StudyStudy Description
SeriesSeries Description
IDPatient ID
DateStudy Date
ModalityModalities in Study

根据以上的对应关系,便可以在Search Options的对应的Tab页输入相应的查询条件,来进行数据的检索。

完。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
1引言................................................ ............................................................. ................................ 3 1.1结构............................................ ................................................. ............................................. 3 1.2支持的语言............................................... .................................................................... .......... .4 1.3使用COM对象模型的效果.......................................... ........................................................... 4 1.4 DicomObjects中的集合.............................................. .............................................................. 4 1.5 Dicom对象的DICOM数据表示........................................................................ ....................... 5 1.6解释和使用序列............................................. .......................................................................... 7 1.7私有属性............................................... .................................................................... ............... 7 2第一步 - 阅读,查看和写入DICOM文件................................................................... ............. 9 2.1您的第一个DICOM计划............................................. ............................................................. 9 2.2将映像写入磁盘............................................ ......................................................................... 10 3通过网络简单地发送和接收图像........................................ .................................................... 11 3.1发送图像.................................................. ................................................................ .............. 11 3.2接收图像............................................... ..................................................................... ............ 11 4查询/检索(SCU)........................................... .......................................................... .............. 13 4.1公共特性............................................... ................................................................... .............. 13 4.2 DoQuery ............................................... ................................................................................ . 14 4.3 GetImages ............................................... ............................................................................... 14 4.4 GetUsingMove ................................................ ........................................................................15 4.5 DoRawQuery ................................................ ...........................................................................15 4.6 MoveSync ................................................ ................................................................................15 4.7 MoveImages ................................................ ............................................................................15 4.8基于Dicom连接的Q / R方法........................................... ............................ ....... ......... ..... 15 5离线媒体............................................. ................................................. ..... ....... ........................17 5.1阅读............................................... ................................................. .......... ....... ....... ..............17 5.2创建................................................ ................................................. ....................................... 18 5.3更新............................................... ................................................. ........................................ 19 5.4乘以引用的目录记录............................................. ................................................................ 19 6打印............................................ ................................................. .............................................. 20 6.1使用DicomPrint打印.................................................. ........................................................... 20 6.2使用标准化操作打印............................................. ................................................................ 22 6.3将DICOM图像打印到Windows打印机.......................................... ..................................... 22 7将DICOM图像导出到其他格式........................................... .................................................... 23 7.1单帧............................................... ................................................. ........................................ 23 7.2多帧图像/电影........................................... ............................................................................. 23 7.3非文件导出............................................. ...................................................................... ......... 23 8高级图像审查站............................................. ........................................................................... 24 8.1基本查看控件................................................ ......................................................................... 24 8.2多帧(电影)图像.......................................... ....................................................................... 24 8.3注释............................................ ................................................. ........................................... 25 8.4查找表............................................... ................................................. .................................... 28 8.5 DICOM灰度呈现状态............................................. ................................................................ 28 8.6显示速度优化................................................ ......................................................................... 29 9网络使用............................................... ......................................................... ........................... 31 9.1在Web服务器上运行DicomObjects . .... .......................................... ................................... 31 9.2在Web客户端上运行DicomObjects .......... .... .................................. .................................. 33 10写路由器/修改器.................................. .... .... .............. ...................................................... ... 35 11编写DICOM服务器............................................. ................................................................ ... 36 11.1聆听协会的对象........................................... ........................................................................ 36 11.2验证协会............................................... ................................................................................ 37 11.3处理C-STORE操作............................................ ................................................................... 37 11.4处理查询/检索请求............................................ ................................................................. 38 11.5处理C-ECHO请求............................................ .................................................................... 42 11.6传输语法和质量问题............................................ ............................................................... 42 11.7性能和可靠性问题............................................. .................................................................. 43 11.8模态WorkList SCP .............................................. .................................................................. 44 11.9打印SCP ............................................... ................................................. .............................. 44 11.10存储承诺SCP ................................................ ..................................................................... 45 12访问和修改像素数据............................................ .................................................................. 46 12.1原始指针的语言............................................. ...................................................................... 46 12.2使用变量数组的语言............................................. .............................................................. 47 13创建DICOM图像.............................................. .................................................................. ... 48 13.1导入其他格式................................................ ....................................................................... 48 13.2导入多帧图像.................................................. ..................................................................... 49 13.3从划痕............................................... ................................................................... ............... 50 14使用模态WorkList作为SCU ........................................... ...................................................... 52 15语言特定功能.............................................. ............................................................................ 53 15.1 Visual Basic ............................................... .................................................. ......................... 53 15.2 VBScript ................................................ ................................................. .............................. 53 15.3应用程序的Visual Basic(例如MS Access)........................................ ............................. 53 15.4 Microsoft Visual C ++ ................................................ ........................................................ ... 53 15.5 Borland Delphi和Borland C ++ Builder ........................................... .................................... 55 15.6 Java ................................................ ................................................. ..................................... 56 15.7其他环境............................................... ................................................. .............................. 56 16日志记录................................................ ................................................. ................................ 57 16.1日志详细信息和级别............................................. ........................................................... .. 57 16.2文件记录............................................... ................................................. .............................. 57 16.3 DicomLog控制................................................ ...................................................................... 58 17高级使用............................................... ................................................. ................................. 59 17.1超车注册表值............................................ ........................................................................... 59 17.2更改默认SOP类的列表.......................................... ............................................................ 59 17.3传输语法选择.................................................. ..................................................................... 60 17.4私人SOP类................................................ .................................................................. ....... 61 17.5私有传输语法........................................................................................................................ 61 17.6存储承诺............................................... ............................................................................ ... 61

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inter_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值