Avizo用户使用手册-8
[TOC]
Chapter 8
8 配准、对齐与数据融合
空间配准是指把两个或多个数据集对齐或叠加到同一个坐标系中。在配准中,通常把其中一个数据集作为参考,另一个则被施加变换——移动并可能被重新缩放——直到两个数据集相互匹配。待配准的数据可以由不同的传感器产生,可以采集于不同时间、来自对象的不同区域,也可以来自不同的样品或模型。图像配准方法可以是手动的、自动的或半自动的。与配准密切相关的是数据融合任务,即对已配准数据集的同时可视化,或把它们组合成派生数据。
Avizo中有多种与配准相关的工具可供使用,具体取决于你的目的和你的数据——几何曲面、2D图像堆栈或3D体积。Avizo中的配准被应用于广泛的场景,包括:
- 产品相对于参考模型的工业检测、名义/实际分析以及逆向工程,
- 多模态图像采集,例如CT/MRI(计算机断层扫描、磁共振成像),
- FIB-SEM/$\mu$-CT(聚焦离子束-扫描电子显微镜、显微断层扫描),
- 相关显微术
Correlative microscopy, - 由2D横截面进行3D图像重建,
- 物理实验或过程的成像——例如经受加热、浸水、压缩的样品,
- 3D蒙太奇拼装——把具有小重叠区域的3D体积合并起来。
以下教程和示例提供了典型配准任务的基础知识。
Getting started with spatial data registration using the Transform Editor使用变换编辑器进行空间数据配准入门Data fusion, comparing and merging data数据融合、比较与合并数据Registration with landmarks, warping surfaces and images用地标进行配准、翘曲曲面与图像Registration of 3D image data sets3D图像数据集的配准Registration of 2D image and 3D image data sets2D图像与3D图像数据集的配准Alignment of 2D images stacks2D图像堆栈的对齐Alignment and pre-processing of FIB/SEM images stacks using the FIB Stack Wizard使用FIB Stack Wizard对FIB/SEM图像堆栈进行对齐与前处理Registration of 3D surfaces3D曲面的配准Registration of 3D image and surface, nominal-actual analysis3D图像与曲面的配准、名义/实际分析
要学习这些教程,你应该熟悉Avizo的基本概念。特别是,你应该能够加载文件、与3D查看器交互,以及把模块连接到数据模块。所有这些主题都在Avizo第2章——入门中讨论过。建议把教程第8.1.1节 使用变换编辑器作为大多数情况下的起点。之后你就可以跳转到与你的具体任务相关的主题。特别地,2D切片对齐教程可以独立阅读。
这些教程涵盖了常见的使用场景。对于与这些场景不同的特定需求或应用,你可以联系Thermo Fisher Scientific热线以做进一步讨论。
8.1 使用变换编辑器进行空间数据配准入门
在本节中,你将学到:如何使用各种操纵器交互式地改变数据对象的空间位置;如何以平移、旋转和缩放的组合形式,用数值方式指定一个几何变换;如何复制/粘贴几何变换;如何把几何变换应用到数据上,以便改变实际的数据坐标或体素图像的轴向对齐;以及在哪里可以找到相关工具。
本节包含以下部分:
Using the Transform Editor使用变换编辑器Applying Transforms应用变换Numerical input, console and script commands数值输入、控制台与脚本命令Transform Manipulators变换操纵器
8.1.1 使用变换编辑器
在Avizo中被可视化的空间数据被放置在一个虚拟的三维世界中。该世界拥有唯一的坐标系。Avizo中的每个空间对象都可以相对于世界原点任意平移;同样,它也可以相对于全局坐标轴旋转,并且可以被独立地缩放(放大或缩小)。
选择View / Global Axes可显示全局坐标轴。全局坐标轴以世界坐标的原点为中心。默认情况下,x轴、y轴和z轴分别绘制为红色、绿色和蓝色。你也可以使用查看器的罗盘来查看3D空间方位。选择Edit / Preferences / Layout可更改罗盘设置。
图 8.1:3D坐标轴与罗盘。
Avizo中的每个空间数据对象都有一个关联的3D边界框,以及一个可选的几何变换——后者可以被定义为平移、旋转和缩放的组合(内部表示为一个4x4齐次仿射变换矩阵)。
在查看器中以”轨迹球”(trackball)模式(手形鼠标光标)旋转场景,并不会改变对象相对于世界坐标的位置或朝向。它改变的是相机绕整个场景的视点。为了改变某个对象的几何变换,即相对于其他对象或世界坐标对它进行平移、旋转或缩放,每个空间数据对象都有一个Transform Editor变换编辑器可用。
在下面的示例中,我们使用Transform Editor来操纵曲面数据对象。这个示例同样适用于图像、3D体积或规则标量场,只需使用诸如Ortho Slice之类的模块进行显示。
- 开始一个新的Avizo项目(菜单
File / New Project,或按Ctrl-N)。 - 用菜单
File / Open Data,从Avizo安装目录的data / tutorials子目录加载chocolate-bar.simplified曲面。 - 把一个
Surface View模块附加到chocolate-bar.simplified数据集(即从该数据集的弹出菜单中选择Surface View条目)。 - 复制该数据对象。为此,你可以选中
chocolate-bar.simplified并按Ctrl-D,或者右键单击并使用数据菜单Object / Duplicate Object。结果是chocolate-bar2.simplified。 - 把一个
Surface View模块附加到副本chocolate-bar2.simplified。目前在查看器中你仍然只能看到一个发动机形状,因为这两个数据集是重叠的。 - 在
Project View中选择chocolate-bar2.simplified。 - 在
Properties Area中,通过单击拖动器框按钮来调用Transform Editor。查看器窗口中会在发动机曲面周围出现一个操纵器:它允许你在3D中改变变换。Project View中数据对象图标左侧的白色方块会变为蓝色,表示某个编辑器处于活动状态。
图 8.2:调用Transform Editor。
- 请确保把查看器切换到交互模式:按下查看器左上角的箭头按钮,或使用ESC键在观察模式和交互模式之间切换。
- 然后单击并拖动操纵器的某个侧面:当前显示的两个曲面之一会沿着该平面被平移。此时数据对象标签会以斜体显示,表示该数据或其附加信息已被修改。操纵器有若干拖动器小部件,用于以各种方式控制变换。关于如何与操纵器拖动器交互的细节,可以在本
Transform Editor教程的末尾找到。
图 8.3:一个处于活动状态的变换操纵器。
在Properties Area中,处于活动状态的Transform Editor会为该数据对象添加若干按钮端口。
图 8.4:变换操纵器端口。
Manipulator端口让你在若干交互式操纵器之间进行选择,或者选择一个Dialog来输入数值。这些将在本教程后面介绍。Reset按钮列表让你恢复某个变换的各个独立分量,例如取消旋转部分。使用Action端口,可以撤销/重做最后一次变换更改。- 你可以把一个变换从一个数据集复制/粘贴到另一个数据集。例如:
- 按下
chocolate-bar2.simplified的Transform Editor的Action端口中的Copy按钮。 - 此时,你可以选择性地通过单击拖动器框按钮来停用
Transform Editor。 - 选择第一个加载的数据集
chocolate-bar.simplified,并激活它的Transform Editor。 - 按下
chocolate-bar.simplified的Action端口中的Paste按钮:两个数据集再次重叠在同一位置,即chocolate-bar2.simplified的最新位置。
- 按下
为了把变换从一个数据集复制到另一个数据集,你也可以改用对象菜单Geometry Transforms中的Copy Transformation模块。Geometry Transforms菜单包含了与配准、对齐和变换相关的大多数工具。
你可能已在对话框中注意到的Apply Transform按钮,会提交该变换。这个主题将在下一节中更详细地说明。
为了便于在交互式变换期间进行视觉控制,你可以创建一个额外的查看器,调整相机以便于交互,并在另一个查看器中控制变换。
8.1.2 应用变换
在这一点上,有一个关于Avizo中几何变换的重要概念需要了解。与数据对象相关联的几何变换会被显示模块和其他一些模块所考虑。不过,除非明确请求,它不会修改数据的原始坐标。也就是说,对象在3D世界中的定位方式会随变换而更新,但存储在数据对象中的坐标不会被更新。例如,3D体积的边界框,或三角化曲面的点坐标——有时被称为数据的”局部坐标”(local coordinates),即存储在内存中的坐标——不会被几何变换所改变。这个几何变换只是在需要时,向所附加的模块”呈现”变换后的世界坐标。
在某些情况下,确实有必要实际应用该变换,以便把数据的初始局部坐标改为世界坐标。例如:
- 在把数据导出到非Avizo文件格式之前。当把数据保存为Avizo格式以及少数其他格式时,几何变换会同时被存储在文件中,因此在重新加载数据时可以恢复。但是,在保存或导出已变换的数据集时要小心。大多数文件格式不允许你存储几何变换。在这种情况下,你必须在保存之前把当前变换应用到数据上。不过,在保存项目时,项目文件会为所引用的数据存储变换。
- 当某些数据处理或操作不支持几何变换时,它就要求变换后的数据坐标。例如,一个已变换的体积图像或规则标量场的晶格(lattice),可能需要与全局坐标轴对齐,或相对于另一个晶格对齐。这对于执行某些晶格对齐的操作很有用,如下文所示。
这里是第一个示例,展示如何把变换应用到你在前一节中已经使用过的曲面数据上:
- 如有需要,从
data/tutorials目录加载所提供的chocolate-bar.simplified曲面数据文件;把一个Surface View模块附加到chocolate-bar.simplified;并用菜单View / Global Axes显示全局坐标轴。 - 从该数据对象的弹出菜单
Annotate中,把一个Local Axes模块附加到它上面。 - 使用
Transform Editor对曲面chocolate-bar.simplified施加至少一些旋转。例如,拾取并拖动变换器操纵器的某个绿色球形旋钮。 - 按下
Transform Editor的Apply Transform按钮。请注意,此操作无法撤销。对于像曲面这样的顶点集(vertex set)对象,该变换会被应用到所有顶点上。旧坐标被新坐标替换,之后变换矩阵被重置为单位矩阵,即对被修改的曲面不再设置任何变换。变换一旦被应用到某个数据集上,就无法再被轻易撤销。
图 8.5:对曲面应用变换之前。
图 8.6:应用变换之后。
对图像应用变换Applying transformation to image
现在我们来看看如何把变换应用到体数据上。与上面的示例一样,这会使体数据看起来仍停留在同一位置,只是不再设置任何变换。Transform Editor的Apply Transform按钮对图像、规则体积或标量场不可用。你必须改用Resample Transformed Image模块,如下例所示:
- 加载位于子目录
data/tutorials中的图像堆栈文件chocolate-bar.am。 - 把
Ortho Slice、Bounding Box和Annotate / Local Axes模块附加到数据对象chocolate-bar.am;并用菜单View / Global Axes显示全局坐标轴。 - 使用
Transform Editor移动chocolate-bar.am,并施加至少一些旋转。完成后你可以停用Transform Editor。 - 从对象菜单
Geometry Transforms把一个计算模块Resample Transformed Image附加到chocolate-bar.am。 - 在
Properties Area中,把Resample Transform Image的Mode端口设为”extended”,以确保结果将包含所有源数据。 - 按下
Properties Area底部的绿色Apply按钮。该计算模块会产生一个新数据对象chocolate-bar.transformed,并被添加到Project View中。输入数据chocolate-bar.am保持不变。 - 为了可视化结果,你可以为它附加
Bounding Box、Local Axes和Ortho Slice模块。结果体积及其附加的Ortho Slice现在沿全局坐标轴对齐。输入的体数据已被在一个具有新边界框坐标的晶格上重新采样。
图 8.7:对图像应用变换之前。
图 8.8:应用Resample Transformed Image之后。
Resample Transformed Image模块可用于把体数据采样到一个作为输入连接的参考晶格上。该模块的另一个有用特性是,可以沿某个给定平面重新确定体数据的朝向——在与该平面平行的晶格上对数据进行采样。该平面可以用一个Slice或Surface Cross Section模块来设定,也可以通过任意旋转、通过拾取三个点,或通过一个待拟合的点集来设定。
应用变换也可以在Avizo控制台中或在脚本里使用Tcl命令applyTransform来完成。与变换相关的Tcl命令将在下一节中介绍。
8.1.3 数值输入、控制台与脚本命令
(本节是可选的,完成后续配准教程并不需要阅读本节。)
为了输入精确的空间变换,常常需要访问该变换的数值。Transform Editor也让你能够以数值方式检查或输入变换。
Transform Editor的Dialog...按钮会弹出Transform Editor对话框。
图 8.9:Transform Editor对话框。
高级用户也可以在Avizo控制台中使用Tcl命令getTransform来取回某个变换的数值(关于可用命令的更多细节,参见空间数据参考)。该变换随后会以矩阵值列表的形式打印在控制台中。例如:
1 | "chocolate-bar.simplified" getTransform |
同样,一个已知矩阵的变换可以用setTransform加上16个矩阵值来设定:
1 | "chocolate-bar2.simplified" setTransform <16个矩阵值> |
这提供了另一种在对象之间复制/粘贴变换的方式。它可以用单条命令完成,如下所示:
1 | eval "chocolate-bar2.simplified" setTransform ["chocolate-bar.simplified" getTransform] |
变换的各个分量可以在Transform Editor对话框中以人类可读的形式获得,或者通过带-d选项的getTransform命令获得:
1 | "chocolate-bar.simplified" getTransform -d |
该命令会分行列出translation(平移)、rotation(旋转轴与角度)、scaleFactor(缩放因子)、scaleOrientation(缩放朝向)和center(中心)各项数值。
正如上一节所解释的,该变换起初是被临时设定的,可以通过保存项目来存储,但它并不是该对象的一个属性。要使该变换永久生效,请输入:
1 | <data> applyTransform |
然后保存该数据对象。为此也有一个模块可用:Geometry Transforms/Resample Transformed Image。例如,在Avizo控制台中键入:
1 | "chocolate-bar.am" applyTransform |
chocolate-bar.am数据会被更改为一个重新采样后的体积,临时变换被重置为零。为了在输出网格的分辨率和重采样类型上获得更大的灵活性,请使用前一节介绍的Resample Transformed Image模块。
8.1.4 变换操纵器
(本节是可选的,完成后续配准教程并不需要阅读本节。)
Transform Editor中有许多操纵器可用。下面详细介绍与各个不同操纵器的交互方式。
- 默认操纵器是
Transformer。它允许平移、旋转和缩放。它是用于进行近似配准的最通用的操纵器。
图 8.10:Transformer:单击拖动某个角上的立方体进行缩放(按住Shift键约束方向,按住Ctrl键固定对角或对面)。单击拖动任意面进行平移(按住Shift键约束方向,按住Ctrl键进行垂直方向平移)。单击拖动某个绿色小球以单一方式旋转(按住Shift键自由旋转,按住Ctrl键更改中心)。
Jack操纵器便于沿某个轴平移以及进行等比缩放。
图 8.11:Jack:单击拖动矩形或圆柱杆进行平移。按Ctrl键更改轴。单击拖动立方体进行缩放。单击拖动轴向线条进行旋转。
TransformBox是Transformer的一个简化版本,允许平移、旋转和等比缩放。
图 8.12:TransformBox:单击拖动任意小立方体进行缩放。单击拖动任意面进行平移。按住Shift键约束轴向。单击拖动任意框边进行旋转。
Trackball和Centerball允许旋转。
图 8.13:Trackball:单击拖动条纹进行旋转。在任意位置单击拖动可自由旋转。按住Ctrl键进行缩放。按住Shift键使用用户自定义的轴和条纹。
图 8.14:Centerball:单击拖动圆圈进行旋转。在任意位置单击拖动可自由旋转。单击拖动绿色箭头以平移旋转中心(按住Shift键约束平移轴)。
HandleBox允许平移、等比缩放和各向异性缩放。它是最适合进行各向异性缩放操作的操纵器。
图 8.15:HandleBox:单击拖动任意面进行平移(按住Shift键约束平移轴)。单击拖动某个小立方体进行缩放。
TabBox允许通过调整框的大小来进行平移和各向异性缩放。它被诸如Extract Subvolume或ROI Box(感兴趣区域)之类的模块所使用。
图 8.16:TabBox:单击拖动任意面进行平移。单击拖动绿色顶点以修改边界框。
8.2 数据融合、比较与合并数据
图像融合的任务是对两个数据集进行同时的可视化和分析。本教程介绍Avizo中为此目的提供的一些基本工具和技术,它们通常用于已配准或已对齐的数据集。Avizo让你能够轻松地在单个查看器或多个视图中操纵多份数据,也能轻松地把不同数据集组合到同一个可视化中。
本节包含以下部分:
Color Wash彩色叠加Ortho Views正交视图Mapping a 3D volume overlaid on a surface把3D体积映射叠加到曲面上Side-by-side viewers, synchronized views and objects并排查看器、同步视图与对象More about Data Fusion关于数据融合的更多内容
8.2.1 彩色叠加
附加到Ortho Slice上的Color Wash模块,可帮助你把两个任意的图像或体积组合起来进行可视化。一个数据集的表示会与另一个数据集叠加,同时考虑它们在空间中的位置。Ortho Slice的渲染会被调制,使其同时编码第二个数据集。
- 加载位于子目录
data / tutorials/中的图像堆栈文件chocolate-bar.am。 - 从目录
data / tutorials加载文件chocolate-bar.labels.am。数据集chocolate-bar.labels.am包含对不同区域的标记,它是通过对灰度图像进行分割而得到的。 - 把一个
Ortho Slice模块附加到chocolate-bar.am。 - 把一个
Color Wash模块附加到该Ortho Slice模块:在Project View中右键单击Ortho Slice图标,并在弹出菜单中选择Color Wash。 - 选择
Color Wash模块的黄色图标。 - 把
Color Wash模块的Data输入端口连接到第二个数据对象chocolate-bar.labels.am。为此,你可以在Properties Panel中设置Data端口。 - 你可以更改
Color Wash模块的Colormap端口以调整范围。Weight Factor端口允许调整两个数据集之间的混合。你也可以尝试其他Fusion Method,例如Magic Lens,它对于检查数据对齐很有用。 - 激活
chocolate-bar.am的Transform Editor并移动该数据集。你也可以更改Ortho Slice的朝向或切片编号,以便在不同平面上控制图像。 - 请注意,
Color Wash数据不必与Ortho Slice数据具有相同的尺寸或分辨率——只要它们在空间上有重叠,数据之间可以是无关的。例如,加载位于子目录data / core /中的图像堆栈文件coreSample.am,并把它作为Color Wash数据附加,以替代chocolate-bar.labels.am。
图 8.17:Color Wash融合方法:Weighted Sum与Magic Lens示例。
8.2.2 正交视图
在图像融合中,有时需要同时观察全部三个正交方向。为此我们可以使用强大的Ortho Views模块。关于Ortho Views的更多内容,另请参阅相关的教程第3.3节(Avizo与3D图像入门)。
- 加载位于子目录
data / tutorials /中的图像堆栈文件chocolate-bar.am。 - 在Project View中复制
chocolate-bar.am数据集。 - 把
Ortho Views模块附加到chocolate-bar.am。图形显示随即被拆分为四个查看器。 - 把一个
Slice叠加模块附加到该Ortho Views:在Project View中右键单击黄色的Ortho Views图标,并选择条目Slice。 - 然后把
Slice模块的Data输入端口连接到chocolate-bar2.am。 - 你可以更改
Colormap端口,以选择一个半透明的颜色图,例如volrenGreen或physicsVolRend,并调整范围。同时也请务必把Slice的transparency端口设为”Alpha”(即使用颜色图的不透明度)。 - 你可以使用
Transform Editor来移动chocolate-bar2.am。
图 8.18:Ortho Views显示。
- 你可以在某些视图中隐藏
Transform Editor操纵器,同时保持数据可见:把数据对象的可见性切换为关闭——这会使切片和操纵器都不可见——然后再把切片的可见性切换为开启。
图 8.19:数据与显示模块的可见性开关。
8.2.3 把3D体积映射叠加到曲面上
用于显示曲面数据的Surface View模块,也可以显示一个”浸没”在体数据集(3D标量场)中的曲面,把体积值作为颜色映射到该曲面上。
- 加载位于子目录
data / tutorials /中的图像堆栈文件chocolate-bar.am。 - 从
data / tutorials目录加载所提供的chocolate-bar.simplified曲面数据文件。 - 把一个
Surface View模块附加到chocolate-bar.simplified数据集(即从该数据集的弹出菜单中选择Surface View条目)。 - 把
Surface View的Colorfield输入端口连接到chocolate-bar.am数据对象。该曲面现在会根据chocolate-bar.am数据和colormap端口进行着色。 - 例如,选择颜色图
physics.icol。然后右键单击颜色条并选择Adjust range到chocolate-bar.am。 - 使用
Transform Editor相对于该曲面移动chocolate-bar.am。 - 更改颜色场映射类型。在”Per-vertex”模式下,颜色是在顶点处被探测、并在曲面三角形内部插值的,因此渲染速度快但精度较低。此时颜色场映射的精度受曲面顶点密度的限制。”Per-voxel”模式则把数据纹理精确地映射到曲面上,代价是内存消耗更大、性能更低。这时使用
Surface Simplification Editor简化曲面可能会有帮助。
图 8.20:Surface View颜色场映射:per-vertex与per-voxel对比。
8.2.4 并排查看器、同步视图与对象
以同步的方式并排可视化不同的数据集,往往会很方便。
- 从目录
data / tutorials加载文件chocolate-bar.am和chocolate-bar.labels.am。数据集chocolate-bar.labels.am包含对不同区域的标记,它是通过对灰度图像进行分割而得到的。 - 把一个
Ortho Slice模块分别附加到chocolate-bar.am和chocolate-bar.labels.am。
图 8.21:连接到数据的Ortho Slice模块。
- 右键单击附加到
chocolate-bar.labels.am的Ortho Slice 2模块的Colormap端口,以选择颜色图labels.am。
图 8.22:连接了labels.am的Colormap端口视图。
目前只有一个Ortho Slice可见,因为这两个数据集是重叠的。
- 在查看器工具栏中,切换开启”Two-Viewers (vertical)”(双查看器,垂直)按钮,并确保查看器按钮”Link Object Visibility”(链接对象可见性)处于关闭状态。
图 8.23:查看器工具栏视图。
- 切换这两个
Ortho Slice的可见性,例如使chocolate-bar.am只在左侧查看器中可见,而chocolate-bar.labels.am只在右侧查看器中可见。
图 8.24:两个Ortho Slice模块的可见性。
- 在左侧查看器中右键单击以打开其弹出菜单,然后选择”Link camera to…”,接着在右侧查看器内部单击以选中它。
图 8.25:Link camera to...选项。
- 选择
Ortho Slice模块。在Properties Area中激活Connection Editor(如下图所示)。然后,单击出现在Ortho Slice模块Slice Number端口旁边的链条图标,并把它拖动到Project View中的Ortho Slice 2模块上。现在这两个Slice Number端口已互相连接:更改其中一个会立即改变另一个。
图 8.26:互连端口:(1) 激活Connection Editor,(2) 把链条从一个端口拖到待连接的模块或端口上。
之后你可以随时在查看器的弹出菜单中(在查看器内右键单击)取消链接这些查看器。你也可以通过右键单击某个已互连端口的链条图标、并在弹出菜单中选择”disconnect”来断开这些端口。这项技术对于比较某个数据集在处理前后的状态很有用,如下例所示:
- 加载
chocolate-bar.am,把一个图像滤波器模块Gaussian Filter附加到chocolate-bar.am。在Properties Area中,把Gaussian Filter设为3D解释,Kernel Type设为Standard,然后按Apply。 - 把一个
Ortho Slice附加到结果数据chocolate-bar.filtered,然后按上述方法设置链接查看器。
图 8.27:比较处理前后。
注意:另请参阅Image Processing / Filter Sandbox和Slice模块,以便实时显示图像滤波器的效果。
8.2.5 关于数据融合的更多内容
Avizo提供了许多比较或合并曲面或标量场数据的方式。以下是一些进一步的提示。
- 你可以使用透明度来叠加曲面。以下是一些在质量和性能之间取得折中的有用设置。最好的效果可以用
Surface View的Draw Style端口中的默认选项fancy alpha和sorting获得。不过,为了获得更好的性能,你可能想停用其中之一。你也可以在主菜单View / Transparency中更改透明度模式,以获得不同的质量/性能折中。Sorted Layers选项——受现代图形硬件支持——对于防止复杂透明曲面产生的伪影可能给出最佳结果。更多细节参见Surface View和View Menu。 - 关于曲面的比较,另请参阅
Measure And Analyze / Surface Distance、Measure And Analyze / Shortest Edge Distance、Compute / Interpolate、Compute / Vertex Difference、Compute / Arithmetic(用于比较附加在曲面上的数据,或在曲面上映射距离图)。 - 地标和翘曲可用于比较数据。参见相关的教程。
- 你可以使用
Color Wash配合Ortho Slice、Ortho Views、Height Map Slice(高度场+颜色场)、Volume Rendering、Isosurface等来叠加图像数据。 - 关于图像的比较,另请参阅
Compare Image、Correlation Histogram、Arithmetic、Subtract Image、AND NOT Image、Blend with Image等模块。 - 以下是一个使用
Arithmetic计算图像之间差异的示例:- 把
Arithmetic模块(Compute子菜单)连接到一个数据集(Input A)。把第二个数据集连接为Input B。 - 在
Expr字段中键入”a-b”或”abs(a-b)”。按Apply。结果与Input A具有相同的维度。
- 把
- 强大的
Compute / Arithmetic模块可以附加到曲面、网格或图像上,并可用于把数值从一个数据集插值和映射到另一个数据集或一个规则网格上。 Merge模块可用于混合可以任意重叠的图像。Measure / Correlation Histogram可用于在配准之后(通常如此),根据两个图像集中相关联的区域创建一个标签图像。Multi-Channel Field可以把多个尺寸相同的灰度图像归为一组,以便配合Ortho Slice或Volume Rendering方便地显示。当读取某些包含多通道信息的文件格式时,多通道对象会被自动创建。此外,也可以把通道手动附加到一个通过Project > Create Object...菜单(类别Images And Fields)创建的多通道对象上。
8.3 用地标进行配准、翘曲曲面与图像
基于地标的配准会在两个相互对应的点集之间计算一个几何变换。可以由这些地标计算出一个刚性或仿射变换,用于把模型对齐到参考上。地标工具还允许计算3D曲面或图像的翘曲变形,以最佳地拟合相应的地标。
用地标进行配准最常被用作一种交互式对齐方法,因为在Avizo中地标可以交互式地编辑。不过,地标也可以被导入,或通过其他方式产生,例如在分割之后从图像中进行特征提取。这可以用于自动配准。
本节包含以下部分:
Creating landmark sets创建地标集Registration with Rigid Transformation用刚性变换进行配准Warping surfaces翘曲曲面Warping volumes (3D images)翘曲体积(3D图像)Retrieving and copying registration transformation取回并复制配准变换
要学习本教程,你应当知道如何加载文件、如何与3D查看器交互、如何使用双查看器布局以及查看器可见性开关。
本教程中用地标进行的配准适用于3D图像和三角化曲面。关于2D图像或切片的对齐,请参见第8.6节(2D图像堆栈的对齐)中的教程。关于如何把一个体积与通过拾取点或点集所定义的任意平面或Slice对齐,另请参阅第8.1.2节(应用变换)。
8.3.1 创建地标集
本教程中我们将要处理的数据集是带标签的发动机曲面(motor.labels.surf)和简化后的带标签发动机曲面(motor.simplified)。所有步骤同样可以应用到图像上——例如使用Isosurface作为显示模块。
我们先打开并显示两个曲面数据集。
- 加载
data / registration目录中的motor.part1.simplified.surf和motor.part2.simplified.surf。 - 把一个
Surface View模块附加到每个曲面数据。 - 你可以更改其中一个
Surface View模块的颜色或绘制风格,以便更好地区分这两个曲面。例如,把Surface View的Colors端口设为”constant”,然后使用Colormap端口的Edit菜单,或双击彩色方块,用Color对话框更改颜色。 - 打开两个查看器,并在各自的查看器中分别显示其中一个曲面(参见第8.2.4节(并排查看器)中的教程)。
图 8.28:配准之前的曲面。
现在,让我们创建一个地标集(landmark set)对象。
- 从
Project > Create Object...菜单中选择Points And Lines / Landmarks (2 sets),以创建一个空的地标对象。Project View中会出现一个新的绿色图标。由于我们要通过对应地标来匹配两个对象,因此我们必须选择包含两个地标集的地标对象(Landmarks (2 sets))。 - 在Project View中选择对象
Landmarks-2-sets。 - 把
Landmarks-2-sets的Image Set1端口设为motor.part1.simplified.surf,并把Image Set2设为motor.part2.simplified.surf。 - 对于本教程接下来的步骤,设置
Image Set输入端口可能不是必需的;但如果你要用Transform Editor移动这些曲面,那么为了让Landmark对象考虑所设置的变换,就需要设置它们。
现在我们来设置地标编辑。
- 通过单击
Properties Area中的Landmark Editor按钮来启动Landmark Editor。
图 8.29:地标编辑器Landmark editor。
当该编辑器启动时,一个Landmark View模块会被自动创建并连接到Landmarks数据对象。正如信息行所指示的,现在有两个空的地标集可用。我们将使用该编辑器在两个对象中定义一些标记点。
- 右键单击
Landmarks对象,并为它添加第二个Landmark View模块。 - 在第一个
Landmark View模块的属性中,把Point Set端口设为Point Set 1。 - 在第二个
Landmark View模块的属性中,把Point Set端口设为Point Set 2。 - 设置这两个
Landmark View模块的查看器开关,使第一个地标集显示在左侧查看器中,第二个地标集显示在右侧查看器中。
现在,我们准备好定义并设置相互对应的地标了。
- 确保
Landmarks对象在Project View中被选中,并在Properties Area中检查Edit Mode被设为Add。请注意,只有在Landmarks对象被选中时,才能在查看器窗口中编辑地标。 - 单击查看器工具栏的箭头按钮,或按ESC键,以开启拾取交互模式(箭头鼠标光标)。在surface1上单击某个特定点。该点必须位于surface1和surface2的共同区域内。在surface2上单击相应的点。一对点随即被创建。重复此步骤以创建若干对地标(至少3对,8对大概就足够了)。你可能需要更改对象的视图,以便在初始时被隐藏的部位上设置地标。
- 如果你想更改某个已有地标集的位置,请选择
Edit Mode: Move。单击要移动的地标,然后直接单击所期望的位置即可。 - 通过选择
Edit Mode: Remove并单击其中一个地标(蓝色或黄色),可以移除一对地标。
注意:在编辑地标时,请确保没有透明对象(例如某个Transform Editor操纵器)拦截了鼠标单击,从而取代了预期的可见曲面。你可能不会立即注意到地标被添加到了错误的位置。
图 8.30:曲面上的地标。
一旦地标被创建,下一步就是把这两个对象相互变换。Landmarks对象可以计算出一个刚性或线性变换,使一个地标集最佳地拟合另一个(后面你将看到如何取回它);或者你可以附加一个计算模块,它能按照地标集把某个曲面或图像数据对象变换为一个新的对象。
8.3.2 用刚性变换进行配准
Landmark Surface Warp模块可用于创建输入对象的一个变换后的副本,可以采用刚性变换,也可以采用翘曲。
让我们用它来配准motor.part2.simplified.surf(对应于第2个地标集),使其通过一个刚性变换朝向第1个地标集和motor.part2.simplified.surf。
- 把一个
Compute / Landmark Surface Warp模块附加到前面步骤中创建的Landmarks-2-sets对象。 - 在它的
Properties area中,把Surface数据端口设为motor.part2.simplified.surf,选择Direction 2>1以及带uniform scale的Rigid方法。 - 按
Apply。 - 把
Surface View 2附加到motor.part2.simplified.Warped。
图 8.31:Landmark Surface Warp之前。
图 8.32:Landmark Surface Warp(Rigid)之后。
Landmark Surface Warp模块会从motor.simplified.surf创建一个新的曲面副本,其坐标已经被变换。你可以用Transform Editor验证:motor.part2.simplified.surf并没有被设置任何几何变换。因此,它无法用于取回配准变换。在不创建数据副本的情况下做到这一点的方法,将在后面的一节中给出。
在某些情况下,刚性变换(平移和旋转)是不够的,例如当存在尺度差异时。
- 尝试把
Transformation type设为rigid+scale,或affine(沿x、y、z方向有不同的缩放,可能还带剪切)。按Apply按钮,或者切换开启auto-refresh以便在端口更改时自动应用。取决于所设置的地标,你可能会观察到结果中的细微差别。
下一节讨论更为剧烈的非线性变换。
8.3.3 翘曲曲面
在某些情况下,为了与地标最佳拟合而对某个对象进行变形是有用的。例如,你可能想比较相对于某些固定锚点的形状变化,或者把一个3D图像翘曲成预定义的形状。
如果需要通过变形来更好地拟合地标集,我们可以使用Landmark Surface Warp模块的另一种变换方法。
- 把一个
Landmark Surface Warp模块附加到Landmarks set(参见”用刚性变换进行配准”一节)。 - 选择
Bookstein方法,按Apply,并可视化结果。
图 8.33:Landmark Surface Warp之后。
取决于你所放置的地标,该曲面可能已被略微变形,以最佳地拟合从地标集2到地标集1的变换。你可以尝试不同的方法和选项。
然后你可以按下一节所述,尝试对图像数据进行翘曲。
8.3.4 翘曲体积(3D图像)
现在你将按照从地标集1到地标集2的变换来变换一个体积。
- 移除
Landmark Surface Warp模块以及之前的结果motor.part2.simplified2.Warped。 - 切换回单查看器模式:单击左侧查看器以选中它(查看器区域周围会出现白色边框),然后按下
Single view工具栏按钮。 - 加载位于
data / tutorials中的motor.am。 - 把一个
Bounding Box模块和一个Volume Rendering模块附加到motor.am。你可以看到它与motor.part1.simplified.surf相重叠。
图 8.34:为Landmark Image Warp做准备。
- 关闭
motor.part1.simplified.surf和Landmark View的查看器可见性开关。 - 把一个
Landmark Image Warp模块附加到前面步骤中创建的Landmarks-2-sets。 - 在
Landmark Image Warp属性中,把Image Data端口设为motor.am。 - 选项应设为
Direction 1>2和Bookstein方法。按Apply。 - 把
Volume Rendering模块附加到结果motor.Warped以可视化结果。
图 8.35:Landmark Image Warp之后。
你可以看到该体积已按照从地标集1到地标集2的变换被移动和翘曲。不过,结果体积看起来被裁剪在初始输入体积motor.am的范围之内。默认情况下,Landmark Image Warp的结果是在与输入相同的晶格上采样的。为了克服这一点,你可以使用Crop Editor扩展输入体积。或者,你可以把另一个图像附加到Landmark Image Warp的Master端口,作为边界框和分辨率的参考,使其与期望的目标区域重叠。可以使用Arithmetic模块来准备这样的参考(主窗口菜单Project > Create Object...,选择Images And Fields / Arithmetic,然后选择规则的结果类型、分辨率和体积框位置)。
- 然后你可以尝试不同的方法和选项。更多细节参见
Landmark Image Warp参考。
8.3.5 使用Tcl命令取回并复制配准变换
在不创建数据集的变换后副本的情况下设置所计算出的刚性或线性变换,可能会很有用。
你可以在控制台中或在脚本里使用Tcl命令来取回该变换。在Avizo控制台中,键入:
1 | "Landmarks-2-sets" computeRigidTransform |
该命令会把所计算出的刚性变换以16个矩阵值的形式打印在控制台中。
该命令计算出一个刚性变换,它把第一个集合的点尽可能靠近地移动到第二个集合的对应点上(即对应点之间距离平方之和被最小化)。结果以一个4x4变换矩阵的形式返回,例如可以用setTransform命令来变换其他某个数据对象。例如,键入:
1 | eval "motor.part1.simplified.surf" setTransform ["Landmarks-2-sets" computeRigidTransform] |
默认情况下,computeRigidTransform把第1个地标集变换到第2个。你可以在命令中指定使用哪些集合以及顺序。命令computeLinearTransform可用于计算带缩放的变换。更多细节参见参考数据类型:地标(Data Type: Landmarks)。
8.4 3D图像数据集的配准
前面教程中介绍的Transform Editor和Landmarks工具可用于图像配准。本节聚焦于基于图像比较的自动优化配准。在本教程中,你将学会如何配准完全重叠或部分重叠的3D图像——它们可以由相同或不同的采集模态获得。
本节包含以下部分:
Getting started with Register Images moduleRegister Images模块入门Register Images guidelinesRegister Images使用要点Using the Image Registration Wizard - example with partially overlapping images使用图像配准向导——部分重叠图像的示例More about the Register Images module关于Register Images模块的更多内容
要学习本教程,你应当知道如何加载文件、与3D查看器交互、使用模块以及Transform Editor的基础操作。
8.4.1 Register Images模块入门
Register Images模块主要用于精化配准过程。它通过对”变换后的模型图像与参考图像之间匹配程度”的质量函数进行优化,来提供自动配准。
为了让自动配准优化取得成功并达到最佳效率,这两个3D数据体应当已经被摆放得相当接近其最优对齐位置。否则,尽管Register Images中使用了经过优化的层次化算法,处理过程仍可能因为需要搜索更大的参数空间而耗费过多时间。因此,图像配准的方法通常按两个步骤进行:
- 通过手动或自动的近似配准进行预对齐。
- 自动的精化配准。
以下示例逐步展示如何快速配准同一对象的两个3D图像。本教程后面的一节还会向你展示一个使用便捷脚本模块Image Registration Wizard的更简单工作流。
- 加载位于子目录
data / tutorials中的图像堆栈文件chocolate-bar.am。 - 加载位于子目录
data / tutorials中的标签图像chocolate-bar.labels.am。该文件包含通过分割过程得到的不同区域的标记。
现在,让我们为数据设置一些便于观察的可视化。你可以简单地把Ortho Slices和Bounding Box模块附加到每个数据对象。你可能更愿意按第8.2.2节(数据融合、正交视图)教程中所述,在全部三个方向上同时观察数据。
- 把3个
Ortho Slices附加到chocolate-bar.am,并采用不同的朝向(xy、xz和yz)。 - 把一个
Colorwash模块附加到每个Ortho Slice。把Data输入设为chocolate-bar.labels.am,把Fusion Method设为Weighted Sum。 - 为
chocolate-bar.labels.am激活Transform Editor,并按下图所示任意改变该图像的位置和朝向。之后你可以停用Transform Editor,并把一个Bounding Box模块附加到chocolate-bar.labels.am。 - 把一个模块
Geometry Transforms / Register Images附加到chocolate-bar.labels.am——因此它被视为待变换的模型。 - 把
Register Images的Reference输入端口附加到chocolate-bar.am。 - 确保
Register Images模块在Project View中被选中,以便在Properties Area中显示它的控制端口。
图 8.36:为Register Images设置Ortho Slices显示。
现在你可以按照下面的步骤来试验配准了。Register Images的Metric、Transform和Advanced选项端口,基本上分别控制着所使用的匹配质量度量、变换的自由度以及其他高级选项。它们将在后面详细介绍。现在让我们聚焦于Action端口,它暴露了两种预对齐方法以及实际的优化配准。
图 8.37:Register Images端口。
- 首先按下
Align Centers按钮。系统会计算两个数据集的重心,并把体素值作为权重。模型的变换随即被改为一个平移,使两个重心对齐。这两个图像随后变得接近,但你仍能注意到一些残余的偏移:这是因为这两个重心在各自数据集中并不位于相同的相对位置。
图 8.38:Align centers之后。
- 然后按下
Align principal axes按钮。系统会计算两个数据集的重心和惯性矩,同样把体素值作为质量密度。相应的主轴被用来改变模型的变换。系统会根据图像匹配质量度量(Metric端口),从24种可能的主轴对齐方案中确定出最优的一种。这两个图像随后再次接近匹配,但除了平移偏移之外还存在一些朝向漂移:由于体素强度的空间分布不同,两个数据集的主轴并不会精确对齐。
图 8.39:Align principal axes之后。
- 最后,按下
Apply按钮。这会启动实际的迭代配准优化,取决于你的硬件,这可能需要几秒钟。之后你就能看到标签图像分割与灰度图像之间的最佳拟合匹配。
图 8.40:配准之后。
取决于数据集的特征以及位置、朝向、尺度,你或许能够直接单击Apply按钮就完成一次成功的精化配准,而无需预对齐。不过,配准也可能会找不到最优位置而失败,如下所示。
- 为
chocolate-bar-labels.am激活Transform Editor,然后把它的朝向改变90度、缩放改为2倍(通过Dialog,或拖动绿色球形旋钮和白色立方旋钮)。
图 8.41:变换的旋转与缩放值。
- 然后选择
Register Images模块。在Properties Panel中,勾选Transform端口中的Iso-,以便在Rigid变换之外还搜索缩放。 - 按下
Apply按钮。配准明显失败了(扩展参数保持为默认值)。位置不够接近,无法保证得到预期的最优解。搜索因为找不到进一步改进的途径而停止。
图 8.42:配准失败。
- 按下
Align principal axes按钮,然后按Apply按钮。配准成功。
8.4.2 Register Images使用要点
在使用Apply按钮之前,通常有必要先通过其他某种方式把数据集移动到更靠近的位置,即进行预对齐——例如使用Transform Editor,或设置一个事先已知参数的近似变换,或者按前面某个教程所述使用Landmarks。
在许多情况下,实现全自动配准最简单的方式,就是在应用配准之前先用Align Centers和/或Align principal axes预对齐数据集。不过,这并不总是有效,取决于数据集本身,某些情况可能需要特殊处理。
- 当模型与参考数据集之间的差异大到使体素惯性矩不再足够匹配时。例如,某些新增的部件、颗粒或零件显著改变了模型的主轴。
- 当模型与参考在体素强度分布上具有某种对称性,使得惯性矩变得含糊不清时。例如,一个没有明显质量不对称性的圆柱形岩芯样品。
以下是使用Register Images模块的进一步要点。更多细节在本教程后面的一节中给出。
- 确保你的数据集具有可识别的参考物以便预对齐,或者掌握模型相对于参考的大致位置信息。在某些情况下,特别是当你希望实现全自动配准时,你可能需要考虑在采集图像之前,向样品中添加物理标记、不透射线涂料或基准标记(fiducial)。
- 尽可能使用较少的自由度,哪怕只是为了缩短计算时间。也就是说,优先把
Transform端口设为Rigid而不是Rigid+Iso等。如果合适,你也可以把配准搜索限制在一个2D平面内(参见下文的高级选项)。只要有可能,就为参考和模型设置正确的体素尺寸(参见Crop Editor),然后把Transform端口设为”Rigid”,而不是连各向同性缩放一起搜索。 - 你可以选择一个在配准中被考虑的体素强度范围(参见后面一节的高级选项)。
Register Images针对不同模态和体素强度范围提供了稳健的图像匹配度量。不过,忽略数据集中那些本来会影响配准的高强度和/或低强度体素成分,仍然可能非常有用。 - 你可能需要调整度量和高级参数,这取决于例如数据集的模态、体素强度分布、维度和长宽比。关于这方面的更多内容见后面一节。
- 必要时使用缩减后的数据。
Register Images使用了一种高效的层次化算法。不过在某些情况下,你可以通过对输入数据进行二次采样来加快处理,而不损失显著的精度。此外,你也可以只对数据集中最相关的子集或派生数据进行配准,例如裁剪、重采样、滤波、掩膜或分割之后的数据,而不是处理完整的原始数据。然后你可以把这样一个已配准”代理”模型的变换复制到原始数据上。作为一个特例,下一节展示如何配准部分重叠的数据集。
8.4.3 使用图像配准向导——部分重叠图像的示例
有时需要把分别采集的3D图像拼装起来。除非采集过程被仔细记录了准确的图像位置,否则你可能需要利用图像的重叠来精确配准这些图像。重叠区域仍必须包含足以支持成功配准的信息。Register Images模块为解决这个问题提供了最大的灵活性。以下是所概述的方法:
- 从待拼装的体积中提取重叠的子体积
- 使用大致已知的位置进行预对齐,或者对齐重心,或者对齐主轴
- 优化配准
- 把所得到的变换复制到最初的完整模型上
- 合并所得到的图像
为方便起见,你可以使用Image Registration Wizard来帮助配准3D体积。它允许你选择待配准的图像子体积,并为你管理配准过程。(熟悉脚本编写的高级用户可以把Image Registration Wizard当作工作流驱动型脚本模块的一个示例来研究。)
- 加载位于子目录
data / registration/中的图像堆栈文件chocolate-bar.part1-reference.am和chocolate-bar.part2-model.am。 - 把一个
Display / Isosurface模块附加到每个已加载的数据集。更改模型Isosurface的颜色以便区分它。 - 把
Geometry Transforms / Image Registration Wizard附加到chocolate-bar.part2-model.am。 - 在
Image Registration Wizard属性中,把Reference设为chocolate-bar.part1-reference.am。
图 8.43:设置Image Registration Wizard。
- 由于你已经设置好了数据显示,你可以按下
Skip按钮。否则,如果你按Apply,向导会为你设置Ortho Views。
在接下来的两个步骤中,你将从模型体积和参考体积中指定重叠的子体积,并可选择性地进行二次采样。这些子体积应当大致对应于模型与参考之间的共同区域。对于大数据,二次采样可能有用。
请注意,如果你保留默认选项,完整的体积将被直接使用。因此也可以使用Image Registration Wizard来配准完全重叠的体积。
你也可以配准那些未完全加载到内存中、以LDA文件格式存储在磁盘上的图像。当附加到这样一个”核外”(out-of-core)数据集时,二次采样率默认被设为4。
- 大致选择
chocolate-bar.part2-model.am的重叠区域,可以使用3D中的蓝角标签框,也可以使用向导属性中的Box min和size端口。
图 8.44:定义模型子体积。
为了以轴对齐的显示方式更好地可视化子体积的位置,你可能会觉得使用查看器的正交投影模式很方便。
- 例如,在查看器工具栏中,单击
Perspective / Orthographic按钮,然后单击YZ按钮(或按X键),接着Ctrl-Shift+单击Rotate按钮以旋转90度。当你想回到透视显示时,再次单击Perspective/Orthographic按钮。注意:Ortho Views模块是另一个有用的显示替代方案。
图 8.45:设置正交视图。
- 按
Apply进入下一步。 - 大致选择
chocolate-bar.part1-reference.am的重叠区域。
图 8.46:定义参考子体积。
- 按
Apply进入下一步。
现在你准备好进行配准了。Register Images的一部分选项被暴露出来(关于Register Images选项的进一步说明将在下一节中提供)。
- 图像比较度量
- 配准中要考虑的强度范围(在使用
Mutual Information度量时可用) - 自由度:仅旋转和平移;等比缩放;x、y、z方向可变缩放;剪切
- 在配准优化之前所做的预对齐类型。”None”假定模型已经与参考大致对齐。例如,你可能已经用
Transform Editor把模型设置到了正确的初始位置。
图 8.47:Image Registration Wizard - 配准设置。
由于我们所选择的重叠区域适合进行主轴预对齐,你可以简单地保留默认选项。
- 按
Apply最终进入配准。
你应当会得到chocolate-bar.part1-reference.am与chocolate-bar.part2-model.am的良好对齐。
图 8.48:Image Registration Wizard - 最终结果。
- 你可以用向导回到之前的步骤,以尝试不同的选项。
- 一旦获得满意的结果,你就可以移除
Image Registration Wizard。那些辅助模块和临时数据对象会同时被移除。
作为最后一个额外步骤,你现在可以把已配准的体积合并为单个数据集。
- 把一个
Compute / Volume Operations / Merge模块附加到chocolate-bar.part1-reference.am,然后把chocolate-bar.part2-model.am附加为Lattice1附加输入。 - 按下
Apply按钮。 - 你可以把一个
Volume Rendering模块附加到结果Merged-chocolate-bar.part1-reference.am。然后关闭附加到模型和参考部件上的Isosurface模块的可见性。
图 8.49:合并结果。
8.4.4 关于Register Images模块的更多内容
本节给出关于使用Register Images模块时可能有用的关键选项和高级参数的更多细节:
- 自由度
- 图像比较度量
- 优化控制
首先让我们概述一下图像配准的迭代优化是如何工作的。该算法考虑一个待变换的模型数据集,以及一个作为配准目标的参考数据集。
- 第一步是在内部对两个数据集进行重采样,采用一个可调的重采样率。
- 根据所选的度量,计算图像之间的相似性度量。
- 模型变换以一个可变的增量步长被修改,具体取决于自由度和试图最大化相似性的优化策略。
- 该过程随后按层次向更高分辨率重复。
自由度Degrees of freedom
变换参数的数量可以被选择。有四种不同的变换可用:
- 刚性变换:平移和旋转
- 等比缩放
Isotropic scaling - 各向异性缩放
Anisotropic scaling - 剪切
Shearing
图 8.50:自由度:刚性(平移+旋转)、等比缩放、各向异性缩放、剪切。
2D约束配准2D constrained registration
此外,你可以把搜索限制在同一平面内的变换。为此,请切换到高级模式并切换开启Register 2D模式。
图 8.51:配准被限制为2D。
请注意,如果模型或参考输入是一个2D图像(z方向只有1个切片),Register端口会自动被设为2D,这会把搜索空间约束到一个平面。
你可以通过把该2D切片重采样到一个至少2体素深度的板块上来规避这一点,同时保持边界框尺寸为1个体素。这样就可以应用3D的旋转自由度。这可以用Crop Editor完成,做法如下:记下z方向的边界框范围,把Image crop max z索引设为1或更大,并保持Add模式的replicate选项启用。请确保边界框范围被设置为与之前相同的范围(即z方向的体素尺寸)。
图 8.52:从2D图像到板块。
相似性度量Similarity metrics
Metric端口指定两个数据集之间的相似性度量。
图 8.53:Register Images度量。
(Normalized) Mutual Information(归一化)互信息,使用模型和参考的直方图来计算一个能量/熵。目标是最小化该熵,从而最大化两个数据集之间的互信息。这是最通用、最稳健的度量。当图像来自不同模态时(例如CT/MRI、ECT/XCT),推荐使用它(尤其是归一化版本)。另请注意,可以指定直方图范围,以定义配准中要考虑的相关体素值。你可以用它来忽略高强度或低强度的体素。
图 8.54:Register Images直方图范围。
Euclidean Distance欧氏距离:计算两个图像灰度值之间的距离。它非常适合直方图相似(或信号响应相似)的数据集。例如,使用相同模态和强度校准所采集的图像,或同一图像的重叠部分。Correlation相关:计算模型与参考之间的相关值,适合那些直方图(或信号响应)通过线性变换而相似的数据集,即使用相同模态采集、但强度范围分区可能不同的图像。Label Difference标签差异,用于带标签的图像,测量两个相连标签之间的差异。
优化器控制Optimizer control
你可能需要调整优化参数,以便在提升精度、搜索稳健性和处理时间之间取得平衡。
图 8.55:Register Images优化器选项。
Optimizer Step优化器步长:设置优化中所应用步长宽度的初始值和最终值。初始值越大,所测试的变换幅度就越大。最终值越小,所测试的变换就越精细。默认值基于数据边界框和体素尺寸(详情参见参考帮助)。如果预对齐足够精确,你可以把初始值减小到接近体素尺寸。当边界框长宽比相当扁平、图像在配准过程中容易”跑开”时,你可能需要减小初始步长,以便让图像保持重叠的时间更长。Coarsest Resampling最粗重采样:设置最粗的分辨率级别。数据集会被反复重采样,直到达到最粗的重采样率。对于粗搜索,这些值可以被增大。Ignore finest resolution忽略最精细分辨率:如果勾选此框(默认),最高的分辨率级别会被跳过。配准图像通常并不需要完整分辨率,这可以大幅节省处理时间。
根据重采样级别的不同,会应用两种不同的优化策略。在最精细的级别上,应用Quasi Newton优化器。在其他级别上,优化器可以在以下之间选择:
Extensive Direction或Best Neighbor,非常适合粗分辨率级别;Quasi Newton或Line Search,适合最精细的分辨率,或者当信息重叠因为例如扁平的长宽比而减少时;Conjugated Gradient共轭梯度。
图 8.56:以(8, 8, 8)的最粗重采样率进行重采样。
在控制台或脚本中用Tcl获取相似性度量
在一次配准结束时,可以通过控制台中或脚本里的Tcl命令取回一个距离因子,它提供了一个相似性度量:
1 | "Register Images" getLastImageDistance |
这使得可以为特定目的创建自定义的搜索脚本。
8.5 2D图像与3D图像数据集的配准
在某些情况下,需要把来自2D采集的信息(例如SEM、QEMSCAN、薄片显微照片)与一个3D体积(例如显微断层扫描图像)结合起来。
把一个2D图像相对于3D图像进行配准是可行的。不过,信息量有限——特别是在切片厚度方向上——会使这件事变得困难,并可能需要更多处理。
在本节中,你将看到一个解决此类问题的策略示例。关于更多细节、背景信息和进一步的要点,请参阅前面关于3D图像配准的教程第8.4节。
8.5.1 要点
正如前面某节所指出的,2D到3D图像配准的方法分两个阶段进行:
- 通过手动或自动的近似配准进行预对齐。最好事先知道该2D切片的大致位置和朝向。基于地标的配准(使用更可识别的标记或自动分割出的标记)也可以是一种选择。最后,也可以采用下一节所展示的系统性搜索,并可能使用二次采样后的数据。
- 精化配准。可能需要调整配准设置,以考虑2D切片内信息重叠有限的情况。
8.5.2 预对齐:在3D体积(草堆)中搜索一个2D切片(针)
让我们从一个在图像堆栈中搜索某个已提取切片的示例开始。一种可行的策略是:把该2D切片在3D堆栈内的不同位置进行配准,并使用最佳相似性得分来取回最佳切片位置。现在我们将使用一个脚本模块来为我们管理这个搜索过程。
- 打开
data / core目录中的以下文件:3D图像文件Plug.am、2D图像文件Plug-slice93.am,以及脚本文件SearchSlice.scro。 - 为便于显示,你可以使用
Two viewer工具栏按钮拆分查看器。然后把一个Bounding Box模块附加到3D图像,并把一个Ortho Slice模块附加到每个图像。把3D图像的可见性设为左侧查看器,并在右侧查看器中显示2D图像。 - 选择模块
SearchSlice.scro。 - 在
Properties Area中,把Data端口设为Plug.am,把Slice端口设为Plug-slice93.am。在本例中,由于模态相同,你可以把Metric设为Correlation。
图 8.57:搜索脚本 - 选项。
- 为了更快地试验,你可以把用于搜索的切片范围限制为90-95。
- 按下
Properties Area底部的Apply按钮。
该脚本可能需要几秒钟来计算3D图像中不同z位置上最佳配准的图像相似性,并把结果存储在一个Spreadsheet对象中。对于z方向上每个被选中的切片位置,可以使用不同的初始朝向来进行配准。
在本例中,该脚本会提取Slices considered端口所定义的搜索窗口之间的所有切片。在每个提取步骤中,被提取出的切片(名为Plug.view)会使用Register Images模块与Plug-slice93.am进行配准。对于每个切片,会考虑四个初始位置,即绕z轴旋转90度。由此得到四个数值,它们对应于用配准结束时所计算出的变换、以所选度量测量得到的被提取切片与参考切片之间的距离。最小距离和最大距离(即相似性值)会被为每个被提取切片保存到该Spreadsheet中。
- 选择
Spreadsheet对象。 - 在
Properties Area中,单击Spreadsheet: Show按钮。
你可以在该电子表格中查看最佳得分,它对应于较高的最大距离值。它对应于具有最佳相似性值的那个切片。请注意,该脚本对切片的编号是从1开始的,这与Ortho Slice模块的切片编号(从零开始)不同。
图 8.58:搜索脚本 - 结果电子表格。
熟悉脚本编写的高级用户可以为特定目的扩展该脚本。关于如何扩展脚本的指导,参见第11.5章(脚本编写指南)。
8.5.3 精化对齐
近似配准已经完成:你大致知道了切片的位置。现在,可以计算一次精确的配准,以便计算XY平面内的正确变换,并可能对某些倾斜进行调整。本例的步骤如下:
- 只考虑
Plug.am和Plug-slice93.am。 - 单击
Plug-slice93.am,然后单击Transform Editor。 - 把该图像平移到岩芯样品上第94个切片的位置(编号为93)。你可以使用
Transform Editor Dialog:把平移的z值改为94,因为z方向的体素尺寸大约是1。 - 按教程第8.4.4节(3D图像的配准,”2D约束配准”段落)所述,把该2D切片重采样为一个板块。
图 8.59:Crop Editor设置。
- 把一个
Register Images模块附加到Plug-slice93.am。把Reference端口设为Plug.am。选择一个合适的metric(Correlation或Euclidean),并在扩展选项中把optimizer step的初始值改为2(接近体素尺寸),因为该图像在z轴上已经对齐得相当好了。 - 你可以先把
Register mode设为2D,在这种情况下这应该就足够了,然后按Apply。 - 如果你想尝试
3D模式以便考虑轻微的图像倾斜,你可能需要把Optimizer设为Quasi Newton或Linear Search,并减小search step。
8.6 2D图像堆栈的对齐
许多显微技术要求把样品物理切割或采集成若干切片,然后分别从每个横截面拍摄图像。这些图像往往会相互错位。必须对这些图像进行对齐,才能把初始的图像堆栈转变为样品的一个正确的三维模型。
除了前面某个教程中描述的通用配准模块Register Images之外,Avizo还提供了Align Slices模块用于连续切片的对齐。Align Slices可以用于例如组织学切片、经过铣削或抛光的材料表面层、不同焦平面上的图像,以及用相机、光学显微镜、共聚焦显微镜或电子显微镜采集的图像等。
请注意,我们在此不讨论以可变倾角采集的投影图像的对齐这一特定情况,那是断层重建的前提条件。虽然Avizo的算法在一定程度上可以用于此类对齐,但这超出了本教程的范围。
Align Slices用于对齐3D图像堆栈的2D切片。Register Images模块(也可用于配准3D或2D图像)在另一节中描述。使用Align Slices模块进行对齐可以是手动、自动或半自动的。将要讨论以下主题:
Basic manual alignment基本手动对齐Automatic alignment自动对齐Alignment via landmarks通过地标进行对齐Optimizing the quality function优化质量函数Resampling the input data重采样输入数据Other alignment options and guidelines其他对齐选项与要点
8.6.1 基本手动对齐
在本教程中,我们想要对齐一片叶子的10个显微横截面,其中显示有一个气孔。这些图像位于data目录的子目录align中。每个切片存储为一个单独的JPEG图像。文件leaf.info定义了一个由这10个独立切片构成的3D图像堆栈。它是一个简单的ASCII文件,如堆叠图像文件格式一节中所描述。
请注意,这个示例数据集是一个彩色图像(RGBA)堆栈。关于使用灰度图像时需要考虑的问题,另请参阅本教程末尾的”关于align slices的更多内容”一节。
- 加载文件
data / align / leaf.info。 - 在
leaf.info图标上的弹出菜单中选择Geometry Transforms / Align Slices,创建一个Align Slices模块。 - 按下
Align Slices的Edit按钮。
图 8.60:设置Align Slices。
切片对齐器窗口会取代3D查看器打开,让你能够交互式地对齐3D图像堆栈的各个切片。为便于这项任务,通常会同时显示两个连续的切片。这两个切片中有一个是可编辑的,即可以用鼠标平移和旋转它。默认情况下,上方的切片是可编辑的。这一点在对齐窗口的工具栏中有所指示(upper slice按钮被选中)。
图 8.61:Align Slices菜单与工具栏。
- 如有必要,按下
zoom out按钮,以便整个切片都能在查看器中可见。
图 8.62:缩小按钮。
- 按住鼠标左键移动鼠标,可平移上方的切片。
- 按住鼠标左键并同时按住Ctrl键移动鼠标,可旋转上方的切片。此外,也可以用鼠标中键旋转切片。
- 通过选择
lower slice工具按钮,可使下方的切片变为可编辑。平移和旋转下方的切片。 - 按住数字键1。在按住该键期间,只显示下方的切片。
- 按住数字键2。在按住该键期间,只显示上方的切片。
- 按数字键1和2也会改变可编辑的切片。请注意切片工具按钮的状态是如何变化的。
可以使用对齐窗口左上部分的滑块来选择其他切片对。请注意,滑块右侧文本字段中显示的编号始终指的是可编辑的那个切片。也可以分别使用空格键或退格键来选择下一对或上一对切片。方向键用于把当前切片在每个方向上平移一个像素。
- 使用空格键和退格键浏览所有切片。任意地平移和旋转一些切片。
- 按住鼠标左键并同时按住Shift键移动鼠标,可一次平移所有切片。
- 按住鼠标左键并同时按住Shift和Ctrl键移动鼠标,可同时旋转所有切片。同时移动所有切片,对于把感兴趣区域移到图像中心很有用。
8.6.2 自动对齐
除了手动对齐之外,还支持四种自动对齐选项:使用重心和主轴变换的对齐、质量函数的自动优化、基于边缘检测的对齐,以及通过用户定义地标的最佳拟合进行的对齐。主轴方法和边缘检测方法只适用于所显示对象与背景明显分离的图像。优化方法要求图像已经大致对齐。
取决于采集模态和质量,切片可能存在适度的漂移,这可以很容易地自动校正。在某些情况下,你必须先校正少数异常切片,才能启用自动对齐。一个通用的工作流可以概括为两个步骤:
- 用手动或自动方法进行预对齐
- 自动对齐优化
这样的预对齐往往可以使用地标方法来实现。
8.6.3 通过地标进行对齐
通过地标进行对齐首先要求你交互式地定义各地标的位置。这可以在地标编辑(landmark edit)模式下完成。
- 通过按下
landmark alignment mode按钮来激活地标编辑模式。
图 8.63:地标对齐模式按钮。
在地标编辑模式下,只显示一个切片而不是两个。每个切片中都定义了两个默认地标。
- 一旦激活了地标编辑模式(箭头鼠标光标),单击其中一个默认地标。该地标随即被选中,并以红色边框绘制。
- 在图像中的某处单击,以重新定位所选的地标。
- 在没有地标被选中时单击图像中的某处。这会导致下一个地标被自动选中。
- 再次在同一位置单击,以重新定位下一个地标。
双击方法使定义地标位置变得非常容易。当然,也可以定义额外的地标。地标也可以被删除,但地标的最小数量是两个。
- 从
Landmarks菜单中选择Add。 - 在图像中任意位置单击,以指定新地标的位置。
- 单击黄色地标以选中它。
- 从
Landmarks菜单中选择Remove,以再次删除所选的地标。
现在应该能看到两个地标,一个红色的和一个黄色的。接下来,让我们把这些地标移动到一些合理的位置,以便我们能够执行对齐。
- 选择切片编号0。
- 按图8.64所示放置这些地标。请利用双击方法。
- 在所有其他切片中,把地标放置在相同的位置。
图 8.64:用Align Slices设置地标。
一旦所有地标都被设置好,我们就可以对齐这些切片了。可以只对齐当前的切片对,也可以一次对齐所有切片。请注意,所有对齐操作以及地标移动,都可以通过按Ctrl-Z来撤销。
- 按下
manual alignment按钮切换回变换(transform)模式。应该会再次显示两个切片。 - 按下
align current slice pair按钮以对齐当前的切片对。 - 按下相应的按钮以对齐所有切片。
- 按住Shift键用鼠标把整个对象移动并旋转到图像中心。
图 8.65:(1) 手动对齐按钮;(2) 对齐当前切片对;(3) 对齐所有切片。
在大多数切片中,现在的对齐应该相当好了。不过,看一下切片对3-4和4-5(显示在对齐窗口的左下角),你会注意到有些地方不对。事实上,切片编号4在拍摄显微图像时被意外地反转了。所幸,这个错误在Avizo中可以被补偿。
- 选择切片对3-4,并确保上方的切片(即切片编号4)是可编辑的。
- 按下
mirror editable slice按钮以反转上方的切片。 - 按下相应的按钮重新对齐当前的切片对。
- 选择切片对4-5,同样重新对齐这一对切片。
图 8.66:(1) 镜像可编辑切片按钮;(2) 对齐当前切片对。
另外,你也可以按下从右往左数第一个按钮,从头开始对齐所有切片。
8.6.4 优化最小二乘质量函数
一旦所有切片都被大致对齐,我们就可以使用自动优化方法进一步改善对齐。当前对齐的质量显示在对齐窗口的状态栏中。这是一个介于0和100之间的数字,其中100表示完美匹配。该质量函数是由两个切片灰度值差的平方计算出来的。优化方法试图最大化该质量函数。由于只能找到局部极大值,因此要求这些切片事先已被相当好地对齐。
- 在查看器中单击该切片。对齐的质量会显示在窗口底部的状态栏中。记住当前的质量度量值。
- 按下
least-squares alignment mode按钮以激活优化(optimization)模式。记住当前的质量度量值。 - 按下相应的按钮以对齐当前的切片对。观察质量是如何得到改善的。
图 8.67:(1) 最小二乘对齐按钮;(2) 对齐当前切片对。
自动对齐是一个迭代过程。取决于图像的分辨率和预对齐的质量,它可能需要相当长的时间。你可以随时使用Stop按钮中断自动对齐。
- 按下从右往左数第一个按钮以自动对齐所有切片。
8.6.5 把输入数据重采样为结果
如果你对对齐结果感到满意,就可以对输入数据集进行重采样,以创建一个新的、适合进一步可视化或处理的已对齐3D图像。这是通过Align Slices模块的Resample按钮完成的。
- 按下
Align Slices模块的Resample按钮。图像会使用一种精确的插值方法进行重采样。请注意,Align Slices的Resample Method端口也允许你选择一种快速预览模式。 - 在可视化结果之前,你可以打开一个额外的查看器(菜单
View / Layout / Extra Viewer)。目前,只需按下Properties Area中Align Slices模块的Close按钮,即可关闭切片对齐器窗口并再次显示主查看器窗口。在关闭Align Slices编辑模式时,你可以确认把修改后的变换信息保存到输入对象的数据参数部分(下一节将展示如何使用它)。 - 把一个
Ortho Slice模块附加到所得到的对象leaf.align,并验证这些切片是如何对齐的。
默认情况下,重采样后图像结果的尺寸与输入图像的尺寸相同。当Align Slices editor处于活动状态时,你可以选择菜单Align / Options并选择Output标签页,然后就可以定义一个不同的输出尺寸,包括自动适配所有切片。更多细节参见Align Slices帮助。
8.6.6 2D对齐要点,关于Align Slices的更多内容
完成对齐Completing alignment
有时你可能想在之后改善某个对齐。在这种情况下,对齐由初始对齐所产生的重采样后数据是一个坏主意,因为那将需要第二次重采样操作,从而累积插值误差。相反,你可以把变换数据写入原始图像对象,并把该对象以Avizo格式存储。重新加载该Avizo文件后,你可以附加一个新的Align Slices模块,并继续使用已存储的变换。
- 确保切片对齐器窗口已按前面步骤所述被关闭,以便切片变换被记录在输入对象
leaf.info的数据参数中。请注意,在修改切片对齐的同时,你可以随时从切片对齐器的Options菜单中选择Save transformation。 - 删除
Align Slices模块。 - 把
leaf.info保存为Avizo格式。为此请使用菜单File / Save Data As,然后确保选中了Avizo原生格式。 - 重新加载已保存的对象
leaf.am。 - 把一个新的
Align Slices模块附加到leaf.am并单击Edit按钮。你可以验证原来的对齐已被恢复。
使用参考图像对齐Using a reference image alignment
在某些情况下,你可能想把同一个对齐重新应用到另一个具有相同尺寸的独立图像堆栈上,例如一个额外的采集通道,或一个已分割的图像(标签图像)。举例来说,你可能想在图像分割已经独立完成之后再校正对齐。为了避免从头开始分割新重采样的图像,你可以使用参考图像把相同的变换应用到标签图像上。
- 删除任何已有的
Align Slices模块。 - 把文件
data / align / leaf-unaligned.labels加载到Avizo中。 - 把一个新的
Align Slices模块附加到该标签图像。
气孔的保卫细胞已在该标签图像中被标记出来。分割是在图像被对齐之前完成的。现在我们想把为图像数据所定义的相同变换应用到这些标签上。
- 把
Align Slices的Reference端口连接到leaf.am。这是通过在Align Slices图标左侧的小矩形区域上激活弹出菜单来完成的。观察这些变换是如何被应用到标签图像上的。 - 按下
Resample按钮导出一个已对齐的标签图像。
关于彩色图像分割的说明:本教程中使用的图像体积是一个RGBA颜色场。你可以使用Interactive Thresholding进行彩色图像分割。不过,诸如Segmentation Editor之类的其他工具只支持灰度图像。因此,在你能够对重采样后的标签调用这类分割工具之前,必须先用Convert Image Type把颜色场转换为标量场,或者用Channel Works转换为独立的通道。
灰度图像Grayscale images
当把Align Slices模块附加到灰度图像时,会有一个Intensity Range端口可用,用于选择显示和计算对齐时所使用的强度范围。重要的是要确保所选范围包含你希望在对齐中被考虑的强度值。默认情况下,数据窗口由图像直方图自动确定(更多信息参见关于强度范围分区的教程第3.4节)。
选择用于对齐的数据Selecting data used for alignment
在某些情况下,自动对齐可能会被那些无法在所有切片间一致追踪的异常所干扰,例如出现在个别切片上的亮斑或伪影。以下是解决此问题的一些提示:
- 当使用灰度图像输入时,选择一个合适的数据窗口是过滤掉不需要的高或低像素值的一种方式。
Align Slices可以使用一个连接到其Mask输入端口的标签图像,来限制自动对齐所考虑的区域。你可以很容易地生成这样一个掩膜,例如使用Segmentation Editor或Volume Edit模块。- 在复杂情况下,你可以基于初始图像堆栈的任何子集或派生数据(例如裁剪、滤波或分割后的数据)来执行对齐,然后再把该对齐重新应用到原始数据上。
调整对齐选项Tuning alignment options
以下是调整自动对齐的一些要点。要访问Align Slices选项,请在Align Slices编辑模式处于活动状态时选择菜单Align / Options。
- 如果整个堆栈的对齐失败,你可以先尝试识别出最先失败的那些切片并改善这些切片的对齐,这样可能会节省时间。
- 在
General标签页中,取消勾选Allow Rotation复选框,以在对齐中禁用旋转。 - 在
Least Squares标签页中,如果对齐过程在正确匹配之前就停止了,你可以增大Max number of iterations(例如增至5000)。 - 在
Least Squares标签页中,如果某个切片”逃离”了画布,你可以减小Resample size scale factor。这可能发生在信息不足、或在用于加快该过程前几步的粗分辨率下缺乏有意义的重叠质量度量时。 - 你可以用菜单
Options / Fix Reference固定整个堆栈中用于对齐的参考切片。这可以与一个输入Mask图像结合使用,以选择一个有限的图像区域作为固定参考。
关于对齐数据参数的更多内容More about alignment data parameters
切片对齐变换被存储在一个数据参数束AlignTransform中,因此可以被写入已对齐堆栈的文件头。这类数据参数可以用Data Parameter Editor查看。
例如,一条形如slice044 6 4 -16.3025 -1的记录表示:切片#44在X方向被平移了6个体素,在Y方向被平移了4个体素,并绕Z轴旋转了-16.3025度。末尾的-1表示该切片未被镜像(如果为1,则意味着该切片已被镜像)。
图 8.68:对齐数据参数。
8.7 使用FIB Stack Wizard对FIB/SEM图像堆栈进行对齐与前处理
使用FIB/SEM设备(聚焦离子束/扫描电子显微镜)采集图像堆栈,可能需要进行对齐以及其他前处理,例如透视缩短(foreshortening)、剪切和明暗校正。有一个脚本模块FIB Stack Wizard可用于协助这个工作流。
FIB/SEM是一种强大的技术,可在纳米尺度上对样品进行3D成像,并可选择性地获取成分信息。FIB/SEM双束(DualBeam)设备把用于在样品中铣削连续横截面的聚焦离子束,与用于对铣削出的2D截面成像的扫描电子显微镜结合在一起。可以使用多种探测器(SE、低kV BSE、EDX、EBSD等)来分析样品的材料和结构。
图 8.69:FIB/SEM原理:概览图、SEM视图、连续截面。
在这样一次FIB连续切片采集之后,就可以由这些2D图像重建出一个3D模型。取决于输入数据和目的,可能需要进行一些前处理,包括对齐和其他步骤,以确保3D模型的精度,特别是为了后续的定量分析。
离子束与电子束之间的夹角通常是52度。由于被铣削表面与成像轴之间的夹角不是90度,与真实截面相比,原始采集图像会表现出一种几何伪影:
- 明显的向上垂直偏移,并且随堆栈中每张图像累积增大
- 透视缩短:垂直尺寸(y轴相对于采集方向)显得被压缩了。
你可能拿到的图像已经针对这些效应做过校正,但在某些情况下可能需要自行补偿它们,即进行堆栈的剪切和拉伸。
另一种不需要的伪影是横向漂移,它尤其可能在长时间采集中出现;不过即使较短的采集,也可能因为例如环境振动而在图像之间出现某种抖动漂移。
除了几何伪影之外,还可能需要进一步的图像处理来校正噪声或不均匀照明(有时被称为阴影shadowing)。
Avizo提供了许多用于处理和分析FIB/SEM图像的工具,其中包括一个便捷脚本模块,它会引导你走过最常见的处理步骤:FIB Stack Wizard。
在本教程中,你将特别学到如何使用FIB Stack Wizard和其他Avizo工具来完成:
- 导入并校准体素尺寸
- 几何校正与裁剪
- 明暗校正
- 图像滤波
熟悉脚本编写的高级用户可以把FIB Stack Wizard当作工作流驱动型脚本模块的一个示例来研究。
8.7.1 图像导入、体素尺寸与透视缩短校正
本教程所用的数据集来源于一个二硅化钼(MoSi2)样品的图像,这是一种用于炉膛加热元件的材料,由澳大利亚新南威尔士大学的C. Kong提供。原始图像(2048x1768 x 300切片)已为本教程的目的而被修改过。
图 8.70:MoSi2样品 - 由新南威尔士大学C. Kong提供。
- 用菜单
File / Open Data,加载位于Avizo安装目录子目录data / fib中的数据文件MoSi2-shear-corrected.am。该图像堆栈被保存为原生的Avizo数据文件。关于加载图像文件堆栈,参见教程第3.1节(如何加载图像数据)。 - 你可以把一两个
Ortho Slice模块附加到MoSi2-shear-corrected.am来检查数据,或者使用Ortho Views模块来设置4视图显示。
图 8.71:使用Ortho Views模板显示的数据。
完整数据集的范围是宽64微米、深36微米,即对于重采样后的图像,像素尺寸约为$0.125\mu m$(X-Y视场),切片厚度约为$0.486\mu m$(Z体素尺寸)。
取决于输入文件格式,当无法从文件中取得体素尺寸信息时,你可以在加载数据时把像素尺寸和切片厚度指定为”体素尺寸”。你始终可以之后使用Crop Editor来检查和调整它。
- 为
MoSi2-shear-corrected.am激活Crop Editor,以在对话框中查看边界框范围和相应的体素尺寸。之后你可以停用Crop Editor。
图 8.72:边界框与体素尺寸。
非均匀切片厚度Non uniform slice thickness
如果切片厚度的变化对你的应用很重要,你可以使用Avizo Stacked Slice文件格式导入图像,该格式为每个单独的切片定义深度。这在教程第3.1节(如何加载图像数据)中有描述。许多Avizo工具可以直接应用于这类具有不规则的所谓”stacked slice”坐标的数据。你也可以使用Arithmetic或Resample模块把这些图像转变为一个均匀标量场(为Resample模块使用一个均匀晶格作为参考输入)。
透视缩短Foreshortening
取决于数据是如何采集的,你可能需要校正引言中提到的透视缩短效应。如果你为Y轴输入的是视场值,那么就不需要做这项校正。如果你为x和y输入了相同的体素尺寸,而仪器又没有已经施加拉伸校正,那么你可能希望通过把校正后的体素高度直接输入到Crop Editor中来进行校正。要施加透视缩短校正,请把体素高度乘以一个校正因子,该因子取决于FIB与SEM镜筒之间的夹角。例如,对于52度的夹角:$1/sin(52°) = 1/cos(90°-52°) \approx 1.269$。文件MoSi2-shear-corrected.am已经做过透视缩短校正。
测量单位Measurement units
注意:在Preferences中把Display units指定为”nm”,将会以纳米为单位输出测量结果。要了解Avizo中的单位管理,参见Avizo用户指南中的第10.2.9节(Avizo中的单位)。
8.7.2 几何校正概览
向上偏移/剪切Upward shift / shearing
除了体素尺寸之外,所采集的图像可能还需要进一步的几何校正。
在从SEM观察角度看到的原始图像中,各截面显得发生了偏移,而周围的背景或沟槽在整个系列中保持水平对齐。显然,截面内部的3D结构在YZ切片上看起来是被”剪切”过的,需要加以校正。
图 8.73:被剪切的图像堆栈。
原始图像堆栈的显示展现出连续截面的垂直偏移。这里使用了一个裁剪用的斜切Slice来突出显示样品的倾斜。
本教程后面会看到如何使用数据集MoSi2-sheared.am来处理这种情况。
数据集MoSi2-shear-corrected.am已经针对电子束角度做过校正,如下图所示。样品截面被水平对齐,而周围的沟槽则反过来看起来被剪切了,因为它是相对于显微镜原始图像固定的。
图 8.74:经剪切校正的图像堆栈。
漂移校正Drift correction
已针对视角校正过的图像,可能仍需要进行漂移校正,如下所示,这主要在MoSi2-shear-corrected.am的XZ切片中可见。
图 8.75:带抖动效应的XZ与YZ切片。
裁剪Cropping
裁剪是必要的,用于移除3D重建中不需要的区域,例如沟槽周围的区域,或可能位于图像底部的文字信息。
8.7.3 FIB Stack Wizard入门
FIB Stack Wizard可从菜单Geometry Transforms / FIB Stack Wizard访问,它可用于对齐/剪切校正以及明暗校正。该向导模块会引导你逐步走完整个过程。数据会被复制,因为该向导允许你在各步骤中回退以校正特定操作。FIB Stack wizard提出以下步骤:
- 对齐之前的初始裁剪
- 自动对齐
- 对齐之后的裁剪
- 剪切校正
- 明暗校正
- 现在你可以移除项目中任何剩余的
Ortho Slice或其他显示模块:FIB Stack Wizard会自动设置一个Ortho Slice显示。 - 把模块
FIB Stack Wizard附加到MoSi2-shear-corrected.am。
一个带有紧凑Color Wash模块的Ortho Slice会被附加到该数据集,并显示一个Crop Editor对话框。
图 8.76:FIB Stack Wizard第1步。
一旦FIB Stack Wizard在Project View中被选中,它的控制端口就会显示在Properties Area中。
一个Mask输入连接端口让你可以附加一个标签图像,在对齐期间用作掩膜。这一点将在后面详述。
- 你可以使用
Slice Number端口沿当前轴更改所显示的切片。 - 你可以更改
Slice Orientation。
Info端口指示当前的处理步骤。有一些按钮可用于进入下一步、可能跳过某步,或回到上一步。
第1步:对齐之前的裁剪Step 1: Crop before alignment
这一步让你在施加对齐之前裁剪输入数据。目前你将选择一个包含在连续截面之内的区域。
- 在查看器中拖动标签框的绿色角点,或在
Crop Editor对话框中拖动索引值。 - 你可以使用
Slice编号和朝向端口来控制所选区域。 - 请务必从堆栈的最前面一直切到最后面,以验证你没有把想要的区域裁掉。你也可以临时更改
Slice orientation。
图 8.77:用FIB Stack Wizard在对齐之前裁剪。
- 设置好之后,按下
Apply按钮以进入下一步。
第2步:对齐Step 2: Alignment
在这一步中,该向导会自动使用Align Slices模块。向导暴露了以下对齐选项:
Gravity centers:对齐重心和主轴。Least-squares:基于灰度值的最小二乘算法。Enable rotations选项:在切片对齐期间启用旋转。如果禁用该选项,则只会计算平移。对于本示例,我们保留默认值:不带旋转的最小二乘对齐方法。
重要说明:在处理灰度图像时,用于显示和对齐的可见灰度值可以被限制在为该数据集所定义的一个数据窗口内。只有位于这两个边界之间的值才会被基于灰度值的对齐算法使用。你可以在Properties Area中显示的数据信息里检查是否定义了合适的数据窗口。关于编辑该数据窗口,参见Intensity Range Partitioning编辑器以及关于强度范围分区的教程第3.4节。
图 8.78:MoSi2-pre-corrected数据窗口。
- 按下
Apply按钮以进入下一步。Align Slices编辑器窗口会被显示出来,展示对齐的进展。你可以看到各切片是如何相对彼此对齐的。取决于形状在整个切片堆栈中的分布和朝向,可能会出现某种平滑的漂移。
第3步:对齐之后的裁剪Step 3: Crop after alignment
输入数据的各切片现在已相对彼此对齐。抖动漂移效应大部分已经消失。
- 更改切片编号以浏览各切片。由于切片被平移过,你可以看到未被覆盖的黑色区域。
- 你可以选择一个新的裁剪区域以排除这些黑色区域。
图 8.79:用FIB Stack Wizard在对齐之后裁剪。
- 设置好之后,按下
Apply按钮以进入下一步。
第4步:剪切校正Step 4: Shearing correction
在处理未做偏移校正的原始显微镜图像时,或者当对齐应当使用对应于图像中某个固定部分(例如地标)的掩膜来执行时,可能需要这一步。这一点将在后面详述。
- 目前对齐已经完成,所以请单击
Skip按钮以进入下一步。
第5步:明暗校正Step 5: Shading correction
这一步有助于补偿不均匀照明,例如为了便于后续的图像分割。体素值会按一个估计出的背景进行归一化。你可以指定一个强度范围,用于确定哪些体素被纳入背景估计。被探测到的电子数量可能会受周围材料影响而改变,特别是当沟槽不够大、或再沉积(redeposition)导致物质堆积从而降低电子探测时。
- 更改
Low mask threshold值。你可以看到背景强度的非均匀分布。参见下面的图8.80来调整取值。 - 更改这两个阈值,使其尽可能覆盖要被近似为背景的区域,同时尽可能排除那些会改变背景估计的暗色或明亮特征。参见下面的图8.80来调整取值。
shading correction参数是一个应用于按估计背景归一化后的体素值的因子。
图 8.80:用FIB Stack Wizard进行明暗校正。
- 你可以单击
Back按钮以回到之前的步骤并修改某些处理参数。 - 移除
FIB Stack Wizard以删除中间模块和数据对象。
8.7.4 使用掩膜选择要对齐的内容
实际上可以用三种方法来选择要对齐的内容:
- 裁剪数据集。
- 使用
Intensity Range Partitioning编辑器(或Align Slices的数据窗口端口)更改数据窗口。 - 指定一个3D掩膜。
通过前面的步骤,你可以在图像漂移有限的情况下快速取得合理的结果。不过在某些情况下,你可能需要更精确地选择在对齐中要被考虑的图像信息。
- 整体图像结构可能引入漂移,特别是当存在少数大型或有方向性的结构时。图像的子集可能更好地驱动对齐。
- 你可能想利用固定的标记或基准标记。如果你希望采集的体积和分辨率允许,你可以把这类标记保留在视场内,用于实现精确对齐。
- 你可能拿到的是未校正向上偏移的原始图像。为获得最佳结果,你通常应当先施加一次剪切,然后再对齐这些截面区域,以便图像大致与坐标轴对齐。你可以为此使用
AvizoShear模块。此外,你也可以改为基于截面周围的固定区域来对齐图像。
- 加载位于
data / fib中的MoSi2-sheared.am - 附加
FIB Stack Wizard - 在
Crop步骤按Apply以保留全部体积
图 8.81:FIB Stack Wizard第1步。
现在我们需要创建一个掩膜,供FIB Stack Wizard作为输入使用。为此你可以使用Segmentation Editor或任何其他创建标签图像的工具。这里使用Volume Edit模块很方便。
- 把
MoSi2-sheared.am附加到Compute / Volume Operations / Volume Edit。 - 在
Properties Area中,把Volume Editor的Tool端口保持为Draw。 - 单击
Cut端口的Outside按钮:然后你就可以在3D查看器中用套索圈出一个区域。你可以按住Alt键来绘制直线。所绘制的轮廓定义了一个沿视轴拉伸的体积。请务必使用查看器的正交相机模式,以便使轮廓的拉伸方向平行于Z轴(为此请按下查看器工具栏中的Perspective/Orthographic按钮)。 - 然后按下
Create Mask按钮,就会创建一个对应于该区域的标签图像。
图 8.82:为MoSi2创建掩膜。
- 把结果掩膜
MoSi2-sheared.mask附加为FIB Stack Wizard的Mask输入。 - 按下
Apply按钮以触发对齐。Align Slices编辑器窗口会显示被你所定义区域掩膜后的图像。 - 在
Crop步骤按Apply以保留全部体积。 - 用-38度施加
Shear步骤(即52 - 90)。 - 按上述方法继续进行
Shading correction。
8.7.5 FIB堆栈的进一步处理
为了进一步改善FIB/SEM图像,可能需要更多的图像处理,例如补偿噪声或幕帘效应(curtaining)。滤波既可以在对齐之前施加,也可以(更常见地)在由FIB Stack Wizard处理之后施加。特别是如果你想在3D模式下应用图像滤波器,图像应当已被正确对齐。
关于图像滤波的提示,参见第6.7节。特别地,Non-Local Means图像滤波器通常对FIB/SEM图像很有效。另请参阅Filter Sandbox以便方便地尝试各种图像滤波器。
8.8 3D曲面的配准
前面教程中介绍的Transform Editor和Landmarks工具可用于曲面配准。本节聚焦于基于曲面距离最小化的自动优化配准。在本教程中,你将学会如何配准完全重叠或部分重叠的3D三角化曲面。
本节包含以下部分:
Getting started with Align Surfaces moduleAlign Surfaces模块入门Align Surfaces guidelinesAlign Surfaces使用要点Alignment of surface subsets曲面子集的对齐Measure and visualize surface distance测量并可视化曲面距离
8.8.1 Align Surfaces模块入门
Align Surfaces是用于曲面配准的主要工具。Align Principal Axis模块对于沿特定轴受约束的对齐也可能有用。
Align Surfaces模块允许把一个三角化曲面相对于一个参考曲面自动对齐。它计算的是一个刚性变换或一个仿射变换。
以下示例逐步展示如何配准两个曲面。我们从与Transform Editor教程中所用相似的初始步骤开始。
- 开始一个新的Avizo项目。
- 从
data / tutorials目录加载chocolate-bar.simplified曲面文件。 - 复制
chocolate-bar.simplified数据对象(Ctrl-D)。 - 把两个
Surface View模块分别附加到chocolate-bar.simplified和chocolate-bar2.simplified。目前这两个曲面显示为重叠状态。 - 为
chocolate-bar2.simplified激活Transform Editor,并改变chocolate-bar2.simplified的位置和旋转。 - 按下
Transform Editor中的Apply Transform按钮,以按照该变换修改顶点坐标。当被询问时你可以确认该变换。
图 8.83:曲面已被变换。
为了在试验对齐之前在两个曲面之间引入一些差异,我们将使用Surface Simplification Editor。该工具通过边坍缩和顶点移动来减少三角形数量,从而近似原始曲面。这个操作对于减少对齐的计算时间也非常有用,尤其是对大型曲面。
- 在Project View中选择
chocolate-bar2.simplified。然后在Properties Area中激活Simplification Editor。 - 在
Simplify端口中,把所期望的面数设为10000。你可以勾选fast开关以加快计算。 - 按下
Action端口中的Simplify now按钮。
图 8.84:Simplification Editor。
- 把
Geometry Transforms / Align Surfaces模块附加到chocolate-bar2.simplified,即待变换的曲面。 - 然后把
Reference surface端口连接到chocolate-bar.simplified。目前保留默认参数。
图 8.85:Align Surfaces项目。
现在让我们聚焦于Align端口,它暴露了两种预对齐方法以及实际的优化配准。
图 8.86:Align Surfaces属性区域。
- 按下
Align端口中的Centers按钮。
你可以看到这两个曲面现在已被居中。不过,模型的朝向与参考的朝向并不匹配。
图 8.87:Align: Centers结果。
- 现在按下
Align端口中的Principal Axes按钮。
模型与参考现在几乎已经对齐。你仍能注意到一些差异。
- 按下
Align端口中的Surfaces按钮。这会启动迭代式的对齐优化。
经过几步之后,这两个曲面已被尽可能好地对齐。
图 8.88:Align: Principal Axes与Align: Surfaces结果。
注意:你也可以改用一个Ortho Views模块来显示,例如用于叠加曲面的横截面或横截轮廓。
图 8.89:Ortho Views显示。
8.8.2 Align Surfaces使用要点
Align Surfaces模块基于一种迭代最近点(Iterative Closest Point)算法,重复以下步骤:
- 按最近邻准则在两个曲面中关联相互对应的点。
- 估计并施加一个变换,使模型曲面的各点与参考曲面上相应各点之间的均方根距离最小化。
图 8.90:Align Surfaces原理。
尽管对最近邻的搜索已经优化,但这对于大型曲面仍可能很耗时。而质心和主轴则可以被快速对齐。
与图像配准一样,为了限制计算时间和不匹配的风险,建议按两个步骤执行曲面对齐:
- 通过手动或自动的近似配准进行预对齐
- 自动的精化配准
预对齐可以使用Transform Editor或Landmarks完成。对于自动对齐,你可以更简单地按以下顺序尝试:
CentersPrincipal AxesSurfaces
以下是一些额外的提示。
质心的对齐Alignment of the centers of mass
为了对齐质心,三角化曲面的所有顶点都被赋予相同的质量。因此,所计算出的中心可能取决于顶点沿曲面的分布。在某些情况下,使用Surface Simplification Editor或Remesh Surface模块对曲面进行重新网格化可能会有帮助。
主轴的对齐Alignment of the principal axes
惯性矩和主轴同样是在为三角化曲面所有顶点赋予相同质量的前提下计算的。由于三个主轴可以有不同的匹配朝向,系统会检查每种组合,最终解是那个使曲面顶点之间均方根距离最小的组合。通常这为精化配准提供了一个良好的起点。不过在某些情况下,曲面顶点的分布可能导致选出错误的朝向。
曲面距离最小化——迭代式精化配准
如果需要,你可以通过多种方式缩减搜索以加快处理:
- 自由度应被保留在所需的最小值。
- 你可能不需要配准完整的曲面。
- 你可以在参考曲面中选择对应于模型、或对应于模型某个被提取子集的感兴趣区域(
ROI端口)。 - 你可以提取曲面中与配准最相关的部分——这可以使用
Surface View和Extract Surface模块完成。 - 你可以简化曲面或重新网格化曲面。
- 然后你可以把所得到的变换复制到完整数据集上。
- 你可以在参考曲面中选择对应于模型、或对应于模型某个被提取子集的感兴趣区域(
- 如果输入曲面具有完全匹配、且以相同顺序存储的顶点,请确保设置了
use correspondence选项。这样配准会快得多。如果这两个曲面恰好具有相同的点数、但这些顶点并不匹配,那么请确保该选项被禁用。
8.8.3 曲面子集的对齐
在这个示例中,我们将考虑两个部分重叠的三角化曲面。这两个曲面是使用一个Isosurface模块,从图像配准教程中所用的两个独立体积分别提取出来的。由于体积采样的差异,这两个曲面无法精确重叠,但我们现在将搜索最佳配准。
- 加载
data / registration目录中的chocolate-bar.part1.simplified.surf和chocolate-bar.part2.simplified.surf。 - 把
Surface View模块分别附加到chocolate-bar.part1.simplified.surf和chocolate-bar.part2.simplified.surf。 - 使用
Transform Editor,或按关于地标配准的教程中所示的方法,用一个刚性变换把这两个曲面大致配准。
图 8.91:近似配准。
- 把一个
ROI box附加到chocolate-bar.part1.simplified.surf。该感兴趣区域必须界定出两个数据集之间的共同区域。它不应当大得太多。
图 8.92:感兴趣区域(ROI Box)。
- 把模块
Geometry Transforms / Align Surfaces附加到chocolate-bar.part2.simplified.surf。把参考曲面设为chocolate-bar.part1.simplified.surf,把ROI设为所创建的ROI box。选择rigid + uniform scale变换,并把max iter端口设为100。
图 8.93:Align Surfaces项目。
- 单击
Align端口中的Surfaces按钮。对齐最多会计算100次迭代。如果相对RMS小于0.001,算法也会结束。你可以按Stop按钮中断配准。如果对齐还不够精确,你可以重复这一步:相对RMS应该会减小。
图 8.94:精化后的配准。
一旦你获得了优化的配准,你可以选择性地用一个Surface Distance模块检查曲面距离。
8.8.4 测量并可视化曲面距离
在接下来的步骤中,你将计算并显示两个曲面之间的距离图。Measure / Surface Distance模块基于最近点计算两个三角化曲面之间若干种不同的距离度量。
- 你可以移除
Align Surfaces模块。 - 把精化后的变换应用到
chocolate-bar.part2.simplified.surf(Transform Editor / Apply Transform按钮)。 - 把
Measure and Analyze / Surface Distance模块附加到chocolate-bar.part2.simplified.surf。把Surface2端口设为chocolate-bar.part1.simplified.surf。 - 同时也附加
ROI端口以指定相关的感兴趣区域,即前面配准步骤中已经使用过的那个。 - 选择
Distance输出并按Apply。这会创建一个附加到该曲面的标量场。 - 把
Surface View 2(显示chocolate-bar.part2.simplified.surf)的颜色场设为所计算出的距离。选择physics.icol作为颜色图,并把adjust range设为[0, 0.01]。
图 8.95:曲面之间的距离 - 查看器与网络。
图 8.96:曲面之间的距离 - Surface View与Surface Distance。
所计算出的距离统计信息和距离场可能取决于顶点在两个曲面上的分布。你可能希望选择双侧(two-sided)的Direction以进行对称的距离计算。你也可以使用Surface Simplification Editor或Remesh Surface模块对曲面进行重新网格化,以便均匀地重新分布顶点。
还有一个Surface Thickness模块和一个Shortest Edge Distance模块可用。
注意:为了检查3D体积中对象的曲面距离,你可以由已分割的3D图像计算一个3D距离图(使用Image Processing / Distance Maps / Distance Map),然后按数据融合教程中所示,把结果作为颜色场与Surface View一起使用;或者使用Compute / Surface Scalar Field把距离度量附加到该曲面上。
8.9 3D图像与曲面的配准、名义/实际分析
许多应用需要把一个3D模型图像相对于一个参考3D曲面进行配准。在下面的示例中,你将看到如何简单地配准并比较某产品的CT扫描图像与相应的CAD模型。
本节包含两个部分:
A simple workflow for nominal-actual analysis名义/实际分析的简单工作流Advanced - Image/surface registration step by step高级——逐步进行图像/曲面配准
关于文件格式的说明:除了Avizo所支持的许多2D和3D图像格式之外,Avizo还可以直接导入多种几何和曲面数据格式,例如STL或Open Inventor。用于CATIA 5、IGES和STEP等CAD文件格式的附加读取器可在Avizo XReader扩展中获得。Avizo XWind Extension及其捆绑包提供了对多种标准或商业数值模拟格式的曲面和网格的导入能力。
8.9.1 名义/实际分析的简单工作流
现在我们将使用一个向导模块,它会为你管理配准和比较的过程。
- 打开
data / pump-bracket目录中的NominalActualComparison.scro向导。
图 8.97:打开NominalActualComparison向导。
然后你会在Project View中看到NominalActualComparison对象图标。它的用户界面出现在Properties Area中。
图 8.98:NominalActualComparison属性区域。
- 在
Properties Area中按Apply。系统随即提示你加载参考CAD几何文件。 - 在
Open对话框中,选择Pump-bracket-CAD-model.surf(位于data / pump-bracket目录),然后按Open按钮。
图 8.99:CAD曲面。
该CAD曲面以蓝色显示。下一步是加载该模型的CT扫描3D体积。
图 8.100:按Apply以加载体数据。
- 按
Apply,然后在Open对话框中选择Pump-bracket-CT-scan.am,并按Open按钮。
注意:这个数据集对应于机加工之前原始铸件的CT扫描采集。下面用它来更好地突出参考与模型之间的明显差异。你也可以尝试所包含的文件Pump-bracket-machined-CT-scan.am,以便在CAD模型与实际机加工零件之间进行更贴切的比较。
该3D CT体积会在CAD曲面之外、在一个不同的位置显示出来。你可以在3D查看器窗口中旋转和移动场景以便更仔细地观察。
图 8.101:体数据与CAD曲面。
该3D体积是在内部使用一个Isosurface模块、以一个自动校准的阈值来显示的,以便展示对象边界。更多细节参见关于强度范围分区的教程第3.4节。
在Properties Area中,你可以选择性地控制简化参数以加快计算。
图 8.102:配准体积。
现在让我们继续把扫描出的零件相对于参考CAD几何进行配准。
- 保留默认选项并按
Apply。
系统会使用上面提到的自动校准从该3D体积中提取出一个模型边界曲面。然后需要几秒钟来准备这些曲面、按选项简化曲面,并在自动主轴预对齐之后配准这些曲面。之后你就能看到这两个曲面叠加在一起。
图 8.103:体积与CAD已对齐。
最后一步计算并显示名义/实际距离的分布图。你可以选择性地定义一个简化的曲面分辨率以加快处理。
图 8.104:计算名义/实际差异。
- 保留默认选项并按
Apply。
图 8.105:CAD与体数据之间的距离。
8.9.2 高级——逐步进行图像/曲面配准
图 8.106:用主轴配准进行预对齐。
这里我们概述当前版本Avizo中可用的两种把3D图像与3D曲面对齐的方法。更多细节请参阅关于3D图像配准和3D曲面配准的各节。
方法1:把由3D图像生成的曲面与参考曲面对齐。
- 使用
Isosurface和Extract Surface由该图像创建一个曲面,或者由已分割的图像使用Generate Surface。 - 使用
Align Surfaces模块进行预对齐和精化配准。
对于从CAD模型导入的曲面中可能存在的拓扑不一致(即孔洞),这种方法是最稳健的。上面的示例采用的就是这种方法。熟悉脚本编写的高级用户可以把NominalActualComparison向导当作工作流驱动型脚本模块的一个示例来研究。
方法2:把该3D图像与另一个由参考曲面生成的3D图像进行配准。
- 使用
Convert / Scan Surface To Image把该曲面转变为一个3D图像。此时要求输入的三角化曲面是水密的(没有孔洞)。 - 使用
Register Images模块或Image Registration Wizard进行预对齐和精化配准。
对于以单个参考对3D图像进行快速或重复配准,这种方法可能很有效。
