基于完整视场保留的双目立体校正算法

https://github.com/Lzlsjtu/StereoRectify/blob/main/%E5%9F%BA%E4%BA%8E%E5%AE%8C%E6%95%B4%E8%A7%86%E5%9C%BA%E4%BF%9D%E7%95%99%E7%9A%84%E5%8F%8C%E7%9B%AE%E7%AB%8B%E4%BD%93%E6%A0%A1%E6%AD%A3%E7%AE%97%E6%B3%95.md

摘要

本文提出了一种改进的双目立体校正算法,针对传统OpenCV立体校正函数中存在的自动裁切问题进行了系统优化。传统方法在校正过程中会自动裁剪图像边缘区域,以保证校正后图像的矩形一致性,但会导致原始图像的有效信息丢失。本文通过引入基于边界计算的动态视场调整策略,在保证极线对齐约束的前提下,实现了最大化视场保留。算法包含从坐标系变换、旋转矩阵求解到图像重映射的完整数学推导,并详细分析了各步骤的物理量、单位一致性与几何意义。


1. 引言

1.1 研究背景

双目立体视觉系统利用两台相机从不同视角观测同一场景,以获取三维深度信息。立体校正(Stereo Rectification)是立体匹配前的关键步骤,其主要目的是通过几何变换使左右图像的极线共线且水平对齐,从而将匹配搜索空间从二维简化为一维,显著提高匹配精度与计算效率。

在工业检测、机器人导航及三维重建等应用场景中,校正算法的精度直接影响到后续深度估计的准确性。因此,研究一种能在不裁剪有效成像区域的前提下完成极线约束对齐的校正方法,具有重要的工程与学术价值。

1.2 现有方法的局限性

OpenCV中的cv2.stereoRectify()函数虽然功能完整,但其默认的自动裁剪机制存在如下局限:

  • 视场丢失:公共视场外的图像区域被自动舍弃;
  • 分辨率浪费:部分传感器像素未被利用;
  • 应用受限:在要求保留原始图片边缘信息的高精度任务(如拼接、边缘检测)中不适用。

因此,需要一种可以显式计算视场范围并自适应调整输出尺寸的改进算法。

1.3 本文贡献

本文的主要创新点包括:

  1. 完整视场保留机制:通过角点投影边界计算,自适应调整内参矩阵;
  2. 精确几何建模:推导包含旋转、平移及单位换算的完整数学模型;
  3. 灵活参数调控:引入放大系数与微调角度,实现计算与分辨率的灵活平衡。

2. 数学基础与坐标系定义

在进行立体校正算法推导之前,需要明确双目相机系统中涉及的几种典型坐标系及其之间的几何变换关系。该部分内容构成了整个立体校正的理论基础,其核心是空间点在不同坐标系中的映射关系成像模型的数学描述


2.1 双目相机系统坐标关系

一个标准的双目系统由两台相机组成,分别称为左相机右相机,两者之间通过外参数(旋转矩阵与平移向量)进行空间关联。通常定义以下三个坐标系:

  1. 世界坐标系 W \mathcal{W} W:用于描述真实物理世界中点的位置,是一个全局统一参考坐标系;
  2. 左相机坐标系 C L \mathcal{C}_L CL:以左相机光心为原点,光轴方向为 Z L Z_L ZL 轴;
  3. 右相机坐标系 C R \mathcal{C}_R CR:以右相机光心为原点,光轴方向为 Z R Z_R ZR 轴。

假设一个三维点 X W = [ X W , Y W , Z W ] T \mathbf{X}_W = [X_W, Y_W, Z_W]^T XW=[XW,YW,ZW]T 在世界坐标系中的坐标,通过外参矩阵可以分别转换至左右相机坐标系:

X L = R L ( X W − C L ) , X R = R R ( X W − C R ) \mathbf{X}_L = R_L (\mathbf{X}_W - C_L), \quad \mathbf{X}_R = R_R (\mathbf{X}_W - C_R) XL=RL(XWCL),XR=RR(XWCR)

其中 R L , R R ∈ S O ( 3 ) R_L, R_R \in SO(3) RL,RRSO(3) 表示从世界坐标系到各自相机坐标系的旋转矩阵; C L , C R ∈ R 3 × 1 C_L, C_R \in \mathbb{R}^{3\times1} CL,CRR3×1 为两相机在世界坐标系下的位置向量。

若以左相机坐标系作为系统基准(即 R L = I R_L = I RL=I, C L = 0 C_L = 0 CL=0 ),则两相机之间的相对关系简化为:

X R = R X L + T \mathbf{X}_R = R \mathbf{X}_L + T XR=RXL+T

其中:

  • R = R R R L T R = R_R R_L^T R=RRRLT:右相机相对于左相机的旋转;
  • T = R R ( C L − C R ) T = R_R (C_L - C_R) T=RR(CLCR):右相机相对于左相机的平移;
  • X L , X R \mathbf{X}_L, \mathbf{X}_R XL,XR:点在左右相机坐标系下的三维坐标(单位:m或mm)。

几何上, R R R 描述了右相机坐标系相对于左相机坐标系的姿态变化(即绕三个欧拉角的旋转), T T T 表示两相机光心之间的基线向量。通常 T = [ b , 0 , 0 ] T T = [b, 0, 0]^T T=[b,0,0]T ,其中 b b b 为基线长度。

该变换满足刚体变换性质:

[ X R 1 ] = [ R T 0 1 ] [ X L 1 ] \begin{bmatrix} \mathbf{X}_R \\ 1 \end{bmatrix} = \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} \begin{bmatrix} \mathbf{X}_L \\ 1 \end{bmatrix} [XR1]=[R0T1][XL1]

这也是立体匹配与校正中坐标投影的核心基础。


2.2 针孔相机模型与单位分析

在相机成像模型中,针孔模型(Pinhole Camera Model)是最基本的几何描述。假设空间点 X c = [ X c , Y c , Z c ] T \mathbf{X}_c = [X_c, Y_c, Z_c]^T Xc=[Xc,Yc,Zc]T 在相机坐标系下,其在图像平面上的理想投影点 p = [ u , v ] T \mathbf{p} = [u, v]^T p=[u,v]T 满足透视投影关系:

{ u = f x X c Z c + c x v = f y Y c Z c + c y \begin{cases} u = f_x \dfrac{X_c}{Z_c} + c_x \\ v = f_y \dfrac{Y_c}{Z_c} + c_y \end{cases} u=fxZcXc+cxv=fyZcYc+cy

将其表示为齐次坐标形式:

s [ u v 1 ] = K [ X c Y c Z c ] s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix} s uv1 =K XcYcZc

其中 s = Z c s = Z_c s=Zc 为尺度因子(深度值),内参矩阵 K K K 定义为:

K = [ f x 0 c x 0 f y c y 0 0 1 ] K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K= fx000fy0cxcy1

参数含义:

  • f x , f y f_x, f_y fx,fy:像素焦距(单位:像素),决定了投影的缩放;
  • ( c x , c y ) (c_x, c_y) (cx,cy):主点坐标(单位:像素),对应图像中心或光轴穿透点;
  • 投影模型假设:图像平面垂直于光轴,且相机遵循中心投影模型。

该模型在无畸变条件下描述了理想成像几何关系,而实际成像中需在此基础上叠加径向与切向畸变校正。

物理量与单位一致性:

  • X c \mathbf{X}_c Xc:以米(m)或毫米(mm)为单位;
  • K K K 中的 f x , f y f_x, f_y fx,fy 为像素单位;
  • ( u , v ) (u, v) (u,v) 为像素坐标,单位:pixel;
  • 因此, K K K 实质上完成了物理坐标 → 像素坐标的单位转换。

2.3 像素焦距推导与物理解释

焦距在物理上定义为镜头光心到成像平面的距离,单位为毫米。而数字图像坐标系中的焦距 f x , f y f_x, f_y fx,fy 表示以"像素"为单位的焦距,即物理焦距与像素尺寸的比值。

设:

  • f f f:镜头物理焦距 (mm)
  • W sensor , H sensor W_{\text{sensor}}, H_{\text{sensor}} Wsensor,Hsensor:传感器的物理宽高 (mm)
  • W pixel , H pixel W_{\text{pixel}}, H_{\text{pixel}} Wpixel,Hpixel:图像分辨率(单位:像素)

则单个像素的物理尺寸为:

pixel_size x = W sensor W pixel , pixel_size y = H sensor H pixel \text{pixel\_size}_x = \frac{W_{\text{sensor}}}{W_{\text{pixel}}}, \quad \text{pixel\_size}_y = \frac{H_{\text{sensor}}}{H_{\text{pixel}}} pixel_sizex=WpixelWsensor,pixel_sizey=HpixelHsensor

焦距换算到像素单位为:

f x = f pixel_size x = f ⋅ W pixel W sensor , f y = f ⋅ H pixel H sensor f_x = \frac{f}{\text{pixel\_size}_x} = \frac{f \cdot W_{\text{pixel}}}{W_{\text{sensor}}}, \quad f_y = \frac{f \cdot H_{\text{pixel}}}{H_{\text{sensor}}} fx=pixel_sizexf=WsensorfWpixel,fy=HsensorfHpixel

单位消解分析:

f   [ mm ] ÷ pixel_size   [ mm/pixel ] = [ pixel ] f\,[\text{mm}] \div \text{pixel\_size}\,[\text{mm/pixel}] = [\text{pixel}] f[mm]÷pixel_size[mm/pixel]=[pixel]

即通过物理长度除以每像素的物理尺寸,将焦距单位从毫米转换为像素。

当传感器像素为矩形时, pixel_size x ≠ pixel_size y \text{pixel\_size}_x \ne \text{pixel\_size}_y pixel_sizex=pixel_sizey,因此 f x ≠ f y f_x \ne f_y fx=fy。这种情况常见于非等方传感器或裁剪传感器,例如:

W sensor = 6.4   mm W_{\text{sensor}} = 6.4\,\text{mm} Wsensor=6.4mm, H sensor = 4.8   mm H_{\text{sensor}} = 4.8\,\text{mm} Hsensor=4.8mm, W pixel = 1920 W_{\text{pixel}} = 1920 Wpixel=1920, H pixel = 1200 H_{\text{pixel}} = 1200 Hpixel=1200

则:

pixel_size x = 6.4 1920 = 3.33   μ m , pixel_size y = 4.8 1200 = 4.00   μ m \text{pixel\_size}_x = \frac{6.4}{1920} = 3.33\,\mu\text{m}, \quad \text{pixel\_size}_y = \frac{4.8}{1200} = 4.00\,\mu\text{m} pixel_sizex=19206.4=3.33μm,pixel_sizey=12004.8=4.00μm

因此:

f x = f 3.33   μ m , f y = f 4.00   μ m f_x = \frac{f}{3.33\,\mu\text{m}}, \quad f_y = \frac{f}{4.00\,\mu\text{m}} fx=3.33μmf,fy=4.00μmf

两者存在约 20 % 20\% 20% 的差异,这种不一致在校正与深度估计中若未处理,会造成极线非水平偏移视差尺度误差

进一步说明:

  • 标定过程中得到的 f x , f y f_x, f_y fx,fy 实际上包含了部分镜头畸变补偿;
  • K K K 的数值决定了像素坐标与物理空间坐标之间的比例关系;
  • 在立体校正中,需要使得左右相机的 f x new , f y new f_x^{\text{new}}, f_y^{\text{new}} fxnew,fynew 一致,以消除尺度差异。

总结:

本节系统建立了双目视觉系统的坐标层级关系与成像几何模型,定义了刚体变换、投影矩阵与内参矩阵的物理意义。后续章节将在此基础上进一步推导旋转矩阵的优化设计与内参动态调整策略,从而实现无裁切的完整视场校正。

3. 立体校正的几何约束

在本节中我们从几何与代数两方面展开,既给出理论约束,又说明工程实现时需要关注的数值细节与退化情形。目标是明确为什么要寻找 R 1 , R 2 R_1,R_2 R1,R2、如何构造它们,以及构造过程中需要检测和修正的数值问题。


3.1 极线对齐条件(数学说明)

立体校正的数学目标可表述为:通过左右相机坐标系的旋转 R 1 , R 2 R_1,R_2 R1,R2,把两相机变换到新的参考系,使得两相机的相对旋转在新坐标系下接近单位矩阵、相对平移只剩下沿 X X X 轴的分量。形式化为:

R 2 R R 1 ⊤ = I , R 2 T = [ − T x ,    0 ,    0 ] ⊤ , R_2 R R_1^\top = I, \qquad R_2 T = [-T_x,\;0,\;0]^\top, R2RR1=I,R2T=[Tx,0,0],

其中 T x = ∥ T ∥ T_x = \|T\| Tx=T 是基线长度。等式含义与推论:

  1. 从代数上变形得
    R 2 R = R 1 . R_2 R = R_1. R2R=R1.
    这表明一旦选定 R 2 R_2 R2 R 1 R_1 R1 可以直接由 R 1 = R 2 R R_1 = R_2 R R1=R2R 得到(或反过来)。

  2. 第二个等式 R 2 T = [ − T x , 0 , 0 ] ⊤ R_2 T = [-T_x,0,0]^\top R2T=[Tx,0,0] 指出:校正后平移向量指向新的 − X -X X 方向(约定右相机在左相机右侧),这使得新的基线与图像行方向对齐,同时也意味着和相机坐标系 X X X 轴方向对齐,进而使极点位于无穷远(即极线趋于平行线/水平线)。

  3. 物理意义:当上式成立时,任一对应点对 ( x L , x R ) (\mathbf{x}_L,\mathbf{x}_R) (xL,xR) 在两图像中的对应极线为共线且水平,从而视差变为单一水平方向位移,极大简化立体匹配(从 2D → 1D 搜索)。


3.2 旋转矩阵的构造(详细步骤与数值注意)

构造 R 1 , R 2 R_1,R_2 R1,R2 的思想分两步:先把基线方向旋转到目标方向(基线对齐)——得到 R rect R_{\text{rect}} Rrect;再允许绕基线做小幅度自由旋转以使得相机坐标系 Z Z Z 轴对准物体——得到 R adjust R_{\text{adjust}} Radjust。最后将两相机间相对原始旋转 R R R 考虑进来得到 R 1 , R 2 R_1,R_2 R1,R2

3.2.1 基线对齐(构造 R rect R_{\text{rect}} Rrect 的严格方法)

目标:将单位平移向量
t = T ∥ T ∥ \mathbf{t} = \frac{T}{\|T\|} t=TT
旋转到目标方向
e x = [ − 1 ,    0 ,    0 ] ⊤ . \mathbf{e}_x = [-1,\;0,\;0]^\top. ex=[1,0,0].

(A) 计算旋转轴与角度

k = t × e x , θ = arccos ⁡ ( t ⋅ e x ) . \mathbf{k} = \mathbf{t} \times \mathbf{e}_x, \qquad \theta = \arccos(\mathbf{t}\cdot\mathbf{e}_x). k=t×ex,θ=arccos(tex).

  • ∥ k ∥ \|\mathbf{k}\| k 非常小( t \mathbf{t} t e x \mathbf{e}_x ex 接近平行或反平行),需按退化情形特殊处理(见下文)。
  • 旋转轴单位化:
    k ← k ∥ k ∥ . \mathbf{k} \leftarrow \frac{\mathbf{k}}{\|\mathbf{k}\|}. kkk.

(B) 反对称矩阵表示

定义反对称矩阵(叉乘矩阵):

$
[\mathbf{k}]_\times =
\begin{bmatrix}
0 & -k_z & k_y \
k_z & 0 & -k_x \
-k_y & k_x & 0
\end{bmatrix}.
$

© 罗德里格斯公式(精确构造)

R rect = I + sin ⁡ θ   [ k ] × + ( 1 − cos ⁡ θ )   [ k ] × 2 . R_{\text{rect}} = I + \sin\theta\,[\mathbf{k}]_\times + (1-\cos\theta)\,[\mathbf{k}]_\times^2. Rrect=I+sinθ[k]×+(1cosθ)[k]×2.

