From bbca6717d9eb24db0859ab1b79e0e6b0f532a2bc Mon Sep 17 00:00:00 2001
From: even <philippe.even@loria.fr>
Date: Thu, 2 May 2019 00:07:07 +0200
Subject: [PATCH] Evaluations on synthetic images updated

---
 Article/Fig_synth/statsTable.tex        |  16 +-
 Code/FBSD/BSTools/bsrandomtester.cpp    |   2 +
 Code/FBSD/BlurredSegment/bsdetector.cpp |   2 +-
 Code/FBSD/ImageTools/vmap.h             |   5 +
 Methode/evals.tex                       | 243 ++++++++++++++++++++++++
 5 files changed, 259 insertions(+), 9 deletions(-)
 create mode 100755 Methode/evals.tex

diff --git a/Article/Fig_synth/statsTable.tex b/Article/Fig_synth/statsTable.tex
index e74ea9a..526fdb7 100644
--- a/Article/Fig_synth/statsTable.tex
+++ b/Article/Fig_synth/statsTable.tex
@@ -3,20 +3,20 @@
 Detector : & \multicolumn{3}{c|}{old} & \multicolumn{3}{c|}{new} \\
 \hline
 Detected blurred segments per image
-& 25.35 & $\pm$ & 7.17 & 24.35 & $\pm$ & 5.03 \\
+& 17.06 & $\pm$ & 3.22 & 16.83 & $\pm$ & 3.11 \\
 Detected long (> 40 pixels) blurred segments per image
-& 10.41 & $\pm$ & 1.84 & 11.14 & $\pm$ & 1.92 \\
+& 11.24 & $\pm$ & 1.94 & 11.36 & $\pm$ & 1.97 \\
 Undetected input segments per image
-& 2.53 & $\pm$ & 2.54 & \textbf{0.64} & $\pm$ & \textbf{0.91} \\
+& 0.152 & $\pm$ & 0.43 & \textbf{0.003} & $\pm$ & \textbf{0.05} \\
 Precision (\%) : $P = \#(D\cap S)/\#D$
-& 72.76 & $\pm$ & 9.69 & \textbf{79.19} & $\pm$ & \textbf{6.30} \\
+& 80.46 & $\pm$ & 7.22 & \textbf{83.87} & $\pm$ & \textbf{6.04} \\
 Recall (ratio of true detection, \%): $R = \#(D\cap S)/\#S$
-& 89.20 & $\pm$ & 3.94 & \textbf{90.08} & $\pm$ & \textbf{2.77} \\
+& 90.23 & $\pm$ & 3.30 & \textbf{91.15} & $\pm$ & \textbf{2.52} \\
 F-measure (harmonic mean,\%): $F = 2\times P\times R/(P+R)$
-& 79.85 & $\pm$ & 6.78 & \textbf{84.17} & $\pm$ & \textbf{4.17} \\
+& 84.87 & $\pm$ & 4.42 & \textbf{87.23} & $\pm$ & \textbf{3.59} \\
 Thickness difference (pixels) to matched input segment
-& 0.92 & $\pm$ & 0.31 & \textbf{0.76} & $\pm$ & \textbf{0.23} \\
+& 0.70 & $\pm$ & 0.24 & \textbf{0.59} & $\pm$ & \textbf{0.19} \\
 Angle difference (degrees) to matched input segment
-& 1.48 & $\pm$ & 1.42 & \textbf{1.05} & $\pm$ & \textbf{0.80} \\
+& 0.61 & $\pm$ & 0.66 & \textbf{0.57} & $\pm$ & \textbf{0.62} \\
 \hline
 \end{tabular}
