文档

从三维胸部扫描中分割肺并计算肺体积

这个例子展示了如何使用活动轮廓(蛇)执行3-D分割,并使用Volume Viewer应用程序查看结果。

准备数据

本部分示例将人体胸部CT扫描数据加载到MATLAB工作空间中。要运行此示例,必须使用Add-Ons Explorer从MathWorks下载示例数据。看到使用Add-Ons资源管理器安装示例数据

将三维体积CT扫描数据加载到MATLAB工作空间。

负载chestVolume
名称大小字节类属性V 512x512x318 166723584 int16

转换CT扫描数据int16使之间的值规范化[0 1]

V = im2single(V);谁
名称大小字节类属性V 512x512x318 333447168单个

使用体积查看器应用程序可视化胸部扫描。

volumeViewer (V)

第一步:分割肺

这部分示例展示了如何使用主动轮廓技术在CT扫描数据中分割肺部。这是一种需要初始种子点的区域生长算法。这个例子使用Image Segmenter应用程序通过分割两个正交的2-D切片来创建这个种子蒙版,一个在XY平面上,另一个在XZ平面上。然后,该示例将这两个片段插入到3-D掩码中。实例将此掩码传递给activecontour功能,以创建一个三维分割的肺部在胸腔。(本例使用活动轮廓方法,但您可以使用其他分割技术来实现相同的目标,例如,洪水填充。)

提取XY和XZ维度上的中心切片。

Xy = v (:,:,160);XZ =挤压(V(256,:,:));

可视化2-D切片使用imshow函数。

figure, imshow(XY, []);figure, imshow(XZ, []);

在图像分割器应用程序中打开XY切片,然后单击阈值开始分割过程。

imageSegmenter (XY)

在“阈值”选项卡上,选择手动阈值然后移动阈值滑动块来调整分割,直到肺部看起来轮廓清晰。如果其他对象在阈值区域中出现分段,则没问题。点击创建面具保存结果。

在“分段”选项卡上,单击反掩码以分割的肺为前景。切除除肺以外的所有分节部分。因为这些都接触边缘,使用清晰的边界选项,删除它们。然后用填充物填满肺部出现的小孔填补选择。

使用侵蚀去除分割的小的无关区域。点击形态在形态学选项卡上,单击侵蚀面具操作选择。处理完成后,单击应用.图像的分割部分从蓝色变成黄色。然后关闭形态学选项卡。在“分段”选项卡上,单击显示二进制查看所创建的掩码。单击,保存掩码出口并将最后的分割保存在名称下mask_XY

使用相同的过程分割XZ片。在图像分割器应用程序中打开XZ切片。选择阈值.对于这个图像,您可以使用全局阈值选项。点击创建面具.在“分段”选项卡上,单击反掩码让肺成为前景。点击清晰的边界选项,以删除包含在阈值中的无关区域。用填充物填满肺部的小孔填补选择。若要移除剩下的非肺的小分段区域,请单击形态并选择侵蚀面具.扩大半径,直到这些多余的区域消失。点击应用并关闭形态学选项卡。在“分段”选项卡上,单击显示二进制查看所创建的掩码。点击出口并将最后的分割保存在名称下mask_XZ

创建一个3-D种子蒙版,用于activecontour函数。首先,创建一个与输入卷和插入卷大小相同的逻辑3-D卷mask_XY而且mask_XY在适当的空间位置。

掩码= false(大小(V));mask(:,:, 160) = mask_XY;面具(256 , :, :) = 面具(256年:,:)|重塑(mask_XZ (512, 318));

使用活动轮廓法对肺部进行三维分割。这可能需要几分钟。要获得高质量的分割,使用histeq将体素值分布在可用范围内。

V = histeq(V);BW = activecontour(V,mask,100,“Chan-Vese”);segmentedImage = V.*single(BW);

在体积查看器应用程序中查看分割的肺。使用渲染编辑器中的alphamap plot来操作不透明度映射,直到获得肺的良好视图。

volumeViewer (segmentedImage);

步骤2:计算分割肺的体积

在本例的这一部分中,使用regionprops计算肺体积(面积)的函数。

计算肺的面积使用regionprops函数与“区域”选择。

volLungsPixels = regionprops3(logical(BW),“体积”);

属性中的体素间距xy,z维度。(从前面的文件元数据中收集。)

xSpacing = 0.76;%(毫米)ySpacing = 0.76;%(毫米)zSpacing = 1.25;%(毫米)

计算肺活量,单位为升。

volLungs1 = volLungsPixels.Volume(1)*0.76*0.76*1.25*1e-6;volLungs2 = volLungsPixels.Volume(2)*0.76*0.76*1.25*1e-6;vollungsll = volLungs1 + volLungs2;
vollungs公升= 6.7157
这个话题有用吗?