Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 读取DICOM-RT文件以创建3D二进制矩阵?

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

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

一种可能的方法是将每个轮廓集填充为二进制切片,然后对切片之间的体积进行插值。到目前为止,我已经使用fillpatch函数创建了每个轮廓切片的二进制横截面,但是我很难确定如何将这些二进制切片插值到3D体积中。内置功能似乎都不适用于此特定问题(尽管也许我只是在错误地使用它们?)。简单的线性插值似乎也不适合,因为一个轮廓的边缘应在所有方向上融合到相邻轮廓中。

另一种选择是获取要点并对其进行细化(不首先进行切片)。但是,我不知道如何使MatLab仅修饰肿瘤表面而不与肿瘤体积相交。目前看来在肿瘤内发现三角形。如果我只能将其放入一个表面,则不知道如何将其转换为二进制3D矩阵体。

是否有人对可能适用于此的3D切片插值或镶嵌技术有经验?还是存在任何相关工具包?我被卡住了... :(

我也对其他语言的方法持开放态度:尽管我假设MatLab会更轻松地处理矩阵运算,但我对C#和Python有点熟悉。

提前致谢!



回答:

我想我在另一篇文章( 这里 )中找到了答案。与其尝试在定义的轮廓之间插入“缺失的切片”,不如将轮廓点视为点云并找到凸包,这可能是一种更有效的方法。这种方法创建了我所追求的二进制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在上面的链接中发布的方法的略微修改版本。



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 20:48


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.