HaHack 的微信訂閱號

引言

人類的視覺感知存在有限的感知域。對於超出感知域的變化,咱們沒法感知。然而,這類信號卻可能蘊藏着驚人的祕密。
git

好比,血液循環使得人體的皮膚髮生細微的週期性變化,這個裸眼沒法感知的變化卻和人的心率很是吻合。2011 年,MIT 的一個亞裔學生 Mingzhe Poh 就利用這個微弱的信號設計了一個「魔鏡」1 —— 不只能照出你的模樣,還能測出你的心率。github


Mingzhe Poh 的這面神奇的鏡子的原理是利用了血液在人體內流動時光線的變化 2:心臟跳動時血液會經過血管,經過血管的血液量越大,被血液吸取的光線也越多,人皮膚表面反射的光線就越少。所以,經過對圖像的時頻分析就能夠估算出心率。web


Cardiac pulse recovery methodology算法

再好比,樂器之因此會發出聲音,是由於它發聲的部分在彈奏過程當中發生了有規律的形變,而這個形變的振幅對應着樂器發聲的響度,快慢對應着樂器的音高。微弱信號所蘊藏的信息量是如此重大,無怪乎禪語有云:express

一花一世界,一葉一菩提。微信

既然如此,可否將影像中的這些肉眼觀察不到的變化「放大」到裸眼足以觀察的幅度呢?這就是本文將要重點討論的問題。ide

在接下來的篇幅中,我將首先追溯最先的一個放大變化的實驗——卡文迪許實驗,而後引出適用於現代計算機的兩種視角下的影像放大方法。這兩種視角分別稱爲拉格朗日視角(Lagrangian Perspective)和歐拉視角(Eulerian Perspective)。最後我將重點探討歐拉視角的算法實現細節。我所實現的一個歐拉影像放大算法程序在 Github 上開源。spa


最先的放大:卡文迪許扭秤實驗

我所能追溯到的最先的將變化「放大」的實驗是 1797 年卡文迪許(H.Cavendish)的經典實驗——扭秤實驗。卡文迪許實驗是第一個在實驗室裏完成的測量兩個物體之間萬有引力的實驗,而且第一個準確地求出了萬有引力常數和地球質量。.net

實驗的裝置由約翰·米切爾設計,由兩個重達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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索