/* * DetectionInfo.h * * Created on: 2014-08-03 * Author: mathieu */ #ifndef DETECTIONINFO_H_ #define DETECTIONINFO_H_ #include #include #include #include #include #include class DetectionInfo { public: enum TimeStamp{kTimeKeypointDetection, kTimeDescriptorExtraction, kTimeIndexing, kTimeMatching, kTimeHomography, kTimeTotal}; public: DetectionInfo() : minMatchedDistance_(-1), maxMatchedDistance_(-1) {} public: QMultiMap objDetected_; QMultiMap objDetectedSizes_; // Object ID match the number of detected objects QMultiMap objDetectedFilenames_; // Object ID match the number of detected objects QMultiMap objDetectedInliersCount_; // ObjectID match the number of detected objects QMultiMap objDetectedOutliersCount_; // ObjectID match the number of detected objects QMultiMap > objDetectedInliers_; // ObjectID Map< ObjectDescriptorIndex, SceneDescriptorIndex >, match the number of detected objects QMultiMap > objDetectedOutliers_; // ObjectID Map< ObjectDescriptorIndex, SceneDescriptorIndex >, match the number of detected objects QMap timeStamps_; std::vector sceneKeypoints_; cv::Mat sceneDescriptors_; QMultiMap sceneWords_; QMap > matches_; // ObjectID Map< ObjectDescriptorIndex, SceneDescriptorIndex >, match the number of objects QMultiMap > rejectedInliers_; // ObjectID Map< ObjectDescriptorIndex, SceneDescriptorIndex > QMultiMap > rejectedOutliers_; // ObjectID Map< ObjectDescriptorIndex, SceneDescriptorIndex > float minMatchedDistance_; float maxMatchedDistance_; }; inline QDataStream & operator<<(QDataStream &out, const DetectionInfo & info) { out << quint32(info.objDetected_.size()); QMultiMap::const_iterator iterInliers = info.objDetectedInliersCount_.constBegin(); QMultiMap::const_iterator iterOutliers = info.objDetectedOutliersCount_.constBegin(); QMultiMap::const_iterator iterSizes = info.objDetectedSizes_.constBegin(); QMultiMap::const_iterator iterFilenames = info.objDetectedFilenames_.constBegin(); for(QMultiMap::const_iterator iter=info.objDetected_.constBegin(); iter!=info.objDetected_.constEnd(); ++iter) { // ID out << iter.key(); // Size out << iterSizes.value(); // Transform out << iter.value(); // Filename out << iterFilenames.value(); // inliers and outliers count out << iterInliers.value(); out << iterOutliers.value(); ++iterInliers; ++iterOutliers; ++iterSizes; ++iterFilenames; } return out; } inline QDataStream & operator>>(QDataStream &in, DetectionInfo & info) { QDataStream::Status oldStatus = in.status(); in.resetStatus(); info = DetectionInfo(); quint32 n; in >> n; for (quint32 i = 0; i < n; ++i) { if (in.status() != QDataStream::Ok) break; int id; QSize size; QTransform homography; QString filename; int inliers, outliers; in >> id >> size >> homography >> filename >> inliers >> outliers; info.objDetected_.insert(id, homography); info.objDetectedSizes_.insert(id, size); info.objDetectedFilenames_.insert(id, filename); info.objDetectedInliersCount_.insert(id, inliers); info.objDetectedOutliersCount_.insert(id, outliers); } if (in.status() != QDataStream::Ok) info = DetectionInfo(); if (oldStatus != QDataStream::Ok) in.setStatus(oldStatus); return in; } #endif /* DETECTIONINFO_H_ */