验证相机视角下视线方向正确性及变换矩阵M的计算方法咨询
视线方向计算与Gaze360方法匹配性咨询
任务背景与参数
我正在开展一项计算顾客视线方向以判断其是否看向显示器的任务,相关参数(单位:mm)如下:
- 显示器:黑色矩形,尺寸530×942
- 人物位置:站在距显示器500mm处,眼睛距地面高度1675mm
- 相机位置:位于显示器顶部中心下方50mm处,距地面高度2000mm
- 视线落点:P1(显示器左上角)、P2(显示器右上角)、P3(显示器中心)
- 距离计算:
- 眼睛到P3的距离d=537.04(由$\sqrt{5002+1962}$计算得出)
- 眼睛到P1、P2的距离均为761.89(由$\sqrt{540.432+537.042}$计算得出)
手动计算的坐标与视线向量
以相机为原点建立坐标系,手动计算得到以下坐标:
- 眼睛坐标:
Eye=(0,−325,−596.34) - 显示器上点的坐标:
- P1(左上角):
(−265,−50,0) - P2(右上角):
(265,−50,0) - P3(中心):
(0,−521,0)
- P1(左上角):
由此推导视线向量:
- 眼睛到P1的向量:
P1−Eye=(−265,275,596.34) - 眼睛到P2的向量:
P2−Eye=(265,275,596.34) - 眼睛到P3的向量:
P3−Eye=(0,−196,596.34)
核心咨询问题
- 上述相机视角下的视线方向计算是否符合Gaze360数据集的方法?该方法定义:
3D视线方向gaze_dir = M * (target_pos3d - person_eyes3d),其中M取决于眼睛与相机间的法线方向。 - 若需计算变换矩阵M,具体操作步骤是什么?
问题解答
1. 与Gaze360方法的匹配性
当前计算尚未完全符合Gaze360的定义。Gaze360公式的核心是通过变换矩阵M对原始视线向量(target_pos3d - person_eyes3d)进行空间变换,而你直接使用了相机坐标系下的向量差,未引入M的变换步骤。
Gaze360中的M是用于将视线向量从眼睛局部坐标系转换到相机/世界坐标系的变换矩阵,本质是考虑眼睛自身朝向(法线方向),先将视线向量归一化到以眼睛为中心的局部空间,再转换到目标坐标系。而你当前的向量是相机坐标系下直接计算的点差,跳过了眼睛局部空间的变换环节。
2. 变换矩阵M的计算步骤
变换矩阵M的核心是构建从眼睛局部坐标系到相机坐标系的转换,具体步骤如下:
- 步骤1:定义眼睛局部坐标系
眼睛局部坐标系的三个轴通常定义为:- 法线轴(N):从眼睛指向相机的向量(即
相机位置 - 眼睛位置),归一化后作为Z轴(需匹配Gaze360的坐标系约定) - 向上轴(U):垂直于法线轴的向量,若为单眼场景,可将世界坐标系的Y轴投影到垂直于法线的平面后归一化得到
- 右轴(R):通过法线轴与向上轴的叉乘计算,满足右手定则
- 法线轴(N):从眼睛指向相机的向量(即
- 步骤2:构建旋转矩阵
将眼睛局部坐标系的三个轴作为列向量(或行向量,取决于坐标系的行/列优先约定),构建旋转矩阵R,该矩阵负责将向量从眼睛局部空间转换到相机空间。 - 步骤3:生成变换矩阵M
Gaze360中的M通常是该旋转矩阵的转置(或直接使用旋转矩阵,需严格匹配数据集的坐标系定义),作用是将视线方向从眼睛局部的相对朝向转换为相机坐标系下的全局方向。
简言之,M的作用是消除眼睛自身朝向的干扰,将视线向量标准化到统一空间中,而你当前的计算未完成这一步骤。
内容的提问来源于stack exchange,提问作者bit_scientist
相关产品推荐
相关产品推荐

