if (!useProvidedKeypoints)
{
impl.Feature_Detection(keypoints);
+ if( !descriptors.needed() )
+ impl.Compute_Keypoints_Orientation(keypoints);
}
if (!mask.empty())
/* ************************************************************************* */
/**
+ * @brief This method computes the main orientation for a given keypoints
+ * @param kpts Input keypoints
+ */
+void AKAZEFeatures::Compute_Keypoints_Orientation(std::vector<KeyPoint>& kpts) const
+{
+ for(size_t i = 0; i < kpts.size(); i++)
+ Compute_Main_Orientation(kpts[i], evolution_);
+}
+
+/* ************************************************************************* */
+/**
* @brief This method computes the upright descriptor (not rotation invariant) of
* the provided keypoint
* @param kpt Input keypoint
/// Feature description methods
void Compute_Descriptors(std::vector<cv::KeyPoint>& kpts, cv::Mat& desc);
static void Compute_Main_Orientation(cv::KeyPoint& kpt, const std::vector<TEvolution>& evolution_);
+ void Compute_Keypoints_Orientation(std::vector<cv::KeyPoint>& kpts) const;
};
/* ************************************************************************* */
CV_FeatureDetectorTest test( "detector-akaze", AKAZE::create() );
test.safe_run();
}
+
+TEST( Features2d_Detector_AKAZE, detect_and_compute_split )
+{
+ Mat testImg(100, 100, CV_8U);
+ RNG rng(101);
+ rng.fill(testImg, RNG::UNIFORM, Scalar(0), Scalar(255), true);
+
+ Ptr<Feature2D> ext = AKAZE::create(AKAZE::DESCRIPTOR_MLDB, 0, 3, 0.001f, 1, 1, KAZE::DIFF_PM_G2);
+ vector<KeyPoint> detAndCompKps;
+ Mat desc;
+ ext->detectAndCompute(testImg, noArray(), detAndCompKps, desc);
+
+ vector<KeyPoint> detKps;
+ ext->detect(testImg, detKps);
+
+ ASSERT_EQ(detKps.size(), detAndCompKps.size());
+
+ for(size_t i = 0; i < detKps.size(); i++)
+ ASSERT_EQ(detKps[i].hash(), detAndCompKps[i].hash());
+}