BRISK: Binary Robust Invariant Scalable Keypoints
void BriskScaleSpace::constructPyramid(const cv::Mat& image){ // set correct size:
pyramid_.clear(); // fill the pyramid:
pyramid_.push_back(BriskLayer(image.clone()));
if(layers_>){
pyramid_.push_back(BriskLayer(pyramid_.back(),BriskLayer::CommonParams::TWOTHIRDSAMPLE));
}
const int octaves2=layers_; for(uint8_t i=; i<octaves2; i+=){
pyramid_.push_back(BriskLayer(pyramid_[i-],BriskLayer::CommonParams::HALFSAMPLE));
pyramid_.push_back(BriskLayer(pyramid_[i-],BriskLayer::CommonParams::HALFSAMPLE));
}
}
__inline__ bool BriskScaleSpace::isMax2D(const uint8_t layer,
const int x_layer, const int y_layer){
const cv::Mat& scores = pyramid_[layer].scores();
const int scorescols = scores.cols;
uchar* data=scores.data + y_layer*scorescols + x_layer;
// decision tree:
const uchar center = (*data);
data--;
const uchar s_10=*data; //
if(center<s_10) return false;
data+=;
const uchar s10=*data; //
if(center<s10) return false;
data-=(scorescols+);
const uchar s0_1=*data; //
if(center<s0_1) return false;
data+=*scorescols;
const uchar s01=*data; //
if(center<s01) return false;
data--;
const uchar s_11=*data; //
if(center<s_11) return false;
data+=;
const uchar s11=*data; //
if(center<s11) return false;
data-=*scorescols;
const uchar s1_1=*data; //
if(center<s1_1) return false;
data-=;
const uchar s_1_1=*data;//
if(center<s_1_1) return false; /*8 3 7
1 0 2
5 4 6*/ // reject neighbor maxima
std::vector<int> delta;
// put together a list of 2d-offsets to where the maximum is also reached
if(center==s_1_1) { //
delta.push_back(-);
delta.push_back(-);
}
if(center==s0_1) { //
delta.push_back();
delta.push_back(-);
}
if(center==s1_1) { //
delta.push_back();
delta.push_back(-);
}
if(center==s_10) { //
delta.push_back(-);
delta.push_back();
}
if(center==s10) { //
delta.push_back();
delta.push_back();
}
if(center==s_11) { //
delta.push_back(-);
delta.push_back();
}
if(center==s01) { //
delta.push_back();
delta.push_back();
}
if(center==s11) { //
delta.push_back();
delta.push_back();
}
const unsigned int deltasize=delta.size();
if(deltasize!=){
// in this case, we have to analyze the situation more carefully:
// the values are gaussian blurred and then we really decide
data=scores.data + y_layer*scorescols + x_layer;
int smoothedcenter=*center+*(s_10+s10+s0_1+s01)+s_1_1+s1_1+s_11+s11;
for(unsigned int i=; i<deltasize;i+=){
//这里把左上角作为中心点进行平滑不知道是何意?
data=scores.data + (y_layer-+delta[i+])*scorescols + x_layer+delta[i]-;
int othercenter=*data;
data++;
othercenter+=*(*data);
data++;
othercenter+=*data;
data+=scorescols;
othercenter+=*(*data);
data--;
othercenter+=*(*data);
data--;
othercenter+=*(*data);
data+=scorescols;
othercenter+=*data;
data++;
othercenter+=*(*data);
data++;
othercenter+=*data;
if(othercenter>smoothedcenter) return false;
}
}
return true;
}
a.BRISK使用固定的样本模式点,而且是以R为半径围绕关键点周围的圆进行均匀取样。因此特定的高斯核平滑不会突然地扭曲亮度内容的信息(模糊邻近的两个采样点的亮度,从而保证亮度平滑过渡)
b.与两两组成的点对相比,BRISK显著的减少了采样点的数量(例如,单个的样本点参与了更多的比较),限制了亮度查找表的复杂度
c.这里的比较是受到空间的限制的,所以亮度的改变仅仅只是需要局部一致性就可以了。
1.利用least square进行曲线拟合中的参数计算
3.<BRISK: Binary Robust Invariant Scalable Keypoints> Stefan Leutenegger, Margarita Chli and Roland Y. Siegwart
BRISK: Binary Robust Invariant Scalable Keypoints的更多相关文章
- 【特征匹配】BRISK原文翻译
原文:Stefan Leutenegger, Margarita Chli et al.<BRISK: Binary Robust Invariant Scalable Keypoints> ...
- opencv::Brisk检测与匹配
Brisk(Binary Robust Invariant Scalable Keypoints)特征介绍 构建尺度空间 特征点检测 FAST9-16寻找特征点 特征点定位 关键点描述子
- Computer Vision_33_SIFT:TILDE: A Temporally Invariant Learned DEtector——2014
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- 【特征检测】BRISK特征提取算法
[特征检测]BRISK特征提取算法原创hujingshuang 发布于2015-07-24 22:59:21 阅读数 17840 收藏展开简介 BRISK算法是2011年ICCV上< ...
- opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...
- (1)RGB-D SLAM系列- 工具篇(硬件+关键技术)
/*************************************************************************************************** ...
- OpenCV特征点提取----Fast特征
1.FAST(featuresfrom accelerated segment test)算法 http://blog.csdn.net/yang_xian521/article/details/74 ...
- 图像局部显著性—点特征(SIFT为例)
基于古老的Marr视觉理论,视觉识别和场景重建的基础即第一阶段为局部显著性探测.探测到的主要特征为直觉上可刺激底层视觉的局部显著性--特征点.特征线.特征块. SalientDetection 已经好 ...
- Computer Vision_33_SIFT:Remote Sensing Image Registration With Modified SIFT and Enhanced Feature Matching——2017
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
随机推荐
- 电子表格控件Spreadsheet 对象方法事件详细介绍
1.ActiveCell:返回代表活动单元格的Range只读对象.2.ActiveSheet:返回代表活动工作表的WorkSheet只读对象.3.ActiveWindow:返回表示当前窗口的Windo ...
- PHPSTORM模板变量注释
类似于这种注释,方便使用. 有两种方式一种是生成PHP文件时,自动生成,一种是手动生成. 第一种:自动生成 一图解释所有.这么配置就OK了. 这种方法还有一种就是,在包括里边编写,直接引用,先写PHP ...
- 【LeetCode】Add Digits
Add Digits Given a non-negative integer num, repeatedly add all its digits until the result has only ...
- eclipse新建文件模板默认charset=ISO-8859-1解决
在安装目录下找到eclipse.ini用记事本打开,添加一行-Dfile.encoding=utf-8,就ok了. 这是应为模板中使用了encoding这个变量
- XML代码生成器——XMLFACTORY 简介(四)
XML代码生成器——XMLFACTORY 简介(四) 这一篇我们讲“类属性”页签的配置功能,您将了解到:如何为元素子值指定类属性的名称,数据类型,及容器类型. 如果,你没看过这个系列的第一篇文章,请先 ...
- dynamic_cast 和 static_cast 隐式类型转换的区别
首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...
- [转]Jenkins使用 管理节点
现在我们已经搭建好了基本的Jenkins环境,在这一集里,我们说一说如何管理节点. 进入“系统管理”中的“管理节点”. 创建Windos系统的奴隶节点 先创建一台安装了Win7系统的虚拟机,作为Jen ...
- iOS Block循环引用
在介绍block循环引用前我们先了解一下typeof. typeof是什么??? typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类 ...
- MSSQL—行转列
行转列,是SQL中经常会遇到的一个问题,并且分为静态转换和动态转换,所谓静态转换即在转换的行数已知或固定:动态转换则为转换的行数不固定. 转换的方法一般采用case when语句或pivot(MSSQ ...
- 服务器使用recast navigation
在3D MMO或者其他类型的游戏中,通常需要进行寻路处理,地图针对寻路有多种方案,比如划分格子,凸多边形等,本篇介绍一种比较常用的navigation mesh的方式来进行寻路.不过整套navmesh ...