supereight
dense_pooling_image.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2019-2021 Smart Robotics Lab, Imperial College London, Technical University of Munich
3  * SPDX-FileCopyrightText: 2019-2021 Nils Funk
4  * SPDX-FileCopyrightText: 2021 Sotiris Papatheodorou
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef SE_DENSE_POOLING_IMAGE
9 #define SE_DENSE_POOLING_IMAGE
10 
11 #include <Eigen/Dense>
12 #include <iostream>
13 
14 #include "se/common/perfstats.hpp"
15 #include "se/common/timings.hpp"
16 #include "se/image/image.hpp"
17 #include "se/sensor/sensor.hpp"
18 
19 
20 
21 namespace se {
22 
23 using Value = float;
24 using Status = int;
25 
26 struct Pixel {
29 
30  // STATUS Crossing: Voxel image intersection
31  // outside := 2;
32  // crossing := 1;
33  // inside := 0;
34  enum statusCrossing { inside = 0, crossing = 1, outside = 2 };
35 
36  // STATUS Known: Voxel content
37  // unknown := 2;
38  // partially known := 1;
39  // known := 0;
40  enum statusKnown { known = 0, part_known = 1, unknown = 2 };
41 
44 
45  Pixel(){};
46 
47  Pixel(Value min, Value max, statusCrossing status_crossing, statusKnown status_known) :
48  min(min), max(max), status_crossing(status_crossing), status_known(status_known){};
49 
50  // Inside pixel //
51 
52  // Init known pixel
53  static Pixel knownPixel()
54  {
55  Pixel knownPixel(std::numeric_limits<Value>::max(),
56  std::numeric_limits<Value>::min(),
57  statusCrossing::inside,
58  statusKnown::known);
59  return knownPixel;
60  };
61 
62  // Init unknown pixel
64  {
65  Pixel unknownPixel(std::numeric_limits<Value>::max(),
66  std::numeric_limits<Value>::min(),
67  statusCrossing::inside,
68  statusKnown::unknown);
69  return unknownPixel;
70  };
71 
72  // Crossing pixel //
73 
75  {
76  Pixel crossingPixel(std::numeric_limits<Value>::max(),
77  std::numeric_limits<Value>::min(),
78  statusCrossing::crossing,
79  statusKnown::known);
80  return crossingPixel;
81  };
82 
83  // Init crossing partially known pixel
85  {
86  Pixel crossingPixel(std::numeric_limits<Value>::max(),
87  std::numeric_limits<Value>::min(),
88  statusCrossing::crossing,
89  statusKnown::part_known);
90  return crossingPixel;
91  };
92 
94  {
95  Pixel crossingPixel(std::numeric_limits<Value>::max(),
96  std::numeric_limits<Value>::min(),
97  statusCrossing::crossing,
98  statusKnown::unknown);
99  return crossingPixel;
100  };
101 
102  // Outside pixel //
103 
104  // Init outside pixel
106  {
107  Pixel outsidePixel(0, 0, statusCrossing::outside, statusKnown::unknown);
108  return outsidePixel;
109  };
110 };
111 
112 template<typename SensorImplType>
114  public:
115  using Img = std::vector<Pixel>;
116  using Imgs = std::vector<Img>;
117 
118  DensePoolingImage(const se::Image<float>& depth_image);
119 
120  bool inImage(const int u, const int v) const;
121  Pixel conservativeQuery(const Eigen::Vector2i& bb_min, const Eigen::Vector2i& bb_max) const;
122  Pixel poolBoundingBox(int u_min, int u_max, int v_min, int v_max) const;
123 
124  int width() const
125  {
126  return image_width_;
127  };
128  int height() const
129  {
130  return image_height_;
131  };
132  Value maxValue() const
133  {
134  return image_max_value_;
135  };
136  int maxLevel() const
137  {
138  return image_max_level_;
139  }
140 
141  private:
142  int image_max_level_;
143  int image_width_;
144  int image_height_;
145  Imgs pooling_image_;
146  Value image_max_value_;
147 };
148 
149 
150 
151 } // namespace se
152 
153 #include "impl/dense_pooling_image_impl.hpp"
154 
155 #endif // SE_DENSE_POOLING_IMAGE
Definition: dense_pooling_image.hpp:34
Value min
Definition: dense_pooling_image.hpp:27
Definition: dense_pooling_image.hpp:40
static Pixel crossingUnknownPixel()
Definition: dense_pooling_image.hpp:93
Definition: dense_pooling_image.hpp:34
Value maxValue() const
Definition: dense_pooling_image.hpp:132
float Value
Definition: dense_pooling_image.hpp:23
int Status
Definition: dense_pooling_image.hpp:24
Definition: dense_pooling_image.hpp:26
Definition: dense_pooling_image.hpp:40
Definition: dense_pooling_image.hpp:40
Value max
Definition: dense_pooling_image.hpp:28
Definition: dense_pooling_image.hpp:113
static Pixel outsidePixelBatch()
Definition: dense_pooling_image.hpp:105
int width() const
Definition: dense_pooling_image.hpp:124
Definition: dense_pooling_image.hpp:34
static Pixel crossingPartKnownPixel()
Definition: dense_pooling_image.hpp:84
Pixel()
Definition: dense_pooling_image.hpp:45
std::vector< Img > Imgs
Definition: dense_pooling_image.hpp:116
std::vector< Pixel > Img
Definition: dense_pooling_image.hpp:115
int height() const
Definition: dense_pooling_image.hpp:128
static Pixel unknownPixel()
Definition: dense_pooling_image.hpp:63
statusKnown status_known
Definition: dense_pooling_image.hpp:43
statusCrossing status_crossing
Definition: dense_pooling_image.hpp:42
static Pixel knownPixel()
Definition: dense_pooling_image.hpp:53
statusCrossing
Definition: dense_pooling_image.hpp:34
Pixel(Value min, Value max, statusCrossing status_crossing, statusKnown status_known)
Definition: dense_pooling_image.hpp:47
statusKnown
Definition: dense_pooling_image.hpp:40
Helper wrapper to allocate and de-allocate octants in the octree.
Definition: colour_utils.hpp:17
static Pixel crossingKnownPixel()
Definition: dense_pooling_image.hpp:74
int maxLevel() const
Definition: dense_pooling_image.hpp:136