球体投影为椭圆的几何原理与求解方法

参考:《计算机视觉中的多视图几何》第二版的第8章;通义千问

一、问题设定

  • 相机模型:针孔模型和鱼眼模型均可以将图像坐标转换到归一化平面,因此接下来只在归一化平面上探讨。

  • 球体 :真实世界中的一个球,半径为 R R R,球心为 C ∈ R 3 C \in \mathbb{R}^3 C∈R3(未知)。

  • 图像观测 :球体在归一化平面上的投影是一个椭圆(一般情况),其参数(中心、长短轴、方向)可以从归一化平面中拟合得到。

  • 目标

    1. 求球心 C C C 在归一化平面平上的投影点 p c = ( u c , v c ) ⊤ p_c = (u_c, v_c)^\top pc=(uc,vc)⊤。需要注意的是这个投影点 不等于 投影椭圆的几何中心!且与球的真实半径无关。
    2. 求球心 C C C(球心在相机坐标系中的位置)。

二、几何背景:球体投影为椭圆

在针孔相机下,空间中的球体投影到归一化平面是一个二次曲线 ,具体为一个椭圆(若整个球可见)。

设球心在相机坐标系下的位置为 C = X , Y , Z ⊤ \mathbf{C} = X, Y, Z^\top C=X,Y,Z⊤,半径为 R R R。

球面方程(相机坐标系):

( X ′ − X ) 2 + ( Y ′ − Y ) 2 + ( Z ′ − Z ) 2 = R 2 (X' - X)^2 + (Y' - Y)^2 + (Z' - Z)^2 = R^2 (X′−X)2+(Y′−Y)2+(Z′−Z)2=R2

X ′ 、 Y ′ 、 Z ′ X'、Y'、Z' X′、Y′、Z′ 为球面上的任一点。

三、构造切锥的二次型

考虑从光心 O = ( 0 , 0 , 0 ) O = (0,0,0) O=(0,0,0) 出发经过归一化平面上的点 d = x , y , 1 ⊤ \mathbf{d} = x, y, 1^\top d=x,y,1⊤(非齐次方向向量)的任意射线方向。该射线上点可写为 λ d , λ > 0 \lambda \mathbf{d}, \lambda > 0 λd,λ>0。

此射线与球相切 ⇔ 方程

∥ λ d − C ∥ 2 = R 2 \|\lambda \mathbf{d} - \mathbf{C}\|^2 = R^2 ∥λd−C∥2=R2

唯一解 (判别式为零, b 2 − 4 a c = 0 b^2 - 4 a c = 0 b2−4ac=0)。

展开:

λ 2 ∥ d ∥ 2 − 2 λ ( d ⊤ C ) + ∥ C ∥ 2 − R 2 = 0 \lambda^2 \|\mathbf{d}\|^2 - 2\lambda (\mathbf{d}^\top \mathbf{C}) + \|\mathbf{C}\|^2 - R^2 = 0 λ2∥d∥2−2λ(d⊤C)+∥C∥2−R2=0

判别式为零:

2 d ⊤ C 2 − 4 ∥ d ∥ 2 ( ∥ C ∥ 2 − R 2 ) = 0 2 \\mathbf{d}\^\\top \\mathbf{C}^2 - 4 \|\mathbf{d}\|^2 (\|\mathbf{C}\|^2 - R^2) = 0 2d⊤C2−4∥d∥2(∥C∥2−R2)=0

化简得:

( d ⊤ C ) 2 = ∥ d ∥ 2 ( ∥ C ∥ 2 − R 2 ) (\mathbf{d}^\top \mathbf{C})^2 = \|\mathbf{d}\|^2 (\|\mathbf{C}\|^2 - R^2) (d⊤C)2=∥d∥2(∥C∥2−R2)

移项:

( d ⊤ C ) 2 − ( ∥ C ∥ 2 − R 2 ) ∥ d ∥ 2 = 0 (\mathbf{d}^\top \mathbf{C})^2 - (\|\mathbf{C}\|^2 - R^2) \|\mathbf{d}\|^2 = 0 (d⊤C)2−(∥C∥2−R2)∥d∥2=0

用矩阵形式表达(注意 ∥ d ∥ 2 = d ⊤ I d \|\mathbf{d}\|^2 = \mathbf{d}^\top I \mathbf{d} ∥d∥2=d⊤Id, ( d ⊤ C ) 2 = d ⊤ ( C C ⊤ ) d (\mathbf{d}^\top \mathbf{C})^2 = \mathbf{d}^\top (\mathbf{C} \mathbf{C}^\top) \mathbf{d} (d⊤C)2=d⊤(CC⊤)d):

d ⊤ C C ⊤ − ( ∥ C ∥ 2 − R 2 ) I d = 0 \mathbf{d}^\top \left \\mathbf{C} \\mathbf{C}\^\\top - (\\\|\\mathbf{C}\\\|\^2 - R\^2) I \\right \mathbf{d} = 0 d⊤CC⊤−(∥C∥2−R2)Id=0

定义 切锥在方向空间中的二次型矩阵

Q dir = C C ⊤ − ( ∥ C ∥ 2 − R 2 ) I Q_{\text{dir}} = \mathbf{C} \mathbf{C}^\top - (\|\mathbf{C}\|^2 - R^2) I Qdir=CC⊤−(∥C∥2−R2)I

那么所有切线方向 d \mathbf{d} d 满足:

d ⊤ Q dir d = 0 \mathbf{d}^\top Q_{\text{dir}} \mathbf{d} = 0 d⊤Qdird=0

注意:这是在三维方向空间中的二次锥面方程。对椭圆不熟悉,可以查看最后面的补充知识

四、归一化平面的投影椭圆

在归一化平面,该轮廓对应一个椭圆,其齐次方程为:

x ⊤ Q x = 0 \mathbf{x}^\top Q \mathbf{x} = 0 x⊤Qx=0

其中 Q Q Q 是归一化平面中的二次曲线矩阵(3×3 对称,秩3)。

根据 x ⊤ Q x = 0 \mathbf{x}^\top Q \mathbf{x} = 0 x⊤Qx=0 和 d ⊤ Q dir d = 0 \mathbf{d}^\top Q_{\text{dir}} \mathbf{d} = 0 d⊤Qdird=0 ,两个都是齐次方程,乘一个非零系数仍然成立,所以:

Q = λ Q dir = λ ( C C ⊤ − ( ∥ C ∥ 2 − R 2 ) I ) Q = \lambda Q_{\text{dir}} = \lambda( \mathbf{C} \mathbf{C}^\top - (\|\mathbf{C}\|^2 - R^2) I) Q=λQdir=λ(CC⊤−(∥C∥2−R2)I)

因此,如果我们能将图像中轮廓计算到归一化平面,再拟合出椭圆对应的 Q Q Q,就可以求解上述的公式。

需要注意的是:

d ⊤ C C ⊤ − ( ∥ C ∥ 2 − R 2 ) I d = 0 ⇒ Q = C C ⊤ − ( ∥ C ∥ 2 − R 2 ) I \mathbf{d}^\top \\mathbf{C} \\mathbf{C}\^\\top - (\\\|\\mathbf{C}\\\|\^2 - R\^2) I \mathbf{d} = 0 \Rightarrow Q = \mathbf{C} \mathbf{C}^\top - (\|\mathbf{C}\|^2 - R^2) I d⊤CC⊤−(∥C∥2−R2)Id=0⇒Q=CC⊤−(∥C∥2−R2)I

在 Hartley & Zisserman 和多数文献中,习惯将二次曲线写成:

q ⊤ Q q = 0 \mathbf{q}^\top Q \mathbf{q} = 0 q⊤Qq=0

且 Q dir Q_{\text{dir}} Qdir 通常取为负定或不定。为了匹配标准形式,我们两边乘以 -1(不影响零集):

Q : = λ ( ( ∥ C ∥ 2 − R 2 ) I − C C ⊤ ) (1) Q := \lambda ((\|\mathbf{C}\|^2 - R^2) I - \mathbf{C} \mathbf{C}^\top) \tag{1} Q:=λ((∥C∥2−R2)I−CC⊤)(1)

这就是归一化平面上球体投影椭圆的二次曲线矩阵!

五、方程求解

这里存在两个求解方式:线性方程组求解和特征向量法求解。实测的话特征向量法求解更稳定,精度更高。

1. 线性方程组求解

忽略公式(1)的展开过程,直接给出其分量表示:

Q = a 11 a 12 a 13 a 12 a 22 a 23 a 13 a 23 a 33 = λ x c 2 − s x c y c x c x c y c y c 2 − s y c x c y c 1 − s Q = \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{12} & a_{22} & a_{23} \\ a_{13} & a_{23} & a_{33} \end{bmatrix} = \lambda \begin{bmatrix} x_c^2 - s & x_c y_c & x_c \\ x_c y_c & y_c^2 - s & y_c \\ x_c & y_c & 1 - s \end{bmatrix} Q= a11a12a13a12a22a23a13a23a33 =λ xc2−sxcycxcxcycyc2−sycxcyc1−s

于是得到六个独立方程(对称):

a 11 = λ ( x c 2 − s ) ( 2 ) a 22 = λ ( y c 2 − s ) ( 3 ) a 33 = λ ( 1 − s ) ( 4 ) a 12 = λ x c y c ( 5 ) a 13 = λ x c ( 6 ) a 23 = λ y c ( 7 ) \begin{aligned} a_{11} &= \lambda (x_c^2 - s) \quad &(2)\\ a_{22} &= \lambda (y_c^2 - s) \quad &(3)\\ a_{33} &= \lambda (1 - s) \quad &(4)\\ a_{12} &= \lambda x_c y_c \quad &(5)\\ a_{13} &= \lambda x_c \quad &(6)\\ a_{23} &= \lambda y_c \quad &(7) \end{aligned} a11a22a33a12a13a23=λ(xc2−s)=λ(yc2−s)=λ(1−s)=λxcyc=λxc=λyc(2)(3)(4)(5)(6)(7)

其中 x c , y c x_c, y_c xc,yc(即球心投影的归一化坐标轴),而 λ , s \lambda, s λ,s 是辅助未知数(其中 s = x c 2 + y c 2 + 1 − ρ 2 s = x_c^2 + y_c^2 + 1 - \rho^2 s=xc2+yc2+1−ρ2), x c = X Z , y c = Y Z , ρ = R Z x_c = \frac{X}{Z}, \quad y_c = \frac{Y}{Z}, \quad \rho = \frac{R}{Z} xc=ZX,yc=ZY,ρ=ZR。

观测公式(5)、(6)(7),可以轻松求解出球心在归一化平面的投影点。事实上,我实践中尝试过,这样做不好,只考虑了三个约束条件,受椭圆拟合的精度影响大,数值不稳定。未利用全部信息,考虑六个约束条件的话,容易得到:

a 11 − a 33 a 12 a 12 a 22 − a 33 \] \[ x c y c \] = − \[ a 13 a 23 \] \\begin{bmatrix} a_{11} - a_{33} \& a_{12} \\\\ a_{12} \& a_{22} - a_{33} \\end{bmatrix} \\begin{bmatrix} x_c \\\\ y_c \\end{bmatrix} = - \\begin{bmatrix} a_{13} \\\\ a_{23} \\end{bmatrix} \[a11−a33a12a12a22−a33\]\[xcyc\]=−\[a13a23

这个方程:

  • 利用了全部6个矩阵元素;
  • 是线性的,可直接求解;
  • 对中心附近的球体更稳定;

2. 特征向量法求解

公式 Q = λ ( ( ∥ C ∥ 2 − R 2 ) I − C C ⊤ ) Q = \lambda ((\|\mathbf{C}\|^2 - R^2) I - \mathbf{C} \mathbf{C}^\top) Q=λ((∥C∥2−R2)I−CC⊤)是一个经典的秩-1更新的单位矩阵 ,其特征值和特征向量有明确解析解。(秩-1更新的单位矩阵介绍参考我的另一篇博客:矩阵秩-1更新:)

令:

  • a = λ ( ∥ C ∥ 2 − R 2 ) a = \lambda (\|\mathbf{C}\|^2 - R^2) a=λ(∥C∥2−R2)(因为球必须在相机前方且可见,故 ∥ C ∥ > R \|\mathbf{C}\| > R ∥C∥>R,因为椭圆性质,其系数A和C大于0,易得此处 λ > 0 \lambda > 0 λ>0)
  • u = λ C \mathbf{u} = \sqrt {\lambda} \mathbf{C} u=λ C

则:

Q = a I − u u ⊤ Q = a I - \mathbf{u} \mathbf{u}^\top Q=aI−uu⊤

特征值分析:
  1. 方向 u \mathbf{u} u(即球心方向)
    Q u = ( a I − u u ⊤ ) u = a u − ( u ⊤ u ) u = a u − ∥ u ∥ 2 u = ( a − ∥ u ∥ 2 ) u Q \mathbf{u} = (a I - \mathbf{u} \mathbf{u}^\top) \mathbf{u} = a \mathbf{u} - (\mathbf{u}^\top \mathbf{u}) \mathbf{u} = a \mathbf{u} - \|\mathbf{u}\|^2 \mathbf{u} = (a - \|\mathbf{u}\|^2) \mathbf{u} Qu=(aI−uu⊤)u=au−(u⊤u)u=au−∥u∥2u=(a−∥u∥2)u
    注意到:
    a = ∥ u ∥ 2 − λ R 2 ⇒ a − ∥ u ∥ 2 = − λ R 2 a = \|\mathbf{u}\|^2 - \lambda R^2 \Rightarrow a - \|\mathbf{u}\|^2 = -\lambda R^2 a=∥u∥2−λR2⇒a−∥u∥2=−λR2
    所以:
    Q u = − λ R 2 u Q \mathbf{u} = -\lambda R^2 \mathbf{u} Qu=−λR2u
    u = λ C \mathbf{u} = \sqrt {\lambda} \mathbf{C} u=λ C 是 Q Q Q 的特征向量,对应特征值 λ 1 = − λ R 2 \lambda_1 = -\lambda R^2 λ1=−λR2
其他特征值:
  • λ 2 = λ 3 = λ ( ∥ C ∥ 2 − R 2 ) > 0 \lambda_2 = \lambda_3 = \lambda (\|\mathbf{C}\|^2 - R^2) >0 λ2=λ3=λ(∥C∥2−R2)>0(根据秩-1更新的单位矩阵推导)

因此,最小特征值是 − λ R 2 < 0 -\lambda R^2 < 0 −λR2<0 ,其对应的特征向量方向就是 λ C \sqrt {\lambda} \mathbf{C} λ C(球心在相机坐标系中的位置向量)。

六、从特征向量恢复球心投影点

特征向量 λ C \sqrt {\lambda} \mathbf{C} λ C 与 C = X , Y , Z ⊤ \mathbf{C} = X, Y, Z^\top C=X,Y,Z⊤ 同方向(相差一个正比例因子)。

只需将特征向量归一化使得第三分量为 1,即可得球心在归一化平面的投影为:

q c = u 1 u 3 , u 2 u 3 , 1 ⊤ \mathbf{q}_c = \left \\frac{u_1}{u_3}, \\frac{u_2}{u_3}, 1 \\right^\top qc=u3u1,u3u2,1

对于球心的位置则是:

根据半径 R R R,求比例因子 λ \lambda λ:

λ = − λ 1 R 2 \lambda = \frac{-\lambda_1}{R^2} λ=R2−λ1

球心在相机坐标系下的模长为:

∥ C ∥ = λ 2 + λ 3 2 λ + R 2 \|\mathbf{C}\| = \sqrt{ \frac{\lambda_2 + \lambda_3}{2 \lambda} + R^2 } ∥C∥=2λλ2+λ3+R2

对特征向量 u \mathbf{u} u做归一化使其模长为1再乘 ∥ C ∥ \|\mathbf{C}\| ∥C∥,即可得球心在相机坐标系下的位置向量:

C = ∥ C ∥ u ∥ u ∥ \mathbf{C} = \|\mathbf{C}\| \frac{\mathbf{u}}{\|\mathbf{u}\|} C=∥C∥∥u∥u

七、几何直观解释

  • 球的投影轮廓是由切线射线构成的锥面。
  • 这个锥面关于球心-光心连线旋转对称。
  • 因此,该锥面的"轴线"就是向量 C \mathbf{C} C。
  • 二次曲面 Q Q Q 描述了这个锥面在归一化平面上的截痕。
  • 而二次型矩阵 Q Q Q 的主轴方向由其特征向量决定。
  • 由于锥面沿 C \mathbf{C} C 方向"最窄"(甚至在极限下收缩为一条线,当 R → 0 R \to 0 R→0),该方向对应最小的曲率 ,在代数上体现为最小(最负)的特征值

待研究:

椭圆拟合的误差对球心位置的影响

八、补充知识:

1. 一般二次曲线的矩阵形式

在二维平面中,任意一条二次曲线都可以写成如下形式:

A x 2 + B x y + C y 2 + D x + E y + F = 0 Ax^2 + Bxy + Cy^2 + Dx + Ey + F = 0 Ax2+Bxy+Cy2+Dx+Ey+F=0

这可以写成齐次坐标下的矩阵形式:

x y 1 A B 2 D 2 B 2 C E 2 D 2 E 2 F x y 1 = 0 \begin{bmatrix} x & y & 1 \end{bmatrix} \begin{bmatrix} A & \frac{B}{2} & \frac{D}{2} \\ \frac{B}{2} & C & \frac{E}{2} \\ \frac{D}{2} & \frac{E}{2} & F \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = 0 xy1 A2B2D2BC2E2D2EF xy1 =0

这个中间的 3 × 3 3 \times 3 3×3 矩阵(记作 Q Q Q)是一个实对称矩阵 ,它完整地编码了该二次曲线的信息。 Q Q Q乘任意的非零常数,仍然表达同一条二次曲线。

2. 如何判断是否为椭圆?

给定上述矩阵 Q Q Q,可以通过分析其对应的二次项子矩阵 (即左上角的 2 × 2 2\times2 2×2 块)来判断曲线类型:

令:

M = A B 2 B 2 C M = \begin{bmatrix} A & \frac{B}{2} \\ \frac{B}{2} & C \end{bmatrix} M=A2B2BC

  • 如果 det ⁡ ( M ) > 0 \det(M) > 0 det(M)>0 且 A A A 与 C C C 同号(通常取正),那么该二次曲线是椭圆(或点椭圆、虚椭圆,需进一步判断常数项)。
  • 更严谨地,在非退化情况下(即整个 3 × 3 3\times3 3×3 矩阵的行列式 det ⁡ ( Q ) ≠ 0 \det(Q) \ne 0 det(Q)=0),若 det ⁡ ( M ) > 0 \det(M) > 0 det(M)>0,则为椭圆。
相关推荐
yym1611511 天前
专业的饲料颗粒机
相机
yym1611513 天前
饲料颗粒机销售厂家哪家可靠
相机
yym1611513 天前
饲料颗粒机工厂有哪些
相机
埃科光电4 天前
打通全场景检测痛点UB系列相机赋能多元智造场景
图像处理·数码相机·计算机视觉·制造·相机
颗粒机Cathy5 天前
饲料颗粒机企业有哪些
相机
yym1611517 天前
饲料颗粒机生产厂家
相机
颗粒机Cathy7 天前
饲料颗粒机工厂哪个好
相机
LingLong_roar8 天前
鱼眼镜头详解 + 和广角、长焦核心区别
相机
a47214884910 天前
饲料颗粒机生产厂家哪家好
相机
埃科光电13 天前
埃科光电2.5D成像系统,破解精密制造微缺陷检测难题
图像处理·计算机视觉·制造·相机·机器视觉