理解全景图像拼接

news2025/5/26 6:03:58

1 3D到2D透视投影

    三维空间上点  p 投影到二维空间 q 有两种方式:1)正交投影,2)透视投影。

    正交投影直接舍去 z 轴信息,该模型仅在远心镜头上是合理的,或者对于物体深度远小于其到摄像机距离时的近似模型。

    常规镜头成像可以使用透视投影建模,如下图:

      

    三维空间点 p=(X,Y,Z) 投影到二维空间点 q = (x,y),镜头光轴在 Z 轴上,满足关系 

    真实的物理模型将 X 投影到 x, 但使用 

 可以避免关系式中产生一个负号,因此投影点可写为 

, 同理,有 

    使用矩阵可表示为 

,变换结果 

 为齐次坐标,

    以上变换举证前三列可表达相机自身相关性质,被称为内参,比如 

,其中, f 表示相机焦距,af表示像元横纵比(一般情形下为 1),

    cx,cy 表示 CCD 中心与光轴间平移距离,s 表示了 CCD 法向量与光轴不平行程度。

    在实际应用中,一般会使用简单模型 

,该模型仅表达了焦距与CCD中心平移。

    如果将以上变换矩阵改写成满秩矩阵,那么其逆变换就变得很简单,使用 4*4 变换矩阵重新构造透视投影如下:

     

,

    改写齐次坐标 

,前两个分量表示图像上坐标值,第四个分量表示深度信息。

    以上透视投影模型要求三维空间坐标满足以下条件:

    1)以镜头光心(小孔成像中的小孔)为原点;

    2)Z轴垂直与 CCD 平面;

    3)XY轴与 CCD 平面 xy 轴平行;

    但在实际三维坐标系可能是任意建立的,所以在透视投影前需要变换坐标系,使用平移+旋转模型如下:

    

,其中,R 为 3*3 旋转矩阵,t 为平移向量。

    综上,任意三维空间上点到二维平面的透视投影可表示为 

2 成对图像配准

       

    如上图(a)所示,三维空间上点 p 映射到图像平面为 

,由于 

 均为满足矩阵,故其逆矩阵一定存在,有 

    结合 

 可建立 

 与 

 之间的关系为 

    以上关系需要相机记录成像点深度信息,一般相机无法记录深度信息,因此,可以使用图像 (b)建立关系:

    假设所有三维空间上点均在一个空间平面上,即满足 

    当进行投影变换时,其深度信息为零, 具体可表达为  

    观察可知,删除变换矩阵最后一行与最后一列不影响计算结果,因此,可简化表达式为 

    以上变换有 8 个自由度,将变换矩阵重新改写为 

    变换矩阵 

 表达了平面场景的映射关系,这正好是 “图像配准” 一文中使用的模型之一。

3 旋转全景模型

    在一个固定的世界坐标下,假设相机绕某旋转点旋转拍照,两次(或多次)拍照间相机坐标原点保持不变,但光轴随旋转发生改变。

    三维空间中任意固定点在每次拍照中的映射可表达为:

    1)建立相机坐标系(原点与世界坐标系一致,光轴为相机当前光轴);

    2)使用旋转矩阵 R 将世界坐标系下点旋转为相机坐标系下点;

    3)使用投影矩阵投影到相机平面;

    因此,三维空间点在两幅图像中的映射关系可简化为 

    假设 K 仅包含相机焦距信息,则 

    

,当焦距已知时,此参数仅为旋转,当焦距未知时,可以是固定焦距或者变化焦距。

    一般情况下,该变化的参数个数为 4,包括 1)固定未知焦距,2)旋转参数(3个),

    这比8个参数投影变换更加简化,该模型是用于全景图像拼接的理想模型。

4 迭代求解

    给定一对图像上若干匹配点 

,使用平面投影变换可得 

    两边同时乘以分母得 

    进一步整理为 

    使用该线性方程组可以求解变换矩阵 

 的初始估计。

    在初始估计 

 基础上使用非线性迭代方程为 

,

    

    

 为变换矩阵 

 的估计,

 为第二次迭代估计,通过最小化第二次估计误差即求得合理的 

    如果在每次迭代估计中使用上次迭代估计值 

 作为初始估计,即 

 中各个参数值均为零,迭代方程可改写为

    

    注意,以上 

 不再是初始匹配点,而是每次迭代后的计算点!!!

    在旋转全景模型中,

,当旋转分量增加 

 后,

    旋转矩阵为  

,  

 为增量矩阵。

    

,当  

 为弧度单位且很小时,

    

 表示旋转轴。

    增量矩阵 D 可改写为 

    D 中变量为旋转角度 

 ,使用线性近似可表达为 

    其中,

 为初始估计参数的变换结果,

 为旋转一个小的角度 

 后的线性变换结果,

    使用最小二乘法可以求解一个合理的旋转角度。

    观察增量矩阵 D,可以发现 D 与 H 存在一种对应关系 

    迭代公式 

 可转换为:

     

    整理公式,使其为 

 的线性函数 

    使用最小二乘法可以求解一个合理的旋转角度。

    以上迭代公式中,

 是一个未知量,但是可以从初始估计 

 中计算得出,具体如下:

    

   

    

