HaHack 的微信订阅号

2014/03/23 11:05
阅读数 26

引言

人类的视觉感知存在有限的感知域。对于超出感知域的变化,我们无法感知。然而,这类信号却可能蕴藏着惊人的秘密。

比如,血液循环使得人体的皮肤发生细微的周期性变化,这个裸眼无法感知的变化却和人的心率非常吻合。2011 年,MIT 的一个亚裔学生 Mingzhe Poh 就利用这个微弱的信号设计了一个“魔镜”1 —— 不仅能照出你的模样,还能测出你的心率。


Mingzhe Poh 的这面神奇的镜子的原理是利用了血液在人体内流动时光线的变化 2:心脏跳动时血液会通过血管,通过血管的血液量越大,被血液吸收的光线也越多,人皮肤表面反射的光线就越少。因此,通过对图像的时频分析就可以估算出心率。


Cardiac pulse recovery methodology

再比如,乐器之所以会发出声音,是因为它发声的部分在弹奏过程中发生了有规律的形变,而这个形变的振幅对应着乐器发声的响度,快慢对应着乐器的音高。微弱信号所蕴藏的信息量是如此重大,无怪乎禅语有云:

一花一世界,一叶一菩提。

既然如此,能否将影像中的这些肉眼观察不到的变化“放大”到裸眼足以观察的幅度呢?这就是本文将要重点讨论的问题。

在接下来的篇幅中,我将首先追溯最早的一个放大变化的实验——卡文迪许实验,然后引出适用于现代计算机的两种视角下的影像放大方法。这两种视角分别称为拉格朗日视角(Lagrangian Perspective)和欧拉视角(Eulerian Perspective)。最后我将重点探讨欧拉视角的算法实现细节。我所实现的一个欧拉影像放大算法程序在 Github 上开源。


最早的放大:卡文迪许扭秤实验

我所能追溯到的最早的将变化“放大”的实验是 1797 年卡文迪许(H.Cavendish)的经典实验——扭秤实验。卡文迪许实验是第一个在实验室里完成的测量两个物体之间万有引力的实验,并且第一个准确地求出了万有引力常数和地球质量。

实验的装置由约翰·米切尔设计,由两个重达350磅的铅球和扭秤系统组成。


卡文迪许所使用的装置

卡文迪许用两个质量一样的铅球分别放在扭秤的两端。扭秤中间用一根韧性很好的钢丝系在支架上,钢丝上有个小镜子。用准直的细光束照射镜子,细光束反射到一个很远的地方,标记下此时细光束所在的点。用两个质量一样的铅球同时分别吸引扭秤上的两个铅球。由于万有引力作用。扭秤微微偏转。但细光束所反射的远点却移动了较大的距离。他用此计算出了万有引力公式中的常数  G 。

卡文迪许实验取得成功的原因,是将不易观察的微小变化量,转化(放大)为容易观察的显着变化量,再根据显着变化量与微小量的关系算出微小的变化量 。

卡文迪许的实验给了我们一个启示:放大变化,就是要解决以下两个问题:

  1. 何为“变” —— 如何找出不易观察的微小变化量;

  2. 放大“变” —— 如何放大这个变化量,使之肉眼可见。

不过,卡文迪许的这个实验需要借助一个庞大的扭秤装置,并不能直接用来放大影像中的变化。对于生活在二十一世纪的我们,最理想的方式当然是要借助计算机这个神器了。接下来将介绍两种现代的技术方案,能够让计算机为我们放大影像中细微的变化,从而使我们具有这样一对火眼金睛,去发现大自然隐藏的秘密。

拉格朗日视角

时有风吹幡动。一僧云:风动。一僧云:幡动。议论不已。能进曰:不是风动,不是幡动,仁者心动。一众骇然。

六祖慧能在初见五祖的时候,恰逢有风吹来,吹得幡动。于是一个和尚说是风在动,另一个和尚说是幡在动,而慧能却一语道破:不是风动,也不是幡动,而是你的心在动。

看待一样东西,视角不同,得出的结论也就不同。正如看待生活中的“变”,视角不同,也会得到不同的结果。

所谓拉格朗日视角,就是从跟踪图像中感兴趣的像素(粒子)的运动轨迹的角度着手分析。

  1. 何为“变” —— 感兴趣的像素点随着时间的运动轨迹,这类像素点往往需要借助人工或其他先验知识来辅助确定;

  2. 放大“变” —— 将这些像素点的运动幅度加大。

2005 年,Liu 等人最早提出了一种针对影像的动作放大技术3,该方法首先对目标的特征点进行聚类,然后跟踪这些点随时间的运动轨迹,最后将这些点的运动幅度加大。


Motion Magnification

