15 #include <mrpt/3rdparty/do_opencv_includes.h>
30 profiler,
"internal_computeLogPolarImageDescriptors");
32 ASSERT_(options.LogPolarImagesOptions.radius > 1);
33 ASSERT_(options.LogPolarImagesOptions.num_angles > 1);
34 ASSERT_(options.LogPolarImagesOptions.rho_scale > 0);
36 const unsigned int radius = options.LogPolarImagesOptions.radius;
37 const unsigned int patch_h = options.LogPolarImagesOptions.num_angles;
38 const double rho_scale = options.LogPolarImagesOptions.rho_scale;
39 const unsigned int patch_w =
40 mrpt::round(rho_scale * std::log(
static_cast<double>(radius)));
46 for (
auto& f : in_features)
49 f.keypoint.octave = radius;
51 const auto pt = cv::Point2f(f.keypoint.pt.x, f.keypoint.pt.y);
56 #if MRPT_OPENCV_VERSION_NUM < 0x300
62 &cvin, &cvout, pt, radius, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
63 #elif MRPT_OPENCV_VERSION_NUM < 0x342
67 round(1 + 2 * radius),
round(1 + 2 * radius))),
68 out, pt, radius, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
72 in,
out, cv::Size(patch_w, patch_h), pt, radius,
73 cv::INTER_LINEAR + cv::WARP_FILL_OUTLIERS + cv::WARP_POLAR_LOG);
77 f.descriptors.LogPolarImg.emplace();
78 logpolar_frame.
getAsMatrix(*f.descriptors.LogPolarImg);