V 友们,有没有医疗行业的,懂 DICOM 的?
我司有个需求是这样的:
要求实现解析 dicom(多帧)文件,把他转化成多个图片,然后把每个图片拿去调用 ai 组的一个接口(标出病灶,结节,返回坐标集合),拿到每个图片的坐标后,根据坐标绘制图片把病灶圈起来得到新的图片,然后再用新的图片替换原 dicom 中的图片,实现播放 dicom 时,能看到每帧上圈出来的病灶。
图片根据坐标绘制很好实现,绘制完后如何再把他写入原 dicom 文件呢?我用的 java 的 dcm4che 库,文档几乎可以说是没有,代码注释也是少得可怜,有经验的的大佬能否指点一下如何做,或者哪里可以获取到 dcm4che 的更详细资料?
ps:
不要问我为什么 ai 不支持直接在多帧 dicom 上标注,俺也不敢说也不敢问
dicom 的 image 段 你可以做到 dicom->image <==> 图片 互转替换回去,顺便可能需要变更下 data_element 的 value_length.以上内容是我根据搜索引擎查询 dicom 的数据格式得出的结论。话又说回来,你应该直接研究下已有的 dicom 渲染工具是怎么渲染画面的,渲染的时候带入坐标自己做额外的绘制是不是更高效!
github.com/dcm4che/dcm4che/blob/master/dcm4che-tool/dcm4che-tool-jpg2dcm/README.md
dicom 是连续性的切片,你单独拿出来一帧帧 AI 标注,会不会标错啊?其实 AI 就应该多帧标注的,类似原始输入数据是立体模型,而不是纯平面切片数据。
把 ai 组返回的数据生成一个分割文件(比如用 nibabel 库生成 nii.gz 文件),然后有很多软件(比如 itk-snap ),支持导入 dicom 文件和分割文件,把结果覆盖显示在原图上据我了解,一般是不会把分割结果直接写入原 dicom 文件的,因为 dicom 文件的像素的灰度值是有医学上的意义的或者你可以不管格式了,直接压成一个 png 或者 jpg 文件,可以也好做,你拿到分割结果后,这是一个多维数组,dicom 文件读取后(比如用 pydicom 库)也是一个多维数组,直接覆盖在上面,然后保存成图片输出就行了
看到你的回答,我想起写透视外挂的时候都是 overlay 一层透明窗口,绘制。就是不知道 OP 的 AI 模型速度快到什么程度
如果是网页端,在绘制 dicom 的时候一般都会使用第三方库( cornerstonejs 之类的)在 canvas 上面进行绘制,第三方库会提供渲染标注的方法,只要将 AI 返回的结果转换成对应的标注格式,然后与 dicom 一起加载就会自动绘制出来。或者将标注转成 png ,铺在 dicom 上面也行,随着 dicom 的层数渲染不同的标注,这样做的好处就是标注文件比较小。总之不建议将标注写到 dicom 里面。
- 你不应该去修改原来的 dicom 文件,而是应该把得到的标注重新存一个文件。2. 你 ai 得到得病罩最后最好是转化为一系列的坐标点,病罩就是这些坐标点围成的区域。3. 如果你获取的标注是给医生看的,你应该存成 dicom rt 格式,兼容大部分临床的 dicom 图片查看器。4. 如果你只是要展示给普通用户,那你存什么格式都无所谓了,只要前端能显示。但仍然推荐存坐标点而不是图片,因为更 compact 更节省空间。应该没有人比我更懂了,欢迎联系讨论: kaizhao.net/cn 。
我们是前端实现的,用的 cornerstonejs ,差不多就是楼上说的这样
不懂啊,刚接触 dicom,我也觉得是 ai 应该一下处理所有,返回处理好的多帧文件
他可能就是找了个 2d 的 segmentation 模型训练了下,3d 的模型难找,而且简单模型可能内存扛不住。
#10 github.com/wasserth/TotalSegmentator
是给医生看的,我也是准备生成新的 dicom,现在就是不知道该如何用 java 的 dcm4che 实现把病灶的坐标显示在多帧 dicom 文件上
是的
建议使用 gdcm 来解析 dcm 文件,这个是多帧的。 stackoverflow.com/questions/45193995/how-to-read-multi-frame-dicom-files-using-gdcm ,好像答案是 c#的,转一下就可以了吧,api 都一样。事实上都是分两层的吧,结果放在图像层上一层 canva 显示。
好的,感谢提供思路,我试试前端处理
java 应该就套个 imagej 随便搞
补充: github.com/malaterre/GDCM/tree/master/Examples/Java
要用代码实现,因为要给医院用的,后续会有很多 dicom 文件
ok ,感谢,我研究一下
差点以为是我们公司了,我们有个公司最近也在搞这个
You shouldn't convert dicom to images directly since RGB image is losing a lot of details in the dicom. Should just put the data in a Ndarray, then get a single slice if you need to call a 2D model. However you should be using a 3D model for this kind of application.
dcm4che 本来就支持呀 先把原始 dcm 头信息保存到 xml 里 再把处理完的图片转 dcm 并把头信息写回不就可以了吗
We are hiring. I see you are a post-doc in case you are looking for a job. Contact me.
gdcm 可能还需要注意一下 GetPhotometricInterpretation(),即数据格式是不是"YBR_FULL",需要转 rgb 这类的。
老哥指点一下,就是找不到他的使用文档
dcm2xml: Convert DICOM file in XML presentation Convert
dicom 协议挺麻烦的。 肯定是在前端标注。
大佬!
“解析 dicom(多帧)文件,把他转化成多个图片” 用 python 哈,java 搞这个不给力。
我们是读进来以后转成二维数组把轮廓像素点 hu 值改掉再存成 dicom 送去归档...
手机只有单卡,带两个手机又太麻烦,趁国庆有空写了个程序转发短信和未接来电。 已经用 Github Action 自动编译成 apk 了,下载安卓即用,干净,安全。 githu…
40年前,Unix操作系统横空出世,Unix不仅仅带来了一个操作系统,还创造C语言,Socket,开源,黑客等等文化,这些文化影响着整个计算机世界的文明,直到今天。 如果说U…
写这篇文章的原因主要还是因为V2EX上的这个贴子,这个贴子中说—— “对接同事的接口,他定义的所有接口都是 post 请求,理由是 https 用 post 更安全,之前习惯…