拍片不用买胶片!从云下载MR源文件DICOM

Author Avatar
EmptinessBoy 9月 10, 2020
  • 在其它设备中阅读本文章

这是一个因 阑尾炎? 泡在医院的暑假

前言

NOTE:从暑假开始,自己就一直闹肚子,一会腹泻一会肚子疼的,看了消化科的医生,诊断为肠功能紊乱,服用各种益生菌治疗了整整一个月。然后吃各种肠胃药的效果就是时好时坏,然后然后,我整个暑假都没吃上冰淇淋(差评!

就这样一直折腾到9月初,肚子越来越疼。到医院翻看了6月时做的ct,医生觉得我的阑尾有问题。为了进一步确诊,就去拍了MR。

拍片

如果你想知道做MR大概是一种什么样的感受?

一句话概括就是,躺进一个非常巨大的机器(超导磁体)里,然后身上绑一个大大的线圈,闭上眼睛听一段20分钟震耳欲聋的duangduangdaung,kakaka,zhizhizhi的交响曲。

在这过程中,从机器巨大的洞里,还会吹出冰冷冰冷的风。昏暗的灯光,发出巨响震动的机器。 虽然没有网上说的那么吓人,不过也不是一种让人愉悦的体验

渡劫般度过这段时间后,剩下的就是花几个小时等待报告。

报告

由于 MR 是在另一家医院拍的,医院只能给出一张 A4 纸打印的报告单。要胶片的话得额外掏 50 元胶片费。好在系统提供了一个云胶片的二维码入口,方便用手机简单查看影像。

那么问题就来了,如果要去别的医院让医生帮你诊断的话,外院医生不可能凭一个小小手机屏幕的模糊云影像帮你做具体的诊断。因为 —— 这根本看不清啊。就算你花钱领了胶片,可是你知道 CT 或 MR 一次拍片可是有数百张影像,好几个序列的。印在胶片上的都是医生帮你挑选过的典型的几个图像。如果医生没挑出来在胶片上的, 很可能就因此漏诊了。

218960cbffd570226f7d04d1f7973eae.png

云影像

感谢科技的进步和医疗技术的发展,使得影像数据可以被数字化的保存在云平台,并通过云服务让我们查看。不过有点遗憾的在于,提供的云影像在清晰度和操作上都逊于实体影像。

由于是浏览器提供的影像工作台,导致了画面渲染起来的卡顿和掉帧。最重要的是,这些数据都是在云端的,并不在我的手里,万一在需要阅片的时候,云服务暂停了,或者哪天超过了存储限定日期。这些数据很可能就被删除了。

1.png

把云影像变为数字影像

为了真正获得自己的影像拍摄数据,我决定想办法下载到真正的原始影像。毕竟花了好几百拍的片呐!

经过各种“多方求学”,了解到医学数字影像文件都是 DICOM 格式的。只有搞到这一套片子才能看到自己完整的扫描结构。

尝试下载

最开始能想到的方法,无非就是云平台自身提供的下载按钮。刚找到下载入口的时候,还因此小小的兴奋了一番。以为只要这么一步就可以成功了。

然而,真的按下那个按钮的时候才知道原来这个按钮只能用来下载单张的 JPG 格式图像。并不能下载到完整的影像文件。

分析网页

这时候细心的我发现,白色的网页边框中显示云影像的区域似乎是一个 iFrame 形式的嵌套。

2.png

从图片中可以看到嵌套的 iFrame 页面的具体网址。在提取获得网址以后,尝试进行访问,看看现在的效果。

提取到的网址:

https://nbss.mtywcloud.com/ICCWebClient/Image/ViewerV2?AllowQuery=0&DicomDirPath=http://nb-lihuili01/192.168.141.11/检查单号/Exam/ExamImage/一串编号/DICOMDIR&BusinessID=又一串编号&BusinessType=Exam&DocumentService=https%3a%2f%2fnbss.mtywcloud.com%2fDocumentService%2f&OrganizationID=编号-X&AuthorizeID=编号&Token=编号

单独访问这个页面可以看到,整个浏览器完整的显示了一个云影像的页面。

3.png

但单单这样还是不够的,别忘了我们的最终目的是把我们的胶片下载到本地。

分析 URL

盯着开发工具里的 network 半天,也没找着啥玄机来。于是决定回头分析现在的 URL。从 URL 来看,可以把刚才的 URL 分成两部分。一部分是前面云影像平台的 URL,后面的是我拍片所在医院名字开头的 hostname。看起来像是一个局域网服务器的样子。

提取到的网址第一部分:

https://nbss.mtywcloud.com/ICCWebClient/Image/ViewerV2?AllowQuery=0&DicomDirPath=

第二部分:

http://nb-lihuili01/192.168.141.11/检查单号/Exam/ExamImage/一串编号/DICOMDIR&BusinessID=又一串编号&BusinessType=Exam&DocumentService=https%3a%2f%2fnbss.mtywcloud.com%2fDocumentService%2f&OrganizationID=编号-X&AuthorizeID=编号&Token=编号

单独访问第一个 URL 试试:

4.png

可以看到,云影像浏览器的框架已经被载入,但是弹出 JS 的报错,获取检查信息错误。而我们的第二个 URL 很明显是一个内网的地址,没法进行直接访问。

看起来此路不通啊!

等等,难道我就要这样放弃么?当然不会啦!

继续拆解

再仔细观察刚才拆分得到的第二组 URL:

第二部分:

http://nb-lihuili01/192.168.141.11/检查单号/Exam/ExamImage/一串编号/DICOMDIR&BusinessID=又一串编号&BusinessType=Exam&DocumentService=https%3a%2f%2fnbss.mtywcloud.com%2fDocumentService%2f&OrganizationID=编号-X&AuthorizeID=编号&Token=编号

观察后我发现,在整个 url 后半部分传参 DocumentService 的地方,藏着一个被 encode 的 url:

https%3a%2f%2fnbss.mtywcloud.com%2fDocumentService%2f&OrganizationID=编号-X&AuthorizeID=编号&Token=编号

尝试将上述 URL 进行解码,果然有所发现:

解码后结果:

https://nbss.mtywcloud.com/DocumentService/&OrganizationID=编号&AuthorizeID=编号&Token=编号

尝试直接访问解码后的结果,可以看到 服务器 是 IIS,脚本语言使用的是 asp.net 。访问后系统报了一个 500 的错误。

貌似接口不允许直接访问?

那么直接访问 DocumentService 这个路径试试?

6.png

访问完简直眼前一亮的感觉有没有?居然所有的接口都写在这里了!连怎样使用都有

访问下载接口

所以到此为止,我们可以判断。提取到的网址第一部分:https://nbss.mtywcloud.com/ICCWebClient/Image/ViewerV2?AllowQuery=0&DicomDirPath= 就是一个单纯的云影像浏览器。并不包含影像内容。

通过将实际片子所在的下载接口传参到云影像浏览器,就可以使用云影像平台进行看图。

换而言之,只要按照规范传递参数,其他地方的片子,其实也是可以用这个云影像浏览器打开的。

所以,对于我们要下载片子而言,其实只要访问下载接口就可以了。

访问下载接口:

7.png

继续报错,不过莫慌。这里看到错误内容为 businessID 和 fileUid不能同时为空。

而其实我们在刚才拆分 URL 时,可以看到第二部分是含有 businessID 的:

第二部分:

http://nb-lihuili01/192.168.141.11/检查单号/Exam/ExamImage/一串编号/DICOMDIR&***BusinessID=又一串编号***&BusinessType=Exam&DocumentService

最后拷贝 businessID ,访问接口:

842c77fb6ec1750fd5421d977b9574b4.png

看到第一个,熟悉的 dicom(医学通用影像格式文件) 有没有,大概有150M左右的一个压缩包。

下载后解压:

1.png

阅片

可以看到下载后的 dicom 文件,其实是由若干 dcm 文件,和一个 DICOMDIR 索引文件构成。

我们只需要用 dicom 阅片软件打开索引文件,软件就会自动帮我们导入各种序列。

22cabbab54dfe4435.png

从影像上数了一下,一共有500多张不同序列的图片。软件会自动在阅片时进行三维的定位,并且可以进行窗宽窗位的调节。

相比平时我们做完检查后,付钱然后拿到一个只有区区几十个图片的胶片比。获得这样的影像能够真正提高影像的实用价值。方便医生诊断以及减少重复的,无谓的检查。

最后,放个动图展示下 dicom 影像播放序列时的画面。这下你应该就知道电子影像的优势了吧?

emm,为了隐私,紫色的为打上的马赛克

hxfmri.gif

PS:下周就要动手术切阑尾了,希望自己一切顺利!

另外,慢性阑尾炎诊断过程真的很难。拖了整整两个月。期间我竟然被迫自学起了CT和MRI的阅片。

learnmri.jpg

虽然最后并没有什么卵用,诊断还是得靠医生。

This blog is under a CC BY-NC-ND 4.0 Unported License
本文链接:https://coding.emptinessboy.com/2020/09/%E6%87%92%E5%BE%97%E8%B7%91%E5%8C%BB%E9%99%A2%EF%BC%81%E4%BB%8E%E4%BA%91%E4%B8%8B%E8%BD%BDMR%E6%BA%90%E6%96%87%E4%BB%B6DICOM/