此公式等价于矩阵指数形式 R rect = exp ⁡ ( θ [ k ] × ) R_{\text{rect}}=\exp(\theta[\mathbf{k}]_\times) Rrect=exp(θ[k]×),数值稳定且直接给出 S O ( 3 ) SO(3) SO(3) 元素。

(D) 退化情形处理(必须考虑)

  • ∥ k ∥ ≈ 0 \|\mathbf{k}\| \approx 0 k0 t ⋅ e x ≈ 1 \mathbf{t}\cdot\mathbf{e}_x \approx 1 tex1(方向一致),则 θ ≈ 0 \theta\approx 0 θ0,可直接令 R rect = I R_{\text{rect}}=I Rrect=I(无须旋转)。
  • ∥ k ∥ ≈ 0 \|\mathbf{k}\| \approx 0 k0 t ⋅ e x ≈ − 1 \mathbf{t}\cdot\mathbf{e}_x \approx -1 tex1(方向相反, θ ≈ π \theta\approx\pi θπ),旋转轴不唯一,此时需要构造一个 180° 旋转矩阵。方法如下:
    • 任选单位向量 u \mathbf{u} u,使 u ⋅ t = 0 \mathbf{u}\cdot\mathbf{t}=0 ut=0(任选与 t \mathbf{t} t 正交的向量,例如当 t t t 非平行于 [ 0 , 0 , 1 ] [0,0,1] [0,0,1] 时设 u = [ 0 , 0 , 1 ] × t \mathbf{u}=[0,0,1]\times\mathbf{t} u=[0,0,1]×t 并归一化)。
    • R rect = I − 2   u u ⊤ R_{\text{rect}} = I - 2\,\mathbf{u}\mathbf{u}^\top Rrect=I2uu(这等价于绕 u \mathbf{u} u 旋转 π \pi π)。
    • 这种构造保证 det ⁡ ( R rect ) = 1 \det(R_{\text{rect}})=1 det(Rrect)=1 R rect t = e x R_{\text{rect}}\mathbf{t}=\mathbf{e}_x Rrectt=ex(或 − e x -\mathbf{e}_x ex 取决约定)。
  • θ \theta θ 非常小,可用泰勒展开避免数值不稳定:
    R rect ≈ I + θ [ k ] × + 1 2 θ 2 [ k ] × 2 . R_{\text{rect}} \approx I + \theta [\mathbf{k}]_\times + \tfrac{1}{2}\theta^2[\mathbf{k}]_\times^2. RrectI+θ[k]×+21θ2[k]×2.
3.2.2 基线上的自由度:绕基线的微调 R adjust R_{\text{adjust}} Radjust

完成基线对齐后,仍存在绕新基线( X X X 轴)的一维自由旋转,这用于使得相机坐标系 Z Z Z 轴对准物体。用绕 X X X 轴的旋转表示:

R adjust = [ 1 0 0 0 cos ⁡ δ − sin ⁡ δ 0 sin ⁡ δ cos ⁡ δ ] , R_{\text{adjust}} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\delta & -\sin\delta \\ 0 & \sin\delta & \cos\delta \end{bmatrix}, Radjust= 1000cosδsinδ0sinδcosδ ,

其中 δ \delta δ 为小角(可以通过最小化重投影误差或使两个图像的主点行对齐来估计)。 δ \delta δ 的选择影响校正后极线的精确水平度。

3.2.3 组合并得到 R 1 , R 2 R_1,R_2 R1,R2(代数关系与解释)

我们令

R 2 = R adjust   R rect , R 1 = R adjust   R rect   R . R_2 = R_{\text{adjust}}\,R_{\text{rect}}, \qquad R_1 = R_{\text{adjust}}\,R_{\text{rect}}\,R. R2=RadjustRrect,R1=RadjustRrectR.

验证:

R 2 R R 1 ⊤ = ( R adjust R rect )   R   ( R ⊤ R rect ⊤ R adjust ⊤ ) = R adjust R rect R R ⊤ R rect ⊤ R adjust ⊤ = I , R_2 R R_1^\top = (R_{\text{adjust}}R_{\text{rect}})\,R\,(R^\top R_{\text{rect}}^\top R_{\text{adjust}}^\top) = R_{\text{adjust}} R_{\text{rect}} R R^\top R_{\text{rect}}^\top R_{\text{adjust}}^\top = I, R2RR1=(RadjustRrect)R(RRrectRadjust)=RadjustRrectRRRrectRadjust=I,

其中利用 R R ⊤ = R adjust ⊤ R adjust ⊤ = R rect R rect ⊤ = I R R^\top = R_{\text{adjust}}^\top R_{\text{adjust}}^\top = R_{\text{rect}} R_{\text{rect}}^\top = I RR=RadjustRadjust=RrectRrect=I。同时

R 2 T = R adjust R rect T = R adjust (   ∥ T ∥ e x ∗   ) R_2 T = R_{\text{adjust}} R_{\text{rect}} T = R_{\text{adjust}} (\,\|T\| \mathbf{e}_x^\ast\,) R2T=RadjustRrectT=Radjust(Tex)

由构造 R rect R_{\text{rect}} Rrect 可使 R rect T = [ − ∥ T ∥ , 0 , 0 ] ⊤ R_{\text{rect}}T = [-\|T\|,0,0]^\top RrectT=[T,0,0],再由 R adjust R_{\text{adjust}} Radjust 不改变 X X X 轴方向(绕 X X X 轴旋转),故仍满足:

R 2 T = [ − ∥ T ∥ , 0 , 0 ] ⊤ . R_2 T = [-\|T\|, 0, 0]^\top. R2T=[T,0,0].

因此 R 1 , R 2 R_1,R_2 R1,R2 同时满足极线对齐与基线对齐约束。


3.3 数值稳定性与正交性强制(工程细节)

在实际计算中,直接由公式计算得到的矩阵可能因为浮点误差而不完全属于 S O ( 3 ) SO(3) SO(3)。建议使用以下步骤强制正交:

  1. 对候选矩阵 M M M 施行奇异值分解(SVD):
    M = U Σ V ⊤ . M = U \Sigma V^\top. M=UΣV.
  2. 取最近的正交矩阵:
    R = U V ⊤ . R = U V^\top. R=UV.
    det ⁡ ( R ) < 0 \det(R)<0 det(R)<0(反射而非旋转),则将 U U U 的最后一列取反再重构: R = U diag ⁡ ( 1 , 1 , − 1 ) V ⊤ R = U \operatorname{diag}(1,1,-1) V^\top R=Udiag(1,1,1)V,以确保 det ⁡ ( R ) = + 1 \det(R)=+1 det(R)=+1

该处理能将数值误差限制在机器精度量级,同时保持旋转性质。


3.4 与本质矩阵 / 基本矩阵的关系(几句说明)

定义本质矩阵(在已知内参时):

E = [ T ] × R , E = [T]_\times R, E=[T]×R,

其中 [ T ] × [T]_\times [T]× 为关于 T T T 的反对称矩阵。立体校正通过上述变换将 R R R 约化为 I I I,并使平移变为 [ − T x , 0 , 0 ] ⊤ [-T_x,0,0]^\top [Tx,0,0],从而将本质矩阵在新坐标系下形式化简为关于仅含 X X X 分量的反对称矩阵,表明 e p i p o l e epipole epipole 位于无穷远,从而极线为平行线(水平)。这正是我们想要的几何效果。


3.5 算法流程小结(实现步骤)

  1. 估计或输入 R , T R,T R,T(从标定或外参测量得到)。
  2. 构造单位平移向量 t = T / ∥ T ∥ \mathbf{t}=T/\|T\| t=T/∥T
  3. 计算 k , θ \mathbf{k},\theta k,θ;根据是否退化选择罗德里格斯或 180° 构造法得到 R rect R_{\text{rect}} Rrect
  4. 选定或估计微调角 δ \delta δ 得到 R adjust R_{\text{adjust}} Radjust(可通过最小化重投影垂直误差自动优化)。
  5. 形成 R 2 = R adjust R rect R_2 = R_{\text{adjust}}R_{\text{rect}} R2=RadjustRrect R 1 = R 2 R R_1 = R_2 R R1=R2R
  6. 使用 SVD 强制正交性,校验 ∣ R ⊤ R − I ∣ |R^\top R - I| RRI ∣ det ⁡ ( R ) − 1 ∣ |\det(R)-1| det(R)1∣ 指标。
  7. R 1 , R 2 R_1,R_2 R1,R2 应用于角点投影与重映射,计算新的内参与输出尺寸(见第 4、5 节)。

3.6 复杂情况与工程建议

  • 短基线 / 小视差:当 ∥ T ∥ \|T\| T 很小时,视差与深度估计不稳定,但校正仍可执行;注意数值尺度(选择合适的单位 mm 或 m)。
  • 安装误差较大 δ \delta δ 可不止绕 X 轴一项;若需要可扩展为绕多个轴的微调,但会增加自由度与优化复杂性。
  • 畸变严重:在构造旋转之前先进行畸变矫正(或在重映射时同时考虑畸变)可提升角点投影精度。

3.7 小结

本节内容详细说明了在数学上严谨且包含具体数值的处理要点,既保证理论完整性,又兼顾工程实现中的稳定性与鲁棒性。下一节将基于此旋转矩阵构造,详细推导内参自适应调整与角点投影流程。


4. 内参矩阵的自适应调整

在完成立体校正几何约束后,我们已经通过旋转矩阵 R 1 , R 2 R_1, R_2 R1,R2 将左右相机的光轴调整为平行、基线方向沿 X X X 轴。接下来,需要建立新的相机内参矩阵,使两幅图像在新的平行视几何下具备相同的投影尺度、完整的成像范围并尽量避免像素裁剪
整个步骤包括:像素逆投影 → 坐标旋转 → 新内参定义与自适应调整


4.1 像素到归一化视线(逆投影)

对原始图像中任意像素点 ( u , v ) (u,v) (u,v),根据原内参矩阵 K K K 可得到其在相机坐标系下对应的归一化射线方向:

$$
\mathbf{q} = K^{-1}
\begin{bmatrix}
u \ v \ 1
\end{bmatrix}

\begin{bmatrix}
(u - c_x)/f_x \
(v - c_y)/f_y \
1
\end{bmatrix}.
$$

该向量 q \mathbf{q} q 表示穿过像素 ( u , v ) (u,v) (u,v) 的视线方向,其长度未知,仅与深度 Z c Z_c Zc 成比例。因而可表示为:

X c = Z c ⋅ q = Z c [ ( u − c x ) / f x ( v − c y ) / f y 1 ] , \mathbf{X}_c = Z_c \cdot \mathbf{q} = Z_c \begin{bmatrix} (u - c_x)/f_x \\ (v - c_y)/f_y \\ 1 \end{bmatrix}, Xc=Zcq=Zc (ucx)/fx(vcy)/fy1 ,

