(三星难度)怎么拍摄的VR图像,全景图像拼接

作品简介

对效果有疑问的,可以私发数据,我可以帮忙先跑效果

由于很多客户对VR播放器的要求,希望能够播放正常视角变化的全景视频。通过一周的调研我们大概可以使用纯python实现类似功能,敬请期待我们的另一个项目-VR播放器(支持半鱼眼,双鱼眼全景视角, 视角场变换等,争取11月前上线)。下图为我们实验阶段demo



Done【2024/10/25】附件[eloft.zip]:

  1. 新增2024sota 图像特征点算法:EfficientLoFTR
  2. 新增鱼眼矫正不同展开算法: Link

Update【2023/12/13】:新增GUI可以调试效果,详情分享见: https://blog.csdn.net/hard_level/article/details/134958120

双鱼眼拼接算法网上几乎没有完整的项目,博主花了大量的时间搭建目前较强的pipeline。创作不易,谢谢大家的支持

代码见付费区(之前购买也可下载)


1. 简介

大家都知道VR,能够看到360度全景图像,即每帧图像记录了360度视角的成像。而工业界是怎样拍摄这样的图像的呢?目前博主了解的主要有两种做法:

  • A.使用多个正常摄像头,每个摄像头拍摄固定角度的图像,然后再拼接
  • B.使用两个视角(FOV)>=180度的鱼眼摄像头,再拼接如下图


我们将该任务明确输入输出:


输入:给定两张鱼眼图像拍摄的图像
输出:一张拼接好的矩形映射全景图(后续你可以根据这张全景图去做各种趣味剪辑)

2.我的解决方案

2.1 算法模块拆解

我先google网上的做法:发现类似的功能: https://moonagic.com/dualfisheye-to-equirectangular/

但是效果不是特别好。结合自己的经验,我将pipeline分为了三部分:

2.1.1 鱼眼相机的畸变矫正

目的: 将鱼眼图像展开为矩形图需要进行图像校正或投影变换。鱼眼图像通常采用一种特殊的透视投影,因此需要将其转换为常规的等距或直角投影以获得矩形图像。这个过程通常涉及到计算每个像素在新图像中的位置,然后将像素从鱼眼图像复制到新图像中的对应位置。

方法: 我们的方法分为两步。第一步: 我们将2维成像的鱼眼原始图像投影在3D球面上。第二步:我们采用球面透射投影, 我们首先定义了球面上的点的极坐标,然后计算了这些点的笛卡尔坐并使用球面透射投影的数学公式计算了投影点的坐标。


2.1.2 特征点检测与匹配

目的: 我们将两个鱼眼图像转化为两张矩形图像,他们在边缘位置并没有对齐。在这里我们假设两张图像的边缘位置存在overlap, 然后我们需要在overlap中找到两张图的对齐变换关系,使得他们在overlap区间图像能够完全重合。

方法: 我们的方法仍然分为两步。第一步:我们将检测出overlap区间中的特征点来联系两个图像。特征点通常是图像中具有独特结构或纹理的位置,例如角点、边缘、斑点等。第二步:我们将使用特征点各自的特征描述子来进行匹配。我们支持下面三种方法:

ORB/NN

SIFT/NN

SuperPoint/SuperGlue

2.1.3 矫正对齐与拼接

目的: 将上面的两个图像合并成一个无缝的整体的过程。

方法: 我们的方法仍然涉及到两个主要步骤:图像矫正与图像拼接。第一步:图像矫正是利用上面获取的特征点匹配的信息来获取一个变换矩阵(单应性矩阵)。这个变换可以是平移、旋转、缩放、仿射变换或透视变换等来使两个图像通过在相同的坐标系统下对齐。第二步: 绝大多数情况下,overlap区间的图像不是完全对齐的, 如果使用阈值将两张图的overlap直接叠加,会使得拼接处有重影。我们使用了最佳缝合线的策略


2.2 环境搭建

python>= 3.6

matplotlib>=3.1.3

numpy>=1.18.1

opencv-python

opencv-contrib-python

torch>=1.3.0 (superpoint)

2.3 效果调试

3 里面有我的online方式

如果大家有安装,调试和优化方向的问题,可以问我,我将免费解答。






创作时间: