MATLAB图像处理:91:使用 Volume Segmenter 创建语义分割


Home


本示例说明如何使用Volume Segmenter应用程序创建体积的语义分割。该Volume Segmenter应用程序提供了许多方法,探索体积并分割对象。例如,您可以逐个切片或以 3-D 表示形式查看体积。要分割对象,您可以使用 ROI 绘图工具或画笔工具绘制感兴趣区域 (ROI)。本示例将一组 MRI 图像分割以标记大脑和肿瘤区域。该示例还标记了背景。
将体积数据加载到工作区
将体积加载到工作区中。本示例使用存储在 MAT 文件中的一组 MRI 大脑图像vol_001.mat。

load(fullfile(toolboxdir('images'),'imdata', ...
    'BrainMRILabeled','images','vol_001.mat'));

本命令将命名vol,尺寸是240×240×155 的体积加载到工作区中。
whos vol
  Name        Size                    Bytes  Class     Attributes
​
  vol       240x240x155            17856000  uint16    

打开Volume Segmenter
打开Volume Segmenter应用程序。单击MATLAB® 工具条上的Apps选项卡。在图像处理和计算机视觉部分,单击Volume Segmenter。

将体积加载到Volume Segmenter中
要在Volume Segmenter应用程序中加载体积,请单击应用程序工具条中的Open Volume。对于本示例,选择从工作区打开。在“导入体积”对话框中,选择您加载到工作区中的体积vol,然后单击“确定”。(您也可以在打开应用程序时使用以下volumeSegmenter命令指定体积:volumeSegmenter(vol)。)
Volume Segmenter应用程序在3-d显示切片窗格窗格内显示体积的3-d表示,并显示所述数据集的各个切片。

默认情况下,切片窗格显示数据的第一个切片。应用程序会在图像顶部显示切片的编号,例如 1/155。在这个数据集中,前几个切片不包含大脑的图像。
该应用程序还会使用默认名称为“标签”窗格中的分割自动创建标签Label1。您可以在标签窗格中定义多个标签。但是,要创建二进制蒙版,您必须只使用一个标签。
要更改标签名称,请双击标签名称。要更改与标签关联的颜色,请双击标签窗格中显示的颜色方块。您可以选择使用“打开标签”按钮将一组现有标签加载到应用程序中。
探索体积
要确定要分割的内容,请使用3-D 显示窗格和切片窗格浏览体积。
在3-D 显示窗格中,您可以使用鼠标旋转体积以从各个角度检查数据。您还可以在应用程序工具条的3-D 显示选项卡中自定义体积的显示。例如,如果您有描述体素相对大小的元数据,您可以在应用工具条的3-D 显示选项卡的空间参考部分中指定它。为了改善数据视图,您可以更改 3-D 显示中使用的背景颜色,修改显示的阈值和不透明度,并在显示中包含方向轴,如下图所示。借助脑部 MRI 数据,您可以看到要分割的颞叶中的肿瘤。

您还可以在“切片”窗格中查看体积的每个切片。使用窗格底部的滑块在切片之间移动。您可以在切片 35 到切片 88 上看到肿瘤。默认情况下,切片窗格显示沿 XY 轴定向的体积,但您可以使用分割器选项卡上工具条的方向部分中的按钮更改此设置。该切片窗格也是您使用绘图工具来定义的面具。

使用绘图工具标记体积中的区域
确定要分割的对象后,您可以使用应用程序工具条中“绘制”选项卡上的工具来定义区域。选择您想要从ROI工具使用绘图工具:徒手绘制,辅助徒手绘制和多边形,以及画笔工具。
从标记大脑开始。当一个对象嵌套在另一个对象中时,当肿瘤出现在切片上的大脑上方时,首先标记较大的区域。第一步是在标签窗格中创建标签。该应用默认提供一个标签,名为 Label1。要将标签名称更改为对您的应用程序更具描述性,请双击标签并输入新名称。要更改与标签关联的默认颜色,请双击标签标识符中的彩色方块并从“颜色”对话框中选择一种颜色。

在切片窗格中,导航到对象第一次出现的切片并使用绘图工具标记对象。在下图中,此示例使用画笔工具来标记大脑,但您可以使用任何绘图工具。

使用插值加速对象 ROI 创建
您可以逐个切片穿透体积,并在对象出现的每个切片上绘制一个 ROI。但是,Volume Segmenter应用程序提供了多种自动插值工具,可以帮助跨切片对对象进行分割。
要使用插值,您必须首先在两个切片上手动定义区域。您已经在对象出现的第一个切片上定义了区域,切片 35。使用相同的过程在它出现的最后一个切片上定义区域,切片 88。应用程序在滑块顶部放置两个条,使用与标签关联的颜色,以指示具有 ROI 的切片。该应用程序在滑块上放置两个条形,使用与标签关联的颜色,以指示具有 ROI 的切片。

