首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取DICOM-RT文件创建三维二进制矩阵?

读取DICOM-RT文件创建三维二进制矩阵?
EN

Stack Overflow用户
提问于 2011-03-14 19:15:20
回答 3查看 12.1K关注 0票数 3

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

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

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

另一种选择是取点,并对其进行tesselate (不首先切分)。然而,我不知道如何使MatLab只检查肿瘤的表面而不与肿瘤体积相交。目前它似乎在肿瘤内找到了三角形。如果我能把它变成一个曲面,我不知道如何把它转换成一个二进制的3D矩阵体积。

有没有人有3D切片插值或镶嵌技术的经验,可能适用于这里?或者可能存在任何相关的工具包?我卡住了..。:(

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

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-16 21:15:39

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

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

代码语言:javascript
复制
    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

此方法是上面链接中@g新手发布的方法的一个稍微修改过的版本。

票数 1
EN

Stack Overflow用户

发布于 2011-11-04 22:18:55

我不知道是从哪个程序导出dicom-rt结构文件,但我相信我找到了一个更优雅的解决方案,已经在一篇Insight杂志的文章中描述过了。

我和我们的一位物理学家讨论了一个类似的问题,我们看到了你们的解决方案。如果您试图二进制化的任何结构都没有凹腔,这是很好的,但是如果是的话,它们会被不准确地呈现出来。

对Eclipse和Masterplan中的dicom结构集进行了验证。希望能帮上忙。

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

票数 3
EN

Stack Overflow用户

发布于 2011-03-15 19:09:24

iTk是这类东西的优秀库:http://www.itk.org/ HTH

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

https://stackoverflow.com/questions/5303296

复制
相关文章

相似问题

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