当前位置: 首页 > news >正文

ORB-SLAM2学习笔记:ExtractorNode::DivideNode和ORBextractor::DistributeOctTree函数详解

一、ExtractorNode::DivideNode

void ExtractorNode::DivideNode(ExtractorNode &n1, ExtractorNode &n2, ExtractorNode &n3, ExtractorNode &n4)
{const int halfX = ceil(static_cast<float>(UR.x-UL.x)/2);const int halfY = ceil(static_cast<float>(BR.y-UL.y)/2);//Define boundaries of childsn1.UL = UL;n1.UR = cv::Point2i(UL.x+halfX,UL.y);n1.BL = cv::Point2i(UL.x,UL.y+halfY);n1.BR = cv::Point2i(UL.x+halfX,UL.y+halfY);n1.vKeys.reserve(vKeys.size());n2.UL = n1.UR;n2.UR = UR;n2.BL = n1.BR;n2.BR = cv::Point2i(UR.x,UL.y+halfY);n2.vKeys.reserve(vKeys.size());n3.UL = n1.BL;n3.UR = n1.BR;n3.BL = BL;n3.BR = cv::Point2i(n1.BR.x,BL.y);n3.vKeys.reserve(vKeys.size());n4.UL = n3.UR;n4.UR = n2.BR;n4.BL = n3.BR;n4.BR = BR;n4.vKeys.reserve(vKeys.size());//Associate points to childsfor(size_t i=0;i<vKeys.size();i++){const cv::KeyPoint &kp = vKeys[i];if(kp.pt.x<n1.UR.x){if(kp.pt.y<n1.BR.y)n1.vKeys.push_back(kp);elsen3.vKeys.push_back(kp);}else if(kp.pt.y<n1.BR.y)n2.vKeys.push_back(kp);elsen4.vKeys.push_back(kp);}if(n1.vKeys.size()==1)n1.bNoMore = true;if(n2.vKeys.size()==1)n2.bNoMore = true;if(n3.vKeys.size()==1)n3.bNoMore = true;if(n4.vKeys.size()==1)n4.bNoMore = true;}

以下是 ExtractorNode::DivideNode 函数的详细解析,结合其在特征提取中的应用场景:


功能概述

该函数用于将当前节点(父节点)分割为四个子节点(n1-n4),并将父节点中的特征点(vKeys)按坐标分配到对应的子节点中,是ORB特征均匀化分布的核心操作,常用于四叉树分割策略中。


输入与输出

  • 输入:四个子节点的引用 n1, n2, n3, n4
  • 输出:子节点的边界和分配后的特征点集合。

代码解析

1. 计算子节点边界
const int halfX = ceil(static_cast<float>(UR.x - UL.x)/2);
const int halfY = ceil(static_cast<float>(BR.y - UL.y)/2);
  • 功能:计算父节点宽度(UR.x - UL.x)和高度(BR.y - UL.y)的一半,使用 ceil 确保分割后子节点覆盖整个父区域。
  • 示例:若父节点宽度为奇数(如5像素),halfX=3,保证子节点无遗漏。
2. 定义子节点坐标
// n1(左上子节点)
n1.UL = UL;  // 左上角继承父节点
n1.UR = cv::Point2i(UL.x + halfX, UL.y);  

相关文章:

  • 深度学习论文: FastVLM: Efficient Vision Encoding for Vision Language Models
  • 针对Python开发的工具推荐及分析,涵盖集成开发环境(IDE)、轻量级工具、在线开发平台、代码管理工具等)
  • 阅读笔记——理解什么是LLM大语言模型
  • 服务器带宽线路的区别(GIA、CN2、BGP、CMI等)
  • 技术为器,服务为本:AI时代的客服价值重构
  • 我在 Linux 进程管理中踩过的坑:僵尸、瞬时与不可中断进程实战实录
  • ffmpeg命令(二):分解与复用命令
  • 杆塔倾斜在线监测装置:电力设施安全运行的“数字守卫”
  • 工商业储能的“智慧大脑”:解密 Acrel-2000ES EMS 的核心功能与价值
  • GB/T 36140-2018 装配式玻纤增强无机材料复合保温墙体检测
  • GLSL texture()
  • 【深度学习-pytorch篇】3. 优化器实现:momentum,NAG,AdaGrad,RMSProp,Adam
  • 第十章 反射
  • 电动黄油枪行业数据分析报告2025-恒州诚思
  • Python 字典渲染字符串
  • node创建自己的CLI脚手架(强化基础)
  • 苍茫命令行:linux模拟实现,书写微型bash
  • ​​知识图谱:重构认知的智能革命​
  • 【Rust】Rust获取命令行参数以及IO操作
  • ABAQUS三维功能梯度多孔结构材料FGM轴压模拟
  • 鹰潭房产网站建设/网站建设是什么
  • 设计类专业网站有哪些/营销培训视频课程免费
  • 做网站组服务器/培训心得体会范文
  • 那个公司做网站/制作网站免费
  • wordpress全是博客/seo指的是
  • 做企业网站市场分析/互联网营销