眼球中心定位跟蹤算法—eyelike

項目介紹

人眼中心定位是一個用於眼部追蹤的算法,它來源於github中eyelike項目,C++語言實現,依賴OpenCV庫。
關於代碼的編譯,作者提供了CMakeLists.txt文件,同時支持Windows,Linux和Mac OS X。
該項目只實現了簡單的2維眼球跟蹤功能,沒有3維信息,也沒有視線跟蹤和估計功能。
作者提供了另一個博客鏈接Simple, accurate eye center tracking in OpenCV,其中有一段演示視頻,可以看到跟蹤效果。
項目主要的算法來源於劍橋大學的一篇文章:《Accurate eye centre localisation by means of gradients》


算法介紹

該項目從網絡攝像頭讀取視頻,進行人臉檢測,再根據檢測到的人臉圖像截取左眼和右眼的ROI區域,最後根據截取到的ROI進行眼球中心檢測與跟蹤。所以算法的主要包含三個部分:人臉檢測,ROI截取,眼球中心定位。

人臉檢測

這裏面用的人臉檢測方法就是OpenCV中集成好的級聯分類器,這是一種非常古老的人臉檢測方法,利用Haar特徵或LBP特徵訓練多個弱分類模型,組成最終的分類器,進行人臉檢測。
OpenCV中提供了多個已經訓練好的模型,考慮到側臉的情況下左右眼將出現遮擋,所以在項目中目前只用到了正面臉檢測。


眼部ROI截取

得到整個人臉圖像後,截取出左右眼部區域的ROI圖像,這個截取過程就是簡單的根據先驗知識,對於如下的一張人臉圖像(注:該圖片來源於互聯網):
這裏寫圖片描述
這裏寫圖片描述
那麼,左右眼的區域大小和位置大概是固定的,整幅圖像的長寬分別爲wIhI 。眼部區域的長寬爲wEhE ,則有:

wE=35100wI

hE=30100hI

對於左右眼ROI圖像左上角像素點位置:

yL=yR=25100hI

xL=13100wI

xR=wIwE13100wI

眼球中心定位

現在截取出了眼部ROI圖像,就到了之前提到的那個論文的方法了,《Accurate eye centre localisation by means of gradients》。其實它用到的方法很好理解,一副圖像,每個像素點都可以計算出梯度,而梯度包含了幅值和方向。對於眼部圖像而言,越是靠近眼球中心的位置,灰度值就越低,就會有更多的梯度方向的連線交於那個點。
這裏寫圖片描述
所以,中心位置的確定,就是在找梯度方向上的直線相交最多的那個點。


補充

除了眼球定位,這個項目還做了眼瞼的定位,是在眼球中心位置與眼部ROI區域確定後,增加了簡單的後處理,我沒有把這個作爲重點。


性能評價

最後,根據梯度方向的眼球定位算法在某些方面還是有可取之處的。它很簡單,非常容易理解,然後沒有使用邊緣之類的紋理特徵,這使得在較低分辨率的圖像和視頻下也能做到定位,因爲即便是分辨率很低,起碼梯度的特徵相比邊緣的特徵,受到的影響更小,算法在這方面的魯棒性很好。但是它畢竟是一種基於紋理特徵的定位算法,這意味着,當眼部圖像的紋理受到外部影響而改變時,算法的定位效果會變得很差。比如我測試的圖像是一款頭戴式設備採集到的,裏面爲了照明增加了光源,光源反射到眼球位置後出現了亮點,而這個亮點的存在改變了眼部原來的紋理特徵。


實驗效果

人臉檢測

這裏寫圖片描述

眼球定位

這裏寫圖片描述

源碼下載

當然可以直接到github地址下載eyelike啦。
同時,我調通了Windows在VS2010版本,依賴OpenCV2.4.11,點擊下載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章