云计算百科
云计算领域专业知识百科平台

OPENVINS-源码解读 -- 第 06 篇 · 相机模型与去畸变

· 本篇你将学到

  • 针孔投影 = 相似三角形 + 像素化两步:z=Kzn\\mathbf z=\\mathbf K\\mathbf z_nz=Kzn,其中 fx,fyf_x,f_yfx,fy 是以像素为单位的焦距、cx,cyc_x,c_ycx,cy 是主点(光轴落点);
  • OpenVINS 前端同时存两个测量域:像素 uvs 与归一化 uvs_norm——三角化/初始化用归一化域(第 13 篇),EKF 更新残差在像素域(第 14 篇),本篇讲透「为什么各在各的域」;
  • CamRadtan:径向畸变(透镜球面像差)+ 切向畸变(装配偏心),Brown–Conrady 多项式,去畸变靠 OpenCV 迭代反解(无解析逆);
  • CamEqui:Kannala-Brandt 等距模型 θd=θ(1+k1θ2+⋯+k4θ8)\\theta_d=\\theta(1+k_1\\theta^2+\\cdots+k_4\\theta^8)θd=θ(1+k1θ2++k4θ8),鱼眼大视场专用;它与单位球 bearing 是「同一组射线的两种参数化」;
  • compute_distort_jacobian 给出 ∂hd/∂zn\\partial\\mathbf h_d/\\partial\\mathbf z_nhd/zn∂hd/∂ζ\\partial\\mathbf h_d/\\partial\\boldsymbol\\zetahd/ζ,串起第 14 篇重投影雅可比与第 18 篇在线内参标定。

  • 一、针孔投影:从相似三角形到内参矩阵

    先统一三个术语(贯穿全系列):

    针孔模型(pinhole model):把相机抽象成「过光心的直线投影」——3D 点沿其与光心的连线落在像平面上,忽略透镜聚焦等全部物理细节。OpenVINS 所有相机模型都以它为骨架(源码注释原文:All these models are pinhole cameras,CamBase.h:33-37)。

    内参(intrinsics):相机自身的几何参数(焦距、主点、畸变系数),与相机在哪、朝哪无关,记 ζ\\boldsymbol\\zetaζ

    外参(extrinsics):相机与别的坐标系(IMU/世界)之间的位姿,OpenVINS 记 ICR{}^C_I\\mathbf RICRCpI{}^C\\mathbf p_ICpI(相机-IMU 外参,IMU→相机,详见第 1 篇符号约定;第 11 篇起进入状态)。

    第一步:相似三角形(物理事实:光沿直线传播)。 设路标在相机系下坐标 Cpf=[X,Y,Z]⊤{}^C\\mathbf p_f=[X,Y,Z]^\\topCpf=[X,Y,Z]ZZZ 沿光轴。在光心前方距离 fff(焦距,物理单位 mm)处放一个虚拟像平面(真实像面成倒像,把它对称翻到前方,符号就全为正,几何完全等价)。过光心的投影射线与该平面的交点,按比例 f/Zf/Zf/Z 缩放(相似三角形):

    x′=fXZ,y′=fYZ x\’=f\\frac{X}{Z},\\qquad y\’=f\\frac{Y}{Z} x=fZX,y=fZY

    第二步:物理坐标 → 像素。 像平面坐标的单位是 mm,图像存储的单位是像素,二者差一个比例;且像素 (0,0)(0,0)(0,0) 在图像角落而不在光轴落点。设像素物理边距 sx,sys_x,s_ysx,sy(mm/px),光轴与像平面交点——主点(principal point)——位于像素 (cx,cy)(c_x,c_y)(cx,cy),则

    u=fsx⏟fxXZ+cx,v=fsy⏟fyYZ+cy u=\\underbrace{\\frac{f}{s_x}}_{f_x}\\frac{X}{Z}+c_x,\\qquad v=\\underbrace{\\frac{f}{s_y}}_{f_y}\\frac{Y}{Z}+c_y u=fx

    sxfZX+cx,v=fy

    syfZY+cy

    直觉:fx=f/sxf_x=f/s_xfx=f/sx 是以像素为单位的焦距——小角度下 u−cx≈fxθu-c_x\\approx f_x\\thetaucxfxθ,即「1 弧度张角 ≈ fxf_xfx 个像素」;cx,cyc_x,c_ycx,cy 只是「光轴落在图像第几列/行」。fxf_xfx 大 = 同一物体占更多像素 = 视野窄、放大倍率高。

    写成矩阵形式(齐次坐标,两边同除 ZZZ):

    [uv1]=1Z[fx0cx0fycy001]⏟K[XYZ] \\begin{bmatrix}u\\\\v\\\\1\\end{bmatrix}=\\frac{1}{Z} \\underbrace{\\begin{bmatrix}f_x&0&c_x\\\\0&f_y&c_y\\\\0&0&1\\end{bmatrix}}_{\\mathbf K} \\begin{bmatrix}X\\\\Y\\\\Z\\end{bmatrix}

    uv1

    =Z1K

    fx000fy0cxcy1

    XYZ

    K\\mathbf KK 的线性部分剥掉,剩下的 zn=[xn,yn]⊤=[X/Z, Y/Z]⊤\\mathbf z_n=[x_n,y_n]^\\top=[X/Z,\\ Y/Z]^\\topzn=[xn,yn]=[X/Z, Y/Z] 就是归一化坐标:虚拟像平面 Z=1Z=1Z=1(归一化平面,normalized plane)上的坐标,即「去掉这台相机自己的焦距和主点之后」的纯几何射线方向。于是完整投影链(与第 14 篇的五级链 hph_php

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » OPENVINS-源码解读 -- 第 06 篇 · 相机模型与去畸变
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!