孔令愛,郭晶晶
(1.臨沂市地震臺,山東 臨沂276000;2.信陽學院大數據與人工智能學院,河南 信陽464000)
我國是一個地震多發的國家,面對地震給人民的生民財產帶來的威脅,公眾對于地震知識的需求量越來越大。為了向公眾普及地震知識、樹立地震憂患意識、提高防震減災技能,防震減災科普宣傳工作在全國范圍內廣泛開展,地震科普館相繼在各地出現,公眾可以通過館內的展柜、展板、影視資料等學習地震知識。但是,目前建設的大部分地震科普館多是以講解員講解的方式向公眾普及知識,耗費了大量的人力資源,而且缺乏互動性和趣味性。隨著增強現實技術廣泛應用到各個行業,如工業、醫療、軍事、娛樂、游戲、教育、商業、家具等領域[1],地震工作者開始思考并嘗試將增強現實技術應用于防震減災科普宣傳中。隨著便攜性、智能化移動設備的快速發展,增強現實技術越來越多地應用到移動設備上,移動增強現實應運而生,可以將移動增強現實應用到地震科普館導覽中,公眾借助強大的互聯網功能自行獲取地震科普館中的地震知識,這樣既減少了人力資源的負擔,又能增強公眾與展品之間的互動,提高科教效果。
針對上述方案,研究設計一套應用于Android智能手機上的地震科普館導覽原型系統。該系統借助于室內Wi-Fi 定位技術,利用OpenCV[2]和Eclipse開發工具,通過對實時視頻流中的特定標志物進行檢測識別,實現對智能手機的位姿計算和虛擬信息的融合顯示。系統的基本功能是:當手機攝像頭對準特定標志物時,屏幕會彈出與該標志物對應展柜(或展板)的介紹信息,幫助用戶自行獲取地震知識,取代了講解員的講解過程,具有較好的導覽功能。以此系統對提出的算法進行測試,結果表明,所提方法具有一定的正確性和有效性,達到了預期的研究和應用目標。
原型系統的搭建以Android 系統作為開發平臺,具有Android 系統框架的分層結構。系統的基本框架結構如圖1 所示,主要由用戶層、應用服務層和數據訪問層三部分構成。

圖1 系統基本框架
用戶層由用戶界面和增強現實展示組成,位于系統的頂層,是系統的開端,與用戶進行交互。
應用服務層由Wi-Fi 定位模塊、攝像機模塊、姿態計算模塊、數據存儲模塊、圖像處理模塊和數據處理模塊組成。Wi-Fi 定位模塊獲取用戶的位置信息;攝像機模塊實現系統的拍攝功能,獲取視頻圖像;姿態計算模塊計算攝像機的位置和方向,實現攝像機的空間定位和虛擬信息的空間定位;數據存儲模塊實現位置信息和標志物信息的存儲;圖像處理模塊實現圖像的灰度化、二值化、去噪和輪廓提取;數據處理模塊實現用戶位置信息與標志物位置信息的算法匹配。
數據訪問層由OpenCV、Wi-Fi 和本地數據庫組成,OpenCV 提供OpenCV for Android 庫函數,為應用服務層的圖像處理模塊提供圖像處理接口函數;Wi-Fi 和本地數據庫分別為應用服務層的Wi-Fi 定位模塊和數據存儲模塊調用。
此款地震科普館導覽系統通過檢測識別復雜場景中的標志物輪廓區域,跟蹤定位攝像機相對于標志物的位置和方向,將虛擬信息疊加到現實中的標志物,實現增強顯示。系統運作的基本流程主要包括標志物檢測識別、攝像機跟蹤定位和虛擬信息注冊三個過程,流程圖如圖2。

