基于相位的运动放大:如何检测和放大难以察觉的运动(01/2)

news2025/1/16 17:08:31

基于相位的运动放大:如何检测和放大难以察觉的运动

目录

  • 一、说明
  • 二、结果的峰值
  • 三、金字塔背景
    • 3.1 可操纵金字塔
    • 3.2 亚倍频程复数可控金字塔
  • 四、基本方针
    • 4.1 1D 问题陈述
    • 4.2 一维方法
    • 4.3 实际实施说明
  • 五、放大倍率的限制
    • 5.1 空间支持的影响
    • 5.2 频带的影响
  • 六、推导放大范围
    • 6.1 将频率纳入运动界
    • 6.2 降低八度以增加放大倍率
  • 七 处理噪音
    • 7.1 原理
    • 7.2 滤波相位增量
  • 八、总结
  • 九、结论

一、说明

   当我第一次接触到运动放大时,我很惊讶,移动不到一个像素的东西怎么会有运动放大?没错,我们实际上可以检测和放大静态视频中难以察觉的运动,而且我们可以在不放大噪音的情况下做到这一点!这个概念有很多应用,并且已经在多个行业中使用。例如,结构和设备并不总是容易安装传感器。可靠的视觉技术可以成为快速识别和诊断问题的有效方法,这提供了低成本的结构分析。

第 1 部分:背景和理论(本)
第 2 部分:Python 实现

二、结果的峰值

   下面的 GIF 显示了基于相位的运动放大的几个示例,原始视频在左侧,运动放大视频在右侧。在每个 GIF 中,处理仅应用于 YIQ 色彩空间中的亮度通道。
在这里插入图片描述
图 1. 放大系数为 25 的运动放大起重机视频。

在这里插入图片描述
图2.运动放大吉他弦,放大倍数为 25。

   这不是最新的AI,原始论文是2013年的。在这篇文章中,我们将解开论文中的主要概念,并了解基于相位的运动放大背后的细节。在第 2 部分中,我们将在 Python 中从头开始实现它,并学习如何制作如上所示的视频和 GIF。

三、金字塔背景

   大部分背景知识涉及理解复杂可操纵金字塔,以及可选的亚倍频程复杂可操纵金字塔。为简洁起见,我们仅在此处进行总结,详情请参阅链接的帖子。

3.1 可操纵金字塔

   可操纵金字塔是一种线性的多尺度和多方向图像分解,使我们能够在不同的频带和方向上观察图像。每个滤波器都占据频域的连续区域,并具有定位在空间域中的脉冲响应。在实践中,我们生成了一组不同频段和方向的频域滤波器以及非定向高通和低通分量,然后在频率空间中进行分解。该转换没有混叠,并且过度完成,这意味着它包含足够的信息来重建原始图像。

   复杂可操纵金字塔在多个尺度和方向上添加了局部相位的概念。一般来说,相位告诉我们事物在图像中的位置,而局部相位只是某个位置的相位概念,例如图像左下角的相位。如果我们看到视频序列中的相位变化,这意味着图像中的事物正在移动。视频序列中的局部相位描述了图像在给定位置的变化方式,这正是我们将用来放大运动的内容。关键是要知道如何使用它,我们将在本文后面介绍。

   复杂可控金字塔提供局部相位信息,用于描述视频帧在给定位置的变化方式

3.2 亚倍频程复数可控金字塔

   默认情况下,可操纵金字塔的频率滤波器相距一个倍频程。由于频域支持与空间域支持成反比,因此我们可以通过在频域中缩小滤波器来增加滤波器的空间域支持。这就是Sub-Octave滤波器的全部功能。例如,如果我们有半倍频程滤波器,那么需要两个倍频程滤波器才能代替单个倍频程滤波器。我们稍后将看到,亚倍频程滤波器对于大型运动放大至关重要。

   在这篇文章中,我们将大量讨论复杂可操纵金字塔,从现在开始,我们将以简写的方式将它们称为金字塔。

四、基本方针

   在我们全力以赴尝试用视频来做到这一点之前,让我们先考虑一下 1D 中的事情。通过这篇文章,概念将在 1D 中解释,并附有将其与 2D 实用方法相关的注释。

4.1 1D 问题陈述

   考虑一个空间信号 f(x),它可以通过某个瞬态位移函数 δ(t) 进行位移,位移的信号为:f(x + δ(t)))。我们希望将位移放大 α 倍,使放大的位移信号为:f(x + (1 + α)δ(t)))。