其中 Z c Z_c Zc 为深度因子。

这一步的意义在于将二维像素位置转化为三维射线方向,为后续旋转操作提供几何基础。


4.2 坐标旋转到校正相机系

将上述三维射线方向 q \mathbf{q} q 旋转到校正后的新相机坐标系下:

q ′ = R i   q , i ∈ { L , R } . \mathbf{q}' = R_i \, \mathbf{q}, \quad i \in \{L, R\}. q=Riq,i{L,R}.

旋转矩阵 R i R_i Ri 由前一节求得,保证校正后的两相机光轴平行、成像平面共面。
这一过程等价于在三维空间中对整个成像平面进行刚体旋转,使左右相机系统在几何上对齐。此时, q ′ \mathbf{q}' q 是相同像素点在校正相机系下的新方向向量。

从成像几何角度来看:

  • 成像平面被旋转至统一方向;
  • 相机坐标系 Z Z Z 轴指向一致;
  • 光轴的平行性确保极线水平化。

经过这一步,左右两幅图像已处于同一几何参考框架,仅需新的投影模型即可生成最终校正图像。


4.3 新内参矩阵的定义与生成原则

在完成坐标旋转后,为了在新的校正相机坐标系下完成一致的投影,需要重新定义相机的内参矩阵,使其既能保证左右图像的几何一致性,又能最大化地保留有效视场。新的相机内参矩阵定义为:

K new = [ f x new 0 c x new 0 f y new c y new 0 0 1 ] . K^{\text{new}} = \begin{bmatrix} f_x^{\text{new}} & 0 & c_x^{\text{new}} \\ 0 & f_y^{\text{new}} & c_y^{\text{new}} \\ 0 & 0 & 1 \end{bmatrix}. Knew= fxnew000fynew0cxnewcynew1 .


4.3.1 焦距统一原则与缩放因子的物理意义

相机的像素焦距与其物理焦距、传感器尺寸及分辨率存在如下关系:

f x = f pixel_size x = f ⋅ W pixel W sensor , f y = f ⋅ H pixel H sensor , f_x = \frac{f}{\text{pixel\_size}_x} = \frac{f \cdot W_{\text{pixel}}}{W_{\text{sensor}}}, \quad f_y = \frac{f \cdot H_{\text{pixel}}}{H_{\text{sensor}}}, fx=pixel_sizexf=WsensorfWpixel,fy=HsensorfHpixel,

其中:

  • f f f 为镜头的真实焦距(单位:mm 或 m);
  • W sensor , H sensor W_{\text{sensor}}, H_{\text{sensor}} Wsensor,Hsensor 为传感器的物理宽高(mm);
  • W pixel , H pixel W_{\text{pixel}}, H_{\text{pixel}} Wpixel,Hpixel 为图像分辨率(像素数);
  • pixel_size x , y \text{pixel\_size}_{x,y} pixel_sizex,y 为单个像素的物理尺寸(mm/像素)。

(1)分辨率变化与焦距变化的关系

根据像素焦距公式:

f x = f pixel_size x = f ⋅ W pixel W sensor , f y = f ⋅ H pixel H sensor , f_x = \frac{f}{\text{pixel\_size}_x} = \frac{f \cdot W_{\text{pixel}}}{W_{\text{sensor}}}, \quad f_y = \frac{f \cdot H_{\text{pixel}}}{H_{\text{sensor}}}, fx=pixel_sizexf=WsensorfWpixel,fy=HsensorfHpixel,

可以看出 f x , f y f_x, f_y fx,fy 同时受到镜头焦距 f f f、传感器物理尺寸以及图像分辨率的共同影响。由此可以得到以下几种情况的物理与几何意义:

  • 当降低分辨率但同时按比例减小 f x , f y f_x, f_y fx,fy 时:

    • 传感器的像素尺寸不变;
    • 像素数量减少(图像分辨率下降);
    • 镜头的真实焦距 f f f 保持不变;
    • 成像比例不变,只是每个像素覆盖的视场区域更大。
      此时图像几何上等价于"采样变稀",但空间尺度保持一致。
  • 当保持 f x , f y f_x, f_y fx,fy 不变但调整分辨率时:

    • 实际镜头焦距 f f f 等效变化;
    • 或者可理解为传感器尺寸变大(像素更密集);
    • 每个像素对应的物理空间长度不变,但整体视场扩大(分辨率增大)或收缩(分辨率减小)。

因此, f x , f y f_x, f_y fx,fy 的调整在几何意义上不仅改变图像放大倍率,同时直接决定了相机成像平面的视场范围(Field of View, FOV)
f x , f y f_x, f_y fx,fy 增大时,等价于焦距增加、视场角减小,图像中物体被"放大";
f x , f y f_x, f_y fx,fy 减小时,等价于焦距减小、视场角增大,图像内容被"缩小"并显示更多场景范围。

这说明内参矩阵的变化实际上反映了从像素级到物理空间的投影比例变换,而不仅仅是简单的图像缩放。


(2)缩放因子的作用与视角变化

为使校正后的左右图像在同一尺度下匹配,引入放大因子 α \alpha α,其本质是在虚拟相机模型中同步调整像素焦距与成像比例:

f x new = f x ( L ) + f x ( R ) 2 ⋅ α , f y new = f y ( L ) + f y ( R ) 2 ⋅ α . f_x^{\text{new}} = \frac{f_x^{(L)} + f_x^{(R)}}{2} \cdot \alpha, \quad f_y^{\text{new}} = \frac{f_y^{(L)} + f_y^{(R)}}{2} \cdot \alpha. fxnew=2fx(L)+fx(R)α,fynew=2fy(L)+fy(R)α.

