Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 比赛后的距离是多少?_C++_Opencv_Sift_Surf_Keypoint - Fatal编程技术网

C++ 比赛后的距离是多少?

C++ 比赛后的距离是多少?,c++,opencv,sift,surf,keypoint,C++,Opencv,Sift,Surf,Keypoint,基本上,我有: BruteForceMatcher<L2<float>>().knnMatch(descriptor1,descriptor2,matches,2); 描述符-是N维空间的一个点 匹配-是一对描述符-一个来自第一个集合,另一个来自第二个集合(也称为训练集和查询集) 距离-是match结构指向的两个描述符的L2度量。(您正在将度量类型指定为BruteForceMatcher的模板参数) 因此knnMatch从查询集中为序列集中的每个描述符返回两个最近的描述

基本上,我有:

BruteForceMatcher<L2<float>>().knnMatch(descriptor1,descriptor2,matches,2);
描述符-是N维空间的一个点

匹配-是一对描述符-一个来自第一个集合,另一个来自第二个集合(也称为训练集和查询集)

距离-是
match
结构指向的两个描述符的
L2
度量。(您正在将度量类型指定为
BruteForceMatcher
的模板参数)


因此
knnMatch
从查询集中为序列集中的每个描述符返回两个最近的描述符。接下来,当找到的两个描述符彼此接近时,您将过滤掉这些情况。

可能是同一个关键点。但是,如果图像有任何差异,那么同一关键点的描述符也会不同,并且如果具有良好的概率,来自另一关键点的描述符可以更接近。您能告诉我KMMATCH方法中计算的距离是多少吗。是欧几里德距离还是什么。谢谢。这种过滤的想法是删除不可靠的匹配-我们不能说哪一个更好的匹配(只看描述符)。最初的规则比你对这个任务的建议更好:想象一个圆——圆的中心——是我们的火车描述符。两个最佳匹配点是位于直径两端的点。在这种情况下,这些匹配之间的距离将很大,但它们与列描述符的点无法区分。@Andrey:只有一件事:如果两个最佳匹配位于直径的对端,如何才能最好?我的意思是,BruteForceMatcher将每个序列描述符与每个查询描述符进行比较,计算它们的欧几里安距离(或其他什么…),也许我不明白
.distance
的真正含义。(我对你们写的任何东西都投了赞成票:)你们是对的,BruteforceMatcher正在进行穷举搜索——它将来自train的每个描述符与来自查询的每个描述符进行比较。而
knnMatch
只是返回2(N)个距离最小的描述符。如果两个最好的具有相同的距离,也没有什么不寻常的。我之前的评论说明了它在2D情况下的样子-两个最近的是等距的,其他的在该圆之外(对于N=2,knnMatch不会返回它们)
if( (matches[i][0].distance / matches[i][1].distance) < ratio ){
  //> Good match!
}
//> I calculate the distance between 2 nearest neighborhood and filter it based on thresold
foreach( matches : i) {
 if ( euclianDistance( matches[i][0] , matches[i][1] ) < threshold ) {
   //> good match
 }
}
match[i][0].distance = L2(descriptor1.row(match[i][0].trainIdx),
                          descriptor2.row(match[i][0].queryIdx))