热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[转]DICOM医学图像处理:DeconstructedPACS之Orthanc

转载:http:blog.csdn.netzssureqharticledetails41424027背景:此篇博文介绍一个开源的、基于WEB的DICOMServ
转载:http://blog.csdn.net/zssureqh/article/details/41424027 背景:

 

        此篇博文介绍一个开源的、基于WEB的DICOM Server软件。该开源软件完全使用C++编写,不依赖于第三方数据库(内置了SQLite数据库)或其他框架,支持RESTful API设计模式。官网上提供了源代码,同时也给出了编译后的Windows和Linux系统的二进制安装包。Orthanc是PACS领域的一种改革,提出了“解构PACS概念”,即Deconstructed PACS,用户可以通过三种方式访问Orthanc:DICOM Server、Web Server和RESTful API。

Orthanc:

        开源中国社区中对于Orthanc有一段这样的描述:Orthanc是一个轻量级的,基于REST的DICOM服务器,主要用于卫生保健和医疗研究。Orthanc可将任意运行Windows和Linux的计算机编程DICOM存储(或者说是一个小型PACS系统),其架构是轻量级的,没有复杂的数据库管理,不依赖于第三方软件。

        除此以外,Orthanc官网(http://www.orthanc-server.com/about.php)对于Orthanc的描述着重提到:Orthanc之所以与众不同是因为它提供RESTful API。因此,Orthanc可以使用任何计算机语言开发。Orthanc存储的DICOM图像的标签可以以JSON文件格式下载,此外,Orthanc对于存储的DICOM实例可以动态生成对应的PNG图像。

        Orthanc隐藏了复杂的DICOM文件格式和DICOM协议,使使用者只专注于DICOM文件内容。

Deconstructed PACS:

        Deconstructed PACS是新一代的PACS系统,原文的描述为"The latest strategy for imaging informatics is actually "deconstructed PACS," where the core elements of PACS are best-of-breed or component-based solutions, integrated together using standards-based approaches.” PACS系统最早是通过组合多个独立的子系统来实现简单获取和转存图像,对于图像(images)和医学信息(demographics)分别采用不同的网络;随后发展为C/S模式,通过Client的工作站来实现(胖客户端thick-client);最后演变成基于浏览器的Web PACS(瘦客户端thin-client)。

【Deconstructed PACS概念目前我还没有搞太明白,官网的资料比较多,后续会补充更多的资料,有兴趣的读者也可以直接阅读博文后我给出的连接】

Orthanc安装:

        通过上述简短的介绍,想必大家已经对Orthanc有了大致的了解。下面给出Orthanc的安装方法,Orthanc是一个开源软件,因此有两种安装方式。

Orthanc二进制包在Windows下安装:

        下载地址:http://www.orthanc-server.com/download-windows.php。在官网下载页面中输入基本信息就会在邮箱中获得下载链接,Windows下的二进制安装包名称为:Orthanc-0.8.5-Installer.exe。双击安装包,如下图所示,单击“下一步”就可以顺利完成安装。

 

 

 

 

        该文件夹用于设置Orthanc软件的安装目录,即主要程序OrthancService.exe和Orthanc-0.8.5-Release.exe的存放位置。

 

 

        此处用于设置Orthanc软件中DICOM Server的数据存储目录,可以简单的理解为mini-PACS的归档目录,后续示例中的图像就保存在该文件夹下。

 

 

        此处用于设置Orthanc软件在开始菜单中快捷键的文件夹。

 

 

        单击Install,稍等片刻即可完成Orthanc在Windows下的安装。

Orthanc源码在Windows下编译运行:

        开源软件最常用的是源码编译,如是可以生成跟本机系统最匹配的可执行文件。Orthanc源代码下载地址为:http://sourceforge.net/projects/orthancserver/files/Orthanc-0.8.5.tar.gz/download,源码包名称为:Orthanc-0.8.5.tar.gz。解压Orthanc-0.8.5.tar.gz到希望的目录(本机我选择C:\),得到C:\Orthanc-0.8.5,如下图:

 

 

        打开INSTALL安装说明文档,可以看到安装必须的准备:

 

1)CMake,我直接利用本地安装的CMake2.8(也可以到官网下载最新版本:http://www.cmake.org/);

 

2)Python,安装过程中有一些自动生成的脚本需要用到Python解释器,下载地址http://www.python.org/,我本机安装的版本为:Python2.7;

 

