diff --git a/Src/BioTrackerPlugin.h b/Src/BioTrackerPlugin.h index cbf2cf2d68fd60456f6f7c9005b1146b0f2f7b47..e194e8d679d86d20c84172c490542cd6d868d499 100644 --- a/Src/BioTrackerPlugin.h +++ b/Src/BioTrackerPlugin.h @@ -29,8 +29,6 @@ public: public: void createPlugin(); - void receiveCurrentFrameFromMainApp(std::shared_ptr<cv::Mat> mat, - uint frameNumber); void sendCorePermissions(); private: @@ -70,7 +68,9 @@ public slots: IModelTrackedTrajectory* trajectory1); void receiveCurrentFrameNumberFromMainApp(uint frameNumber); -private slots: +public slots: + void receiveCurrentFrameFromMainApp(std::shared_ptr<cv::Mat> mat, + uint frameNumber); void receiveAreaDescriptor(IModelAreaDescriptor* areaDescr); private: diff --git a/Src/Config.cpp b/Src/Config.cpp index aaed4dda68ad82a5a9420257ffb185249b9f3169..e23dc0f7a1acd58e557fe9a1775a6b4ccca47993 100644 --- a/Src/Config.cpp +++ b/Src/Config.cpp @@ -62,9 +62,9 @@ void Config::load(QString dir, QString file) config->BinarizationThreshold = tree.get<int>( globalPrefix + "BinarizationThreshold", config->BinarizationThreshold); - config->MaximumImageValue = tree.get<int>( - globalPrefix + "MaximumImageValue", - config->MaximumImageValue); + config->MaximumImageValue = tree.get<int>(globalPrefix + + "MaximumImageValue", + config->MaximumImageValue); config->OpeningErosionSize = tree.get<int>(globalPrefix + "OpeningErosionSize", @@ -114,8 +114,7 @@ void Config::save(QString dir, QString file) config->UseAbsoluteDifference); tree.put(globalPrefix + "BinarizationThreshold", config->BinarizationThreshold); - tree.put(globalPrefix + "MaximumImageValue", - config->MaximumImageValue); + tree.put(globalPrefix + "MaximumImageValue", config->MaximumImageValue); tree.put(globalPrefix + "OpeningErosionSize", config->OpeningErosionSize); tree.put(globalPrefix + "OpeningDilationSize", config->OpeningDilationSize); diff --git a/Src/Config.h b/Src/Config.h index 185581c4d14cf7a959889785c219994d9784fd59..f63f0aaa687a3f3394dd6e3ca11c6d79f44d3eb7 100644 --- a/Src/Config.h +++ b/Src/Config.h @@ -9,7 +9,7 @@ class Config : public IConfig public: bool UseAbsoluteDifference = true; int BinarizationThreshold = 40; - int MaximumImageValue = 255; + int MaximumImageValue = 255; int OpeningErosionSize = 8; int OpeningDilationSize = 8; diff --git a/Src/Model/BioTrackerTrackingAlgorithm.cpp b/Src/Model/BioTrackerTrackingAlgorithm.cpp index f48cef5b300be9b9d1fafede0b2d19f8d5fa15e5..094b2c20ab1b508c9caa3b23092ec7507ca21615 100644 --- a/Src/Model/BioTrackerTrackingAlgorithm.cpp +++ b/Src/Model/BioTrackerTrackingAlgorithm.cpp @@ -113,20 +113,20 @@ void BioTrackerTrackingAlgorithm::sendSelectedImage( } std::vector<BlobPose> BioTrackerTrackingAlgorithm::getContourCentroids( - cv::Mat& image, - int minSize) + cv::Mat image) { std::vector<std::vector<cv::Point>> contours; std::vector<cv::Vec4i> hierarchy; std::vector<BlobPose> centroids; - findContours(image, - contours, - hierarchy, - cv::RETR_TREE, - cv::CHAIN_APPROX_SIMPLE, - cv::Point(0, 0)); + cv::findContours(image, + contours, + hierarchy, + cv::RETR_TREE, + cv::CHAIN_APPROX_SIMPLE, + cv::Point(0, 0)); + for (auto x : contours) { cv::Point2f c(0, 0); float i = 0; @@ -208,8 +208,23 @@ void BioTrackerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> p_image, // Find blobs via ellipsefitting _bd.setMaxBlobSize(_TrackingParameter->getMaxBlobSize()); _bd.setMinBlobSize(_TrackingParameter->getMinBlobSize()); - // std::vector<BlobPose> blobs = _bd.getPoses(*mask, *greyMat); - std::vector<BlobPose> blobs = getContourCentroids(*mask, 111); + + auto foo = *images.find(std::string("Masked Greyscale"))->second; + + std::vector<std::vector<cv::Point>> contours; + std::vector<cv::Vec4i> hierarchy; + cv::findContours(foo, + contours, + hierarchy, + cv::RETR_TREE, + cv::CHAIN_APPROX_SIMPLE, + cv::Point(0, 0)); + + for (size_t i = 0; i < contours.size(); i++) { + drawContours(foo, contours, (int) i, cv::Scalar(255)); + } + + std::vector<BlobPose> blobs = getContourCentroids(*mask); // Never switch the position of the trajectories. The NN2d mapper relies on // this! If you mess up the order, add or remove some t, then create a new diff --git a/Src/Model/BioTrackerTrackingAlgorithm.h b/Src/Model/BioTrackerTrackingAlgorithm.h index ca456feebbdf2c9185c46061c76891cd4eac5d8b..4fb104220d7215ceb718af6a592b6cc4e9a19286 100644 --- a/Src/Model/BioTrackerTrackingAlgorithm.h +++ b/Src/Model/BioTrackerTrackingAlgorithm.h @@ -41,7 +41,7 @@ public Q_SLOTS: void receiveParametersChanged(); private: - std::vector<BlobPose> getContourCentroids(cv::Mat& image, int minSize); + std::vector<BlobPose> getContourCentroids(cv::Mat image); void refreshPolygon(); void sendSelectedImage( std::map<std::string, std::shared_ptr<cv::Mat>>* images); diff --git a/Src/Model/TrackingAlgorithm/imageProcessor/preprocessor/CustomBackgroundSubtractor.cpp b/Src/Model/TrackingAlgorithm/imageProcessor/preprocessor/CustomBackgroundSubtractor.cpp index 35398a504c7832453ccb616a640168c9656c2b24..05f2a3ab51be364653e476b071544da1651ebf3a 100644 --- a/Src/Model/TrackingAlgorithm/imageProcessor/preprocessor/CustomBackgroundSubtractor.cpp +++ b/Src/Model/TrackingAlgorithm/imageProcessor/preprocessor/CustomBackgroundSubtractor.cpp @@ -96,7 +96,11 @@ void CustomBackgroundSubtractor::apply(cv::InputArray image, 255, cv::THRESH_BINARY); - cv::threshold(image, maxabsmask, m_maximumImageValue, 255, cv::THRESH_BINARY_INV); + cv::threshold(image, + maxabsmask, + m_maximumImageValue, + 255, + cv::THRESH_BINARY_INV); cv::bitwise_and(diffmask, maxabsmask, fgmask); } diff --git a/Src/Model/TrackingAlgorithm/imageProcessor/preprocessor/ImagePreProcessor.cpp b/Src/Model/TrackingAlgorithm/imageProcessor/preprocessor/ImagePreProcessor.cpp index 5b1f9ba93a8e1c150d4888a4005aa020c3547b15..2a61ac8266a9e20352cbb906b9a2cdaf113c4f66 100644 --- a/Src/Model/TrackingAlgorithm/imageProcessor/preprocessor/ImagePreProcessor.cpp +++ b/Src/Model/TrackingAlgorithm/imageProcessor/preprocessor/ImagePreProcessor.cpp @@ -123,7 +123,7 @@ std::map<std::string, std::shared_ptr<cv::Mat>> ImagePreProcessor::preProcess( *closedMask = erode( dilate(*openedMask, m_TrackingParameter->getClosingDilationSize()), m_TrackingParameter->getClosingErosionSize()); - + // 4. step: masked greyscale image greyMat->copyTo(*maskedGrey, *closedMask); diff --git a/Src/View/TrackerParameterView.cpp b/Src/View/TrackerParameterView.cpp index 254400a70b83777bd22842f4df65aaee92a51339..3707fdfe99104dcb8b446042b4ddcfda138ab95a 100644 --- a/Src/View/TrackerParameterView.cpp +++ b/Src/View/TrackerParameterView.cpp @@ -109,7 +109,7 @@ void TrackerParameterView::initSubtractorSpecificUI(QString algorithm) _useAbsDiff = nullptr; _binThres = nullptr; - _maxImg = nullptr; + _maxImg = nullptr; if (algorithm == QString("Custom")) { _useAbsDiff = new QCheckBox(); @@ -144,7 +144,7 @@ void TrackerParameterView::initSubtractorSpecificUI(QString algorithm) qOverload<int>(&QSpinBox::valueChanged), this, &TrackerParameterView::parametersChanged); - + _maxImg = new QSpinBox(); _maxImg->setMinimum(1); _maxImg->setMaximum(255);