计算机视觉基础——几何基元中的2D直线叉积问题
新学期选了一门计算机视觉,想着上课前先看看书预习一下,然后就在基础数学知识这部分看到了这个结论:
使用齐次坐标时,我们可以如下计算两条直线的交点 \(\tilde{x}=\tilde{l_1}\times\tilde{l_2}\)
补充一下,\(\tilde{l}\)是2D直线的齐次坐标表示。对于直线l:\(ax+by+c=0\),齐次坐标\(\tilde{l}=(a,b,c)\)。另外\(\tilde{x}\)是2D坐标\(\mathbf{x}=(x,y)\)的齐次坐标,关系有\(\tilde{x}=(\tilde{x},\tilde{y},\tilde{w})=\tilde{w}(x,y,1)\)
本来其实是个很简单的结论,纸上算两笔就推好了,但是我就是钻牛角尖想知道凭什么一个2D的直线可以转换到3D的向量空间去做叉积,还能得到交点的信息。在网上搜寻良久未找到一个满意的答案,最后还是chatgpt给我讲明白了,下面就是更加直观的理解:
首先,对于一个平面上的点 (x, y),我们可以考虑它是否在直线\(ax+by+c=0\)上。如果这个点在直线上,那么\(ax+by+c=0\)必然成立,也就是 (x, y) 满足这个方程。如果不在直线上,那么\(ax+by+c\)的值将不等于零。
齐次坐标 (a, b, c) 有一个重要的性质:对于平面上的任意一点 (x, y),如果 (a, b, c) 是直线\(ax+by+c=0\)的齐次坐标,那么 (a, b, c) 这个向量与 (x, y, 1) 这个向量的内积(点乘)等于零:\((a,b,c)\cdot (x,y,1)=ax+by+c=0\)
因此我们应当把齐次坐标视为一种约束条件,当某个齐次坐标点(x,y,1)与之点积为0时,便认为这个点在直线上
假设有两条2D直线,分别表示为:
- 第一条直线:a1x + b1y + c1 = 0,对应的齐次坐标表示为 L1 = (a1, b1, c1)。
- 第二条直线:a2x + b2y + c2 = 0,对应的齐次坐标表示为 L2 = (a2, b2, c2)。
要找到这两条直线的交点,我们可以使用叉乘的方法。首先,将这两个齐次坐标向量进行叉乘操作,得到交点的齐次坐标表示为 P:
P = L1 × L2
交叉乘积 P 可以通过以下方式计算:
P = (b1c2 - b2c1, c1a2 - c2a1, a1b2 - a2b1)
为什么这个向量 P 表示交点呢?这是因为它满足齐次坐标的定义。考虑点 (x, y) 在两条直线上的齐次坐标分别为 (a1, b1, c1) 和 (a2, b2, c2)。如果这两个点是交点,那么它们必须同时满足两条直线的方程,即:
(a1, b1, c1) · (x, y, 1) = 0
(a2, b2, c2) · (x, y, 1) = 0
注意到这里是两个点积,点积为0意味着垂直,那么我们采用叉积来求(x, y, 1)就很直观了,因为叉积的意义就是找出同时垂直于(a1, b1, c1)和(a2, b2, c2)的向量
叉积的结果P = (b1c2 - b2c1, c1a2 - c2a1, a1b2 - a2b1)是齐次坐标,还需转为笛卡尔坐标,方法就是把它变成(x, y, 1)的形式,也就是都除以最后一个分量
x = (b1c2 - b2c1) / (a1b2 - a2b1)
y = (c1a2 - c2a1) / (a1b2 - a2b1)
总结:这个问题的直观证明有两个要点,一是要理解2D直线齐次坐标的约束意义,二是要理解我们使用叉积仅仅是为了找出那个同时垂直的向量,这个向量可以进一步地转化为(x, y, 1)的形式,对应了直线的交点
(这里可以转化成x,y,1的形式,还因为齐次坐标的比例不变性质,有了这个性质转化的操作才是OK的)

浙公网安备 33010602011771号