,该旋转矩阵为正交矩阵,

    在旋转矩阵每一项上乘以一个因子 

 不会改变矩阵正交特性,因此,可将上式改写为:

    

,利用正交特性有:

    

,可求解 

    同理,利用第三行与第一行正交可求解 

,当焦距相等时,可估计焦距为

。 

5 全局配准

    由于每对图像间的配准估计均可能存在误差,当多幅图像通过图像对间配准参数配准时,会形成累积误差,

    这在全景图像拼接中可能产生缝隙或者过叠加,所以需要校正图像对间配准参数,称作光束平差法(bundle adjustment)。

    在光束平差法之前,通过图像对间特征点匹配情况可以剔除一些孤立图像,然后在保留图像中进行全局配准。

    假设有 n 帧图像用于形成全景图像,三维空间中有 m 个特征点在至少两帧图像中形成了映射关系,

    

 表示第  i 个三维空间点,

 表示第 i 个三维空间点在第 j 帧图像上形成的投影点,

 表示得 i 个三维空间点在第 j 帧图像上是否存在投影点。

    利用旋转全景模型可建立 

 到 

 的映射为 

    最小化 

 即可。

    完成全局配准后,全景图像仍然可能存在局部错位,这可能是因为镜头镜像畸变,摄像头没有完全绕光轴中心旋转,场景中微小抖动等因素引起。

    可以通过对整幅全景图像建立一个类似稠密光流估计图来抵消局部误差,方法如下:

    1)已经通过光束平差法重新估计了变换矩阵;

    2)利用 

 计算第 j 帧图像对应的第 i 个特征点位置;

    3)求所有图像帧上对应的第 i 个特征点的平均位置 

    4)求第 i 个特征点在第 j 帧图像上的精确位置 

    5)求第 i 个特征点在第 j 帧图像上扰动 

;

    6)使用插值构造全景图像上局部扰动,用于全景拼接时补偿局部模糊。

6 图像合成

    当所有相关图像都完成注册后,我们可以利用以上信息产生一张完整的拼接图像,这个过程大致包括以下内容:

    1)选择合成表面,当少量图像拼接时,可以选择平坦全景图;当全景图视野很大时,如果选择平坦全景图,

    则在周边区域会产生很大扭曲变形,这时一般选择圆柱面投影或者球面投影;

    2)决定那一帧图像作为中间参考图像,由于已经知道每一帧图像对应的旋转角度,一般旋转平均旋转角度附近的图像作为中间参考图像;

    3)将参考图像平移到合成表面中心,将其他图像按已知注册信息映射到合成表面;

    4)在重叠部分通过加权方式去除虚影;

    5)使用拉普拉斯金字塔融合方案融合图像,必要时进行曝光补偿。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2385885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生安全基石:Linux进程隔离技术详解

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 进程隔离是操作系统通过内核机制将不同进程的运行环境和资源访问范围隔离开的技术。其核心目标在于: 资源独占:确保…

基于PySide6与pycatia的CATIA几何阵列生成器开发实践

引言:参数化设计的工业价值 在航空航天、汽车制造等领域,复杂几何图案的批量生成是模具设计与机械加工的核心需求。传统手动建模方式存在效率低下、参数调整困难等问题。本文基于PySide6+pycatia技术栈,实现了一套支持​​动态参数配置​​、​​智能几何阵列生成​​的自动…

Linux学习心得问题总结(三)

day09 文件权限篇 文件权限的属性有哪些?我们应如何理解这些属性? 文件权限的属性包括可读(r)、可写(w)、可执行(x)三种权限,根据文件类型可分为普通文件(.…

Anthropic推出Claude Code SDK,强化AI助理与自动化开发整合

Anthropic发布Claude Code SDK,协助开发团队将人工智慧助理整合进自动化开发流程,支援多轮对话、MCP协定及多元格式。 Anthropic推出Claude Code SDK,提供开发者与企业一套可程序化整合Claude AI助理至开发流程的工具。此SDK以命令列介面为基…

6.4.1最小生成树

知识总览 生成树(一定是连通的): 是连通的无向图的一个子图,子图包含这个无向图的所有顶点有n-1条边(少一条边,生成树就不连通了)即为生成树,一个连通图可能有多个生成树 最小生成树(最小代价树): 只有连通的无向图才…

DARLR用于具有动态奖励的推荐系统的双智能体离线强化学习(论文大白话)

1. 概述 离线强化学习是现在强化学习研究的一个重点。相比与传统的强化学习它不需要大量的实时交互数据,仅仅依赖历史交互日志就可以进行学习。本文就是将离线强化学习用于推荐系统的一篇文章。 这篇文章主要解决的核心问题有以下几个: 1)…

第35节:PyTorch与TensorFlow框架对比分析

引言 在深度学习领域,PyTorch和TensorFlow无疑是当前最受欢迎的两大开源框架。 自2015年TensorFlow由Google Brain团队发布,以及2016年Facebook的AI研究团队推出PyTorch以来,这两个框架一直在推动着深度学习研究和工业应用的发展。 本文将从多个维度对这两个框架进行详细对…