4.2 一维方法

   我们可以使用傅里叶级数分解来表示复正弦曲线的信号。这种分解为复正弦曲线是我们用于视频的金字塔分解的 1D 模拟。傅里叶分解。修改自源代码。
在这里插入图片描述

   每个正弦波的相位 ω(x + δ t)) = ωx + ωδ(t) 包含运动信息,其中 ω 对应于单个频带。我们需要做的第一件事是隔离与运动相关的相位信息。直流分量:ωx 表示底层空间信号,对应于静态背景。如果我们去掉它,我们就剩下 ωδ(t) 分量,其中包含我们希望放大的运动信息。我们将其表示为带通阶段 B。
在这里插入图片描述

   然后,我们可以按α比例缩放 B,并在频域中获得放大的运动,以获得运动放大的复正弦曲线。
在这里插入图片描述

   我们对每个子带ω都这样做,以获得空间域中的全运动放大信号:f(x + (1 + α)δ(t)))。

4.3 实际实施说明

   在实践中,我们可以使用参考系的局部相位来估计直流分量ωx的值,以便我们可以提取运动信息。我们从电流帧处的相位中减去参考相位,得到运动信号ωδ(t)。由于我们假设视频大部分是静态的,因此这种方法往往效果很好。

   除了去除直流分量外,我们还对相位增量进行时间带通滤波,以隔离某个感兴趣的时间频带。这对如何使用运动放大有很大的影响,因为我们能够可视化我们选择的任何频段。例如,我们可以可视化已知的感兴趣频率,也可以扫描多个频段以发现隐藏的运动。

   在视频帧中,运动是局部的,这意味着帧中一个位置的对象相对于其他位置的其他对象以不同的方式移动。因此,δ(t) 实际上是 δ(x, t),其中空间变量 x 允许我们根据空间位置区分时间 t 的运动。

五、放大倍率的限制

   事实证明,我们可以放大运动的程度是有限的。除了看起来很荒谬之外,极大的运动放大倍率并不能代表真实的信号。换句话说,错误的特征将被放大!此限制来自金字塔筛选器的两个方面:

  • 滤波器的空间支持→空间覆盖
  • 滤波器的空间频带→中心频率
       让我们看两个一维示例,以了解为什么它们会限制放大倍率。

5.1 空间支持的影响

   金字塔滤波器的空间支持有一些滚降,我们可以使用高斯窗口在一维中近似它。在此示例中,考虑一个由复正弦曲线和高斯窗口组成的函数 f。
在这里插入图片描述

   f 的参数是:频率 ω、位置向量 x 和标准差 σ。我们可以将这个函数移动一个倍α正如我们之前所看到的,这个相移对应于运动放大倍率。由于窗口化,我们只能在高斯窗口的范围内移动它。让我们在 Python 中实现它以更好地理解它,用于此的笔记位于 GitHub 上。

S = lambda x, omega : np.exp(1j*omega*x) 
G = lambda x, sigma : np.exp((-x**2)/(2*sigma**2))

x = np.arange(-15, 15, 0.01)
octaves = 1 # number of octaves for Gaussian window
sigma = octaves*np.pi # std dev of Gaussian window
omega = np.pi/4 # frequency
alpha = np.pi/2 # initial phase shift factor

signal = S(x, omega) * G(x, sigma) 
shifted = S(x, omega) * G(x, sigma) * np.exp(1j*omega*alpha)

下面的 GIF 显示了复正弦波的实部和虚部的相移。
在这里插入图片描述
图3.具有复正弦波的相移示例。
   一旦我们将相位偏移一定量,振幅将由于高斯窗口而高度衰减。如果我们可以增加高斯窗口的大小(增加它的空间支持),那么我们可以扩展这个限制并实现更大的偏移,而不会有那么多的衰减。

回到 2D 中,这意味着我们只能将运动放大一定数量的像素,然后才能将信号降级到无法识别的程度。此限制基于金字塔过滤器的空间支持。如果我们要增加空间支持,那么我们可以执行更强烈的放大倍率,并且仍然准确地接近真实的移位信号。

5.2 频带的影响

   当我们应用运动放大倍率时,我们将其应用于单个金字塔滤镜。我们可以应用的有用运动放大倍率与滤波器的频带直接相关。让我们通过比较两种不同频率下的相移效应来在一维中说明这一点。(从现在开始,我们将只看正弦曲线的实部)。