几何含义如下:

  • α > 1 \alpha > 1 α>1:虚拟焦距增加,等效于放大成像比例,视场角减小,图像中物体"更近、更大";
  • α < 1 \alpha < 1 α<1:虚拟焦距减小,等效于缩小成像比例,视场角扩大,图像中能看到更多场景;
  • α = 1 \alpha = 1 α=1:保持原有视角不变。

可见, α \alpha α 的调整直接决定了校正后虚拟相机的成像视角。当 α \alpha α 较大时,相当于两幅图像都被"放大"到更窄的视野范围内,从而减小黑边但可能丢失部分边缘信息;当 α \alpha α 较小时,图像视野扩大,但黑边区域增加。

这一定义确保:

  1. 校正后两幅图像的投影比例一致;
  2. 像素间的空间角分辨率相同;
  3. 校正结果可直接进行视差匹配与深度计算。

4.3.2 通过角点投影确定不裁剪边界

仅通过调整焦距(或缩放因子)无法保证校正后图像的所有内容都落在可见范围内。由于校正旋转 R 1 , R 2 R_1, R_2 R1,R2 会改变成像平面在三维空间中的方向,使得部分像素的投影可能超出原始视场,因此需要通过角点投影来确定新的有效成像边界。

设左右相机的原始图像尺寸分别为 ( w , h ) (w, h) (w,h),则每幅图像的四个角点为:

( 0 , 0 ) ,   ( w , 0 ) ,   ( 0 , h ) ,   ( w , h ) . (0,0), \ (w,0), \ (0,h), \ (w,h). (0,0), (w,0), (0,h), (w,h).

左右两幅图像共八个角点,分别执行以下操作:

  1. 逆投影到归一化相机平面:
    q i = K − 1 [ u i v i 1 ] = [ ( u i − c x ) / f x ( v i − c y ) / f y 1 ] \mathbf{q}_i = K^{-1} \begin{bmatrix} u_i \\ v_i \\ 1 \end{bmatrix} = \begin{bmatrix} (u_i - c_x)/f_x \\ (v_i - c_y)/f_y \\ 1 \end{bmatrix} qi=K1 uivi1 = (uicx)/fx(vicy)/fy1
  2. 旋转至校正相机坐标系:
    q i ′ = R j q i , j ∈ { 1 , 2 } \mathbf{q}_i' = R_j \mathbf{q}_i, \quad j \in \{1,2\} qi=Rjqi,j{1,2}
  3. 归一化方向坐标:
    ( x i ′ , y i ′ ) = ( q i x ′ q i z ′ , q i y ′ q i z ′ ) (x_i', y_i') = \left(\frac{q'_{ix}}{q'_{iz}}, \frac{q'_{iy}}{q'_{iz}}\right) (xi,yi)=(qizqix,qizqiy)

对所有 8 个角点,取其在旋转后归一化平面上的极值范围:

$
\begin{aligned}
x_{\min} &= \min_i x_i’, \quad x_{\max} = \max_i x_i’, \
y_{\min} &= \min_i y_i’, \quad y_{\max} = \max_i y_i’.
\end{aligned}
$

根据该范围,定义新的图像尺寸与主点位置:

w new = f x new ( x max ⁡ − x min ⁡ ) , h new = f y new ( y max ⁡ − y min ⁡ ) , w^{\text{new}} = f_x^{\text{new}}(x_{\max} - x_{\min}), \quad h^{\text{new}} = f_y^{\text{new}}(y_{\max} - y_{\min}), wnew=fxnew(xmaxxmin),hnew=fynew(ymaxymin),
c x new = − f x new x min ⁡ , c y new = − f y new y min ⁡ . c_x^{\text{new}} = -f_x^{\text{new}} x_{\min}, \quad c_y^{\text{new}} = -f_y^{\text{new}} y_{\min}. cxnew=fxnewxmin,cynew=fynewymin.

这种方式实际上在左右图像旋转后"包络"了所有可能的投影范围,确保:

  • 两幅图像的所有像素都能完整映射入新坐标系;
  • 输出图像的尺寸一致;
  • 左右图像在同一坐标系下几何严格对齐。

总结:

通过上述分析可以看出,内参矩阵的重新定义不仅是参数平均,更是对成像比例、视角范围与投影几何的一次统一调整。缩放因子 α \alpha α 控制校正图像的整体视场大小,而通过双相机角点投影求得的最小包络矩形则确保两幅图像在新的成像平面中既无裁剪又保持统一尺度,为后续的视差匹配提供了严谨、对齐的几何基础。


4.5 黑边问题与改进思路

该基于角点包络确定 K new K^{\text{new}} Knew 的方法虽然能保证图像完整、不裁剪、比例统一,但存在潜在缺陷:

当相机基线过长或视差较大时,角点在旋转后偏移较远,导致输出图像范围过大,出现大面积黑边(空白像素区域)。

黑边不仅降低有效分辨率,也会增加后续立体匹配的计算负担。


4.6 自适应主点调整的改进(未来改进)

为缓解此问题,可在计算出 K new K^{\text{new}} Knew 后引入主点自适应平移机制

c x new → c x new + Δ x , c y new → c y new + Δ y . c_x^{\text{new}} \rightarrow c_x^{\text{new}} + \Delta_x, \quad c_y^{\text{new}} \rightarrow c_y^{\text{new}} + \Delta_y. cxnewcxnew+Δx,cynewcynew+Δy.

