阅读笔记(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…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
