计算机视觉理论笔记 (11) - 运动估计 (Motion Estimation)

2023-05-16

运动估计

  • 光流法 (Optical Flow)
    • 限制
    • Horn&Schunck 全局方法 (global method)
    • 光流法约束等式 (Constrain Equation)
    • 小幅度动作问题
    • 全局方法和局部方法的比较
      • 全局方法
      • 局部方法
  • 基于块的运动场 (Block-based Motion Field)
    • 动作估计 (Motion Estimation - ME)
    • 动作估计算法
      • 顺序或完全搜索 (Sequential or Full Search)
      • 二维对数搜索 (2D Logarithmic Search)
      • 分层搜索 (Hierarchical Search)
      • 三个方法运算时间对比
  • 全局运动估计 (Global Motion Estimation)
    • 2D坐标转换 (2D Coordinate Transformations)
    • 仿射运动模型 (Affine Motion Model)
  • 层运动估计 (Layer Motion Estimation)
  • 运动分析中的运动场 (Motion Fields in Motion Analysis)
    • 应用
  • 全局运动应用 (Global Motion Application)

光流法 (Optical Flow)

光流 (optical flow) 反映了由于时间间隔 dt 中的运动而导致的图像变化,光流场是跨 2D 图像的 对象点的 3D运动 的速度场 (velocity field)。
在这里插入图片描述
光流是像素级图像中亮度模式 (brightness pattern) 的运动。理想情况下,光流 = 运动场 (motion field)。

限制

但在以下情况下,光流不等于运动场
在这里插入图片描述

  1. 运动场存在但是没有光流产生。
  2. 没有运动场但是光照改变。

Horn&Schunck 全局方法 (global method)

在这里插入图片描述
如何估计从图像H到图像I中的像素运动?

  • 查找像素对应 (pixel correspondences)
  • 给定 H 中的像素,寻找 I 中相同颜色的附近像素 (nearby pixel of the same color)。

要这么做,是基于以下关键假设:

  • 颜色恒定(color constancy): 图像 H 中的一个点 看起来和 图像 I 相同。对于灰度图来说,则是亮度恒定。
  • 小幅度动作(small motion): 点不会移动的太远。

光流法约束等式 (Constrain Equation)

光流:速度 Velocities(u, v),用其替代x, y的变化而代表移动。
在这里插入图片描述
在这里插入图片描述
假设两个图像中同样点的亮度保持不变:
在这里插入图片描述
假设小幅度动作: (RHS的泰勒展开至一阶)
在这里插入图片描述
最终得到约束等式
在这里插入图片描述
在这里插入图片描述
注意: (u,v)必须位于一条直线上。我们可以使用梯度运算符进行计算。但是,(u,v) 不能在此约束下唯一地找到!
在这里插入图片描述
在这里插入图片描述
约束表示:确定了由矢量(𝐸𝑥,𝐸𝑦)表示的梯度方向上的流分量 (flow component)。平行于边缘 parallel to an edge(即垂直于梯度方向 perpendicular to the gradient direction)的流分量未知。

接着,公式化光流中的约束误差。
在这里插入图片描述
还有其他约束需要被考虑,即平滑度约束 (smoothness constraine),通常,运动场在图像中平滑变化。因此,我们要惩罚偏离平滑度的问题。
在这里插入图片描述
我们需要在每个图像点中找到最小化以下公式的 (u, v):
在这里插入图片描述

小幅度动作问题

如果一个物体移动大大多于一个像素点,那么光流法很有可能检测不到。我们的一个解决方法是降低画面分辨率 (reduce the resolution)。
在这里插入图片描述
粗粒度到细粒度的光流估计(Coarse-to-fine Optical Flow Estimation)
在这里插入图片描述

全局方法和局部方法的比较

全局方法

  • 如 Horn & Schunk 方法
  • 全局方法使用全局约束,通常是平滑正则项(smoothing regularization term)。
  • 平滑假设 (smooth assumption) 不适用于移动边界 (moving boundary),深度不连续性 (depth discontinuities)。
  • 错误传播 (Error Propagation)

局部方法

  • 如 Lucas & Kanade 方法
  • 没有全局术语
  • 将图像分为保持平滑假设的小区域
  • 然而,在具有小的或没有空间梯度 (no spatial gradient) 的区域中的光流的估计成为不适定的问题(ill-pose problem)。

基于块的运动场 (Block-based Motion Field)

该方法将图像分割 (break image up) 为多个方块,并估计每个方块的转变(estimate translation)。
在这里插入图片描述

动作估计 (Motion Estimation - ME)

