You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV中triangulatePoints函数输出points4D的单位是什么?

OpenCV triangulatePoints() 输出坐标单位问题

在视觉里程计开发中,使用OpenCV的 triangulatePoints() 函数时遇到了输出单位的疑问,函数定义如下:

void cv::triangulatePoints(InputArray   projMatr1,
                           InputArray   projMatr2,
                           InputArray   projPoints1,
                           InputArray   projPoints2,
                           OutputArray  points4D 
                          )

根据OpenCV文档,points4D 是齐次坐标下的4×N重建点数组,且处于世界坐标系,但未明确单位。以下是针对问题的解析:

1. points4D 的单位是什么?

triangulatePoints() 输出的齐次坐标点单位与输入投影矩阵中的平移向量 t 单位完全一致:

  • 若投影矩阵中的 t 是真实世界中的米级平移(比如来自已标定的相机位姿),归一化(除以第四个分量 w)后的3D点坐标单位就是米;
  • 若 t 是视觉里程计中未做尺度恢复的相对平移(仅保留相对比例),重建点的单位就是该相对缩放的任意单位;
  • 若使用归一化内参矩阵(fx=fy=1,对应归一化图像平面),且 t 为米级单位,重建点同样为米级。

2. 「未传入像素尺寸,重建点单位不可能是米」的判断正确吗?

这个判断并不准确,原因如下:

  • 投影矩阵 P = K[R|t] 中的内参 K 包含的 fx、fy 等参数,本身就是由相机物理焦距和像素尺寸预先计算得到的(例如 fx = 物理焦距 / 像素尺寸,最终单位为像素)。
  • 只要投影矩阵中的平移向量 t 携带真实尺度(单位为米),三角化的逆投影过程就会自动还原出与 t 匹配的米级单位3D点,无需额外传入像素尺寸。
  • 只有当 t 本身缺失真实尺度(比如纯视觉里程计中仅通过特征匹配得到的相对位姿)时,重建点才没有真实米级单位,但这是位姿尺度缺失导致的,和是否传入像素尺寸无关。

关于投影矩阵参数的补充

你提到的「投影矩阵主要包含 fx、fy 等参数,不包含像素尺寸」是正确的——像素尺寸是计算内参的前置参数,一旦内参确定并写入投影矩阵,函数就不需要再单独传入像素尺寸。

内容的提问来源于stack exchange,提问作者Milan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:32:08