OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
图像配准

详细说明

配准模块实现了参数化图像配准。所实现的**方法是直接对齐**,即它直接使用像素值来计算图像对之间的配准,这与基于特征的配准相反。该实现主要遵循[265]中的相应部分。

当我们尝试配准在不同光照条件或曝光时间下拍摄的图片,或者当图像只部分重叠时,基于特征的方法相对于基于像素的方法具有一些优势。另一方面,与基于特征的方法相比,基于像素方法的主要优势在于,对于某些图片(在相似的光照条件下拍摄且有显著重叠的图片),它们具有更好的精度,因为我们使用了图像中所有可用信息,这使我们能够实现亚像素精度。这对于多帧去噪或超分辨率等某些应用尤其重要。

事实上,像素和特征配准方法可以相互补充:一个应用可以先使用特征获得粗略的配准,然后对图像的重叠区域使用基于像素的方法来精炼配准。所开发的代码允许这种用例。

该模块实现了从抽象类cv::reg::Mapcv::reg::Mapper派生的类。前者用于模拟两个图像之间的坐标变换,后者封装了一种调用计算图像对之间Map的方法。尽管目标是实现基于像素的方法,但该模块可以扩展以支持其他可以计算图像之间变换的方法(特征方法、光流等)。

Map派生的每个类都实现了运动模型,如下所示:

MapProject也可以用于模拟仿射运动或平移,但对其进行某些操作的成本更高,这就是定义另外两个类的原因。

Mapper派生的类有:

如果图像之间的运动不是非常大,使用这些类的正常方法是创建一个MapperGrad*对象,并将其作为输入来创建一个MapperPyramid,然后调用它来执行计算。然而,如果图像之间的运动足够小,我们可以直接使用MapperGrad*类。另一种可能性是先使用基于特征的方法进行粗略配准,然后通过MapperPyramid或直接一个MapperGrad*对象进行精炼。mapper的“calculate”方法接受一个初始运动估计作为输入。

在决定使用哪个MapperGrad时,我们必须考虑到参数更多的mapper可以处理更复杂的运动,但涉及的计算量更大,因此速度更慢。此外,如果我们对序列遵循的运动模型有信心,超出所需范围增加参数数量会降低精度:最好使用我们能使用的最少自由度。

在模块测试中,有一些例子展示了如何使用任何已实现的mapper来配准一对图像。

类  cv::reg::Map
 用于模拟两个图像之间Map的基类。更多...
 
类  cv::reg::MapAffine
 
类  cv::reg::Mapper
 用于模拟计算map的算法的基类。更多...
 
类  cv::reg::MapperGradAffine
 
类  cv::reg::MapperGradEuclid
 
类  cv::reg::MapperGradProj
 
类  cv::reg::MapperGradShift
 
类  cv::reg::MapperGradSimilar
 
类  cv::reg::MapperPyramid
 
类  cv::reg::MapProjec
 
类  cv::reg::MapShift
 
类  cv::reg::MapTypeCaster