QiuQiu

Robotics - Computer Vision

本节所有概念可以串成相机成像链:

pwR,tpc除以 Zc(xn,yn)镜头畸变(xd,yd)K(u,v) \mathbf p_w \xrightarrow{R,t} \mathbf p_c \xrightarrow{\text{除以 }Z_c} (x_n,y_n) \xrightarrow{\text{镜头畸变}} (x_d,y_d) \xrightarrow{K} (u,v)

也就是:

  1. 世界坐标转换到相机坐标。

  2. 3D 点透视投影到归一化像平面。

  3. 镜头使理想位置发生畸变。

  4. 内参把归一化坐标转换成像素坐标。

忽略畸变时,它可以压缩成:

x~K[Rt]p~w \tilde{\mathbf x}\sim K[R\mid t]\tilde{\mathbf p}_w

其中“\sim”表示齐次意义下相等,即只确定到一个比例。

2.1 几何基元与齐次坐标

重要基元包括:

 ax+by+c=0   ax+by+c=0
 aX+bY+cZ+d=0   aX+bY+cZ+d=0
 r=p+λd^   \mathbf r=\mathbf p+\lambda\hat{\mathbf d}

齐次坐标

***动机? 我们既然能用2个数表示, 何必用3个数表示? , 而且w 又是什么, 来源是哪里, 是数学定义吗***

1. 三个数没有增加自由度

普通二维点:

(x,y) (x,y)

有两个自由度。

齐次坐标写成:

[x~:y~:w~] [\tilde x:\tilde y:\tilde w]

但所有相差非零倍数的三元组都表示同一个点:

[x~:y~:w~][λx~:λy~:λw~],λ0 [\tilde x:\tilde y:\tilde w] \sim [\lambda\tilde x:\lambda\tilde y:\lambda\tilde w], \qquad \lambda\neq 0

例如:

[2:3:1]=[4:6:2]=[2:3:1] [2:3:1]=[4:6:2]=[-2:-3:-1]

因为恢复普通坐标时要除以 ww

x=x~w~,y=y~w~ x=\frac{\tilde x}{\tilde w}, \qquad y=\frac{\tilde y}{\tilde w}

所以:

[4:6:2](2,3) [4:6:2]\longrightarrow (2,3)

虽然用了三个数,但整体比例是冗余的:

3 个数1 个比例自由度=2 个自由度 3\text{ 个数}-1\text{ 个比例自由度}=2\text{ 个自由度}

因此并没有增加几何信息。

2. ww 从哪里来?

可以想象三维空间中有一个平面:

w=1 w=1

普通二维点 (x,y)(x,y) 被放到这个平面上:

(x,y)(x,y,1) (x,y)\longleftrightarrow(x,y,1)

现在从三维原点向 (x,y,1)(x,y,1) 发出一条射线:

λ(x,y,1) \lambda(x,y,1)

射线上的所有点:

(x,y,1),(2x,2y,2),(3x,3y,3) (x,y,1),\quad (2x,2y,2),\quad (3x,3y,3)

都代表同一个二维点,因为它们属于同一条射线。

因此,ww 可以理解为:

对于有限点,只要 w0w\neq0,就能把它归一化为 w=1w=1

3. 最初的直接动机:让平移也变成矩阵乘法

二维线性变换可以写成:

[xy]=[abcd][xy] \begin{bmatrix} x'\\ y' \end{bmatrix} = \begin{bmatrix} a&b\\ c&d \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}

但它无法表达平移,因为任何 2×22\times2 矩阵都必须把原点映射到原点:

A0=0 A\mathbf 0=\mathbf 0

而平移需要:

x=ax+by+tx x'=ax+by+t_x
y=cx+dy+ty y'=cx+dy+t_y

增加一个固定为 11 的坐标后:

[xy1]=[abtxcdty001][xy1] \begin{bmatrix} x'\\ y'\\ 1 \end{bmatrix} = \begin{bmatrix} a&b&t_x\\ c&d&t_y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x\\ y\\ 1 \end{bmatrix}

展开第一行:

x=ax+by+tx1 x'=ax+by+t_x\cdot1

平移量进入了矩阵。于是平移、旋转、缩放可以统一成矩阵乘法,而且多个变换可以直接相乘:

x~=H3H2H1x~ \tilde{\mathbf x}'=H_3H_2H_1\tilde{\mathbf x}

这对机器人坐标链尤其重要。

4. 更深的动机:透视投影天然产生一个分母

针孔相机把相机坐标中的三维点

(X,Y,Z) (X,Y,Z)

投影为:

x=XZ,y=YZ x=\frac{X}{Z},\qquad y=\frac{Y}{Z}

这里出现了除法,因而它不是普通的二维线性变换。

但用齐次坐标可以先写成:

x~[XYZ] \tilde{\mathbf x} \sim \begin{bmatrix} X\\ Y\\ Z \end{bmatrix}

然后进行齐次归一化:

(x,y)=(XZ,YZ) (x,y)= \left( \frac{X}{Z}, \frac{Y}{Z} \right)

在这个特定例子里:

w=Z w=Z

所以 ww 恰好携带透视除法的分母。

但要小心:

一般情况下 ww 只是齐次比例,不一定等于物理深度。

经过任意单应矩阵 HH 后:

[x~y~w~]=H[xy1] \begin{bmatrix} \tilde x'\\ \tilde y'\\ \tilde w' \end{bmatrix} =H \begin{bmatrix} x\\ y\\ 1 \end{bmatrix}

最终坐标是:

x=x~w~,y=y~w~ x'=\frac{\tilde x'}{\tilde w'}, \qquad y'=\frac{\tilde y'}{\tilde w'}

此时 w~\tilde w' 是由矩阵第三行产生的投影分母,不一定具有“深度”的直接物理含义。

5. w=0w=0 表示什么?

如果:

[x~:y~:0] [\tilde x:\tilde y:0]

就无法除以 ww 得到普通坐标,因此它不是普通二维平面中的有限点。

它表示无穷远点,也可以理解为一个方向。

例如:

[1:0:0] [1:0:0]

表示水平方向上的无穷远点。

这让“平行线没有交点”变成:

平行线也有交点,只是交在无穷远处。

在透视图像中,现实中的平行铁轨汇聚到消失点,就是无穷远方向经过相机投影后的结果。

6. 最准确的数学定义

二维射影空间定义为:

P2=(R30)/ \mathbb P^2 = \left(\mathbb R^3\setminus{\mathbf 0}\right)/\sim

其中:

xλx,λ0 \mathbf x\sim\lambda\mathbf x, \qquad\lambda\neq0

意思是:

所以可以这样记:

普通二维坐标表示平面上的位置;齐次二维坐标表示三维空间中穿过原点的一条射线。

w=1w=1 只是我们从这条射线上选取的一个方便代表。

2D 点写作:

x~=(x~,y~,w~)=w~(x,y,1) \tilde{\mathbf x}=(\tilde x,\tilde y,\tilde w) =\tilde w(x,y,1)

核心性质:

非常实用的对偶关系:

x~=l~1×l~2 \tilde{\mathbf x}=\tilde{\mathbf l}_1\times\tilde{\mathbf l}_2

是两条直线的交点;反过来,

l~=x~1×x~2 \tilde{\mathbf l}=\tilde{\mathbf x}_1\times\tilde{\mathbf x}_2

是经过两点的直线。

如果点按 x=Hx\mathbf x'=H\mathbf x 变换,则直线、平面和一般法向量按逆转置变换:

l=HTl \mathbf l'=H^{-T}\mathbf l

这也是为什么不能总把法向量当普通点向量变换。

**›** 比如像素坐标系里里面会有一个3,6 这个位置, 也会有1, 3 这个位置, 他们是不一样的, 他们的w是什么, 不确定?

• 在普通像素坐标系里,默认把每个有限像素点的 ww 取为 11

所以:

(3,6)[3:6:1] (3,6)\longrightarrow [3:6:1]
(1,3)[1:3:1] (1,3)\longrightarrow [1:3:1]

它们明显是两个不同的点,因为两个齐次向量不成比例:

[3:6:1]λ[1:3:1] [3:6:1]\neq\lambda[1:3:1]

不存在一个 λ\lambda 能同时满足三个分量。

关键在于:ww 不能单独随便改变。

对于像素 (3,6)(3,6),下面这些都表示同一点:

[3:6:1]=[6:12:2]=[9:18:3] [3:6:1]=[6:12:2]=[9:18:3]

因为归一化后都是:

(62,122)=(3,6) \left(\frac{6}{2},\frac{12}{2}\right)=(3,6)

但是:

[3:6:2] [3:6:2]

并不表示像素 (3,6)(3,6),而是:

(32,62)=(1.5,3) \left(\frac{3}{2},\frac{6}{2}\right)=(1.5,3)

因此,如果修改 ww,必须同时按相同比例修改前两个坐标。

像素本身并没有测量出一个 ww

相机图像存储的仍然只是:

(u,v) (u,v)

例如像素位置 (3,6)(3,6)。为了方便做矩阵运算,我们人为把它嵌入齐次坐标:

[36][361] \begin{bmatrix}3\\6\end{bmatrix} \quad\longrightarrow\quad \begin{bmatrix}3\\6\\1\end{bmatrix}

这里的 w=1w=1

什么时候 ww 不再是 1?

经过投影变换后,例如:

[u~v~w~]=H[361] \begin{bmatrix} \tilde u'\\ \tilde v'\\ \tilde w' \end{bmatrix} =H \begin{bmatrix} 3\\ 6\\ 1 \end{bmatrix}

输出的 w~\tilde w' 可能不是 1。此时要做齐次归一化:

u=u~w~,v=v~w~ u'=\frac{\tilde u'}{\tilde w'}, \qquad v'=\frac{\tilde v'}{\tilde w'}

例如矩阵计算得到:

[12:24:4] [12:24:4]

真正的像素位置是:

(124,244)=(3,6) \left(\frac{12}{4},\frac{24}{4}\right)=(3,6)

所以可以这样记:

普通像素坐标中,默认 w=1w=1;矩阵变换后 ww 可能改变,除以 ww 就回到普通像素坐标。

2.1.1 与 2.1.2:2D/3D 变换层级

表 2.1 和表 2.2 给出了一个嵌套层级:

| 变换 | 2D 自由度 | 3D 自由度 | 主要保持性质 |

| — | —: | —: | — |

| 平移 | 2 | 3 | 方向 |

| 刚体/欧氏 | 3 | 6 | 长度、角度 |

| 相似 | 4 | 7 | 角度、形状比例 |

| 仿射 | 6 | 12 | 平行关系 |

| 投影 | 8 | 15 | 直线性 |

最重要的机器人形式是刚体变换:

p=Rp+t \mathbf p' = R\mathbf p+t

对应齐次矩阵:

T=[Rt01]SE(3) T= \begin{bmatrix} R&t\\ 0&1 \end{bmatrix}\in SE(3)

注意:

 pc=R(pwC)=Rpw+t   \mathbf p_c=R(\mathbf p_w-C)=R\mathbf p_w+t

  那么 t=RCt=-RC,相机中心是

 C=RTt   C=-R^Tt

  因此外参中的 tt 通常不是相机在世界坐标系中的直接位置。

2.1.3:3D 旋转

旋转矩阵满足:

RRT=I,detR=1 RR^T=I,\qquad \det R=1

也就是 RSO(3)R\in SO(3)

Euler 角

优点是直观,但有两个严重问题:

适合人机界面或明确的 pan-tilt 结构,不适合作为通用优化参数。

轴角与 Rodrigues 公式

用旋转轴 n^\hat{\mathbf n} 和角度 θ\theta 表示旋转:

ω=θn^ \boldsymbol\omega=\theta\hat{\mathbf n}

Rodrigues 公式:

R=I+sinθ[n^]×+(1cosθ)[n^]×2 R=I+\sin\theta[\hat{\mathbf n}]_\times +(1-\cos\theta)[\hat{\mathbf n}]_\times^2

小角度时:

R(ω)I+[ω]× R(\boldsymbol\omega)\approx I+[\boldsymbol\omega]_\times

因此轴角特别适合:

单位四元数

q=(sinθ2n^,cosθ2),q=1 q= \left( \sin\frac{\theta}{2}\hat{\mathbf n}, \cos\frac{\theta}{2} \right),\qquad |q|=1

关键性质:

书中的实用建议可以概括为:用四元数保存姿态,用小轴角增量更新姿态。

2.1.4:3D 到 2D 投影

正交与弱透视

正交投影直接丢弃 ZZ

(x,y)=(X,Y) (x,y)=(X,Y)

它适用于:

Scaled orthography 增加统一缩放;para-perspective 是更准确的仿射近似。这些模型都保留平行线。

透视投影

相机坐标点:

pc=(Xc,Yc,Zc) \mathbf p_c=(X_c,Y_c,Z_c)

投影到归一化像平面:

xn=XcZc,yn=YcZc x_n=\frac{X_c}{Z_c},\qquad y_n=\frac{Y_c}{Z_c}

因此单张普通图像只能得到方向,不能恢复绝对深度。多个位于同一条相机射线上的 3D 点会投到同一个像素。

相机内参

一般形式:

K=[fxscx0fycy001] K= \begin{bmatrix} f_x&s&c_x\\ 0&f_y&c_y\\ 0&0&1 \end{bmatrix}

其中:

简化形式是:

K=[f0cx0fcy001] K= \begin{bmatrix} f&0&c_x\\ 0&f&c_y\\ 0&0&1 \end{bmatrix}

焦距、图像宽度和水平视场角满足:

f=W2tan(θH/2) f=\frac{W}{2\tan(\theta_H/2)}

必须分清:

深度、单应性与退化

2.1.5:镜头畸变

理想针孔模型保持直线,但真实广角镜头通常不满足这一点。

本节的简化径向模型为:

r2=xn2+yn2 r^2=x_n^2+y_n^2
xd=xn(1+κ1r2+κ2r4) x_d=x_n(1+\kappa_1r^2+\kappa_2r^4)
yd=yn(1+κ1r2+κ2r4) y_d=y_n(1+\kappa_1r^2+\kappa_2r^4)

然后再转换为像素:

u=fxxd+cx,v=fyyd+cy u=f_x x_d+c_x,\qquad v=f_y y_d+c_y

重要分类:

 r=fθ   r=f\theta

要特别检查软件库使用的是“理想坐标到畸变坐标”,还是反方向的“观测坐标到去畸变坐标”;两种公式的参数不能直接混用。

畸变位于透视除法和像素内参之间,它引入非线性。因此加入畸变后,完整成像过程不能再简单压缩成单个 P=K[Rt]P=K[R|t] 矩阵。

与当前 sensing 路线的对应

结合我们此前的 Robotics 学习脉络:

 rcK1[u,v,1]T   \mathbf r_c\propto K^{-1}[u,v,1]^T

这部分是此前学习路线的概念对应,并不表示当前 RealSense profile、安装位姿或标定参数已经现场核验。

最应该记牢的是:

像素不是 3D 点;内参不是外参;去畸变不是坐标系变换;旋转和平移的方向约定不能省略。

2d line

• 这里的 “2D line” 是二维平面中的一整条直线,不是某个像素点,也不是只有两个端点的线段。

例如像素平面中的直线:

3x2y+3=0 3x-2y+3=0

它包含所有满足这个方程的像素位置,包括你刚才提到的:

(3,6):3(3)2(6)+3=0 (3,6):\quad 3(3)-2(6)+3=0
(1,3):3(1)2(3)+3=0 (1,3):\quad 3(1)-2(3)+3=0

所以这两个点位于同一条直线上。

1. 点坐标与直线坐标的角色不同

齐次点写作:

x~=[xyw] \tilde{\mathbf x} = \begin{bmatrix} x\\ y\\ w \end{bmatrix}

对于普通像素点通常取 w=1w=1

xˉ=[xy1] \bar{\mathbf x} = \begin{bmatrix} x\\ y\\ 1 \end{bmatrix}

齐次直线写作:

l~=[abc] \tilde{\mathbf l} = \begin{bmatrix} a\\ b\\ c \end{bmatrix}

这里的第三个数是直线方程的常数 cc,不是点坐标里的 ww

两者虽然都是三个数,但含义不同:

| 对象 | 齐次表示 | 含义 |

| — | — | — |

| 点 | [x,y,w][x,y,w] | 一个位置或无穷远方向 |

| 直线 | [a,b,c][a,b,c] | 方程 ax+by+c=0ax+by+c=0 |

点在直线上,当且仅当:

xˉTl~=0 \bar{\mathbf x}^T\tilde{\mathbf l}=0

也就是:

[xy1][abc]=ax+by+c=0 \begin{bmatrix}x&y&1\end{bmatrix} \begin{bmatrix}a\\b\\c\end{bmatrix} =ax+by+c=0

这就是截图中的公式 (2.3)。

2. 为什么直线也叫“齐次坐标”?

因为直线方程整体乘以任何非零常数,还是同一条直线:

3x2y+3=0 3x-2y+3=0

6x4y+6=0 6x-4y+6=0

完全相同。

因此:

[3:2:3]=[6:4:6] [3:-2:3]=[6:-4:6]

与齐次点一样,直线坐标也只确定到一个非零比例。

三个数减去一个比例自由度,所以一条二维直线只有两个自由度:

3. (a,b,c)(a,b,c) 分别表示什么?

直线:

ax+by+c=0 ax+by+c=0

其中向量:

n=(a,b) \mathbf n=(a,b)

垂直于直线,所以叫法向量。

例如:

3x2y+3=0 3x-2y+3=0

它的法向量是:

n=(3,2) \mathbf n=(3,-2)

因此直线本身的方向可以取一个与它垂直的向量:

d=(2,3) \mathbf d=(2,3)

因为:

(3,2)(2,3)=66=0 (3,-2)\cdot(2,3)=6-6=0

cc 控制直线相对于原点的偏移。

4. 为什么要归一化?

原始法向量的长度可能不是 1:

n=a2+b2 |\mathbf n|=\sqrt{a^2+b^2}

把整个方程除以这个长度:

n^x=aa2+b2,n^y=ba2+b2,d=ca2+b2 \hat n_x=\frac{a}{\sqrt{a^2+b^2}}, \qquad \hat n_y=\frac{b}{\sqrt{a^2+b^2}}, \qquad d=\frac{c}{\sqrt{a^2+b^2}}

就得到:

n^x+d=0,n^=1 \hat{\mathbf n}\cdot\mathbf x+d=0, \qquad |\hat{\mathbf n}|=1

这时:

例如:

y3=0 y-3=0

可以写成:

l~=[0,1,3] \tilde{\mathbf l}=[0,1,-3]

单位法向量是:

n^=(0,1) \hat{\mathbf n}=(0,1)

而:

d=3,d=3 d=-3,\qquad |d|=3

所以直线距离原点为 3。

很多 Hough transform 实现写成:

xcosθ+ysinθ=ρ x\cos\theta+y\sin\theta=\rho

而书中写成:

xcosθ+ysinθ+d=0 x\cos\theta+y\sin\theta+d=0

因此两种记号之间:

ρ=d \rho=-d

5. 两条直线的交点:公式 (2.4)

取两条直线:

x=3 x=3
y=6 y=6

齐次直线坐标分别是:

l~1=[1,0,3] \tilde{\mathbf l}_1=[1,0,-3]
l~2=[0,1,6] \tilde{\mathbf l}_2=[0,1,-6]

计算叉积:

x~=l~1×l~2 \tilde{\mathbf x} = \tilde{\mathbf l}_1\times\tilde{\mathbf l}_2

得到:

x~=[3,6,1] \tilde{\mathbf x}=[3,6,1]

归一化后就是交点:

(x,y)=(3,6) (x,y)=(3,6)

所以公式:

x~=l~1×l~2 \tilde{\mathbf x} = \tilde{\mathbf l}_1\times\tilde{\mathbf l}_2

可以理解为:

输入两条直线的方程系数,输出它们交点的齐次坐标。

6. 两个点决定直线:公式 (2.5)

使用你的两个像素点:

x~1=[3,6,1] \tilde{\mathbf x}_1=[3,6,1]
x~2=[1,3,1] \tilde{\mathbf x}_2=[1,3,1]

计算叉积:

l~=x~1×x~2 \tilde{\mathbf l} = \tilde{\mathbf x}_1\times\tilde{\mathbf x}_2

结果是:

l~=[3,2,3] \tilde{\mathbf l}=[3,-2,3]

所以经过这两个点的直线为:

3x2y+3=0 3x-2y+3=0

这就是公式 (2.5):

输入两个点的齐次坐标,输出经过它们的直线方程。

7. 平行线为什么也能求“交点”?

例如:

y=1l~1=[0,1,1] y=1 \quad\Rightarrow\quad \tilde{\mathbf l}_1=[0,1,-1]
y=3l~2=[0,1,3] y=3 \quad\Rightarrow\quad \tilde{\mathbf l}_2=[0,1,-3]

叉积得到:

x~=l~1×l~2=[2,0,0][1,0,0] \tilde{\mathbf x} =\tilde{\mathbf l}_1\times\tilde{\mathbf l}_2 =[-2,0,0] \sim[1,0,0]

它的 w=0w=0,所以不是有限像素位置,而是水平方向的无穷远点。

截图中的无穷远直线:

l~=[0,0,1] \tilde{\mathbf l}_\infty=[0,0,1]

对于任何点:

x~=[x,y,w] \tilde{\mathbf x}=[x,y,w]

如果它位于这条线上,就必须满足:

l~Tx~=[0,0,1][xyw]=w=0 \tilde{\mathbf l}_\infty^T\tilde{\mathbf x} = [0,0,1] \begin{bmatrix} x\\ y\\ w \end{bmatrix} =w=0

所以无穷远直线包含所有 w=0w=0 的方向点。

一句话概括截图中的三个公式:

lTx=0 \boxed{\mathbf l^T\mathbf x=0}

表示点在线上;

x=l1×l2 \boxed{\mathbf x=\mathbf l_1\times\mathbf l_2}

表示两线求交点;

l=x1×x2 \boxed{\mathbf l=\mathbf x_1\times\mathbf x_2}

表示两点求直线。

从线性代数的角度讲, 2d line 直线是一个linear system吗, 它是只有一个dof?

• 是的,但要区分两个不同的问题:

  1. 固定一条直线后,线上点有几个自由度?——1 DOF。

  2. 在二维平面中选择任意一条直线,需要几个自由度?——2 DOF。

1. 直线是一个线性方程组的解集

二维直线:

ax+by+c=0 ax+by+c=0

可以写成:

[ab]A[xy]x=c \underbrace{\begin{bmatrix}a&b\end{bmatrix}}_{A} \underbrace{\begin{bmatrix}x\\y\end{bmatrix}}_{\mathbf x} =-c

也就是:

Ax=b A\mathbf x=\mathbf b

这是一个线性方程、两个未知数的线性系统。

只要 (a,b)(0,0)(a,b)\neq(0,0),矩阵 AA 的秩为 1:

rank(A)=1 \operatorname{rank}(A)=1

根据 rank-nullity:

nullity=2rank(A)=21=1 \text{nullity}=2-\operatorname{rank}(A)=2-1=1

因此解集中还有一个自由参数,所以固定直线上的点具有 1 DOF。

2. 参数化形式更直观

还是之前的直线:

3x2y+3=0 3x-2y+3=0

我们知道点:

x0=[13] \mathbf x_0= \begin{bmatrix} 1\\ 3 \end{bmatrix}

位于直线上。

直线法向量是:

n=[32] \mathbf n= \begin{bmatrix} 3\\ -2 \end{bmatrix}

与它垂直的直线方向可以取:

d=[23] \mathbf d= \begin{bmatrix} 2\\ 3 \end{bmatrix}

因为:

nTd=[32][23]=66=0 \mathbf n^T\mathbf d =\begin{bmatrix}3&-2\end{bmatrix} \begin{bmatrix}2\\3\end{bmatrix} =6-6=0

于是直线上的所有点都可以写成:

x(t)=x0+td \mathbf x(t)=\mathbf x_0+t\mathbf d

即:

[xy]=[13]+t[23] \begin{bmatrix} x\\ y \end{bmatrix} = \begin{bmatrix} 1\\ 3 \end{bmatrix} +t \begin{bmatrix} 2\\ 3 \end{bmatrix}

这里只有一个自由参数 tt,所以:

固定直线上的点具有 1 DOF \boxed{\text{固定直线上的点具有 1 DOF}}

例如:

3. 但“一条直线本身”有 2 DOF

如果我们不是在固定直线上选择一个点,而是在整个二维平面中选择一条直线,就需要确定:

  1. 直线朝哪个方向;

  2. 直线距离原点多远。

可以用:

(θ,d) (\theta,d)

表示,其中:

所以二维平面中所有可能的直线组成一个 2 DOF 的集合。

从齐次系数看也是如此:

l~=[a:b:c] \tilde{\mathbf l}=[a:b:c]

有三个数,但整体比例没有意义:

[a:b:c]=[λa:λb:λc] [a:b:c]=[\lambda a:\lambda b:\lambda c]

因此:

31=2 DOF 3-1=2\text{ DOF}

所以:

一条未知的 2D 直线具有 2 DOF \boxed{\text{一条未知的 2D 直线具有 2 DOF}}

4. 它严格来说是线性子空间吗?

不一定。

直线:

ax+by+c=0 ax+by+c=0

如果 c=0c=0,直线经过原点:

ax+by=0 ax+by=0

它是 R2\mathbb R^2 中真正的一维线性子空间,因为包含原点,并且对加法、数乘封闭。

如果 c0c\neq0,直线不经过原点,它不是线性子空间,而是一维仿射子空间:

x=x0+td \mathbf x=\mathbf x_0+t\mathbf d

可以把它理解为:

一个一维线性子空间,平移到某个位置。

因此更准确地说:

一般的 2D 直线是线性系统的解集,也是 1D 仿射子空间 \boxed{\text{一般的 2D 直线是线性系统的解集,也是 1D 仿射子空间}}

5. 齐次坐标下为什么 null space 是二维?

齐次写法是:

l~Tx~=0 \tilde{\mathbf l}^T\tilde{\mathbf x}=0

其中:

l~T=[abc],x~=[xyw] \tilde{\mathbf l}^T= \begin{bmatrix}a&b&c\end{bmatrix}, \qquad \tilde{\mathbf x}= \begin{bmatrix}x\\y\\w\end{bmatrix}

这是一个方程、三个未知数,所以它在 R3\mathbb R^3 中的 null space 是二维:

31=2 3-1=2

但齐次点还要消除整体比例:

[x:y:w]=[λx:λy:λw] [x:y:w]=[\lambda x:\lambda y:\lambda w]

所以:

21=1 projective DOF 2-1=1\text{ projective DOF}

这与“固定直线上的点只有 1 DOF”完全一致。

总结:

| 讨论对象 | DOF |

| — | —: |

| 二维平面中的一个点 | 2 |

| 固定直线上的一个点 | 1 |

| 从所有二维直线中选择一条直线 | 2 |

| 两条独立直线的交点 | 0 |

| 经过原点的直线作为线性子空间 | 1 维 |

| 一般直线 | 1 维仿射子空间 |