发生的情况是,您正在考虑在第二张图像中检测到的所有关键点来计算可重复性,实际上应该只使用单应性内的关键点。
我不明白如何获得
具有单应性的关键点
有人可以解释怎么做吗?
编辑:
实际上看evaluation.cpp
我认为这个操作已经执行的代码。事实上,看:
float overlapThreshold;
bool ifEvaluateDetectors = thresholdedOverlapMask == 0;
if( ifEvaluateDetectors )
{
overlapThreshold = 1.f - 0.4f;
// remove key points from outside of the common image part
Size sz1 = img1.size(), sz2 = img2.size();
filterEllipticKeyPointsByImageSize( keypoints1, sz1 );
filterEllipticKeyPointsByImageSize( keypoints1t, sz2 );
filterEllipticKeyPointsByImageSize( keypoints2, sz2 );
filterEllipticKeyPointsByImageSize( keypoints2t, sz1 );
}
else
{
overlapThreshold = 1.f - 0.5f;
thresholdedOverlapMask->create( (int)keypoints1.size(), (int)keypoints2t.size(), CV_8UC1 );
thresholdedOverlapMask->setTo( Scalar::all(0) );
}
默认情况下考虑这一点thresholdedOverlapMask=0
。所以里面的部分if
丢弃了单应性外面的点。那是对的吗?