opencv::sift特征提取
SIFT特征检测介绍 SIFT(Scale-Invariant Feature Transform)特征检测关键特性:
-建立尺度空间,寻找极值
-关键点定位(寻找关键点准确位置与删除弱边缘)
-关键点方向指定
-关键点描述子
关键点定位
我们在像素级别获得了极值点的位置,但是更准确的 值应该在亚像素位置,如何得到 – 这个过程称为关键 点(准确/精准)定位
删除弱边缘- 通过Hassian 矩阵特征值实现,小于阈值 自动舍
建立尺度空间,寻找极值。工作原理
. 构建图像高斯金字塔,求取DOG,发现最大与最小值在每一级
. 构建的高斯金字塔,每一层根据sigma的值不同,可以分为几个等级,最少有4 个。
关键点定位
在像素级别获得了极值点的位置,但是更准确的 值应该在亚像素位置,如何得到 – 这个过程称为关键 点(准确/精准)定位。
删除弱边缘- 通过Hassian 矩阵特征值实现,小于阈值 自动舍
关键点方向指定
求得每一层对应图像的梯度,根据给定的窗口大小
计算每个高斯权重,sigma=scalex1., ~360之间建立 36个直方图Bins
找最高峰对应的Bin, 大于max*% 的都保留 。这样就实现了旋转不变性,提高了匹配时候的稳定性。
大约有15%的关键点会有多个方向。
关键点描述子
拟合多项式插值寻找最大Peak
得到描述子 = 4x4x8=
cv::xfeatures2d::SIFT::create(
int nfeature=,
int nOctaveLayers=,
double contrastThreshold=0.04,
double edgeThreshold=,
double sigma=1.6
)
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
#include <iostream> using namespace cv;
using namespace std;
using namespace cv::xfeatures2d; int main(int argc, char** argv) {
Mat src = imread("D:/vcprojects/images/test.png", IMREAD_GRAYSCALE);
if (src.empty()) {
printf("could not load image...\n");
return -;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src); int numFeatures = ;
Ptr<SIFT> detector = SIFT::create(numFeatures);
vector<KeyPoint> keypoints;
detector->detect(src, keypoints, Mat());
printf("Total KeyPoints : %d\n", keypoints.size()); Mat keypoint_img;
//绘制
drawKeypoints(src, keypoints, keypoint_img, Scalar::all(-), DrawMatchesFlags::DEFAULT);
namedWindow("SIFT KeyPoints", CV_WINDOW_AUTOSIZE);
imshow("SIFT KeyPoints", keypoint_img); waitKey();
return ;
}
opencv::sift特征提取的更多相关文章
- 3. opencv进行SIFT特征提取
opencv中sift特征提取的步骤 使用SiftFeatureDetector的detect方法检测特征存入一个向量里,并使用drawKeypoints在图中标识出来 SiftDescriptorE ...
- VS2010+Opencv+SIFT以及出现的问题-关于代码sift_3_c的说明
http://blog.sina.com.cn/s/blog_a6b913e30101dvrt.html 一.前提 安装Opencv,因该版本的SIFT是基于Opencv的. 下载SIFT源码,见Ro ...
- [转]SIFT特征提取分析
SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points) ...
- SIFT特征提取分析
SIFT特征提取分析 sift 关键点,关键点检测 读'D. G. Lowe. Distinctive Image Features from Scale-Invariant Keypoints[J] ...
- Opencv Sift算子特征提取与匹配
SIFT算法的过程实质是在不同尺度空间上查找特征点(关键点),用128维方向向量的方式对特征点进行描述,最后通过对比描述向量实现目标匹配. 概括起来主要有三大步骤: 1.提取关键点: 2.对关键点附加 ...
- SIFT特征提取分析(转载)
转载自: http://blog.csdn.net/abcjennifer/article/details/7639681 SIFT(Scale-invariant feature transform ...
- 学习OpenCV——BOW特征提取函数(特征点篇)
没日没夜的改论文生活终于要告一段落了,比起改论文,学OpenCV就是一件幸福的事情.OpenCV的发展越来越完善了,已经可以直接使用BOW函数来进行对象分类了. 简单的通过特征点分类的方法: ...
- SIFT 特征提取算法总结
原文链接:http://www.cnblogs.com/cfantaisie/archive/2011/06/14/2080917.html 主要步骤 1).尺度空间的生成: 2).检测尺度空间极 ...
- 在vs环境中跑动sift特征提取(代码部分)
因为在前两天的学习中发现.在opencv环境中跑动sift特征点提取还是比较困难的. 所以在此,进行记述. 遇到的问题分别有,csdn不愿意花费积分.配置gtk困难.教程海量然而能跑者鲜.描述不详尽等 ...
随机推荐
- DirectX12 3D 游戏开发与实战第三章内容
变换 学习目标 理解如何使用矩阵表示线性变换和仿射变换 学习对几何体进行缩放.旋转和平移的坐标变换 根据矩阵之间的乘法运算性质,将多个变换矩阵合并为一个单独的净变换矩阵 找寻不同坐标系之间的坐标转换方 ...
- Layer弹层(父子传值,兄弟传值)
需求:最外面列表界面点修改弹出LayerA界面,再点击LayerA界面中的选择地图坐标按钮弹出LayerB地图界面 这个过程涉及到的: 1:LayerA将坐标传给LayerB,LayerB在地图上显示 ...
- python最基本的数据掌握
python初学者可能会对list数据类型和int或者是字符串数据类型比较迷茫 list是引用,是指向的一个内存地址, 变量不是引用的 啥也不说上解释: a = 1 b = a a = 2 prin ...
- Mysql学习笔记整理之索引
索引的概念: 索引是一个分散存储的数据结构(检索)对数据库表中一列或多列的值进行排序 为什么要用索引? 索引能极大的减少存储引擎需要扫描的数据量 索引可以把随机IO变成顺序IO 索引可以帮助我们进行分 ...
- 遗传编程(GA,genetic programming)算法初探,以及用遗传编程自动生成符合题解的正则表达式的实践
1. 遗传编程简介 0x1:什么是遗传编程算法,和传统机器学习算法有什么区别 传统上,我们接触的机器学习算法,都是被设计为解决某一个某一类问题的确定性算法.对于这些机器学习算法来说,唯一的灵活性体现在 ...
- centos下U盘重装windows
当前机器使用的都是centos系统,后来想使用windows,这时候就需要在centos下去安装windows系统啦. 当然是采用U盘安装啦,先准备U盘,U盘数据先备份以免丢失. 第一步:制作U盘启动 ...
- java 数组定义
1.方式一: 数组声明: int[] intArr ; String [] strArr; int [][] intArrs; 数组初始化: intArr = new int[6]; //一维数组 s ...
- SQL数据库各种查询建表插入集合-待续持续更新
创建表 drop table student; DROP table Course; DROP table sc; CREATE TABLE student ( sid integer PRIMARY ...
- 阿里云服务器CentOS6.9 nexus私服配置
从nexus官网下载nexus版本. 下载地址如下:https://help.sonatype.com/repomanager2/download 如果要下载3.X版本的,可以把repomanager ...
- php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
$str="你好<我>(爱)[北京]{天安门}"; echo f1($str); //返回你好 echo f2($str); //返回我 echo f3($str); ...