MRPT  1.9.9
CFeatureExtraction_polarImg.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2019, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #include "vision-precomp.h" // Precompiled headers
11 
13 
14 // Universal include for all versions of OpenCV
15 #include <mrpt/otherlibs/do_opencv_includes.h>
16 
17 using namespace mrpt;
18 using namespace mrpt::vision;
19 using namespace mrpt::img;
20 using namespace mrpt::system;
21 using namespace std;
22 
23 // Linear-Polar Transform
24 // J.L. Blanco, Apr 2009
25 // Code contributed to OpenCV 1.1.1 long time ago. Removed from MRPT now.
26 
28  const mrpt::img::CImage& in_img, CFeatureList& in_features)
29 {
31 #if MRPT_HAS_OPENCV
32 
34  profiler, "internal_computePolarImageDescriptors");
35 
36  ASSERT_(options.PolarImagesOptions.radius > 1);
37  ASSERT_(options.PolarImagesOptions.bins_angle > 1);
38  ASSERT_(options.PolarImagesOptions.bins_distance > 1);
39 
40  const unsigned int radius = options.PolarImagesOptions.radius;
41  const unsigned int patch_w = options.PolarImagesOptions.bins_distance;
42  const unsigned int patch_h = options.PolarImagesOptions.bins_angle;
43 
44  CImage linpolar_frame(patch_w, patch_h, in_img.getChannelCount());
45 
46  // Compute intensity-domain spin images
47  for (auto it = in_features.begin(); it != in_features.end(); ++it)
48  {
49  // Overwrite scale with the descriptor scale:
50  it->keypoint.octave = radius;
51 
52 #if MRPT_OPENCV_VERSION_NUM < 0x300
53  const cv::Mat& in = in_img.asCvMatRef();
54  cv::Mat& out = linpolar_frame.asCvMatRef();
55  cvLinearPolar(
56  &in, &out,
57 #else
58  cv::linearPolar(
59  in_img.asCvMatRef(), linpolar_frame.asCvMatRef(),
60 #endif
61  cv::Point2f(it->keypoint.pt.x, it->keypoint.pt.y), radius,
62  CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
63 
64  // Get the image as a matrix and save as patch:
65  linpolar_frame.getAsMatrix(*it->descriptors.PolarImg);
66 
67  } // end for it
68 
69 #else
70  THROW_EXCEPTION("This method needs MRPT compiled with OpenCV support");
71 #endif
72  MRPT_END
73 }
#define MRPT_START
Definition: exceptions.h:241
#define THROW_EXCEPTION(msg)
Definition: exceptions.h:67
A safe way to call enter() and leave() of a mrpt::system::CTimeLogger upon construction and destructi...
cv::Mat & asCvMatRef()
Get a reference to the internal cv::Mat, which can be resized, etc.
Definition: CImage.cpp:233
TImageChannels getChannelCount() const
Returns the number of channels, typically 1 (GRAY) or 3 (RGB)
Definition: CImage.cpp:898
STL namespace.
#define ASSERT_(f)
Defines an assertion mechanism.
Definition: exceptions.h:120
Classes for computer vision, detectors, features, etc.
Definition: CDifodo.h:17
A list of visual features, to be used as output by detectors, as input/output by trackers, etc.
Definition: CFeature.h:275
void internal_computePolarImageDescriptors(const mrpt::img::CImage &in_img, CFeatureList &in_features)
Compute a polar-image descriptor of the provided features into the input image.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define MRPT_END
Definition: exceptions.h:245
GLuint in
Definition: glext.h:7391
A class for storing images as grayscale or RGB bitmaps.
Definition: img/CImage.h:147



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 8fe78517f Sun Jul 14 19:43:28 2019 +0200 at lun oct 28 02:10:00 CET 2019