头部贴片机眼动追踪系统

时间:2017-05-09 10:15:54

标签: c++ opencv camera-calibration eye-tracking

我正在开发一个眼动追踪系统,其中两个摄像头安装在某种眼镜上。有光学镜头,使得屏幕距离眼睛大约420毫米。

从几十个瞳孔样本中,我们计算出两个眼睛模型(每个摄像头一个),位于各自的摄像机坐标系统中。这基于the works here,但经过修改,以便使用某种蛮力方法估计眼睛中心,以最小化模型上的椭圆投影误差,因为它在相机空间中的中心位置。

理论上,相机参数的近似值与Y轴上的镜头是对称的。因此,相对于镜头坐标系,每个相机应位于坐标(大约17.5mm或-17.5,0,3.3)处,在Y轴上旋转大约42.5度。

使用但是,使用这些值,结果中存在偏移。见下文:

enter image description here enter image description here

  • 红点是左眼跟踪器估计的凝视中心,白色是右眼跟踪器,屏幕坐标
  • 屏幕限制用白线表示。
  • 绿线是相机坐标中的注视矢量(投影在2D中用于可视化)
  • 以2D投影的两个相机中心位于眼睛中间(蓝色圆圈)。
  • 瞳孔样本和当前瞳孔由具有匹配颜色的椭圆表示。

x上的偏移量不是常数,这意味着Y上的旋转不精确。并且相机的位置也不精确。为了解决这个问题,我们使用:this进行校准,然后使用this从旋转矩阵中获取旋转参数。

我们在镜头中间添加了一个相机(接近理论上的0,0,0点?),以获得相对于我们镜头中心的相机的外在和内在参数。然而,由于来自不同位置的大约50个棋盘捕获,OpenCV给出的结果似乎不正确。 例如,它为相机提供了一个大约(-14,0,10)的位置,用于平移的镜头坐标和类似于(-2.38,49,-2.83)的旋转角度(以度为单位)。

之前的截图是使用这些参数拍摄的。与opencv值不同,理论上的距离更远,但更有可能到达屏幕边界。

这可能是因为测试相机位于光学元件的前面,而不是后面,我们的真实0,0,0将被定位(我们只是添加了屏幕在Z轴上被感知的距离,其中是420毫米)。 但是,我们无法将相机放入(0,0,0)。

由于系统紧凑(一切都在几平方厘米内捕获),每个度数或毫米都可以大幅改变结果,因此没有相机的精确值,我们有点卡住了。

我们的目标是找到一种准确的方法来获取每个摄像机的外在和内在参数,这样我们就可以计算佩戴眼镜的人眼睛中心的精确位置,而无需其他校准程序。周围(所以没有固定点)

现在,系统足够精确,以便我们可以获得有人在屏幕上看到的位置的全局指示,但是左右相机之间存在差异,但不够精确。欢迎任何可以帮助我们的建议或暗示:)

0 个答案:

没有答案