omega1 = 0.2 # frequency 1
omega2 = 1.0 # frequency 2

signal_1 = S(x, omega1) * G(x, sigma) 
signal_2 = S(x, omega2) * G(x, sigma) 

alpha_vals = np.arange(0, 2*np.pi, 0.025)

for i, alpha_val in enumerate(alpha_vals):
    f_shifted_1 = signal_1 * np.exp(1j*omega1*alpha_val)
    f_shifted_2 = signal_2 * np.exp(1j*omega2*alpha_val)

在这里插入图片描述

图4.相移对全倍频程高斯窗口内不同频段的影响。仅显示复正弦曲线的实部。资料来源:作者。
   两个正弦波的偏移量相同,但请注意频率较高的右侧衰减量较大。更糟糕的是,如果我们继续前进,我们将得到一个翻转(由于周期性),所以主导特征甚至不会是我们打算放大的特征。

   大放大倍率在较高的空间频率下具有更大的衰减

六、推导放大范围

   您可能会问自己,在降低信号质量之前,我们可以将运动放大多少?我很高兴你问,我们实际上可以根据高斯窗口近似推导出放大倍率的理论界限。我们简单地将运动绑定为高斯窗口的一个标准差,因此我们至少保持原始信号的 ~61%。
在这里插入图片描述

   好吧,这似乎不是很有见地,我们所做的只是根据标准差进行任意的截止。边界的真正用途是观察某些因素(如频率和倍频程带宽)如何影响运动放大倍率和信号衰减关系。

6.1 将频率纳入运动界

   在全倍频程带宽滤波器(复数可控金字塔提供)中,我们在窗口下大约有一个周期的正弦曲线。如果我们假设窗口的全宽约为 4σ,那么我们得到:
在这里插入图片描述
其中ω对应于滤波器的频带。这提供了频率 ω 或波长 λ 的界限:
在这里插入图片描述

   该界限总结了信号频率与有用放大倍率之间的关系,即没有极端衰减的放大倍率。它告诉我们,较低频率(较长)的放大信号比较高频率的信号经历的衰减更少。现在让我们看看倍频程带宽如何影响放大倍率范围。

6.2 降低八度以增加放大倍率

   如前所述,增加滤波器的空间支持将使我们能够在减少信号衰减的情况下增加放大倍率。亚倍频程意味着我们正在减少滤波器的频率支持(使它们在频率空间中更小),这反过来又增加了每个滤波器的空间支持。例如,半倍频程意味着两个半倍频程滤波器在频率空间中取代了单个全倍频程滤波器。在一维中,半倍频程高斯窗口可以支持正弦曲线的两个周期,我们可以相应地修改我们的边界。
在这里插入图片描述
更进一步,四分之一倍频程带宽高斯窗口可以支持正弦波的四个周期。我们可以用倍频程带宽来概括边界,其中放大倍率的边界变大,倍频程带宽减小。
在这里插入图片描述

这是一张 GIF,显示了 Sub-Octave 的影响。
在这里插入图片描述

图5.正弦波在不同倍频程带宽的高斯窗口下移位。资料来源:作者。
   我们还可以使用由高斯窗口化的局部函数来可视化移位。
在这里插入图片描述

图6.局部函数在不同倍频程带宽的高斯窗口下发生偏移。资料来源:作者。
   上面的 GIF 显示,在四分之一倍频程窗口下的移位信号达到 0.60 之前,全倍频程高斯窗口中的移位信号被长期衰减为 0。

七 处理噪音

7.1 原理

   这种基于相位的运动放大方法实际上并没有放大噪声,而是通过移动的运动将其转换。考虑一个带有附加噪声的图像 I:I + σnn,其中噪声功率 σn 远小于图像信号 I。它在频率 ω 的金字塔滤波器下的响应表示为:
在这里插入图片描述

   其中 N 是噪声对滤波器的响应 由于我们假设噪声远小于信号,因此我们也假设对应于运动的相位近似等于 ωδ(t),就像我们之前看到的一样。放大的运动响应为:
在这里插入图片描述

   运动放大滤波器响应中的噪声项现在具有相移 αωδ(t),对应于噪声的平移,而不是放大。这与这种基于阶段的方法的基础知识有关。我们不是直接放大信号,而是通过对感兴趣的特征进行相移来放大运动。碰巧的是,我们也放大了噪声的运动(将噪声从一个点移动到另一个点),但我们实际上并没有增加噪声功率。

