int RankClassifier::Classify( const QImage& label, float *outScore ) const { assert( label.width() == RC_LABEL_WIDTH ); assert( label.height() == RC_LABEL_HEIGHT ); MLP::Vector input = BinarizeImageSV( label, RC_BINARIZE_MAX_SATURATION, RC_BINARIZE_MIN_VALUE ); MLP::Vector result = mMLP.Compute( input ); std::vector< std::pair<int, float> > scores; for( int i = 0; i < (int)result.size(); i++ ) { scores.push_back( std::pair< int, float >( i, result[ i ] ) ); } std::sort( scores.begin(), scores.end(), []( const std::pair< int, float>& p1, const std::pair< int, float>& p2 ) { return p1.second > p2.second; }); for( int i = 0; i < (int)scores.size(); i++ ) { DBG( "Rank %d = %f", scores[i].first + 1, scores[i].second ); } float bestScore = scores.front().second; if( outScore ) *outScore = bestScore; int rank = 0; // RANK_UNKNOWN if( bestScore >= RC_PROBA_THRESHOLD ) { rank = scores.front().first + 1; } DBG( "Best score %.3f >= %.3f. Return %d", bestScore, RC_PROBA_THRESHOLD, rank ); return rank; }
int RankClassifier::Classify( const QImage& label, float *outScore ) const { assert( label.width() == RC_LABEL_WIDTH ); assert( label.height() == RC_LABEL_HEIGHT ); MLP::Vector input = BinarizeImageSV( label, RC_BINARIZE_MAX_SATURATION, RC_BINARIZE_MIN_VALUE ); MLP::Vector result = mMLP.Compute( input ); std::vector< std::pair<int, float> > scores; for( int i = 0; i < (int)result.size(); i++ ) { scores.push_back( std::pair< int, float >( i, result[ i ] ) ); } std::sort( scores.begin(), scores.end(), []( const std::pair< int, float>& p1, const std::pair< int, float>& p2 ) { return p1.second > p2.second; }); for( int i = 0; i < (int)scores.size(); i++ ) { DBG( "Rank %d = %f", scores[i].first + 1, scores[i].second ); } if( outScore ) *outScore = scores.front().second; return scores.front().first + 1; }