orbslam源码理论分析1—特征点提取
1.读取待处理图片并灰度化
原图 灰度化图像(第0层)
2.利用图像金字塔将灰度图尺度化为若干层
程序中为8层金字塔,这里只展示前五层,原灰度图为第0层,则
第1层 第2层
第3层 第4层
具体实现过程,以从第0层到第1层为例讲解。先根据第1层的尺度因数确定该层图像的size。然后将第0层图像缩放到这个size大小,缩放方式采用的是双线性差值法。然后扩充该缩放图像的边缘,程序中将图像四周各扩充了16个像素点,扩充方式为对称法(以图像扩充前最边缘像素为轴,对称扩充)。
程序中的图像金字塔为8层,对每层都进行如是操作,最后将8层金字塔图像矩阵存储到一个vector<cv::Mat>容器mvMaskPyramid中。
3.特征点提取
程序中将图像尺度化为8层图像金字塔,首先确定“期望提取到的特征点总数量(nfeatures)”是多少,然后以一定的规则确定“各层期望提取到的特征点数量(mnFeaturesPerLevel [level])”是多少,Level取值范围为0-7,最后对每层分别进行特征点提取。以第0层为例(nDesiredFeatures = mnFeaturesPerLevel [0]),讲解此过程。
将第0层图像分割成若干图像网格区域,对每个网格区域分别进行特征点提取。那么问题来了,若干个区域是多少区域?怎么划分呢?下面给出划分依据。
首先,你自己要确定“你期望每个网格区域可以提取出多少(nfeaturesCell)个特征点”,然后根据公式nCells = nDesiredFeatures / nfeaturesCe