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
90 int polygon = -1, std::string name =
"");
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
104 const std::vector<vpColVector> &point_cloud,
vpColVector &desired_features,
105 unsigned int stepX,
unsigned int stepY
106#
if DEBUG_DISPLAY_DEPTH_NORMAL
122 pcl::PointXYZ &face_normal);
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,
142 bool displayFullModel =
false);
163 void setScanLineVisibilityTest(
bool v);
182 PolygonLine() : m_p1(NULL), m_p2(NULL), m_poly(), m_imPt1(), m_imPt2() {}
184 PolygonLine(
const PolygonLine &polyLine)
185 : m_p1(NULL), m_p2(NULL), m_poly(polyLine.m_poly), m_imPt1(polyLine.m_imPt1), m_imPt2(polyLine.m_imPt2)
191 PolygonLine &operator=(PolygonLine other)
198 void swap(PolygonLine &first, PolygonLine &second)
201 swap(first.m_p1, second.m_p1);
202 swap(first.m_p2, second.m_p2);
203 swap(first.m_poly, second.m_poly);
204 swap(first.m_imPt1, second.m_imPt1);
205 swap(first.m_imPt2, second.m_imPt2);
209 template <
class T>
class Mat33
216 inline T operator[](
const size_t i)
const {
return data[i]; }
218 inline T &operator[](
const size_t i) {
return data[i]; }
220 Mat33 inverse()
const
223 T det = data[0] * (data[4] * data[8] - data[7] * data[5]) - data[1] * (data[3] * data[8] - data[5] * data[6]) +
224 data[2] * (data[3] * data[7] - data[4] * data[6]);
228 minv[0] = (data[4] * data[8] - data[7] * data[5]) * invdet;
229 minv[1] = (data[2] * data[7] - data[1] * data[8]) * invdet;
230 minv[2] = (data[1] * data[5] - data[2] * data[4]) * invdet;
231 minv[3] = (data[5] * data[6] - data[3] * data[8]) * invdet;
232 minv[4] = (data[0] * data[8] - data[2] * data[6]) * invdet;
233 minv[5] = (data[3] * data[2] - data[0] * data[5]) * invdet;
234 minv[6] = (data[3] * data[7] - data[6] * data[4]) * invdet;
235 minv[7] = (data[6] * data[1] - data[0] * data[7]) * invdet;
236 minv[8] = (data[0] * data[4] - data[3] * data[1]) * invdet;
289 std::vector<vpImagePoint> &roiPts
290#
if DEBUG_DISPLAY_DEPTH_NORMAL
292 std::vector<std::vector<vpImagePoint> > &roiPts_vec
297 vpColVector &x_estimated, std::vector<double> &weights);
305#ifdef VISP_HAVE_NLOHMANN_JSON
306#include<nlohmann/json.hpp>
Generic class defining intrinsic camera parameters.
Implementation of column vector and the associated operations.
Class to define RGB colors available for display functionalities.
Implementation of an homogeneous matrix and operations on such kind of matrices.
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition of the vpImage class member functions.
Implementation of a matrix and operations on matrices.
Implementation of the polygons management for the model-based trackers.
double m_pclPlaneEstimationRansacThreshold
PCL plane estimation RANSAC threshold.
int m_pclPlaneEstimationMethod
PCL plane estimation method.
double m_distNearClip
Distance for near clipping.
void computeInteractionMatrix(const vpHomogeneousMatrix &cMo, vpMatrix &L, vpColVector &features)
std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false)
void addLine(vpPoint &p1, vpPoint &p2, vpMbHiddenFaces< vpMbtPolygon > *const faces, vpUniRand &rand_gen, int polygon=-1, std::string name="")
void computeDesiredFeaturesSVD(const std::vector< double > &point_cloud_face, const vpHomogeneousMatrix &cMo, vpColVector &desired_features, vpColVector &desired_normal, vpColVector ¢roid_point)
double m_distFarClip
Distance for near clipping.
bool samePoint(const vpPoint &P1, const vpPoint &P2) const
bool computeDesiredFeatures(const vpHomogeneousMatrix &cMo, unsigned int width, unsigned int height, const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &point_cloud, vpColVector &desired_features, unsigned int stepX, unsigned int stepY, const vpImage< bool > *mask=NULL)
void displayFeature(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, double scale=0.05, unsigned int thickness=1)
vpMbHiddenFaces< vpMbtPolygon > * m_hiddenFace
Pointer to the list of faces.
std::vector< std::vector< double > > getFeaturesForDisplay(const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, double scale=0.05)
bool computePolygonCentroid(const std::vector< vpPoint > &points, vpPoint ¢roid)
void computeROI(const vpHomogeneousMatrix &cMo, unsigned int width, unsigned int height, std::vector< vpImagePoint > &roiPts)
void estimatePlaneEquationSVD(const std::vector< double > &point_cloud_face, const vpHomogeneousMatrix &cMo, vpColVector &plane_equation_estimated, vpColVector ¢roid)
std::vector< vpMbtDistanceLine * > m_listOfFaceLines
void computeDesiredNormalAndCentroid(const vpHomogeneousMatrix &cMo, const vpColVector &desired_normal, const vpColVector ¢roid_point)
void setPclPlaneEstimationMethod(int method)
bool m_isTrackedDepthNormalFace
vpFeatureEstimationType m_featureEstimationMethod
Method to estimate the desired features.
void setPclPlaneEstimationRansacThreshold(double threshold)
vpMbtPolygon * m_polygon
Polygon defining the face.
vpPoint m_faceDesiredCentroid
Desired centroid (computed from the sensor).
void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false)
vpCameraParameters m_cam
Camera intrinsic parameters.
@ ROBUST_FEATURE_ESTIMATION
@ ROBUST_SVD_PLANE_ESTIMATION
vpPlane m_planeObject
Plane equation described in the object frame.
void computeVisibilityDisplay()
bool m_faceActivated
True if the face should be considered by the tracker.
@ GEOMETRIC_CENTROID
Compute the geometric centroid.
@ MEAN_CENTROID
Compute the mean centroid.
vpFaceCentroidType m_faceCentroidMethod
Method to compute the face centroid for the current features.
int m_pclPlaneEstimationRansacMaxIter
PCL pane estimation max number of iterations.
unsigned int m_clippingFlag
Flags specifying which clipping to used.
void computeDesiredFeaturesRobustFeatures(const std::vector< double > &point_cloud_face_custom, const std::vector< double > &point_cloud_face, const vpHomogeneousMatrix &cMo, vpColVector &desired_features, vpColVector &desired_normal, vpColVector ¢roid_point)
void setTracked(bool tracked)
vpPoint m_faceDesiredNormal
Face (normalized) normal (computed from the sensor).
void estimateFeatures(const std::vector< double > &point_cloud_face, const vpHomogeneousMatrix &cMo, vpColVector &x_estimated, std::vector< double > &weights)
void setFeatureEstimationMethod(const vpFeatureEstimationType &method)
std::vector< PolygonLine > m_polygonLines
void setFaceCentroidMethod(const vpFaceCentroidType &method)
bool computeDesiredFeaturesPCL(const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &point_cloud_face, vpColVector &desired_features, vpColVector &desired_normal, vpColVector ¢roid_point)
void setPclPlaneEstimationRansacMaxIter(int maxIter)
void computeNormalVisibility(double nx, double ny, double nz, const vpColVector ¢roid_point, vpColVector &face_normal)
bool m_useScanLine
Scan line visibility.
Implementation of a polygon of the model used by the model-based tracker.
This class defines the container for a plane geometrical structure.
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
vpPoint * p
corners in the object frame
Class for generating random numbers with uniform probability density.