王迪 李趙松 黃倩 王瓊?cè)A
(北京航空航天大學儀器科學與光電工程學院,北京 100191)
現(xiàn)實世界是3D 世界,而傳統(tǒng)的2D 顯示設備只能提供平面圖像顯示,無法使觀看者獲得身臨其境的觀看體驗。為了使人們更真實地認識客觀世界,顯示技術(shù)從2D 向3D 發(fā)展已成為了一種趨勢。在3D 顯示技術(shù)中,全息3D 顯示技術(shù)基于物理光學原理,利用光的衍射重建3D 物體的波前信息,從而提供人眼所需要的全部深度信息[1],人眼在觀看3D 物體重建像時不會產(chǎn)生立體觀看視疲勞。因此,全息3D顯示被視為3D顯示未來發(fā)展的重要方向之一。
如何實現(xiàn)全息圖的快速計算是全息3D顯示的關(guān)鍵問題之一。當記錄復雜3D 物體時,全息圖的計算量急劇增加,需要很長的計算時間才能生成全息圖。為了克服這一問題,許多提高全息圖生成速度的算法和加快計算速度的硬件設備被開發(fā)了出來[2-6]。本文將針對計算全息圖的快速生成技術(shù)進行介紹。首先圍繞標量衍射理論分析全息3D 顯示的基本原理,接著基于3D物體的數(shù)學描述方式對計算全息圖的快速生成方法進行分類介紹,并概述了利用硬件加速法和深度學習法加快全息圖計算速度的典型工作,最后對計算全息圖的快速生成方法進行總結(jié)。
計算3D 物體的全息圖主要在于計算物光波從3D物體到全息面的衍射傳播過程,該過程主要是基于標量衍射理論來進行近似計算。波前上的任意一點都可看作是子波源,它們都能產(chǎn)生球面子波,后一時刻的波前位置是所有子波波前的包絡面[7]。當一束光經(jīng)過孔徑平面Σ 發(fā)生了菲涅爾衍射,在孔徑后任一點P處觀察時,孔徑平面上也存在一點P1作為子波源向后發(fā)射球面子波。設P1到P的直線距離為r0,傳播方向與方向法線夾角為θ,根據(jù)惠更斯-菲涅耳原理,觀察點P處的光場U(P)滿足:
其中,k是波數(shù),λ是光的波長,i代表虛數(shù),ds是點P1的面積,U(P1)是點P1的光場分布。
如圖1所示,考慮3D 物體上一個點到全息面的衍射過程[2,7]。記位于物平面(m,n)內(nèi)有一點Q1,全息面(x,y)上有一點Q0,兩點間的直線距離為r,傳播光線與光軸z的夾角為α,物平面到全息面的距離為s,由幾何關(guān)系可以求得cosα=s/r。根據(jù)公式(1)可以獲得點Q0處的光場分布U(Q0)為:
圖1 物點的標量衍射示意圖Fig.1 Schematic diagram of the scalar diffraction of the object point
其中,U(Q1)表示物點Q1處的光場分布。
通過傍軸近似,公式(2)可簡化為:
若采用菲涅爾衍射來計算3D 物體的全息圖,則需要對每一個物點都采用菲涅爾衍射來計算與該物點對應的全息面上的復振幅分布,最后將物點疊加以獲得3D 物體的全息圖。這樣的復振幅分布表示為:
其中,H(x,y)表示全息面(x,y)上的復振幅分布,Aj表示第j個點光源(xj,yj,zj)的振幅信息,φj表示與第j個點光源對應的隨機相位。假設3D 物體上有N個點光源,全息圖的分辨率為a×b,那么公式(4)的運算量為N×a×b次,且每次計算都涉及到多次乘法運算及積分運算等,計算速度將變得非常慢。要做到實時動態(tài)的全息3D顯示,計算速度問題需得到有效解決。
3D物體的數(shù)學描述方法具有不同的表達形式,如圖2所示。根據(jù)3D 物體的幾何信息,將其離散表示為一系列的點光源,即為點元描述;根據(jù)3D 物體的表面特征,利用一系列的三角形網(wǎng)格或多邊形網(wǎng)格來描述3D 物體的表面信息,即為面元描述;根據(jù)3D物體的深度信息,將其離散為一系列平行于全息面的2D 切面,即為分層描述。依據(jù)不同的描述方法,計算全息圖的生成方法可分為點元法、面元法和分層法三類[1]。此外,硬件加速法和深度學習法也在全息圖的快速計算中起著重要的作用,接下來將分別進行介紹。
圖2 3D物體的數(shù)學描述方法Fig.2 Mathematical description method of the 3D object
點元法的基本思想是利用3D 空間分布的一系列離散點光源來描述3D 物體,經(jīng)典的基于點元法的快速計算方法有查表法(Look-up table,LUT)和波前記錄平面法(Wavefront-recording plane,WRP)。美國麻省理工學院的研究人員提出了LUT 法來提高離軸透射全息圖的計算速度[2]。在該方法中,與3D 物體的每個點元相對應的所有條紋圖案都被預先計算并存儲在查找表中。雖然條紋的存儲需要占用較大的儲存空間,但全息圖的計算速度會有一個數(shù)量級的提升。為了減少查找表占用的儲存空間,韓國光云大學的研究人員提出了新型查表法(Novel-LUT,N-LUT)[8],如圖3 所示。3D 物體被描述為空間中離散的點元,處于同一深度平面的點為一組,然后僅預計算和存儲每個深度平面上位于中心點的主條紋圖案(Principal fringe pattern,PFP),以此減少了生成全息圖所需的條紋圖案的計算量,計算速度相比LUT法提升了近744倍。
圖3 N-LUT的流程圖Fig.3 Flow chart of the N-LUT
新加坡國立大學的研究人員提出了一種分別使用水平和垂直方向的拆分查找表法(Split-LUT,S-LUT)[9],降低了待計算的查找表的存儲空間,S-LUT法的計算速度相比傳統(tǒng)的LUT法提升了大約700 倍,相比傳統(tǒng)的光線追蹤方法也提升了大約100 倍。同時,由于S-LUT 法在圖形處理單元(Graphics processing unit,GPU)上的內(nèi)存使用量遠低于LUT 法,這使得復雜3D 對象的全息圖計算速度更快。韓國光云大學的研究人員對N-LUT 法進行了改進[10],他們首先用基線PFP 來計算3D 視頻的2D 全息圖,然后用2D 全息圖與深度補償PFP 的乘積來計算3D 視頻的3D 全息圖,最后采用運動補償將PFP 的存儲容量從N-LUT 法的兆字節(jié)數(shù)量級降低到千字節(jié)數(shù)量級。該方法的計算速度相比N-LUT 法提高了30%。由于N-LUT 法需要計算的PFP 的數(shù)量與3D 物體的深度層數(shù)成正比關(guān)系,當3D物體的深度層數(shù)增加時,存儲量大幅上升。為了解決這一問題,北京理工大學的研究人員提出一種與深度層數(shù)無關(guān)的壓縮查表法(Compressed-LUT,C-LUT)[11],通過預先計算并存儲2D 切片平面上點的水平和垂直光調(diào)制因子,大大節(jié)約了存儲空間。雖然C-LUT 法相比LUT 法計算速度得到顯著提高,但預先計算的PFP 依舊占據(jù)大量內(nèi)存。為了解決查找表的高存儲空間需求,日本千葉大學的研究人員提出使用WRP 法來快速計算全息圖[12],如圖4(a)所示。首先在波前記錄平面上記錄3D 物體發(fā)射的球面波,然后基于快速傅里葉變換,通過從波前記錄平面到全息面的衍射計算來降低計算復雜度。在此基礎上,該團隊利用LUT 法來記錄3D物體到波前記錄平面的PFP,然后使用GPU 來加速完成波前記錄平面的PFP 到全息面的衍射計算[13],最終全息圖的計算速度相比傳統(tǒng)的WRP 法提高了80倍,實驗效果如圖4(b)所示。北京航空航天大學的研究人員通過分析3D 物體的大小、每個點的位置、空間光調(diào)制器的參數(shù)和重建距離之間的關(guān)系計算出再現(xiàn)像的有效視區(qū),進而計算出各物點在全息面上的衍射面積大小,減小了存儲的數(shù)據(jù)量。當物點數(shù)為600×600 時,計算速度比傳統(tǒng)的N-LUT 算法提高了51%以上[14]。目前點元法的計算速度問題已得到有效解決,如何在提高計算速度的基礎上,提高全息圖的再現(xiàn)質(zhì)量仍是點元法需要關(guān)注的問題。
圖4 WRP法的方法示意圖和實驗效果圖Fig.4 Schematic diagram and experimental result of the WRP method
基于點元法計算全息圖的點元數(shù)量常高達數(shù)百萬,而使用面元法可以將點元數(shù)量減少兩到三個數(shù)量級。目前,計算機圖形學已經(jīng)建立起一套基于三角形網(wǎng)格法的離散、建模和計算方法,因此面元法可以借助計算機圖形學計算3D 物體的全息圖。根據(jù)采樣方法的不同,面元法分為傳統(tǒng)面元法和解析面元法。
傳統(tǒng)面元法需要對每個面元的頻域和空域都進行傅里葉變換運算。日本關(guān)西大學和德國耶拿大學的研究人員基于平面波的角譜和頻域的坐標旋轉(zhuǎn),通過兩次快速傅里葉變換和一次頻譜插值,實現(xiàn)了非平行于全息面的孔徑衍射波的復振幅計算[3]。北京理工大學的研究人員為了解決傳統(tǒng)面元法在生成全息圖的過程中存在大量數(shù)值計算的問題,提出了一種基于二維傅里葉分析的快速多邊形計算方法[15]。該方法的實驗效果如圖5(a)所示。由于該方法不需要對每個多邊形表面進行快速傅里葉變換和額外的擴散計算,因此可以節(jié)省計算時間,相比傳統(tǒng)面元法計算時間縮短了25%。
愛爾蘭國立大學的研究人員提出了解析面元法[16],與傳統(tǒng)面元法相比,解析面元法對于多面元的3D 物體也只需使用一次傅里葉變換,計算速度得到了快速提高。但是解析面元法的計算復雜度取決于全息圖的分辨率和3D 物體的面元數(shù)量,復雜的3D 物體將影響解析面元法的計算速度。北京理工大學的研究人員提出了一種改進的基于全解析多邊形的方法[17],他們利用原三角形和任意三角形的頂點向量和偽逆矩陣,構(gòu)造了表示兩個三角形空間關(guān)系的仿射變換矩陣。該方法避免了每個多邊形面元都要參與FFT 計算,相比傳統(tǒng)的解析面元法,還省去了低階的相關(guān)角度計算,計算速度提高了90%,實驗效果如圖5(b)所示。昆明理工大學的研究人員則將空間域的旋轉(zhuǎn)和二維的仿射變換由旋轉(zhuǎn)矩陣和二維仿射矩陣來表示,比傳統(tǒng)的解析面元法計算速度提高了1倍[18]。從傳統(tǒng)面元法和解析面元法的實驗效果來看,雖然全息圖的計算速度得到了提升,但是大量的矩陣變換和空間映射卻帶來了全息圖重建質(zhì)量的下降,如何在保證全息圖計算速度得到提高的同時不對3D 物體信息造成損失仍是面元法需要解決的問題。
圖5 面元法的實驗效果Fig.5 Experimental results of the polygon-based method
為了進一步簡化計算,研究者們提出了計算復雜度更低、數(shù)據(jù)量更少的分層法。分層法的基本思想是將3D物體切分為一系列平行于全息面的2D切片,這些切片包含了3D 物體各個深度的振幅信息,可以使用面與面之間的傳播算法如角譜法、快速傅里葉法等來實現(xiàn)快速計算。清華大學的研究人員提出了基于角譜的分層法[4],實驗效果如圖6(a)所示。每層圖像的振幅信息在與隨機相位疊加后進行角譜傳播。在不考慮傍軸近似的情況下,將每層圖像在全息面的頻譜分布疊加就能獲得3D 物體在全息面的頻譜分布,最后使用逆傅里葉變換獲得全息圖的復振幅分布。該方法避免了點元法和面元法的巨大計算量,能準確預測3D 物體的整個衍射場,在分層數(shù)量一定的前提下,計算量與3D 物體的復雜度無關(guān)。與傳統(tǒng)的分層法相比,基于角譜的分層法能在不降低圖像分辨率的前提下有效地減少全息圖的計算量。
圖6 分層法的實驗效果Fig.6 Experimental results of the layer-based method
為了提高分層法的計算速度,劍橋大學的研究人員提出了基于快速兩步分層算法和亞稀疏二維快速傅里葉變換算法[19]??紤]到分層法中不同層之間的遮擋效應,每個層的圖像包含像素值為零的大圖像區(qū)域。利用這一特性,快速兩步分層算法只計算了每一層的非零圖像區(qū)域。此外,亞稀疏二維快速傅里葉變換算法只計算了分層圖像的非零像素的行和列,降低了傅里葉變換的計算量。與傳統(tǒng)的分層法相比,這兩種方法與分層法的結(jié)合使計算速度提高了至少3 倍。由于3D 物體的信息在衍射計算中分布到了整個全息圖平面,亞稀疏二維快速傅里葉變換在減小計算區(qū)域同時可能會導致3D 物體的信息丟失,這將引起重建圖像的質(zhì)量下降。日本千葉大學的研究人員通過使用實值傅里葉變換和哈特萊變換作為實線性變換來減少耗時的復數(shù)運算,并將由實線性變換產(chǎn)生的全息圖通過半波帶片法和數(shù)字化單邊帶法轉(zhuǎn)換為了純相位全息圖。該方法相比傳統(tǒng)的分層法計算速度提高了3倍[20],實驗效果如圖6(b)所示。
目前,分層法的計算速度已得到顯著的提高,許多分層法中存在的問題如遮擋效應,缺乏深度線索等得到了解決,但是重建圖像的實時渲染和重建圖像質(zhì)量的提高仍然是分層法需要進一步解決的問題。
除了從算法的角度來提升計算全息圖的生成速度以外,硬件平臺的算力提升對于快速計算也很關(guān)鍵。近年來,隨著硬件運算速度的快速提升,越來越多的研究人員利用高性能硬件設備來完成全息圖的計算。傳統(tǒng)的全息圖算法是在中央處理器(Central processing unit,CPU)上運行的,盡管目前CPU 的處理能力有所提高,但對于實時應用來說還遠遠不夠。加速硬件平臺,通常包括GPU 和可編程門陣列(Field programmable gate array,F(xiàn)PGA)等,能夠配合算法快速計算全息圖。
CPU 是現(xiàn)代計算機的核心組件,使用CPU 的最大優(yōu)點是開發(fā)時間短,幾乎所有可以在其他硬件加速器平臺上找到的軟件包都具有相同或等效的工具包可以在CPU 上使用,而且CPU 對雙精度浮點運算的支持往往更好。但是,CPU 無法實現(xiàn)輸入數(shù)據(jù)完全的并行運算。與CPU 不同的是,GPU 在硬件結(jié)構(gòu)上體現(xiàn)出了并行性,同時,GPU 可以使用高級編程語言進行編程,這使得開發(fā)和調(diào)試過程比其他平臺更快、更容易。麻省理工學院的研究者基于GPU提出了一種允許進行若干計算簡化的全息算法。該算法在2 s 內(nèi)可以計算出一個6 MB 的全息圖,比傳統(tǒng)的計算機快100倍[21]。日本千葉大學的研究者使用HLSL和DirectX API實現(xiàn)了對基于GPU的線性全息圖算法的加速,將計算速度提升了47倍[5]。此外,F(xiàn)PGA 作為一種高度可配置的集成電路,能夠在制造后由設計者重新編程。近年來,使用基于FPGA架構(gòu)的集成芯片來提高全息圖計算速度的方法也被提出[22]。如圖7所示,基于FPGA的全息算法可以遷移到非常大規(guī)模的集成芯片上,且不需要進行大規(guī)模的修改[23]。大規(guī)模集成的可編程FPGA 的出現(xiàn)為實現(xiàn)全息圖的快速生成提供了硬件支撐,但FPGA的設計難度大、加工成本高,目前仍未得到廣泛應用。
圖7 FPGA在計算全息3D顯示中的應用Fig.7 Application of FPGA in computer-generated holographic 3D display
近幾年,得益于GPU 計算能力的提高,深度學習法被應用于人工智能的各個領(lǐng)域[24],計算全息技術(shù)也與深度學習法產(chǎn)生了緊密結(jié)合[25]。基于在計算全息實驗中產(chǎn)生的大量數(shù)據(jù),深度學習法利用成熟的深度學習框架,建立3D 物體的全息圖與3D 物體間的損失函數(shù)關(guān)系,完成對神經(jīng)網(wǎng)絡的訓練。當神經(jīng)網(wǎng)絡被訓練完成后,可以快速生成滿足需求的全息圖,從而解決全息顯示質(zhì)量與計算時間的權(quán)衡問題,為計算全息圖的快速生成提供了新的思路。日本大阪大學的研究人員提出了一種相對簡單的深度神經(jīng)網(wǎng)絡訓練數(shù)據(jù)生成策略,使用卷積殘差神經(jīng)網(wǎng)絡生成3D 物體的全息圖[26],單幀全息圖的計算時間僅需26 ms。韓國首爾大學的研究人員基于由隨機點產(chǎn)生的訓練數(shù)據(jù)集,提出了一種用于生成多深度全息圖的深度神經(jīng)網(wǎng)絡[27],當物體層數(shù)為5層時,多深度全息圖的計算時間為234 ms。上海大學的研究人員利用多深度平面的角譜算法來訓練卷積神經(jīng)網(wǎng)絡,實現(xiàn)了多層3D 物體的純相位全息圖的快速生成[28]。日本千葉大學的研究人員提出了將低采樣全息圖轉(zhuǎn)換為全采樣全息圖的卷積神經(jīng)網(wǎng)絡,以補償因采樣不足引起的誤差,同時加快了計算速度[29]。清華大學的研究人員以U-Net結(jié)構(gòu)作為編碼器生成全息圖,在150 ms內(nèi)完成了單幀分辨率為3940×2160 的全息圖計算[30],如圖8(a)所示。麻省理工學院的研究人員提出了一種用復雜數(shù)據(jù)集訓練深度神經(jīng)網(wǎng)絡的CNN 框架[31],解決了傳統(tǒng)計算全息中的遮擋問題,實驗結(jié)果如圖8(b)所示,為實時的全息3D顯示提供了解決思路。
圖8 深度學習在計算全息3D顯示中的應用Fig.8 Application of the deep learning in computer-generated holographic 3D display
如今,理想的全息3D 顯示對計算速度和重建質(zhì)量都提出了很高要求,如何保證全息圖在快速生成的同時也能有較好的重建質(zhì)量是未來全息3D 顯示技術(shù)研究的重點內(nèi)容,深度學習法也將與計算全息技術(shù)結(jié)合得愈發(fā)緊密。
本文對計算全息圖的快速生成方法與優(yōu)缺點進行了分類概述。在點元法中,LUT法和WRP法在加快點元法計算速度的同時節(jié)省了存儲空間;解析面元法利用仿射變換減少了傅里葉變換次數(shù),從而提高了傳統(tǒng)面元法的計算速度;不斷改進的分層法在解決遮擋問題的同時也加快了全息圖的生成速度;硬件加速技術(shù)可以使計算速度得到大幅提升,而深度學習方法在保證質(zhì)量的同時,也為全息圖的快速計算提供了新的思路。目前,雖然國內(nèi)外的研究人員提出了諸多提高全息圖生成速度的方法,然而全息圖的計算速度尚難以滿足3D 物體實時計算的需求。未來,全息圖的速度提升不僅需要高效率的計算方法,更需要高性能的硬件設備的開發(fā)。隨著光電技術(shù)的發(fā)展,相信在不久的將來,3D 物體全息圖的實時計算會得以實現(xiàn)。