图像配准的恶魔算法(用于假人)
Posted
技术标签:
【中文标题】图像配准的恶魔算法(用于假人)【英文标题】:Demons algorithm for image registration (for dummies) 【发布时间】:2014-02-05 12:10:07 【问题描述】:我试图制作一个应用程序,将 java 中的 2 个图像与 opencv 之间的差异进行比较。在尝试了各种方法后,我发现了一个名为 Demons algorithm 的算法。
对我来说,它似乎通过对每个地方的一些变换来给出图像的差异。但我无法理解,因为我找到的参考资料对我来说太复杂了。
即使是恶魔算法也不能满足我的需求,我有兴趣学习它。
谁能简单地解释一下恶魔算法中发生了什么,以及如何编写一个简单的代码来在 2 张图像上使用该算法。
【问题讨论】:
【参考方案1】:我可以给你一个关于可变形图像配准的通用算法的概述,恶魔就是其中之一
算法有3个组成部分,相似度度量,变换模型和优化算法。
相似性度量用于计算像素/补丁之间基于像素/基于补丁的相似性。常见的相似性度量是 SSD,单模态图像的归一化互相关,而多模态图像配准则使用互信息等信息论度量。
在可变形配准的情况下,它们通常具有叠加在图像上的规则网格,并且通过解决优化问题来使网格变形,该优化问题的公式化使得相似性度量和施加在变换上的平滑度损失最小化.在可变形配准中,一旦网格发生变形,则在像素级使用网格的 B-Spine 插值计算像素级的最终变换,以使变换平滑且连续。
解决优化问题有两种通用方法,有些人使用离散优化并将其作为 MRF 优化问题来解决,而有些人使用梯度下降,我认为恶魔使用梯度下降。
在基于 MRF 的方法的情况下,一元成本是网格中每个节点变形的成本,它是块之间计算的相似度,施加网格平滑度的成对成本通常是波茨/截断二次势这确保了网格中的相邻节点具有几乎相同的位移。一旦你有了一元和成对的成本,你就可以将它提供给 MRF 优化算法并获得网格级别的位移,然后使用 B 样条插值来计算像素级别的位移。这个过程在多个尺度上以粗到细的方式重复,并且算法在每个尺度上运行多次(每次减少每个节点的位移)。
在基于梯度下降的方法中,他们用相似度度量和在图像上计算的网格变换来制定问题,然后计算他们制定的能量函数的梯度。使用迭代梯度下降可以最小化能量函数,但是这些方法可能会陷入局部最小值并且非常缓慢。
一些流行的方法是DROP,Elastix,itk提供了一些工具
【讨论】:
感谢您的回答。它的信息量很大。您能否提供一些有关如何“计算补丁之间的相似性”以获得变形成本的信息?你能推荐一个教程或资源来理解和实现这些算法吗,因为互联网上的大部分东西都很难理解。 这里有2个来自MICCAI 2010的教程,你可以看看,campar.in.tum.de/twiki/pub/DefRegTutorial/WebHome/…campar.in.tum.de/twiki/pub/DefRegTutorial/WebHome/…【参考方案2】:如果你想了解更多关于可变形图像配准相关的算法,我建议你看一下 FAIR(guide book),FAIR 是 Matlab 的工具箱,所以你会有例子来理解理论。
http://www.cas.mcmaster.ca/~modersit/FAIR/
那么如果你想具体看一些恶魔的例子,这里还有另一个工具箱:
http://www.mathworks.es/matlabcentral/fileexchange/21451-multimodality-non-rigid-demon-algorithm-image-registration
【讨论】:
以上是关于图像配准的恶魔算法(用于假人)的主要内容,如果未能解决你的问题,请参考以下文章