Avizo用户使用手册-12

Avizo用户使用手册-12

[TOC]

Chapter 12

12 Avizo XFiber Extension 用户指南

Avizo XFiber Extension是一个扩展,它为分析纤维(fibers)、细丝(filaments)、隧道(tunnels)以及其他网络或树状结构提供了专门的支持。该选件通过自动、半自动和交互式工具来辅助分割与分析。

该扩展提供了在各种模态采集数据(例如X射线显微断层扫描)中追踪中心线的工具,以检测纤维或管状结构。

Avizo XFiber Extension包含许多分析工具,用于计算高级纤维统计量。可以计算并绘制各种分布和属性。各种工具还允许基于属性和特性对纤维进行过滤。

Avizo XFiber Extension还包含Filament Editor工作间,它提供了自动与交互式的追踪工具,用于在纤维网络和其他丝状结构中分割纤维的中心线并测量其厚度。该工作间还支持编辑通过骨架化得到的空间图。

  • Filament Editor入门
  • 以钢筋混凝土中的钢纤维为例的检测工作流
  • 从空间图提取曲面
  • 计算高级统计量

12.1 Filament Editor入门

本节提供Filament Editor的分步入门介绍。要使用Filament Editor,需要一个Avizo XFiber Extension许可证。Filament Editor是Avizo中一个专用的工作间,它被设计用于从图像数据中提取丝状结构的复杂三维网络,并通过用标签标量数据编辑和注释该网络来对数据进行后处理。在本教程中,我们希望通过提取一个无脊椎动物神经元的树突纤维网络来演示该编辑器的原理。我们将使用的数据集描绘了蜜蜂脑中的一个神经元,它是用共聚焦显微镜成像的,由柏林自由大学的R. Menzel教授友情提供。

本节将讨论以下主题:

  • 浏览体数据
  • 网络的自动提取
  • 交互式追踪
  • 为网络打标签并进行可视化

要访问Filament Editor,请单击Workrooms Toolbar中的图标。我们将从加载3D图像数据集开始我们的工作。

  1. 加载位于data/tutorials/neuron子目录中的文件neuron.am

12.1.1 体数据的浏览

图像数据加载完成后,查看器的左侧面板显示该体的一张2D切片,而查看器的右侧面板显示3D对象。为了对该神经元在空间中如何延展有一个清晰的认识,我们将通过切片、窗宽窗位以及灰度值渲染来浏览该体数据。

Window Level(窗宽窗位):

  1. 选择Window Level图标。
  2. 单击2D查看器。
  3. 按下鼠标按钮并保持。
  4. 左右拖动鼠标光标可改变窗宽,上下拖动可改变窗位中心。
  5. 把窗宽窗位设置在30–80左右。
  6. 单击3D,使用带明暗的体渲染可视化所选中的体素。

Browse Slice(浏览切片):

该浏览工具允许使用鼠标在2D查看器(或MPR查看器)中浏览一个图像堆栈。

  1. 选择Browse Slice
  2. 单击2D查看器。
  3. 按下鼠标按钮并保持。
  4. 上下拖动鼠标光标可在图像堆栈中向前或向后滚动。如果你使用的是带滚轮的鼠标,可以用滚轮来代替Browse Slice
  5. 单击查看器并滚动鼠标滚轮,即可在图像堆栈中滚动。

Image Thickness(图像厚度):

可以通过滑动Image Thickness滑块来设置切片的厚度。在显示一张厚切片时,数据值按原始各切片值的最大强度来计算。

  1. 把Image thickness设为25
  2. 单击3D Thickslice,在3D查看器中可视化该厚切片。

图 12.1:设置Image Thickness之后的Filament Editor

12.1.2 树突树的自动提取

作为第一步,你可能希望自动提取出可作为该神经元骨架草稿版本的东西。这可以用Filament EditorAuto Skeleton工具来实现。

  1. Window Level设为37 137
  2. 单击Window Level滑块旁边的3D Volume Rendering。3D查看器会显示该神经元主要分支的带明暗体渲染,并对自动追踪流程将会视为神经元一部分的内容给出一个大致估计。
  3. Tool Box中选择Trace标签页,并单击Auto Skeleton框中的Run。几秒钟后,你会在2D查看器中看到绿色的线和蓝色的点。在3D查看器中,灰色的球体会与预览渲染一起显示出来。如果你没有看到它们,请单击View All或按空格键把3D查看器居中到它们上面。
  4. 调整在你激活3D渲染时出现的Alpha滑块。你可以透过该渲染看到所生成的图。

Auto Skeleton工具会根据用户定义的窗宽窗位追踪相连的区域,并把这些区域的中心线转换为由点、线段和节点构成的图——它们是Spatial Graph数据类的元素。因此,骨架化的结果是一个Spatial Graph对象,它在3D查看器中被可视化为球和线,在2D查看器中被可视化为由绿色线连接的蓝色点。

取决于数据的质量以及所选的窗宽窗位,骨架化的结果通常会在网络中显示出若干互不相连的元素和环路。互不相连的元素会把单个神经元拆分为若干子图。另一方面,环路是图中若干线段互相连接成环的部分。在某些生物对象(例如神经元环路)中这必定不会出现。为了识别图和环路,Filament Editor提供了以下专用工具:

  1. Edit面板中单击Identify Graphs,以自动检测并标记该Spatial Graph对象中的所有图(即所有连通分量)。这会在Label Editor中创建一个名为Identified_Graphs的新标签组,所有被识别出的图都以Graph0、Graph1、…、GraphN的形式列在该标签组之下。
  2. 要直观地识别它们,请单击Identified_Graphs列表中的某一项。所选项会在两个查看器中都以红色高亮显示。
  3. Identified_Graphs下选择Graph2,按住SHIFT同时选择Graph25,然后单击工具栏中的Delete selected nodes, edges and points来移除它们。
  4. 再次单击Identify Graphs。现在,你应当只剩下两个图。
  5. 通过移动Tool BoxView标签页里的Node Scaling Factor滑块来缩放节点(详见下文)。