然而,拉格朗日视角的方法存在以下几点不足:

  • 需要对粒子的运动轨迹进行精确的跟踪和估计,需要耗费较多的计算资源;

  • 对粒子的跟踪是独立进行的,缺乏对整体图像的考虑,容易出现图像没有闭合,从而影响放大后的效果;

  • 对目标物体动作的放大就是修改粒子的运动轨迹,由于粒子的位置发生了变化,还需要对粒子原先的位置进行背景填充,同样会增加算法的复杂度。

欧拉视角

不同于拉格朗日视角,欧拉视角并不显式地跟踪和估计粒子的运动,而是假定 整个场景都在变 ,只是这些变化信号的频率、振幅等特性不同,而我们所感兴趣的变化信号就身处其中。这样,对“变”的放大就变成了对感兴趣频段的析出和增强:

  1. 何为“变” —— 整个场景都在变,而我们所感兴趣的变化信号藏在其中;

  2. 放大“变” —— 通过信号处理手段,将感兴趣的信号分离,并进行增强。

2012 年, Wu 等人从这个视角着手,提出了一种称为欧拉影像放大技术(Eulerian Video Magnification)的方法4,其流程如下:

  1. 空间滤波。将视频序列进行金字塔多分辨率分解;

  2. 频域滤波。对每个尺度的图像进行时频转换和带通滤波,得到感兴趣的若干频带;

  3. 放大滤波结果。对每个频带的信号用泰勒级数来差分逼近,线性放大逼近的结果;

  4. 合成图像。合成经过放大后的图像。


Overview of the Eulerian video magnification framework

在下一节我们将重点探讨 Wu 等人所提出的这种线性的欧拉影像放大技术。之所以加上“线性”这个修饰词,是因为 Wadhwa 等人在 2013 年对这项技术进行了改进,提出了基于相位的影像动作处理技术5。基于相位的欧拉影像放大技术在放大动作的同时不会放大噪声,而是平移了噪声,因而可以达到更好的放大效果。不过对它的讨论超出了本文的篇幅,感兴趣的读者可以自己找来他们的 paper 阅读。

算法细节

如前面所说,欧拉影像放大技术(以下简称 EVM )的第一步是对视频序列进行空间滤波,以得到不同的空间频率的基带。这么做是因为:

  1. 为了方便后面时频分析,我们希望得到较高SNR(信噪比)的信号,而图像在不同空间频率下呈现出不同的SNR。一般来说,空间频率越低,信噪比反而越高;

  2. 对于较高的空间频率(如原视频图像),可能包含难以用泰勒展开逼近该图像信号。因为在这种情况下,逼近的结果就会出现溷淆,直接放大会就出现明显失真。

由于空间滤波的目的只是简单的将多个相邻的像素“拼”成一块,所以可以使用低通滤波器来进行。为了加快运算速度,还可以顺便进行下采样操作。熟悉图像处理操作的朋友应该很快可以反应出来:这两个东西的组合就是金字塔。实际上,线性的 EVM 就是使用拉普拉斯金字塔或高斯金字塔来进行多分辨率分解。

得到了不同空间频率的基带后,接下来对每个基带都进行频域上的带通滤波,目的是提取我们感兴趣的那部分变化信号。

例如,如果我们要放大的心率信号,那么可以选择 0.4 ~ 4 Hz (24~240 bpm )进行带通滤波,这个频段就是人的心率的范围。

不过,带通滤波器有很多种,常见的就有理想带通滤波器、巴特沃斯(Butterworth)带通滤波器、高斯带通滤波器,等等。应该选择哪个呢?这得根据放大的目的来选择。如果要放大的是动作(motion)的变化,应该选择宽通带的滤波器,比如 Butterworth 带通滤波器,IIR 滤波器;如果要放大的是颜色变化,则应该选择窄通带的滤波器,比如理想带通滤波器。一图胜千言,看下面的图会更加直观些:


Temporal filters used in Wu’s paper

放大和合成

经过前面两步,我们已经找出了“变”的部分,即解决了何为“变”这个问题。接下来我们来探讨如何放大“变”这个问题。

这里以放大一维的信号为例,二维的图像信号与此类似。对信号的放大,需要经过以下几步:

  1. 对信号进行泰勒级数展开;

  2. 对展开得到的每一部分,乘以一个放大倍数 

    α

     。

假定现在有个信号  I(x,t) ,在任意时刻  t ,有:

I(x,t)I(x,0)=f(x+δ(t))=f(x),t>0,t=0

其中, δ(t) 是变化信号(motion signal)。

我们希望得到这个信号放大  α 倍后的结果,即:


I^(x,t)=f(x+(1+α)δ)(t)


为了简化计算,我们用一阶泰勒级数展开来逼近公式 1 表示的信号1 1 想起了高数老师在第一节课所说的话:高等代数,也就是微积分,研究的就是一个字:“变”。 :

