图像配准(非刚性/非线性)

4
我正在寻找一些图像对准的算法(最好有源代码)。我认为图像的变形无法用单一的投影矩阵来描述,因为畸变不对称且不均匀。更具体地说,变形可能是桶形畸变、梯形畸变或者图像的旋转等等。我希望能够获得两个图像中像素的对应关系,以便可以得到“变形场”的表示。
我进行了大量的谷歌搜索,并发现一些基于物理学思想的算法,但它们似乎只能收敛到局部极值而不是全局极值。我能够接受程序是半自动的,这意味着需要简单的用户交互。
也许像SIFT(尺度不变特征变换)这样的算法比较适合?但我认为它无法提供足够密集的“变形场”。
如果重要的话,那么没有尺度上的变化。
以下是复杂场的示例: http://www.math.ucla.edu/~yanovsky/Research/ImageRegistration/2DMRI/2DMRI_lambda400_grid_only1.png

1
两点说明:
  1. SIFT不是一种图像配准算法,而是一种用于计算图像局部特征的算法。在您的情况下,它可以帮助您获取匹配像素对。
  2. 您是否有转换的数学模型?
- Tal Darom
我知道SIFT算法,但是我认为如果我有高密度的兴趣点对,我可以插值其他像素。 理论上,我有变形之和 桶形畸变/枕形畸变 u=x+Const*(xx+yy)x; v=y+Const(xx+yy)y; 梯形畸变 u=(m11x+m12y+m13); v=(m21x+m22y+m23); 旋转 u=xcosa-ysina; v=xsina+y*cosa; - mrgloom
2个回答

3
你要找的是“光流”。搜索这些词将会给你带来众多结果。在OpenCV中,有一个叫做calcOpticalFlowFarneback()(在视频模块中)的函数可以实现你想要的功能。C API仍然实现了Horn&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等。
-- 编辑:关于光流 --
光流分为两类算法:稠密算法和非稠密算法。稠密算法为每个像素提供一个运动向量,而非稠密算法为每个跟踪特征提供一个向量。
稠密族的例子包括Horn-Schunck和Farneback(与OpenCV保持一致),以及更一般地,任何将某些成本函数最小化到整个图像上的算法(各种TV-L1流等)。
非稠密族的一个例子是KLT,在OpenCV中称为Lucas-Kanade。
在稠密族中,由于每个像素的运动几乎是自由的,因此它可以处理尺度变化。然而,请记住,这些算法在大运动/尺度变化的情况下可能会失败,因为它们通常依赖于线性化(运动和图像变化的泰勒展开式)。此外,在变分方法中,每个像素都对总体结果有贡献。因此,在一个图像中不可见的部分很可能会使算法偏离实际解决方案。
无论如何,粗略到细致的实现技术可用于规避这些限制,并且这些问题通常只有很小的影响。某些算法还可以明确处理粗暴的照明变化或大面积遮挡/未遮挡区域,例如这篇论文,它计算光流场旁边的“创新”稀疏图像。

你知道使用光流进行图像配准的工具的示例吗? - mrgloom
我能为图像的每个像素计算光流吗? - mrgloom
1
这取决于算法。声称计算密集型光流(Farneback、Horn-Schunk、所有TV-L1的变体等)的算法会给出每个像素的光流向量。依赖于特征检测和跟踪的第一步的算法(例如OpenCV的LK实现)只会给出每个特征点的向量。 - sansuiso
谢谢,我会好好研究密集光流的。但还有一个问题,如果一张图像有另一张图像没有的像素(两张图像只在某些区域重叠),如果比例发生变化,算法在这些情况下如何工作? - mrgloom

0

我发现了一些医学专用软件,但它们很复杂,不能使用简单的图像格式,但似乎它可以满足我的需求。 http://www.csd.uoc.gr/~komod/FastPD/index.html 通过离散优化进行Drop - Deformable Registration


http://bigwww.epfl.ch/thevenaz/unwarpj/ http://fiji.sc/wiki/index.php/Feature_Extraction http://fiji.sc/wiki/index.php/TrakEM2 http://fiji.sc/wiki/index.php/BUnwarpJ http://fiji.sc/wiki/index.php/Register_Virtual_Stack_Slices - mrgloom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接