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

阅读笔记(BMSB 2018)Video Stitching Based on Optical Flow

参考文献

Xie C, Zhang X, Yang H, et al. Video Stitching Based on Optical Flow[C]//2018 IEEE International Symposium on Broadband Multimedia Systems and Broadcasting (BMSB). IEEE, 2018: 1-5.

摘要

视频拼接在计算机视觉中仍然是一个具有挑战性的问题,特别是对于移动物体周围广泛存在的伪像,包括视差,鬼影等。传统方法通常依赖于单个投影模型,这可能导致重叠区域中移动物体的不准确对应。 在本文中,我们利用重叠区域中的光流场,提供像素密集投影,从而可以大大减少伪影。 然而,由于非重叠区域的投影是根据重叠区域的投影计算的,因此我们建议自动选择左框架或右框架作为参考,以避免当物体在重叠区域和非重叠区域之间的边界上移动时的不一致变换。 实验结果证明了我们的方法优于移动物体周围的最先进的方法。

简介

视频拼接是将包括重叠区域在内的多个视频合并为全景视频的过程[1]。视频拼接的神圣目标是获取尽可能自然的大视图视频。由于在安全监控,虚拟现实和医疗问题分析中的广泛应用,视频拼接已成为近年来的热门话题

在过去几年中,图像拼接已经成为一个相对成熟的领域。有许多方法可以消除视差[2] [3],削弱曝光差异并减少重影[4]。但与图像拼接相比,视频拼接的工作到目前为止非常有限。马里乌斯等人 [5]提出了一种从阵列摄像机生成实时全景视频的系统。有些方法对视频序列中的所有帧使用一个公共对齐[6]。虽然它可以保持全景视频稳定并节省大量时间,但通常会导致无法消除重影。这种缺点通过APAP方法[2]得到缓解,该方法提出了一种移动直接线性变换来弱化或微调投影扭曲以减少重影。

大多数先前的视频拼接方法在合成阶段[6] [7]中使用缝合切割,当移动物体穿过接缝时,这会导致重影效应。为了克服这个问题,许多方法每帧都会改变接缝的位置,以避免尽可能多地移动通过接缝的物体。此外,提出了一种快速稳定的焊缝选择算法[8],以减少由连续视频帧之间的显着缝隙移动引起的伪影。在[9]中已经提出了在重叠的空间时间体积上使用3D图形切割的缝合缝。如图1所示,即使这些方法做出了一些贡献,它们仍然无法消除严重的鬼影,特别是在移动物体周围。

最终全景视频具有鬼影的原因可以分为两个方面:

  • 1)左右帧之间的单个无变形投影模型是不够的。
  1. 一方面,传统方法总是使用单变换单应法将一帧映射到另一帧。左右帧之间的像素无法获得非常准确的对应关系。
  2. 另一方面,许多方法对视频序列中的所有帧使用不变的变换单应性,而不考虑视频内容的变化。
  • 2)切缝对移动物体有巨大影响。
  1. 当移动物体穿过接缝时,它们的结构将很容易破裂,或者移动物体周围会出现鬼影。为了解决这些问题,本文提出了一种基于光流的视频拼接方法。光流[10]可以估计两帧之间的位移场。它是2D矢量场,其中每个矢量是位移矢量,表示从第一帧到第二帧的点的移动。
  2. 为了克服单个投射模型导致相应不准确的缺点,使用光学流场在左右帧之间的重叠区域中实现像素密集投影。换句话说,重叠区域中的每个像素都拥有其典型的投影模型。因此,可以在所提出的方法中获得更准确的对准。此外,在合成阶段,仅需要对相应的像素进行加权以获得最终的全景帧。也就是说,在所提出的方法中不需要缝合切割。我们不需要考虑由连续视频帧之间的戏剧性接缝移位引起的伪影。总而言之,移动物体可以更好地匹配。

本文的其余部分安排如下。所提出的算法在第2节中给出。第3节显示了我们为检验所提出的方法而进行的实验。最后,第4节给出了结论。

算法流程

实验结果

由于没有公开的视频拼接基准数据,我们在我们捕获的两组视频上评估所提出的方法。视频数据集由两个具有不同视图的固定摄像机捕获,这些摄像机是同步的。为了证明我们方法的稳健性,我们选择两个不同的场景来涵盖一系列具有挑战性的案例:室内场景和室外场景。室外场景总是宽阔明亮,但室内场景相对狭窄,黑暗。三组视频均由相同类型的相机拍摄,并且在30fps时为720p(1280×720)。由于参考帧可以交替更改,因此全景图有两个视图。我们将具有右视图的帧映射到左视图[14]。在我们的实验中使用了密集的光流场,这是通过重复使用Liuce的代码来计算的。比较方法包括具有固定接缝的OpenCV中的Autostitch基线[14],商业软件VideoStitch Studio [15]和每帧APAP [2]。在我们的实验中,我们使用论文作者提供的代码来获得比较结果。