3)7-Zip:用于解压缩安装过程中下载的压缩包,下载地址为http://www.7-zip.org/。

 

        在选择CMake GUI界面,指定source code和build路径后,单击Configure会出现缺少7-zip的错误提示,如下图:

 

 

        原因是我本机起初并未安装7-zip软件。按照INSTALL给出的官网下载并安装完成后,重新启动CMake再次进行配置后,又会出现错误,如下所示。提示缺少libgoogle-glog-dev package,这个应该是google的用于日志记录的库。

 

 

        在搜索并下载libgoogle-glog-dev package时遇到了问题,未找到直接的下载链接。因此利用CMake GUI编译Orthanc的路暂时走不通。重新仔细阅读INSTALL文档,找到了在Windwos系统下利用Microsoft Visual Studio进行Orthanc源码编译的方法,具体说明如下:

Native Windows build with Microsoft Visual Studio
-------------------------------------------------
# cd [...]\OrthancBuild
# cmake -DSTANDALONE_BUILD=ON -DSTATIC_BUILD=ON -DALLOW_DOWNLOADS=ON -G "Visual Studio 8 2005" [...]\Orthanc

 

Then open the "[...]/OrthancBuild/Orthanc.sln" with Visual Studio.

 

        利用cmd进入到命令提示符状态,仿照上述代码,创建安装缓存目录,mkdir c:\OrthancBuild;随后启动cmake命令行模式,按照INSTALL中的说明设置编译模式,具体指令为:

cd c:\OrthancBuild

cmake -DSTANDALONE_BUILD=ON -DSTATIC_BUILD=ON -DALLOW_DOWNLOADS=ON -G "Visual Studio 10" ..\Orthanc-0.8.5\Orthanc-0.8.5

        注:目录要指定到源码中CMakeList.txt文件所在的层级。另外对于本地编译器的选择,可以现在cmd状态下输入cmake,查看当前支持的编译器类型,如下图所示,我选择的是Visual Studio 10。

 

 

        上述打开了自动下载第三方支持库的选项,即-DALLOW_DOWNLOADS=ON 。在启动cmake后,会自动下载我们在CMake GUI模式下提示缺少的各种支持库。等待所有第三方库自动下载并安装完成后,Orthanc源码就顺利编译完成了,如下图所示:

 

 

        打开上图中提示的Build files文件路径C:\Orthanc-0.8.5,双击打开VS工程Orthanc.sln。选择“生成”下的“批生成”,勾选ALL_BUILD项目,单击“生成”后等待编译完成。

        顺利编译完成后,在C:\Orthanc-0.8.5\Debug目录下看到了与二进制安装后相同的可执行文件,名称为Orthanc.exe,如下图所示:

 

 

        至此利用Orthanc源码进行安装的过程顺利结束。其实在CMake GUI模式下我们勾选了配置项中的“ALLOW_DOWNLOADS”,也可以顺利完成Orthanc源码的编译。

 

 

Orthanc测试:

 

        Orthanc被描述为一款开源的、轻量级的,满足RESTfu API 的DICOM服务器。它独特之处在于存在多种与Orthanc的交互方式,主要有三种:DICOM Server,Web Server和RESTful API。下面就利用这三种访问方式对上述两种安装环境进行实例测试:

二进制包的测试:

1)作为DICOM Server:

        安装并启动OrthancService.exe后,在任务管理器中可以看到启动了两个服务驻留进程OrthancService.exe和Orthanc-0.8.5-Release.exe

 

 

        Orthanc提供了发送和接收DICOM图像的基本功能,类似于一个mini PACS。可以与DCMTK提供的工具包进行良好的交互,此处我就借助DCMTK提供的storescu.exe工具将C:\test.dcm文件发送到Orthanc,具体指令如下:

storescu.exe –d –aec ORTHANC localhost 4242 c:\test.dcm

        对于storescu.exe工具包的使用可参照我前几篇的专栏,此处ORTHANCCalled AE Title4242是Orthanc中DICOM服务的监听端口,该信息在安装过程中指定的数据归档目录(即c:\Orthanc)中的Connfiguration.json配置文件中可以自行设置,上述命令行中的参数是Orthanc安装时默认的设置。

 

 

        命令执行后,storescu.exe的输出结果如下图所示,说明test.dcm文件已经顺利发送到Orthanc。

 

 

        打开Orthanc默认的数据归档文件夹C:\Orthanc\OrthancStorage\6a\d6可以看到一个大小与test.dcm相同的文件,利用DICOM Viewer打开可以看到两者是同一个文件。这说明Orthanc成功接收到storescu.exe发送的测试图像。

 

 

2)作为Web Server:

 

        Orthanc内置了一个Web Server(也可嵌入到Apache服务中),即Orthanc Explorer。Orthanc Explorer提供了一种友好的交互方式,可通过拖拽文件的方式实现DICOM文件上传。下面我们演示一下:

        在开始菜单中选择Open Orthanc Explorer,或者在Chrome或者Firefox浏览器中直接输入http://localhost:8042/app/explorer.html(注:目前不支持IE浏览器)。打开后此处可以直接看到我们刚才 利用storescu.exe上传的test.dcm文件,如下图所示:

        单击上图右上角的Upload DICOM,出现如下界面:

       此时我们可以使用“拖拽”方式实现DICOM文件上传。下面我选择c:\test2.dcm文件,拖拽到上述页面中,然后单击Start the upload,会弹出上传进度条,如下所示:

        返回上层界面,可以看到我们“拖拽”的test2.dcm文件已经顺利完成上传,如下图所示:

3)利用RESTful API:

        下面介绍Orthanc最令人振奋的访问方式——RESTful API。它提供了一种使用标准网络协议与图像服务器进行交互的方式,使得可以在任何地方(只要有网络覆盖)通过网络连接访问Orthanc服务器,并且无需考虑服务运行的平台或开发语言。RESTful APIs使用URIs来实现资源的定位与访问,此处的资源包括patients、studies和images三级,与DICOM协议中定义相同,传统的PACS也多以此作为数据库的设计原则。对于该类请求,Orthanc会将文本信息以JSON格式返回(JSON是一种轻量级的广泛应用的文件格式);对于图像信息会返回PNG网络图像格式。该部分想必大家都很熟悉,下面我们就直接演示一下:

        此处借助于curl.exe工具,在cmd模式下输入:

cd c:\

curl –X POST http://localhost:8042/instances –data-binary @test3.dcm

        得到如下结果表明test3.dcm图像上传成功,

        打开Orthanc Explorer可以看到刚才上传的test3.dcm文件:

源码编译后测试:

        在任务管理器中先手动终止OrthancService.exe和Orthanc-0.8.5-Release.exe两个Orthanc后台服务进程,转到编译源码生成的目录C:\Orthanc-0.8.5\Debug下,启动Orthanc.exe,如下图所示:(调试状态下Orthanc.exe会输出状态信息,也可以在命令行下启动Orthanc.exe --verbose输出调试信息)

        仿照上一节,从DICOM Server、Web Server和RESTful API三种方式进行测试:

1)DICOM Server

        进入cmd模式,输入:

storescu.exe –d –aec ORTHANC localhost 4242 c:\test.dcm,可以看到图像上传成功的结果:

2)Web Server

        打开谷歌浏览器,地址栏输入http://localhost:8042/app/explorer.html,可以看到刚才上传的test.dcm文件,如下图:

        单击Upload DICOM,拖拽test2.dcm文件到浏览器页面,然后单击Start the Upload,返回到主页面可以看到顺利上传的结果,如下图:

        打开目录C:\Orthanc-0.8.5\Debug\OrthancStorage,可以看到顺利归档的两个文件

3)RESTful API

        进入cmd模式,输入如下指令:

cd c:\

curl –X POST http://localhost:8042/instances –data-binary @test3.dcm

        在Orthanc Explorer中可以顺利看到结果,如下图:

        【注】:与二进制安装环境下不同的是,curl运行时会偶尔返回错误提示,出现这种情况后重启Orthanc.exe就可以解决。

知识点补充:

RESTful API:

        RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。REST,全称Representational State Transfer,最早是由Roy Thomas Fielding在他2000年的博士论文中提出的。论文中的部分摘要如下:

This dissertation explores a junction on the frontiers of two research disciplines in computer science: software and networking. Software research has long been concerned with the categorization of software designs and the development of design methodologies, but has rarely been able to objectively evaluate the impact of various design choices on system behavior. Networking research, in contrast, is focused on the details of generic communication behavior between systems and improving the performance of particular communication techniques, often ignoring the fact that changing the interaction style of an application can have more impact on performance than the communication protocols used for that interaction. My work is motivated by the desire to understand and evaluate the architectural design of network-based application software through principled use of architectural constraints, thereby obtaining the functional, performance, and social properties desired of an architecture.

        如果一个架构符合REST原则,就称它为RESTful架构。要理解RESTful结构,需要充分理解Representational State Transfer 这个词组的含义,每个词代表什么意思。该词组中省略了主语,表现层(representational)其实指的是资源(resources)的表现层。所谓资源就是网络上的一个实体,或者说网络上的一个具体信息。REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式。所谓上网,就是互联网上一系列“资源”的互动,一系列URI的调用。

        资源是一种信息实体,可以有多种表现形式,叫做“表现层(representation)”,例如文本可以用txt表示,也可以用html、xml、JSON表示,甚至可以使用二进制格式;图片可以用JPEG、PNG等格式。URI只代表资源实体,不代表它的表现形式。有些网址最后的.html后缀名是不需要的,因为.html后缀是一种表示格式,属于“表现层”范畴,URI只代表资源的位置。

        访问一个网站,就代表客户端与服务器的一个互动过程。这个过程中势必会涉及到数据和状态的改变。互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。获得这些表会致使这些应用程序转变了其状态。随着不断获取资源的表示方式,客户端应用不断地在转变着其状态,所谓表述性状态转移(Representational State Transfer)。——这一观点不是凭空臆造的,而是通过观察当前Web互联网的运作方式而抽象出来的。Roy Fielding 认为,“设计良好的网络应用表现为一系列的网页,这些网页可以看作的虚拟的状态机,用户选择这些链接导致下一网页传输到用户端展现给使用的人,而这正代表了状态的转变”。

        综合上面的解释,我们总结一下什么是RESTful架构:

  • 每一个URI代表一种资源;
  • 客户端和服务器之间,传递这种资源的某种表现层;
  • 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化";

WADO:

        关于WADO的详细介绍可以参考DICOM3.0标准的第18部分。

参考资料:

http://www.orthanc-server.com/index.php,Orthanc官网

http://www.orthanc-server.com/blog.php,Orthanc

http://www.auntminnie.com/index.aspx?sec=ser&sub=def&pag=dis&ItemID=107001,Deconstructed PACS

http://www.auntminnie.com/index.aspx?sec=sup&sub=pac&pag=dis&ItemID=55408,Deconstructed PACS

http://siim.org/siim2014/scientific-program/deconstructed-pacs,Deconstructed PACS

http://idoimaging.com/blog/?p=288,I Do Imaging

http://www.codeproject.com/Articles/797118/Implementing-a-WADO-Server-using-Orthanc,Orthanc Plugins SDK

http://baike.baidu.com/view/5798116.htm?fr=aladdin,RESTful APIs

http://www.cnblogs.com/springyangwc/archive/2012/01/18/2325784.html,RESTful APIs

 

 

 

 

 

作者:zssure@163.com

 

时间:2014-11-23


推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
author-avatar
季柔原
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有