在两个切片上定义对象后,单击Auto Interpolate。该应用程序会自动定义所有中间幻灯片的ROI。该应用程序使用蓝色条来指示具有 ROI 的所有切片,现在它们看起来像从切片 35 到切片 88 的实心条。

或者,在两个切片上定义 ROI 后,您可以单击Manually Interpolate。使用此选项,应用程序将打开手动插值对话框。您选择要插入的两个区域,区域一和区域二。要选择第一个区域,请使用对话框底部的滑块导航到第一个带有 ROI 的切片,切片 35,然后在显示的 ROI 内单击。要选择第二个区域,请单击区域二,导航到幻灯片 88,然后在显示的 ROI 内单击。选择两个区域后,单击运行以在所有介入切片上插入 ROI。

细化内插标签
使用插值后,检查单个切片以查看插值是否创建了令人满意的 ROI。请注意,切片 71 上的 ROI 并未填充您要分割的整个对象。您可以使用手动调节ROI画笔工具。或者,您可以使用“自动化”选项卡上的工具之一。例如,您可以使用Active Contours在未填充肿瘤全尺寸的切片上增加 ROI。

执行自定义处理
您也可以使用自己的算法来操作 ROI。在自动化选项卡上,单击添加算法。选择您希望处理是在每个 2-D 切片(基于切片)上还是在整个 3-D 体积(基于体积)上运行。

对于此示例,在基于切片时,选择新建选项并单击函数模板以创建一个对每个二维切片进行操作的新函数。该 App 在 MATLAB 编辑器中打开模板。将模板中的示例代码替换为您要使用的代码。您的函数必须接受两个参数:每个切片作为单独的图像和蒙版。您的函数还必须返回一个蒙版图像。
完成模板编辑后,保存文件。Volume Segmenter 应用程序会自动在“自动化”选项卡工具条中为您的函数创建一个按钮。要在一个切片上测试您的函数,请单击Run。默认情况下,应用程序仅将函数应用于当前切片。

在单个切片上测试您的函数后,您可以在所有切片或切片的子集上运行它。您可以从当前切片运行到末尾(编号最高的切片)或从当前切片返回到开头(切片 1)。您还可以通过指定起始切片和结束切片来指定切片范围。

当您选择方向选项之一时,应用程序会更新显示中的切片编号。您可以使用此显示查看处理进度。

创建附加标签
在每个切片上标记大脑后,标记出现在切片上的肿瘤,重复前面描述的过程。
首先,在标签窗格中定义一个新标签。单击标签窗格中的加号以创建新标签。

在切片窗格中,导航到对象第一次出现的切片,并开始使用绘图工具在每个切片上标记对象。在下图中,本示例使用画笔工具标记肿瘤。和以前一样,您可以在对象出现的每个切片上绘制对象,或者使用插值工具自动在多个切片上绘制。插值后,您可以使用绘图工具,例如橡皮擦,修改每个切片上的自动分割。

保存分割
完成对体积中的大脑和肿瘤的标记后,保存分割。单击Segmenter选项卡上的Save Labels并从多个选项中进行选择。您可以将标记的 MRI 数据保存为 MAT 文件或工作区中的变量。对于此示例,选择一个工作区变量。当您定义多个标签时,Volume Segmenter 应用程序会在工作区中创建一个与输入体积大小相同的分类体积。保存分割后,您可以选择打开自动保存,它会定期自动保存分割。

使背景成为单独标记的区域
在标记大脑和肿瘤并将分割保存到工作区作为分类体积后,您可能会注意到背景体素都具有值<undefined>。要标记背景体素以便它们也具有可识别的分类,请遵循与之前描述的类似过程:
在“标签”窗格中定义一个新标签,为标签指定一个描述性名称,然后选择所需的背景颜色。
在每个切片上标记背景。导航到一个切片,在“绘图”选项卡上选择“填充区域” ,然后单击背景中的任意位置。在每个切片上重复此过程。

添加背景时,它可能会在3-D 显示窗格中的体积可视化中隐藏其他标签。要在3-D 显示窗格中查看其他标记区域,请禁用背景标签的可见性。点击显示标签在3 d显示选项卡,单击自定义,并取消后台标签的可见性。
查看标记的体积
要查看蒙版,请使用labelvolshow函数: labelvolshow(brain_labels);。
======================================================================
我的测试结果及程序
下面是我测试的代码:

 


注:本文根据MATLAB官网内容修改而成。