王 霞
(福建船政交通職業(yè)學院信息與智慧交通學院,福建 福州 350007)
全景圖像捕獲了用戶的周圍環(huán)境,從而模擬了單點可用的全部信息。諸如Samsung Gear 360的全景相機捕獲全景照片[1],并將其存儲為適合的全景可視化的格式。在全景圖像的幾種可能格式中,等矩形圖像格式被廣泛采用。虛擬現(xiàn)實應(yīng)用程序在使用全景媒體時可提供身臨其境的體驗,并讓用戶感受到被虛擬畫面包圍的感覺。虛擬現(xiàn)實(VR)設(shè)備為每只眼睛的虛擬世界渲染不同的圖像[2]。全景圖像查看器通常將其內(nèi)容呈現(xiàn)在一個球體中,以模仿用戶在現(xiàn)實世界中會感知到的視覺元素的自然放置。但是,需要大量像素才能保持圖片質(zhì)量。對最佳視覺質(zhì)量的研究意味著在給定的一組不同展覽格式中選擇一種,在現(xiàn)有范圍內(nèi)每種畸變度都不同。為了確定適合全景圖像的格式和分辨率,必須考慮要在其中顯示該圖片的設(shè)備,因此必須有一個能夠模擬設(shè)備并比較圖像設(shè)置的工具,以便它能提供最大的顯示效果。因此,提出了一個集成在Unity編輯器中的工具,該工具可以使用不同的設(shè)置自動進行質(zhì)量評估。
提出了一個全面參考的客觀IQA工具來分析基于視口圖像塊的全景圖像。將本方法實現(xiàn)在Unity中作為檢查腳本運行,該腳本模仿最終圖像將如何在目標設(shè)備上呈現(xiàn)??梢詫崿F(xiàn)不同渲染配置的球面圖像的全自動對比。在選擇了等矩形圖像、目標分辨率、視場的度數(shù)、一組觀看方向和一組渲染解決方案之后,根據(jù)全景展示中的近似視口生成了不同的圖像塊,然后使用參考圖像塊根據(jù)客觀指標評估每個圖像塊。為了比較不同的渲染實現(xiàn)方式,考慮到Skybox[3]渲染在游戲和虛擬現(xiàn)實應(yīng)用程序中的廣泛使用,選擇了Skybox渲染作為參考圖像。
球面圖像查看器的標準實現(xiàn)方式是使用法線反轉(zhuǎn)的球面。由于其特性,等角矩形圖像在極點處變形,而立方體貼圖在其角點處變形[4]。將描述基于著色器(shader-based)的實現(xiàn),以在立方體貼圖的可視表示形式中擬合等矩形圖像。
全景圖像涵蓋了用戶的整個視野[5]??紤]到等矩形圖像格式,下面列出了一些映射實現(xiàn):1)利用球體網(wǎng)格在其中渲染全景圖像; 2)利用Skybox在背景上渲染全景圖像; 3)將全景圖像映射到立方網(wǎng)格的UV位置。就由角度方向提供的分辨率和全景圖像的一般失真而言,上述的映射方式都有其優(yōu)點和缺點。
為了將等矩形圖像映射到球面,采用基于緯度/經(jīng)度的標準UV球映射技術(shù)。這意味著需要為一組UV坐標(u,v) 找到一個三維坐標(x,y,z)。
給定n個經(jīng)度值,可以使用以下公式獲得角度大小T:
(1)
考慮一個球體,角位置αi代表第i個經(jīng)度值:
αi=i×T
(2)
角度T的正弦和余弦定義了屬于球體橫截面的球體點的X和Z軸位置。以此方式,假設(shè)半徑為R的球體,則X和Z軸位置可以計算為:
xi=Rsin(αi)
(3)
zi=Rcos(αi)
(4)
在縱向切割中,橫截面的R射線沿球體的高度變化。因此,考慮到總共M個緯度值的角大小K可以計算為:
(5)
第m個緯度值αym可通過以下公式獲得:
αym=m×K
(6)
每個球點的Y軸位置ym可以通過使用以下方法考慮單位半徑來獲得:
ym=cos(αym)
(7)
在緯度m處的橫截面中獲得的半徑Rym定義為:
Rym=sin(αym)
(8)
將公式(8)分別帶入式(3)和(4),根據(jù)經(jīng)度n和緯度m坐標得出球體頂點的位置X和Z,得出:
x(m,n)=sin(αym)×sin(αn)
(9)
z(m,n)=cos(αym)×cos(αn)
(10)
y(m,n)=cos(αym)
(11)
當虛擬相機未光柵化3D元素時,將渲染Skybox。 在光柵化過程中,有必要為屏幕上渲染的每個像素(或片段)標識UV坐標。 Skybox著色器通常利用3D紋理通過稱為tex3D的圖形功能存儲立方體的六個面。將等矩形圖像映射到天空盒涉及在給定歸一化方向的情況下找到UV矢量值。將向量(x,y,z)作為歸一化方向,可以在頂點著色器上使用式(12)。
(12)
因此,將貼圖映射到球體時,將UV坐標投影到3D空間中,而將貼圖映射到Skybox時,則發(fā)生相反的情況:標準化3d空間位置連續(xù)尋找等效的UV坐標。
使用立方體貼圖的第一步是生成一個立方體。但是,Unity生成的標準立方體沒有足夠的頂點來進行精確的UV貼圖。 由于UV映射是正弦/余弦函數(shù),因此會發(fā)生這種情況,而三角形內(nèi)部的柵格化是通過其頂點的線性插值獲得UV值的,從而導致變形。為了獲得更好的結(jié)果,將每個三角形分為四個部分。從10個頂點和12個三角形的立方體中,獲得了4090個頂點/三角形立方體。
當生成每個新頂點時,可以使用公式(11)計算其相應(yīng)的UV坐標。值得注意的是,立方體貼圖視圖等效于天空盒中連續(xù)UV映射方法的離散化,即,它是按每個頂點計算的,而不是 以像素為基礎(chǔ)應(yīng)用。
關(guān)于度量,客觀圖像質(zhì)量評估的目標是開發(fā)一種定量方法,可以確定任何給定圖像的質(zhì)量。 但是,很難找到與目視檢查相匹配并適合各種應(yīng)用需求的單一目標且易于計算的測量。 為了解決這個問題,使用了三種不同的度量標準:均方誤差(MSE),結(jié)構(gòu)相似性指數(shù)(SSIM)和峰值信噪比(PSNR)。MSE最小,SSIM和PSNR最高的圖像被認為具有更好的質(zhì)量。 MSE可以計算為:
(13)
類似地,SSIM假設(shè)圖像中的相鄰像素具有很強的相互依賴性,并且這些依賴性攜帶有關(guān)對象結(jié)構(gòu)的重要信息[11]。SSIM可以計算為:
(14)
峰值信噪比(PSNR)是用于圖像質(zhì)量評估的最常用指標,可以使用MSE進行以下計算:
(15)
所提出工具的體系結(jié)構(gòu)包含兩層:Unity層和Python層。Unity實現(xiàn)涉及Unity編輯器中的C#配置層以生成圖像。此外,python層用于計算每個由Unity生成的圖像的客觀指標。為了進行有效的通信,各層之間的跨層通信通過在Unity編輯器中創(chuàng)建新流程來進行。為了使用戶體驗愉快,開發(fā)人員以自定義統(tǒng)一檢查器的形式開發(fā)了編輯器界面,即使用C#對組件進行自定義的視圖。在此組件中,用戶可以為輸出圖像定義多個首選項。這些首選項包括視角、寬度和高度以及要創(chuàng)建的圖像的方向,要使用的比較指標、以及定義在過程結(jié)束時將生成圖形還是報告的首選項。此外,python層負責評估Unity層生成的圖像對,每個指標的結(jié)果都保存在最后的報告中。
采用Unity 2017.3.1F和python 2.7進行系統(tǒng)實現(xiàn),本系統(tǒng)可以通過unitypackage(來自Unity的標準格式)導入任何Unity項目,以分發(fā)資源和工具。將VR360QualityTool腳本添加到GameObject時,可以定義一個或多個目標方向,如第三部分所述。在本次實驗中,使用了向右方向D0=(1,0,0),向上D1=(0,1,0)和向前D2=(1,0,-1)。
實驗中使用了不同的渲染方法:Skybox、基于球體的著色器(S)、具有插值誤差的立方體貼圖著色器(Ce)和普通立方體貼圖著色器(Cf)。扭曲的立方體貼圖是有意創(chuàng)建的,目的是證明本方法能夠識別此類錯誤。它發(fā)生在UV坐標在0.9到0.1之間的三角形中。該立方體貼圖向相反方向(0.7,0.6 ... 0.1,x)進行插值,并在狹窄的圖像區(qū)域內(nèi)壓縮整個圖像。通過執(zhí)行質(zhì)量評估,將每個圖像與其在參考圖像中的各自方向進行比較,結(jié)果如表1所示。
表1 質(zhì)量評估結(jié)果
普通立方體貼圖著色器Cf渲染方法在所有方向上對所有度量均具有最佳結(jié)果。由于Skybox渲染的UV映射類似于立方體貼圖方法的UV映射,因此它們傾向于針對同一方向生成更多相似的圖像。與此相反,立方體貼圖Ce在方向D0和D1上呈現(xiàn)出非常明顯的失真區(qū)域。因此,兩個方向的MSE值都大大升高。因此,可以得出結(jié)論,在給定合理的參考圖像的情況下,MSE、SSIM和PSNR這三個指標足以識別帶有著色器錯誤的圖像塊。
盡管球形著色器S中不存在渲染錯誤,但立方貼圖Cf仍超過了其度量值。 這是通過基于球體的渲染和基于Skybox的渲染的失真之間的差異來解釋的。等矩形貼圖需要正弦UV貼圖。考慮到球體的頂點具有正弦映射,因此UV坐標在每個三角形內(nèi)線性插值。另一方面,Skybox映射在像素著色器內(nèi)部采用了正弦映射,因此會影響生成的每個像素。但是,對于最終用戶而言,這種差異在感知上并不明顯。最佳渲染候選者將根據(jù)其在每個指標和方向上的表現(xiàn)進行排名。
研究設(shè)計了一種等矩形圖像質(zhì)量評估工具,該工具使用諸如MSE、SSIM和PSNR等客觀指標,以便于在不同的圖像分辨率和制圖解決方案之間進行選擇。工具已集成到Unity編輯器中,Unity是用于虛擬現(xiàn)實應(yīng)用程序的最常用的開發(fā)引擎。該Unity實現(xiàn)通過生成基于視口的圖像補丁來評估已經(jīng)實現(xiàn)的渲染方法的圖像質(zhì)量,以實現(xiàn)等角矩形圖像的可視化。