Skip to content

Commit

Permalink
Merge pull request #3426 from tomoaki0705:handleNonBitExact
Browse files Browse the repository at this point in the history
  • Loading branch information
alalek committed Jan 21, 2023
2 parents 07c6760 + f2e6a30 commit b01f2f9
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 17 deletions.
14 changes: 4 additions & 10 deletions modules/xfeatures2d/test/test_surf.cuda.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,8 @@ CUDA_TEST_P(CUDA_SURF, Detector)
std::vector<cv::KeyPoint> keypoints_gold;
surf_gold->detect(image, keypoints_gold);

ASSERT_EQ(keypoints_gold.size(), keypoints.size());
int lengthDiff = abs((int)keypoints_gold.size()) - ((int)keypoints.size());
EXPECT_LE(lengthDiff, 1);
int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints);
double matchedRatio = static_cast<double>(matchedCount) / keypoints_gold.size();

Expand Down Expand Up @@ -130,7 +131,8 @@ CUDA_TEST_P(CUDA_SURF, Detector_Masked)
std::vector<cv::KeyPoint> keypoints_gold;
surf_gold->detect(image, keypoints_gold, mask);

ASSERT_EQ(keypoints_gold.size(), keypoints.size());
int lengthDiff = abs((int)keypoints_gold.size()) - ((int)keypoints.size());
EXPECT_LE(lengthDiff, 1);
int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints);
double matchedRatio = static_cast<double>(matchedCount) / keypoints_gold.size();

Expand Down Expand Up @@ -171,19 +173,11 @@ CUDA_TEST_P(CUDA_SURF, Descriptor)
EXPECT_GT(matchedRatio, 0.6);
}

#if defined (__x86_64__) || defined (_M_X64)
testing::internal::ValueArray3<SURF_HessianThreshold, SURF_HessianThreshold, SURF_HessianThreshold> thresholdValues =
testing::Values(
SURF_HessianThreshold(100.0),
SURF_HessianThreshold(500.0),
SURF_HessianThreshold(1000.0));
#else
// hessian computation is not bit-exact and lower threshold causes different count of detection
testing::internal::ValueArray2<SURF_HessianThreshold, SURF_HessianThreshold> thresholdValues =
testing::Values(
SURF_HessianThreshold(830.0),
SURF_HessianThreshold(1000.0));
#endif

INSTANTIATE_TEST_CASE_P(CUDA_Features2D, CUDA_SURF, testing::Combine(
thresholdValues,
Expand Down
37 changes: 30 additions & 7 deletions modules/xfeatures2d/test/test_surf.ocl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,35 @@ static int getMatchedPointsCount(std::vector<cv::KeyPoint>& gold, std::vector<cv

int validCount = 0;

for (size_t i = 0; i < gold.size(); ++i)
if (actual.size() == gold.size())
{
const cv::KeyPoint& p1 = gold[i];
const cv::KeyPoint& p2 = actual[i];

if (keyPointsEquals(p1, p2))
++validCount;
for (size_t i = 0; i < gold.size(); ++i)
{
const cv::KeyPoint& p1 = gold[i];
const cv::KeyPoint& p2 = actual[i];

if (keyPointsEquals(p1, p2))
++validCount;
}
}
else
{
std::vector<cv::KeyPoint>& shorter = gold;
std::vector<cv::KeyPoint>& longer = actual;
if (actual.size() < gold.size())
{
shorter = actual;
longer = gold;
}
for (size_t i = 0; i < shorter.size(); ++i)
{
const cv::KeyPoint& p1 = shorter[i];
const cv::KeyPoint& p2 = longer[i];
const cv::KeyPoint& p3 = longer[i+1];

if (keyPointsEquals(p1, p2) || keyPointsEquals(p1, p3))
++validCount;
}
}

return validCount;
Expand Down Expand Up @@ -154,7 +176,8 @@ TEST_P(SURF, Detector)
std::vector<cv::KeyPoint> keypoints_gold;
surf->detect(image, keypoints_gold, cv::noArray());

ASSERT_EQ(keypoints_gold.size(), keypoints.size());
int lengthDiff = abs((int)keypoints_gold.size()) - ((int)keypoints.size());
EXPECT_LE(lengthDiff, 1);
int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints);
double matchedRatio = static_cast<double>(matchedCount) / keypoints_gold.size();

Expand Down

0 comments on commit b01f2f9

Please sign in to comment.