36 #ifndef _vpMbtFaceDepthNormal_h_ 37 #define _vpMbtFaceDepthNormal_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_NORMAL 0 62 ROBUST_FEATURE_ESTIMATION = 0,
63 ROBUST_SVD_PLANE_ESTIMATION = 1,
65 PCL_PLANE_ESTIMATION = 2
90 std::string name =
"");
93 bool computeDesiredFeatures(
const vpHomogeneousMatrix &cMo,
unsigned int width,
unsigned int height,
94 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud,
95 vpColVector &desired_features,
unsigned int stepX,
unsigned int stepY
96 #
if DEBUG_DISPLAY_DEPTH_NORMAL
103 bool computeDesiredFeatures(
const vpHomogeneousMatrix &cMo,
unsigned int width,
unsigned int height,
104 const std::vector<vpColVector> &point_cloud,
vpColVector &desired_features,
105 unsigned int stepX,
unsigned int stepY
106 #
if DEBUG_DISPLAY_DEPTH_NORMAL
115 void computeVisibility();
116 void computeVisibilityDisplay();
118 void computeNormalVisibility(
double nx,
double ny,
double nz,
const vpColVector ¢roid_point,
121 void computeNormalVisibility(
float nx,
float ny,
float nz,
const pcl::PointXYZ ¢roid_point,
122 pcl::PointXYZ &face_normal);
124 void computeNormalVisibility(
double nx,
double ny,
double nz,
const vpHomogeneousMatrix &cMo,
128 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false);
130 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false);
133 double scale = 0.05,
unsigned int thickness = 1);
135 double scale = 0.05,
unsigned int thickness = 1);
138 double scale = 0.05);
140 std::vector<std::vector<double> > getModelForDisplay(
unsigned int width,
unsigned int height,
143 bool displayFullModel =
false);
145 inline bool isTracked()
const {
return m_isTrackedDepthNormalFace; }
161 m_pclPlaneEstimationRansacThreshold = threshold;
164 void setScanLineVisibilityTest(
bool v);
166 inline void setTracked(
bool tracked) { m_isTrackedDepthNormalFace = tracked; }
183 PolygonLine() : m_p1(NULL), m_p2(NULL), m_poly(), m_imPt1(), m_imPt2() {}
185 PolygonLine(
const PolygonLine &polyLine)
186 : m_p1(NULL), m_p2(NULL), m_poly(polyLine.m_poly), m_imPt1(polyLine.m_imPt1), m_imPt2(polyLine.m_imPt2)
192 PolygonLine &operator=(PolygonLine other)
199 void swap(PolygonLine &first, PolygonLine &second)
202 swap(first.m_p1, second.m_p1);
203 swap(first.m_p2, second.m_p2);
204 swap(first.m_poly, second.m_poly);
205 swap(first.m_imPt1, second.m_imPt1);
206 swap(first.m_imPt2, second.m_imPt2);
210 template <
class T>
class Mat33
217 inline T operator[](
const size_t i)
const {
return data[i]; }
219 inline T &operator[](
const size_t i) {
return data[i]; }
221 Mat33 inverse()
const 224 T det = data[0] * (data[4] * data[8] - data[7] * data[5]) - data[1] * (data[3] * data[8] - data[5] * data[6]) +
225 data[2] * (data[3] * data[7] - data[4] * data[6]);
229 minv[0] = (data[4] * data[8] - data[7] * data[5]) * invdet;
230 minv[1] = (data[2] * data[7] - data[1] * data[8]) * invdet;
231 minv[2] = (data[1] * data[5] - data[2] * data[4]) * invdet;
232 minv[3] = (data[5] * data[6] - data[3] * data[8]) * invdet;
233 minv[4] = (data[0] * data[8] - data[2] * data[6]) * invdet;
234 minv[5] = (data[3] * data[2] - data[0] * data[5]) * invdet;
235 minv[6] = (data[3] * data[7] - data[6] * data[4]) * invdet;
236 minv[7] = (data[6] * data[1] - data[0] * data[7]) * invdet;
237 minv[8] = (data[0] * data[4] - data[3] * data[1]) * invdet;
273 bool computeDesiredFeaturesPCL(
const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud_face,
277 void computeDesiredFeaturesRobustFeatures(
const std::vector<double> &point_cloud_face_custom,
281 void computeDesiredFeaturesSVD(
const std::vector<double> &point_cloud_face,
const vpHomogeneousMatrix &cMo,
287 bool computePolygonCentroid(
const std::vector<vpPoint> &points,
vpPoint ¢roid);
290 std::vector<vpImagePoint> &roiPts
291 #
if DEBUG_DISPLAY_DEPTH_NORMAL
293 std::vector<std::vector<vpImagePoint> > &roiPts_vec
297 void estimateFeatures(
const std::vector<double> &point_cloud_face,
const vpHomogeneousMatrix &cMo,
298 vpColVector &x_estimated, std::vector<double> &weights);
300 void estimatePlaneEquationSVD(
const std::vector<double> &point_cloud_face,
const vpHomogeneousMatrix &cMo,
vpFeatureEstimationType m_featureEstimationMethod
Method to estimate the desired features.
void setPclPlaneEstimationRansacThreshold(double threshold)
Implementation of a matrix and operations on matrices.
Implementation of an homogeneous matrix and operations on such kind of matrices.
bool m_isTrackedDepthNormalFace
int m_pclPlaneEstimationMethod
PCL plane estimation method.
unsigned int m_clippingFlag
Flags specifying which clipping to used.
Class to define colors available for display functionnalities.
int m_pclPlaneEstimationRansacMaxIter
PCL pane estimation max number of iterations.
vpPoint * p
corners in the object frame
void setFaceCentroidMethod(const vpFaceCentroidType &method)
double m_distNearClip
Distance for near clipping.
bool m_useScanLine
Scan line visibility.
vpCameraParameters m_cam
Camera intrinsic parameters.
Class that defines what is a point.
bool m_faceActivated
True if the face should be considered by the tracker.
vpMbtPolygon * m_polygon
Polygon defining the face.
Implementation of a polygon of the model used by the model-based tracker.
vpMbHiddenFaces< vpMbtPolygon > * m_hiddenFace
Pointer to the list of faces.
Generic class defining intrinsic camera parameters.
void setTracked(bool tracked)
vpPoint m_faceDesiredNormal
Face (normalized) normal (computed from the sensor)
double m_distFarClip
Distance for near clipping.
std::vector< vpMbtDistanceLine * > m_listOfFaceLines
void setFeatureEstimationMethod(const vpFeatureEstimationType &method)
std::vector< PolygonLine > m_polygonLines
vpFaceCentroidType m_faceCentroidMethod
Method to compute the face centroid for the current features.
Implementation of column vector and the associated operations.
vpPoint m_faceDesiredCentroid
Desired centroid (computed from the sensor)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Compute the geometric centroid.
This class defines the container for a plane geometrical structure.
vpPlane m_planeObject
Plane equation described in the object frame.
bool isvisible
flag to specify whether the face is visible or not
void setPclPlaneEstimationRansacMaxIter(int maxIter)
void setPclPlaneEstimationMethod(int method)
double m_pclPlaneEstimationRansacThreshold
PCL plane estimation RANSAC threshold.