我正在寻找一些算法(最好是可用的源代码) 用于图像注册。 单应矩阵无法描述图像变形(因为我认为失真不对称而不是 同质的,更具体地说,变形就像桶形/扭曲和梯形失真,可能是图像的一些旋转。 我想获得两个图像的像素对,因此我可以获得“变形场”的表示。
我谷歌很多,并发现有一些算法基于一些phisics的想法,但似乎他们可以收敛 到本地最大值,但不是全局的。 我可以将程序设为半自动,这意味着一些简单的用户交互。
也许像SIFT这样的算法会合适吗? 但我认为它不能提供规则足够密度的“变形场”。
如果重要的是没有比例变化。
复杂字段的示例 http://www.math.ucla.edu/~yanovsky/Research/ImageRegistration/2DMRI/2DMRI_lambda400_grid_only1.png
答案 0 :(得分:3)
您正在寻找的是“光流”。搜索这些术语将产生大量结果。
在OpenCV中,有一个名为calcOpticalFlowFarneback()的函数(在视频模块中)可以执行您想要的操作。 C API仍然有Horn& Sons的经典论文的实现。 Schunck(1981)称之为“确定光流”。
您还可以查看我已完成的这项工作以及一些代码(但要小心,opencl内存代码中仍然存在一些神秘的错误。我将在今年晚些时候发布更正版本。): http://lts2www.epfl.ch/people/dangelo/opticalflow
除了OpenCV的光流(和我的;-)之外,您还可以在itk.org上查看ITK的完整图像注册链(主要针对医学成像)。
还有很多光学流程代码(matlab,C / C ++ ......)可以通过谷歌找到,例如cs.brown.edu/~dqsun/research/software.html,gpu4vision等< / p>
- 编辑:关于光流 -
光流分为两类算法:密集算法和其他算法。 密集算法为每个像素提供一个运动矢量,非密集算法为每个跟踪特征提供一个矢量。
密集族的例子包括Horn-Schunck和Farneback(与opencv保持一致),更一般地说,任何能够最大限度地降低整个图像(各种TV-L1流等)的成本函数的算法。
非密集家庭的一个例子是KLT,在opencv中称为Lucas-Kanade。
在密集族中,由于每个像素的运动几乎是免费的,因此它可以处理尺度变化。但请记住,在大运动/比例变化的情况下,这些算法可能会失败,因为它们通常依赖于线性化(运动和图像变化的泰勒展开)。此外,在变分方法中,每个像素对整体结果有贡献。因此,在一个图像中不可见的部分可能会使算法偏离实际解决方案。
无论如何,采用粗到精的实现等技术来绕过这些限制,这些问题通常只会产生很小的影响。某些算法也可以明确地处理残酷的照明变化或大的遮挡/未遮挡区域,例如参见this paper计算稀疏的“创新”图像以及光流场。
答案 1 :(得分:0)
我发现了一些特定于医疗的软件,但它很复杂,并且它不适用于简单的图像格式,但似乎它是我需要的。 http://www.csd.uoc.gr/~komod/FastPD/index.html Drop - 使用离散优化的可变形配准