4

我正在寻找一些用于图像配准的算法(最好是如果源代码可用)。图像变形不能用单应矩阵来描述(因为我认为失真不是对称的和不均匀的),更具体地说,变形就像桶形/失真和梯形失真,可能是图像的一些旋转。我想获得两个图像的像素对,因此我可以获得“变形场”的表示。

我google了很多,发现有一些基于一些物理思想的算法,但似乎它们可以收敛到局部最大值,但不能收敛到全局。我可以将程序设置为半自动,这意味着一些简单的用户交互。

也许像 SIFT 这样的算法是合适的?但我认为它不能提供具有规则足够密度的“变形场”。

如果它很重要,则没有规模变化。

复杂字段示例 http://www.math.ucla.edu/~yanovsky/Research/ImageRegistration/2DMRI/2DMRI_lambda400_grid_only1.png

4

2 回答 2

3

您正在寻找的是“光流”。搜索这些术语将为您带来大量结果。

在 OpenCV 中,有一个名为 calcOpticalFlowFarneback() 的函数(在视频模块中)可以满足您的需求。C API 仍然有一个由 Horn & Schunck (1981) 称为“确定光流”的经典论文的实现。

你也可以看看我做的这个工作,以及一些代码(但要小心,opencl内存代码中仍然存在一些神秘的错误。我将在今年晚些时候发布一个更正的版本。):http:/ /lts2www.epfl.ch/people/dangelo/opticalflow

除了 OpenCV 的光流(和我的 ;-)之外,您还可以在 itk.org 上查看 ITK,了解完整的图像配准链(主要针对医学成像)。

还有很多光流代码(matlab、C/C++...)可以通过google找到,例如cs.brown.edu/~dqsun/research/software.html、gpu4vision等

-- 编辑:关于光流 --

光流分为两类算法:密集算法和其他算法。密集算法为每个像素提供一个运动向量,非密集算法为每个跟踪特征提供一个向量。

稠密家族的例子包括 Horn-Schunck 和 Farneback(与 opencv 保持一致),以及更普遍地任何可以最小化整个图像上的某些成本函数的算法(各种 TV-L1 流等)。

非密集家族的一个例子是 KLT,在 opencv 中称为 Lucas-Kanade。

在密集族中,由于每个像素的运动几乎是自由的,它可以处理尺度变化。但是请记住,这些算法在大运动/尺度变化的情况下可能会失败,因为它们通常依赖于线性化(运动和图像变化的泰勒展开)。此外,在变分方法中,每个像素都对整体结果有贡献。因此,一张图像中不可见的部分可能会使算法偏离实际解决方案。

无论如何,使用诸如从粗到细的实现之类的技术来绕过这些限制,而这些问题通常只有很小的影响。一些算法也可以明确处理残酷的光照变化或大的遮挡/未遮挡区域,例如,参见本文,该论文计算了光流场旁边的“创新”稀疏图像。

于 2012-04-25T11:43:09.073 回答
0

我发现了一些特定于医学的软件,但它很复杂,并且不适用于简单的图像格式,但似乎它可以满足我的需要。 http://www.csd.uoc.gr/~komod/FastPD/index.html Drop - 使用离散优化的可变形配准

于 2012-05-04T08:17:50.700 回答