姚建云,應(yīng)曉霖,許富洋,吳瓊,張?;?,李勇
(1 浙江師范大學(xué)信息光學(xué)研究所,浙江金華,321004)
(2 浙江省光信息檢測與顯示技術(shù)研究重點(diǎn)實(shí)驗(yàn)室,浙江金華,321004)
全息術(shù)由GABOR D 在1948年提出[1],三維顯示是全息術(shù)的重要應(yīng)用領(lǐng)域之一[2-7]。全息圖能夠同時(shí)記錄物光場的振幅和相位信息,其再現(xiàn)像可以提供人眼觀察所需的所有深度線索,因此全息技術(shù)被認(rèn)為是理想的三維顯示技術(shù)。隨著計(jì)算機(jī)技術(shù)與電子技術(shù)的不斷發(fā)展,計(jì)算全息(Computer Generated Hologram,CGH)應(yīng)運(yùn)而生[8-9]。它通過計(jì)算機(jī)數(shù)值計(jì)算代替光學(xué)記錄過程來獲得全息圖,再將全息圖加載到空間光調(diào)制器或輸出到記錄介質(zhì)上實(shí)現(xiàn)三維物體的再現(xiàn)。這一技術(shù)的出現(xiàn)使得虛實(shí)場景結(jié)合的全息圖制作成為可能,并且大大推動(dòng)了動(dòng)態(tài)全息三維顯示的發(fā)展。
龐大的計(jì)算量是實(shí)現(xiàn)高質(zhì)量計(jì)算機(jī)制全息三維顯示的瓶頸之一。研究者提出了一系列的全息圖快速算法。常見的CGH 算法有點(diǎn)元法、面元法及層析法等等。點(diǎn)元法將物體分解為一系列離散發(fā)光點(diǎn),每個(gè)點(diǎn)發(fā)出球面波。全息圖由這些球面波在全息面上疊加后的物光與參考光干涉形成。該方法適合計(jì)算復(fù)雜場景的全息圖。為提高點(diǎn)元法的計(jì)算速度,國內(nèi)外學(xué)者提出了諸多算法,如查表法[10-13](Look-up Table,LUT)、差分法[14]、分離變量法[15]及波前記錄面[16-17](Wave Recording Plane,WRP)法等。面元法主要分為基于采樣的面元法[18-19]和解析面元法[20-21]。同一物體的面元數(shù)量遠(yuǎn)小于點(diǎn)元數(shù)量,因此面元法計(jì)算量比點(diǎn)元法少,但是該方法計(jì)算紋理復(fù)雜物體的全息圖依然耗時(shí)較多。層析法[22-24]將三維物體分為多個(gè)相互平行的平面,利用快速傅里葉變換(Fast Fourier Transform,F(xiàn)FT)求解每一層物體衍射到全息面上的復(fù)振幅,然后疊加并與參考光干涉,最終得到全息圖。由于層析法采用了FFT,有效地提高了計(jì)算速度。但采用FFT 計(jì)算物面到全息面上的衍射時(shí),對(duì)數(shù)據(jù)的插值操作降低了計(jì)算速度,尤其是物面或全息面的長寬比大時(shí)。
當(dāng)計(jì)算機(jī)制全息圖的分辨率在數(shù)億像素時(shí),通常采用并行計(jì)算或光場與計(jì)算全息結(jié)合的方法進(jìn)行全息圖的計(jì)算。并行計(jì)算方法利用全息圖計(jì)算中的獨(dú)立性,采用多臺(tái)計(jì)算設(shè)備同時(shí)計(jì)算,設(shè)備較為昂貴,計(jì)算時(shí)電能消耗大。文獻(xiàn)[25]提出采用服務(wù)器集群的并行計(jì)算方法實(shí)現(xiàn)高加速比的全息圖計(jì)算。文獻(xiàn)[26]提出采用GPU 集群的并行算法,在由16 個(gè)節(jié)點(diǎn)構(gòu)成、每個(gè)節(jié)點(diǎn)有16 個(gè)GPU 的超大規(guī)模并行機(jī)上實(shí)現(xiàn)了44 000×44 000 像素菲涅爾全息圖的快速計(jì)算。光場與計(jì)算全息結(jié)合的方法利用一系列二維光場圖像來計(jì)算全息圖,其運(yùn)動(dòng)視差是離散的。增加運(yùn)動(dòng)視差的平滑性需要密集的光場圖像,全息圖的計(jì)算時(shí)間也隨之明顯增加。文獻(xiàn)[27]提出采用頻域拼接的方法實(shí)現(xiàn)了94 340×94 340 像素的彩色彩虹全息快速計(jì)算。文獻(xiàn)[28]提出采用光場圖像與全息透鏡結(jié)合的方法實(shí)現(xiàn)了200 000×200 000 像素的全視差全息圖快速計(jì)算。文獻(xiàn)[29]提出采用角頻率切片的由光場圖像計(jì)算全息圖的方法,實(shí)現(xiàn)了25 000×25 000 像素的全息圖快速計(jì)算。本文通過分析層析法CGH 計(jì)算過程,提出了一種由三維體數(shù)據(jù)計(jì)算CGH 的快速算法。采用積分項(xiàng)周期延拓消除了冗余計(jì)算,同時(shí)利用人眼的低通濾波特性省去了圖像插值中的數(shù)字低通濾波。
圖1 為層析法計(jì)算菲涅爾全息圖的流程示意圖,R表示參考光,H表示全息面。首先對(duì)物體分層,然后對(duì)每一層的數(shù)據(jù)計(jì)算其在全息面上的光場復(fù)振幅分布,將得到的所有復(fù)振幅分布求和并與參考光干涉得到要記錄的全息圖。
圖1 層析法菲涅爾全息圖計(jì)算Fig.1 Layer-based calculation model of Fresnel hologram
在計(jì)算每一層數(shù)據(jù)在全息面上的衍射場分布時(shí)需要通過菲涅爾衍射積分公式來完成,即
式中,o(x0,y0)表示物面上的復(fù)振幅分布,u(x,y)表示全息面上物光波的復(fù)振幅分布,k=2π/λ,λ為波長。
積分項(xiàng)式(2)為二維傅里葉變換,采用計(jì)算機(jī)數(shù)值計(jì)算時(shí)對(duì)空域(物面)和空頻域(全息面)進(jìn)行采樣離散化后,利用FFT 算法實(shí)現(xiàn)。在水平、垂直方向采樣間隔相同時(shí),采用Δo和Δh分別表示物面和全息面的采樣間隔。對(duì)物面離散化后式(2)表示為
由(3)式可知,物面離散化后全息面上的積分項(xiàng)是一個(gè)周期函數(shù),是連續(xù)情況下全息面上積分項(xiàng)的周期延拓。離散傅里葉變換(Discrete Fourier Transformation,DFT)是取式(3)的一個(gè)周期并采樣離散化,F(xiàn)FT 是DFT 的快速算法。因此FFT 實(shí)際隱含了周期性。當(dāng)全息面或物面水平和垂直方向的采樣點(diǎn)數(shù)分別為M和N時(shí),根據(jù)FFT 原理,物面和全息面的尺寸必須滿足
則式(3)水平和垂直方向的周期分別為MΔh和NΔh。
全息圖尺寸與觀察視角有關(guān)。如圖2所示,在記錄物體大小一定時(shí),人眼透過全息圖觀察再現(xiàn)像,只有部分與瞳孔對(duì)應(yīng)區(qū)域的衍射光進(jìn)入人眼。人眼移動(dòng)時(shí),對(duì)應(yīng)的全息圖區(qū)域也隨之移動(dòng),則觀察到不同視角處的再現(xiàn)像??梢?,在物體大小、全息面與物面距離確定且全息面采樣間隔滿足要求時(shí),全息圖越大,其可觀察視角越大。
圖2 在不同位置透過全息圖觀察再現(xiàn)像Fig.2 Observe the reconstructed image in different positions through the hologram
由式(4)可知,全息圖越大,要求物面的采樣間隔越小。人眼是一個(gè)低通系統(tǒng),分辨率有限,物面采樣間隔小到一定程度,超過了人眼分辨率,會(huì)造成信息冗余,增加不必要的存儲(chǔ)和計(jì)算量。因此,在大視角全息圖計(jì)算時(shí),以人眼分辨率為基準(zhǔn)確定物面的采樣間隔。物面大小確定后,這一采樣間隔對(duì)應(yīng)的只是某一視角下與瞳孔對(duì)應(yīng)的小部分全息圖。增加視角,全息圖尺寸必須增加。由式(4)知,必須減小物面采樣間隔。在數(shù)字信號(hào)處理中,整數(shù)倍插值用以下模型描述:在原有樣點(diǎn)之間插零,然后進(jìn)行數(shù)字低通濾波。設(shè)采樣后的物面復(fù)振幅為o(pΔo,qΔo),在物面相鄰樣點(diǎn)間插kx、ky個(gè)零,數(shù)據(jù)采樣間隔變?yōu)棣/kx和Δo/ky,則插零后的物面復(fù)振幅表示為o(m′Δo/kx,n′Δo/ky)。根據(jù)式(3),積分項(xiàng)變?yōu)?/p>
這是一個(gè)周期為(λzkx/Δo,λzkx/Δo)的周期函數(shù)。插零前后的物面采樣點(diǎn)關(guān)系可表示為
則式(5)也可以表示為
式(7)是周期為(λz/Δo,λz/Δo)的周期函數(shù),周期為式(5)的1/kx和1/ky。因此,插零后積分項(xiàng)的一個(gè)周期內(nèi)有kx×ky個(gè)周期的原積分項(xiàng)。綜上所述,物面插零積分項(xiàng)周期變大,變大部分是原積分項(xiàng)的周期延拓。插零后積分項(xiàng)一個(gè)周期的分布可表示為
如圖2所示,人眼透過全息圖觀察再現(xiàn)像時(shí),只有部分全息圖上衍射的光進(jìn)入人眼。相當(dāng)于進(jìn)行了如下運(yùn)算
式中,(xc,yc)是眼睛對(duì)應(yīng)的全息圖窗口中心,Rect 表示二維矩形窗函數(shù),X、Y分別是窗口x、y方向的寬度。當(dāng)窗口寬度等于積分項(xiàng)周期時(shí),一個(gè)完整的周期信息進(jìn)入人眼。此時(shí)式(9)的逆傅里葉變換就是內(nèi)插公式形式的采樣定理,而全息圖衍射再現(xiàn)就實(shí)現(xiàn)了逆傅里葉變換。這樣,在全息面積分項(xiàng)周期延拓再利用人眼的低通濾波特性實(shí)現(xiàn)物面的插值運(yùn)算,減少了大量冗余計(jì)算并且省去了數(shù)字插值中的數(shù)字低通濾波運(yùn)算。
由上述分析可知,對(duì)于大視角計(jì)算全息圖的積分項(xiàng),在采樣間隔滿足人眼分辨率時(shí),只需計(jì)算其中一個(gè)周期,而其他部分直接周期延拓即可。設(shè)要計(jì)算的全息圖大小為M×N,將已知參量代入約束條件式(4)中計(jì)算出全息面積分項(xiàng)一個(gè)周期的像素?cái)?shù)L×K。此時(shí)x,y方向上積分項(xiàng)的周期數(shù)為和。在傳統(tǒng)算法中,需要根據(jù)計(jì)算的全息圖大小和衍射距離等參量對(duì)物體的分層數(shù)據(jù)進(jìn)行重采樣或補(bǔ)零到與全息圖相同大小,再對(duì)每一層數(shù)據(jù)做菲涅爾衍射計(jì)算求出全息面上的衍射場。此過程中利用FFT 計(jì)算積分項(xiàng)的計(jì)算量為。新算法中用FFT 計(jì)算積分項(xiàng)的計(jì)算量變?yōu)榭梢姡?dāng)需要計(jì)算的全息圖越大(即包含的周期數(shù)越多)時(shí),新算法的計(jì)算速度優(yōu)勢越明顯。通常物體與全息面水平和垂直方向的采樣間隔相同,要求積分區(qū)域必須是正方形。對(duì)于非正方形全息圖,通常通過物面補(bǔ)零到正方形計(jì)算后再裁剪來達(dá)到這一要求。在長寬比大的全息圖計(jì)算時(shí),本算法能夠進(jìn)一步減少冗余計(jì)算量。
用uc(x,y)表示式(1)的系數(shù)(后續(xù)表述中統(tǒng)稱為系數(shù)),即
在計(jì)算某一層物體的衍射場時(shí),z為定值則為常數(shù)。顯然可以對(duì)x、y進(jìn)行變量分離,表示為
式中,A表示常數(shù)。計(jì)算M×N大小的全息圖時(shí)對(duì)整個(gè)全息面計(jì)算uc(x,y)需要進(jìn)行2M×N次三角函數(shù)與4M×N次乘法計(jì)算。式(11)分離變量后,系數(shù)uc(x,y)在全息面上的分布分解成行列相互獨(dú)立的分量ucx和ucy。因此只需要計(jì)算長度分別為1×M和1×N的兩個(gè)向量存儲(chǔ)在內(nèi)存中,將積分項(xiàng)周期性延拓后乘上對(duì)應(yīng)位置處的行、列系數(shù)即可得到全息面上的衍射場復(fù)振幅分布。此時(shí)對(duì)系數(shù)uc(x,y)的計(jì)算變?yōu)?M+N次三角函數(shù)與2(M×N+M+N) +M次乘法計(jì)算。由于三角函數(shù)計(jì)算耗時(shí)較長,采用行列分解后明顯提高了計(jì)算速度。
根據(jù)以上分析,將菲涅爾衍射計(jì)算分為系數(shù)和積分項(xiàng)兩部分。系數(shù)部分采用行、列正交分解再合成計(jì)算;積分項(xiàng)部分采用計(jì)算一個(gè)周期再周期延拓;最后兩部分合成得到全息面上的物光復(fù)振幅分布。快速算法具體流程為:
1)讀入點(diǎn)云數(shù)據(jù),進(jìn)行分層;
2)計(jì)算一層物體在全息面上積分項(xiàng)的一個(gè)周期,將求得的積分項(xiàng)存入內(nèi)存;
3)根據(jù)最終要計(jì)算的全息圖大小計(jì)算該層數(shù)據(jù)對(duì)應(yīng)系數(shù)行、列分量存入內(nèi)存;
4)將該層的積分項(xiàng)周期延拓,根據(jù)對(duì)應(yīng)位置的行號(hào)列號(hào)獲取系數(shù)分量相乘得到完整系數(shù),再將系數(shù)與積分項(xiàng)相乘得到該位置的物光復(fù)振幅,并與前一次計(jì)算好的復(fù)振幅疊加;
5)重復(fù)步驟2)~4)直到所有層計(jì)算完成;
6)將疊加后的復(fù)振幅與參考光干涉,經(jīng)編碼得到全息圖。
為驗(yàn)證提出算法的正確性并分析計(jì)算速度提高情況,設(shè)計(jì)了程序進(jìn)行實(shí)驗(yàn)。對(duì)比了新算法與傳統(tǒng)層析法在再現(xiàn)像清晰度、視差效果、深度再現(xiàn)效果的差異;研究了不同全息圖尺寸下,計(jì)算速度的提高情況。如圖3所示,實(shí)驗(yàn)所選用的三維模型點(diǎn)云數(shù)據(jù)是由斯坦福大學(xué)三維點(diǎn)云數(shù)據(jù)庫提供,模型包含35 947 個(gè)物點(diǎn)。實(shí)驗(yàn)中物體在x、y、z三個(gè)方向上的實(shí)際尺寸分別設(shè)置為46.8 mm、46.4 mm、36.3 mm。將點(diǎn)云數(shù)據(jù)分為40層,為了更好地觀察視差效果,在第41 層處放置了棋盤格。中心層到全息面的距離為310 mm。實(shí)驗(yàn)中全息圖計(jì)算采用Matlab 編程實(shí)現(xiàn),在PC 機(jī)(CUP:Intel(R)Core(TM)i7-10700K@3.80GHz,內(nèi)存:16GB)上運(yùn)行。
圖3 三維物體模型Fig.3 Model of three-dimensional object
為觀察采用本算法所制作全息圖的再現(xiàn)效果,計(jì)算了像素?cái)?shù)為54 179×399 087 的全息圖。之后用自行研制的全息打印機(jī)將全息圖輸出到光刻膠版上。打印機(jī)的分辨率為318 nm。物空間內(nèi)有效樣點(diǎn)數(shù)為520點(diǎn)×515 點(diǎn)×41 層。物體的采樣間隔為0.09 mm,積分項(xiàng)一個(gè)周期的采樣點(diǎn)數(shù)為4927×4927。將打印好的全息圖放在如圖4所示的再現(xiàn)光路中觀察再現(xiàn)像,光源選擇波長為473 nm 的激光,通過擴(kuò)束和濾波后得到球面波照射到全息圖上。拍攝實(shí)驗(yàn)結(jié)果所用相機(jī)為華為榮耀20 手機(jī)所搭載的相機(jī)。
圖4 再現(xiàn)光路圖Fig.4 The diagram of optical setup for reconstruction
圖5(a)為全息圖的局部,圖5(b)和(c)分別為傳統(tǒng)算法與快速算法的再現(xiàn)效果,未觀察到二者的差異。圖6 為相機(jī)在三個(gè)不同視角下拍攝到的再現(xiàn)像。紅色框標(biāo)示區(qū)域中,物體與棋盤格之間的遮擋關(guān)系正確。當(dāng)多角度連續(xù)拍攝或人眼直接平移觀察時(shí)可以看到連續(xù)的視差變化。
圖5 部分全息圖及兩種算法的再現(xiàn)結(jié)果Fig.5 Partial hologram and reconstruction results of two algorithms
圖6 不同視角下的再現(xiàn)像Fig.6 Reconstructed image from different viewing-angle
觀察不同深度的再現(xiàn)像時(shí),在圖4 光路基礎(chǔ)上在全息圖右側(cè)加入焦距為30 cm 的透鏡,將再現(xiàn)像成像為等大的實(shí)像并用毛玻璃承接。經(jīng)過測量得知加入透鏡后整個(gè)成像系統(tǒng)在實(shí)像位置附近的景深約為14 mm,因此選擇間隔大于景深,且特征較為明顯的兩個(gè)深度進(jìn)行拍攝。圖7 為兩個(gè)不同深度處的再現(xiàn)像。圖中深度為換算成虛像的深度,再現(xiàn)的深度信息準(zhǔn)確。
圖7 不同深度再現(xiàn)像對(duì)比Fig.7 Comparison of the reconstructed image in different depth
用層析法計(jì)算三維物體的全息圖時(shí),再現(xiàn)像的質(zhì)量與數(shù)據(jù)分層間隔大小密切相關(guān)。層間隔滿足人眼分辨率的情況下所觀察到的再現(xiàn)像在各個(gè)視角下都是連續(xù)的,當(dāng)不滿足人眼分辨率時(shí),大角度傾斜觀察容易出現(xiàn)再現(xiàn)像的分層。在其他參數(shù)不變的前提下,將三維物體拉近到距離全息面100 mm 附近計(jì)算、制作全息圖,在右邊大角度傾斜觀察得到如圖8所示結(jié)果。由于觀察距離變小,此位置上人眼分辨率更高,再現(xiàn)像在大視角下觀察出現(xiàn)了明顯的分層。要避免這一現(xiàn)象的出現(xiàn)需要根據(jù)人眼分辨率、物體的三維形貌、觀察視角等選擇合理的層間隔。
圖8 再現(xiàn)像分層現(xiàn)象Fig.8 The slice phenomenon of reconstructed image
為研究快速算法的計(jì)算速度提高情況,選用上述三維數(shù)據(jù)模型在同一PC 機(jī)上用兩種算法計(jì)算其菲涅爾全息圖,取50 次運(yùn)行時(shí)間的平均值。在全息面采樣間隔318 nm 時(shí),積分項(xiàng)一個(gè)周期的采樣點(diǎn)數(shù)為4 927×4 927,當(dāng)周期數(shù)在3 以上后傳統(tǒng)算法計(jì)算過程中會(huì)由于計(jì)算機(jī)物理內(nèi)存不足而需要讀取硬盤,計(jì)算速度會(huì)明顯降低,此時(shí)的計(jì)算速度不具可比性。因此采用較小的積分項(xiàng)周期進(jìn)行計(jì)算,全息面的采樣間隔為4.03 μm(實(shí)驗(yàn)室中SLM 的像素尺寸),物體距離全息面900 mm。根據(jù)1.1 節(jié)所述求出全息面上積分項(xiàng)一個(gè)周期內(nèi)包含的像素?cái)?shù)為1 174×1 174。計(jì)算了九組周期數(shù)從kx=2,ky=2 到kx=10,ky=10 的全息圖。每一組分別采用快速算法周期延拓加系數(shù)行列分解(方法1)、快速算法僅積分項(xiàng)周期延拓(方法2)、及傳統(tǒng)算法(方法3)三種方法計(jì)算,得到如表1所示的結(jié)果。圖9 為不同算法計(jì)算時(shí)間與積分項(xiàng)周期數(shù)關(guān)系曲線。由結(jié)果可見系數(shù)行列分解后的快速算法速度最快,僅周期延拓的快速計(jì)算次之,且均快于傳統(tǒng)算法。整體來看所計(jì)算的全息圖越大時(shí)快速算法的速度優(yōu)勢越明顯,當(dāng)全息圖分辨率達(dá)到11 740×11 740 像素時(shí)計(jì)算速度達(dá)到傳統(tǒng)算法的13 倍。
圖9 計(jì)算時(shí)間與周期數(shù)關(guān)系Fig.9 The relationship between the computing time and number of period
表1 不同算法計(jì)算時(shí)間對(duì)比Table 1 Comparison of computational time of different algorithm
為探究數(shù)據(jù)層數(shù)對(duì)速度提高倍數(shù)的影響,進(jìn)行了層數(shù)從10 到50,以5 層為增量的全息圖計(jì)算速度提高倍數(shù)對(duì)比實(shí)驗(yàn)。每組實(shí)驗(yàn)用兩種算法計(jì)算周期數(shù)從kx=2,ky=2 到kx=8,ky=8 的全息圖以及提速倍數(shù),得到了分層數(shù)對(duì)快速算法的速度提高倍數(shù)無影響的結(jié)論。表2 給出了其中5 組數(shù)據(jù)。
表2 層數(shù)與速度提高倍數(shù)關(guān)系Table 2 Relationship between number of layers and speed increase multiple
由實(shí)驗(yàn)結(jié)果可知,提出的算法在保證良好再現(xiàn)效果的同時(shí)顯著提高了計(jì)算機(jī)制菲涅爾全息圖的計(jì)算速度。在大尺寸全息圖的計(jì)算上有著良好的表現(xiàn)。另外需要說明的是在表1 傳統(tǒng)算法用時(shí)的數(shù)據(jù)中,全息圖像素?cái)?shù)增加到9 392×9 392 后計(jì)算用時(shí)會(huì)發(fā)生激增。這是由于傳統(tǒng)層析法計(jì)算全息圖時(shí)每一層數(shù)據(jù)都要插值或補(bǔ)零到與全息圖相同的像素。計(jì)算量隨著全息圖尺寸的增加而呈平方式的增長,從而導(dǎo)致計(jì)算用時(shí)激增。相比于傳統(tǒng)算法,快速算法在計(jì)算完成每一層在全息面上一個(gè)周期的積分項(xiàng)后,即可通過周期延拓來得到整個(gè)全息面的積分項(xiàng)。計(jì)算量隨著全息圖尺寸增大而平緩增長。
所提算法在計(jì)算完成積分項(xiàng)的一個(gè)周期后,后續(xù)計(jì)算互相獨(dú)立,使得采用并行計(jì)算進(jìn)一步提高全息圖的計(jì)算速度得以實(shí)現(xiàn)。優(yōu)化算法,采用多核CPU 或GPU 并行計(jì)算加速全息圖的制作將是下一步的研究目標(biāo)。
計(jì)算全息數(shù)據(jù)量巨大。本文提出的快速算法,從離散菲涅爾衍射計(jì)算模型出發(fā)分析,考慮人眼分辨率,從系數(shù)和積分項(xiàng)兩方面改進(jìn)。將系數(shù)項(xiàng)行列正交分解再合成;只計(jì)算部分區(qū)域的積分項(xiàng),再周期延拓。該算法所得全息圖再現(xiàn)像質(zhì)量與傳統(tǒng)算法相當(dāng),同時(shí)減少了大量的冗余計(jì)算,計(jì)算速度隨全息圖尺寸的增大而快速提高。