Ссылаясь на this ответ на this question:Как получить ключевую точку «в пределах гомографии»?
Что происходит, что вы рассматриваете все ключевые точки , обнаруженные во втором изображении для расчета повторяемости и фактически только ключевых точек в пределах омографии следует использовать ,
Я не понимаю, как получить
жгутов на ключевые точки гомография
Кто-то может объяснить, как это сделать?
EDIT:
На самом деле, глядя на код 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
отбрасывает точку вне гомографии. Это верно?
Спасибо за ваш ответ. В любом случае, подпись функции, о которой идет речь, - это 'void cv :: evaluationFeatureDetector (const Mat & img1, const Mat & img2, const Mat & H1to2, std :: vector * _keypoints1, std :: vector * _keypoints2, float & repeatability, int & correspCount, const Ptr & _fdetector) ', который кажется отличным от' points_within_the_homograph', который вы определили в своем ответе. –
justHelloWorld
Из того, что я понял из связанного ответа, мне нужно, чтобы '_keypoints2' содержал только точки в гомографии. – justHelloWorld
@justHelloWorld в orde, чтобы получить точки с гомографией, которую вы должны использовать cv :: findHomography этот еще один шаг, который следует принять –