#ifndef CT_HOUGHTRANSFORM_H #define CT_HOUGHTRANSFORM_H #include "ct_shapedata/ct_linedata.h" #include "ct_shape2ddata/ct_circle2ddata.h" #include "eigen/Eigen/Core" #include #include #include "pluginShared_global.h" class PLUGINSHAREDSHARED_EXPORT CT_HoughTransform { public: struct HoughObject { HoughObject(const QVector &coords, void* object) { _houghCoords.resize(coords.size()); for (int i = 0 ; i < coords.size() ; i++) { _houghCoords[i] = coords.at(i); } _object = object; } double operator()(int idx) const { if (idx < 0 || idx >= _houghCoords.size()) {return 0;} return _houghCoords[idx]; } double &operator[](int idx) { return _houghCoords[idx]; } int size() const {return _houghCoords.size();} QVector _houghCoords; void* _object; }; static void sortHoughtObjects(QList &objects, double minDist, QMultiMap &scoreMap); static void getHoughtDistances(QList &objects, double maxDist, QMultiMap* > &outDistMap); static double findBestHoughtObjects(QList &objects, double minDist, CT_HoughTransform::HoughObject* bestObject); static void createHoughObjectsFromVerticalLines(QList &lines, double referenceHeight, QList &outObjects); static void createHoughObjectsFromHorizontalCircles(QList &circles, double radiusWeight, QList &outObjects); }; #endif // CT_HOUGHTRANSFORM_H