第四章 transformix

4.1 介绍

到目前为止,您至少可以通过正确调用elasticix来进行配准。 将配准发现的转换应用于另一个图像通常也是有用的。 也许您想将转换应用于原始(较大)图像以获得分辨率。 或者您可能需要转换以将其应用于标签图像(细分)。 为了这些目的,可以使用一个名为transformix的程序。 它与elastix同时开发。

4.2 如何调用transformix

像elastix一样,transformix是一个命令行驱动的程序。 您可以通过以下方式获得有关如何调用的基本帮助:transformix --help 这将给出一个强制和可选参数的列表。

最基本的命令如下:
transformix -in inputImage.ext -out outputDirectory -tp TransformParameters.txt
此调用将转换输入图像并将其与日志文件transformix.log一起写入输出目录。 您要应用的转换在transform参数文件中定义。 转换参数文件可能是以前运行elastix的结果(见第3.3节),但也可以由您自己编写。 第4.3节说明了转换参数文件应具有的结构和内容。

除了使用transformix进行图像变形外,还可以使用transformix来评估某些点x∈ΩF的变换Tμ(x)。 这意味着输入点在固定的图像区域(!)中被指定,因为变换方向是从固定到运动图像,如第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]
. . .
```
第一行表示是否将点作为固定图像的“索引”,或作为“点”(物理坐标)给出。 第二行存储要指定的点数。 之后给出点数据。
而不是输入点的自定义.txt格式,transformix还支持.vtk文件:
`transformix -def inputPoints.vtk -out outputDirectory -tp TransformParameters.txt`
输出然后保存为outputpoints.vtk。 对.vtk文件的支持仍然有限。 目前,仅支持ASCII文件,带有三角形网格。 任何元数据在输出文件中丢失。

如果您想知道固定图像的所有体素的变形,只需使用-def all:
`transformix -def all -out outputDirectory -tp TransformParameters.txt`

变形字段存储为矢量图像deformField.mhd。 每个体素在物理坐标中包含位移向量Tμ(x) - x。 向量的元素存储为浮点值。

除了计算变形场外,transformix还具有计算变换空间雅可比的能力。 空间Jacobian的决定因素识别局部压缩或扩张的量,并且可能是非常有用的,例如在肺通气研究中。 可以在整个图像上计算空间雅可比的行列式:
`transformix -jac all -out outputDirectory -tp TransformParameters.txt`
也可以计算完整的空间雅可比矩阵:
`transformix -jacmat all -out outputDirectory -tp TransformParameters.txt`
其中每个体素填充有d×d矩阵,其中d是图像维度,而不是简单的标量值。

使用命令行选项-threads unsigned int,用户可以指定transformix将使用的最大线程数。

# 4.3 转换参数文件
配准的结果是与固定和运动图像相关的变换Tμ。 此变换的参数存储在TransformParameters.?.txt-file中。 2D刚体变换的结构示例在附录B中给出。文本文件包含将输入图像(运动图像)重新取样到文件中指定的区域(默认为固定图像区域)所需的所有信息。

转换参数文件可以手动编辑或创建,方便用户使用。 通过迭代提供另一个转换参数文件与InitialTransformParametersFileName标签组成多个转换。 最后的转换将是初始转换参数文件名设置为“NoInitialTransform”的转换。

转换参数文件中的一个重要参数是FinalBSplineInterpolationOrder。 通常设置为3,因为在配准后产生最佳质量的结果图像,请参见第5.3.4节。 但是,如果您使用transformix来变形运动图像的分割(因此,二进制图像),则需要手动将FinalBSplineInterpolationOrder更改为0。这将确保变形分割仍是二进制标签图像。 如果使用三阶插值,则变形的分割图像将包含垃圾。 这与高阶B样条插值的“过冲属性”有关。

# 4.4 一些细节
### 4.4.1 运行
transformix的运行时间由以下部分组成:
  1. 计算输入图像的B样条分解(如果您选择了FinalBSplineInterpolator);
  2. 计算每个体素的变换;
  3. 插入每个体素的输入图像。

我们从未进行过测试来测量每个步骤的计算复杂度,但是我们认为第1步是最耗时的任务。 显然可以通过使用最近邻或线性内插器来避免这一步骤。 步骤2取决于变换的选择,其中线性变换(例如刚性和仿射变换)比非线性变换(例如B样条变换)快得多。 步骤3取决于具体的内插器。 按照复杂度顺序,最近邻,线性,一阶B样条,二阶B样条等。

### 4.4.2 内存消耗
有关内存消耗的更多信息,请参见第5.5.3节,并且:`http://elastix.bigr.nl/wiki/index.php/Memory_consumption_transformix`










你可能感兴趣的:(第四章 transformix)