每个块一个运动矢量(Motion Vector - MV), (u,v)。 MV搜索通常仅限于较小的近邻 (small immediate neighbourhood) - 水平和垂直位移 (horizontal and vertical displacement) 范围 [-p,p]。 这使得搜索窗口大小为 (2p + 1) x (2p + 1)
在这里插入图片描述
两个块之间的差异通过其平均绝对差异 (Mean Absolute Difference - MAD) 进行衡量。
在这里插入图片描述
ME搜索的目标是找到一个向量(i, j)作为运动向量 MV = (u, v),这样使得MAD(i, j)最小。
在这里插入图片描述

动作估计算法

顺序或完全搜索 (Sequential or Full Search)

按顺序搜索在参考帧中的整个 (2p + 1) x (2p + 1) 窗口 (也称为完全搜索 full search)。将以窗口内每个位置为中心的块与目标帧中的块逐像素进行比较,然后计算其各自的MAD。提供最少 MAD 的向量 (i,j) 被指定为目标帧中该块的MV (u,v)。
顺序搜索的运算成本很高 - 假设每个像素比较都需要操作 (求和,绝对值,加法), 则获得单个块的运动矢量的成本为 (2p + 1) x (2p + 1) x N2 x 3 => O(p2N2)
在这里插入图片描述

二维对数搜索 (2D Logarithmic Search)

对数搜索: 一种计算不那么昂贵的版本,虽然次优,但通常仍然有效。
运动向量的2D对数搜索过程需要多次迭代,类似于二分搜索 (binary search)。最初,搜索窗口(search window)只有9个位置用作基于MAD的搜索种子 (seeds for a MAD-based search),其被标记成1。
在找到产生最小MAD (minimum MAD) 的区域之后,将新的搜索区域的中心移到该区域,并将步长 step-size(偏移 offset)减少到一半。
在下次迭代中,将九个新位置标记为2,并以此类推。
在这里插入图片描述
如图,MV是从最中间的被标记为1的点指向右上角标记为3的点的向量。
在这里插入图片描述

分层搜索 (Hierarchical Search)

该搜索可以受益于多层 (多分辨率) 方法 (hierarchical/multiresolution approach),其中可以从分辨率大大降低的图像 (image with a significantly reduced resolution) 中获得运动矢量的初始估计。
三级分层搜索 (three-level hierarchical search),其中原始图像位于级别0 (Level 0),通过从先前级别下采样2倍 (down-sampling by a factor of 2) 来获得级别1和级别2的图像,并在级别2进行初始搜索。
由于块的大小较小,并且p也可以按比例缩小,因此所需的操作次数大大减少。
在这里插入图片描述
在这里插入图片描述

三个方法运算时间对比

在这里插入图片描述

全局运动估计 (Global Motion Estimation)

相机运动

  • 放大/缩小 (Zooming - in/out)
  • 平移 (panning): 水平移动相机
  • 倾斜 (tilting): 垂直移动相机
  • Dolly: 前后移动整个相机
  • Truck: 与小推车一样,只能从左向右移动相机
  • 底座 (Pedestal): 将相机固定在一个位置时上下垂直移动相机

2D坐标转换 (2D Coordinate Transformations)

在这里插入图片描述

仿射运动模型 (Affine Motion Model)

每个像素在6个全局未知数中提供1个线性约束。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一组 (> 6) 关键点上的最小二乘最小化。
在这里插入图片描述

层运动估计 (Layer Motion Estimation)

该估计方式用多组重叠图层 (overlapping layers) 表示运动图像。层按照深度排序 (ordered in depth) 并相互遮挡 (occlude each other)。每层代表一个运动物体。
在这里插入图片描述
每一层包含三张图(three maps):

  • 强度图 intensity map (或纹理图 texture map)
  • Alpha图 (每个点的不透明度 opacity)
  • 速度图 velocity map (随时间弯曲 warping over time)
    在这里插入图片描述

运动分析中的运动场 (Motion Fields in Motion Analysis)

运动通常是四个基本元素的某种组合:

  • 与相机保持恒定距离的平移 (translation at constant)。
  • 相对于相机的深度平移(translation in depth)。
  • 绕相机光轴 (camera optical axis) 以恒定距离旋转 (rotation at distance)。
  • 垂直于相机光轴 (perpendicular to the camera optical axis) 的平面物体的旋转 (rotation of a planner object)。

四个基本运动的光流模式 (optical flow pattern)

  • 一组平行运动矢量 (parallel motion vectors)。
  • 一组具有共同扩展重点的矢量 (vectors having a common focus of expansion)。
  • 一组同心运动矢量 (concentric motion vectors)。
  • 从直线段开始的一组或多组矢量 (vectors starting from straight line segments)。
    在这里插入图片描述

