视觉slam十四讲手写ORB中的badpoints检测

十四讲中的ch7程序部分主要讲解了关于orb提取特征点的编程实现,作为小白,在手写orb部分,关于boundary,patch的程序部分让我迷惑好久,今天貌似对其有了新的理解,顿感眼前一亮。

一、程序部分

手写orb中关于boundary、patch的代码部分

// compute the descriptor
void ComputeORB(const cv::Mat &img, vector<cv::KeyPoint> &keypoints, vector<DescType> &descriptors) {
  const int half_patch_size = 8;
  const int half_boundary = 16;
  int bad_points = 0;
  for (auto &kp: keypoints) {
    if (kp.pt.x < half_boundary || kp.pt.y < half_boundary ||
        kp.pt.x >= img.cols - half_boundary || kp.pt.y >= img.rows - half_boundary) {
      // outside
      bad_points++;
      descriptors.push_back({});
      continue;
    }

二、解读部分

half_patch_size变量:ORB检测Oriented FAST关键点时选取的图像块边长,即计算质心时选取的图像块区域边长,为长、宽各为16 pixel的区域。虽然16x16=256,但并不是描述子的向量长度。
half_boundary变量:ORB计算BRIEF描述子时所选取的图像块区域,为长宽各为32 pixel的图像块。
函数中利用if语句来进行badpoints的计数,在计算BRIEF描述子时,如果以该keypoints为中心的图像块,超出了图像范围,那么,在进行随机选取像素对时,其计算出的描述子将会是错误的,即该keypoints为badpoints。而以该keypoints为中心的图像块,其长和宽应该满足什么条件时,才能够超出图像呢?主要有四种况:

1、当kp.pt.x < half_boundary时,边长为boundary的图像块将在-x轴上超出图像。
2、当kp.pt.y < half_boundary时,边长为boundary的图像块将在-y轴上超出图像。
3、当kp.pt.x >= img.cols - half_boundary时,边长为boundary的图像块将在+x轴上超出图像。
4、当kp.pt.y >= img.rows - half_boundary时,边长为boundary的图像块将在+y轴上超出图像。
举例如下:
在这里插入图片描述图像块中的中心点为关键点,当关键点的坐标为(half_boundary,half_boundary)时,正好为该关键点的图像块全部在图像中的临界坐标值,该keypoints为goodpoints。
在这里插入图片描述上图中,关键点的坐标为(x,half_boundary),其中x<half_boundary,属于第一种情况。在上图中我们可以看出,以该关键点为中心的图像块,超出了图像之外,当我们计算BRIEF描述子而随机选择像素对时,将会导致选取图像外的像素对,因此该关键点为badpoints,应当剔除掉。

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
视觉SLAM十四》的第七章主要介绍了ORB特征的实现。ORB特征是一种基于FAST角点检测和BRIEF描述子的特征提取方法,它在计算效率和鲁棒性上表现出色,被广泛应用于视觉SLAM。 第七章还介绍了ORB特征的主要步骤,包括角点检测、特征描述子计算和特征匹配。在角点检测,通过FAST算法检测图像的角点位置。然后,利用BRIEF描述子计算对应角点位置的特征描述子。最后,通过特征匹配算法将当前帧的ORB特征与地图ORB特征进行匹配,从而实现相机的位姿估计和地图构建。 除了ORB特征的实现,第七章还介绍了ORB-SLAM系统的整体框架和关键技术。该系统结合了特征点法和直接法,实现了在无GPS和IMU信息的情况下进行实时的视觉SLAM。通过利用ORB特征进行初始化、追踪和建图,ORB-SLAM系统在室内和室外环境下都取得了良好的效果。 总而言之,视觉SLAM的第七章《视觉SLAM十四》介绍了ORB特征的实现方法,并介绍了ORB-SLAM系统的整体框架和关键技术。这些内容对于理解和应用视觉SLAM具有重要意义。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [视觉SLAM十四——ch7](https://blog.csdn.net/weixin_58021155/article/details/123496372)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [《视觉slam十四》学习笔记——ch7实践部分 比较opencv库下的ORB特征的提取和ORB的区别](https://blog.csdn.net/weixin_70026476/article/details/127415318)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值