1

我正在开发一种眼动追踪系统,该系统在某种眼镜上安装了两个摄像头。有光学透镜,以便在距眼睛约 420 毫米处感知屏幕。

从几十个瞳孔样本中,我们计算了两个眼睛模型(每个相机一个),位于它们各自的相机坐标系中。这是基于此处的工作,但进行了修改,以便使用某种蛮力方法找到眼睛中心的估计,以最小化模型上的椭圆投影误差,因为它在相机空间中的中心位置。

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

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

在此处输入图像描述 在此处输入图像描述

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

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

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

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

这可能是因为测试相机在光学元件的前面,而不是后面,我们真正的 0,0,0 所在的位置(我们只是在之后添加了 Z 轴上感知到屏幕的距离,即 420mm) . 但是,我们没有办法将相机放在 (0, 0, 0) 中。

由于系统紧凑(一切都在几厘米 ^ 2 内捕获),每一度或每一毫米都可以极大地改变结果,所以如果没有相机的精确值,我们有点卡住了。

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

目前,该系统足够精确,因此我们可以全局指示某人在屏幕上注视的位置,但是左右摄像头之间存在差异,不够精确。欢迎任何可以帮助我们的建议或提示:)

4

0 回答 0