基于伽马变换自适应修正的全景首尾融合算法

简介: 基于伽马变换自适应修正的全景首尾融合算法

前言

      360度全景摄像机可无盲点监测覆盖所处场景 ,通过一个鱼眼镜头或者一个反射镜面(如抛物线,双曲线镜面等),或者多个朝向不同方向的普通镜头拼接而成,拥有360度全景视场(Field of View, FOV)。一台全景摄像机可以取代多台普通的监控摄像机监控摄像机,做到了无缝监控,实现了监控新应用,应用于各个领域,其中包括监狱、政府机关、银行、社会安全、公共场所、文化场所等。

一、场景痛点

      对全景相机而言,通过镜头的旋转可获取多张不同方向的图像,对其进行多图像拼接,最终可形成完整的全景图像。

图1 全景子图拼接

      但是在拼接过程中,很容易受到背景光不一致等外在因素的干扰,而使得拼接的图像中光场分布不均匀,这很容易导致图像之间出现间隙或双亮接缝,两者都非常令人反感,尤其是对于相机正在平移或物体在接缝上移动的内容。


      解决方案是将两个图像大量重叠并修改重叠区域中的像素,以使重叠尽可能不可见。这样做的原因是,现在任何轻微的投影仪未对准或镜头像差都只会显示为图像的轻微模糊,而不是尖锐的接缝或间隙。融合结果如图2所示。

图2 全景平铺拼接图

      虽然上述解决方案可以将平铺全景图像尽可能地融合,但无法保证图像两侧也能有效融合。要知道平铺全景图像最终是要呈现为360度立体环视效果的,左右两侧不融合将使得全景场景出现亮度突变缝,这会让观看者感到极度不适。如图3所示。

图3 亮度突变缝

       综上所述,在此类图像拼接场景下,亮度突变缝的消除是一大难题。难点主要有三:


  1. 全景图像往往是高分辨率的,即图像尺寸很大,这对算法复杂度的要求极高,过于繁琐的处理过程不利于工程开发和应用。
  2. 全景图像中物体特征是随机且差异极大的,这很考验算法对各类场景的普适度。
  3. 全景图像中,上中下三部分的亮度对比往往差很多,这与相机获取图像时的外在光源影响有关,也与相机本身的硬件和参数有关。

       如何将全景平铺图像的左右两侧也进行有效的融合,进而使360度全景环视效果更佳,是一个非常有挑战的课题。

二、需求说明

      第一部分讲解了全景图像拼接过程中存在的一大难点,即平铺图像左右侧的有效融合问题。针对该问题,提出需求:全景图像左右侧进行有效融合,使得左侧连接右侧后,不存在肉眼可见的明显亮缝。图4处理至图5状态。

图4 拼接亮缝示意图

图5 拼接融合

      为了满足该需求,本文提出了一种基于伽马变换自适应修正的全景首尾融合算法。

三、算法原理和流程

      之所以存在亮缝,归根结底是两部分的图像背景光不一致,我们可以将左侧和右侧分别进行一个伽马变化,伽马变化的终点修正为一致,再反变化回去,就可以使得中心部分较好融合,且图像像素渐变。

图6 伽马掩膜

       左右两侧是从1到k,k是中心接壤的比例因子,因此有公式如下,其中G是伽马变化的因子,G为1时,是线性变化,改变G,曲线变化示意图如图6所示。x是归一化的值,中心为0,边缘为1。

      不难发现,边缘处即x为1时,f(x)也为1,这样的目的是使得这部分图像拼接完成后,在回归到原图后,依然是融合态;只让其拼接部分是渐变融合的。

图7 伽马变换

      伽马自适应校准就是k值的校准,校准完成后进行反伽马变换,即可实现图像的恢复和融合。

      综上,该算法的流程图可简化为:

图8 流程图

四、拼接效果图

图9 拼接效果图1

图10 拼接效果图2

图11 拼接效果图3

五、代码分享

      C++代码不免费分享,有意获取者可以私我。算法不是魔法,不能解决一切问题。该算法的核心逻辑可用于工程开发,但仍有许多需要结合实际完善的地方,不建议直接拷贝使用。

PS:感谢陈先生提供的全景图像。

相关文章
|
4月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
490 0
|
5月前
|
数据采集 边缘计算 算法
遗传算法+多目标规划算法+自适应神经模糊系统(Matlab代码实现)
遗传算法+多目标规划算法+自适应神经模糊系统(Matlab代码实现)
161 4
|
5月前
|
机器学习/深度学习 并行计算 算法
【超级棒的算法改进】融合鱼鹰和柯西变异的麻雀优化算法研究(Matlab代码实现)
【超级棒的算法改进】融合鱼鹰和柯西变异的麻雀优化算法研究(Matlab代码实现)
217 1
|
5月前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
335 14
|
5月前
|
传感器 算法 数据挖掘
基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
基于协方差交叉(CI)的多传感器融合算法,通过MATLAB仿真对比单传感器、SCC与CI融合在位置/速度估计误差(RMSE)及等概率椭圆上的性能。采用MATLAB2022A实现,结果表明CI融合在未知相关性下仍具鲁棒性,有效降低估计误差。
299 15
|
5月前
|
存储 并行计算 算法
【动态多目标优化算法】基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023研究(Matlab代码实现)
【动态多目标优化算法】基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023研究(Matlab代码实现)
267 4
|
5月前
|
传感器 算法 Shell
【使用卡尔曼滤波器将陀螺仪和加速度计的读数融合,以获取IMU的姿态(四元数)】实现了所谓的“零速度更新”算法,用于行人跟踪(步态跟踪)(Matlab代码实现)
【使用卡尔曼滤波器将陀螺仪和加速度计的读数融合,以获取IMU的姿态(四元数)】实现了所谓的“零速度更新”算法,用于行人跟踪(步态跟踪)(Matlab代码实现)
335 8
|
5月前
|
传感器 机器学习/深度学习 算法
【无人机编队】基于麻雀算法分布式无人机群自适应航迹规划和碰撞检测研究(Matlab代码实现)
【无人机编队】基于麻雀算法分布式无人机群自适应航迹规划和碰撞检测研究(Matlab代码实现)
142 2
|
6月前
|
传感器 机器学习/深度学习 算法
多旋翼无人机组合导航系统-多源信息融合算法(Matlab代码实现)
多旋翼无人机组合导航系统-多源信息融合算法(Matlab代码实现)
247 3
|
6月前
|
算法 芯片 Python
使用变动和观察(Perturb and Observe)最大功率点跟踪(MPPT)算法控制升压变换器的MOSFET/IGBT(开关),以从光伏阵列中提取最大功率(Simulink仿真实现)
使用变动和观察(Perturb and Observe)最大功率点跟踪(MPPT)算法控制升压变换器的MOSFET/IGBT(开关),以从光伏阵列中提取最大功率(Simulink仿真实现)
313 1

热门文章

最新文章