标签: feature-descriptor

无法在android中实现描述符

我正在创建一个查找两个图像之间匹配的应用程序.我无法正确找到匹配结果.

匹配方法给出了与输入关键点相同数量的描述符,我也无法绘制此结果.我在工作区中使用OpenCV作为库.

这是我的代码.

  Bitmap mBitmap1 = mimage1.copy(Bitmap.Config.ARGB_8888, false); 
  Bitmap mBitmap2 = mimage2.copy(Bitmap.Config.ARGB_8888, false); 

  Mat s_image1 = Utils.bitmapToMat(mBitmap1);
  Mat s_image2 = Utils.bitmapToMat(mBitmap2);

  Mat rgb1 = new Mat();
  Mat rgb2 = new Mat();
  Mat rgb3 = new Mat();
  Mat temp = new Mat();

  Mat o_image1 = new Mat();
  Mat o_image2 = new Mat();
  Mat o_image3 = new Mat();

  List<KeyPoint> points1 = new ArrayList<KeyPoint>();
  List<KeyPoint> points2 = new ArrayList<KeyPoint>();
  List<DMatch> matches = new ArrayList<DMatch>();

  FeatureDetector surf = FeatureDetector.create(FeatureDetector.SURF);
  surf.detect(s_image1, points1);
  surf.detect(s_image2, points2);

  Scalar …
Run Code Online (Sandbox Code Playgroud)

java android opencv matching feature-descriptor

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

OpenCV FREAK:快速Retina KeyPoint描述符

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

文档中只显示两个函数:

  • 类构造函数

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

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

题:

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

opencv freak feature-descriptor

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

为什么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 ORB描述符 - 它是如何存储在一组字节中的?

我目前正在使用OpenCV的ORB特征提取器,我确实注意到存储ORB描述符的奇怪(至少对我而言)(它基本上是一个Brief-32,其修改与我的问题无关).由于一些你知道ORB需要使用改良的FAST-9提取的关键点(圆半径= 9个像素;还存储所述关键点的方向),并使用那些具有修饰的附图-32的描述符存储的特征,即关键点表示.

BRIEF(ORB版)的工作原理如下:我们采用31x31像素的补丁(代表一个特征)并创建一堆随机的5x5像素测试点.然后我们采用这些点的对并评估它们的强度,从而基于该对中的第一点的强度是大于还是小于第二点的强度来产生二元决策(0或1).然后我们取所有这些位并使用基本求和公式来构建长度为n的二进制字符串(对于BRIEF-32,我们有32个字节*8 = 256位长的二进制字符串):

SUM(2 (i-1)*bit_pair_test)

其中bit_pair_test是我们从一对测试点的测试中计算出的位值.最终的结果是(对于一组二进制测试(...,0,1,0,1,1)):

(2 0*1)+(2 1*1)+(2 2*0)+(2 3*1)+(2 4*0)+ ...

现在,OpenCV的ORB存储这些位串的方式对我来说是个谜.如果我们查看包含整个图像的描述符的矩阵,其中每一行是单个关键点的单个描述符,我们可以看到每个描述符有32个8位数,这总共产生了Brief-32使用的那些256位存储信息.我不明白为什么我们在32字节中分割这256位.官方文档(http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_brief/py_brief.html)只说以字节为单位的OpenCV商店这样的描述,但它并不能解释为什么它做到这一点.我已经考虑了三种可能性,但没有排除这些可能是答案的可能性的可能性:

  • 我看不到的一些存储技术
  • 二进制字符串计算汉明距离的一些性能问题很长(在我们的例子中是256位)
  • 匹配过程的优化 - 匹配基本上将来自一个图像的关键点的描述符与第二图像中的关键点的描述符进行比较.因为我们有二进制字符串汉明距离是这里显而易见的选择.这可能是某种方式每那些32个子串进行比较,它们在第二图像(子串的其它关键点的描述符在位置0对应在位置0(关键点X,图像1)与子串( .关键点Y,图像2)最后它可能是OpenCV的说:"好吧,我们有描述符的匹配率80%,因为约的所有子串26是相同的两个描述符),所以我们有一个赢家." 但是我无法找到任何证据证实这一点.

PS:你可以阅读ORB纸在这里和简单的文件在这里.

storage opencv orb feature-descriptor

16
推荐指数
1
解决办法
5522
查看次数

ORB的实施

我刚刚使用了ORB的开源实现.

如何通过添加新模块来进一步实现ORB?

为了获得比使用ORB更好的结果,我能做些什么呢?

我正在考虑使用RANSAC来消除异常值并获得更好的结果.

我们在这一点上等待进一步实施ORB的想法.

有关圆形和三角形的Homography实现的任何想法?

feature-extraction feature-detection orb feature-descriptor

10
推荐指数
0
解决办法
418
查看次数

打印关键点描述符矩阵opencv的值

我在打印通过使用任何opencv描述符提取器的'compute'方法获得的描述符矩阵的值时遇到一些麻烦.我想逐个打印一个特征的描述符,但是当我用'at'访问描述符矩阵的某个元素时,我会收到该元素的不同值.以下是'for'循环,用于在使用'at'时测试描述符矩阵的输出值:

for(int i=0; i<nF; i++){

    if(lpx != keypoints[i].pt.x && lpy != keypoints[i].pt.y){
        usedFeatures++;
        cerr << descriptors.row(i) << endl << endl; // printing row of descriptor matrix
        fileS << keypoints[i].pt.y << " " << keypoints[i].pt.x << " ";
        fileS << keypoints[i].size << " " << keypoints[i].angle << endl;

        if(i == nF - 2){
            //printing subvector of descriptor matrix made of the element at row i and col 0
            cerr << "get row i, col 0 " << descriptors.row(i).col(0) << endl;

            //same …
Run Code Online (Sandbox Code Playgroud)

c++ opencv matrix unsigned-char feature-descriptor

8
推荐指数
1
解决办法
8121
查看次数

如何训练HOG并使用我的HOGDescriptor?

我想训练数据并使用HOG算法来检测行人.现在我可以用defaultHog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());opencv来检测,但结果不是我的测试视频非常好.所以我想训练使用我的数据库.

我准备了1000多个阳性样本和1000多个阴性样本.它们裁剪为50*100,我已经完成了列表文件.

我在互联网上阅读了一些教程,它们都非常复杂,有时甚至是深奥的.他们中的大多数都是分析HOG的源代码和算法.但只有更少的例子和简单的任意大小.

一些指示显示libsvm\windows\svm-train.exe可以用于训练,任何人都可以根据1000 + 50*100阳性样本给出一个例子吗?
例如,haartraing我们可以opencvhaartraining.exe –a –b使用某些参数一样从中获取*.xml结果,并将其用于人员检测?

还是有其他方法来训练和检测?

我更喜欢知道如何使用它和详细程序.作为细节算法,对我来说并不重要.我只是想实现它.

如果有人知道,请给我一些提示.

opencv histogram feature-descriptor

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

如何在SURF,SIFT和ORB匹配结果上应用RANSAC

我正在进行图像处理.我想匹配2D功能,我在SURF,SIFT,ORB上做了很多测试.
如何在OpenCV中对SURF/SIFT/ORB应用RANSAC?

opencv feature-extraction ransac orb feature-descriptor

6
推荐指数
2
解决办法
3万
查看次数

比较没有 SVM 的 HOG 特征向量

我是计算机视觉的新手,目前正在做一个关于形状检测的学习项目,其中我在最有可能存在对象的所有图像中都有一个固定的感兴趣区域(ROI),我必须比较它们的形状以确定是否两个输入图像中存在的物体是否相同。有轻微的平移和尺度变化以及光照变化。

我正在尝试比较两个输入图像之间对象的形状,并尝试提供描述它们相似性的输出值。如果相似度高于某个阈值,我可以判断出两个输入图像中都存在相同的对象。

我试过轮廓,但它没有给出可靠的结果(阈值要么给出太多细节要么错过了一些重要的细节)并且不能很好地概括到所有图像。我正在考虑使用像 HOG 这样的全局形状描述符。

但是我在理解 HOG 描述符中的特征向量值时遇到了问题。如何在不使用 SVM 或机器学习的情况下比较两个输入图像的 HOG 特征向量(1D)以找到相似性?比较 HOG 特征向量的最佳方法是什么?

我不明白距离度量如何用于比较未来向量。我想了解如何使用距离来比较特征向量和直方图的物理意义?如何使用它们来比较 HOG 特征向量?

python opencv distance feature-extraction feature-descriptor

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

计算机视觉和机器学习中特征描述符的解释

我已经开始大量使用计算机视觉技术,主要是深度学习,但我想尝试很好地理解更传统的技术,并打下良好的基础。我一直在尝试一些手动特征工程技术,用于使用 RF 和 SVM 分类器进行分类。我研究了 HOG 和 LBP 描述符等纹理表示以及边缘滤波器、gabor 滤波器和傅里叶描述符等空间特征。我缺乏的是不同功能如何分组以及它们各自属于什么类别的好主意。我知道有些被定义为全局和本地,但这到底意味着什么以及哪些?我还应该考虑其他类别,例如纹理和几何吗?任何解释都会有用并且非常感激(我在网上查了很多,但这一切似乎都有点支离破碎)

谢谢!

machine-learning image-processing feature-extraction computer-vision feature-descriptor

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