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

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

《苍穹外卖》知识梳理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 属性,并绑定对应数据 pickerOptions html <el-form-item label"雨量年份:" prop"date"><el-date-picker …...
GlusterFS:开源分布式文件系统的深度解析与应用场景实践
引言 在当今大数据时代背景下,企业对存储系统的容量、性能和可靠性提出了前所未有的挑战。GlusterFS作为一款开源的、高度可扩展的分布式文件系统,以其独特的无中心元数据设计和灵活的卷管理机制,在众多场景中脱颖而出,为解决大规…...

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

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

[N-142]基于springboot,vue停车场管理系统
开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plus 本项目分为普通用户和管理员…...
DAY53:动态规划(买股票的最佳时机)
Leetcode: 121 买卖股票的最佳时机 代码随想录 1、确定下标和含义 dp[i][0]表示当天持有股票所得的最多现金 do[i][1]表示当天不持有股票的最多现金 2、递推公式 (1)如果第i天持有股票即dp[i][0], 那么可以由两个状态推出来 第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:外汇做空是什么意思?如何运作?一文读懂
外汇市场允许卖空,就像众多金融市场一样。但什么是卖空呢?如何外汇做空?在本文中,我们将讨论如何做空货币。什么是外汇做空? 外汇做空(Short Selling)是外汇市场上的一种投资方式。它指的是投资…...
【记录】个人博客或笔记中的数学符号设定
note 这里记录个人博客中常用的数学符号数学格式和对应含义 文章目录 note数与数组索引集合线性代数微积分概率和信息论数据与概率分布函数深度学习中的常用数学表达方式 数与数组 α 标量 α 向量 A 矩阵 A 张量 I n n 行 n 列单位矩阵 v w 单词 w 的分布式向量表示 …...
Redis Sentinel工作原理
Redis Sentinel是Redis的高可用性解决方案。它主要用来监控Redis master和slave服务器的运行状态,并在master宕机时自动进行故障转移,即从slave节点中选举出新的master节点,并让其余的slave节点指向新的master节点。 Redis Sentinel工作原理…...
GEE入门篇|遥感专业术语:理论介绍
本章的目的是介绍遥感图像的一些主要特征,以及如何在Earth Engine中检查它们。我们将讨论空间分辨率、时间分辨率和光谱分辨率,以及如何访问重要的图像元数据。将了解到来自不同卫星平台上的几个传感器的图像数据。在本章的学习完成后,您将能…...
react中如何做到中断diff过程和恢复
workLoop是 实现时间切片 和 可中断渲染的核心,简要说明如下: // 并发任务的入口function workLoopConcurrent() {// Perform work until Scheduler asks us to yield// 有任务 & 是否需要中断while (workInProgress ! null && !shouldYiel…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...