标签: freak

为什么opencv FREAK提取器会删除这么多关键点,特别是使用ORB检测器

我正在使用OpenCV 2.4.3 c ++接口来查找两个图像之间的匹配点.第一次尝试是使用SURF.唯一的问题是消耗时间,所以我尝试了新的FREAK提取器.使用SURF进行检测和FREAK进行描述,我意识到FREAK将关键点的数量减少到几乎检测到的一半,并且得到的匹配不够.这就是原因,我尝试了FAST以获得更多关键点.结果:

  1. SURF检测器,SURF提取器,BFMatcher交叉检查true,RANSAC:70关键第一图像,50关键点第二图像,200ms.250毫秒.为15ms.为15ms.
  2. SURF检测器,FREAK提取器,BFMatcher交叉检查true,RANSAC:39个关键点第一个图像,30个关键点第二个图像(FREAK之后),200ms.,50 ms.,0ms.,0ms.这导致很少有良好的匹配.
  3. FAST检测器,FREAK提取器,BFMatcher交叉检查true,RANSAC:120个关键点,90个关键点,(FREAK后69和48个关键点),10ms.,450 ms.,15 ms.,10 ms.

之后,我使用了ORBFeatureDetector,它获得了与FAST相同数量的关键点,但在FREAK提取器之后,每个图像的结果关键点为0.难道我做错了什么?ORB关键点是否与从FAST获得的关键点不同?也许我可以为此开另一个问题,但我有最后一个问题.检测器/提取器的最佳组合是什么才能获得与使用SURF的第一次实验相同的结果,但缩短处理时间?因为虽然我使用了FREAK,但是当我获得更多关键点时,提取器部分也更耗时.

opencv extractor orb freak feature-descriptor

17
推荐指数
1
解决办法
5695
查看次数

OpenCV FREAK:快速Retina KeyPoint描述符

我正在开发一个应用程序,它涉及使用刚刚在OpenCV2.4.2版本中发布的Freak描述符.

文档中只显示两个函数:

  • 类构造函数

  • 一种令人困惑的方法 selectPairs()

我想使用我自己的探测器然后调用FREAK描述符传递检测到的关键点,但我不清楚该类是如何工作的.

题:

我是否严格需要使用selectPairs()?只是打电话就够了FREAK.compute()吗?我真的不明白哪个是selectPairs的用法.

opencv freak feature-descriptor

17
推荐指数
2
解决办法
1万
查看次数

使用Opencv Python进行FREAK描述

我试图使用Opencv在Python中实现FREAK描述符.这是我正在使用的代码:

def surf_freak_detect(image,hessianThreshold):
    surfDetector = cv2.SURF(hessianThreshold)
    surfDetector=cv2.GridAdaptedFeatureDetector(surfDetector,50)
    keypoints = surfDetector.detect(image,None) 
    freakExtractor = cv2.DescriptorExtractor_create('FREAK')
    keypoints,descriptors= freakExtractor.compute(image,keypoints)
    del freakExtractor
    return keypoints,descriptors
Run Code Online (Sandbox Code Playgroud)

这是初始化怪胎描述符的正确方法吗?通过一些调试,我发现解释器需要花费很长时间来计算描述符然后最终崩溃.正确检测关键点.奇怪的是,它有时有效,有时只是崩溃!

python opencv feature-detection freak

12
推荐指数
2
解决办法
5581
查看次数

OpenCV FREAK返回太多异常值

我正在尝试从freak_demo.cpp 示例之后的最新版本的OpenCV中获取全新的描述符FREAK .而不是使用SURF我使用FAST.我的基本代码是这样的:

std::vector<KeyPoint> keypointsA, keypointsB;
Mat descriptorsA, descriptorsB;
std::vector<DMatch> matches;

FREAK extractor;
BruteForceMatcher<Hamming> matcher;

FAST(imgA,keypointsA,100);
FAST(imgB,keypointsB,20);

extractor.compute( imgA, keypointsA, descriptorsA );
extractor.compute( imgB, keypointsB, descriptorsB );

matcher.match(descriptorsA, descriptorsB, matches);
Run Code Online (Sandbox Code Playgroud)
  • 该算法找到了很多匹配,但是有很多异常值.我做对了吗?有没有办法调整算法?

c++ opencv freak

7
推荐指数
1
解决办法
2436
查看次数

MATLAB中的BRISK和FREAK描述符

我正在使用MATLAB 2014a来提取BRISKFREAK描述符.我找不到任何将位串大小减小到128256的选项,它们都生成为512位.我认为FREAK不允许这种算法,但BRISK应该允许.有谁知道我是否可以减少BRISK描述符的维度?如果是,我该怎么办?

谢谢

matlab feature-extraction computer-vision freak matlab-cvst

6
推荐指数
1
解决办法
1404
查看次数

将一行cv :: Mat转换为int

我有一个来自FREAK描述提取的描述符矩阵,其中每一行是64个元素的描述符.

vector <int*>由于系统要求,我需要从这个矩阵创建一个.到目前为止我试过这个:

Mat _descriptors;
std::vector<int*> descriptors;
int row;
for (int i=0; i<_descriptors.rows;i++)
{
    row =(int) _descriptors.row(i).data;
    descriptors.push_back( & row );
}
Run Code Online (Sandbox Code Playgroud)

这是正确的还是有更好的方法?

c++ opencv freak

6
推荐指数
1
解决办法
2432
查看次数

在OpenCV中找不到FREAK探测器

我正在OpenCV 2.4中开发一些代码,我想测试FREAK检测器,但是我得到了编译错误.我包含feature2d.h,我该怎么做才能解决这个问题?

c++ opencv freak

4
推荐指数
1
解决办法
333
查看次数