对我来说,它似乎通过每个位置上的某些变换来给出图像的差异。但是,由于我找到的参考资料对我来说太复杂了,我无法理解它。
即使“恶魔算法”不能满足我的需求,我也有兴趣学习它。
请问有人可以简单地解释一下“恶魔算法”的原理,并说明如何编写简单的代码来使用该算法比较两幅图像吗?
我可以为您提供可变形图像配准的常规算法概述,其中“demons”是其中之一。
该算法包括三个组成部分:相似度度量、变换模型和优化算法。
相似度度量用于计算像素/补丁之间的基于像素/基于补丁的相似度。单模态图像通常使用SSD、归一化互相关等常见相似性测量方法,而在多模态图像配准的情况下则使用互信息等信息论测量方法。
对于可变形配准,通常在图像上叠加一个规则网格,并通过解决最小化相似度度量和施加在变换上的平滑惩罚的优化问题来变形网格。在可变形配准中,一旦网格发生变形,就使用B-Spline插值将网格的变换计算到像素级别,以使变换平滑连续。
解决优化问题有两种常规方法,一些人使用离散优化并将其作为MRF优化问题来解决,而另一些人使用梯度下降,我认为"demons"使用了梯度下降。
在基于MRF的方法中,一元成本是变形网格中每个节点的成本,并且是计算补丁之间相似度,强制成对的成本保证网格的平滑性,通常是Potts/截断二次势,以确保网格中相邻节点具有几乎相同的位移。一旦您获得了一元和成对成本,就将其馈送到MRF优化算法中,并在网格级别获取位移,然后使用B-Spline插值来计算像素级位移。这个过程按粗到细的方式在多个尺度上重复进行,并且算法在每个尺度上运行多次(每次减少每个节点的位移)。
在基于梯度下降的方法中,他们利用相似度度量和计算在图像上的网格变换来构建问题,然后计算所构建能量函数的梯度。可以使用迭代梯度下降来最小化能量函数,但这些方法可能会陷入局部最小值且速度较慢。
一些流行方法包括DROP、Elastix,itk提供了一些工具。