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