(一种简洁的双目校正算法)A Compact Algorithm for Rectification of Stereo Pairs

Abstract

我们提出了一个针对一般的、无约束的双目配置的线性校正算法。该算法利用原始相机的两个透视投影矩阵计算一对校正矩阵,它非常的简洁(仅22行 MATLAB代码)和可复用。我们的测试报告证明了方法的正确可行性,以及直接使用校正的图像计算3D重建精度的基本不损失。
关键字: 校正,双目,极几何

paper: A Compact Algorithm for Rectification of Stereo Pairs
作者:Andrea Fusiello · Emanuele Trucco · Alessandro Verri

Received: 25 February 1999 / Accepted: 2 March 2000

1 Introduction and motivations

给定一对双目图像,校正确定每个图像平面的变换,以使成对的共轭对极线变为共线并平行于一个像轴(通常是水平轴)。可以将校正后的图像视为是通过旋转原始相机获得的新双目设备得到的。校正的重要性在于它使得计算双目匹配1变得更加容易,因为匹配搜索被约束到了一维空间而不是二维空间。

我们假设双目设备已经标定,也就是,相机的外参(外部参数包括位置和方向)是已知的。这种假设不是严格必要的,但是会带来一种更简单的技术。另一方面,当从稠密的双目中重建3D对象的形状时,在实践中必须进行校准(标定),并且在许多情况下可以通过几种算法来实现2 3

在双目中校正是一个经典的问题,然而,但是,据我们所知,在计算机视觉文献中几乎没有可用的方法。 Ayache 4引入了一种校正算法,其中手工制作了满足多个约束条件的矩阵。这种必要约束与任意约束之间的区别尚不清楚。一些作者认为在限制性假设下进行了校正。 例如,5假设几何形状非常严格(平行于相机参考系的垂直轴)。最近6 7 8引入了一种算法,该算法在给定弱校准的双目设备的情况下执行校正,即仅给出图像之间的点对应关系。

在准备本手稿后出版的最新著作包括9 10 11。其中一些工作还集中在最小化校正图像失真的问题上。 我们没有解决这个问题,部分原因是失真不如弱校准情况严重。

本文提出了一个算法,可校正已标定相机,该相机(一般通用相机)不受几何约束。我们的工作提升并扩展了[1]4 ,我们获得的结果基本相同,但方式更简洁明了。 该算法既简单又详细。 而且,由于缺乏易于重现,易于访问和明确陈述的算法,所以我们已经在网络上提供了代码。

2 Camera model and epipolar geometry

这一节简单回顾了我们需要的透视投影的数学知识,更多细节见12。针孔相机通过其光学中心 C \mathrm{C} C和视网膜平面(或像平面) R \mathscr{R} R进行建模。一个3D点 W \mathrm{W} W投影到图像平面点 M ∈ R \mathrm{M} \in \mathscr{R} MR,它是光心 C \mathrm{C} C W \mathrm{W} W连线与(图)像平面的交点。包含 C \mathrm{C} C且与 R \mathscr{R} R正交的线称为光轴,与 R \mathscr{R} R的交点为主点(principal point)。 C \mathrm{C} C R \mathscr{R} R之间的距离为焦距长度(focal length)。

w = [ x y z ] T \mathbf{w} = [x \quad y \quad z]^T w=[xyz]T是世界坐标系中 W \mathrm{W} W的坐标, m = [ μ ν ] T \mathbf{m} = [\mu \quad \nu]^T m=[μν]T是图像平面中 M \mathrm{M} M的像素坐标。这种从3D坐标到2D坐标的映射称为透视投影,它可用齐次坐标坐标的线性变换表示。让 m ~ = [ μ ν 1 ] T \tilde \mathbf{m} = [\mu \quad \nu \quad 1]^T m~=[μν1]T w ~ = [ x y z ] T \tilde \mathbf{w} = [x \quad y \quad z]^T w~=[xyz]T分别是 M , W \mathrm{M}, \mathrm{W} M,W的齐次坐标,然后透视变换由矩阵 P ~ \tilde \mathbf{P} P~给出:
λ m ~ = P ~ w ~ (1) \lambda \tilde \mathbf{m} = \tilde \mathbf{P} \tilde \mathbf{w} \tag{1} λm~=P~w~(1)
其中 λ \lambda λ是一个任意的尺度因子。因此相机可通过透视投影矩阵(perspective projection matrix简称PPM) P ~ \tilde \mathbf{P} P~表示, P ~ \tilde \mathbf{P} P~可用QR分解成
P ~ = A [ R ∣ t ] (2) \tilde \mathbf{P} = \mathbf{A}[\mathbf{R} | \mathbf{t}] \tag{2} P~=A[Rt](2)
A A A仅仅依赖内部参数(即相机内参矩阵)由下面的形式
A = [ α μ γ μ 0 0 α ν ν 0 0 0 1 ] \mathbf{A} = \begin{bmatrix} \alpha_\mu & \gamma & \mu_0 \\ 0 & \alpha_\nu & \nu_0 \\ 0 & 0 & 1 \end{bmatrix} A=αμ00γαν0μ0ν01
其中 α μ = − f k μ , α v = − f k ν \alpha_\mu = - f k_\mu, \alpha_v = - fk_\nu αμ=fkμ,αv=fkν分别是水平和垂直方向上的像素焦距长度(f 是焦距长度,单位为毫米, k μ , k ν k_\mu, k_\nu kμ,kν是沿 μ , ν \mu, \nu μ,ν轴每毫米有效的像素数,即单位为pixel/mm)。 ( μ 0 , ν 0 ) (\mu_0, \nu_0) (μ0,ν0)是主点像素坐标,它是光轴与像平面的交点, γ \gamma γ μ − ν \mu-\nu μν非正交的因子。