7.2 滤波相位增量

   尽管这些假设意味着滤波相位将等于ωδ(t),但我们仍然需要意识到噪声会破坏相位信号并导致不正确的运动被放大。为了解决这个问题,我们可以过滤获得的相位差。为此,我们使用幅度加权滤波器对每一帧的相位差应用空间高斯模糊。
在这里插入图片描述

   其中 φ 是金字塔滤波器 i 和视频帧 k 处的相位信号,A 是电流滤波器响应的幅度,K 是标准偏差为 ρ 的高斯核。

八、总结

   基于相位的运动放大率概述如下所示:
在这里插入图片描述

图7.基于相位的运动放大概述。来源。
   需要注意的是,我们一次对单个金字塔过滤器执行处理,并且通常对视频的所有帧执行处理。但是,处理不是在高通和低通金字塔组件上执行的,它们保持不变,并在最后一步重新合并。

🇦 → 使用复杂可操纵金字塔分解图像。
🇧 → 从每个帧中移除直流相位分量,以获得运动信号 ωδ(t) 的相位。然后,将视频帧中的运动/相位信号按时间过滤到目标带宽。
🇨 → (可选)执行幅度加权滤波以对相位信号进行降噪。
🇩 → 在每个滤光片上应用运动放大倍数 αωδ(t)。
🇪 → 重新合并高通和低通组件并折叠金字塔并获得运动放大的视频帧

九、结论

   我们已经通过一维示例介绍了基于相位的运动放大的基础知识。我们已经描述了 2D 的基本方法以及它取决于空间支持和频段的局限性。我们已经展示了噪声实际上是如何被放大的,它只是被平移,这是这种方法的一个方便的特点。上面显示了该算法的高级概述,第 2 部分展示了如何实际实现它。

引用
[1] Simoncelli, EP, & Freeman, WT (未注明日期).可操纵金字塔:一种用于多尺度导数计算的灵活架构。论文集,图像处理国际会议。https://doi.org/10.1109/icip.1995.537667

[2] 波蒂利亚,哈维尔和西蒙切利,埃罗。(2000). 基于复杂小波系数联合统计的参数化纹理模型.国际计算机视觉杂志。40. 10.1023/A:1026553619983.

[3] Granlund,GH和Knutsson,H.(2011)。计算机视觉的信号处理。斯普林格。

[4] Wadhwa,N.,Rubinstein,M.,Durand,F.和Freeman,WT(2013)。基于相位的视频运动处理。基于相位的视频运动处理。https://people.csail.mit.edu/nwadhwa/phase-video/

[5] https://rxian.github.io/phase-video/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1470533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot3整合Swagger3,访问出现404错误问题(未解决)

秉承着能用就用新的的理念,在JDK、SpringBoot、SpringCloud版本的兼容性下,选择了Java17、SpringBoot3.0.2整合Swagger3。 代码编译一切正常,Swagger的Bean也能加载,到了最后访问前端页面swagger-ui的时候出现404。 根据网上资料…

【计算机网络】传输层——TCP和UDP详解

文章目录 一. TCP和UDP简介二. UDP 协议详解1. UDP报文格式2. UDP的使用场景 三. TCP 协议详解1. TCP报文格式2. TCP协议的重要机制确认应答(保证可靠传输的最核心机制)超时重传连接管理(三次握手、四次挥手)!&#xf…

React组件通讯

组件通讯 组件是一个独立的单元,默认情况下组件只能自己使用自己的数据。在组件化过程中,我们将一个完整的功能拆分成多个组件,便于更好的完成整个应用的功能。 Props 组件本来是封闭的,要接受外部数据应该可以通过Props来实现…

Jmeter学习系列之八:控制器Controllers 的入门介绍

一、Controllers 简介 Jmeter有两种类型的控制器:Samplers(取样器)和Logical Controllers(逻辑控制器);它们驱动着测试的进行取样器:让jmeter发送请求到服务器以及接收服务器的响应数据逻辑控制…

三种方法用c语言求最大公约数以及最小公倍数

学习目标: 掌握求最大公约数(最小公倍数)的三种基本方法 学习内容: 1.一大一小取其小,剖根问底取公约 意思是从一大一小两个数当中,我们取较小的那个数(min)进行剖析,试…

Socket、UDP、TCP协议和简单实现基于UDP的客户端服务端

