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 RGB 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 a 3D point in the object frame and allows forward projection of a 3D point in the ...
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 ...
Class for generating random numbers with uniform probability density.
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.