企业级智能体 —— 企业 AI 发展的下一个风口?

在AI技术迅猛发展的当下,企业对AI的应用不断深入。企业级智能体逐渐受到关注,它会是企业AI发展的下一个风口吗?先来看企业典型的AI应用场景,再深入了解企业级智能体。 企业典型AI应用场景 1. 内容生成:2025年&#xf…

【软考向】Chapter 2 程序设计语言基础知识

程序设计语言概述低级语言 —— 机器指令、汇编语言高级语言 ——翻译:汇编、解释和编译语言处理程序基础 —— 翻译给计算机,汇编、编译、解释三类编译程序基本原理 —— 词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成文法和语言的形式描述确定的有限…

JavaWeb:SpringBootAOP切面实现统计方法耗时和源码解析

介绍 快速入门 1.导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2.切面类java Slf4j Aspect Component public class RecordTimeApsect {/*** 统计耗…

RabbitMQ的其中工作模式介绍以及Java的实现

文章目录 前文一、模式介绍1. 简单模式2. 工作队列模式3. 广播模式4. 路由模式5. 通配符模式6. RPC模式7. 发布确认模式 二、代码实现1、简单模式2、工作队列模式生产者消费者消费者 1消费者 2 3、广播模式 (Fanout Mode)生产者消费者 4、路由模式 (Direct Mode)生产者消费者 5…

vue2项目搭建

作者碎碎念&#xff1a;开历史倒车了&#xff0c;没想到不兼容&#xff0c;只能从vue3->vue2了。 1 vue3和vue2 这部分参考了官网的《vue3迁移指南》&#xff1a;Vue 3 的支持库进行了重大更新。以下是新的默认建议的摘要: 新版本的 Router, Devtools & test utils 来…

Spring AI 源码解析:Tool Calling链路调用流程及示例

Tool工具允许模型与一组API或工具进行交互&#xff0c;增强模型功能&#xff0c;主要用于&#xff1a; 信息检索&#xff1a;从外部数据源检索信息&#xff0c;如数据库、Web服务、文件系统或Web搜索引擎等 采取行动&#xff1a;可用于在软件系统中执行特定操作&#xff0c;如…

2025年- H48-Lc156 --236. 二叉树的最近公共祖先(递归、深搜)--Java版

1.题目描述 递归终止条件&#xff1a; 如果当前节点 root 为 null&#xff0c;表示到达了叶子节点的空子树&#xff1b; 如果当前节点是 p 或 q&#xff0c;就返回它&#xff08;因为从这里可以回溯寻找公共祖先&#xff09;。 2.思路 &#xff08;1&#xff09; 如果当前节…

Hertz+Kitex快速上手开发

本篇文章以用户注册接口为例&#xff0c;快速上手HertzKitex 以用户注册接口来演示hertz结合kitex实现网关微服务架构的最简易版本 项目结构 api- gateway&#xff1a;网关实现&#xff0c;这里采用hertz框架 idl&#xff1a;接口定义用来生成kitex代码 kitex_gen&#xff…

机器学习课程设计报告 —— 基于二分类的岩石与金属识别模型

机器学习课程设计报告 题 目&#xff1a; 基于二分类的岩石与金属识别模型 专 业&#xff1a; 机器人工程 学生姓名&#xff1a; XXX 指导教师&#xff1a; XXX 完成日期&#xff1a…

分词算法BPE详解和CLIP的应用

一、TL&#xff1b;DR BPE通过替换相邻最频繁的字符和持续迭代来实现压缩CLIP对text进行标准化和预分词后&#xff0c;对每一个单词进行BPE编码和查表&#xff0c;完成token_id的转换 二、BPE算法 2.1 核心思想和原理 paper&#xff1a;Neural Machine Translation of Rare…

STM32F103_Bootloader程序开发02 - Bootloader程序架构与STM32F103ZET6的Flash内存规划

导言 在工业设备和机器人项目中&#xff0c;固件远程升级能力已成为提升设备维护性与生命周期的关键手段。本文将围绕STM32平台&#xff0c;系统性介绍一个简洁、可靠的Bootloader程序设计思路。 我们将Bootloader核心流程划分为五大功能模块&#xff1a; 启动入口与升级模式判…

通过Auto平台与VScode搭建远程开发环境(以Stable Diffusion Web UI为例)

文章目录 Stable Diffusion Web UI一、&#x1f3af;主要功能概述二、&#x1f9e0;支持的主要模型体系三、&#x1f4e6;安装方式简述✅ 一、前提准备✅ 二、安装步骤混乱版本&#xff08;仅用于记录测试过程&#xff09;第一步&#xff1a;克隆仓库&#xff08;使用清华大学镜…

Unity 打包程序全屏置顶无边框

该模块功能: 1. 打包无边框 2. 置顶 3. 不允许切屏 4.多显示器状态下,程序只在主显示上运行 5.全屏 Unity 打包设置: 如果更改打包设置,最好将Version版本增加一下,否则可能不会覆盖前配置文件 代码: 挂在场景中即可 using UnityEngine; using System; // 确保这行存…