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上引用次数比较多的文献.有一些刚刚出版的 ...
随机推荐
- beego 框架入门
根据官网向导安装配置好环境和工具https://beego.me 就可以开始了,先来入门下. 1.新建项目 在项目目录下 bee new quickstart成功后就可以运行了 http serve ...
- 2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)
首先祝自己生日快乐~23咯~ 一 autorelease的概念 autorelease会像C语言的自动变量那样来对待对象实例.当超出作用域(相当于变量作用域)时,对象的实例release实力方法被调 ...
- 填补Resources和WWW加载本地资源的坑
总的来说Resources和WWW加载本地资源坑比较多,大多与路径有关. 下面代码构成了一个路径的预读模块: 此模块主要解决的坑是:Resources或WWW加载本地的文件夹中的多个文件时,无法获取文 ...
- windows核心编程---第九章 同步设备IO与异步设备IO之同步IO
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...
- ocx控件 编译成C#调用的dll 方法 转
打开VS命令提示行 1.注册ActiveX控件(带上 VCbox.ocx的路径) regsvr32 VCbox.ocx 2.编译OCX文件 aximp VCbox.ocx 生成两个dll文件,项 ...
- C#多线程线程
“线程同步”的含义 当一个进程启动了多个线程时,如果需要控制这些线程的推进顺序(比如A线程必须等待B和C线程执行完毕之后才能继续执行),则称这些线程需要进行“线程同步(thread synchro ...
- 外边距(padding)重叠的及解决办法
两个或多个块级盒子的垂直相邻边界会重合.结果的边界宽度是相邻边界宽度中最大的值.如果出现负边界,则在最大的正边界中减去绝对值最大的负边界.如果没有正边界,则从零中减去绝对值最大的负边界.注意:相邻的盒 ...
- Linux 和 Windows 常用工具列表
1. Windows 篇 1)MobaItem 一款优秀的Windows下模拟Linux Terminal工具,同时也可以用来远程Linux服务器. 2. Linux 篇 2) MC Linux下非常 ...
- Collections.reverse 代码思考-超越昨天的自己系列(13)
点进Collections.reverse的代码瞄了眼,然后就开始了一些基础知识的收集. 现在发现知道的越多,知道不知道的越多. 列几个记录下: reverse方法源码: /** * Reverses ...
- 批量过滤POST GET数据
if(get_magic_quotes_gpc()){ $_GET = stripslashes_array($_GET); $_POST = stripslashes_array($_POST); ...