Elastic
3.1 介绍
Elastix 的发展始于 2003 年,其目的是方便配准研究。
3.2 安装
3.3 使用 Elastix
Elastix 是一个命令行程序,你需要打开一个命令行界面(DOS 界面,Shell
等),输入合适的 Elastix 命令。它没有图形使用界面,可以使用如下命令寻求
帮助:
elastix --help
他会给出一个强制的或者可选择的参数列表,最基础的运行一个配准的命
令:
elastix -f fixedImage.ext -m movingImage.ext -out outputDirectory
-p parameterFile.txt
‘ext’是图像文件的扩展名。以上的要求是必须的,这些是最运行 elastix
的最低要求。参数文件的重要的文件:它是写在普通的 Text 文档中,执行什么
样的配准(指标,优化器等)以及定义配准的参数。在整个过程中有很高的灵活
性和控制性。更详细的参数文件将在 3.4 节中介绍。所有的输出都写到输出目录
(运行 Elastix 前建立)中,输出包括日志文件(elastix.log),变化参数 Tu(联
系固定和浮动图像)(TransformParameters.?.txt)以及,可选择配准图像的结
果 IM(Tμ(x)) (result.?.mhd).日志文件包含所有配准过程中显示在屏幕上的
内 容 。 参 数 文 件 的 内 容 也 会 被 复 制 到 日 志 中 , 同 时 还 包 含 了
TransformParameters.?.txt 的内容,日志是用于检测错误的。
除了强制的内容,还有很多可选择的要求。掩膜图像可通过添加下面命令:
-fMask fixedMask.ext and/or -mMask movingMask.ext
初始变换可以提供一个有效的变换参数文件,通过以下命令
-t0 TransformParameters.txt
命令行选项-threads unsigned int
用户可通过此命令规定 Elastix 的最大线程。
可以用 Elastix 以不同的方式连续进行多配准,可能是不同类型的,可能前
一个配准的输出作为下一个的输入。首先是运行 Elastix 进行第一个配准,用其
输出
(TransformParameter.0.txt 可在输出目录中找到)作为新的配准的输入
使用下面命令:
-t0. So:
elastix
-f ...
-m ...
-out
out1
-p param1.txt
Elastix
-f...
-m...
-out
out2
-p param2.txt
-t0
out1/TransformParameters.0.txt
elastix
-f ...
-m ...
-out
out3
-p param3.txt
-t0
out2/TransformParameters.0.txt
还有一种方法是一个接一个的运行 Elastix:
elastix ... -p param1.txt -p param2.txt -p param3.txt
这种变换自动的联合每一次配准.
在 Elastix 的网页上,在 About 部分你可以找到例子关于怎样使用这个程序。
现在你可以试着运行一下例子,看一下配准效果。
3.4 参数文件
参数文件是一个 Text 文件,它定义的配准的组件和参数值。下面提供了一
个例子:(ParameterName value(s))
参数由括号内的值提供,第一个值是参数名,第二个是值是一个或多个参数
值,
如果参数值是字符串型,需要用””.如下:
(ParameterName "value1" ... "valueN")
添加注释可以通过//......附录 A 提供了一个最简单的参数文件的例子。
每
一
类
的
可
用
参
数
可
在
http://elastix.isi.uu.nl/doxygen/parameter.html.中找到。参数文件的例
子
到
下
面
的
网
页
中
寻
找
http://elastix.bigr.nl/wiki/index.php/Parameter_file_database.
组件和参数的选择对于配准很重要,所有我们要合理设置参数。这些参数的
选择觉得了配准的效果是好还是坏。因此,第五章致力于优化配准的参数。
第四章 transformix
4.1 介绍
到目前为止,你至少能够通过调用Elastix运行一个配准程序了,把变换作
为一种基础应用到图像配准中是很有用的。也许你想原始图像(一般很大)运用
这种变换来获得结果。或者你需要把这种变换应用到标签图像或者配准图像中。
为了这些目的,你可以使用transformix,它是和elastix一起发展的。
4.2 怎样调用transformix
像 elastix 一 样 , reansformix 是 一 种 命 令 行 程 序 。 你 可 以 通 过 调 用
transformix --help获得最基本的帮助,它会给出一系列的强制的和可选择的
选项
基本的命令是:
Transformix -in inputImage.ext -out outputDirectory
-tp TransformParameters.txt
这个命令将会改变输入图像,同时产生一个日志文件transformix.log保存
到输出目录中去。你想要应用的这种变形取决于变性参数文件,变性参数文件可
能是先前运行的elastix产生的文件,也可以是你自己写入的。4.3节说明变形参
数文件的结构和参数。
使用transformix除了可以使图像变形,你还可以用他来评估在某些点处的
变形。者意味着输入点被指定在固定图像的区域内,因为变形方向是从固定图像
到浮动图像,2.6节有介绍。如果你想要变形一系列的用户指定点,合适的命令
是:
transformix -def inputPoints.txt -out outputDirectory
-tp TransformParameters.txt
这会产生一个文件outputpoints.txt,它包含输入点X和变形点Tμ(x)(作
为固定图像的体素和物理坐标),位移向量Tμ(x) − x 屋里坐标轴上),如果-in
inputImage.ext也指定了,那么变形的输出点就是输入图像的指标。文件
inputPoints.txt有如下的结构:
point1 x point1 y [point1 z]
point2 x point2 y [point2 z]. . .
第一行说明给定的点可以是固定图像的指标也可以是物理坐标系中的点。
第二行存储了将要指定的点的个数,接着给出点的值。
transformix输入点除了可以是一般的txt格式还支持vtk文件:
transformix -def
inputPoints.vtk -out outputDirectory -tp
TransformParameters.txt
输出文件的格式保存为outputpoints.vtk,目前,vtk文件任然有一点限制,
仅支持带有三角形网络的ASCII文件,输出文件中丢失很多变化点数据。
如果你想知道固定图像中所有像素点的变化,可以使用-def命令:
outputDirectory
transformix
-out
-def
TransformParameters.txt
all
-tp
变形场被储存在向量图像deformationField.m一个体素包含位移向量
Tμ(x),x-物理坐标轴。向量的元素存储为float型。
除了计算变形场,transmix还可以计算变形的空间雅克比行列式。空间雅
克比行列式在识别局部压缩或者膨胀是很有用的,例如在肺通气的研究中。雅克
比行列式可以计算整幅图像,使用以下命令:
transformix
-jac
TransformParameters.txt
all
-out
outputDirectory
-tp
计算完整的雅克比空间矩阵还可以用如下命令:
transformix
-jacmat
all
-out
outputDirectory
-tp
TransformParameters.txt
每一个体素将用d×d的矩阵填充,d是图像的维数,来代替简单的标量值。
行命令-threads unsigned int可以定义transformix的最大线程。
4.3 变形参数文件
配 准 的 结 果 是 固 定 图 像 和 浮 动 图 像 的 变 形 Tμ 。 变 形 参 数 存 储 在
TransformParameters.?.txt文件中。附录B中有一个刚性的2D变形的例子。
文件包含所有对固定图像进行重采样到文件的指定区域。
变形参数文件可以由使用者手动编辑或者建立。多参数变形是通过利用
InitialTransformParametersFileName tag.应用其他变性参数文件迭代完成
的。最后的变形是将初始变换参数文件名设置为“NoInitialTransform”。
变形参数文件中最重要的一个参数是FinalBSplineInterpolationOrder.,
通常将其设置为3,因为这样配准后的质量将是最好的,详见5.3.4。但是,如果
你 利 用 transmix 来 变 形 浮 动 图 像 的 分 割 部 分 , 你 必 须 手 动 的 将
FinalBSplineInterpolationOrder设置为0。这回确保你的分割变换仍然是一个
二进制标签图像。如果仍设为3,分割图像将会包括垃圾。这和“超越产权”的
高阶b样条插值有关。
4.4 一些细节
4.4.1 运行时间
Transmix 的运行时间由一下部分组成
1.计算输入图像分解的b样条(如果你选择了FinalBSpline-Interpolator)
2. 计算每个像素的变形
3.为输入图像的每个像素插值
我们从来没有用测试来衡量每一步的计算复杂度,但我们认为步骤1是最不耗时的任
务。这一步是可以通过最近邻或者线性插值来避免的。第二部取决于变形的选择,
如刚性和仿射变换,大大快于非线性变换,如b样条变换。步骤3取决于特定的插补
器。为了增加复杂性:最近的邻,线性,第一顺序b样条,第二顺序2 b样条等。
4.4.2 存储消耗
5.5.3 将 会 详 细 介 绍 存 储 消 耗 , 或 者 参 见
http://elastix.bigr.nl/wiki/index.php/Memory_consumption_transfor
mix
第五章 指南
5.1 选择配准组件
在执行配准时,你需要选择一些组件,详见第二章。
这些组件需要写入参数文件中,例如:
(Transform "BSplineTransform")
(Metric "AdvancedMattesMutualInformation")
表5.1给出了一些必要的组件及其建议。第二章没有讲配准组件。配准组件
用来连接所有其他组件,实现多分辨率的配准。因此有人说他很好的完成了图
2.2的任务。同时,第二章也没有明确提出重采样组件。它只是在配准后用来生
成 浮 动 图 像 的 变 换 。 目 前 , elastix 中 只 有 一 种 可 用 的 重 采 样 : the
DefaultResampler,这将不会详细讨论。
Component
Registration
Metric
Sampler
Interpolator
ResampleInterpolator
Resampler
Transform
Optimizer
FixedImagePyramid
MovingImagePyramid
Recommendation
MultiResolutionRegistration
AdvancedMattesMutualInformation
RandomCoordinate
BSplineInterpolator
FinalBSplineInterpolator
DefaultResampler
Depends on the application
AdaptiveStochasticGradientDescent
FixedSmoothingImagePyramid
MovingSmoothingImagePyramid