Program Listing for File classification.h
↰ Return to documentation for file (include/cpphots/classification.h)
#ifndef CPPHOTS_CLASSIFICATION_H
#define CPPHOTS_CLASSIFICATION_H
#include <vector>
#include <string>
#include <unordered_map>
#include <ostream>
namespace cpphots {
using Features = std::vector<uint32_t>;
std::ostream& operator<<(std::ostream& out, const cpphots::Features& feats);
double features_quality(const Features& feats);
class Classifier {
public:
explicit Classifier(size_t n_classes);
explicit Classifier(const std::vector<std::string>& l_classes);
explicit Classifier(Classifier* other);
void setClassFeatures(size_t cid, const Features& feats);
void setClassFeatures(const std::string& clabel, const Features& feats);
size_t classifyID(const Features& feats) const;
std::string classifyName(const Features& feats) const;
private:
std::vector<Features> class_feats;
std::vector<std::string> class_names;
std::unordered_map<std::string, size_t> reverse_class_names;
virtual double computeDistance(const Features& f1, const Features& f2) const = 0;
};
class StandardClassifier : public Classifier {
public:
using Classifier::Classifier;
private:
double computeDistance(const Features& f1, const Features& f2) const override;
};
class NormalizedClassifier : public Classifier {
public:
using Classifier::Classifier;
private:
double computeDistance(const Features& f1, const Features& f2) const override;
};
class BhattacharyyaClassifier : public Classifier {
public:
using Classifier::Classifier;
private:
double computeDistance(const Features& f1, const Features& f2) const override;
};
}
#endif