通过轻微调整主点位置,使得两幅图像的有效区域更靠近图像中心,从而减小黑边面积。
这种方法有以下优势:

  1. 左右校正图像尺寸保持一致;
  2. 极线严格平行,几何一致性不受影响;
  3. 有效减少无效像素区域;
  4. 提高立体匹配效率与图像利用率。

4.7 总结

本节通过逆投影、旋转与角点投影分析,建立了生成新内参矩阵的完整流程。该方法在保持左右图像几何一致的同时,保证了无裁剪视场。虽存在黑边问题,但提出了未来的改进方向,也即通过自适应主点调整进一步优化,为后续重投影与立体匹配提供稳定的几何基础。

5. 图像重映射与畸变校正

5.1 映射公式

q new = ( K new ) − 1 [ u new v new 1 ] \mathbf{q}_{\text{new}} = (K^{\text{new}})^{-1} \begin{bmatrix} u_{\text{new}} \\ v_{\text{new}} \\ 1 \end{bmatrix} qnew=(Knew)1 unewvnew1

q orig = R i T q new \mathbf{q}_{\text{orig}} = R_i^T \mathbf{q}_{\text{new}} qorig=RiTqnew

畸变模型:

r 2 = q x 2 + q y 2 r^2 = q_{x}^2 + q_{y}^2 r2=qx2+qy2

q dist , x = q x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 q x q y + p 2 ( r 2 + 2 q x 2 ) q dist , y = q y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 q y 2 ) + 2 p 2 q x q y \begin{aligned} q_{\text{dist},x} &= q_x(1 + k_1r^2 + k_2r^4 + k_3r^6) + 2p_1q_xq_y + p_2(r^2 + 2q_x^2) \\ q_{\text{dist},y} &= q_y(1 + k_1r^2 + k_2r^4 + k_3r^6) + p_1(r^2 + 2q_y^2) + 2p_2q_xq_y \end{aligned} qdist,xqdist,y=qx(1+k1r2+k2r4+k3r6)+2p1qxqy+p2(r2+2qx2)=qy(1+k1r2+k2r4+k3r6)+p1(r2+2qy2)+2p2qxqy

投影回原图:

u orig = f x orig q dist , x + c x orig , v orig = f y orig q dist , y + c y orig u_{\text{orig}} = f_x^{\text{orig}} q_{\text{dist},x} + c_x^{\text{orig}}, \quad v_{\text{orig}} = f_y^{\text{orig}} q_{\text{dist},y} + c_y^{\text{orig}} uorig=fxorigqdist,x+cxorig,vorig=fyorigqdist,y+cyorig

5.2 输出尺寸

W new = ⌊ ( x max ⁡ − x min ⁡ ) α ⌋ , H new = ⌊ ( y max ⁡ − y min ⁡ ) α ⌋ W_{\text{new}} = \lfloor (x_{\max}-x_{\min}) \alpha \rfloor, \quad H_{\text{new}} = \lfloor (y_{\max}-y_{\min}) \alpha \rfloor Wnew=⌊(xmaxxmin)α,Hnew=⌊(ymaxymin)α

5.3 像素插值

最近邻:

I new ( u , v ) = I orig ( round ( u orig ) , round ( v orig ) ) I_{\text{new}}(u, v) = I_{\text{orig}}(\text{round}(u_{\text{orig}}), \text{round}(v_{\text{orig}})) Inew(u,v)=Iorig(round(uorig),round(vorig))

双线性:

I new ( u , v ) = ∑ i , j w i j I orig ( ⌊ u orig ⌋ + i , ⌊ v orig ⌋ + j ) I_{\text{new}}(u, v) = \sum_{i,j} w_{ij} I_{\text{orig}}(\lfloor u_{\text{orig}}\rfloor+i, \lfloor v_{\text{orig}}\rfloor+j) Inew(u,v)=i,jwijIorig(⌊uorig+i,vorig+j)


6. 算法关键创新

  1. 完整视场保留:动态边界框计算避免裁切;
  2. 数值稳定性强化:正交性与行列式约束;
  3. 参数可调性:支持 α \alpha α 放大与 δ \delta δ 微调,实现自定义输出分辨率。

7. 结论

本文提出了一种基于边界计算与内参自适应调整的双目立体校正算法,实现了完整视场保留。通过严谨的数学建模和几何分析,该方法在确保极线水平对齐的前提下,最大限度地保留了图像信息,为高精度立体匹配与三维重建提供了可靠基础。


参考文献

  1. Hartley, R., & Zisserman, A. (2003). Multiple View Geometry in Computer Vision. Cambridge University Press.

  2. OpenCV Documentation: Camera Calibration and 3D Reconstruction.

  3. Fusiello, A., Trucco, E., & Verri, A. (2000). A compact algorithm for rectification of stereo pairs. Machine Vision and Applications, 12(1), 16–22.

本文提出了一种改进的双目立体校正算法,针对传统OpenCV立体校正函数中存在的自动裁切问题进行了系统优化。传统方法在校正过程中会自动裁剪图像边缘区域,以保证校正后图像的矩形一致性,但会导致原始图像的有效信息丢失。本文通过引入基于边界计算的动态视场调整策略,在保证极线对齐约束的前提下,实现了最大化视场保留。算法包含从坐标系变换、旋转矩阵求解到图像重映射的完整数学推导,并详细分析了各步骤的物理量、单位一致性与几何意义。


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