3-D胸部扫描的肺段

这个例子展示了如何使用活动轮廓(蛇)进行三维分割。您可以使用Volume Viewer应用程序查看结果。

准备数据

将人体胸部CT扫描数据加载到工作区。要运行此示例,必须使用Add-On Explorer从MathWorks™下载示例数据。看到使用附加组件浏览器安装示例数据

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

转换CT扫描数据从int16将值规范化到范围[0,1]。

V = im2single (V);

使用Volume Viewer应用程序查看胸部扫描。从MATLAB®Apps工具条打开应用程序。您也可以通过使用volumeViewer命令并指定卷作为参数:volumeViewer (V).音量查看器有预设字母,旨在提供某些类型的数据的最佳视图。为了得到胸部扫描的最佳视图,选择ct-bone预设。

段肺

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

在XY和XZ两个维度提取中心切片。

XY = V (:: 160);XZ =挤压(V(256年:,:));

视图的2-D切片imshow函数。

图imshow (XY, [],“边界”“紧”);

imshow (XZ [],“边界”“紧”);

您可以在图像分割应用程序中执行分割。从MATLAB应用程序工具条打开应用程序或使用imageSegmenter命令,指定一个2d切片作为参数,imageSegmenter (XY)

要开始分割过程,单击阈值打开肺切片阈值选项卡。在“阈值”选项卡上,选择手动阈值选项,并移动阈值滑块以指定一个阈值,以实现对肺部的良好分割。点击创建面具接受阈值并返回分割选项卡。

应用程序执行以下代码来阈值图像。

BW = XY > 5.098000e-01;

在这个初始的肺分割后,清洁面具使用的选项完善面具菜单。

在应用程序中,你可以点击每个选项来反转面具图像,这样肺部就在前景(反掩码),除去肺以外的其他部分(清晰的边界),填充肺段内的空洞(填补).最后,使用形态选择平滑边缘的肺分割。在形态学选项卡上,选择侵蚀面具操作。执行这些步骤后,选择显示二进制并将蒙版图像保存到工作区中。

应用程序执行以下代码来改进掩码。

BW = imcomplement (BW);BW = imclearborder (BW);BW = imfill (BW,“黑洞”);半径= 3;分解= 0;se = strel (“磁盘”半径,分解);BW = imeroy (BW, se);maskedImageXY = XY;maskedImageXY (~ BW) = 0;imshow (maskedImageXY)

在XZ切片上执行相同的操作。使用加载图像,选择XZ变量。使用阈值法进行肺的初始分割。对于XZ切片,全局阈值选项创建适当的分段(调用imbinarize在下面的代码中)。和XY切片一样,在完善面具菜单创建一个抛光分割的肺。在形态学选项卡上的侵蚀操作中,指定半径为13以移除小的外部物体。

为了分割XZ切片并优化结果,应用程序执行以下代码。

BW = imbinarize (XZ);BW = imcomplement (BW);BW = imclearborder (BW);BW = imfill (BW,“黑洞”);半径= 13;分解= 0;se = strel (“磁盘”半径,分解);BW = imeroy (BW, se);maskedImageXZ = XZ;maskedImageXZ (~ BW) = 0;imshow (maskedImageXZ)

使用activecontour创建种子蒙版和分割肺

创建3d种子蒙版,您可以使用activecontour肺的分割功能。

创建一个与输入卷和插入卷大小相同的逻辑3-D卷mask_XYmask_XZ在适当的空间位置。

掩码= false(大小(V));面具(:,:,160)= maskedImageXY;面具(256年:,)=面具(256年:,:)|重塑(maskedImageXZ [1512318]);

利用该三维种子掩膜,利用活动轮廓法在三维体积内分割肺。这个操作可能需要几分钟。为了得到一个高质量的分割,使用histeq将体素值分散到可用范围内。

V = histeq (V);BW = activecontour (V,面具,100,“Chan-Vese”);segmentedImage = v *单(BW);

通过运行该命令,可以在Volume Viewer应用程序中查看分段的肺volumeViewer (segmentedImage).通过在呈现编辑器中操作alphamap设置,您可以获得肺的良好视图。

计算肺节段的体积

使用regionprops3函数与“体积”选择计算肺的体积。

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

中体素的间距xy,z维度,它是从原始文件元数据中收集的。元数据不包含在从Add-On Explorer下载的图像数据中。

spacingx = 0.76;spacingy = 0.76;spacingz = 1.26 * 1 e-6;unitvol = spacingx * spacingy * spacingz;* unitvol volLungs1 = volLungsPixels.Volume (1);volLungs2 = volLungsPixels.Volume (2) * unitvol;vollungsl = volLungs1 + volLungs2
volLungsLiters = 5.7726

另请参阅

||