医学开源配准软件Elastix手册(中文翻译)——第五章 指南(重要配准参数)

5.3重要的参数

在2.3节我们已经讨论了每个组件的重要参数,表5.1说明了一些推荐模式;

5.3.1  配准

只使用 MultiResolutionRegistration,因为他很好。如果你不想用这些多分辨率,你可以设置NumberOfResolutions为1,不需要设置其他的,5.3.7将会详细讨论这点。

5.3.2  相似性测度

无论是单模还是多模图像,AdvancedMattesMutualInformation usually都能取得较好的结果。它支持度量值和衍生品的快速计算,如果是支持压缩的以b样条变换。

你需要设置直方图块的数量,这是用来计算联合直方图的。这取决于你输入的图像的动态范围,以经验来看32就可以了。(NumberOfHistogramBins32)

5.3.3 重采样

结合StandardGradientDescent和AdaptiveStochasticGradientDescent优化器(推荐的优化方法),RandomCoordinate采样器有很好的效果。优化方法可以使用少量的采样,在每次迭代中随机选择,这能大大降低配准时间,详见2.7节。

设置NumberOfSpatialSamples为3000,不低于2000.相比把采样值画到体素网格上(如随机采样),RandomCoordinate 采样避免了网格效应,将在5.3.6谈论随机采样。

(NewSamplesEveryIteration"true")

强调在每次采样中选择新样品。

在RandomCoordinate采样器中最有趣的选项是UseRandomSampleRegion参数,它和SampleRegionSize参数一起使用。如果UseRandomSampleRegion被设置成false(默认值),那么将从整个图像区域获取采样值。当被设置成true,采样器将随机的选择一个体素,且从该体素周围的方形区域内选择其余的体素。周围方形区域的大小取决于SampleRegionSize(物理坐标系中),下面是一个3D图像的例子:

(ImageSampler"RandomCoordinate")

(NewSamplesEveryIteration"true")

(UseRandomSampleRegion"true")

(SampleRegionSize50.0 50.0 50.0)

(NumberOfSpatialSamples2000)

每次迭代中,方块区域503mm是随机选择的。实际上,可获得一种局部相似性测量的方法,它能获得更好的配准结果。参考Klein[2008]的文章。采样区域的大小设为整幅图片的1/3是合理的。

 

5.3.4 图像插值

在配准时,使用一阶BSplineInterpolator:  (BSplineInterpolationOrder 1)

我们建议使用使用B样条插值而不是LinearInterpolator,因为BSplineInterpolator有一个专用的函数来计算浮动图像的倒数。

我们建议使用更高质量的三阶B样条插值来产生浮动图像的变换。

(ResampleInterpolator"FinalBSplineInterpolator")

(FinalBSplineInterpolationOrder3)

5.3.5  几何变换

变换取决于你的应用程序。对于同一个病人的图像,你想要没有非刚性变换,你可以考虑使用刚性变换,可以选择EulerTransform。如果你想要弥补图片大小的差异,你可以选择仿射变换:AffineTransform.这两种变换需要有一个旋转中心,可由用户设定。推荐使用默认的欧几里得中心。所要设置的另一个参数就是Scales。它为每一个变换参数μ定义一个缩放比例,它将用于优化过程中。

缩放是用来将同一个范围的元素μ放在一起。(旋转参数一般比变换参数的范围小)。我们建议让elastix自动计算:(AutomaticScalesEstimation"true")。我们总是在非刚性变换之前使用刚性或者仿射变换,这样可以得到好的初始校准。

对于非刚性配准问题elastix有BSplineTransform.非刚性的B样条变换被定义为一个统一的控制点网格。这个网格是由网格节点之间的距离定义的。网格间距决定了网格的密度,或者你所能建模的变换位置,我们推荐开始使用粗糙的网格做全局变换。这样首先可以匹配一个较大的结构体,这也是为什么一开始使用刚性变换或者仿射变换的原因。在以后的方案中你可以使用逐步细化变换。思想就是随后匹配较小的结构,达到最终精度。最终的网格距离指定为:(FinalGridSpacingInPhysicalUnits10.0 10.0 10.0)

 数字的个数取决于图像的维数。在大多数医学图像中,间距的单位是毫米。也可以指定体素单元中的网格:(FinalGridSpacingInVoxels16.0 16.0 16.0)