如果平移深度不是恒定的,则光流矢量不平行,并且其方向只有一个扩展焦点(focus of expansion - FOE)。
如果平移深度恒定 (constant depth),则FOE处于无限远。
如果图像中存在几个独立移动的对象,则每个运动都有其自己的FOE,如下图所示,其中摄像机在汽车中朝着道路上其他正在驶近的汽车移动。
在这里插入图片描述

应用

  • 相互速度(Mutual Velocity):在运动的相机和运动的物体之间的相互速度。
  • 运动深度或结构(Structure From Motion - SFM):从移动物体到摄像机的当前距离
  • 碰撞预测 (Coliision Prediction):机器人与场景对象之间的潜在碰撞
  • 图像对齐/配准 (Image Alignment/Regisration)

全局运动应用 (Global Motion Application)

  • 视频稳定 (Video Stablization)
  • 运动补偿 (Global motion compensation - GMC)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机视觉理论笔记 (11) - 运动估计 (Motion Estimation) 的相关文章

  • Vision-based Vehicle Speed Estimation: A Survey

    该文是对 Vision based Vehicle Speed Estimation A Survey 的翻译 xff0c 为了个人记录学习 目录 摘要1 引言2 概念与术语2 1 输入数据2 2 检测与追踪2 3 距离和速度估计2 4 应
  • 【文献笔记】【部分精读】【CIR】Angle of Arrival Estimation based on Channel Impulse Response Measurements

    文章地址 xff1a https ieeexplore ieee org document 8967562 机器人顶会iros的一篇文章 xff0c 我主要关注其关于CIR估计的部分 文章目录 我的理解CIR估计与AOA估计的关系CIR测量
  • 人体姿态估计综述(Monocular Human Pose Estimation: A Survey of Deep Learning-based Methods)

    1 总述 1 1 应用 电影和动画虚拟现实人机交互视频监控医疗救助自动驾驶运动动作分析 1 2 挑战 人体姿势估计所面临的挑战主要体现在三个方面 xff1a 灵活的身体构造表示复杂的关节间关节和高自由度肢体 xff0c 这可能会导致自我闭塞
  • 人体姿态估计综述(Human Pose Estimation Overview)

    主流数据集整理 xff1a http blog csdn net qq 36165459 article details 78332172 Part1 xff1a Single Person Pose Estimation 2015 年之前
  • SPIN、VIBE 等 3D Human Pose Estimation 方法中的弱透视投影 (Weak Perspective Projection)

    弱透视投影 Weak Perspective Projection 弱透视投影假设焦距与物距足够大 xff0c 此时物体在 z z z 轴 光轴 上的变化可以忽略 SPIN VIBE 等 3D Human Pose Estimation 方
  • motion planning 一起学习

    shenlan 学院 motion planning 一起学习 打算买深蓝的motion planning for Mobile robots xff0c 主要是讲规划算法的 xff0c 有无一起学习的小伙伴 xff1f 一起学习 xff0
  • Intel RealSense L515 motion的计算与可视化

    文章目录 前言 一 环境准备 二 具体步骤 1 示例下载 2 代码编译 3 填坑 前言 前面的文章介绍了将L515数据映射至UE当中 本篇文章将针对Intel RealSense SDK 2 0 进行姿势的计算与可视化 一 环境准备 Int
  • slambook2+ch7+pose_estimation_2d2d+估计多张图像之间的位姿

    算法 计算第一张图和第二张图的关键点并匹配以第一张图的相机坐标为世界坐标 xff0c 计算第二张图相对第一张图的旋转矩阵 平移矩阵不断更新第一张图 xff0c 在进行第二次计算时 xff0c 以第二张图为第一张图 xff0c 以第二张图的相
  • Tracking motion in video

    Tracking motion in video Download the source code to Ball Tracking with OpenCV
  • h264-运动估计和运动补偿理论

    定义 运动补偿是通过先前的局部图像来预测 补偿当前的局部图像 它是减少帧序列冗余信息的有效方法 MPEG 4采用I VOP P VOP B VOP三种帧格式来表征不同的运动补偿类型 它采用了H 263中的半像素搜索 half pixel s
  • Android:ViewGroup,如何拦截MotionEvent然后分派到目标或按需吃掉它?

    假设有一个具有多个子项的 ViewGroup 至于这个 ViewGroup 我想让它管理其所有子项的所有 MotionEvent 这表示 VG 将1 能够在将所有事件分派到目标 子级 之前拦截所有事件2 VG首先会消费该事件 并判断是否进一
  • WP7:将加速度计和指南针数据转换为模拟运动 API

    我正在为 Windows Phone 7 1 Mango 编写一个小型示例应用程序 并希望使用组合运动 API 来显示设备的运动 我需要编写模拟类 以便在使用不支持设备所有传感器的模拟器时能够测试我的应用程序 我已经编写了一个简单的模拟类来
  • 使用手势/动作创建气泡,例如 Android 中的 Apple 音乐应用程序 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想实现类似 Apple 的新音乐应用程序 它与 iTunes 同步 泡泡在移动 根据心情我们可以选择音乐 流派等 我想要在 Android 中使用这种带有移动气泡的手势 谁能帮
  • iOS 运动检测:运动检测灵敏度级别

    我有一个简单的问题 我正在尝试检测用户何时摇动 iPhone 我有标准代码来检测运动 这没有问题 然而 在我的实际手机上进行测试时 我意识到你必须用力摇动设备才能触发运动检测 我想知道是否有办法实施一定程度的敏感性检查 例如 一种检测用户是
  • 在opencv c++上检测运动(移动相机)

    我正在为大学做一个项目 并且正在使用 OpenCV 这真的很棒 现在我的问题是 我有一个视频 avi 并且已检测到我想了解的有关突然出现在红色和黄色之间的 RGB 范围内的斑点的所有信息 在我实现了一个保存有关像素值的所有信息的矩阵之后 最
  • 评估具有许多未知因素的项目

    我正在开展一个具有许多未知因素的项目 例如将应用程序从一个平台移动到另一个平台 我最初的估计有很大偏差 我无法真正确定这一切何时结束 我该如何处理无法评估这样的项目的情况 这并不是说我要在屏幕上添加一个按钮或设计一个网站 或创建应用程序 甚
  • 如何对编码任务进行非常快速(且肮脏)的估计? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 所以你刚刚被老板置于困境 您有 15 分钟的时间对添加一些新功能进行粗略估算 您的老板 幸运的是 认识到您无法在那段时间提供准确的估计 因此期望
  • 如何使用 iPhone 的摄像头跟踪运动?

    我看到有人制作了一个应用程序 可以使用摄像头跟踪你的脚 这样你就可以在 iPhone 屏幕上踢虚拟足球 你怎么能做这样的事 有谁知道有关使用 iPhone 摄像头检测物体并跟踪它们的任何代码示例或其他信息吗 我刚刚在 SecondConf
  • 使用 JavaScript 将图像从 A 移动到 B

    这是我第一次来这里 我不知道如何缩进这个抱歉 我有一张货车的图像 我试图将其移动到屏幕上 就像它正在行驶一样 完成后 我将缩放图像 使其看起来好像它正在移动 并且变小 我需要在标准 javascript 中完成此操作 无需任何包 例如 JQ
  • 使用div和jquery连续循环

    我正在继续一个上一篇文章 https stackoverflow com questions 1748656 images sliding continuously with table and jquery 但我想我应该打开一个新线程 因