目录 Socket TCP和UDP区别 UDP:无连接,不可靠传输,面向数据报,全双工 TCP:有连接,可靠传输,面向字节流,全双工 无连接和有连接 可靠传输和不可靠传输 面向数据报和面向字节流…

pclpy 最小二乘法拟合平面

pclpy 最小二乘法拟合平面 一、算法原理二、代码三、结果1.左边原点云、右边最小二乘法拟合平面后点云投影 四、相关数据 一、算法原理 平面方程的一般表达式为: A x B y C z D 0 ( C ≠ 0 ) Ax By Cz D 0 \quad (C\neq0) AxByCzD0(C0) 即: …

【深度学习笔记】 3_13 丢弃法

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 3.13 丢弃法 除了前一节介绍的权重衰减以外,深度学习模型常常使用丢弃法(dropout)[1] 来应对过拟合…

HDL FPGA 学习 - Quartus II 工程搭建,ModelSim 仿真,时序分析,IP 核使用,Nios II 软核使用,更多技巧和规范总结

目录 工程搭建、仿真与时钟约束 一点技巧 ModelSim 仿真 Timing Analyzer 时钟信号约束 SignalTap II 使用 In-System Memory Content Editor 使用 记录 QII 的 IP 核使用 记录 Qsys/Nios II 相关 记录 Qsys 的 IP 核使用 封装 Avalon IP 更多小技巧教程文章 更多好…

【C语言】linux内核ipoib模块 - ipoib_tx_poll

一、中文注释 这段代码是 Linux 内核网络栈中与 InfiniBand 协议相关的一个部分,特别是与 IP over InfiniBand (IPoIB)相关。该函数负责去处理IPoIB的发送完成队列(发送CQ)上的工作请求(work completions)。以下是对这…

前后端分离Vue+ElementUI+nodejs蛋糕甜品商城购物网站95m4l

本文主要介绍了一种基于windows平台实现的蛋糕购物商城网站。该系统为用户找到蛋糕购物商城网站提供了更安全、更高效、更便捷的途径。本系统有二个角色:管理员和用户,要求具备以下功能: (1)用户可以修改个人信息&…

YOLO系列论文阅读(v1--v3)

搞目标检测,绕不开的一个框架就是yolo,而且更糟糕的是,随着yolo的发展迭代,yolo网络可以做的事越来越多,语义分割,关键点检测,3D目标检测。。。这几天决定把YOLO系列彻底梳理一下,在…

奇异递归模板模式应用6-类模板enable_shared_from_this

异步编程中存在一种场景,需要在类中将该类的对象注册到某个回调类或函数中,不能简单地将this传递给回调类中,很可能因为回调时该对象不存在而导致野指针访问(也有可能在析构函数解注册时被回调,造成对象不完整&#xf…

【变压器故障诊断分类及预测】基于GRNN神经网络

课题名称:基于GRNN神经网络的变压器故障诊断分类及预测 版本日期:2024-02-10 运行方式:直接运行GRNN0507.m文件 代码获取方式:私信博主或QQ:491052175 模型描述: 对变压器油中溶解气体进行分析是变压器…

基于springboot+vue的精准扶贫管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

前端工程化面试题 | 15.精选前端工程化高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Linux系统前后端分离项目

目录 一.jdk安装 二.tomcat安装 三.MySQL安装 四.nginx安装 五.Nginx负载均衡tomcat 六.前端部署 一.jdk安装 1. 上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录,将安装包拖进去 2. 解压安装包 这里需要解压到usr/local目录下,在这里新建一个…

基于yolov5的电瓶车和自行车检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于yolov5的电瓶车和自行车检测系统_哔哩哔哩_bilibili (一)简介 基于yolov5的电瓶车和自行车检测系统是在pytorch框架下实现的,这是一个完整的项目,包括代码,数据集,训练好的模型…

低于API等级30的应用将无法在上述应用商店

minSdkVersion minSdkVersion用于指定应用兼容的最低Android版本(API等级)。 如果APP某些功能无法支持低版本Android系统的设备,可以配置minSdkVersion确保APP只能安装到指定Android版本以上的设备。HBuilder|HBuilderX中可在manifest.json中…

单词倒排——c语言解法

以下是题目: 这个题中有三个点, 一个是将非字母的字符转换为空格, 第二是如果有两个连续的空格, 那么就可以将这两个连续的空格变成一个空格。 第三个点就是让单词倒排。 那么我们就可以将这三个点分别封装成三个函数。 还有就是…