主要内容

创建用于3d打印的STL股骨表面模型

这个例子展示了如何将分割掩码从CT图像转换为适合3d打印的STL表面模型。

医学图像数据的3d打印涉及多个临床应用和研究领域:

  • 使用患者特定解剖模型的手术治疗计划。

  • 制造定制义肢,植入物,或手术工具。

  • 组织和器官生物打印。

3-D打印可以创建计算机生成的表面模型的物理模型。从医学图像体中3d打印解剖结构的典型工作流程包括以下步骤:

  1. 分割感兴趣的区域,如骨头、器官或植入物。

  2. 将分割掩码转换为由人脸和顶点定义的三角曲面。

  3. 将三角测量写入STL文件,这是大多数商用3d打印机所接受的。

  4. 将STL文件导入3d打印软件,打印模型。

这个示例将股骨的面具转换为三角形表面,并写入适合3d打印的STL文件。

下载镜像卷数据

这个例子使用了股骨的二进制分割掩码。该面具是通过从医疗分割十项全能肝脏数据集中分割CT扫描而创建的[1使用the医学图像标签有关如何分割医学图像卷的示例,请参见使用医学图像标签器标记3-D医学图像

控件中标记图像时医学图像标签,应用程序将分割掩码保存为NIfTI文件。方法可以找到在应用程序会话中生成的掩码的文件路径LabelData的属性groundTruthMedical从会话导出的对象。

此示例下载股骨掩码作为数据集的一部分,该数据集包含原始腹部CT容量以及股骨和肝脏掩码。从MathWorks®网站下载数据集,然后解压缩文件夹。

zipFile = matlab.internal.examples.downloadSupportFile(“医疗”“MedicalVolumeLiverNIfTIData.zip”);filepath = fileparts(zipFile);unzip(zipFile,filepath) dataFolder = fullfile(filepath,“MedicalVolumeLiverNIfTIData”);

指定股骨掩码的文件名。

文件名= fullfile(数据文件夹,“Femur.nii”);

负载CT分割掩码

导入股骨面具通过创建medicalVolume对象为NIfTI文件。图像数据存储在体素财产。的VoxelSpacing属性指示体素是各向异性的,大小为0.7 × 0.7 × 5.0 mm。

medVol = medicalVolume(文件名)
medVol = medicalVolume with properties: Voxels: [512×512×75 uint8] VolumeGeometry: [1×1 medicalref3d] SpatialUnits: "mm" Orientation: "横向" VoxelSpacing: [0.7031 0.7031 5] NormalVector: [0 0 1] NumCoronalSlices: 512 NumSagittalSlices: 512 NumTransverseSlices: 75 PlaneMapping:["矢状" "冠状" "横向"]Modality: "unknown" WindowCenters: 0 WindowWidths: 0

VolumeGeometry属性medicalref3d对象,该对象指定空间引用信息。提取medicalref3d对象转换为一个新的变量,R

R = medVol.VolumeGeometry;

提取股骨等值面

指定等值面提取的等值。

等值= 0.05;

提取顶点和面,这些顶点和面定义了图像体积在指定等值面的等值面。

[faces,vertices] = extractIsosurface(medVol.Voxels,isovalue);

顶点输出提供了内在的ijk-曲面点的坐标,以体素为单位。在本征坐标中创建顶点的三角剖分。

triInstrinsic =三角剖分(双(面),双(顶点));

如果显示定义的曲面顶点从内在坐标来看,股骨表面被压扁了。内在坐标不能解释真实世界的体素维度,并且本例中的体素在第三维中比在前两个维中更大。

viewerIntrinsic = viewer3d;obj = images.ui.graphics3d.Surface(viewerIntrinsic,Data=triInstrinsic,Color=[0.88 0.84 0.71],Alpha=0.9);

将顶点转换为患者坐标

为了准确地表示股骨表面的点,变换ijk坐标在顶点定义的病人坐标系medicalref3d对象,R.的XY,Z输出定义xyz-表面点的坐标,单位为毫米。

I = vertices(:,1);J =顶点(:,2);K =顶点(:,3);[X,Y,Z] = intrinsicToWorld(R,I,J,K);verticespatientcods = [X Y Z];

对变换后的顶点进行三角剖分,verticesPatientCoords.所定义的原始连通性

triPatient =三角测量(double(faces),double(verticesPatientCoords));

显示由转换后的患者坐标定义的曲面。股骨表面不再受压。

viewerPatient = viewer3d;obj = images.ui.graphics3d.Surface(viewerPatient,Data=triPatient,Color=[0.88 0.84 0.71],Alpha=0.9);

创建STL文件

函数的长度对应于曲面中的顶点数财产。

triPatient
triPatient =三角测量属性:点:[21950×3 double] ConnectivityList: [43896×3 double]

方法可以减少表示曲面所需的三角形数量,同时保留关联对象的形状reducepatch函数。将股骨表面三角形的数量减少50%。的reducepatch函数返回一个带字段的结构而且顶点

reduce = reducepatch(faces,verticesPatientCoords,0.5);

对缩小的表面进行三角剖分。顶点的数目,由属性中的顶点数的一半triPatient

triReduced =三角剖分(double(duce .faces),double(duce .vertices))
triReduced =三角测量属性:点:[10976×3 double] ConnectivityList: [21948×3 double]

显示缩小的表面,以验证股骨的形状是保留的。

viewerPatient = viewer3d;obj = images.ui.graphics3d.Surface(viewerPatient,Data=triReduced,Color=[0.88 0.84 0.71],Alpha=0.9);

方法将表面数据写入STL格式文件stlwrite函数。

Name =“Femur.stl”;stlwrite (triReduced名称)

您可以使用STL模型文件作为大多数商用3d打印机的输入,以生成股骨的物理3-D模型。这张图片显示了STL文件的3d打印。

参考文献

医学细分十项全能。“肝”。任务。2018年5月10日访问。http://medicaldecathlon.com/

医疗细分十项全能数据集是在CC-BY-SA 4.0许可下提供的。所有保证和声明均被放弃。详细信息请参见license。

另请参阅

应用程序

功能

对象

相关的话题

Baidu
map