随机推荐

  • 保研复试-计算机网络复习

    计算机网络是我专业课里成绩较高的课 xff0c 老师应该会问到 xff0c 面试的时候计网也是公司里爱问的科目 整理一下看到的网上的一些保研 考研复试题 xff0c 便于复习 一 计算机网络的体系结构 1 计算机网络的分类 按分布范围 xf
  • Hbase的API

    Hbase API 文章目录 Hbase API准备工作Namespace DDL1 Junit执行代码模板2 创建namespace的API3 列出所有的namespace4 列出所有namespace中的表名5 修改namespace的
  • 【Python】 matplotlib 以pdf形式保存图片

    Python matplotlib 以pdf形式保存图片 span class token keyword import span matplotlib span class token punctuation span pyplot as
  • 51单片机 | 点亮第一个LED | LED 闪烁实验 | LED流水灯实验

    文章目录 一 51单片机GPIO介绍1 GPIO概念2 GPIO 结构框图与工作原理2 1 P0端口2 2 P1端口2 3 P2端口2 4 P3端口 2 5 要点 二 LED简介三 硬件设计四 软件设计1 点亮第一个LED2 LED 闪烁实
  • matlab二维矩阵可视化几种方法

    目录 一 pcolor 二 imagesc 三 spy 四 文末彩蛋 一 pcolor 以一个100x100块对角矩阵B为例 1 xff1a 原生pcolor 可以在矩阵维度不大时进行可视化 xff0c 带小方格 矩阵比较大时画出整体为黑色
  • 【ROS入门】双系统安装和ros安装踩坑

    记录一下安装Ubuntu双系统和和ros过程中踩的坑 xff0c 防止下次再犯错 一 双系统安装与删除 双系统的安装比一开始想的说实话要简单得多 xff0c 随便用u盘制作一个系统安装盘 xff0c 或者在u盘里面放需要的Ubuntu镜像
  • 【ROS入门】TF与URDF

    一 什么是TF TF全程就是transform xff0c 就是一个坐标系的转换 在ROS中坐标的转换是一个很重要的内容 xff0c 主要还是因为机器的不灵活性 xff0c 如果是人 xff0c 完全可以灵活地控制手臂去抓取一个物体 xff
  • 树莓派3B+——系统安装及显示

    树莓派3B 43 系统安装及显示 目录 树莓派3B 43 系统安装及显示系统安装显示显示器显示3 5寸显示屏显示pc显示 树莓派3B 43 系统安装及显示 初次接触树莓派 xff0c 花了差不多一天的时间把系统的安装和显示全部搞定 xff0
  • VSLAM 相关知识点总结

    VSLAM 相关知识点 这篇文章是对VSLAM涉及的知识点进行系统性的总结和更新 xff0c 一些内容来源至VSLAM经典教材 xff0c 博客 xff0c 和开源项目 引用材料如下表 SLAM十四讲高博古月老师的技术博客崔神的github
  • Windows下CLion中文乱码最有效的解决方式

    作者开发环境 Windows 10 Clion 18 3 MinGW W64 很多人都遇到了Clion的中文乱码问题 xff0c 然后在CSDN上面寻找解决办法 比如这篇很有代表性https blog csdn net Cbk XLL ar
  • Neutron复盘及学习笔记

    前言 对于openstack neutron xff0c 曾花费很多的时间去看它的源码 xff0c 结果啥都没有看出来 openstack代码风格是 xff0c 为了实现plugin的可插拔 xff0c 运用了很多设计模式 xff0c 设计
  • 匿名飞控底层PID代码解析

    大半年就快过去了 大二上学期转瞬即逝 xff0c 离上一次博客也有一段时间了 xff0c 没错 xff0c 庆幸的是我又回来了 xff0c 其实本来第二篇博客是想着写一下两轮平衡车来着 xff0c 代码早就写好了 xff0c 但是硬件不给力
  • IAR、KEIL常见编译报错警告的解决方法(持续更新中)

    Warning Pe550 variable 变量 was set but never used 原因 xff1a 变量定义赋值了但从未使用 解决 xff1a 变量定义删了就可以 xff0c 编译器也不会真的给这个变量分配空间 Warnin
  • VS2019 未能正确加载”balabal.........Package“

    修复VS2019不能自动补全Unity脚本代码时 xff0c 更新了下面这个东西 导致一直蹦下面这些警告 嘣 嘣 嘣 嘣 嘣 网上有很多博客说重置用户数据 禁用Live Share 分析Log信息等等 xff0c 最后看到一个博文说检查更新
  • 51单片机 | 蜂鸣器实验

    文章目录 一 蜂鸣器介绍二 硬件设计三 软件设计四 实验现象 通过单片机的一个 IO 口控制 板载无源蜂鸣器 xff0c 实现蜂鸣器控制 一 蜂鸣器介绍 蜂鸣器是一种一体化结构的电子讯响器 xff0c 采用直流电压供电 xff0c 广泛应用
  • Vue 中WebSocket的使用

    span class token function data span span class token punctuation span span class token punctuation span span class token
  • npm版本与node版本不对应

    npm与node版本不对应 导致无法npm i 报错提示 WARNING You are likely using a version of node tar or npm that is incompatible with this ve
  • 吴恩达阅读文献步骤

    接下来 xff0c 就集中介绍一下如何研究一篇论文 吴恩达认为 xff0c 要理解一篇论文 xff0c 一次将一篇论文从第一个字读到最后一个字 xff0c 可能并不是最佳方式 正确的打开方式是 xff0c 一篇论文至少要看三遍 第一遍 xf
  • 更新docker

    以下是做为前端开发如何更新docker xff0c 萌新操作 1 xff0c 使用工具Finalshell xff0c 连接到ssh 2 xff0c 连接到服务器 xff0c 选择ssh xff0c 并配置服务名称 主机 服务地址 xff0
  • 计算机视觉理论笔记 (11) - 运动估计 (Motion Estimation)

    运动估计 光流法 Optical Flow 限制Horn xff06 Schunck 全局方法 global method 光流法约束等式 Constrain Equation 小幅度动作问题全局方法和局部方法的比较全局方法局部方法 基于块