如果最终的B样条网格间距取得很大,你就不能匹配小的结构。另一方面,如果间距取得太小,可以匹配小的结构,但是变换的自由度太大。可能导致不规则的变形,特别是图像均匀的部分,因为该区域没有边缘可以引导配准。一个惩罚或者规范项可以解决这个问题,见方程2.2。因为这取决于所需精度,所以很难给定一个值。但是我们可以尝试:如果你对大的结构感兴趣,你可以把它设置为32个体素,如果你对小结构感兴趣,可以设置为16或者8,甚至是4.最后可能要求一个归一项,除非你已经仔细逐步细化网格间距。

定义多网格使用命令GridSpacingSchedule:

(NumberOfResolutions4)

(FinalGridSpacingInVoxels8.0 8.0)

(GridSpacingSchedule6.0 6.0 4.0 4.0 2.5 2.5 1.0 1.0)

GridSpacingSchedule为所有的分辨率等级定义了乘法因子。结合最终网格间距,所有分辨率等级的网格间距都确定了。如果是2D图像,上述例子指定在分辨率0级时网格间距为6 × 8 = 48个体素,接下来的分辨率等级间距中分别是32、20、8.默认的GridSpacingSchedule值使用2的幂次,(GridSpacingSchedule8.0 8.0 4.0 4.0 2.0 2.0 1.0 1.0)(2D图像)

注释:假设B样条变换通过控制网格点间距可变,参数的个数取决于μ的大小而达到最小。如果加倍间距,3D图像参数的数量增加到8个因子.对于一个2563的图像,网格间距是16个像素将会产生(256/16)3×3≈ 12000个参数。对于间距为8的图像,将会有100000个参数。根据具体实现,参数的数量直接影响存储消耗和配准时间。

在大多数文献中,三阶B样条是用来做图像配准的,当然其他阶数的B样条也可以。你可以通过实验改变BSplineTransformSplineOrder选项,1.2.3都可以。低阶的会节约计算时间,但可能会引起少量平滑变形。严格的说,一阶的变形场是不可区分的。

作为可替代B样条的变换,elastix包括了SplineKernelTransform,它利用了一个薄板样条类型的变换。详见2.6节和6.4节。最后最好在每一个参数文件中包含以下行:

(HowToCombineTransforms"Compose")

Elastix 4.2版本,在默认情况下,此行被省去了,“Add”是为了后向兼容。

4.3版本以后,默认值变成了"Compose",这样能兼容更多的应用程序。见2.6节,方程2.17和2.18

5.3.6  函数优化

StandardGradientDescent方法,见方程2.20和2.22 提供了快速配准的可能性,见Kleinet al. [2007].主要思想是:在每次迭代时,随机选择体素集来计算消耗函数。选择的体素的数量是由参数NumberOfSpatialSamples决定的,见5.3.3节。一般3000-5000就足够了。告诉优化器在每次迭代中选择新的体素是很重要的:(NewSamplesEveryIteration"true")

医学开源配准软件Elastix手册(中文翻译)——第五章 指南(重要配准参数)_第1张图片

图5.1   序列1 :a=1000,A=50,α=0.602    序列2:a=400,A=10,α=0.602 两个序列的步长相同,但是序列2衰减的更快。

 

StandardGradientDescent方法的下降趋势,你需要调整增益系数ak见5.3节。方程2.21需要选择步长ak在elastix中由方程2.22定义。图5.2给了一些例子。

参数α和A定义了函数的衰减斜率。我们建议将α设置为0.6,A使用50

(SPalpha 0.6)

(SPA 50.0)

