Line Fitting#
很多特点都以线的形式存在,比如道路边界,建筑物边缘,物体轮廓等,因此我们需要一种方法来拟合这些线条
最小二乘法#
数据:(x1,y1),(x2,y2),...,(xn,yn)
目标:找到一条线y=ax+b,使得所有点到这条线的垂直距离的平方和最小,即minimize E=∑i=1n(yi−axi−b)2
设Y=[yi],X=[xi,1],B=[a,b]T
写成矩阵形式就是
E=∣Y−XB∣2=(Y−XB)T(Y−XB)=YTY−2(XB)TY+(XB)T(XB)
对B求导,令其为0,得到
dBdE=−2XTY+2XTXB=0
解出B=(XTX)−1XTY
这种方法有一个问题,就是不能拟合垂直的线条(当a趋近于无穷大时),因此我们需要一种更一般的方法来拟合线条
General case
我们可以把线条表示ax+by+c=0,这样就可以拟合任意方向的线条了,此时
E=i=1∑n(axi+byi+c)2
设A=[xi,yi,1],h=[a,b,c]T,则写成矩阵形式就是E=∣Ah∣2
我们想要最小化∣Ah∣,但是为了避免平凡解h=0,我们需要加上一个约束条件∣h∣=1
对A进行SVD分解,得到
An×3=Un×nΣn×3V3×3T
其中Σ是一个对角矩阵,三个奇异值设为λ1≥λ2≥λ3,U和V是正交矩阵
设V=[c1,c2,c3],其中ci是V的第i列,这三列构成了一个正交基,因此我们可以把h表示成c1,c2,c3的线性组合,即
h=α1c1+α2c2+α3c3,α12+α22+α32=1
那么Ah=Un×n[λ1α1,λ2α2,λ3α3,O]T
因此∣Ah∣2=(λ1α1)2+(λ2α2)2+(λ3α3)2≥λ32,此时h=c3,也就是说我们需要选择V的最后一列作为我们的解
RANSAC#
在实际应用中,数据中往往会存在一些离群点(outliers),这些离群点可能会对我们的拟合结果产生很大的影响,因此我们需要一种方法来处理这些离群点,RANSAC就是一种常用的方法
具体步骤:
- 选择所需样本量最小的随机样本进行模型拟合
- 从取样的点中拟合模型
- 计算所有点到拟合模型的距离,判断哪些点是inliers,哪些点是outliers
- 迭代多次,保留inliers数量最多的模型
那么我们应该选取多少个样本点进行拟合,以及该迭代多少次?
设下面几个参数:
- n:确定模型所需的最少点数(最小样本数)
- ϵ:内点比例,0<ϵ<1
- k:迭代次数
- p:期望的成功概率,即以概率p保证至少有一次采样全是内点
从数据中随机选取n个点,全部是内点的概率为ϵn,单次采样至少包含一个离群点的概率为1−ϵn,迭代k次至少有一次采样全是内点的概率为1−(1−ϵn)k,而我们希望这个概率大于p,因此有
1−(1−ϵn)k≥p⇒k≥log(1−ϵn)log(1−p)
观察上面的公式,我们可以看到,固定p和ϵ,当n增加时,迭代次数k会急剧增加,因此我们应该尽量选择较小的n,比如拟合一条线时n=2,拟合一个平面时n=3
一些超参数:
- threshold:如果一个点到拟合模型的距离小于这个threshold,那么这个点就被认为是inlier
- k:迭代次数,因为实际上我们不知道ϵ的值,因此无法计算出k
Corner Detection#
除了edge,keypoint也是图像中的重要特征。keypoint一般有以下特点:
- 可重复性:在两幅图像中独立地检测出相同的点
- 显著性:在图像中具有明显的特征
- 算法可以精确定位
- 有足够的数量
- 在不同光照、视角、尺度下具有鲁棒性
corner就是一种keypoint,下面我们介绍用于检测corner的一些算法
Harris Corner Detector#
在corner处,图像的梯度在两个方向上都有显著的变化,可以利用这一点来检测corner

我们设I(x,y)为图像的灰度值,(u,v)为一个小的位移,我们定义Intensity difference为
Du,v(x,y)=[I(x+u,y+v)−I(x,y)]2
用一个窗函数w(x,y)来描述范围
w(x,y)={1,0,if −b≤x,y≤botherwise
如下图,我们计算某个点(x0,y0)处移动一个小位移(u,v)后窗口内的Intensity difference的变化Ex0,y0(u,v)

图中Ex0,y0(u,v)本质上是Du,v(x,y)与w(x,y)的卷积,即
Ex0,y0(u,v)=(Du,v∗w)(x0,y0)
对Du,v(x,y)进行泰勒展开,得到
Du,v(x,y)≈(Ixu+Iyv)2=[u,v][Ix2IxIyIxIyIy2][uv]
那么Ex0,y0(u,v)就可以写成
Ex0,y0(u,v)=[u,v]M(x0,y0)[uv]
其中M是一个2x2的对称、半正定矩阵
M(x,y)=[Ix2∗wIxIy∗wIxIy∗wIy2∗w]
M可以对角化为Q diag{λ1,λ2} QT,其中λ1≥λ2≥0
因为Q为正交矩阵,可以将[u,v]变换为另一组正交基,即[u′,v′]=[u,v]Q,此时
Ex0,y0(u,v)=[u′,v′][λ100λ2][u′v′]=λ1u′2+λ2v′2
由此我们可以进行直观上的分类:
- λ1≈0,λ2≈0:平坦区域 (不管怎么移动,Intensity difference都不变)
- λ1≫0,λ2≈0: 边缘 (在某个方向上Intensity difference有显著变化,在另一个方向不变)
- λ1≫0,λ2≫0:角点 (在两个方向上Intensity difference都有显著变化)

- 角点也可以按照图中分类,要求λ1和λ2都大于某个threshold,并且λ1/λ2也不能太大
对于上面的条件,进行一些数学上的转换:
λ1,λ2>b⇒λ1λ2−2t>0,t=2b2
k1<λ2λ1<k⇒λ1λ2−2α(λ1+λ2)2>0,α=2(k+k1)21
因此我们可以定义一个corner response function θ
θ=21(λ1λ2−2t)+21(λ1λ2−2α(λ1+λ2)2)=λ1λ2−α(λ1+λ2)2−t=det(M)−α⋅trace(M)2−t
当θ>0或某个threshold时,我们认为这个点是一个corner
Harris Detector Process#
- 计算图像的梯度Ix和Iy
- 计算Ix2,Iy2,IxIy
- 用窗函数对Ix2,Iy2,IxIy进行卷积
- 计算corner response function θ,找到所有θ大于某个threshold的点
- 对于所有θ大于threshold的点,进行NMS计算,保留局部最大的点
Harris 算子的特点#
关于不变性(invariant)和等变性(equivariant):
- 不变性:对于某个变换T,如果算法的输出不受T的影响,即f(T(I))=f(I),则称算法具有不变性
- 等变性:对于某个变换T,如果算法的输出也发生相同的变换,即f(T(I))=T(f(I)),则称算法具有等变性
Harris算子具有平移等变性,显然求导数和卷积操作都是平移等变的
对于使用具有各向同性(isotropic)的窗函数(即窗函数具有旋转不变性),比如高斯窗或矩形窗,Harris算子还具有旋转等变性
但不具有尺度不变性
