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上引用次数比较多的文献.有一些刚刚出版的 ...
随机推荐
- C++笔试题
平时学术必须用Python多啊,但校招笔试绕不开语言基础,非cs科班小弱临阵整理些C++题备考.很弱很苦逼... 一.指针 1.二维数组指针 #include<stdio.h> int m ...
- 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。
用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...
- Linux的任务计划--cron入门
Linux操作系统定时任务系统 Cron 入门 cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动 ...
- jQuery的常见操作
1. 选择符: a) a > b 作为a子元素的b匹配的元素 b) a + b 作为后面直接同辈元素的b匹配的元素 c) a ~ b 作为后面 ...
- 黑马.net12期视频教程
完整高清视频http://www.ggfenxiang8.com/?p=301
- 线上mongodb数据库mLab使用总结
最近在CNode社区看到有人分享了免费的线上mongodb数据库(容量500M),今天去注册了一下,成功的将线下数据库替换掉了,现在就说一下它的使用和配置需要注意的地方: mLab是一款免费的在线mo ...
- Java编程经验——Long等包装类型判断
int等基本数据类型的值是可以通过=或者!=进行比较的,但是对于Long等包装类型想比较其和某个值是否相等是不能通过=或者!=来比较的,那究竟要怎么样进行比较呢? if (null != projec ...
- js中的break ,continue, return (转)
面向对象编程语法中我们会碰到break ,continue, return这三个常用的关键字,那么关于这三个关键字的使用具体的操作是什么呢?我们在使用这三关键字的时候需要注意和需要理解的规则是什么呢? ...
- 一个人的 ClojureScript 技术栈
作者:题叶链接:https://zhuanlan.zhihu.com/p/24425284来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.今天(昨天)分享完关于 Cloj ...
- lambda表达式
什么是Lambda表达式 lambda表达式,它将允许我们将行为传到函数里.在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出 ...