diff --git a/Code/FBSD/BSTools/bsrandomtester.cpp b/Code/FBSD/BSTools/bsrandomtester.cpp
index ab2d4c5..4cde274 100755
--- a/Code/FBSD/BSTools/bsrandomtester.cpp
+++ b/Code/FBSD/BSTools/bsrandomtester.cpp
@@ -139,6 +139,8 @@ void BSRandomTester::randomTest ()
     if (gMap != NULL) delete gMap;
     gMap = new VMap (width, height, getBitmap (image), VMap::TYPE_SOBEL_5X5);
     gMap->incGradientThreshold (50 - gMap->getGradientThreshold ());
+    if (gMap->isOrientationConstraintOn ())
+      gMap->switchOrientationConstraint ();
     for (int det = 0; det < nbdets; det ++)
       detectors[det].setGradientMap (gMap);
 
diff --git a/Code/FBSD/BlurredSegment/bsdetector.cpp b/Code/FBSD/BlurredSegment/bsdetector.cpp
index 81fb515..2377d33 100755
--- a/Code/FBSD/BlurredSegment/bsdetector.cpp
+++ b/Code/FBSD/BlurredSegment/bsdetector.cpp
@@ -2,7 +2,7 @@
 //#include "linespacefilter.h"
 
 
-const string BSDetector::VERSION = "0.2.0";
+const string BSDetector::VERSION = "0.2.1";
 const int BSDetector::STEP_FINAL = 0;
 const int BSDetector::STEP_INITIAL = 1;
 const int BSDetector::STEP_PRELIM = 2;
diff --git a/Code/FBSD/ImageTools/vmap.h b/Code/FBSD/ImageTools/vmap.h
index 34f7080..027977d 100755
--- a/Code/FBSD/ImageTools/vmap.h
+++ b/Code/FBSD/ImageTools/vmap.h
@@ -240,6 +240,11 @@ public:
   inline void switchOrientationConstraint () {
     orientedGradient = ! orientedGradient; }
 
+  /**
+   * \brief Switches the direction constraint for local maxima selection.
+   */
+  inline bool isOrientationConstraintOn () const { return orientedGradient; }
+
   /**
    * \brief Returns the occupancy mask contents.
    */