相机的位置 t \mathbf{t} t和方向 R \mathbf{R} R表示将摄像机参考系带到世界参考系的刚性变换。让我们将PPM重新写作:
P ~ = [ q 1 T q 14 q 2 T q 24 q 3 T q 34 ] = [ Q ∣ q ] \tilde \mathbf{P} = \begin{bmatrix} \mathbf{q}_1^T & q_{14} \\ \mathbf{q}_2^T & q_{24} \\ \mathbf{q}_3^T & q_{34} \\ \end{bmatrix} = [\mathbf{Q} | \mathbf{q}] P~=q1Tq2Tq3Tq14q24q34=[Qq]
在卡氏坐标系中,投影(1)可写为
{ μ = q 1 T w + q 14 q 3 T w + q 34 ν = q 2 T w + q 24 q 3 T w + q 34 (5) \begin{cases} \mu = \frac{ \mathbf{q}_1^T \mathbf{w} + q_{14}}{\mathbf{q}_3^T \mathbf{w} + q_{34}} \\ \\ \nu = \frac{\mathbf{q}_2^T \mathbf{w} + q_{24}}{\mathbf{q}_3^T \mathbf{w} + q_{34}} \end{cases} \tag{5} μ=q3Tw+q34q1Tw+q14ν=q3Tw+q34q2Tw+q24(5)
平行于像平面与过光心 C \mathrm{C} C的平面叫做焦平面, C \mathrm{C} C c \mathbf{c} c坐标在世界坐标系 W \mathrm{W} W可表示为
c = − Q − 1 q (6) \mathbf{c} = - \mathbf{Q}^{-1} \mathbf{q} \tag{6} c=Q1q(6)
备注:设相机坐标系的圆点在世界坐标系中的表示为c, 由透视投影可得 ( 0 , 0 , 0 ) T = [ Q ∣ q ] c ~ (0, 0, 0)^T = [\mathbf{Q} | \mathbf{q}] \mathbf{ \tilde c} (0,0,0)T=[Qq]c~ ,从而推出等式(6))
因此 P ~ \tilde \mathbf{P} P~可重写为:
P ~ = [ Q ∣ − Q c ] = A [ R ∣ − R c ] (7) \tilde \mathbf{P} = [\mathbf{Q} | - \mathbf{Qc}] = \mathbf{A}[\mathbf{R} | \mathbf{-Rc}] \tag{7} P~=[QQc]=A[RRc](7)
与像点M相关的光线是线M C,即3-D点的集合 { w : m ~ = P ~ w ~ } \{\mathbf{w: \tilde m = \tilde P \tilde w} \} {w:m~=P~w~},参数化形式为:
w = c + λ Q − 1 m ~ , λ ∈ R (8) \mathbf{w} = \mathbf{c} + \lambda \mathbf{Q}^{-1} \tilde \mathbf{m}, \quad \lambda \in R \tag{8} w=c+λQ1m~,λR(8)
让我们考虑有两个针孔相机组成的双目设备(如图1)。让 C 1 , C 2 \mathrm{C}_1, \mathrm{C}_2 C1,C2分别是左目和右目相机的光心。将3D点 W \mathrm{W} W投影到两个图像平面上,构成共轭点对对的点 M 1 \mathrm{M}_1 M1 M 2 \mathrm{M}_2 M2。给定左图像平面中的点 M 1 \mathrm{M}_1 M1,将其在右图像中的共轭点约束到 M 1 \mathrm{M}_1 M1对极线线上。因为 M 1 \mathrm{M}_1 M1可能是它所在光线上的任何一点的投影。对极线是 M 1 \mathrm{M}_1 M1的光线经过 C 2 \mathrm{C}_2 C2的投影线。一个像平面中的所有对极线都通过称为“极点”的公共点(分别为 E 1 \mathrm{E}_1 E1 E 2 \mathrm{E}_2 E2),这是另一台相机的光学中心的投影(例如 C 1 \mathrm{C}_1 C1投影点是 E 2 \mathrm{E}_2 E2, C 2 \mathrm{C}_2 C2投影点是 E 1 \mathrm{E}_1 E1)。

