机器人学 —— 机器人视觉(特征)
上回说到机器人视觉的核心任务是estimation,理论框架是射影几何理论。在之前的作业中展现了单应变换的巨大威力。然而,整个estimation 的首要条件是已知像素点坐标,尤其是多幅图中对应点的像素坐标。
单幅图像的处理方法都是大路货了,不赘述。这篇博客想讲讲不变点检测与不变特征。由于机器人在不断运动,所以可能从不同方向对同一物体进行拍摄。而拍摄的距离有远近,角度有titled. 由于射影变换本身的性质,无法保证两幅图中的物体看上去一样。所以我们需要一种特征提取方法(特征点检测),能够保证检测是旋转,缩放不变的。除此之外还要一种特征描述方法,同样对旋转和缩放不变。
1、SIFT特征提取
SIFT特征提取可以分为以下几个步骤,1、多尺度卷积,2、构造金字塔,3、3D非极大值抑制
多尺度卷积的作用是构造一个由近及远的图像。金字塔则由下采样进行构造。此部分见之前博客。
对于不同尺度的图像同一个像素,我们可以跟踪它“灰度”的变化。我们发现,如果某一点对不同 sigma 的模版响应是不同的,最大响应(卷积后的灰度)所对应的scale 成为该点本征scale。这有点像对一个机械结构给不同频率的激励,某一频率下会发生共振,我们可以记录此频率一定程度上代表了此结构(单摆频率只和ml有关,有了f就可以重现系统)。
所以,我们只要找到一个合适的模版(激励方式),再找到最大响应,就可以获取图片中各个点的 Intrinsic Scale(本征尺度)。同一物体在不同距离拍摄后,都会统一在Intrinsic Scale下进行响应。由此解决了尺度不变的问题。
3D非极大值抑制是指在某点的3*3*3邻域内,仅取最大响应,作为特征点。由于该点是空间邻域中响应最强的,所以该点也是旋转不变的。从各个方向看,该点响应最强。
2、SIFT特征描述
特征提取和特征描述实际上是两码事。在上一节中特征提取已经结束了。假如有两幅图片,那么相同的特征点肯定会被找到。特征描述的作用是为匹配做准备,其以特征点局部区域信息为标准,将两幅图中相同的特征点联系起来。特征的本质是一个高维向量。要求尺度不变,旋转不变。
这里所使用的是HOG特征。特征描述可以分为两步:1、局部主方向确定,2、计算梯度直方图
以sigma作为特征描述选择范围是一个合理的想法,因为sigma描述了尺度,特征点位置+尺度 = 特征点所代局部信息。在此基础上,统计其领域内所有像素的梯度方向,以方向统计直方图作为特征向量,至此完成HOG特征构造。重要的是,在统计方向之前,需要把图像主方向和X轴方向对齐。示意图如下:
图中黄色的有点像时钟的东西是特征点+scale,指针代表该片小图像的主方向(PCA)。绿色的是直方图的bin,用于计算特征向量。
最后,我们只要匹配特征向量就可以得到 图像1 --- 图像2 的对应点对,通过单应矩阵的计算就可以将两幅图拼接在一起。如果已知标定信息则可进行3D reconstruction.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 I = single(rgb2gray(I)) ; 2 [f,d] = vl_sift(I) ; 3 perm = randperm(size(f,2)) ; 4 sel = perm(1:50) ; 5 h1 = vl_plotframe(f(:,sel)) ; 6 h2 = vl_plotframe(f(:,sel)) ; 7 set(h1,'color','k','linewidth',3) ; 8 set(h2,'color','y','linewidth',2) ;