diff --git a/Methode/evals.tex b/Methode/evals.tex
new file mode 100755
index 0000000..d7e1602
--- /dev/null
+++ b/Methode/evals.tex
@@ -0,0 +1,243 @@
+\documentclass[a4paper,11pt,epsf,twoside,openright]{article}
+\usepackage{a4wide}
+\usepackage[french]{babel}
+\usepackage[latin1]{inputenc}
+
+\usepackage{amsmath}
+\usepackage{pst-all}
+\usepackage[T1]{fontenc}
+\usepackage{amsfonts}
+\usepackage{makeidx}
+\usepackage{moreverb}
+\usepackage[dvips]{graphicx}
+\usepackage{epsfig}
+\usepackage{color}
+\usepackage{algorithm2e}
+\pagestyle{plain}
+
+\begin{document}
+\title{Evaluations du d\'etecteur}
+\author{}
+\date{}
+\maketitle
+
+\section{Les autres d\'etecteurs}
+
+La version non modifi\'ee de LSD est dans {\tt Detectors/lsd}. \\
+{\tt make} pour compiler. \\
+{\tt lsd <image> <fichier\_sortie>} pour ex\'ecuter. \\
+
+La version d'ED-Lines modifi\'ee par Phuc pour sortir les lignes est
+dans {\tt Detectors/edlines}. \\
+{\tt make} pour compiler. \\
+{\tt EDLines <image> <fichier\_sortie>} pour ex\'ecuter. \\
+
+La version d'origine de Canny-Lines (aux noms d'entr\'ees-sorties par
+d\'efaut pr\`es) est dans {\tt Detectors/cannylines}. \\
+{\tt make} pour compiler. \\
+{\tt CannyLine <image> <fichier\_sortie>} pour ex\'ecuter.
+
+\section{Comparaisons sur OwnUrbanDB}
+
+C'est une s\'election de 20 images \`a trois niveaux de r\'esolution :
+\begin{itemize}
+\item {\tt oud\_1} : r\'esolution 3072 x 2048
+\item {\tt oud\_2} : r\'esolution 1536 x 1024
+\item {\tt oud\_4} : r\'esolution 768 x 512
+\end{itemize}
+
+\subsection{Comparaisons des temps d'ex\'ecution}
+
+{\tt Timers} contient les adaptations des d\'etecteurs externes
+pour automatiquement mesurer 100 d\'etections de l'image {\tt test.jpg}
+(ou {\tt test.pgm} pour LSD). \\
+
+Le programme {\tt Scripts/owntimes <res> <start> <end>} produit un
+script {\tt exectimes.sh}.
+\begin{itemize}
+\item {\tt <res>} est le niveau de r\'esolution test\'e : 1, 2, ou 4.
+\item {\tt <start>} est le num\'ero d'ordre de la premi\`ere image test\'ee.
+\item {\tt <end>} est le num\'ero d'ordre de la derni\`ere image test\'ee.
+\end{itemize}
+Les noms des images \`a tester (sans les suffixes) sont dans le fichier
+{\tt ownImages.txt}. \\
+
+Algo cod\'e par {\tt exectimes.sh} :
+\begin{verbatim}
+Pour chaque image <num> de <start> a <end> :
+  Tirage aleatoire de l'ordre de test de detecteurs
+  Pour chaque detecteur <det>:
+    Charge l'image oud_<res>/image(<num>) dans Timers/<det>/test.jpg (ou pgm)
+    Lance le detecteur (effectue <repetitions=100> detections)
+    Ajoute la duree <det>perf.txt au fichier data/<det>times.txt
+\end{verbatim}
+
+Exception : pour {\tt FBSD}, il faut lancer le code {\tt FBSD -yt} pour
+produire le r\'esultat dans {\tt naiveperf.txt}. \\
+
+Avantage : on peut lancer que des s\'eries r\'eduites d'image \`a chaque fois
+pour \'eviter des engorgements avec les hautes r\'esolutions.
+En particulier, les images {oud01.jpg}, {oud06.jpg}, {oud13.jpg}, {oud15.jpg}
+et {oud17.jpg} \`a haute r\'esolution ({\tt oud\_1}) font planter
+CannyLines. Pour ces 5 images, la valeur de {\tt repetitions} est ramen\'ee
+\`a 50 dans {\tt Timers/cannylines/main.cpp}, et la mesure de temps
+fournie est multipli\'ee par 2 (\`a la main) dans {\tt data/cannytimes.txt}. \\
+
+Attention : penser \`a vider {\tt data/<det>times.txt}
+avant la premi\`ere s\'erie,
+et penser \`a sauvegarder ce fichier quand c'est fini. \\
+
+Une fois qu'on a compl\'et\'e et rang\'e les 4 fichiers
+{\tt data/<det>times.txt},
+le programme {\tt Scripts/moyennes/mtimes} calcule et affiche une valeur
+moyenne et un \'ecart-type pour chacun des 4 d\'etecteurs.
+Attention, il faut les dur\'ees pour les 102 images.
+
+\subsection{Comparaisons des lignes en nombre et longueur}
+
+Chaque script {\tt Scripts/create<det>s.sh <res>} lance l'extraction des
+lignes pour toutes les images \`a r\'esolution {\tt <res>} pour le
+d\'etecteur {\tt <det>}.
+Les versions des d\'etecteurs pour extraire les lignes en aveugle
+sont dans {\tt Liners}, sauf pour FBSD o\`u on utilise la commande
+{\tt FBSD -out test.jpg}.
+Les lignes sont rang\'ees dans le r\'epertoire {\tt oud\_<res>/<det>lines},
+avec un fichier
+{\tt <det>lines<num>.txt} pour chaque image {\tt oud<num>.jpg}. \\
+
+Ensuite le programme {\tt Scripts/meanlength} calcule une moyenne et
+un \'ecart-type pour le nombre, la longueur cumul\'ee et la longueur
+moyenne pour chaque d\'etecteur. Le code utilise le fichier
+{\tt images.txt} pour r\'ecup\'erer et afficher la r\'esolution des images.
+Les lignes de longueur inf\'erieure \`a {\tt MIN\_LENGTH = 10} ne sont pas
+prises en compte.
+Le r\'esultat est plac\'e dans un fichier {\tt meanlength.txt}.
+
+\section{Comparaisons sur YorkUrbanDB}
+
+C'est une s\'election de 102 images de l'Universit\'e d'York \`a Toronto,
+assorties de v\'erit\'es de terrain dans les trois principales directions.
+La r\'esolution est 640 x 408.
+
+\subsection{Comparaisons des temps d'ex\'ecution}
+
+{\tt Timers} contient les adaptations des d\'etecteurs externes
+pour automatiquement mesurer 100 d\'etections de l'image {\tt test.jpg}
+(ou {\tt test.pgm} pour LSD). \\
+
+Le programme {\tt Scripts/yorktimes <start> <end>} produit un
+script {\tt exectimes.sh}.
+\begin{itemize}
+\item {\tt <start>} est le num\'ero d'ordre de la premi\`ere image test\'ee.
+\item {\tt <end>} est le num\'ero d'ordre de la derni\`ere image test\'ee.
+\end{itemize}
+Les noms des images \`a tester (sans les suffixes) sont dans le fichier
+{\tt yorkImages.txt}. \\
+
+Algo cod\'e par {\tt exectimes.sh} :
+\begin{verbatim}
+Pour chaque image <num> de <start> a <end> :
+  Tirage aleatoire de l'ordre de test de detecteurs
+  Pour chaque detecteur <det>:
+    Charge l'image <num> dans Timers/<det>/test.jpg (ou pgm)
+    Lance le detecteur (effectue <repetitions=100> detections)
+    Ajoute la duree <det>perf.txt au fichier data/<det>times.txt
+\end{verbatim}
+
+Exception : pour {\tt FBSD}, il faut lancer le code {\tt FBSD -yt} pour
+produire le r\'esultat dans {\tt naiveperf.txt}. \\
+
+Avantage : on peut lancer que des s\'eries r\'eduites d'image \`a chaque fois
+pour \'eviter des engorgements. \\
+
+Attention : penser \`a vider {\tt data/<det>times.txt}
+avant la premi\`ere s\'erie,
+et penser \`a sauvegarder ce fichier quand c'est fini. \\
+
+Une fois qu'on a compl\'et\'e et rang\'e les 4 fichiers
+{\tt data/<det>times.txt},
+le programme {\tt Scripts/moyennes/mtimes} calcule et affiche une valeur
+moyenne et un \'ecart-type pour chacun des 4 d\'etecteurs.
+Attention, il faut les dur\'ees pour les 102 images.
+
+\subsection{Comparaisons des lignes en nombre et longueur}
+
+Les lignes des autres d\'etecteurs ont \'et\'e extraites par Phuc.
+Elles sont dans les r\'epertoires {\tt lines/<det>lines/output}. \\
+
+Le script {\tt Scripts/appli.sh createnaive} lance l'extraction des
+lignes pour toutes les images par FBSD (commande {\tt FBSD -out <image>}).
+Les lignes sont rang\'ees dans le r\'epertoire
+{\tt lines/cannylines/output} (qui doit \^etre pr\'ealablement cr\'e\'e,
+dans des fichier {\tt <image>.txt}.
+Attention, les anciens fichiers sont \'ecras\'es : pr\'evoir de recopier
+le r\'epertoire ailleurs avant de lancer cette commande. \\
+
+Ensuite le programme {\tt Scripts/meanlength} calcule une moyenne et
+un \'ecart-type pour le nombre, la longueur cumul\'ee et la longueur
+moyenne pour chaque d\'etecteur.
+Le programme ouvre tous les fichiers
+{\tt lines/<det>lines/output/<image>.txt}.
+Les lignes de longueur inf\'erieure \`a {\tt MIN\_LENGTH = 10} ne sont pas
+prises en compte.
+Le r\'esultat est plac\'e dans un fichier {\tt data/meanlength.txt}.
+
+\subsection{Comparaisons avec les v\'erit\'es de terrain}
+
+Le script {\tt compalines.sh} charge successivement pour chaque image :
+\begin{itemize}
+\item l'image York dans {\tt FBSD/Data/york.jpg},
+\item les lignes York dans {\tt FBSD/Data/yorklines.txt},
+\item les lignes Canny dans {\tt FBSD/Data/cannylines.txt},
+\item les lignes LSD dans {\tt FBSD/Data/lsdlines.txt},
+\item les lignes ED dans {\tt FBSD/Data/edlines.txt},
+\item les lignes FBSD na\"{\i}ves dans {\tt FBSD/Data/naivelines.txt},
+\end{itemize}
+puis appelle {\tt FBSD york} qui lance les comparaisons directement
+avec {\tt ExtLines}.
+Les r\'esultats sont plac\'es dans {\tt YorkUrbanDB/data/} \`a
+l'int\'erieur
+\begin{itemize}
+\item de fichiers {\tt <det>cov.txt} qui contiennent pour chaque image
+le taux de recouvrement des v\'erit\'es de terrain,
+\item et de fichiers {\tt <det>ln.txt} qui contiennent pour chaque image le
+nombre de lignes d\'etect\'ees, la longueur cumul\'ee et la longueur
+moyenne.
+\end{itemize}
+La moyenne sur ces mesures peut ensuite \^etre obtenue par les scripts
+{\tt data/moyennes/mcov} et {\tt data/moyennes/mlines}, ce dernier \'etant
+redondant avec une obtention via {\tt meanlength}. \\
+
+{\bf Ecarts angulaires} \\
+Commencer par d\'etruire les fichiers {\tt data/<det>ang.txt}. \\
+{\tt > source appli.sh compepais}. \\
+Puis dans le r\'epertoire {\tt data} : {\tt moyennes/mang} \\
+Le script {\tt compepais.sh} calcule pour l'image en argument
+les longueurs de correspondance et les \'ecarts angulaires pour chaque
+d\'etecteur avec la v\'erit\'e de terrain York.
+Pour cela il lance le programme {\tt compepais <det> <image>} qui place
+le r\'esultat (longueurs de correspondance et \'ecart angulaire)
+dans {\tt tmp.txt}. Ce programme a un param\`etre interne
+{\tt MIN\_LENGTH} qui correspond \`a la longueur minimale de mise en
+correspondance pour que le r\'esultat soit pris en compte
+(actuellement 20). \\
+Comme il peut y avoir de grosses disparit\'es de longueurs de mise en
+correspondance, on calcule aussi un \'ecart angulaire global comme
+le rapport de la somme de tous les \'ecarts angulaires sur toutes les images 
+et de la longueur de toutes les longueurs de mise en correspondance sur
+toutes les images.
+
+\section{Tests sur images de synth\`ese}
+
+On ne compare que l'\'evolution entre le d\'etecteur de la publi IWCIA'09
+et le nouveau d\'etecteur.
+
+Simple lancement par : {\tt FBSD -random}
+
+En cas de soucis, passer la variable {\tt dispLast} \`a {\tt true} dans
+{\tt bsrandomtester.cpp}, puis regarder les cartes obtenues sur le dernier
+segment ({\tt new\_map.png} et {\tt old\_map.png}). Le vert (vrais positifs)
+doit dominer. Le bleu correspond aux vrais n\'egatifs (portions de segments
+non d\'etect\'es) et le rouge aux faux positifs (d\'etections en dehors).
+
+\end{document}
-- 
GitLab