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