对于主观性能比较,图4,图5和图6示出了几个对象在重叠区域中移动并且背景保持静止的帧。在图4中,AutoStitch在汽车后部有严重的重影。视差出现在VideoStitch Studio和APAP方法中。在提出的方法中,运动物体的边界非常清楚。在图5中,女孩的腿在AutoStitch方法中被破坏,VideoStitch Studio导致明显的鬼影。在APAP方法中,女孩的腿周围也有很多鬼影。在图6中,女孩的头部在AutoStitch方法中扭曲,VideoStitch Studio中的裙子和鞋子周围有明显的鬼影。在APAP的女孩身上也可以找到鬼影。

很明显,大多数视差和鬼影都在移动物体周围,因为移动物体正在经过缝隙切割或单个投射模型无法非常精确地匹配像素。但是,我们的方法没有这些工件。移动物体的边界相对清晰,不存在视差,这些视差受益于重叠区域之间的精确对应。

结论

在本文中,我们提出了一种基于光流的新型视频拼接方法,可以进行像素投影。 我们的方法可以使像素的对应性比传统方法更准确。 实验结果表明,我们的方法比最先进的视频实现了更好的全景视频。 我们的算法进一步减少了移动物体周围的重影和视差。 通过我们的方法获得的全景视频也非常自然。将来,我们想加快算法速度。

相关文章:

阅读笔记(BMSB 2018)Video Stitching Based on Optical Flow

参考文献 Xie C, Zhang X, Yang H, et al. Video Stitching Based on Optical Flow[C]//2018 IEEE International Symposium on Broadband Multimedia Systems and Broadcasting (BMSB). IEEE, 2018: 1-5. 摘要 视频拼接在计算机视觉中仍然是一个具有挑战性的问题&#xff0…...

Ubuntu学习笔记-Ubuntu搭建禅道开源版及基本使用

文章目录 概述一、Ubuntu中安装1.1 复制下载安装包路径1.2 将安装包解压到ubuntu中1.3 启动服务1.4 设置开机自启动 二、禅道服务基本操作2.1 启动,停止,重启,查看服务状态2.2 开放端口2.3 访问和登录禅道 卜相机关 卜三命、相万生&#xff0…...

《苍穹外卖》知识梳理6-缓存商品,购物车功能

苍穹外卖实操笔记六—缓存商品,购物车功能 一.缓存菜品 可以使用redis进行缓存;另外,在实现缓存套餐时可以使用spring cache提高开发效率;   通过缓存数据,降低访问数据库的次数; 使用的缓存逻辑&#…...

[NSSCTF]-Web:[SWPUCTF 2021 新生赛]easy_sql解析

查看网页 有提示,参数是wllm,并且要我们输入点东西 所以,我们尝试以get方式传入 有回显,但似乎没啥用 从上图看应该是字符型漏洞,单引号字符注入 先查看字段数 /?wllm2order by 3-- 没回显 报错了,说明…...

vue3 codemirror yaml文件编辑器插件

需求:前端编写yaml配置文件 ,检查yaml语法 提供语法高亮 。 默认内容从后端接口获取 显示在前端 , 前端在codemirror 插件中修改文件内容 ,并提交修改 后端将提交的内容写入服务器配置文件中 。 codemirror 通过ref 后期编辑器…...

力扣经典题:环形链表的检测与返回

