Review of Course Computer Vision Lecture 6:Line Detection
为期末考试复习做个准备。
Lecture 6: Line Detection
不使用边缘检测的原因: 时间复杂度的影响,固定形状的检测 (尤其是线性) 的时间复杂度往往优于未知形状的检测。
Hough transform
Hough transform 可以检测所有已知方程的曲线,即解高次方程的参数 (本质上是坐标系的转换),不过接下来我们主要讨论直线检测。
思路: 一个主要的想法就是坐标系的转换,考虑有一条直线是 $y=ax+b$,此时将 $(x,y)$ 坐标系转换成 $(a,b)$ 坐标系,即 $b=-ax+y$。那么若 $(x_i,y_i)$ 在 $y=ax+b$ 上,则在 $(a,b)$ 坐标系上,$(x,y)$ 对应的直线能经过 $(a,b)$ 这个点。
根据这个想法,我们能给出一个做法,即对所有 $(x_i,y_i)$,考虑在 $(a,b)$ 坐标系上求直线交点。
离散空间内求交点就是考虑将平面划分成若干个小正方形,求小正方形经过的次数。
然后将超过阈值的格点认为是直线,可以发现这样检测的时间复杂度是线性的。
另一种办法就是使用极坐标系,即
$$
x=\rho \cos\theta, y=\rho\sin\theta\implies x\cos\theta+y\sin\theta=\rho.
$$
转换成极坐标的好处在于统一了直线时 $a\to \infty$ 的情况,也就是 $x=p$ 这样的直线。
但转换成极坐标系 $(\theta,\rho)$ 后,不再是直线求交点,而是 $x_i\cos\theta+y_i\sin\theta=\rho$ 这样的曲线求交点,但不改变思路,仍然是数离散方格即可,此时 $\theta\in [0,2\pi]$,那么求交就是容易的了。
Hough transform 的优势如下:
- 概念简单。
- 实施方便。
- 容易处理丢失和被遮掩的数据。
- 可以解决所有固定曲线的问题,不仅仅是直线。
劣势如下:
- 曲线参数变多时,计算变得复杂。
- 每次只能检测一种固定曲线。
- 由于每次检测的是直线,但实际上图像中很多时候都是线段,甚至有线段共线的情况,这些都无法检测。
RANSAC
RANSAC, Random Sample Consensus,随机采样一致算法。
RANSAC 做了几个基本的假设:
- 模型数据由局内点 (inliers) 构成,比如模型是直线,局内点就是直线上的点。
- 局外点 (outliers) 是不能适应该模型的数据。
- 其余数据都是噪声。
局外点产生的原因有:噪声的极值;对数据的错误假设;测量的错误等。
我们要避免使用这些非局内点来构造模型,具体思路是反复迭代,步骤如下:
- 随机选择一个初始数据集来当作模型的数据。
- 通过数据集计算模型参数。
- 计算其他数据与当前模型的距离并找到其他局内点。
- 如果当前数据集足够大,计算当前模型内的误差大小,判断误差是否在可接受范围。
- 重复上述若干轮。
始终保留足够大的数据集作为最终结果。
接下来我们拿该算法去求直线。
假定 $w$ 为局内点与总点数的比例,初始选择 $n$ 个点,迭代 $k$ 轮,则 $k$ 次采样中至少有一轮是正确的概率为 $1-(1-w^n)^k$。
具体实现中,$n$ 可以多次改变。
RANSAC 优势:
- 通用,泛化,适合各种模型。
- 容易计算正确的概率。
劣势:
- 只能处理预先估计 $w$ 的情况的数据,不然算法成本太大。
- 现实中 $w$ 可能非常小(可能需要选择随机子集来解决)。