00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00033 #ifndef _SAMPLE_CONSENSUS_SACMODELCIRCLE_H_
00034 #define _SAMPLE_CONSENSUS_SACMODELCIRCLE_H_
00035
00036 #include <door_handle_detector/sample_consensus/sac_model.h>
00037 #include <door_handle_detector/sample_consensus/model_types.h>
00038
00040 #define MAX_ITERATIONS_COLLINEAR 1000
00041
00042 namespace sample_consensus
00043 {
00046 class SACModelCircle2D : public SACModel
00047 {
00048 public:
00050
00051 SACModelCircle2D () { }
00052
00054
00055 virtual ~SACModelCircle2D () { }
00056
00057 virtual void getSamples (int &iterations, std::vector<int> &samples);
00058
00060
00064 bool testModelCoefficients (const std::vector<double> &model_coefficients) { return true; }
00065
00066 virtual bool computeModelCoefficients (const std::vector<int> &samples);
00067
00068 virtual void refitModel (const std::vector<int> &inliers, std::vector<double> &refit_coefficients);
00069 virtual void getDistancesToModel (const std::vector<double> &model_coefficients, std::vector<double> &distances);
00070 virtual void selectWithinDistance (const std::vector<double> &model_coefficients, double threshold, std::vector<int> &inliers);
00071
00072 virtual void projectPoints (const std::vector<int> &inliers, const std::vector<double> &model_coefficients, sensor_msgs::PointCloud &projected_points);
00073
00074 virtual void projectPointsInPlace (const std::vector<int> &inliers, const std::vector<double> &model_coefficients);
00075 virtual bool doSamplesVerifyModel (const std::set<int> &indices, double threshold);
00076
00077 static int functionToOptimize (void *p, int m, int n, const double *x, double *fvec, int iflag);
00078
00080
00081 virtual int getModelType () { return (SACMODEL_CIRCLE2D); }
00082
00083 private:
00085 const std::vector<int> *tmp_inliers_;
00086 };
00087 }
00088
00089 #endif