Gaze Estimation笔记——data normalization
??最近在看一些視線檢測(Gaze Estimation)相關的東西,由于之前沒怎么接觸過,所以也算是從頭開始,很多新的東西要學。寫一個系列筆記,把慢慢看懂的東西記錄下來,做個整理,也方便以后回頭查閱的時候能快速撿起來。
??第一篇寫的是基于normalization圖像的工作,包括一系列類似的方法。這類方法的關鍵之處在于對輸入的圖像(face/eye)先進行normalization操作,將不同head pose、 不同距離等一般情況下的圖像轉化到預先定義好的不變的normalization模式下的照片,然后再進行視線檢測的工作。在所謂的normalization模式下,相機的姿態和距離是預先定義好的不能改變的。說白了就是,訓練和測試時人離相機的姿態和距離等是不可控的,那直接采集得到的圖像情況會很復雜,為了解決這些問題之前的方法需要標定相機,保證拍攝出來的人的照片的頭部角度、位置和距離是不動的,只有眼睛在動。換言之,如果有一只無形的手,能夠始終通過平移和旋轉,把相機調整到一個預先定義好的姿態去拍攝人臉圖像,那是最好的了。但是這種物理移動相機的操作是顯然不可能的,normalization的意義在于通過圖像變換的方式模擬相機的物理移動,使得變換后的圖像盡量逼近于相機物理移動后拍攝的圖像。
目錄
- Data Normalization
- 幾個坐標系
- Normalization模式
- Normalization過程
Data Normalization
??這個data normalization是這類方法中最關鍵的一步,需要首先理解清楚,其本質就是一點立體幾何和圖像變換的東西。這類方法最早提出于東京大學的一篇論文,先把論文的題目貼上來《Learning-by-Synthesis for Appearance-based 3D Gaze Estimation》。
??如前所述,我們希望有一只無形的手能夠時刻的調整相機的位置,實際無法做到,則通過圖像變換來近似模擬這個相機的物理移動過程。當然這樣的模擬也是有缺陷的。首先通過已經投影為2d的圖像去還原3d姿態變化后的投影圖像這件事雖然在3d立體幾何上是嚴格準確的,但是和真值還是有誤差。另外這樣的模擬變換方式也需要首先估計出人頭的姿態等數據,估計的準確性也會影響還原的準確性。
??首先給個整體的input-output,比如我們希望通過normalization得到人臉左眼的還原圖像。下圖左側為任意角度和姿態下相機拍攝的人臉照片,下圖右側為通過normalization變換后的左眼圖片,基于此再進行后續的視線檢測,后面會詳細分析normalization過程。
幾個坐標系
??這個問題涉及到幾個坐標系,分別是世界坐標系,相機坐標系和人頭坐標系,各自的含義從名字中就能看出來。其中人頭坐標系的x軸為兩個眼睛的連線且從左眼指向右眼,y軸為人臉平面(這里認為人臉是平的哈)內垂直于x軸方向向下,z軸按右手系確定,坐標系的原點無所謂取哪個點,僅僅多了一個平移的環節。這里認為相機安裝好之后是不動的,因此世界坐標系和相機坐標系是一樣的,簡化為只有相機坐標系和人頭坐標系。所謂拍照,從立體幾何的角度來講就是三維物體沿著相機坐標系zcz_czc?方向在xcx_cxc?和ycy_cyc?所構成平面內的投影。后面的部分對照著下圖進行解釋:
Normalization模式
??一般情況下,相機與人臉的相對位置與姿態是任意的,data normalization的過程就是將任意相對姿態、位置下拍攝的人臉照片轉化到normalization模式下,那么什么是normalization模式呢?normalization模式就是,假設有一只無形的手,能在當前的相機姿態和位置下:
Normalization過程
??按照前面對normalization模式的定義,則可以對任意姿態下相機拍攝的圖像進行normalization,得到normalization模式下的圖像。圖像的變換過程也就是遵循著上面兩部的描述,通過幾何和數學變換算出來即可。假設我們感興趣的點即為右眼的中心,人頭坐標系的原點也是右眼的中心。
其次,為了使得normalization之后的眼睛是水平的(即人頭坐標系的x軸在旋轉后的相機坐標系內的投影也是水平的),需要xh?\vec{x_h}xh??平行于xc′?\vec{x_c'}xc′??與zc′?\vec{z_c'}zc′??構成的平面,或者說將xh?\vec{x_h}xh??平移與zc′?\vec{z_c'}zc′??相交后,xc′?\vec{x_c'}xc′??位于xh?\vec{x_h}xh??與zc′?\vec{z_c'}zc′??構成的平面內。此時,yc′?\vec{y_c'}yc′??垂直于xc′?\vec{x_c'}xc′??與zc′?\vec{z_c'}zc′??構成的平面且滿足右手系,即yc′?\vec{y_c'}yc′??=xh?\vec{x_h}xh??×\times×zc′?\vec{z_c'}zc′??。最后,xc′?\vec{x_c'}xc′??也可以根據右手系求出,xc′?\vec{x_c'}xc′??=yc′?\vec{y_c'}yc′??×\times×zc′?\vec{z_c'}zc′??。這一步對應的坐標系變換矩陣記做R,R=[xc′?∥xc′?∥\frac{\vec{x_c'}}{\left\|\vec{x_c'}\right\|}∥xc′??∥xc′???,yc′?∥yc′?∥\frac{\vec{y_c'}}{\left\|\vec{y_c'}\right\|}∥yc′??∥yc′???,zc′?∥zc′?∥\frac{\vec{z_c'}}{\left\|\vec{z_c'}\right\|}∥zc′??∥zc′???]
后面有時間再寫寫基于normalization data的幾個視線檢測方法吧。
總結
以上是生活随笔為你收集整理的Gaze Estimation笔记——data normalization的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python:C语言扩展
- 下一篇: gcc及其选项详解