这使得参数α成为最重要的调整参数(在elastix中叫做SP_a).他是重要的参数,如果选的好就是成功,选的不好就是失败。如果a设置的太大,迭代求解算法2.21将会变得不稳定,甚至你的图像将会面目全非。如果设置的太低,你永远得不到最优值,或者陷入局部最小值。图5.2解释了这些。

较好的选择a依赖于配准的成本函数,使SSD达到很好结果的a和使MI也达到很好的结果a不一样。最后,a也决定于你期望的固定图像和浮动图像之间变形的量。因此,很难给定一个参考值。一般我们建议你按数量级考虑参数值,如果a=10太小,尝试a=100而不是a=11.考虑互信息,归一化相关系数,归一化互信息,可以将一开始设置a=1000。对于相似性测度的均方差,你应该尝试将一些值设为小于1.如果a的值设置的太大的话你会遇到下面的问题:“Too many samples mapoutside moving image buffer”.尽管这也有可能是由其他原因造成的,网站的FAQ会给出关于这个问题的更多解释。对每一个分辨率等级,你可以指定一个不同的SP_a值,但是每种分辨率都初始化为以下值会简单一些:

(SP_a 1000.0 1000.01000.0)或者相当于(SP_a 1000.0)

最后一个重要的函数优化的参数是迭代的最大次数:(MaximumNumberOfIterations 500)

 

 


图5.2 步长a(SP_a)选择对图像的影响,该例子可从elastix网站下载。(a)图固定图像

(b)浮动图像(c)-(e)是配准图像,(c)a=320太小了 (d)a=3200在下载的例子中很合适 (e)32000太大了

在StandardGradientDescent中不仅有最大值也有最小值,因为完成这个函数优化没有其他的停止条件。一般,迭代次数越多,配准结果越好。当然,迭代次数多也会消耗更多的时间。

500次迭代是一个很好的开始,如果对你而言时间不是问题,你可以用2000次迭代。如果你很忙,你可以将迭代次数缩减到200次,对于小的2D图像,进行刚性配准,可以使用更少迭代次数。迭代次数多的另一方面的好处是得到较好的配准结果SP_a可以有较大的范围。调整SP_a就变得很容易了。

一种新的发展是一种自适应随机梯度下降算法Klein et al. [2009],对a没有要求,第六章有函数优化。

 

5.3.7  图像金字塔

FixedImagePyramid和MovingImagePyramid有相同的选项。下面讲的FixedImagePyramid和MovingImagePyramid是一样的。

因为使用FixedSmoothingImagePyramid不会丢失有用信息,而且你不会使用FullSampler,所以减小采样值不会节约时间。对于大图片和多分辨率水平的图片

可能会占用很多存储空间。需要设置两个参数来定义多分辨率:分辨率等级(NumberOfResolutions)和每个分辨率等级中指定的采样方案(FixedImagePyramidSchedule)。如果你只设置了NumberOfResolutions,将会使用默认的方案(每一维有2个参数用来平滑固定图像),最后一个分辨率等级设置σ = 0.5。这个方案通常是没有问题的。如果你的数据很不均匀,在最大间距方向上可能不太需要模糊处理。

一般3个分辨率等级是很好的。如果固定图像和浮动图像一开始差距很大的话,你可以增加分辨率等级到5或者6,这样图像就会更加的模糊,可以配准更大的主导结构。

金字塔方案决定了x,y,z方向上的每一个分辨率等级模糊量(如果是下采样该使用FixedRecursiveImagePyramid)。可以如下指定:

(NumberOfResolutions4)

(FixedImagePyramidSchedule8 8 4 4 2 2 1 1)

在这个例子中2D图像使用了4个分辨率等级。在分辨率等级0时,每个方向模糊量是σ=8/2个体素(σ是金字塔方案值的一半),等级1:σ=4/2,最后一级,将是原始图像作为配准图像。指定固定图像和浮动图像的金字塔等级和方案一样的可以用如下命令:

(ImagePyramidSchedule4 4 2 2 2 1 1 1 1)

对于3D图像,有3个分辨率等级,z方向上不平滑。

 

你可能感兴趣的:(算法,开源,中文手册,elastix,医学图像配准)