OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
无匹配项
图像配准

详细描述

配准模块实现了参数化图像配准。实现的方法是直接对齐,即它直接使用像素值来计算一对图像之间的配准,而不是基于特征的配准。该实现基本上遵循[259]中的对应部分。

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

事实上,像素和特征配准方法可以相互补充:应用程序可以首先使用特征获得粗略配准,然后在图像的重叠区域使用基于像素的方法细化配准。开发的代码允许此用例。

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

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

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

Mapper派生的类是

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

在决定使用哪个MapperGrad时,我们必须考虑到具有更多参数的映射器可以处理更复杂的运动,但涉及更多计算,因此速度较慢。此外,如果我们对序列遵循的运动模型充满信心,则超过所需数量的参数会降低精度:最好使用我们可以使用的最小自由度数。

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

类 cv::reg::Map
 用于对两个图像之间的Map进行建模的基类。更多...
 
类 cv::reg::MapAffine
 
类 cv::reg::Mapper
 用于对计算映射的算法进行建模的基类。更多...
 
类 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