对极几何
C 1 \mathrm{C}_1 C1是右相机的焦平面上,右极点在无穷远,在右图像中极线形成一束平行线。一种简单的情况是,俩个极点都在无穷远处,线 C 1 C 2 \mathrm{C}_1 \mathrm{C}_2 C1C2(基线)在两个焦平面上,也就是像平面平行于基线时就会出现该情况,接着,极线在两个图像中形成一束平行线。可以变换任何一对图像,以使对极线在每个图像中平行且水平。 此过程称为校正。

3 Rectification of camera matrices

我们假设立体设备已经标定,透视投影矩阵 P ~ o 1 \tilde \mathbf{P}_{o1} P~o1 P ~ o 2 \tilde \mathbf{P}_{o2} P~o2已知。校正的思想是定义两个新的投影矩阵 P ~ n 1 \tilde \mathbf{P}_{n1} P~n1 P ~ n 2 \tilde \mathbf{P}_{n2} P~n2 P ~ n 1 \tilde \mathbf{P}_{n1} P~n1 P ~ n 2 \tilde \mathbf{P}_{n2} P~n2是通过绕着它们各自的光轴旋转,直到焦平面共面,从而包含基线。这就保证了极点在无穷远,因此极线是平行的。要具有水平极线,基线必须平行于两个相机的新的X轴,另外为了有一个正确的校正,共轭点必须有相同的垂直坐标(即校正后匹配点的新y轴坐标相等),这是通过要求新相机具有相同的内部参数来实现的。注意,校正后焦距相同,像平面也共面,如图2所示
Recified cameras
总结:新透视矩阵的位置(即光心)与校正之前的相机的光心相同,然后新的方向与校正之前不同,它是由校正前的相机经过合适的旋转得到的。两个相机的内参矩阵是相同的。因此,两个新的透视投影矩阵仅在其光学中心不同,可以将它们视为沿其参考系统的X轴平移的单个相机。

让我们根据它们的因式分解来重写新的透视投影矩阵,由(2)(7)由:
P ~ n 1 = A [ R ∣ − R c 1 ] , P ~ n 2 = A [ R ∣ − R c 2 ] (9) \tilde \mathbf{P}_{n1} = \mathbf{A}[\mathbf{R}| -\mathbf{Rc}_1] , \tilde \mathbf{P}_{n2} = \mathbf{A}[\mathbf{R}| -\mathbf{Rc}_2] \tag{9} P~n1=A[RRc1]P~n2=A[RRc2](9)
式(9)两个透视投影矩阵中的 A \mathbf{A} A是相同的,以及可以被任意选择(see MATLAB code),光学中心 c 1 \mathbf{c}_1 c1 c 2 \mathbf{c}_2 c2由旧的光学中心给出,可通过式(6)计算。矩阵 R \mathbf{R} R是相机的姿态(pose),在式(9)中是相同的,通过其行向量可表示为
R = [ r 1 T r 2 T r 3 T ] (10) \mathbf{R} = \begin{bmatrix} \mathbf{r}_1^T \\ \mathbf{r}_2^T \\ \mathbf{r}_3^T \end{bmatrix} \tag{10} R=r1Tr2Tr3T(10)
r 1 T , r 2 T , r 3 T \mathbf{r}_1^T, \mathbf{r}_2^T ,\mathbf{r}_3^T r1T,r2T,r3T分别为相机参考系的X,Y,Z轴在世界坐标系中的表示。
根据之前的讨论,我们有

  1. 新的X轴平行于基线: r 1 = ( c 1 − c 2 ) / ∥ c 1 − c 2 ∥ \mathbf{r}_1 = (\mathbf{c}_1 - \mathbf{c_2})/\Vert \mathbf{c}_1-\mathbf{c}_2 \Vert r1=(c1c2)/c1c2
  2. 新的Y轴正交于X轴和 k \mathbf{k} k r 2 = k × r 1 \mathbf{r}_2 = \mathbf{k} \times \mathbf{r}_1 r2=k×r1
  3. 新的Z轴正交于XY平面: r 3 = r 1 × r 2 \mathbf{r}_3 = \mathbf{r}_1 \times \mathbf{r}_2 r3=r1×r2

在点2, k \mathbf{k} k是一个任意单位向量,它将新Y轴的位置固定在与X正交的平面中,我们将其等于旧左矩阵(校正前矩阵)的Z轴单位向量(即 R o 1 \mathbf{R}_{o1} Ro1的第三行的向量,它是左相机Z轴在世界坐标系下的表示),因此将新的Y轴约束到正交于X轴和校正前的左相机的Z轴。

当光轴平行于基线时,即纯向前运动时,该算法将失败。在13中,我们通过分析形式化了校正要求,并且证明了本节中给出的算法可以满足这些要求。

The rectifying transformation

那就是说,为了校正左图像,我们需要计算 P ~ o 1 = [ Q o 1 ∣ q o 1 ] \tilde \mathbf{P}_{o1} = [\mathbf{Q}_{o1}|\mathbf{q}_{o1}] P~o1=[Qo1qo1] P ~ n 1 = [ Q n 1 ∣ q n 1 ] \tilde \mathbf{P}_{n1} = [\mathbf{Q}_{n1}|\mathbf{q}_{n1}] P~n1=[Qn1qn1]映射变换。我们将看到,寻求的变换是由3×3矩阵 T 1 = Q n 1 Q o 1 − 1 \mathbf{T}_1 = \mathbf{Q}_{n1} \mathbf{Q}^{-1}_{o1} T1=Qn1Qo11给出的共线性变换。对于右图像有 T 2 = Q n 2 Q o 2 − 1 \mathbf{T}_2 = \mathbf{Q}_{n2} \mathbf{Q}^{-1}_{o2} T2=Qn2Qo21

对于任意一个3D点 w \mathbf{w} w我们有
{ m ~ o 1 = P ~ o 1 w ~ m ~ n 1 = P ~ n 1 w ~ (11) \begin{cases} \tilde \mathbf{m}_{o1} = \tilde \mathbf{P}_{o1} \tilde \mathbf{w} \\ \tilde \mathbf{m}_{n1} = \tilde \mathbf{P}_{n1} \tilde \mathbf{w} \\ \end{cases} \tag{11} {m~o1=P~o1w~m~n1=P~n1w~(11)
根据(8)光线的方程式如下(因为校正不会移动光学中心)
{ w = c 1 + λ o Q o 1 − 1 m ~ o 1 w = c 1 + λ n Q n 1 − 1 m ~ n 2 \begin{cases} \mathbf{w} = \mathbf{c}_1 + \lambda_o \mathbf{Q}_{o1}^{-1} \tilde \mathbf{m}_{o1} \\ \mathbf{w} = \mathbf{c}_1 + \lambda_n \mathbf{Q}_{n1}^{-1} \tilde \mathbf{m}_{n2} \end{cases} {w=c1+λoQo11m~o1w=c1+λnQn11m~n2
因此
{ m ~ n 1 = λ Q n 1 Q o 1 − 1 m ~ o 1 m ~ n 2 = λ Q n 2 Q o 2 − 1 m ~ o 2 \begin{cases} \tilde \mathbf{m}_{n1} = \lambda \mathbf{Q}_{n1} \mathbf{Q}_{o1}^{-1} \tilde \mathbf{m}_{o1} \\ \tilde \mathbf{m}_{n2} = \lambda \mathbf{Q}_{n2} \mathbf{Q}_{o2}^{-1} \tilde \mathbf{m}_{o2} \end{cases} {m~n1=λQn1Qo11m~o1m~n2=λQn2Qo21m~o2
其中 λ \lambda λ是任意的尺度因子(等价于在齐次下相等)。

正如图5所示,应用变换 T 1 \mathbf{T}_1 T1到校正前的左图像得到校正图像。注意,校正后的图像的像素(整数坐标位置)通常对应于原始图像平面上的非整数位置。 因此,通过双线性插值计算校正图像的灰度值。

通过三角化[7]重建3D点可以直接使用校正图中的 P n 1 \mathrm{P}_{n1} Pn1 P n 2 \mathrm{P}_{n2} Pn2

“Sport” stereo pair (top) and rectified pair (bottom).

Summary of the rectiication algorithm

考虑到双目技术在研究和应用中的高度普及,我们努力使算法尽可能易于再现和使用。为了该目的我们给出了MATLAB代码,代码简单和简洁(仅仅22行),并且附带的注释使之无需MATLAB即可理解。rectify函数的用法(请参见MATLAB代码)如下:

– 给定一对图像 I 1 \mathrm{I}_1 I1, I 2 \mathrm{I}_2 I2,以及透视投影矩阵Po1,Po2
– 计算[T1,T2,Pn1,Pn2] = rectify(Po1,Po2)
– 应用T1,T2校正图像

function [T1,T2,Pn1,Pn2] = rectify(Po1,Po2)
% RECTIFY: compute rectification matrices
% factorize old PPMs
[A1,R1,t1] = art(Po1);
[A2,R2,t2] = art(Po2);
% optical centers (unchanged)
c1 = - inv(Po1(:,1:3))*Po1(:,4);
c2 = - inv(Po2(:,1:3))*Po2(:,4);
% new x axis (= direction of the baseline)
v1 = (c1-c2);
% new y axes (orthogonal to new x and old z)
v2 = cross(R1(3,:)’,v1);
% new z axes (orthogonal to baseline and y)
v3 = cross(v1,v2);
% new extrinsic parameters
R = [v1’/norm(v1)
v2’/norm(v2)
v3’/norm(v3)];
% translation is left unchanged
% new intrinsic parameters (arbitrary)
A = (A1 + A2)./2;
A(1,2)=0; % no skew
% new projection matrices
Pn1 = A * [R -R*c1 ];
Pn2 = A * [R -R*c2 ];
% rectifying image transformation
T1 = Pn1(1:3,1:3)* inv(Po1(1:3,1:3));
T2 = Pn2(1:3,1:3)* inv(Po2(1:3,1:3));

% ------------------------
function [A,R,t] = art(P)
% ART: factorize a PPM as P=A*[R;t]

Q = inv(P(1:3, 1:3));
[U,B] = qr(Q);

R = inv(U);
t = B*P(1:3,4);
A = inv(B);
A = A ./A(3,3);

Reference


  1. U. R. Dhond and J. K. Aggarwal. Structure from stereo – a review. IEEE Transactions on Systems, Man and Cybernetics, 19(6):1489–1510, 1989. ↩︎

  2. B. Caprile and V. Torre. Using vanishing points for camera calibration. International Journal of Computer Vision, 4:127–140, 1990. ↩︎

  3. L Robert. Camera calibration without feature extraction. Computer Vision, Graphics, and Image Processing, 63(2):314–325, 1996. ↩︎

  4. N. Ayache and F. Lustman. Trinocular stereo vision for robotics. IEEE Transactions on Pattern Analysis and Machine Intelligence, 13:73–85, 1991. ↩︎ ↩︎

  5. D. V. Papadimitriou and T. J. Dennis. Epipolar line estimation and rectification for stereo images pairs. IEEE Transactions on Image Processing, 3(4):672–676, 1996. ↩︎

  6. R. Hartley and R. Gupta. Computing matched-epipolar projections. In CVPR93, pages 549–555, 1993. ↩︎

  7. L. Robert, C. Zeller, O. Faugeras, and M. Hébert. Applications of non-metric vision to some visually-guided robotics tasks. In Y. Aloimonos, editor, Visual Navigation: From Biological Systems to Unmanned Ground Vehicles, pages 89–134. 1997. ↩︎

  8. R.I. Hartley. Theory and practice of projective rectification. International Journal of Computer Vision, 35(2):1–16, 1999. ↩︎

  9. C. Loop and Z. Zhang. Computing rectifying homographies for stereo vision. In CVPR99, pages I:125–131, 1999. ↩︎

  10. F. Isgro and E. Trucco. Projective rectification without epipolar geometry. In CVPR99, pages I:94–99, 1999. ↩︎

  11. M. Pollefeys, R. Koch, and L. VanGool. A simple and efficient rectification method for general motion. In ICCV99, pages 496–501, 1999. ↩︎

  12. O. Faugeras. Three-Dimensional Computer Vision: A Geometric Viewpoint. The MIT Press, Cambridge, MA, 1993. ↩︎

  13. A. Fusiello, E. Trucco, and A. Verri. Rectification with unconstrained stereo geometry. Research Memorandum RM/98/12, CEE Dept., Heriot-Watt University, Edinburgh, UK, 1998. ftp://ftp.sci.univr.it/pub/Papers/Fusiello/RM-98-12.ps.gz. ↩︎

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值