ORB_SLAM2 源码解析 ORB特征提取(二)
代码
1839 人阅读
|
0 人回复
|
<
目次
1、各成员函数变量
1、界说一个罗列规范用于暗示利用HARRIS呼应值仍是利用FAST呼应值
2、内乱联函数皆是用去间接获得类的成员变量的
3、庇护成员
2、策画特性面的标的目的 computeOrientation()
2.1、灰度量心法算法步伐
1、策画一个半径为15的远似圆
2、策画特性面角度
3、IC_Angle 策画本领
4、灰度量心法策画公式
5、策画特性面的标的目的(computeOrientation)
3、FAST描摹子
BRIEF描摹子天生步伐
5、金字塔的策画(ORBextractor::ComputePyramid)
6、提与FAST特性面
6.1、分cell搜刮特性面
6.2、提与特性面
6.3、四叉树挑选特性面: DistributeOctTree()
6.4、 最初策画那些特性面的标的目的疑息
7、总结
1、各成员函数变量
正在浏览代码之前我们先去引见变量的定名划定规矩
1、界说一个罗列规范用于暗示利用HARRIS呼应值仍是利用FAST呼应值
- <span style="color:#fe2c24;">nfeatures</span>
复造代码 | | - <span style="color:#fe2c24;">scaleFactor</span>
复造代码 | | - <span style="color:#fe2c24;">nlevels</span>
复造代码 | | iniThFAST
| | - <span style="color:#fe2c24;"> minThFAST </span>
复造代码 | | 2、内乱联函数皆是用去间接获得类的成员变量的
- <span style="color:#fe2c24;">GetScaleFactor()</span>
复造代码 | | - <span style="color:#fe2c24;"> mvScaleFactor</span>
复造代码 | | - <span style="color:#fe2c24;">GetInverseScaleFactors()</span>
复造代码 | | - <span style="color:#fe2c24;"> GetScaleSigmaSquares()</span>
复造代码 | - 获得sigma^2,便是每层图象相对初初图象缩放果子的仄圆
复造代码 | - <span style="color:#fe2c24;">GetInverseScaleSigmaSquares()</span>
复造代码 | | - <span style="color:#fe2c24;"> mvImagePyramid</span>
复造代码 | | 3、庇护成员
庇护成员便是公有的他人不成以挪用
- <span style="color:#fe2c24;">ComputePyramid</span>
复造代码 | | - <span style="color:#fe2c24;">ComputeKeyPointsOctTree</span>
复造代码 | - 以八叉树分派特性面的方法,计较图象金字塔中的特性面
复造代码 | - <span style="color:#fe2c24;">vToDistributeKeys </span>
复造代码 | | - <span style="color:#fe2c24;">mnFeaturesPerLevel</span>
复造代码 | | - <span style="color:#fe2c24;">umax</span>
复造代码 | - 计较特性面标的目的的时分,有个圆形的图象地区,那个vector中存储了每止u轴的鸿沟(四分之一,其他部门经由过程对称得到)
复造代码 | 2、策画特性面的标的目的 computeOrientation()
策画特性面的标的目的是为了使得提与的特性面具有扭转不变性
办法是灰度量心法:以多少中间战灰度量心的连线做为该特性面标的目的
2.1、灰度量心法算法步伐
1、策画一个半径为15的远似圆
前面策画的是特性面主标的目的上的描摹子,策画过程当中要将特性面四周像素扭转到主标的目的上,因而策画一个半径为16的圆的远似坐标,用于前面策画描摹子时举办扭转操纵.
- <span style="color:#fe2c24;">PATCH_SIZE</span>
复造代码 | | 31 | - <span style="color:#fe2c24;">HALF_PATCH_SIZE</span>
复造代码 | | 15 | - <span style="color:#fe2c24;">EDGE_THRESHOLD</span>
复造代码 | | 19 | - <span style="color:#fe2c24;">u_max</span>
复造代码 | | | float | - 返回特性面的角度,范畴为[0,360)角度,粗度为0.3°
复造代码 | |
- int vmax = cvFloor(HALF_PATCH_SIZE * sqrt(2.f) / 2 + 1); // 45°射线取圆周交面的纵坐标
- int vmin = cvCeil(HALF_PATCH_SIZE * sqrt(2.f) / 2); // 45°射线取圆周交面的纵坐标
- // 先计较下半45度的umax
- for (int v = 0; v <= vmax; ++v) {
- umax[v] = cvRound(sqrt(15 * 15 - v * v));
- }
- // 按照对称性补出上半45度的umax
- for (int v = HALF_PATCH_SIZE, v0 = 0; v >= vmin; --v) {
- while (umax[v0] == umax[v0 + 1])
- ++v0;
- umax[v] = v0;
- ++v0;
- }
复造代码
2、策画特性面角度
面v 绕 本面扭转θ 角,获得面v’,假定 v面的坐标是(x, y) ,那末能够推导获得 v’面的坐标(x’, y’)
- float angle = (float)kpt.angle*factorPI;
- float a = (float)cos(angle), b = (float)sin(angle);
- const uchar* center = &img.at<uchar>(cvRound(kpt.pt.y), cvRound(kpt.pt.x));
- const int step = (int)img.step;
- // 扭转公式
- // x'= xcos(θ) - ysin(θ)
- // y'= xsin(θ) + ycos(θ)
- #define GET_VALUE(idx) \
- center[cvRound(pattern[idx].x*b + pattern[idx].y*a)*step + cvRound(pattern[idx].x*a - pattern[idx].y*b)]
复造代码 3、IC_Angle 策画本领
正在一个圆域中算出m10(x坐标)战m01(y坐标),策画步伐是先算出中心白线的m10,然后正在仄止于 x轴算出m10战m01,一次策画相称于图象中的同个色彩的两个line
4、灰度量心法策画公式
[code]static float IC_Angle(const Mat& image, Point2f pt, const vector & u_max){ //图象的矩,前者是根据图象块的y坐标减权,后者是根据图象块的x坐标减权 int m_01 = 0, m_10 = 0; //得到那个特性面地点的图象块的中间面坐标灰度值的指针center const uchar* center = &image.at (cvRound(pt.y), cvRound(pt.x)); // Treat the center line differently, v=0 //那条v=0中间线的策画需求特别看待 //前面是以中间举动对称轴,成对遍历止数,以是PATCH_SIZE必需是偶数 for (int u = -HALF_PATCH_SIZE; u |
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
|
|
|
|
|