用于图像配准的恶魔算法(用于假人)

时间:2014-02-05 12:10:07

标签: algorithm opencv image-processing computer-vision

我试图创建一个应用程序来比较java中的两个图像与opencv之间的差异。在尝试了各种方法之后,我遇到了名为Demons algorithm的算法。

对我而言,似乎通过对每个地方的某些转变来给出图像的差异。但我无法理解,因为我发现的参考资料对我来说太复杂了。

即使是恶魔算法也没有做我需要的东西,我有兴趣学习它。

任何人都可以简单地解释恶魔算法中发生的事情以及如何编写一个简单的代码来在2张图像上使用该算法。

2 个答案:

答案 0 :(得分:5)

我可以概述一下可变形图像配准的一般算法,恶魔就是其中之一

该算法有3个组成部分,一个相似性度量,一个转换模型和一个优化算法。

相似性度量用于计算像素/块之间基于像素/基于块的相似性。常见的相似性度量是SSD,单模态图像的归一化互相关,而在多模态图像配准的情况下,使用信息理论测量,如互信息。

在可变形配准的情况下,它们通常具有叠加在图像上的规则网格,并且通过求解优化问题来使网格变形,该优化问题被公式化以使得相似度量和对变换施加的平滑度惩罚最小化。在可变形配准中,一旦网格出现变形,就会使用像素级网格的B-Spine插值计算像素级别的最终变换,以使变换平滑连续。

有两种解决优化问题的一般方法,有些人使用离散优化并将其解决为MRF优化问题,而有些人使用梯度下降,我认为恶魔使用梯度下降。

在基于MRF的方法的情况下,一元成本是使网格中的每个节点变形的成本,并且它是在补丁之间计算的相似性,强制网格平滑的成对成本,通常是一个小插值/截断的二次方位势这确保了网格中的相邻节点具有几乎相同的位移。获得一元和成对成本后,将其提供给MRF优化算法并获得网格水平的位移,然后使用B样条插值计算像素级位移。这个过程在几个尺度上以粗略到精细的方式重复,并且算法在每个尺度上运行多次(每次减少每个节点的位移)。

在基于梯度下降的方法的情况下,他们用相似性度量和在图像上计算的网格变换来制定问题,然后计算他们已经制定的能量函数的梯度。能量函数使用迭代梯度下降最小化,但是这些方法可能陷入局部最小值并且非常慢。

一些流行的方法是DROP,Elastix,itk提供了一些工具

答案 1 :(得分:2)

如果您想了解更多有关可变形图像配准的算法,我建议您查看FAIR(指南),FAIR是Matlab的工具箱,因此您将有一些实例来理解该理论。

http://www.cas.mcmaster.ca/~modersit/FAIR/

然后,如果你想特别看一些恶魔的例子,这里你有另外一个工具箱:

http://www.mathworks.es/matlabcentral/fileexchange/21451-multimodality-non-rigid-demon-algorithm-image-registration