I(x,t)≈f(x)+δ(t)∂f(x)∂x

公式 2 中标蓝的部分恰好就是变化的部分。

在放大该部分之前,我们先考虑一种理想情况:设  B(x,t) 为我们在上一步进行带通滤波后得到的结果。假如变化信号  δ(t) 恰好落在我们进行带通滤波时所选的频带范围内,那么  B(x,t) 应该恰好等于公式 2 中标蓝的部分,即:

B(x,t)=δ(t)∂f(x)∂x

对公式 2 所逼近的信号进行放大,就是将这个变化的部分乘以一个放大倍数  α ,再加回原来的信号中。即:

I^(x,t)=I(x,t)+αB(x,t)

联立公式 2~4 ,可以得到

I~(x,t)≈ f(x)+(1+α)δ(t)∂ f(x)∂ x

在这种理想情况下,这个  I~(x,t) 约等于我们希望得到的  I(x,t) ,即:

I~(x,t)≈ f(x+(1+α)δ(t))

下图演示了使用上面的方法将一个余弦波放大  α 倍的过程和结果。其中,黑色的曲线表示原信号  f(x) ,蓝色的曲线表示变化后的信号  f(x+δ) ,青色的曲线表示对这个信号的泰勒级数逼近  f(x)+δ(t)∂ f(x)∂ x,绿色的曲线表示我们分离出来的变化的部分。我们将这个部分放大  α 倍再加回原信号就得到放大后的信号,图中红色的曲线表示这个放大后的信号  f(x)+(1+α)B(x,t)) 。


不过,大部分情况下,我们并没有那么幸运——变化信号  δ(t) 不会完全落在我们所选的频段以内。这种情况下,应用带通滤波意味着会在一定程度上减弱该变化。因此,我们用  λk(t) 来表示在  t 时刻变化第  k 个信号减弱的倍数( 0≤ λk ≤ 1),则有:

B(x,t)=∑k λkδk(t)∂ f(x)∂ x

之后我们又要对它乘以放大倍数  α 。既然两步都是乘以一个倍数,为了方便起见,我们干脆把这两个线性变化合为一步,即让放大倍数  αc=λkα ,则:

I~(x,t)≈ f(x+∑k(1+αk)δk(t))

放大倍数限制

线性的 EVM 方法会在放大动作变化的同时放大噪声,为了避免造成太大的失真,可以设置一个合理的放大倍数限制。假定信号的空间波长为  λ=2πω ,这个限制可以用公式 9 来表示:

(1+α)δ(t)<λ8

当超出这个边界的时候,我们可以让  α 维持在一个边界值,如下图所示:


Bounds of amplification factor

不过,如果要放大的是颜色的变化,那么从视觉上看并不会很受影响(或者说这种颜色的失真就是我们想要的),这时候就可以不用对  α 进行限制,或者使用一个较小的  lambdac 。

算法实现


这一节将介绍我使用 OpenCV 实现线性欧拉影像放大算法的心得。

(请访问原文阅读)

结果

下面演示使用我的程序,对论文提供的 face 案例进行处理的结果。

所选参数如下:

放大倍数  Α Λ 频段 衰减因子
动作变化放大 10 16 0.05~0.4 0.1
颜色变化放大 50 - 0.83~1.0 -

原视频


(请访问原文观看)

动作变化放大结果


(请访问原文观看)

颜色变化放大结果


(请访问原文观看)

源码和程序

  •  QtEVM 的源码

  •  QtEVM 的 Win32 可执行程序



  1. Poh, M.-Z., McDuff, D.J. and Picard, R.W. 2010. Non-contact, automated cardiac pulse measurements using video imaging and blind source separation. (2010).↩

  2. Verkruysse, W., Svaasand, L.O. and Nelson, J.S. 2008. Remote plethysmographic imaging using ambient light. Optics express. 16, 26 (2008), 21434–21445.↩

  3. Liu, C., Torralba, A., Freeman, W.T., Durand, F. and Adelson, E.H. 2005. Motion magnification. ACM Transactions on Graphics (TOG) (2005), 519–526.↩

  4. Wu, H.-Y., Rubinstein, M., Shih, E., Guttag, J., Durand, F. and Freeman, W. 2012. Eulerian video magnification for revealing subtle changes in the world. ACM Transactions on Graphics (TOG). 31, 4 (2012), 65.↩

  5. Wadhwa, N., Rubinstein, M., Durand, F. and Freeman, W.T. 2013. Phase-Based Video Motion Processing. ACM Trans. Graph. (Proceedings SIGGRAPH 2013). 32, 4 (2013).↩


本文分享自微信公众号 - HaHack(gh_12d2fe363c80)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部