读取DICOM-RT文件以创建3D二进制矩阵?

时间:2011-03-14 19:15:20

标签: matlab image-processing dicom

我目前正在使用DICOM-RT文件(其中包含DICOM以及剂量递送数据和结构集文件)。我主要对“结构集”文件(即RTSS.dcm)感兴趣,该文件包含感兴趣的ROI的轮廓点集。特别地,轮廓点围绕肿瘤体积。例如,肿瘤将有一组5个轮廓,每个轮廓是一组包围肿瘤切片的点。

我正在尝试使用MatLab来使用这些轮廓点在二进制3D矩阵(0 =非肿瘤,1 =肿瘤)中构建肿瘤体积,并需要帮助。

一种可能的方法是将每个轮廓集填充为二进制切片,然后在切片之间插入体积。到目前为止,我已经使用 fill patch 函数来创建每个轮廓切片的二进制横截面,但是我很难弄清楚如何插入这些二进制切片进入3D卷。没有任何内置函数似乎适用于这个特定问题(虽然我可能只是错误地使用它们?)。简单的线性插值似乎也不合适,因为一个轮廓的边缘应该在所有方向上融入相邻的轮廓。

另一个选择是获取点并将它们细分(不先制作切片)。但是,我不知道如何使MatLab仅仅切除肿瘤表面并且不与肿瘤体积相交。目前似乎在肿瘤内发现三角形。如果我能把它放到一个表面上,我不知道如何把它转换成二进制3D矩阵体积。

有没有人有使用3D切片插值或细分技术的经验?或者可能存在任何相关的工具包?我被困了...... :(

我也对其他语言的方法持开放态度:我对C#和Python有点熟悉,虽然我认为MatLab会更容易处理矩阵运算。

提前致谢!

3 个答案:

答案 0 :(得分:3)

我不确定您从哪个程序导出您的dicom-rt结构文件,但我相信我找到了一个更优雅的解决方案,已在开源软件(GDCM,CMake,ITK)中进行了描述Insight期刊文章。

我正和我们的一位物理学家讨论类似的问题,我们看到了你的解决方案。如果您尝试二值化的结构没有任何凹陷,那就没关系,但如果是这样,它们将被渲染不准确。

此方法已针对Eclipse和Masterplan中的dicom-rt结构集进行验证。希望它有所帮助。

http://www.midasjournal.org/download/viewpdf/701/4

答案 1 :(得分:1)

我想我在另一篇文章(here)中找到了答案。不是试图在定义的轮廓之间插入“缺失的切片”,而是将轮廓点视为点云并找到凸包,这可能是一种更有效的方法。这个方法创建了我追求的二进制3D卷。

以下是我使用的代码,希望它对那些需要使用DICOM-RT文件的人有所帮助:


    function mask = DicomRT2BinaryVol(file)
    points = abs(getContourPoints(file));

    %%NOTE: The getContourPoints function simply reads the file using
    %%'dicominfo' method and organizes the contour points into an n-by-3
    %%matrix, each column being the X,Y,Z coordinates.

    DT = DelaunayTri(points);
    [X,Y,Z] = meshgrid(1:50,1:50,1:50);
    simplexIndex = pointLocation(DT, X(:), Y(:), Z(:));
    mask = ~isnan(simplexIndex);
    mask = reshape(mask,size(X));
    end

此方法是@gnovice在上面链接中发布的方法的略微修改版本。

答案 2 :(得分:0)

iTk是一个出色的图书馆:http://www.itk.org/ HTH