首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中以数组形式获取DICOM结构轮廓

在Python中以数组形式获取DICOM结构轮廓
EN

Stack Overflow用户
提问于 2017-10-10 20:26:20
回答 1查看 8.4K关注 0票数 10

因此,如果我有图像(CT、MRI等)或者甚至是放射治疗的剂量,我可以通过以下方式将剂量或图像值提取到一个数组中:

代码语言:javascript
复制
import dicom

ds = dicom.read_file("dicom_file.dcm")

print ds.pixel_array

这非常简单,让我能够随心所欲地操作图像/剂量。然而,通常你也有一个包含不同轮廓结构的结构文件,然后你可以在图像查看器或类似的东西中看到这些结构。再说一次,非常简单。

我的问题是,我也希望将这些单独的结构作为一个数组。如果我运行相同的代码,我只会得到TypeError: No pixel data found in this dataset.

我猜结构DICOM文件与剂量/图像DICOM文件的“制作”方式不同。

那么有没有我还没能找到的解决方案呢?我还查看了dicompyler_core包,但从我所看到的情况来看,没有任何方法可以“只是”将不同的结构转换为数组。

所讨论的DICOM文件的SOP类UID是RT Structure Set Storage。

EN

回答 1

Stack Overflow用户

发布于 2017-10-13 02:47:57

下面是一个交互式会话,使用pydicom附带的rtstruct.dcm文件演示了数据布局:

代码语言:javascript
复制
>>> import dicom
>>> ds = dicom.read_file("rtstruct.dcm", force=True)
>>> ds.dir("contour")
['ROIContourSequence']
>>> ctrs = ds.ROIContourSequence
>>> ctrs[0]
(3006, 002a) ROI Display Color                   IS: ['220', '160', '120']
(3006, 0040)  Contour Sequence   3 item(s) ----
   (3006, 0042) Contour Geometric Type              CS: 'CLOSED_PLANAR'
   (3006, 0046) Number of Contour Points            IS: '5'
   (3006, 0048) Contour Number                      IS: '1'
   (3006, 0050) Contour Data                        DS: ['-200.0', '150.0', '-20
0.0', '-200.0', '-150.0', '-200.0', '200.0', '-150.0', '-200.0', '200.0', '150.0
', '-200.0', '-200.0', '150.0', '-200.0']
   ---------
   (3006, 0042) Contour Geometric Type              CS: 'CLOSED_PLANAR'
   (3006, 0046) Number of Contour Points            IS: '6'
   (3006, 0048) Contour Number                      IS: '2'
   (3006, 0050) Contour Data                        DS: ['200.0', '-0.0', '-190.
0', '200.0', '-150.0', '-190.0', '-200.0', '-150.0', '-190.0', '-200.0', '150.0'
, '-190.0', '200.0', '150.0', '-190.0', '200.0', '-0.0', '-190.0']
   ---------
   (3006, 0042) Contour Geometric Type              CS: 'CLOSED_PLANAR'
   (3006, 0046) Number of Contour Points            IS: '6'
   (3006, 0048) Contour Number                      IS: '3'
   (3006, 0050) Contour Data                        DS: ['200.0', '-0.0', '-180.
0', '200.0', '-150.0', '-180.0', '-200.0', '-150.0', '-180.0', '-200.0', '150.0'
, '-180.0', '200.0', '150.0', '-180.0', '200.0', '-0.0', '-180.0']
   ---------
(3006, 0084) Referenced ROI Number               IS: '1'

数据以每个平面的一组坐标的形式存储(在本例中,通常是这样)。要获取一条等高线的数据,可以使用

代码语言:javascript
复制
>>> ctrs[0].ContourSequence[0].ContourData
['-200.0', '150.0', '-200.0', '-200.0', '-150.0', '-200.0', '200.0', '-150.0', '
-200.0', '200.0', '150.0', '-200.0', '-200.0', '150.0', '-200.0']

这些是一个接一个的(x,y,z)坐标的三元组。

您可以找到有关StructureSetROISequence序列中每个轮廓(名称等)的更多信息,以获得参考ROI号所给出的索引。

您可以通过循环遍历该特定等高线的ContourSequence中的每个数据集,并将它们一起附加到一个数组中,从而获得所有这些内容的完整数组。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46666762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档