slam中特征点归一化原因以及方法
简述
在计算H 或者 F矩阵的时候需要对特征点进行坐标变换,称之为归一化。
原因
前辈发现计算单应矩阵时变换特征点的坐标会得到更好的效果,包括坐标的平移和尺度缩放,并且这一步骤必须放在DLT之前。DLT之后再还原到原坐标系。
书本指出归一化与条件数确切的说是DTL矩阵A的第一个和倒数第二个奇异值的比例有关。有充分证据表明在精确数据和无限精度的算术运算条件下,归一化并不起作用,但是有噪声存在时解将偏离其正确结果。
个人推测:类似于机器学习中需要对数据进行归一化,减少数据因为尺度变化过大异常值等的原因影响结果。
步骤
1.将点进行平移使其形心(x,y的均值)位于原点。
2.对点进行缩放使特征点到原点的距离为根号2,即所有点“平均”位于(1,1,1)
3.对两幅图进行独立的上述变换
参考自《计算机视觉中的多视图几何》 3.4.4
代码实现 from ORBslam2
/*** @brief 归一化特征点到同一尺度(作为normalize DLT的输入)** [x' y' 1]' = T * [x y 1]' \n* 归一化后x', y'的均值为0,sum(abs(x_i'-0))=1,sum(abs((y_i'-0))=1** @param vKeys 特征点在图像上的坐标* @param vNormalizedPoints 特征点归一化后的坐标* @param T 将特征点归一化的矩阵 左乘*/ void Initializer::Normalize(const vector<cv::KeyPoint> &vKeys, vector<cv::Point2f> &vNormalizedPoints, cv::Mat &T) {//第一步得到所有特征点的均值,并将所有点的均值为0float meanX = 0;float meanY = 0;for (int i = 0; i < vKeys.size(); i++) {meanX += vKeys[i].pt.x;meanY += vKeys[i].pt.y;}meanX /= vKeys.size();meanY /= vKeys.size();//第二步将所有点到原点的距离为根号2float meanDevX = 0;float meanDevY = 0;for (int i = 0; i < vKeys.size(); i++) {vNormalizedPoints[i].x = vKeys[i].pt.x - meanX;vNormalizedPoints[i].y = vKeys[i].pt.y - meanY;meanDevX += fabs(vNormalizedPoints[i].x); //fabs是求一个实数的绝对值 点到原点距离的累加meanDevY += fabs(vNormalizedPoints[i].y);}meanDevX /= vKeys.size(); //点到原点距离的平均值meanDevY /= vKeys.size();for (int i = 0; i < vKeys.size(); i++) {vNormalizedPoints[i].x /= meanDevX;vNormalizedPoints[i].y /= meanDevY;}//用于还原特征点到原始的坐标系,获得矩阵 |sX 0 -meanx*sX| 用于取逆 x 快速还原// |0 sY -meany*sY| * y// |0 0 1 | 1float sX = 1.0 / meanDevX;float sY = 1.0 / meanDevY;T = Mat::eye(3, 3, CV_32F);T.at<float>(0, 0) = sX;T.at<float>(0, 2) = -meanX * sX;T.at<float>(1, 1) = sY;T.at<float>(1, 2) = -meanY * sY;T.at<float>(2, 2) = 1; }
转载于:https://www.cnblogs.com/FangLai-you/p/11192268.html
slam中特征点归一化原因以及方法相关推荐
- 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了
摘自:https://mp.weixin.qq.com/s/OZnnuA31tEaVt0vnDOy5hQ 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了 原创 小翼 飞思实验室 今天 基 ...
- SVO: 视觉SLAM中特征点法与直接法结合
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前面的话 VSLAM 是利用多视图几何理论,根据相机拍摄的图像信息 ...
- SLAM | 视觉SLAM中特征点法与直接法结合:SVO
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前面的话 VSLAM 是利用多视图几何理论,根据相机拍摄的图像信息对相机进行定位并同时构建周围环境地图 ...
- 论文精读 | slam中姿态估计的图优化方法比较
一. 摘要 对于位置环境中的自主导航问题,同步定位与建图(Simultaneous localization and mapping, SLAM)是一个非常重要的工具框架.根据SLAM字面含义可以得知 ...
- SLAM中姿态估计的图优化方法比较(g2o/Ceres/GTSAM/SE-Sync)
编辑 | 深蓝AI 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 后台回复[SLAM综述]获取视觉SLAM.激光SLAM.RGBD-SLAM等多篇综述! 本 ...
- Matlab中特征降维主成分分析(PCA)使用方法(整套流程)
1. PCA简介: PCA(Principal Component Analysis)主成分分析方法是一种常见的数据降维方法.数据维度过高可能会使得模型效果不佳.PCA主要原理是将高维原数据通过一个转 ...
- SLAM | 激光SLAM中开源算法对比
点击上方"AI算法修炼营",选择加星标或"置顶" 标题以下,全是干货 前面的话 好久没有更新SLAM系列的文章了,前面我们讲到了激光SLAM技术.基于激光雷达的 ...
- 二十五.SLAM中Mapping和Localization区别和思考
专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...
- 最全综述 | SLAM中回环检测方法 收藏
在视觉SLAM问题中,位姿的估计往往是一个递推的过程,即由上一帧位姿解算当前帧位姿,因此其中的误差便这样一帧一帧的传递下去,也就是我们所说的累积误差.一个消除误差有效的办法是进行回环检测.回环检测判断 ...
最新文章
- C++中的vector的用法
- python利用自动识别写模块_Python 利用pytesser模块识别图像文字
- 2019年上半年收集到的人工智能图神经网络干货文章
- OpenCV离散傅立叶变换
- URG与PSH的联系和区别
- HTML5 Audio(音频)
- ImportError: libSM.so.6: cannot open shared object file: No such file or dir
- 语言专项精讲课程 赵海英_最全汇总:沪江日语课程体系指南
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- 通过 Python_Faker 生成测试数据
- 抓包测试步骤XMind
- JQuery_九大选择器
- STM32 + RT Thread OS 学习笔记[四]
- Android Proximity Sensor近距离传感器P-Sensor
- 无人机光电系统图像处理模块AVT22
- 聚合图床_sojson_v6
- 用MATLAB求解数据拟合问题
- eclipse 快捷调整字体_eclipse设置字体、字符编码、快捷键
- 在phpstudy的环境下,如何配置php虚拟主机。
- 安利一个非常好用的 echarts geojson 生成器
热门文章
- Xstream解析报文
- matlab将二值图像与原图重叠_[转载]图像处理matlab及图像融合图像镶嵌图像拼接...
- JCheckBox 默认选择_[注册表] 将Windows 10默认应用程序设置页面添加到桌面右键菜单中...
- oracle改用户名名字,Oracle中如何更改用户名
- 新网 云服务器,新网云服务器的优势包括什么?
- php动态验证码脚本,这个PHP脚本有什么问题吗? (验证码)
- vb mysql 查询_vb中用sql语句查询数据库
- 9.如何使用QT绘制导航箭头的图标
- 配置网口相机(大恒水星相机)
- 王者服务器维护什么时间结束s22,王者荣耀s22赛季结束时间 s22赛季什么时候结束?[多图]...