123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- #ifndef __OPENCV_SURFACE_MATCHING_PPF_MATCH_3D_HPP__
- #define __OPENCV_SURFACE_MATCHING_PPF_MATCH_3D_HPP__
- #include <opencv2/core.hpp>
- #include <vector>
- #include "pose_3d.hpp"
- #include "t_hash_int.hpp"
- namespace cv
- {
- namespace ppf_match_3d
- {
- typedef struct THash
- {
- int id;
- int i, ppfInd;
- } THash;
- class CV_EXPORTS PPF3DDetector
- {
- public:
-
- PPF3DDetector();
-
- PPF3DDetector(const double relativeSamplingStep, const double relativeDistanceStep=0.05, const double numAngles=30);
- virtual ~PPF3DDetector();
-
- void setSearchParams(const double positionThreshold=-1, const double rotationThreshold=-1, const bool useWeightedClustering=false);
-
- void trainModel(const Mat& Model);
-
- void match(const Mat& scene, std::vector<Pose3DPtr> &results, const double relativeSceneSampleStep=1.0/5.0, const double relativeSceneDistance=0.03);
- void read(const FileNode& fn);
- void write(FileStorage& fs) const;
- protected:
- double angle_step, angle_step_radians, distance_step;
- double sampling_step_relative, angle_step_relative, distance_step_relative;
- Mat sampled_pc, ppf;
- int num_ref_points;
- hashtable_int* hash_table;
- THash* hash_nodes;
- double position_threshold, rotation_threshold;
- bool use_weighted_avg;
- int scene_sample_step;
- void clearTrainingModels();
- private:
- void computePPFFeatures(const double p1[4], const double n1[4],
- const double p2[4], const double n2[4],
- double f[4]);
- bool matchPose(const Pose3D& sourcePose, const Pose3D& targetPose);
- void clusterPoses(std::vector<Pose3DPtr>& poseList, int numPoses, std::vector<Pose3DPtr> &finalPoses);
- bool trained;
- };
- }
- }
- #endif
|