此时,我们只有两个图:Graph0是那棵大树,而Graph1只有三条线段和四个节点。切换回Tool Box中的Edit标签页。

  1. Identified_Graphs下的Label Editor中选择Graph1
  2. 在工具栏中激活Select a single node, edge or point,然后按住CTRL同时在3D查看器中单击Graph0上最近的节点。
  3. 在工具栏中选择Connect selected nodes, edges and points以连接该图。
  4. 再次单击Identify Graphs。此时,你应当只剩下一个图。
  5. 单击Identify Loops以获得另一个标签组Identified_Loops
  6. Identified_Loops下选择Loop2,并通过单击Delete selected nodes, edges and points来移除它。请注意,一条线段是由两个节点定义的。因此,当你移除一个节点时,与之关联的线段也会被移除。因此Identified_Loops包含的是构成环路的线段,而不包含连接它们的节点。不过,这可能会产生孤立的点,它们可以用Delete selected nodes, edges and points移除。

或许值得指出的是,Auto Skeleton工具也可以作为一个计算模块使用——在Object Popup中选择Image Processing / Skeletonization / Auto Skeleton即可。此外,Segmentation Editor中还提供了一套丰富的工具,用于执行骨架化流程所需的阈值分割。最后,在严格的树状拓扑情形下,把搜索限制为一棵树可能是有利的。在这种用例中,你可能希望使用Centerline Tree模块来提取一个拓扑上保证为树的图。

在结束本小节之前,我们应当保存已经创建的Spatial Graph数据对象,它在本教程后续步骤中会很有用。

  1. 切换回Project View,把名为neuron.Smt.SptGraph的对象保存到你选择的目录中,然后从Project Graph View中把它移除。
  2. 再次切换到Filament Editor以准备下一步。

图 12.2:用Auto Skeleton工具、Identify Graphs与Identify Loops得到的Spatial Graph对象。

12.1.3 纤维追踪

Interactive Tracer工具使你能够使用我们所开发的一种创新追踪算法,直接在灰度值上追踪纤维。用户设定某一线段的起点和终点,Interactive Tracer就会相对于用户定义的数据窗口,找出连接这两点的最短线。现在,我们可以使用Interactive Tracer来重新追踪神经元的各个线段。

为了清楚地理解如何使用该追踪器,我们将尝试重新追踪上一段中所提取神经元树的一小部分。

  1. 单击Graph Data端口处的New,以创建一个新的Spatial Graph数据对象。
  2. 在2D查看器中单击。使用Browse Slices工具或鼠标滚轮在该体中切片,直到你到达该神经元的根部。
  3. Image thickness slider设为10以获得更好的可视化效果。
  4. 通过单击工具栏中的Trace Filament激活Interactive Tracer,并确保Trace标签页中选中了Thick structures选项。

请注意,只要Trace Filament处于高亮状态,Interactive Tracer就始终是活动的,而且只有在2D查看器处于活动状态时它才能被触发。

如果你把鼠标移到2D切片上,那么当光标位于黑色区域上方时它会呈十字形状,而当它位于窗宽窗位范围内的体素上方时则变为准星形(即圆圈内的十字)。准星形状表明可以设置追踪关键点。正如你稍后会看到的,当指针位于某条已追踪的线段(例如绿色线)上方时,准星中会出现一个小的P。这表明单击会把最近的点选为关键点。同样,当光标位于某个节点上方时,准星中会显示一个N,此时单击会把该节点选为关键点。此外,当追踪工具处于Append模式时,光标会变为红色,意味着下一次单击将会在先前所选的关键点与当前关键点之间触发一次追踪动作。

  1. 在树根的某个灰度值上单击以开始追踪。
  2. 继续向前切片并设置更多的点,直到你到达第一个分叉,然后单击它。
  3. 停用Interactive Tracer(例如通过单击Select a single node, edge or point工具,或者再次单击它的图标)。

如果你单击Identify Graphs,你会看到只有一个图。你也可以通过单击Edit标签页中的Graph Info来访问一些统计信息。这会打开一个电子表格窗口,其中包含该图中所有线段的列表。该电子表格是交互式的(也就是说,如果你单击某一行,相应的线段就会在查看器中被高亮显示)。

请重复上述操作,从根部开始追踪最初的若干分支段。

12.1.4 网络的可视化

Spatial Graph数据对象不仅能够存储空间结构(即网络的几何形状),还能把标量数据和标签数据与之关联起来。

标签也可用于根据子图的拓扑结构为它们打上标签或注释。在这个示例中,我们希望把一个神经元树的三个主要分支的Topology标记为CentralLeftRight

