diff --git a/Code/Seg/BSTools/bsdetectionwidget.cpp b/Code/Seg/BSTools/bsdetectionwidget.cpp index e06f180088974e5e293ca2a93792de0dc33fab74..82e379a42d3ec0b12b92b3260ac82d6f992b3ca0 100755 --- a/Code/Seg/BSTools/bsdetectionwidget.cpp +++ b/Code/Seg/BSTools/bsdetectionwidget.cpp @@ -34,8 +34,7 @@ BSDetectionWidget::BSDetectionWidget (QWidget *parent) alternate = 0; verbose = false; capture = false; - - instanceOfAll = 0; + exam = -1; } @@ -284,9 +283,18 @@ void BSDetectionWidget::keyPressEvent (QKeyEvent *event) break; case Qt::Key_M : // Multi-selection switch - detector.switchMultiSelection (); - cout << "Multi-selection " - << (detector.isMultiSelection () ? "on" : "off") << endl; + if (event->modifiers () & Qt::ShiftModifier) + { + detector.switchMultiSelection (); + cout << "Multi-selection " + << (detector.isMultiSelection () ? "on" : "off") << endl; + } + else extractAll (); + break; + + case Qt::Key_L : // Next multi-selected segment + displayNext (event->modifiers () & Qt::ShiftModifier ? -1 : 1); + cout << "Selection du segment " << exam << endl; break; case Qt::Key_Y : // Initial detection extension limitation @@ -310,7 +318,7 @@ void BSDetectionWidget::keyPressEvent (QKeyEvent *event) cout << "Input max width = " << detector.getInputMaxWidth () << endl; break; - case Qt::Key_L : // Output blurred segment min size + case Qt::Key_K : // Output blurred segment min size detector.setBSminSize (detector.getBSminSize () + (event->modifiers () & Qt::ShiftModifier ? -1 : 1)); extract (true); @@ -443,14 +451,6 @@ void BSDetectionWidget::keyPressEvent (QKeyEvent *event) switchProfileAnalyzer (); break; - case Qt::Key_6 : - displayNextOfAll (); - break; - - case Qt::Key_7 : - extractAll (); - break; - case Qt::Key_8 : alternateTest (); break; @@ -565,7 +565,7 @@ void BSDetectionWidget::extract () if (detector.isMultiSelection ()) { - vector<BlurredSegment *> mbs = detector.getBlurredSegments (); + vector<BlurredSegment *> mbs = detector.getBlurredSegments (1); vector<BlurredSegment *>::iterator it = mbs.begin (); while (it != mbs.end ()) { @@ -621,9 +621,8 @@ void BSDetectionWidget::extractAll () if (strucview != NULL) strucview->scene()->update (); } - vector<BlurredSegment *> mbs = detector.getBlurredSegments (); - instanceOfAll = mbs.size (); - cout << instanceOfAll << " blurred segments detected" << endl; + vector<BlurredSegment *> mbs = detector.getBlurredSegments (1); + cout << mbs.size () << " blurred segments detected" << endl; vector<BlurredSegment *>::iterator it = mbs.begin (); while (it != mbs.end ()) { @@ -644,6 +643,7 @@ void BSDetectionWidget::extractAll () if (verbose && fixed) displayExtractionResult (); fixed = false; if (! formerMultiMode) detector.switchMultiSelection (); + exam = -1; if (capture) { @@ -653,19 +653,22 @@ void BSDetectionWidget::extractAll () } -void BSDetectionWidget::displayNextOfAll () +void BSDetectionWidget::displayNext (int dir) { + vector<BlurredSegment *> mbs = detector.getBlurredSegments (1); + if (mbs.empty ()) return; + augmentedImage = loadedImage; QPainter painter (&augmentedImage); - vector<BlurredSegment *> mbs = detector.getBlurredSegments (); - if (++instanceOfAll > (int) (mbs.size ())) instanceOfAll = 0; + exam = (exam + dir) % ((int) (mbs.size ())); vector<BlurredSegment *>::iterator it = mbs.begin (); QColor bsCol = Qt::blue; int index = 0; - while (index <= instanceOfAll && it != mbs.end ()) + while (it != mbs.end ()) { - if (index++ == instanceOfAll) bsCol = Qt::green; + if (index++ == exam) bsCol = Qt::green; + else bsCol = Qt::blue; /* DigitalStraightSegment *dss = (*it)->getSegment (); if (dss != NULL) diff --git a/Code/Seg/BSTools/bsdetectionwidget.h b/Code/Seg/BSTools/bsdetectionwidget.h index b491b772186104da58d47271525e5508989db919..3930f6469282fc535e4baf0ba74fcea686c2d6ab 100755 --- a/Code/Seg/BSTools/bsdetectionwidget.h +++ b/Code/Seg/BSTools/bsdetectionwidget.h @@ -168,8 +168,8 @@ private: /** Activation of alternate comparative tests (F8). */ int alternate; - /** Index of the last blurred segment displayed in a multi-selection. */ - int instanceOfAll; + /** Index of the examined blurred segment in a multi-selection. */ + int exam; /** Presently loaded image. */ @@ -265,8 +265,9 @@ private: /** * \brief Highlights the next blurred segment in multi-selection mode. + * @param dir Increment in the multi-selection. */ - void displayNextOfAll (); + void displayNext (int dir); }; #endif diff --git a/Code/Seg/BSTools/bsstructureview.cpp b/Code/Seg/BSTools/bsstructureview.cpp index 81ce0b946e5641f187850af4a5570b56796556d8..d43e081f99e8f5cab26536c5bca81ff10bccd851 100755 --- a/Code/Seg/BSTools/bsstructureview.cpp +++ b/Code/Seg/BSTools/bsstructureview.cpp @@ -216,7 +216,7 @@ bool BSStructureView::processKeyEvent (QKeyEvent *event) processed = true; break; - case Qt::Key_L : // Output blurred segment min size + case Qt::Key_K : // Output blurred segment min size det->setBSminSize (det->getBSminSize () + (event->modifiers () & Qt::ShiftModifier ? -1 : 1)); update (); diff --git a/Code/Seg/BlurredSegment/bsdetector.cpp b/Code/Seg/BlurredSegment/bsdetector.cpp index b52db0ef9ec62490c2d2e57f075117502c5519ec..ffd2fe27c785263845fbbf3ea2786f4c71ddb1a1 100755 --- a/Code/Seg/BlurredSegment/bsdetector.cpp +++ b/Code/Seg/BlurredSegment/bsdetector.cpp @@ -44,7 +44,6 @@ BSDetector::BSDetector () bsini = NULL; bsf = NULL; - tempo = true; resultValue = RESULT_UNDETERMINED; } @@ -55,6 +54,12 @@ BSDetector::~BSDetector () delete bst2; if (lsf1 != NULL) delete lsf1; if (lsf2 != NULL) delete lsf2; + if (bsini != NULL) delete bsini; + if (bsf != NULL) delete bsf; + vector<BlurredSegment *>::iterator it = mbsini.begin (); + while (it != mbsini.end ()) delete (*it++); + it = mbsf.begin (); + while (it != mbsf.end ()) delete (*it++); } @@ -69,7 +74,10 @@ void BSDetector::setGradientMap (VMap *data) void BSDetector::detectAll () { // Deletes former blurred segments - vector<BlurredSegment *>::iterator it = mbsf.begin (); + vector<BlurredSegment *>::iterator it = mbsini.begin (); + while (it != mbsini.end ()) delete (*it++); + mbsini.clear (); + it = mbsf.begin (); while (it != mbsf.end ()) delete (*it++); mbsf.clear (); @@ -94,7 +102,10 @@ void BSDetector::detectAll () void BSDetector::multidetect (const Pt2i &p1, const Pt2i &p2) { // Deletes former blurred segments - vector<BlurredSegment *>::iterator it = mbsf.begin (); + vector<BlurredSegment *>::iterator it = mbsini.begin (); + while (it != mbsini.end ()) delete (*it++); + mbsini.clear (); + it = mbsf.begin (); while (it != mbsf.end ()) delete (*it++); mbsf.clear (); @@ -121,7 +132,9 @@ void BSDetector::runMultiDetection (const Pt2i &p1, const Pt2i &p2, { gMap->setMask (bsf->getAllPoints ()); mbsf.push_back (bsf); - tempo = false; // to avoid former BS deletion + mbsini.push_back (bsini); + bsf = NULL; // to avoid BS deletion + bsini = NULL; // to avoid BS deletion } } } @@ -137,9 +150,8 @@ void BSDetector::detect (const Pt2i &p1, const Pt2i &p2, Pt2i *p0) if (prefilteringOn) lsf1->clear (); if (filteringOn) lsf2->clear (); if (bsini != NULL) delete bsini; - if (tempo && bsf != NULL) delete bsf; + if (bsf != NULL) delete bsf; bsf = NULL; - tempo = true; if (p1.equals (p2)) return; // Initial detection based on highest gradient without orientation constraint @@ -259,9 +271,9 @@ vector<Pt2i> BSDetector::getRejected (int step) const vector<Pt2i> res; if (step != 0) { - if (filteringOn) res = lsf2->getAccepted (); + if (filteringOn) res = lsf2->getRejected (); } - else if (prefilteringOn) res = lsf1->getAccepted (); + else if (prefilteringOn) res = lsf1->getRejected (); return res; } diff --git a/Code/Seg/BlurredSegment/bsdetector.h b/Code/Seg/BlurredSegment/bsdetector.h index f30bc183d9682c48b4dfa65c3c88c868473b41b7..f0ec3c818782cd5bd4d3c97f1b8a844f2edbe954 100755 --- a/Code/Seg/BlurredSegment/bsdetector.h +++ b/Code/Seg/BlurredSegment/bsdetector.h @@ -95,14 +95,16 @@ public: return (step == 0 ? bsini : bsf); } /** - * \brief Returns the list of detected blurred segments. + * \brief Returns the list of detected blurred segments at given step. + * @param step Initial step addressed if set to 0, final step otherwise. */ - inline vector<BlurredSegment *> getBlurredSegments () { return (mbsf); } + inline vector<BlurredSegment *> getBlurredSegments (int step) { + return (step == 0 ? mbsini : mbsf); } /** * \brief Avoids the deletion of the last extracted blurred segent. */ - inline void preserveFormerBlurredSegment () { tempo = false; } + inline void preserveFormerBlurredSegment () { bsf = NULL; } /** * \brief Returns the input maximal width of the initial segment. @@ -412,18 +414,18 @@ private : /** Gradient map. */ VMap *gMap; - /** Initially detected blurred segment (initial step result). */ - BlurredSegment *bsini; /** Initial rough tracker */ BSTracker *bst1; - /** Flag indicating whether the blurred segment is not registred. */ - bool tempo; + /** Initially detected blurred segment (initial step result). */ + BlurredSegment *bsini; + /** Detected blurred segments in case of multi-detection (initial step). */ + vector<BlurredSegment *> mbsini; /** Fine tracker */ BSTracker *bst2; /** Detected blurred segment (final result). */ BlurredSegment *bsf; - /** Detected blurred segments (in case of multi-detection). */ + /** Detected blurred segments in case of multi-detection (final results). */ vector<BlurredSegment *> mbsf; /** Initial segment filtering modality. */ diff --git a/Methode/ctrl.tex b/Methode/ctrl.tex index fc3b66168e537ab622ed26fadc8a490b118edc7b..022e25a289f5b1dc15713c8bf667b094646fd739 100755 --- a/Methode/ctrl.tex +++ b/Methode/ctrl.tex @@ -27,11 +27,15 @@ u & \spa & Actualiser \\ v && Afficher le r\'esultat \\ w && Consigne initiale d'\'epaisseur du segment flou \\ h && Longueur tol\'er\'ee pour les sauts de d\'etection \\ +k && Taille minimale des segments d\'etect\'es \\ +n && R\'esolution de la grille de d\'etection automatique \\ e && Trait / bord \\ E && Autre bord \\ q && Retour d'absence (1 / longueur absence) \\ Ctrl-c/v/z && Enregistre / Affiche / Supprime les segments \\ -m && Commute la multi-d\'etection \\ +M && Commute la multi-d\'etection \\ +m && D\'etection exhaustive de tous les segments \\ +l && Examine le segment suivant dans une multi-d\'etection \\ t && Commute l'amincissement progressif \\ y && Commute le bridage de la premi\`ere \'etape \\ d && Commute le test de densit\'e \\ @@ -48,7 +52,6 @@ P && Demande la capture de la prochaine extraction \\ 0 && Test avec $P_1$ et $P_2$ impos\'es \\ 9 && Test de performance sur la derni\`ere barre trac\'ee \\ 8 && Tests comparatifs sur diff\'erents contextes de d\'etection \\ -7 && D\'etection exhaustive de tous les segments \\ \hline \hline \multicolumn{3}{|l|}{Fen\^etres d'analyse :} \\ i && Changement d'info \\