diff --git a/Modules/Learning/Supervised/include/otbCvRTrees.h b/Modules/Learning/Supervised/include/otbCvRTrees.h index 2eab1cd9f7806cad2a75d076b7c5b98f9a176945..18da88e3d2416f0ce3106399e60a64587042dac9 100644 --- a/Modules/Learning/Supervised/include/otbCvRTrees.h +++ b/Modules/Learning/Supervised/include/otbCvRTrees.h @@ -23,50 +23,28 @@ class CV_EXPORTS_W CvRTreesWrapper : public CvRTrees { - struct ClassVotes - { - unsigned int votes; - unsigned int class_idx; - }; - - struct MoreVotes - { - bool operator()(ClassVotes a, ClassVotes b) - { - return (a.votes > b.votes); - } - }; - - typedef std::vector<ClassVotes> ClassVotesVectorType; - public: - CV_WRAP CvRTreesWrapper(){}; + CvRTreesWrapper(){}; virtual ~CvRTreesWrapper(){}; - const int get_nclasses() const - { - return nclasses; - }; - - // CV_WRAP virtual float predict(const cv::Mat& sample, const cv::Mat& missing = cv::Mat() ) const{return CvRTrees::predict(sample,missing);}; - - virtual const float predict_confidence(const cv::Mat& sample, const cv::Mat& missing = cv::Mat()) const + float predict_confidence(const cv::Mat& sample, + const cv::Mat& missing = + cv::Mat()) const { - cv::AutoBuffer<int> _votes(nclasses); - ClassVotesVectorType classVotes(nclasses); + std::vector<unsigned int> classVotes(nclasses); for( int k = 0; k < ntrees; k++ ) { CvDTreeNode* predicted_node = trees[k]->predict( sample, missing ); int class_idx = predicted_node->class_idx; CV_Assert( 0 <= class_idx && class_idx < nclasses ); - classVotes[class_idx].votes += 1; - classVotes[class_idx].class_idx = class_idx; + ++classVotes[class_idx]; } std::nth_element(classVotes.begin(), classVotes.begin()+1, - classVotes.end(), MoreVotes()); - unsigned int maxVotes = classVotes[0].votes; - unsigned int secondVotes = classVotes[2].votes; - return static_cast<float>(maxVotes-secondVotes)/ntrees; + classVotes.end(), std::greater<>()); + unsigned int maxVotes = classVotes[0]; + unsigned int secondVotes = classVotes[1]; + float confidence = static_cast<float>(maxVotes-secondVotes)/ntrees; + return confidence; }; };