当前位置: 首页 > news >正文

OpenCV图像注册模块

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

注册模块实现了参数化图像配准。所实现的方法是直接对齐(direct alignment),即,它直接使用像素值来计算一对图像之间的配准,与基于特征的配准方法相对。该实现基本上遵循了[254]中对应的部分。

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

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

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

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

MapShift:对简单的平移进行建模。
MapAffine:对仿射变换进行建模。
MapProjec:对投影变换进行建模。

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

从 Mapper 派生的类有:

MapperGradShift:基于梯度的对齐,用于计算平移。它产生一个 MapShift(两个参数,对应于平移向量)。
MapperGradEuclid:基于梯度的对齐,用于欧几里得运动,即旋转和平移。它计算三个参数(角度和平移向量),尽管结果为了方便存储在 MapAffine 对象中。
MapperGradSimilar:基于梯度的对齐,用于计算相似性变换,即在欧几里得运动的基础上增加了缩放。它计算四个参数(两个用于反对称矩阵,两个用于平移向量),尽管结果为了更好的方便性存储在 MapAffine 对象中。
MapperGradAffine:基于梯度的对齐,用于仿射运动模型。参数数量为六个,结果存储在 MapAffine 对象中。
MapperGradProj:基于梯度的对齐,用于计算投影变换。参数数量为八个,结果存储在 MapProject 对象中。
MapperPyramid:它使用高斯金字塔实现分层运动估计。它的构造函数接受任何实现 Mapper 接口的其他对象作为参数,并且正是该 mapper 被 MapperPyramid 在金字塔的每个尺度上调用。

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

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

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

http://www.dtcms.com/a/331906.html

相关文章:

  • Spring 三级缓存三个小问题记录
  • linux常见文件系统+用户管理+常见故障
  • Redis面试精讲 Day 21:Redis缓存穿透、击穿、雪崩解决方案
  • 纸箱拆垛:物流自动化中的“开箱密码”与3D视觉的智能革命
  • JavaScript方法借用技术详解
  • 【软件安装|1】CentOS7最新可用国内 yum 镜像源配置和Linux版MySQL8.0安装及其相关知识
  • 6、C 语言指针初阶知识点总结
  • 金融新政激活工业“智脑”,鸿道操作系统筑基新型工业化
  • 70亿参数让机器人“开窍“:英伟达Cosmos Reason如何让AI理解物理世界
  • 批量标准化、模型的保存和加载
  • 20道DOM相关前端面试题
  • CLAM复现问题记录
  • flutter3.7.12版本设置TextField的contextMenuBuilder的文字颜色
  • 水印消失术!JavaAI深度学习去水印技术深度剖析
  • 在启智平台使用A100对文心开源大模型Ernie4.5 0.3B微调(失败)
  • vector 认识及使用
  • Docker 入门与实战:从环境搭建到项目部署
  • Java构造器与工厂模式(静态工程方法)详解
  • 20道JavaScript相关前端面试题及答案
  • 2025.8.24复习总结
  • WAF 与 SIEM 联动:攻击事件的实时告警与溯源分析流程
  • 3D-R1、Scene-R1、SpaceR论文解读
  • C#:TryGetValue
  • C语言零基础第16讲:内存函数
  • 技术速递|通过 GitHub Models 在 Actions 中实现项目自动化
  • linux 下第三方库编译及交叉编译——MDBTOOLS--arm-64
  • 使用Docker安装Gitea自托管的Git服务
  • 零基础从头教学Linux(Day 12)
  • python+vue扫盲
  • 智能制造综合实训平台数据采集物联网解决方案