曹師好,閆立兵,秦貝貝,張寶尚,趙歆波,
(1.西北工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,西安 710129;2.陸裝駐洛陽地區(qū)航空軍事代表室,洛陽 471009;3.光電控制技術(shù)重點(diǎn)實(shí)驗(yàn)室,洛陽 471009)
頭戴式視線跟蹤系統(tǒng)近年來已經(jīng)成為市場(chǎng)研究、心理學(xué)研究[1]、人機(jī)交互[2-3]、智能教育[4]等領(lǐng)域被廣泛使用的研究工具。最近,視線跟蹤也被應(yīng)用于虛擬現(xiàn)實(shí)和增強(qiáng)現(xiàn)實(shí)設(shè)備,用于控制[5]和全景渲染[6]。目前,市面上的頭戴式眼動(dòng)儀價(jià)格昂貴(例如,Tobii和Google Glasses)。因此,設(shè)計(jì)一套硬件結(jié)構(gòu)簡(jiǎn)單、成本低的頭戴式眼動(dòng)跟蹤系統(tǒng)對(duì)相關(guān)領(lǐng)域的研究有著很大意義。
當(dāng)前,頭戴式視線跟蹤系統(tǒng)的方法可以分為二維和三維。二維的方法相對(duì)三維的方法在硬件結(jié)構(gòu)要簡(jiǎn)單一些。二維的方法是將二維的眼動(dòng)特征作為輸入構(gòu)建映射模型來獲取人眼注視點(diǎn)位置,文獻(xiàn)[7-8]利用一個(gè)相機(jī)和一個(gè)紅外光源獲取瞳孔中心和光斑形成瞳孔-角膜向量,通過多項(xiàng)式擬合來獲取注視位置。該方法具有較好的準(zhǔn)確性且硬件結(jié)構(gòu)相對(duì)簡(jiǎn)單,因此成為頭戴式的視線跟蹤系統(tǒng)中最常見的方法。但這種方法在非標(biāo)定點(diǎn)的精度并不理想。Arar等[9]利用固定的五個(gè)紅外燈提取瞳孔中心以及四個(gè)光斑,根據(jù)幾何學(xué)上的交比不變性原理獲得注視點(diǎn)的位置。這種方法為了獲取角膜光斑的反射位置需要較多的紅外光源,使得硬件結(jié)構(gòu)復(fù)雜,實(shí)用性較差。二維方法使用的二維特征并不能充分利用視線變換的信息,因此在非標(biāo)定點(diǎn)精度較差。
與二維方法相比,三維方法根據(jù)眼球的結(jié)構(gòu)特點(diǎn),直接獲取視線方向并計(jì)算與場(chǎng)景的交叉以估計(jì)注視點(diǎn)位置。但多數(shù)的三維方法依賴提前校準(zhǔn)的測(cè)量信息:光源位置坐標(biāo)、攝像機(jī)位置坐標(biāo)、屏幕位置坐標(biāo)等信息,對(duì)視線跟蹤系統(tǒng)的使用造成了很大的不便。Shih等[10]利用兩個(gè)相機(jī)和兩個(gè)光源直接計(jì)算人眼光軸方向,避免了系統(tǒng)校準(zhǔn)過程和校準(zhǔn)誤差。但此方法需要對(duì)多個(gè)相機(jī)進(jìn)行標(biāo)定且發(fā)光二極管的位置需預(yù)先設(shè)置。Roma等[11]通過將瞳孔和眼球半徑視為已知量來構(gòu)建三維眼球模型,將眼球中心到瞳孔中心的連線方向視為視線方向,此方法忽略了不同使用者之間的生理差異。滿毅等[12]提出了一種基于雙眼模型的三維視線估計(jì)方法,利用兩個(gè)安裝有紅外燈組的攝像機(jī)組成立體視覺系統(tǒng)來獲取雙眼瞳孔坐標(biāo),并利用左右眼光軸與屏幕交點(diǎn)連線的中點(diǎn)做為注視點(diǎn)。但此方法在相機(jī)距人眼很近時(shí),雙眼數(shù)據(jù)容易丟失,所以在頭戴式系統(tǒng)上的應(yīng)用會(huì)有很大的限制。
綜上所述,對(duì)于頭戴式視線跟蹤系統(tǒng),現(xiàn)有的方法通常是使用瞳孔-角膜向量做插值的二維方法或者是使用三維眼球模型的三維方法。二維方法的問題在于瞳孔-角膜向量作為特征并不能充分利用視線變化的信息,造成在非標(biāo)定上精度較差。三維方法的問題在于它通常需要對(duì)相機(jī)、紅外光源的位置關(guān)系進(jìn)行提前的校準(zhǔn)或者是忽略個(gè)體差異對(duì)眼球進(jìn)行統(tǒng)一建模,硬件結(jié)構(gòu)復(fù)雜且制作成本高。目前還沒有一種頭戴式視線跟蹤方法能在只有一個(gè)眼部相機(jī)且不使用眼球固定參數(shù)的情況下進(jìn)行三維的視線估計(jì)。Swirski等[13]提出了一種單目的三維眼球重建方法,但是他們只是對(duì)仿真環(huán)境中合成的人眼圖像進(jìn)行了模型評(píng)估,從眼部相機(jī)到場(chǎng)景相機(jī)的映射精度的真實(shí)性能并沒有被量化。因此,為了解決現(xiàn)有頭戴式視線跟蹤系統(tǒng)存在的問題,本文提出了一種頭戴式單目無反射光斑的三維視線跟蹤方法。與現(xiàn)有的方法相比,本文方法僅需要一個(gè)眼部相機(jī),不使用眼睛的平均生理參數(shù),且能夠提高在非標(biāo)點(diǎn)的精度。
本文的貢獻(xiàn)主要有以下三個(gè)方面。首先,在分析Swirski[13]眼球模型的基礎(chǔ)上,提出了一種計(jì)算眼球中心位置的優(yōu)化算法;其次,優(yōu)化眼球半徑的算法并建立三維眼球模型,在此基礎(chǔ)上重新計(jì)算瞳孔位置獲取三維視線方向。最后,本文設(shè)計(jì)一套低成本、硬件結(jié)構(gòu)簡(jiǎn)單的頭戴式眼動(dòng)跟蹤系統(tǒng),為相關(guān)領(lǐng)域的研究提供了很大便利。
Swirski等[13]提出的模型基于兩個(gè)假設(shè):①二維眼睛圖像中的瞳孔橢圓輪廓是三維瞳孔圓P的透視投影,該圓形瞳孔中心與固定半徑R的眼球相切;②眼球中心隨著時(shí)間的推移相對(duì)相機(jī)是靜止的。在他們的模型中,注視方向隨著三維瞳孔圓P在眼球表面的運(yùn)動(dòng)而變化。在每一個(gè)時(shí)間點(diǎn),眼球模型的狀態(tài)由眼球中心c和三維瞳孔圓P來決定。
通過眼部相機(jī)在一段時(shí)間內(nèi)收集到一組眼部圖像,通過瞳孔檢測(cè)算法[14]可以從每一張眼部圖像中提取出瞳孔輪廓。Swirski等[13]通過迭代優(yōu)化算法估計(jì)出眼球中心c和一組三維瞳孔Pi的參數(shù)(如位置和半徑)。需要注意的是這種方法假設(shè)眼球中心在采集眼部圖像時(shí)相對(duì)于眼部相機(jī)是靜止的。
(1)
Swirski的模型在仿真環(huán)境下的合成圖像上提取瞳孔輪廓邊緣,然后根據(jù)這些邊緣擬合的橢圓逆投影得到三維空間圓,并在此基礎(chǔ)上估計(jì)眼球中心以及眼球半徑,最后得到三維視線方向。該方法的局限性在于只在合成圖像序列上進(jìn)行了眼球模型的擬合,而實(shí)時(shí)視頻中情況相比合成圖像會(huì)更復(fù)雜。
在眼部相機(jī)拍攝的視頻幀上進(jìn)行瞳孔檢測(cè)與在合成圖像上進(jìn)行瞳孔檢測(cè)有以下兩點(diǎn)區(qū)別。第一,合成圖像上的瞳孔邊緣都是清晰的,但在眼部相機(jī)的視頻中,可能會(huì)出現(xiàn)運(yùn)動(dòng)模糊等現(xiàn)象。第二,合成圖像的瞳孔的輪廓是完整的,此時(shí)擬合的橢圓的精確度要高。而眼部相機(jī)拍攝的視頻幀,可能會(huì)遇到眨眼、睫毛遮擋或者眼球轉(zhuǎn)動(dòng)角度過大等情況。在這種情況下,瞳孔輪廓可能會(huì)被部分遮擋甚至完全遮擋,從而導(dǎo)致在視頻幀上擬合的橢圓與瞳孔輪廓的誤差較大。
在Swirski的模型中,為了消除圓的歧義性,通過將法向量投影到圖像空間中,然后使用最小二乘法求解直線簇的交點(diǎn)做為眼球中心在圖像空間中的投影。但此時(shí)是將所有瞳孔的法向量投影直線都計(jì)算在內(nèi),當(dāng)遇到轉(zhuǎn)動(dòng)角度過大或者瞳孔輪廓不完整時(shí),擬合出來的橢圓其法向量在圖像空間的投影與眼球中心理論位置的投影的距離較大,如圖1中的橙線和綠點(diǎn)。因此,本文提出優(yōu)化算法來計(jì)算眼球中心c的位置。
圖1 三維瞳孔圓的凝視向量相交
首先,通過逆投影可以從N個(gè)圖像中計(jì)算得到N條直線,表示為L(zhǎng)N,如式(2)。從中隨機(jī)選取M條直線LM,此時(shí)公式(1)可改寫為(3):
(2)
{M}=random({N})
(3)
(4)
(5)
ni·(pi-c)>0
(6)
(7)
圖2 瞳孔空間位置計(jì)算示意圖
(8)
(9)
(10)
通過圖3可以看出正常情況下,直線o-pi與眼球(c,R)會(huì)有兩個(gè)交點(diǎn),這里選擇最近的交點(diǎn)。
圖3 瞳孔空間位置示意圖
dmin=L-d1
(11)
(12)
以第1節(jié)中眼球模型為基礎(chǔ),綜合考慮頭戴式眼動(dòng)儀的需求。本文構(gòu)建了一套使用單目相機(jī)的眼動(dòng)跟蹤系統(tǒng),通過使用眼部相機(jī)收集眼部圖像,檢測(cè)出瞳孔輪廓的軌跡建立眼球模型。利用眼球模型獲取視線方向,與標(biāo)定點(diǎn)建立映射關(guān)系,得到注視點(diǎn)的位置。系統(tǒng)的算法流程如圖4所示。
圖4 系統(tǒng)算法流程圖
假設(shè)頭戴設(shè)備相對(duì)頭部保持固定,則設(shè)備上的近紅外光源在角膜上形成的反射光斑位置固定,不隨著眼球的轉(zhuǎn)動(dòng)而改變,故瞳孔角膜向量PCCR(Pupil center-corneal reflection)[21]只隨瞳孔中心的變化而改變。然后通過插值公式將眼部相機(jī)圖像中的瞳孔角膜向量(x,y)與場(chǎng)景圖像或者屏幕上的像素點(diǎn)(X,Y)建立映射關(guān)系。
(13)
(14)
(15)
(16)
然后通過多項(xiàng)式建立注視方向角度(α,β)和二維平面坐標(biāo)(X,Y)之間的映射模型。則(13)式可改寫為:
(17)
從式(17)與式(13)的對(duì)比可以看出,本文設(shè)計(jì)的系統(tǒng)與傳統(tǒng)瞳孔-角膜向量法使用的參數(shù)數(shù)量相同。本文提出的系統(tǒng)相對(duì)于瞳孔-角膜向量法,使用三維視線方向的角度去代替瞳孔-角膜向量,以此來提高對(duì)于視線信息變化的利用程度。使用三維到二維的映射模型來避免相機(jī)和頭戴式設(shè)備間的提前標(biāo)定,降低硬件結(jié)構(gòu)的要求。
本次實(shí)驗(yàn)使用實(shí)驗(yàn)室自制的頭戴式眼動(dòng)跟蹤設(shè)備,其中場(chǎng)景相機(jī)、眼部紅外相機(jī)的圖像分辨率都為640×480 pixel,采集幀率為60 FPS。開發(fā)環(huán)境為Qt Creator 4.7+OpenCV 3.0。為了保證實(shí)驗(yàn)結(jié)果的公平性,本次實(shí)驗(yàn)使用相同的頭戴式設(shè)備來測(cè)試PCCR方法和本文所提出方法的實(shí)驗(yàn)結(jié)果。
在本次實(shí)驗(yàn)過程中,我們對(duì)本文方法和PCCR方法分別使用九點(diǎn)標(biāo)定,然后各自注視標(biāo)定點(diǎn)和非標(biāo)定點(diǎn)并收集各自的注視點(diǎn)分布。其中標(biāo)定過程使用的多項(xiàng)式為Cerrolaza等[16]提出的二階多項(xiàng)式:
X=a0+a1x+a2x2+a3y+
a4y2+a5xy
(18)
Y=b0+b1x+b2x2+b3y+
b4y2+b5xy
(19)
在對(duì)本文方法進(jìn)行標(biāo)定前,我們要對(duì)眼球進(jìn)行擬合。首先,要對(duì)眼睛圖像進(jìn)行收集,保持眼動(dòng)儀對(duì)頭部的相對(duì)位置不變,眼球轉(zhuǎn)動(dòng)1~2 s即可收集完畢。然后系統(tǒng)會(huì)利用第1、2節(jié)中的方法對(duì)視線角度進(jìn)行計(jì)算,計(jì)算完成的結(jié)果如圖5所示。
圖5 眼球模型計(jì)算結(jié)果
其中,藍(lán)點(diǎn)是眼球中心,紅點(diǎn)是瞳孔中心,從藍(lán)點(diǎn)開始穿過紅點(diǎn)的綠色直線為視線。得到視線方向之后,根據(jù)公式(16),將方向轉(zhuǎn)換為角度然后進(jìn)行標(biāo)定。
測(cè)試者坐首先坐在屏幕前方0.7 m左右的位置,調(diào)整頭部姿態(tài)保證屏幕上的所有標(biāo)定點(diǎn)都在場(chǎng)景圖像中出現(xiàn),標(biāo)定的過程中保持頭部姿態(tài)固定,依次注視屏幕上的標(biāo)記點(diǎn),同時(shí)記錄注視每個(gè)標(biāo)定點(diǎn)時(shí)視線角度或者瞳孔-角膜向量。標(biāo)定完成后測(cè)試人員注視標(biāo)定靶上的一組點(diǎn),每個(gè)點(diǎn)收集連續(xù)20幀的數(shù)據(jù)作為實(shí)驗(yàn)結(jié)果。剔除眼睛不自主地運(yùn)動(dòng)(如眼球震顫)等因素造成的顯著偏移,本文所提出的方法和傳統(tǒng)的PCCR方法注視標(biāo)定點(diǎn)時(shí)在標(biāo)靶上分布的可視化效果如圖6和圖7所示。
圖6 本文方法注視標(biāo)定點(diǎn)時(shí)結(jié)果分布圖
圖7 PCCR方法注視標(biāo)定點(diǎn)時(shí)結(jié)果分布圖
為了進(jìn)一步對(duì)本文所提出的方法與PCCR方法在非標(biāo)定點(diǎn)的精度進(jìn)行評(píng)估,實(shí)驗(yàn)在標(biāo)靶上固定了16個(gè)不同于標(biāo)定點(diǎn)的測(cè)試點(diǎn)。本文方法和PCCR方法注視測(cè)試點(diǎn)時(shí)的視線分布結(jié)果如圖8和圖9所示。
圖8 本文方法注視測(cè)試點(diǎn)時(shí)結(jié)果分布圖
圖9 PCCR方法注視測(cè)試點(diǎn)時(shí)結(jié)果分布圖
其中,圖6到圖9中的十字代表標(biāo)定靶上的標(biāo)定點(diǎn),點(diǎn)群代表實(shí)驗(yàn)中收集的真實(shí)注視點(diǎn)。在收集到注視點(diǎn)的數(shù)據(jù)后,利用式(25)來計(jì)算角度誤差:
(20)
其中,N為合格的樣本數(shù)量,(xij,yij)為收集的第i個(gè)注視點(diǎn)對(duì)應(yīng)的第j個(gè)數(shù)據(jù)的位置,(Xi,Yi)為第i個(gè)參考注視點(diǎn)的位置。圖10和圖11給出了本文方法和PCCR方法在觀察標(biāo)定點(diǎn)和非標(biāo)定點(diǎn)時(shí)每個(gè)點(diǎn)的角度誤差。
圖10 標(biāo)定點(diǎn)結(jié)果
圖11 測(cè)試點(diǎn)結(jié)果
根據(jù)圖10和圖11的實(shí)驗(yàn)數(shù)據(jù)可以得到,本文方法和PCCR方法在注視標(biāo)定點(diǎn)時(shí)的平均誤差分別為0.56°和0.60°,在注視非標(biāo)定點(diǎn)時(shí)的平均誤差分別為0.63°和0.94°。實(shí)驗(yàn)結(jié)果表明兩種方法在標(biāo)定點(diǎn)的誤差接近,本文方法在非標(biāo)定點(diǎn)上的精度得到了提升。從圖9和圖10可以看出,使用視線角度代替瞳孔-角膜向量作為特征能更充分利用視線變化的信息,整體提高系統(tǒng)的精度特別是在非標(biāo)定點(diǎn)的精度。在僅使用單個(gè)相機(jī)且不使用眼球平均參數(shù)的條件下,本文方法相較于其他三維方法的精度并保持在同一水平。
表1 不同三維方法結(jié)果對(duì)比
根據(jù)瞳孔的運(yùn)動(dòng)軌跡特性,本文提出了一種單相機(jī)的頭戴式三維眼動(dòng)跟蹤系統(tǒng)。通過分析瞳孔運(yùn)動(dòng)軌跡得到三維視線方向,降低了相機(jī)的數(shù)量。通過使用視線方向到場(chǎng)景的映射模型,避免了硬件結(jié)構(gòu)的提前標(biāo)定。而且結(jié)果表明,本文方法在使用相同的硬件設(shè)備時(shí),相對(duì)于PCCR方法在非標(biāo)定點(diǎn)上精度更好。在保證精度的同時(shí),極大的降低了硬件結(jié)構(gòu)的復(fù)雜度。當(dāng)然,方法同樣存在著標(biāo)定過程繁瑣的問題,這是因?yàn)楸疚南胍?yàn)證本文方法相比PCCR方法在非標(biāo)定點(diǎn)上效果更好。在實(shí)際應(yīng)用的過程,可以通過使用Santini等[17]提出的CalibMe方法來簡(jiǎn)化標(biāo)定過程,提高系統(tǒng)的實(shí)用性。