如果你已经按第二小节所述提取了该图,那么现在应当加载你先前保存的文件;否则,你应当往回退两步并阅读树突树的自动提取小节。

  1. 右键单击Label Editor并选择Add graph label group / Empty label group
  2. 右键单击所创建的标签并把它重命名为Topology
  3. 右键单击Topology标签并选择Add label。重复该操作以添加三个标签。
  4. 选中并右键单击每一个所创建的标签,把它们分别重命名为CentralRightLeft
  5. 选择Draw a line to select nodes, edges and points,并用套索选中右侧的分支。你可以把Draw a line to select nodes, edges and points工具与Alt + 右键单击组合使用来取消套索选择,或者与CTRL组合使用来添加元素。
  6. 右键单击标签Right并选择Assign selection
  7. 重复上面两项以标记CentralLeft分支。请注意这只是一个练习,在选择CenterRightLeft线段时并不要求你选得完全精确。现在,选择Tool Box中的View标签页。
  8. 使用Node scaling factor滑块缩放节点。
  9. Node Coloring中选择Topology,从而根据标签为节点着色。
  10. 对线段重复上一项。
  11. 单击Right标签的颜色按钮并选择一种新的颜色。

若要获得更高级的网络可视化效果,你可以切换到Project View。如果这样做,你可以把一个Spatial Graph View模块附加到你先前所创建的Spatial Graph对象上。

图 12.3:用Auto Skeleton与追踪工具得到的Spatial Graph。

12.1.5 使用Segmentation Editor提取网络的替代方法

Filament Editor中,通过单击Workrooms Toolbar中的Segmentation Editor即可切换到Segmentation Editor。关于Segmentation Editor的深入介绍,请参阅相关的文档和教程。就本教程而言,请尝试以下步骤:

  1. 如果标签neuron.labels不可用,请单击位于用户界面上部的Label field端口中的New,以创建这个新的标签图像。
  2. Material List中右键单击Inside材料,选择Rename Material,并输入neuron
  3. 在用户界面底部的Tools工具箱中,选择Threshold Tool
  4. Threshold Tool区域中,把阈值设为100–255,选中All Slices选项并单击Select Masked Voxels
  5. 在选区中,单击+把所选区域指派给neuron材料。
  6. 切换回Filament Editor,并从Image Data下拉菜单中选择neuron.labels
  7. 通过单击Auto Skeleton工具中的Run对该标签图像进行骨架化。

12.2 检测纤维或管状结构

本教程需要Avizo XFiber Extension,它为追踪纤维、细丝或其他具有相对固定且恒定直径的隧道的中心线提供了专门的支持。该方法能够对单根纤维的中心线进行稳健而精确的追踪,即使在数据有噪声和/或纤维密集排列的情况下也是如此——只要这些纤维是可分辨的,即直径上至少有若干个体素。

本教程说明如何从各种模态的采集数据中提取管状结构的中心线。它分为三个步骤:

  1. 如何计算归一化互相关以增强纤维结构。
  2. 如何追踪中心线以创建分离纤维的空间图。
  3. 如何从纤维的空间图导出统计量。

本教程所使用的数据集是一块超高性能纤维增强混凝土(UHPFRC),由斯洛文尼亚国家建筑与土木工程研究所的Alenka Mauko博士和Aljosa Sajna博士( www.zag.si ; aljosa.sajna@zag.si )友情提供,取自斯洛文尼亚Log Cezsoski桥,属于WP7项目”中欧公路结构的评估与修复”(ARCHES) http://arches.fehrl.org/ (见图12.4)。

图 12.4:超高性能纤维增强混凝土的体渲染。

本教程将应用在该数据集的一个裁剪后的体上。为了把该工作流应用到你自己的数据上,你可能需要按下文更详细的说明来调整这些参数。

