这个例子展示了如何使用活动轮廓(蛇)进行三维分割。您可以使用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)
创建3d种子蒙版,您可以使用activecontour
肺的分割功能。
创建一个与输入卷和插入卷大小相同的逻辑3-D卷mask_XY
和mask_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),“体积”);
中体素的间距x,y,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