36 #ifndef _vpMbtFaceDepthDense_h_
37 #define _vpMbtFaceDepthDense_h_
41 #include <visp3/core/vpConfig.h>
43 #include <pcl/point_cloud.h>
44 #include <pcl/point_types.h>
47 #include <visp3/core/vpPlane.h>
48 #include <visp3/mbt/vpMbTracker.h>
49 #include <visp3/mbt/vpMbtDistanceLine.h>
51 #define DEBUG_DISPLAY_DEPTH_DENSE 0
58 DEPTH_OCCUPANCY_RATIO_FILTERING = 1 << 1,
59 MIN_DISTANCE_FILTERING = 1 << 2,
62 MAX_DISTANCE_FILTERING = 1 << 3
70 unsigned int m_clippingFlag;
74 double m_distNearClip;
88 std::string name =
"");
92 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud,
const unsigned int stepX,
93 const unsigned int stepY
94 #
if DEBUG_DISPLAY_DEPTH_DENSE
101 bool computeDesiredFeatures(
const vpHomogeneousMatrix &cMo,
const unsigned int width,
const unsigned int height,
102 const std::vector<vpColVector> &point_cloud,
const unsigned int stepX,
103 const unsigned int stepY
104 #
if DEBUG_DISPLAY_DEPTH_DENSE
113 void computeVisibility();
114 void computeVisibilityDisplay();
117 const vpColor &col,
const unsigned int thickness = 1,
const bool displayFullModel =
false);
119 const vpColor &col,
const unsigned int thickness = 1,
const bool displayFullModel =
false);
122 const double scale = 0.05,
const unsigned int thickness = 1);
124 const double scale = 0.05,
const unsigned int thickness = 1);
126 inline unsigned int getNbFeatures()
const {
return (
unsigned int)(m_pointCloudFace.size() / 3); }
128 inline bool isTracked()
const {
return m_isTrackedDepthDenseFace; }
130 inline bool isVisible()
const {
return m_polygon->
isvisible; }
134 void setScanLineVisibilityTest(
const bool v);
136 inline void setDepthDenseFilteringMaxDistance(
const double maxDistance)
138 m_depthDenseFilteringMaxDist = maxDistance;
141 inline void setDepthDenseFilteringMethod(
const int method) { m_depthDenseFilteringMethod = method; }
143 inline void setDepthDenseFilteringMinDistance(
const double minDistance)
145 m_depthDenseFilteringMinDist = minDistance;
148 inline void setDepthDenseFilteringOccupancyRatio(
const double occupancyRatio)
150 if (occupancyRatio < 0.0 || occupancyRatio > 1.0) {
151 std::cerr <<
"occupancyRatio < 0.0 || occupancyRatio > 1.0" << std::endl;
153 m_depthDenseFilteringOccupancyRatio = occupancyRatio;
157 inline void setTracked(
const bool tracked) { m_isTrackedDepthDenseFace = tracked; }
174 PolygonLine() : m_p1(NULL), m_p2(NULL), m_poly(), m_imPt1(), m_imPt2() {}
176 PolygonLine(
const PolygonLine &polyLine)
177 : m_p1(NULL), m_p2(NULL), m_poly(polyLine.m_poly), m_imPt1(polyLine.m_imPt1), m_imPt2(polyLine.m_imPt2)
183 PolygonLine &operator=(PolygonLine other)
190 void swap(PolygonLine &first, PolygonLine &second)
193 swap(first.m_p1, second.m_p1);
194 swap(first.m_p2, second.m_p2);
195 swap(first.m_poly, second.m_poly);
196 swap(first.m_imPt1, second.m_imPt1);
197 swap(first.m_imPt2, second.m_imPt2);
203 int m_depthDenseFilteringMethod;
205 double m_depthDenseFilteringMaxDist;
207 double m_depthDenseFilteringMinDist;
209 double m_depthDenseFilteringOccupancyRatio;
211 bool m_isTrackedDepthDenseFace;
214 std::vector<vpMbtDistanceLine *> m_listOfFaceLines;
219 std::vector<double> m_pointCloudFace;
221 std::vector<PolygonLine> m_polygonLines;
224 void computeROI(
const vpHomogeneousMatrix &cMo,
const unsigned int width,
const unsigned int height,
225 std::vector<vpImagePoint> &roiPts
226 #
if DEBUG_DISPLAY_DEPTH_DENSE
228 std::vector<std::vector<vpImagePoint> > &roiPts_vec
231 double &distanceToFace);