这是我的问题.我在多个图像上手动提取了SURF的关键点特征.但我也已经知道哪一对要匹配.问题是,我正在尝试创建我的匹配对,但我不明白如何.我试着通过查看代码,但这是一个烂摊子.
现在,我知道features.descriptors(一个矩阵)的大小与关键点的数量相同(另一个维度为1).在代码中,为了检测匹配对,它只使用描述符,因此它比较行(或列,我不确定)或两个描述符矩阵,并确定是否有任何共同点.
但就我而言,我已经知道图像1中的关键点i与图像2中的关键点j之间存在匹配.如何将其描述为MatchesInfo值.特别是std :: vector <cv :: DMatch>类型的元素匹配.
编辑:所以,为此,我不需要使用任何匹配器或类似的东西.我知道哪些对在一起!
我想从静态图像中识别车辆(汽车,自行车等).我正在考虑使用SURF来获取有用的关键点和描述符,然后训练MLP(多层感知器)神经网络.但是我不知道神经网络的输入是什么以及它的输出是什么,以便我可以识别车辆所在的图像部分(可能是围绕它绘制的矩形).我知道SURF可以返回图像中的有用关键点及其描述符(我已经这样做了).关键点具有角度,并且每个关键点对应于64或128长的Vector作为描述符.我不知道的是这些关键点究竟是什么以及如何将它们用作神经网络的输入.
我正在使用OpenCV和Python.
我是使用SURF和其他特征提取方法的新手.任何有关这方面的帮助都会非常好.
我试图检测图像中与参考图像类似的对象.以下是我试图完成它的方法:
以下是示例图片:

这是带有SURF关键点的图像:

矩形是基于像"Hierarchial Clustering"这样的聚类方法绘制的.
主要问题是,在这种情况下,它不会单独检测对象,它会将所有内容都检测为一个对象.
有没有办法分离这些关键点,以便单独检测每辆车?这是检测物体的好方法,或者如果有更好的方法请建议.
我正在开发一个OpenCV项目,使用surf来检测图像中的特征.以这种方式初始化检测器
int minHessian = 100;
SurfFeatureDetector detector( minHessian );
Run Code Online (Sandbox Code Playgroud)
有人能解释一下hessian阈值的含义(以数学和实践的方式)吗?
对于我的硕士论文,我正在对SIFT SURF en FAST算法进行一些测试,以便在智能手机上进行徽标检测.
当我只是检测时间,描述匹配某些方法时,我得到以下结果.
对于SURF检测器和SURF描述符:
找到180个关键点
1,994秒关键点计算时间(SURF)
4,516秒描述时间(SURF)
0.282秒匹配时间(SURF)
当我使用FAST探测器代替SURF探测器时
找到319个关键点
0.023秒关键点计算时间(FAST)
1.295秒描述时间(SURF)
0.397秒匹配时间(SURF)
FAST探测器比SURF探测器快得多,甚至可以检测到几乎两倍的关键点快100倍.这些结果是可以预测的.
但下一步不是预测结果.对于319个FAST关键点然后使用180个SURF关键点,de SURF描述符的速度有多快?
据我所知,描述与检测算法无关......但这些结果并不像预测的那样.
有谁知道这是可能的吗?
这是代码:
FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF);
//FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST);
Imgproc.cvtColor(image1, image1, Imgproc.COLOR_RGBA2RGB);
Imgproc.cvtColor(image2, image2, Imgproc.COLOR_RGBA2RGB);
DescriptorExtractor SurfExtractor = DescriptorExtractor
.create(DescriptorExtractor.SURF);
//extract keypoints
long time= System.currentTimeMillis();
detector.detect(image1, keypoints);
Log.d("LOG!", "number of query Keypoints= " + keypoints.size());
detector.detect(image2, logoKeypoints);
Log.d("LOG!", "number of logo Keypoints= " + logoKeypoints.size());
Log.d("LOG!", "keypoint calculation time elapsed" + (System.currentTimeMillis() -time));
//Descript keypoints
long time2 = System.currentTimeMillis();
Mat …Run Code Online (Sandbox Code Playgroud) 目前我正在开展人脸识别项目,我正在使用Fisherfaces/LDA在更广泛的层面上过滤掉图像,然后使用SURF来验证LDA的输出.应该传递给Hessian门槛的是CvSURFParam()什么?OpenCV提供的示例代码有500个.它是最佳的吗?
此外,应该匹配的最小描述符数是多少,以便我的代码可以确认身份?50%会满足吗?
我在Windows上使用OpenCV 2.4和C++.
基本上我有3个像这样的垫子:
Mat descriptors1
Mat descriptors2
Mat descriptors3
Run Code Online (Sandbox Code Playgroud)
每个描述符的加载方式如下:
extractor->compute( object, kp, descriptors );
Run Code Online (Sandbox Code Playgroud)
我怎么能在单个Mat中加入所有描述符(将一个mat添加到另一个)?
例:
Mat fullDesc = descriptors1 + descriptors2 + descriptors3;
Run Code Online (Sandbox Code Playgroud) 我最近一直致力于解决对象跟踪问题.我需要做的是识别和跟踪可能在2D平面上移动的3D对象,即x和y的平移,以及z周围的旋转.要跟踪的对象是预先知道的,并且可以从中提取任何所需信息.还假设照明条件不会发生任何严重变化,并且背景将保持相对静止.要跟踪的对象通常不是单一颜色,因此不能选择按颜色跟踪.
我已经使用背景减法和动态模板匹配成功实现了跟踪多个2D对象的原型.我现在想扩展到跟踪3D对象,但到目前为止,我对我发现/实现的内容感到失望.我将列出我所做的一些尝试,希望有人可以解释一下.
1.)动态模板匹配:我希望用户在视频框架中选择对象,然后在对象周围定义搜索区域.然后在该区域内搜索该对象. 这个片段最初给了我这个想法.不幸的是,这对我来说并不适用,因为物体在旋转时会丢失(将其转回相机).我还尝试在找到对象时不断更新模板,但这会导致模板在目标对象被遮挡时成为另一个(外部)对象.
2.)Lucas-Kanade光流:我使用OpenCV的goodFeaturesToTrack来找到一些跟踪的好点,并尝试使用calcOpticalFlowPyrLK通过多个帧跟踪这些点.但是,这种算法的性能有点令人失望.我将它应用于牛津走廊数据集,但我最初检测到的点很快就会丢失.
3.)SURF:我试图用SURF检测特征,但问题在于很难将其应用于可能因不同视角而有很大差异的3D对象.我希望找到有关cv2的SURF的文档,因为这似乎提供了为SURF Feature提取器提供关键点的功能(可能来自goodFeaturesToTrack).不幸的是,我还没有办法做到这一点.关于SO的问题:OpenCV:从用户定义的关键点提取SURF功能
背景:我有一个固定的摄像头,我在台式电脑上完成所有处理.我在Windows 7上使用OpenCV的Python包装器和Eclipse的PyDev插件.
如果有人可以提出任何其他技术来尝试,甚至一些指针来提高已经提到的技术的性能,我将非常感激.
我试图理解FeatureDetector班级和FeatureFinder班级之间的区别.我已经看到在OpenCV中编写的全景示例使用这两个类,并且似乎可以将SURF算法与其中任何一个一起使用.据我所知,由于SURF算法可能出现问题而SURF FeatureDetector被移动/nonfree,但是,FeatureFinder也可以采用该SURF算法.
这两个班级有什么区别?
我的目标是在静态图像和视频中找到已知的徽标.我希望通过使用KAZE或AKAZE和RanSac进行特征检测来实现这一目标.
我的目标是:https://www.youtube.com/watch?v = nzrqH ...