V 友们,有没有医疗行业的,懂 DICOM 的?

220 天前
 ChenSino

我司有个需求是这样的: 要求实现解析 dicom(多帧)文件,把他转化成多个图片,然后把每个图片拿去调用 ai 组的一个接口(标出病灶,结节,返回坐标集合),拿到每个图片的坐标后,根据坐标绘制图片把病灶圈起来得到新的图片,然后再用新的图片替换原 dicom 中的图片,实现播放 dicom 时,能看到每帧上圈出来的病灶。

图片根据坐标绘制很好实现,绘制完后如何再把他写入原 dicom 文件呢?我用的 java 的 dcm4che 库,文档几乎可以说是没有,代码注释也是少得可怜,有经验的的大佬能否指点一下如何做,或者哪里可以获取到 dcm4che 的更详细资料?

ps: 不要问我为什么 ai 不支持直接在多帧 dicom 上标注,俺也不敢说也不敢问

2686 次点击
所在节点    程序员
34 条回复
LLaMA2
220 天前
dicom 的 image 段 你可以做到 dicom->image <==> 图片 互转

替换回去,顺便可能需要变更下 data_element 的 value_length.
以上内容是我根据搜索引擎查询 dicom 的数据格式得出的结论。

话又说回来,
你应该直接研究下已有的 dicom 渲染工具是怎么渲染画面的,
渲染的时候带入坐标自己做额外的绘制是不是更高效!
sivacohan
220 天前
tool2d
220 天前
dicom 是连续性的切片,你单独拿出来一帧帧 AI 标注,会不会标错啊?
其实 AI 就应该多帧标注的,类似原始输入数据是立体模型,而不是纯平面切片数据。
chesha1
220 天前
把 ai 组返回的数据生成一个分割文件(比如用 nibabel 库生成 nii.gz 文件),然后有很多软件(比如 itk-snap ),支持导入 dicom 文件和分割文件,把结果覆盖显示在原图上

据我了解,一般是不会把分割结果直接写入原 dicom 文件的,因为 dicom 文件的像素的灰度值是有医学上的意义的

或者你可以不管格式了,直接压成一个 png 或者 jpg 文件,可以也好做,你拿到分割结果后,这是一个多维数组,dicom 文件读取后(比如用 pydicom 库)也是一个多维数组,直接覆盖在上面,然后保存成图片输出就行了
LLaMA2
220 天前
@chesha1

看到你的回答,我想起写透视外挂的时候都是 overlay 一层透明窗口,绘制。就是不知道 OP 的 AI 模型速度快到什么程度
Yokira
220 天前
如果是网页端,在绘制 dicom 的时候一般都会使用第三方库( cornerstonejs 之类的)在 canvas 上面进行绘制,第三方库会提供渲染标注的方法,只要将 AI 返回的结果转换成对应的标注格式,然后与 dicom 一起加载就会自动绘制出来。
或者将标注转成 png ,铺在 dicom 上面也行,随着 dicom 的层数渲染不同的标注,这样做的好处就是标注文件比较小。
总之不建议将标注写到 dicom 里面。
RVRGnXxwawP5kwKW
220 天前
1. 你不应该去修改原来的 dicom 文件,而是应该把得到的标注重新存一个文件。
2. 你 ai 得到得病罩最后最好是转化为一系列的坐标点,病罩就是这些坐标点围成的区域。
3. 如果你获取的标注是给医生看的,你应该存成 dicom rt 格式,兼容大部分临床的 dicom 图片查看器。
4. 如果你只是要展示给普通用户,那你存什么格式都无所谓了,只要前端能显示。但仍然推荐存坐标点而不是图片,因为更 compact 更节省空间。

应该没有人比我更懂了,欢迎联系讨论: https://kaizhao.net/cn
sakae010
220 天前
我们是前端实现的,用的 cornerstonejs ,差不多就是楼上说的这样
ChenSino
220 天前
@tool2d 不懂啊,刚接触 dicom,我也觉得是 ai 应该一下处理所有,返回处理好的多帧文件
RVRGnXxwawP5kwKW
220 天前
@tool2d 他可能就是找了个 2d 的 segmentation 模型训练了下,3d 的模型难找,而且简单模型可能内存扛不住。
Jimmyisme
220 天前
ChenSino
220 天前
@kaiz 是给医生看的,我也是准备生成新的 dicom,现在就是不知道该如何用 java 的 dcm4che 实现把病灶的坐标显示在多帧 dicom 文件上
ChenSino
220 天前
@kaiz 是的
tiwizz
220 天前
建议使用 gdcm 来解析 dcm 文件,这个是多帧的。https://stackoverflow.com/questions/45193995/how-to-read-multi-frame-dicom-files-using-gdcm ,好像答案是 c#的,转一下就可以了吧,api 都一样。事实上都是分两层的吧,结果放在图像层上一层 canva 显示。
ChenSino
220 天前
@Yokira 好的,感谢提供思路,我试试前端处理
laqow
220 天前
java 应该就套个 imagej 随便搞
tiwizz
220 天前
ChenSino
220 天前
@chesha1 要用代码实现,因为要给医院用的,后续会有很多 dicom 文件
ChenSino
220 天前
@tiwizz ok ,感谢,我研究一下
D2h0VL89HMAU417B
220 天前
差点以为是我们公司了,我们有个公司最近也在搞这个

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/994024

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX