Robotics - Computer Vision
2026-08-27 · 随笔 · 371798712f24
本节所有概念可以串成相机成像链:
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)
也就是:
-
世界坐标转换到相机坐标。
-
3D 点透视投影到归一化像平面。
-
镜头使理想位置发生畸变。
-
内参把归一化坐标转换成像素坐标。
忽略畸变时,它可以压缩成:
x~∼K[R∣t]p~w
\tilde{\mathbf x}\sim K[R\mid t]\tilde{\mathbf p}_w
其中“∼\sim”表示齐次意义下相等,即只确定到一个比例。
2.1 几何基元与齐次坐标
重要基元包括:
-
2D 点:x=(x,y)\mathbf x=(x,y)
-
2D 直线:l~=(a,b,c)\tilde{\mathbf l}=(a,b,c),满足
ax+by+c=0
ax+by+c=0
-
3D 点:p=(X,Y,Z)\mathbf p=(X,Y,Z)
-
3D 平面:m~=(a,b,c,d)\tilde{\mathbf m}=(a,b,c,d),满足
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~: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=w~x~,y=w~y~
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 从哪里来?
可以想象三维空间中有一个平面:
普通二维点 (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 可以理解为:
-
确定射线上选了哪个代表向量的比例坐标;
-
齐次坐标的归一化分母;
-
一般情况下不是额外的物理维度。
对于有限点,只要 w=0w\neq0,就能把它归一化为 w=1w=1。
3. 最初的直接动机:让平移也变成矩阵乘法
二维线性变换可以写成:
[x′y′]=[acbd][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 的坐标后:
x′y′1=ac0bd0txty1xy1
\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+tx⋅1
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=ZX,y=ZY
x=\frac{X}{Z},\qquad y=\frac{Y}{Z}
这里出现了除法,因而它不是普通的二维线性变换。
但用齐次坐标可以先写成:
x~∼XYZ
\tilde{\mathbf x}
\sim
\begin{bmatrix}
X\\
Y\\
Z
\end{bmatrix}
然后进行齐次归一化:
(x,y)=(ZX,ZY)
(x,y)=
\left(
\frac{X}{Z},
\frac{Y}{Z}
\right)
在这个特定例子里:
所以 ww 恰好携带透视除法的分母。
但要小心:
一般情况下 ww 只是齐次比例,不一定等于物理深度。
经过任意单应矩阵 HH 后:
x~′y~′w~′=Hxy1
\begin{bmatrix}
\tilde x'\\
\tilde y'\\
\tilde w'
\end{bmatrix}
=H
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}
最终坐标是:
x′=w~′x~′,y′=w~′y~′
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=(R3∖0)/∼
\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)
核心性质:
-
相差非零比例的齐次向量表示同一点。
-
通过除以最后一个分量恢复普通坐标。
-
w=0w=0 表示无穷远点。
-
平移、仿射和透视变换都可以统一为矩阵乘法。
非常实用的对偶关系:
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′=H−Tl
\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]
因为归一化后都是:
(26,212)=(3,6)
\left(\frac{6}{2},\frac{12}{2}\right)=(3,6)
但是:
[3:6:2]
[3:6:2]
并不表示像素 (3,6)(3,6),而是:
(23,26)=(1.5,3)
\left(\frac{3}{2},\frac{6}{2}\right)=(1.5,3)
因此,如果修改 ww,必须同时按相同比例修改前两个坐标。
像素本身并没有测量出一个 ww
相机图像存储的仍然只是:
例如像素位置 (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~′=H361
\begin{bmatrix}
\tilde u'\\
\tilde v'\\
\tilde w'
\end{bmatrix}
=H
\begin{bmatrix}
3\\
6\\
1
\end{bmatrix}
输出的 w~′\tilde w' 可能不是 1。此时要做齐次归一化:
u′=w~′u~′,v′=w~′v~′
u'=\frac{\tilde u'}{\tilde w'},
\qquad
v'=\frac{\tilde v'}{\tilde w'}
例如矩阵计算得到:
[12:24:4]
[12:24:4]
真正的像素位置是:
(412,424)=(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=[R0t1]∈SE(3)
T=
\begin{bmatrix}
R&t\\
0&1
\end{bmatrix}\in SE(3)
注意:
-
变换顺序不可交换。
-
必须给 (R,t)(R,t) 标明“从哪个坐标系到哪个坐标系”。
-
如果
pc=R(pw−C)=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
也就是 R∈SO(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^]×+(1−cosθ)[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=(sin2θn^,cos2θ),∣q∣=1
q=
\left(
\sin\frac{\theta}{2}\hat{\mathbf n},
\cos\frac{\theta}{2}
\right),\qquad |q|=1
关键性质:
-
qq 和 −q-q 表示同一个旋转。
-
旋转组合对应四元数乘法。
-
乘法不可交换。
-
表示连续,适合跟踪运动相机。
-
可用 SLERP 平滑插值。
书中的实用建议可以概括为:用四元数保存姿态,用小轴角增量更新姿态。
2.1.4:3D 到 2D 投影
正交与弱透视
正交投影直接丢弃 ZZ:
(x,y)=(X,Y)
(x,y)=(X,Y)
它适用于:
-
长焦镜头
-
物体深度远小于相机距离
-
精确的 telecentric 镜头
Scaled orthography 增加统一缩放;para-perspective 是更准确的仿射近似。这些模型都保留平行线。
透视投影
相机坐标点:
pc=(Xc,Yc,Zc)
\mathbf p_c=(X_c,Y_c,Z_c)
投影到归一化像平面:
xn=ZcXc,yn=ZcYc
x_n=\frac{X_c}{Z_c},\qquad
y_n=\frac{Y_c}{Z_c}
因此单张普通图像只能得到方向,不能恢复绝对深度。多个位于同一条相机射线上的 3D 点会投到同一个像素。
相机内参
一般形式:
K=fx00sfy0cxcy1
K=
\begin{bmatrix}
f_x&s&c_x\\
0&f_y&c_y\\
0&0&1
\end{bmatrix}
其中:
-
(fx,fy)(f_x,f_y):以像素为单位的焦距
-
(cx,cy)(c_x,c_y):主点
-
ss:像素轴倾斜,现代传感器中通常近似为零
简化形式是:
K=f000f0cxcy1
K=
\begin{bmatrix}
f&0&c_x\\
0&f&c_y\\
0&0&1
\end{bmatrix}
焦距、图像宽度和水平视场角满足:
f=2tan(θH/2)W
f=\frac{W}{2\tan(\theta_H/2)}
必须分清:
深度、单应性与退化
-
逆深度 1/Z1/Z 在远距离场景中通常比直接使用 ZZ 更稳定。
-
当场景全部位于同一平面时,两幅图像可由一个 3×33\times3 单应矩阵联系。
-
相机只有旋转、没有平移时,也可用单应矩阵进行图像映射,这正是全景拼接的重要基础。
-
对远距离物体,焦距 ff 和物距 tzt_z 高度相关,图像主要观测到比例 f/tzf/t_z。这是相机标定和三维重建中的典型退化。
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
重要分类:
-
Barrel distortion:桶形,直线向外鼓。
-
Pincushion distortion:枕形,直线向内弯。
-
Tangential/decentering distortion:镜头与传感器未完全对中;完整版 Brown-Conrady 模型可加入 (p1,p2)(p_1,p_2) 等参数。
-
Fisheye:不能简单套用普通针孔径向多项式,近似关系是
r=fθ
r=f\theta
要特别检查软件库使用的是“理想坐标到畸变坐标”,还是反方向的“观测坐标到去畸变坐标”;两种公式的参数不能直接混用。
畸变位于透视除法和像素内参之间,它引入非线性。因此加入畸变后,完整成像过程不能再简单压缩成单个 P=K[R∣t]P=K[R|t] 矩阵。
与当前 sensing 路线的对应
结合我们此前的 Robotics 学习脉络:
-
RealSense 提供的 stream intrinsics 对应 KK 和畸变参数,但这不等于 camera ↔ robot_base 外参。
-
Pupil Core 的 norm_pos 仍只是世界相机图像中的 2D 位置。
-
像素经过“去畸变 + K−1K^{-1}”只能得到一条相机射线:
rc∝K−1[u,v,1]T
\mathbf r_c\propto K^{-1}[u,v,1]^T
- 要得到机器人可以使用的 3D 点,还需要深度或多视图重建,再应用相机到机器人坐标系的外参。
这部分是此前学习路线的概念对应,并不表示当前 RealSense profile、安装位姿或标定参数已经现场核验。
最应该记牢的是:
像素不是 3D 点;内参不是外参;去畸变不是坐标系变换;旋转和平移的方向约定不能省略。
2d line
• 这里的 “2D line” 是二维平面中的一整条直线,不是某个像素点,也不是只有两个端点的线段。
例如像素平面中的直线:
3x−2y+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. 为什么直线也叫“齐次坐标”?
因为直线方程整体乘以任何非零常数,还是同一条直线:
3x−2y+3=0
3x-2y+3=0
和
6x−4y+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)
垂直于直线,所以叫法向量。
例如:
3x−2y+3=0
3x-2y+3=0
它的法向量是:
n=(3,−2)
\mathbf n=(3,-2)
因此直线本身的方向可以取一个与它垂直的向量:
d=(2,3)
\mathbf d=(2,3)
因为:
(3,−2)⋅(2,3)=6−6=0
(3,-2)\cdot(2,3)=6-6=0
而 cc 控制直线相对于原点的偏移。
4. 为什么要归一化?
原始法向量的长度可能不是 1:
∣n∣=a2+b2
|\mathbf n|=\sqrt{a^2+b^2}
把整个方程除以这个长度:
n^x=a2+b2a,n^y=a2+b2b,d=a2+b2c
\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
这时:
-
n^\hat{\mathbf n} 是单位法向量;
-
原点到直线的实际距离是 ∣d∣|d|;
-
dd 的正负表示原点位于法向量的哪一侧;
-
离原点最近的直线点是 −dn^-d\hat{\mathbf n}。
例如:
可以写成:
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)
取两条直线:
齐次直线坐标分别是:
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]
所以经过这两个点的直线为:
3x−2y+3=0
3x-2y+3=0
这就是公式 (2.5):
输入两个点的齐次坐标,输出经过它们的直线方程。
7. 平行线为什么也能求“交点”?
例如:
y=1⇒l~1=[0,1,−1]
y=1
\quad\Rightarrow\quad
\tilde{\mathbf l}_1=[0,1,-1]
y=3⇒l~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 DOF。
-
在二维平面中选择任意一条直线,需要几个自由度?——2 DOF。
1. 直线是一个线性方程组的解集
二维直线:
ax+by+c=0
ax+by+c=0
可以写成:
A[ab]x[xy]=−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=2−rank(A)=2−1=1
\text{nullity}=2-\operatorname{rank}(A)=2-1=1
因此解集中还有一个自由参数,所以固定直线上的点具有 1 DOF。
2. 参数化形式更直观
还是之前的直线:
3x−2y+3=0
3x-2y+3=0
我们知道点:
x0=[13]
\mathbf x_0=
\begin{bmatrix}
1\\
3
\end{bmatrix}
位于直线上。
直线法向量是:
n=[3−2]
\mathbf n=
\begin{bmatrix}
3\\
-2
\end{bmatrix}
与它垂直的直线方向可以取:
d=[23]
\mathbf d=
\begin{bmatrix}
2\\
3
\end{bmatrix}
因为:
nTd=[3−2][23]=6−6=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}}
例如:
-
t=0t=0:(1,3)(1,3)
-
t=1t=1:(3,6)(3,6)
-
t=2t=2:(5,9)(5,9)
3. 但“一条直线本身”有 2 DOF
如果我们不是在固定直线上选择一个点,而是在整个二维平面中选择一条直线,就需要确定:
-
直线朝哪个方向;
-
直线距离原点多远。
可以用:
(θ,d)
(\theta,d)
表示,其中:
-
θ\theta:法向量角度;
-
dd:直线相对原点的偏移。
所以二维平面中所有可能的直线组成一个 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]
因此:
3−1=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 中真正的一维线性子空间,因为包含原点,并且对加法、数乘封闭。
如果 c=0c\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 是二维:
但齐次点还要消除整体比例:
[x:y:w]=[λx:λy:λw]
[x:y:w]=[\lambda x:\lambda y:\lambda w]
所以:
2−1=1 projective DOF
2-1=1\text{ projective DOF}
这与“固定直线上的点只有 1 DOF”完全一致。
总结:
| 讨论对象 | DOF |
| — | —: |
| 二维平面中的一个点 | 2 |
| 固定直线上的一个点 | 1 |
| 从所有二维直线中选择一条直线 | 2 |
| 两条独立直线的交点 | 0 |
| 经过原点的直线作为线性子空间 | 1 维 |
| 一般直线 | 1 维仿射子空间 |