圖2 系統基本工作流程
標志物檢測識別:Android 智能手機借助Wi-Fi定位,獲取用戶位置信息,與數據庫中已有的標志物位置信息匹配,識別標志物;根據標志物具有的四邊形特征,結合圖像處理中的相關操作,檢測定位標志物區域。
攝像機跟蹤定位:利用標志物的四個頂點,求解從虛擬空間坐標系到攝像機坐標系的變換矩陣,通過確定坐標系之間的變換關系,計算攝像機位姿。
虛擬信息注冊:通過坐標系之間的變換,確定虛擬信息在成像平面上的位置,實現虛擬信息的注冊,在Android 智能手機上,以圖層疊加的方式,實現虛實融合顯示。
標志物檢測識別的設計思路為:首先用Android系統中的Wi-Fi 定位功能確定用戶與標志物之間的位置關系,識別用戶當前面對的標志物;然后,根據標志物四邊形及其輪廓的特征,將標志物區域從復雜的場景中提取出來,實現標志物的檢測。
此款地震科普館導覽系統應用于室內,由于受室內環境的影響,無法利用GPS 解決一些定位問題。然而隨著Wi-Fi 的普及,在大部分室內公共場所都會有Wi-Fi 覆蓋,所以在設計中采取Wi-Fi 定位方法。系統利用基于位置指紋識別算法的Wi-Fi定位[3],通過“訓練”和“定位”兩個階段的過程,確定用戶位置。標志物識別算法具體的實現步驟為:
在訓練階段,選取合理的參考點,在各個參考點測量不同接入點(AP)的接收信號強度(RSS),將參考點的位置信息和相應的MAC 地址存儲在Android 系統提供的SQLite 數據庫中,建立一個位置指紋識別數據庫。
在定位階段,利用NN 匹配算法,將用戶接收的接入點的RSS 與數據庫中已存儲的數據進行比較,確定用戶的位置。假設用戶接收的RSS 測量值為s=[ss1,ss2,...,ssn](n 代表用戶檢測到的不同AP 數);數據庫存儲的數值為Si= [SS1,SS2,...,SSNi],(i∈[1, NT],NT代表數據庫中的參考點個數;Ni代表第i 個參考點中記錄的不同AP 數)。NN 算法的表達形式[4]為:

將獲取的用戶位置信息與數據庫中已有的特定標志物的位置信息進行比較,識別標志物。
標志物檢測算法的設計思路為:根據標志物具有豐富的邊緣信息、具有矩形輪廓、版面是白底黑字等特點,從復雜的場景中提取標志物輪廓區域,定位標志物輪廓,實現標志物檢測。該算法具體的實現步驟如下:
首先對視頻圖像進行灰度變換與自適應二值化。采用自適應二值化之最大類間方差法(Otsu)[5]對灰度圖像二值化,并對圖像去噪。
然后,提取圖像中的輪廓,設定閾值,排除面積過小的輪廓,篩選出面積較大的輪廓。
對獲取的輪廓進行多邊形近似。由于標志物的輪廓為矩形,所以多邊形的近似結果應該滿足以下條件:只有四個頂點;一定是凸多邊形;每一個邊的長度不能過小。根據這些條件,排除絕大部分輪廓,找到最有可能的標志物輪廓。
最后,對篩選出的多邊形輪廓求取外接矩形,計算輪廓占外接矩形面積的比例,占比最大的確定為標志物矩形區域。標志物檢測定位算法的流程如圖3 所示。

圖3 標志物檢測定位流程圖
利用公式F=0.30R+0.59G+0.11B 對視頻中的每一幀圖像進行灰度化,其中,F、R、G、B 分別表示灰度值、紅色分量、綠色分量和藍色分量。此處采用加權平均值法,能獲得效果較好的灰度圖像。
圖像二值化的作用是把圖像中的目標和背景分離開,對圖像閾值分割[6]。此處采用Otsu 算法對灰度圖像二值化。基本思想是設定一個最佳閾值把圖像分割成目標和背景兩部分,使得目標與背景的類間方差取最大值。Otsu 算法給出的最佳閾值為:

式中的σ2(t)表示目標與背景的類間方差。二值化后需要進行濾波來降低噪聲,在此采用中值濾波對圖像去噪,噪聲抑制效果較好。
圖像二值化后,首先利用函數cvCanny()對二值化圖像邊緣檢測;然后設定閾值,利用函數cvFind Contours()提取符合閾值條件的輪廓,從提取的輪廓中篩選出矩形輪廓;最后,利用函數cvContourArea()計算矩形輪廓的面積,選擇面積最大的矩形輪廓,將標志物區域定位出來,并將定位得到的標志物4 個頂點的坐標值保存下來,為攝像機跟蹤定位提供數據。
當平移或旋轉手機時,人們的視線會隨之改變,那么添加到真實場景中的虛擬信息也應該隨之做相應的改變。跟蹤注冊技術的主要任務就是實時地檢測出攝像機的位置和方向,準確定位虛擬信息在成像平面上的位置,實時地將虛擬信息融合到真實場景的正確位置[7]?;谝苿釉鰪姮F實的地震科普館導覽系統在標志物識別的基礎上,對標志物進行跟蹤注冊,并實現虛擬信息的融合顯示。
本研究選用的攝像機跟蹤定位方法,是根據標志物具有二維平面的結構特征,以標志物的四個頂點進行跟蹤,對傳統的基于六個標志點的跟蹤方法進行了改進。
標志物跟蹤算法的設計思路為:以標志物的四個頂點為標志點,計算世界坐標系OW(XW,YW,ZW),攝像機坐標系OC(XC,YC,ZC)和成像平面坐標系O2(u,v)之間的變換關系,確定攝像機的位姿。算法的具體實現步驟如下:
1) 確定世界坐標系,并將其設定在標志物上。測量標志物的長為5cm,寬為3cm,以標志物的左上頂點為坐標原點,則標志物的4 個頂點的世界坐標為(0,0)、(5,0)、(0,3)、(5,3),如圖4 所示。

圖4 標志物的世界坐標系示意圖
2) 計算標志物4 個頂點的像素坐標,根據標志物輪廓區域的檢測方法,可以獲得4 個頂點坐標。
3) 根據透視投影原理,建立成像平面坐標系與世界坐標系中對應點的關系。
4) 求解出坐標系之間的變換矩陣,確定攝像機的位姿。
在上述第三步驟中,根據透視投影原理,實現標志點從世界坐標系到攝像機坐標系,再到成像平面坐標系的變換,具體的實現過程如下:
設世界坐標系與攝像機坐標系之間的變換表達式為:

上式中,(xc,yc,zc)表示攝像機坐標系中的點坐標,(xw,yw,zw) 表示世界坐標系中的點坐標,V 為旋轉矩陣,M 為平移向量。其中:

此算法的目的即是計算V 和M 中的12 個參數,求解外參矩陣Tcm,確定攝像機的位姿。由(3)式知,世界坐標系中的點到攝像機坐標系中的對應點的變換為:

根據透視投影原理,建立成像平面坐標系中的點與攝像機坐標系中的點的對應關系,如下式所示:

將(4)式帶入(5)式得到:

式中,f 為攝像機的焦距,攝像機標定中已求出,為已知數據。因此(6)式中含有12 個參數,所以需要12個方程,即6 個標志點,才能將所有的參數求解出來。此處根據標志物的二維平面結構,對傳統的6 點跟蹤法進行了改進,提出一種基于四個標志點的標志物跟蹤方法。由圖4 可知,4 個標志點在同一個平面上,所以4 個點的絕對坐標可以設為(xw, yw,0);又由于t3只是各參數的比例因子,所以可以設t3=1。因此(6)式可以簡化為:

式中只含有8 個參數,所以可通過4 個標志點將8個參數r31,r32,r11,r12,r21,r22,t1,t2求出。再根據V 具有正交規范化矩陣的性質,即VTV=1,求解另外三個參數r13,r23,r33,其中:

通過攝像機標定,求解出了內參矩陣P;通過攝像機的位姿計算,求解出了旋轉矩陣V 和平移向量M,即外參矩陣Tcm。至此,便實現了基于標志物識別的攝像機跟蹤定位。
虛擬信息的注冊是將虛擬信息與目標場景進行配準,確定虛擬信息在成像平面中的位置[8]。Android系統提供了大量功能豐富的UI(User Interface)組件,利用Android 系統中界面布局與組件之間的邏輯關系,通過圖層疊加的方式,實現虛擬信息與真實場景的虛實融合顯示。虛擬信息注冊的設計思路為:根據攝像機跟蹤定位過程中獲得的坐標系之間的變換關系,將虛擬坐標系中的虛擬信息投影變換到成像平面坐標系。
如圖5 所示為虛擬信息投影到成像平面中的坐標變換圖。圖中,OC(XC,YC,ZC)表示攝像機坐標系,O2(u,v) 表示成像平面坐標系。M 表示虛擬坐標系中一點變換到攝像機坐標系中的對應點。d 表示攝像機中心到成像平面的距離,即攝像機的焦距f。虛擬信息的注冊就是計算出點M 在O2(u,v)坐標系中的投影點m 的坐標。

圖5 虛擬信息投影坐標變換
虛擬信息注冊的具體實現過程為:
首先將虛擬坐標系中的點變換到攝像機坐標系中的對應點,如下式:

設點M 在OC(XC,YC,ZC)中的坐標為(x0,y0,z0),點m在O2(u,v)中的坐標為(u0,v0)。由圖5 知,a1和a2是點M 在攝像機坐標系OC(XC,YC,ZC)上的正投影,它們在成像平面上的投影點分別為b1和b2,根據三角形 相 似 關 系△OcO2b1∽△Oca3a1,△OcO2b2∽△Oca3a2,有:

由(9)式可以得到:

通過以上步驟,計算出了虛擬信息在成像平面中的顯示位置,即(u0,v0)。至此,便完成了基于標志物識別的虛擬信息注冊。
設計搭建的原型系統在Android 操作系統上運行驗證,結合Wi-Fi 定位技術,在標志物識別的基礎上,進行跟蹤注冊與虛實融合顯示。軟件平臺的搭建,既需要Android 開發環境,也需要開源的圖像處理庫OpenCV。在Android 系統上調用OpenCV 庫函數,需要搭建NDK 編譯環境。
Android 開發環境:Android 程序開發采用Java編程語言,需要安裝配置JDK(Java Development Kit)、Android SDK、ADT(Android Development Tools)和Eclipse。
NDK 編譯環境:在Android 程序開發中,NDK 用來編譯C/C++代碼,在Java 層和Native 層之間進行數據通信。通過調用Java 的JNI(Java Native Interface,Java 本地接口)機制,NDK 將相應的C/C++函數編譯成so 庫文件,供Java 的應用層程序調用,實現Java的本地程序開發(Native development)。
由于系統還處于實驗和測試階段,所以暫時選擇某地震局室內的展板作為測試對象。測試效果如圖6。圖6(a)為用戶界面;為了能夠快速準確地檢測識別標志物區域,系統中增加了聚焦功能,當用戶觸碰標志物處的屏幕時,交互界面會出現一個光點,如圖6(b)所示。圖7 為系統運行結果,從圖中可以看出當手機攝像頭對準標志物時,在地震科普館的展板上會出現與其對應的地震知識,當手機在不同位置時,虛擬信息會顯示在標志物的不同位置。

圖6 用戶交互界面測試效果

圖7 系統運行結果
由測試結果可知,對于不同角度拍攝的標志物,虛擬信息會根據攝像頭的角度顯示在標志物的不同位置。該系統通過對特定標志物疊加信息,增強了地震科普館中展柜(或展板)的可視化效果,增加了用戶獲取地震知識的趣味性,基本實現了地震科普館的導覽功能,具有較好的實用性。
快速發展的現代科技為地震工作者不斷提供新的研究課題。將移動增強現實技術應用于地震科普館導覽中,能增強公眾與展品之間的互動,激發公眾獲取地震知識的興趣,這是防震減災科普宣傳工作的一種嘗試和創新,對切實推進新時代防震減災科普宣傳工作發展具有重大意義。所設計的導覽系統能夠實現標志物的檢測識別算法和三維注冊算法。對于系統中仍然存在的不足,例如:本文只是以文本信息的形式對真實場景進行增強顯示,未對圖形、三維模型等虛擬信息進行研究;只是針對特定標志物進行導覽,未對整個科普館的環境進行導覽等,有待于今后的研究中加以完善,設計出更加形象具體的地震科普館導覽原型系統。