本教程假定你已熟悉Avizo的基本概念。特别是,你应当知道如何加载文件、如何与查看器交互,以及如何把模块连接到数据对象。所有这些主题都在Avizo用户指南的第2章——入门中有介绍。请注意,本教程中所介绍的模块需要一块支持CUDA Compute Capability 1.3或更高版本的NVIDIA显卡。要查看你显卡的CUDA Compute Capability,请参阅NVIDIA的CUDA GPU列表( http://developer.nvidia.com/cuda-gpus/ )。

12.2.1 计算归一化互相关

模块Cylinder Correlation可用于增强各种模态采集数据中的纤维或管状结构,例如本教程中所展示的X射线显微断层扫描。X射线显微断层扫描是追踪这些结构中心线之前的第一步。该模块在所有3D朝向上计算图像与一个空心或实心圆柱模板的互相关。要把该模块应用到一个示例数据集上,请按如下步骤操作:

  1. AVIZO_ROOT/data/tutorials/fibertracing/concrete.am加载到Avizo工作区中。Project View中会出现一个绿色的数据图标。
  2. 把一个Cylinder Correlation模块(在Fiber Tracing类别中)附加到该数据上。
  3. 按图12.5所示设置参数。

图 12.5Cylinder Correlation模块的默认参数设置。

所有参数配置完成后,请单击Apply。对于这个示例项目,相关性场的计算需要数分钟。请注意,这个耗时并不代表整个数据集所需的时间,因为耗时并不是数据集尺寸的线性函数。该算法要求你在内部为数据集添加一个固定尺寸的边界;这对小数据集的耗时有影响,但对大数据集的影响可以忽略不计。取决于显卡和输入图像数据的大小,完整图像数据的计算可能需要长达数小时。例如,在一块配备1GB显存的GeForce 8800 GT上,计算一幅尺寸为2000 x 2000 x 200的图像大约需要20小时。为了测试该算法,可以考虑使用Crop Editor裁剪输入图像数据。

作为结果,会有两个新对象concrete.CorrelationFieldconcrete.OrientationField被连接到Cylinder Correlation模块上。concrete.CorrelationField数据对象存储最大互相关,而concretes.OrientationField存储与该相关性相对应的圆柱朝向。

这两个数据对象还在各自的数据参数中存储了关于用来计算相关性的圆柱模板的信息。随后,这些信息将被用于正确地预设Trace Correlation Lines模块的参数。

从这两个场中,可以按下一节所述提取管状结构。

但首先,我们要更详细地解释Cylinder Correlation的各个参数。

12.2.1.1 GPU计算

互相关是在GPU上计算的。由于GPU内存有限,端口CUDA memory允许你限制用于该计算的GPU内存量。该预设值会根据所选CUDA Device上的可用内存自动估算。如果你同时运行其他消耗GPU内存的进程,互相关的计算可能会因内存不足而失败。在这种用例中,你应当设置一个合理的上限。在实践中,取空闲内存的80%应当可行。

计算互相关很耗时。为了尽量减少计算时间,可以考虑裁剪图像数据以移除空白空间。不过,不要裁剪得过紧(参见第12.2.1.3节)。

如果你计划处理许多具有相似特性的数据集,通常值得投入一些时间来确定最低的合理分辨率——更高的分辨率并不会实质性地提高质量。合适的体素尺寸取决于数据,但对于诸如玻璃纤维或碳纤维之类的实心圆柱形纤维,纤维直径约为5个体素的表观分辨率应当就能给出良好的结果。

12.2.1.2 圆柱模板

Cylinder Correlation模块会尝试在所有朝向上把一个圆柱模板与数据做相关,从而为每个体素标注一个分数(即最大互相关)。在开始计算之前,需要把该模板定义好,使其与数据中的纤维结构相吻合。这是通过指定圆柱的长度和半径来完成的。为了方便地设置这些参数,提供了一个可视化圆柱模板:

  1. 启用Visual Cylinder端口(见图12.6)。
  2. 查看器中会出现一张切片以可视化该数据。平移并旋转该切片,使其最好地贴合某个纤维结构。

图 12.6Cylinder Correlation模块的Visual Cylinder端口。

  1. 一旦某根纤维沿其主朝向可见于该切片上,就在该纤维上用鼠标中键单击两次,以用一个起点和一个终点设定圆柱的长度。如果长度不令人满意,请在数据上重复中键单击两次(见图12.7)。

图 12.7:可视化圆柱的长度设定。

  1. 设定圆柱模板的半径。现在可以更改切片,以便看到已在其上设定了可视模板的那根纤维的横截面。在可视模板上左键单击并移动鼠标,即可交互式地改变圆柱半径,直到它与切片上的横截面相吻合(见图12.8)。

图 12.8:可视化圆柱的半径设定。

通过使用可视化圆柱,Outer Cylinder RadiusMask Cylinder RadiusCylinder Length这几个端口会被自动设置。在可视化该模板的同时更改这些端口,会交互式地改变圆柱的形状。

或者,这些值也可以基于关于结构的先验信息,或者基于从图像数据上所做的测量。测量工具(即查看器工具栏中的Measurement)对于确定合理的长度和半径往往很有用。请注意,参数是以半径来指定的;直径需要除以2。在下面几节中,我们以混凝土纤维为例:

  • 半径:对于钢纤维之类的结构,实心圆柱模板是合适的。只需指定Outer cylinder radius,并把Inner cylinder radius设为0。根据对图像数据的测量(见图12.9),这些纤维的直径为8,所以Outer cylinder radius取4应当就可以。请注意,参数是以半径指定的,因此直径需要除以2。在这个示例中,Mask cylinder radius可以设为8(即直径为16)。在空心圆柱的情形下,应当指定一个非零的内圆柱半径。此时圆柱壁的厚度就等于Outer cylinder radius - Inner cylinder radius。采集伪影(例如收缩)可能会导致纤维的真实尺寸与图像中的尺寸之间存在细微差别。
  • 长度:Cylinder length以物理单位定义模板长度。较长的模板对噪声更稳健,但它同时也降低了对弯曲结构以及结构末端的敏感性。较长的模板还要求你离图像边界更远(参见第12.2.1.3节)。合理的折中取决于图像质量和待提取的结构。在这个示例中,圆柱长度取30是一个良好的折中。对于其他结构,这个取舍会有所不同。
  • 对比度:这指定待检测信号的对比度。例如纤维比周围图像更亮,因此你应当选择Bright on dark

12.2.1.3 局限性

边界:相关性场在靠近边界处(即在半个圆柱尺寸以内)可能包含伪影。原因在于,互相关是在傅里叶空间中用离散傅里叶变换(DFT)、并采用周期性边界条件计算的。这一点的实际含义是,靠近某个边界的模板会感知到图像对侧边界附近的结构。

图 12.9:用于确定纤维Cylinder Correlation参数的长度测量。洋红色:Cylinder length;绿色:两倍的Outer cylinder radius;蓝色:两倍的Mask cylinder radius

图像信号中的锐利边缘(例如前景到背景的快速过渡)也可能产生不期望的效应。一般性的建议是:

  • 采集图像数据时,使相关结构离图像边界足够远。
  • 裁剪时保留足够多的原始图像数据,使相关性场的相关部分远离图像边界;同时,理想情况下应当一直到边界都有合理的图像信号(即不要有向黑色的锐利过渡)。
  • 要么在运行Trace Correlation Lines之前,把得到的相关性场裁剪到离边界足够远的那一部分,并把朝向场也裁剪到相同尺寸;要么在得到的线看起来离边界近得不合理时把它们清理掉。

模板尺寸:该模板被采样到一个立方网格上,而该网格必须能装进图像体中。对于较大的Cylinder length,该模板可能对图像体来说过大。特别是,如果图像体的Z切片很少,这可能成为一个限制。要成功应用Cylinder Correlation,请减小Cylinder length直到该模板能够装入。如果这样做仍不能得到令人满意的结果,可以考虑使用Crop Editor添加空的Z切片来增大该体。一般来说,把模板保持较小是个好主意,因为计算时间会随模板尺寸增加。

12.2.2 追踪中心线

模块Trace Correlation Lines基于上一步所计算的concrete.CorrelationFieldconcrete.OrientationField来追踪管状结构的中心线。

以下端口会根据用于计算相关性的圆柱模板参数被自动设置:min line distance(即设为圆柱直径)、min line length(即设为圆柱长度)、search cone(即设为圆柱长度)。

  • 把一个Trace Correlation Lines模块(在Fiber Tracing类别中)附加到concrete.CorrelationField上。
  • 选择concrete.OrientationField作为Trace Correlation Lines模块的Orientation field输入。
  • 按图12.10所示设置参数。

图 12.10Trace Correlation Lines模块的默认参数设置。

Trace Correlation Lines所追踪的线,起始于相关性值大于Min seed correlation值的那些点。检查相关性场以确定一个初始值,进而细化选择,是很有用的做法。如果提取出的线太少,可以考虑降低该值。如果提取出的线太多,可以考虑提高该值。初始值的选取应当使所有具有更大相关性值的点都明显是有用的种子点。这可以通过多种方式做到,例如使用一个Ortho Slice(见图12.11和图12.12,其中Min seed correlation取合理数据范围的最大值,Min continuation quality取该范围的最小值)。或者,也可以使用一个Isosurface并调整其threshold,使该等值面只包含明显可用作种子点的部分。然后把这个阈值用作Min seed correlation

图 12.11:相关性值的直方图。

图 12.12:穿过相关性值的切片。

并不要求某根给定的纤维在相关性分数图像上看起来是连续的,但如果一根纤维没有至少1个体素高于Min Seed Correlation阈值,它就无法被追踪到。

Min continuation quality可以用类似的方式确定(见图12.11)。它控制线追踪在何处停止。如果线出乎意料地短,请尝试更小的值。如果线太长,请尝试更大的值。

Min Line Distance的用途是避免在其他线的直径内部又追踪出额外的线——如果相关性值没有被清晰地分开,这种情况就可能发生。要确定一个合理的距离值,请使用测量工具(即查看器工具栏中的Measurement)。

另一个依赖于数据的参数是Direction coefficient。如果这些管状结构大体上是直的,较小的值是合适的。如果数据中还包含弯曲的线,较大的值可能更合适。

你可能还必须把所有以物理单位表示的其他参数调整到适合你数据中相关结构的正确尺度。详情请参阅该模块的Documentation

所有参数配置完成后,请单击Apply。对于这个示例网络,中心线的提取只需几秒钟。对于更大的数据集,你应当预期计算需要数分钟。

Trace Correlation Lines模块的结果是Spatial Graph类型。要显示该对象,请在Project View中右键单击结果的图标,并从上下文菜单中选择Spatial Graph View(即在Display类别中)。要获得关于该数据结构的更多信息,请单击Project View中的图标,然后单击Properties Area中的Help

12.2.3 为追踪结果计算基本统计量

Trace Correlation Lines模块计算出的Spatial Graph可以提供基本统计量。该模块在内部应用一个Spatial Graph Statistics模块来计算每条中心线的统计量,包括:

  • Chord Length(弦长):分段起点与终点之间的直线距离
  • Curved Length(曲线长度):弯曲的线段长度
  • Tortuosity(弯曲度):Curved Length / Chord Length
  • Orientation(朝向,Theta与Phi):起点与终点之间线段的朝向

这些统计量作为属性存储在空间图中。用Spatial Graph模块(即Table端口)的Show按钮,可以在表格视图中显示这些属性。该图也可以用Spatial Graph View模块来显示(见图12.13)。

也可以对这个带属性的图使用一个Spatial Graph Statistics模块,把统计量输出到一个常规的电子表格中(见图12.14)。

  1. 把一个Spatial Graph Statistics模块附加到所生成的SpatialGraph上。为此,请右键单击绿色的数据对象CorrelationLines。在上下文菜单中,选择Measure And Analyze。然后单击SpatialGraphStatistics
  2. SpatialGraphStatisticsProperties Area中单击Apply。一个如图12.14所示的concrete.statistics电子表格会被生成并显示在Project View中。
  3. 选择concrete.statistics电子表格,然后单击Show。会显示一个新的对话框,以表格形式呈现这些结果。

图 12.13:用Spatial Graph View模块显示中心线朝向。

图 12.14Spatial Graph Statistics模块的输出电子表格。

你也可以加载项目concrete_tutorial.hx来完成本教程的这些步骤。把Cylinder CorrelationTrace Correlation Lines应用到整个示例数据集上的结果如图12.15所示。

图 12.15:把Cylinder CorrelationTrace Correlation Lines应用到图12.4的UHPFRC上。

12.2.4 参考文献

  1. Weber, B., Greenan, G., Prohaska, S., Baum, D., Hege, H.-C., Mueller-Reichert, T., Hyman, A. A., and Verbavatz, J.-M. (2012). Automated tracing of microtubules in electron tomograms of plastic embedded samples of caenorhabditis elegans embryos. Journal of Structural Biology, 178(2):129-138.
  2. Rigort, A., Guenther, D., Hegerl, R., Baum, D., Weber, B., Prohaska, S., Medalia, O., Baumeister, W., and Hege, H.-C. (2012). Automated segmentation of electron tomograms for a quantitative description of actin filament networks. Journal of Structural Biology, 177:135-144.

12.3 计算高级统计量

本教程需要Avizo XFiber Extension,它为分析纤维、细丝、隧道以及其他网络或树状结构提供了专门的支持。本教程不讲解如何从灰度数据中提取纤维中心线(更多细节请参阅如何追踪中心线以创建分离纤维的空间图)。

本教程说明如何量化和分析纤维材料:

  • 如何分析接触点
  • 如何提取关于纤维形状的统计量
  • 如何基于某个给定属性计算并绘制纤维的分布
  • 如何移除接触到边界框的纤维
  • 如何基于属性过滤纤维
  • 如何提取并可视化局部统计量
  • 如何在3D中绘制朝向

本教程所使用的数据集是一块超高性能纤维增强混凝土(UHPFRC),由斯洛文尼亚国家建筑与土木工程研究所的Alenka Mauko博士和Aljosa Sajna博士( www.zag.si ; aljosa.sajna@zag.si )友情提供,取自斯洛文尼亚Log Cezsoski桥,属于WP7项目”中欧公路结构的评估与修复”(ARCHES) http://arches.fehrl.org/

本教程将应用在该数据集的一个裁剪后的体上。为了把该工作流应用到你自己的数据上,你可能需要按下文说明来调整这些参数。

本教程假定你已熟悉Avizo的基本概念。特别是,你应当知道如何加载文件、如何与查看器交互,以及如何把模块连接到数据对象。所有这些主题都在Avizo用户指南的第2章——入门中有介绍。请注意,本教程中所介绍的模块需要一块支持CUDA Compute Capability 1.3或更高版本的NVIDIA显卡。要查看你显卡的CUDA Compute Capability,请参阅NVIDIA的CUDA GPU列表( http://developer.nvidia.com/cuda-gpus/ )。

12.3.1 分析接触点

本教程将展示如何把一个Spatial Graph转换为二值数据集,以便使用可用于图像的量化模块。作为一个示例,我们将识别并量化纤维的接触面积:

  1. AVIZO_ROOT目录把data/tutorials/fibertracing/concrete_tutorial.hx加载到Avizo工作区中。
  2. Convert类别中的一个Convert Geometry to Label模块附加到Trace Correlation Lines模块的输出(concrete.CorrelationLines)上。
  3. 按图12.16所示设置其他参数。

图 12.16Convert Geometry to Label模块的默认参数设置。

  1. 所有参数配置完成后,请单击Apply。该模块会创建一份标签数据,其中纤维的中心线被逐条单独打上标签。标签Id与图Id之间存在直接的对应关系。
  2. 把一个voxelized rendering模块附加到转换后的数据集上,以便在原始灰度数据集内部可视化它(见图12.17)。

图 12.17:相关线的体素化渲染。

  1. 要把中心线重新膨胀到与原始数据相吻合,请把一个Ball Dilation模块附加到concrete.converted上,并按图12.18所示设置参数:

图 12.18Ball Dilation模块的默认参数设置。

  1. 所有参数配置完成后,请单击Apply。把voxelized rendering模块附加到Ball Dilation的结果上。中心线被重新膨胀回它们的原始尺寸,如图12.19所示。

图 12.19:膨胀后的中心线。

  1. 最后,可以使用Label Interfaces来识别接触点。把一个Label Interfaces模块附加到convert.dilated数据上,并按图12.20所示设置参数。

图 12.20Label Interfaces模块的默认参数设置。

  1. 单击Apply
  2. 现在接触点已被识别出来。把voxelized rendering模块附加到concrete.interfaces上(见图12.21)。

图 12.21:识别出的接触点。

  1. 这些接触点可以被量化。使用一个Labeling模块为接触点打标签,保留默认值不变,然后单击Apply
  2. 把一个Label Analysis附加到打好标签的接触点concrete.labels上,以获得基本统计量。保留默认值,然后单击Apply(见图12.22)。

图 12.22:接触点的基本统计量。

本教程可在此处获取:data/tutorials/fibertracing/concrete_contact_tutorial.hx

12.3.2 提取关于纤维形状的统计量

在这一步中,会计算关于纤维形状的统计量,例如:Curved length(曲线长度)、Diameter(直径)、Cross section area(横截面面积)、Area(面积)和Cross section perimeter(横截面周长)。

  1. AVIZO_ROOT目录把data/tutorials/fibertracing/concrete.amdata/tutorials/fibertracing/concrete.CorrelationLines.am加载到Avizo工作区中。
  2. 用默认参数把一个Interactive Thresholding模块附加到concrete.am上,并单击Apply
  3. 把一个Fiber Shape Statistics模块附加到concrete.CorrelationLines.am上,按图12.23所示设置参数,并单击Apply

图 12.23Fiber Shape Statistics模块的参数设置。

  1. 该模块会在一个电子表格中输出以下统计量(见图12.24)。

图 12.24:纤维的形状统计量。

本教程可在此处获取:data/tutorials/fibertracing/concrete_shape_stat_tutorial.hx

12.3.3 绘制纤维的分布

Avizo提供了在一个体内有效绘制某个给定属性样本分布的方法。例如,为了知道在一个纤维数据集中占据最多空间的纤维直径是多少,可以绘制纤维直径与累积体积面积的关系图:

  1. AVIZO_ROOT目录把data/tutorials/fibertracing/concrete_shape_stat_tutorial.hx加载到Avizo工作区中。
  2. 把一个Distribution Analysis模块附加到Fiber Shape Statistics模块的输出上,按图12.25所示设置参数,并单击Apply

图 12.25Distribution Analysis模块的参数设置。

  1. 把一个Plot SpreadSheet模块附加到该输出上,按图12.26所示设置参数,并单击Plot端口中的Show(见图12.27)。

图 12.26Plot SpreadSheet模块的参数设置。

图 12.27:纤维的分布图。

12.3.4 移除接触到边界框的纤维

在某些用例中,把没有完全位于边界框内部的纤维移除会更好。此类纤维的统计量可能是有偏的。例如,Fiber length distribution(纤维长度分布)会是错误的,因为长度是在并未完全位于样本内部的纤维上计算的。要移除这类纤维,请把一个Filter Spatial Graph by BBox Contact模块附加到表示这些纤维的Spatial Graph上,并单击Apply。可以把这一步添加到前面的示例中,以确保统计量只在完整的纤维上计算。图12.28和图12.29分别显示了移除接触到边界框的纤维之前和之后的显示效果。

图 12.28:移除纤维之前的显示。

图 12.29:移除纤维之后的显示。

12.3.5 过滤纤维

除了移除接触到边界框的纤维之外,把符合或不符合某个用户定义准则的纤维过滤掉也可能是有用的。Spatial Graph Filter模块允许基于一个用户自定义方程来过滤样本,该方程使用作为该模块输入所设置的属性值。

  1. AVIZO_ROOT目录把data/tutorials/fibertracing/concrete_shape_stat_tutorial.hx加载到Avizo工作区中。
  2. 把一个Spatial Graph Filter模块附加到Fiber Shape Statistics模块的空间图结果上,按图12.30所示设置参数,并单击Apply

图 12.30Spatial Graph Filter模块的参数设置。

数据被过滤后,只有符合用户方程的纤维会保留下来。图12.31和图12.32分别显示了过滤之前和之后的显示效果。

图 12.31:体积过滤之前。

图 12.32:体积过滤之后。

12.3.6 计算并可视化局部统计量

Avizo提供了在纤维样本的局部区域内、而不是逐根纤维地计算统计量的方法——后者可以用Spatial Graph Statistics来完成。此类计算有助于更好地评估样本的非均质性。例如,密度图让你能够识别出样本中大多数纤维所在的位置。

计算区域由一些比样本网格更大的块(blocks)来定义,并且这些块可以互相重叠。以下模块可计算局部统计量:

  • Spatial Graph Local Statistics从一个表示纤维中心线的Spatial Graph(由Trace Correlation Lines模块生成)计算局部统计量。当纤维样本可以被分离时,请使用该模块。统计量包括:
    • Volume Density(体积密度)
    • Surface Density(表面密度)
    • Tensor(张量)
    • Orientation(朝向,即对应于该张量主特征向量的矢量场)
  • Local Orientation直接从一个灰度体计算局部统计量。当纤维的中心线无法被追踪时,请使用该模块。统计量包括:
    • Confidence(置信度)
    • Orientation(朝向,Theta、Phi)
    • Eigen vectors(特征向量)
    • Moment of inertia(惯性矩)

作为一个示例,下面使用Spatial Graph Local Statistics模块从concrete数据集中提取局部统计量:

  • AVIZO_ROOT目录把data/tutorials/fibertracing/concrete.amdata/tutorials/fibertracing/concrete.CorrelationLines.am加载到Avizo工作区中。
  • 把一个Spatial Graph Local Statistics附加到concrete.CorrelationLines上。
  • 按图12.33所示设置参数:

图 12.33Spatial Graph Local Statistics模块的参数。

该模块的Data是纤维的中心线。由此,可以计算出相对于体积分数、表面积和朝向张量的局部统计量。也可以提取出与该张量主特征向量相对应的主朝向。当提供了Object Mask掩膜时,体积分数由体素数量计算得出,表面积则由从该掩膜生成的三角网格导出。在当前这个用例中,没有提供掩膜,因此这些统计量的计算是基于一个具有已知截面半径的理想圆柱形纤维模型。要确定一个合理的截面半径,可以使用测量工具(即查看器工具栏中的Measurement)。第三个可选输入是一个掩膜,用于把局部统计量的计算限制在样本中的某个给定区域内。局部统计量在块(或称子体)内被积分,这些块规则地分布在该体的边界框中。可选的Reference可用于为该数据定义一个不同的边界框。块的数量和/或相邻块中心之间的距离,通过端口ResolutionVoxel Size(units)来指定。不过,默认情况下块尺寸使得相邻块之间没有重叠。如有必要,可以通过端口Block来配置这一点。

  • 所有参数配置完成后,请单击Apply。电子表格输出会列出每个块的所有统计量。选择该电子表格输出并单击Show,即可在表格视图中查看这些统计量。注意:当块的数量非常大时,不建议这样做。

这些统计量也可以以标量图像(即体积分数和表面积)、矢量场(即主朝向)和张量场(即朝向张量)的形式生成,这对于可视化和数据导出很有用。例如,把一个Ortho Slice附加到concrete.am上,然后创建一个colorwash以在数据之上可视化体积密度(见图12.34)。

图 12.34:在数据之上的密度可视化。

同样的设置也可以用面积密度图来完成,以便比较纤维体积与纤维面积的影响区域(见图12.35)。

图 12.35:体积分数密度与表面积密度的比较。

朝向张量可以使用Tensor View模块可视化为椭球。

  • 把一个Tensor View模块附加到Spatial Graph Local Statistics的张量输出上。
  • 你可以把Tensor ViewModule端口设为一个不同于默认裁剪平面的平面。例如,使用可视化密度图所用的那张ortho slice。按图12.36所示设置参数。

图 12.36Tensor View参数。

现在张量被映射到密度图之上,如图12.37所示。

图 12.37:映射到密度图之上的张量。

请注意,你必须单击Apply或选择Auto-refresh才能更新Tensor View模块的显示。特别是分辨率和缩放需要被调整。更多细节请参阅Tensor View的文档。

最后,也可以使用Vector to RGB模块把朝向输出转换为RGB数据,从而用一个Volume Rendering模块来可视化朝向。

12.3.7 在3D中绘制朝向

Plot 3D Orientation模块允许在一张由半球或整球表示的3D图上直观地理解朝向分布。该模块还支持把某个属性映射到高度或颜色上,或者同时映射到两者上。

  1. AVIZO_ROOT目录把data/tutorials/fibertracing/concrete_shape_stat_tutorial.hx加载到Avizo工作区中。
  2. 把一个Plot 3D Orientation模块附加到Fiber Shape Statistics模块的空间图输出上。
  3. 按图12.38所示设置参数。

图 12.38Plot 3D Orientation模块的参数设置。

外部查看器应当以3D方式显示朝向,如图12.39所示。

图 12.39:纤维朝向。

所使用的角度表示约定如下:

  • Theta表示与Z轴所成的角度,取值范围为$[0, 90]$度。
  • Phi是XY平面内的角度,从X轴朝Y轴方向测量,取值范围为$[0, 360)$度。

有两种权重计算方法:

  • Standard(标准):在高度映射上,长度较小的样本不应当与长度较大的样本占同样的权重。
  • Averaged(平均):你可以通过把具有相同朝向的每个样本的权重相加,再用总权重除以样本数量来计算平均值。例如,如果权重属性是长度,并且某个给定朝向有5个样本,那么所指派的权重应当基于总长度/5。

使用Export to lattice按钮,该模块会把所绘制的数据输出为一个常规的2D标量场,它可以用Bar Chart SliceHeight Map Slice模块来可视化(见图12.40和图12.41)。

图 12.40:用Bar Chart Slice模块显示的绘图数据。

图 12.41:用Height Map Slice模块显示的绘图数据。

12.4 纤维网格化

本教程需要Avizo XFiber Extension,它为追踪纤维、细丝或其他具有相对固定且恒定直径的隧道的中心线提供了专门的支持。

本教程说明如何从一个Spatial Graph创建三角网格和/或四面体网格,以及如何细化Spatial Graph以提升网格质量。

  1. AVIZO_ROOT/data/tutorials/fibertracing/concrete.correlationlines.am加载到Avizo工作区中。Project View中会出现一个绿色的数据图标。
  2. 把一个Extract Surface from Spatial Graph模块(在Fiber Tracing类别中)附加到该数据上。
  3. 首先看一下标为Tube Scale的端口:用该端口可以调整所生成管状体的横截面直径。值越大,管就越粗。为了给这项设置估计一个合适的值,你可以使用一张切片和线测量工具。把切片摆放到能让你测量某根纤维平均直径的位置。在钢纤维增强混凝土这个例子中,直径取值9是一个良好的估计。因为我们要找的是管的缩放因子,所以应当把直径除以2以得到管的半径。请在端口Tube Scale中输入值4.5。
  4. 标为Tube Complexity的端口决定了近似管形状的精度。值越高精度越高,但所生成网格对象中的三角形和/或四面体数量也越多。你稍后可以对这个值进行试验。现在请在端口Tube Complexity中输入值6。
  5. 一开始,我们只从纤维中提取一个三角网格。因此,请在标为”Output”的端口中选择”surface”单选按钮。
  6. 取决于管复杂度的设置以及输入空间图中线段的数量,你可以在该模块属性区域的surface/mesh信息部分获取关于预期三角形数量和四面体数量的信息。
  7. 按下Apply按钮,并把一个Surface View模块附加到所生成的曲面对象上。
  8. Surface View模块的draw style端口改为outlined。

视图现在应当显示成如下图12.42所示:

图 12.42:由Spatial Graph得到的曲面。

请对Extract Surface from Spatial Graph模块的Tube Complexity端口进行试验,并检查它对结果网格的影响。

你会注意到各线段之间的间距并不均匀。这源于Spatial Graph顶点之间间距的不均匀。因此,所生成的网格可能存在三角形长宽比不佳的问题。为了获得更均匀的间距,你既可以用一个Smooth Line Set模块对Spatial Graph进行平滑,也可以通过应用一个Refine Spatial Graph模块来细化该Spatial Graph

要细化该Spatial Graph,请右键单击该Spatial Graph对象,并从Fiber Tracing命令组中选择Refine Spatial Graph,从而为它附加一个Refine Spatial Graph模块。细化的工作方式如下:取决于Spacing的设置,该模块会在两个相邻的原始顶点之间恰好插入达到所请求间距所必需数量的额外顶点。得益于此,原始顶点的位置保持不变。如有需要,你可以在细化之后再应用一个Smooth Line Set模块来平滑所得到的Spatial Graph

在本例中,5是一个良好的起始值。请在端口Spacing中输入5并按下Apply按钮。现在,把Extract Surface from Spatial Graph模块的输入重新连接到细化后的Spatial Graph上,并再次按下Extract Surface from Spatial GraphApply按钮。

检查结果。结果应当看起来像图12.43中那样:

图 12.43:细化后的曲面。

你会注意到,现在这些管是由间距均匀得多的线段组装而成的。

文章作者: HibisciDai
文章链接: http://hibiscidai.com/2020/04/06/Avizo用户使用手册-12/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HibisciDai
好用、实惠、稳定的梯子,点击这里