没有合适的资源?快使用搜索试试~ 我知道了~
SIFT系列02-SIFT源码详细注释.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 4 浏览量
2021-12-21
13:35:52
上传
评论
收藏 1.13MB DOCX 举报
温馨提示
试读
23页
。。。
资源推荐
资源详情
资源评论
SIFT系列 02--SIFT源码详细注释,保留每一步运算
的中间结果
(2013-04-27 18:30:38)
关于 sift算法的原理有很多文档,本来想整理到 BLOG,但是考虑到排版比较麻
烦,就不弄了。
把 opencv里面的 sift源码详细注释了一下,把相关函数重新整合到 SIFT的类
里面,这样就可以用这个类而不用 opencv的 sift接口来提取特 征点,用此方
法提取特征点的速度上也有很明显的提升,说明 OpenCV用来做具体的工程效率
肯定是跟不上的,还是得改成纯 C、C++。
SIFT每一步的中间结果也保存下来,包括所有的高斯金字塔图像,DOG图像,特
征点坐标,描述符矩阵等。方便自己更好的理解。
保存结果:
1、高斯金字塔
2、dog金字塔
3、特征点坐标
4、特征点描述符
5、特征点
程序代码:
一、sift.h文件
#include "opencv2/features2d/features2d.hpp"
#include<opencv2\opencv.hpp>
#include<iostream>
#include<fstream>
using namespace cv;
namespace cv
{
class CV_EXPORTS_W SIFT : public Feature2D
{
public:
CV_PROP_RW int nfeatures;
CV_PROP_RW int nOctaveLayers;
CV_PROP_RW double contrastThreshold;
CV_PROP_RW double edgeThreshold;
CV_PROP_RW double sigma;
explicit SIFT( int nfeatures=0, int nOctaveLayers=3,
double contrastThreshold=0.04, double edgeThreshold=10,
double sigma=1.6);
//! returns the descriptor size in floats (128)
//返回描述符维度
int descriptorSize() const;
//! returns the descriptor type
//返回描述符类型
int descriptorType() const;
//! finds the keypoints using SIFT algorithm
//重载操作符(),用 SIFT算法找到关键点
void operator()(InputArray img, InputArray mask,
vector& keypoints) const;
//! finds the keypoints and computes descriptors for them using SIFT algorithm.
//! Optionally it can compute descriptors for the user-provided keypoints
//重载操作符(),用 SIFT算法找关键点并计算描述符。设置最后一个参数可以计算用户自
己提供的特征点的描述符
// mask :Optional input mask that marks the regions where we should detect features.
void operator()(InputArray img, InputArray mask,
vector& keypoints,
OutputArray descriptors,
bool useProvidedKeypoints=false) const;
AlgorithmInfo* info() const;
static MatcreateInitialImage( const Mat& img, bool doubleImageSize, float sigma );
void buildGaussianPyramid( const Mat& base, vector& pyr, int nOctaves ) const;
void buildDoGPyramid( const vector& pyr, vector& dogpyr ) const;
void findScaleSpaceExtrema( const vector& gauss_pyr, const vector& dog_pyr,
vector& keypoints ) const;
static void calcSIFTDescriptor( const Mat& img, Point2f ptf, float ori, float scl,
int d, int n, float* dst );
static void calcDescriptors(const vector& gpyr, const vector& keypoints,
Mat& descriptors, int nOctaveLayers );
protected:
剩余22页未读,继续阅读
资源评论
苦茶子12138
- 粉丝: 1w+
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- java-leetcode题解之第102题二叉树的层序遍历.zip
- java-leetcode题解之第104题二叉树的最大深度.zip
- java-leetcode题解之第173题二叉搜索树迭代器.zip
- java-leetcode题解之第100题相同的树.zip
- java-leetcode题解之第101题对称二叉树.zip
- java-leetcode题解之第128题最长连续序列.zip
- java-leetcode题解之第94题二叉树的中序遍历.zip
- java-leetcode题解之第98题验证二叉搜索树.zip
- java-leetcode题解之第200题岛屿数量.zip
- java-leetcode题解之第130题被围绕的区域.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功