1.值得背的题 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode *detectCycle(struct ListNode *head) {struct ListNode*fasthead;struct ListNode*slowhead;while(fast!NULL&&fast->…...

【web | CTF】BUUCTF [BJDCTF2020]Easy MD5

天命:好像也挺实用的题目,也是比较经典吧 天命:把php的MD5漏洞都玩了一遍 第一关:MD5绕过 先声明一下:这题的MD5是php,不是mysql的MD5,把我搞迷糊了 一进来题目啥也没有,那么就要看…...

spring boot Mybatis Plus分页

文章目录 Mybatis Plus自带分页和PageHelper有什么区别?Mybatis Plus整合PageHelper分页 springboot自定义拦截器获取分页参数spring boot下配置mybatis-plus分页插件单表分页查询自定义sql分页查询PageHelper 参考 Mybatis Plus自带分页和PageHelper有什么区别&…...

elementui 中 el-date-picker 控制选择当前年之前或者之后的年份

文章目录 需求分析 需求 对 el-date-picker控件做出判断控制 分析 给 el-date-picker 组件添加 picker-options 属性&#xff0c;并绑定对应数据 pickerOptions html <el-form-item label"雨量年份&#xff1a;" prop"date"><el-date-picker …...

GlusterFS:开源分布式文件系统的深度解析与应用场景实践

引言 在当今大数据时代背景下&#xff0c;企业对存储系统的容量、性能和可靠性提出了前所未有的挑战。GlusterFS作为一款开源的、高度可扩展的分布式文件系统&#xff0c;以其独特的无中心元数据设计和灵活的卷管理机制&#xff0c;在众多场景中脱颖而出&#xff0c;为解决大规…...

第6个-滚动动画

Day 6 - Scroll Animation 1. 演示效果 2. 分析思路 布局 所有的内容进行水平垂直居中&#xff0c;可以使用**margin:0 auto;&#xff0c;也可以使用flex**布局&#xff1a; body {background-color: #efedd6;display: flex;flex-direction: column;justify-content: center…...

配置oracle连接管理器(cman)

Oracle Connection Manager是一个软件组件&#xff0c;可以在oracle客户端上指定安装这个组件&#xff0c;Oracle连接管理器代理发送给数据库服务器的请求&#xff0c;在连接管理器中&#xff0c;我们可以通过配置各种规则来控制会话访问。 简而言之&#xff0c;不同于专用连接…...

[N-142]基于springboot,vue停车场管理系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plus 本项目分为普通用户和管理员…...

DAY53:动态规划(买股票的最佳时机)

Leetcode: 121 买卖股票的最佳时机 代码随想录 1、确定下标和含义 dp[i][0]表示当天持有股票所得的最多现金 do[i][1]表示当天不持有股票的最多现金 2、递推公式 &#xff08;1&#xff09;如果第i天持有股票即dp[i][0]&#xff0c; 那么可以由两个状态推出来 第i-1天就…...

快速实现用户认证:使用Python和Flask配合PyJWT生成与解密Token的教程及示例代码

生成token 与解密 token 和 拦截器 #学习交流 访问 # https://v.iiar.cnimport jwt import datetime from models import XUser from flask import request, jsonify from functools import wrapsSECRET_KEY XPay# 创建token def generate_token(user_id):try:payload {exp:…...

外汇110:外汇做空是什么意思?如何运作?一文读懂

外汇市场允许卖空&#xff0c;就像众多金融市场一样。但什么是卖空呢&#xff1f;如何外汇做空&#xff1f;在本文中&#xff0c;我们将讨论如何做空货币。什么是外汇做空&#xff1f; 外汇做空&#xff08;Short Selling&#xff09;是外汇市场上的一种投资方式。它指的是投资…...

【记录】个人博客或笔记中的数学符号设定

note 这里记录个人博客中常用的数学符号数学格式和对应含义 文章目录 note数与数组索引集合线性代数微积分概率和信息论数据与概率分布函数深度学习中的常用数学表达方式 数与数组 α 标量 α 向量 A 矩阵 A 张量 I n n 行 n 列单位矩阵 v w 单词 w 的分布式向量表示 …...

Redis Sentinel工作原理

Redis Sentinel是Redis的高可用性解决方案。它主要用来监控Redis master和slave服务器的运行状态&#xff0c;并在master宕机时自动进行故障转移&#xff0c;即从slave节点中选举出新的master节点&#xff0c;并让其余的slave节点指向新的master节点。 Redis Sentinel工作原理…...

GEE入门篇|遥感专业术语:理论介绍

本章的目的是介绍遥感图像的一些主要特征&#xff0c;以及如何在Earth Engine中检查它们。我们将讨论空间分辨率、时间分辨率和光谱分辨率&#xff0c;以及如何访问重要的图像元数据。将了解到来自不同卫星平台上的几个传感器的图像数据。在本章的学习完成后&#xff0c;您将能…...

react中如何做到中断diff过程和恢复

workLoop是 实现时间切片 和 可中断渲染的核心&#xff0c;简要说明如下&#xff1a; // 并发任务的入口function workLoopConcurrent() {// Perform work until Scheduler asks us to yield// 有任务 & 是否需要中断while (workInProgress ! null && !shouldYiel…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...