360全景图像拼接

2024-06-18 22:58
文章标签 图像 360 拼接 全景

本文主要是介绍360全景图像拼接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

刚到实验室,做了一个全景图像拼接的training project,自己前前后后搞了1个多月(汗啊,只能自我安慰是接触到的第一个图形学的东西),尝试了几种方法,写了很多无用代码,下面把我一路曲曲折折的过程抛出来,希望能对大家有些许帮助吧。

    一. 做拼接的第一步一定是warp,就是把每张图像投影到柱面或者球面,我将每张图片做了柱面投影,而这么做的理由呢,就是将图像投影到统一的面上以方便拼接,根据我做的过程中的理解就是使拼接的图像很平滑,当然如果只是拼接两张图片的话,完全可以省略这一步。

    二. 图像拼接的第二步就是提取特征点(也可以采用边特征的提取),特征点的提取方法有很多,我使用了lowe的SIFT,SIFT是一个非常鲁棒的算法,但是速度很慢,如果想程序运行速度很快,可以使用其他特征点提取方法,lowe提供了SIFT的源码,可以直接使用。

    三. 提取出两张图片的特征点以后,就要找到特征点间的对应关系,这一步是一个简单的距离比值删选的过程,我自己实现了一个暴力筛选的方法,还是比较简单的,但是这样肯定会很影响速度,所以要使用一个k-d tree的approximate nearest neighbour算法,可以用ann库实现,当然也可以直接用rob hess的特征点匹配算法实现。

    四. 上一步找到对应特征点以后,接下就是用RANSAC对已有匹配进行筛选并求出对应的homography,实际上就是一个简单的迭代过程。

    五. 求出homography以后就可以进行alignment了,这一步可以用opencv提供的WarpPerspective函数实现,但是用这个函数一张图像经过几次align之后,拼接后图像越靠右边越有发散效果,所以用这个函数只有两张图片好用(如果有人知道多张图片怎么用这个函数进行拼接,请您不吝赐教),这一步还有一个很重要的边界问题,及拼接图像转换后的坐标可能出现负值,这一点一定要考虑进去,否则会出现拼接后的图像包含不全的情况。

    六. alignment之后就是blend的问题,以使拼接边界不那么明显,我采用了一个简单的线性的距离权值算法,效果还可以看,即pixel=pixel_a*alpha+pixel_b*(1-alpha),alpha为当前像素点距拼接左边界的距离除以整个重叠区域的宽度。下面两张图分别是4张,3张图像用WarpPerspective函数拼接的。



    七. 如果你只需要拼接两张图片,那到上一步就可以了,以下是360度拼接的额外过程,即图片有n张的情况,我只考虑了所有图片都属于一个全景图没有噪音图片的乱序图片的情况。要先将图片排好序,以下为排序过程:①在所有图像对间找到inliers个数最多两张图像②在两张图片的基础上向前向后依次找出与当前图像邻接的图像直到结束。

    八. 经过上一步就可以进行alignment了,因为之前用提过的WarpPerspective函数使用中的问题,这一步只使用了homography中的水平和垂直平移分量tx,ty,依旧采用线性权值的方法进行blend,多长图像拼接还有一个很重要的问题就是拼接后首尾不能相接的情况,这就需要惊醒调整,比较好的方法是bundle adjustment,我也分别用opencv和sba实现了,但是估计还是实现的方法不对,调了好长时间没有出效果,无奈只能先放弃了,以后比较闲的时候再实现吧(如果有人在这一步用bundle adjustment实现,请赐教)。转去实现了一个比较简单的线性调整的方法,最后结果看起来还可以,有些模糊的地方,我估计可能是blend方法的问题,但是没有继续实现multi-blend,所以结果只能是现在这样了。

    总之呢,整个拼接程序还比较粗糙,有很多地方有待完善,欢迎大家有问题可以和我交流。下面为两个17张图片的全景图


这篇关于360全景图像拼接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073293

相关文章

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采