\chapter{Resultados e Discussão}\label{chapter:resultados}
\thispagestyle{myheadings}

Para avaliar o desempenho do software implementado serão descritas neste capítulo medições e comparações entre estes, bem como enumerar algumas situações de falhas observadas. Pretende-se também estabelecer qual a fiabilidade dos métodos e quais as suas limitações. Para tal foi efetuada uma análise quantitativa aos dois modelos, e realizaram-se algumas experiências ao longo de um percurso na cidade de Aveiro (fig. \ref{fig:google_maps}). 

\begin{figure}[H]
  \centering
    \includegraphics[width=0.67\textwidth]{./Imagens/maps.pdf}
    \caption{Trajeto percorrido para geração do ``ground-truth''.}
    \label{fig:google_maps}
\end{figure}

Para se poder recriar as mesmas condições usou-se uma ferramenta disponibilizada pelo ROS para acumulação de mensagens em disco ao longo do tempo, podendo assim efetuar uma análise comparativa entre os métodos utilizados. Desta forma, o sistema operativo ROS apresenta um papel fundamental na obtenção de resultados, já que permite a avaliação dos métodos abordados exatamente nas mesmas condições.


Para cada algoritmo implementado foram variados os valores de alguns parâmetros que possuem significado aparente mais relevante. No próximo conjunto de gráficos é possível observar a variação destes parâmetros e o seu impacto no comportamento dos algoritmos. O valor ótimo do parâmetro será aquele que maximiza a deteção da estrada, para tal foi usado o VRI(Valid Road Index), ou seja, o resultado é útil (VRI=1) quando pelo menos $80 \%$ dos pixels da estrada são identificados corretamente, caso contrário os resultados são descartados (VRI=0).

\section{Algoritmo ``Real Time Detection of Lane Markers in Urban Streets''}
Para este algoritmo foram testados vários parâmetros, vários dos quais não apresentaram resultados interessantes, sendo que alguns destes são parâmetros próprios do tipo de imagem (ex: tamanho da janela de análise). 
Os parâmetros escolhidos foram, ``DetectionThreshold'', ``GroupThreshold'', ``KernelWith'', ``KernelHeight'', ``LineWith'', ``lineHeight'' and ``LineGap''.\\

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%DetectionThreshold%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tabular}{cc}
  \centering
\begin{minipage}[l]{0.50\textwidth}
	\begin{itemize}[leftmargin=*]
  		\item \textit{DetectionThreshold}: Este parâmetro define o \textit{threshold} utilizado para a binarização da imagem de perspetiva invertida. Binarização é um processo de segmentação de imagens baseado na diferença dos níveis que compõe diferentes objetos de uma imagem. A partir de um limiar estabelecido de acordo com as características dos objetos a isolar, a imagem pode ser segmentada em dois grupos, com níveis de cinza abaixo e acima do limiar.
  	\end{itemize}
\end{minipage}
  \begin{minipage}[c]{0.40\textwidth}
    \centering
    \begin{tabular}{l|l}
  		\multicolumn{2}{ c }{Parâmetros} \\
  		\hline
  		\hline
 	 	DetectionThreshold 	& Variável \\
  		GroupThreshold	 	& 10 \\
  		KernelWith 			& 2 \\
  		KernelHeight 		& 2 \\
  		LineWith 			& 2000 \\
  		lineHeight 			& 300 \\
	\end{tabular}
   \end{minipage}
\end{tabular}\\[-0.5cm]

\begin{figure}[H]
\centering
\includegraphics[width=0.85\textwidth]{./Imagens/detectionthreshold_grid_vri.pdf}
\caption{Variação do parâmetro ``detectionthresold'' para diferentes definições de VRI.}\label{fig:1a}		
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%GroupThreshold%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tabular}{c c}
  \centering
\begin{minipage}[l]{0.50\textwidth}
	\begin{itemize}[leftmargin=*]
    		\item \textit{GroupThreshold}: Este parâmetro define o número de linhas a agrupar na imagem de perspetiva invertida.    
    \end{itemize}
  \end{minipage}
  \begin{minipage}[c]{0.40\textwidth}
    \centering
    \begin{tabular}{ l|l }
  		\multicolumn{2}{ c }{Parâmetros} \\
  		\hline
  		\hline
 	 	DetectionThreshold 	& 30 \\
  		GroupThreshold	 	& Variável \\
  		KernelWith 			& 2 \\
  		KernelHeight 		& 2 \\
  		LineWith 			& 2000 \\
  		lineHeight 			& 300 \\
	\end{tabular}
   \end{minipage}
   \end{tabular}\\[-0.5cm]

\begin{figure}[H]
\centering
\includegraphics[width=0.85\textwidth]{./Imagens/groupthreshold_grid_vri.pdf}
\caption{Variação do parâmetro ``groupThreshold'' para diferentes definições de VRI}\label{fig:1b}
\end{figure}
\clearpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%KernelWith%%%%%%KernelHeight%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tabular}{c c}
  \centering
\begin{minipage}[l]{0.50\textwidth}
\begin{itemize}[leftmargin=*]
    \item \textit{KernelWith} and \textit{KernelHeight}: Estes parâmetro definem respetivamente a largura e altura dos valores usado no filtro gaussiano da imagem de perspetiva invertida. 
\end{itemize}   
  \end{minipage}
    \begin{minipage}[c]{0.40\textwidth}
    \centering
    \begin{tabular}{ l|l }
  		\multicolumn{2}{ c }{Parâmetros} \\
  		\hline
  		\hline
 	 	DetectionThreshold 	& 30 \\
  		GroupThreshold	 	& 10 \\
  		KernelWith 			& Variável \\
  		KernelHeight 		& Variável \\
  		LineWith 			& 2000 \\
  		lineHeight 			& 300 \\
	\end{tabular}
   \end{minipage}
   \end{tabular}\\[-0.5cm]

\begin{figure}[H]
\centering
\includegraphics[width=0.75\textwidth]{./Imagens/kernelwith.pdf}
\includegraphics[width=0.75\textwidth]{./Imagens/kernelheight.pdf}
\caption{Variação do parâmetro ``KernelWith'' e ``KernelHeight'' para diferentes definições de VRI}\label{fig:1b}
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%LineHeight%%%%LineWith%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{tabular}{c c}
  \centering
\begin{minipage}[l]{0.50\textwidth}
\begin{itemize}[leftmargin=*]
    \item \textit{LineHeight} and \textit{LineWith}: Estes parâmetros definem respetivamente a largura e altura máxima das linhas na imagem de perspetiva invertida.    
    \end{itemize}

  \end{minipage}
  \hfill
  \begin{minipage}[c]{0.40\textwidth}
    \centering
    \begin{tabular}{ l|l }
  		\multicolumn{2}{ c }{Parâmetros} \\
  		\hline
  		\hline
 	 	DetectionThreshold 	& 30 \\
  		GroupThreshold	 	& 10 \\
  		KernelWith 			& 2 \\
  		KernelHeight 		& 2 \\
  		LineWith 			& Variável \\
  		lineHeight 			& Variável \\
	\end{tabular}
   \end{minipage}
   \end{tabular}

\begin{figure}[H]
\centering
\includegraphics[width=0.75\textwidth]{./Imagens/linewidth.pdf}
\includegraphics[width=0.75\textwidth]{./Imagens/lineheight.pdf}
\caption{Variação do parâmetro ``lineheight'' e ``linewidth'' para diferentes definições de VRI }\label{fig:1b}
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage
\section{Algoritmo ``Lane Tracker''}
Para este algoritmo foram testados vários parâmetros dos quais ``LineGap'', ``MinVote'' e ``TrackThreshold'' foram os que apresentaram resultados mais interessantes.\\

%%%%%%%%%%%%%%%%%%%%%%%%%%%%Minipage%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tabular}{c c}
  \centering
\begin{minipage}[l]{0.50\textwidth}
\begin{itemize}[leftmargin=*]
\item \textit{MaxLineGap}: Este parâmetro define o intervalo máximo entre dois pontos para estes poderem ser considerados pertencentes a mesma linha. 
\end{itemize}
  \end{minipage}
  \begin{minipage}[c]{0.40\textwidth}
    \centering
    \begin{tabular}{ l|l }
  		\multicolumn{2}{ c }{Parâmetros} \\
  		\hline
  		\hline
 	 	LineGap 			& Variável \\
  		MinVote	 		& 30 \\
  		TrackThreshold 	& 100 \\
	\end{tabular}
   \end{minipage}
   \end{tabular}\\[-0.5cm]

\begin{figure}[H]
\centering
\includegraphics[width=0.75\textwidth]{./Imagens/linegap.pdf}
\caption{Variação do parâmetro ``MaxLineGap'' para diferentes definições de VRI.}\label{fig:1b}
\end{figure}
\clearpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%MinVote%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tabular}{c c}
  \centering
\begin{minipage}[l]{0.50\textwidth}
\begin{itemize}[leftmargin=*]
 \item \textit{MinVote}: Este parâmetro define o número minimo de votos para definir uma linha. 
\end{itemize}  
 \end{minipage}
  \begin{minipage}[c]{0.40\textwidth}
    \centering
    \begin{tabular}{ l|l }
  		\multicolumn{2}{ c }{Parâmetros} \\
  		\hline
  		\hline
 	 	LineGap 			& 170 \\
  		MinVote	 		& Variável \\
  		TrackThreshold 	& 100 \\
	\end{tabular}
   \end{minipage}
   \end{tabular}\\[-1cm]
\begin{figure}[H]
\centering
\includegraphics[width=0.74\textwidth]{./Imagens/minvote.pdf}
\caption{Variação do parâmetro ``MinVote'' para diferentes definições de VRI.}\label{fig:1b}
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%TrackThreshold%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tabular}{c c}
  \centering
\begin{minipage}[l]{0.50\textwidth}
\begin{itemize}[leftmargin=*]
  \item \textit{TrackThreshold}: Este parâmetro define o limiar de binarização da imagem das linhas da estrada. 
\end{itemize}
  \end{minipage}
  \begin{minipage}[c]{0.40\textwidth}
    \centering
    \begin{tabular}{ l|l }
  		\multicolumn{2}{ c }{Parâmetros} \\
  		\hline
  		\hline
 	 	LineGap 			& 170 \\
  		MinVote	 		& 30 \\
  		TrackThreshold 	& Variável \\
	\end{tabular}
   \end{minipage}
   \end{tabular}\\[-0.3cm]
\begin{figure}[H]
\centering
\includegraphics[width=0.74\textwidth]{./Imagens/thresold_new.pdf}
\caption{Variação do parâmetro ``Threshold'' para diferentes definições de VRI.}\label{fig:1b}
\end{figure}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Comparação entre os algoritmos}


Para além das combinações de valores apresentadas foram ainda testadas combinações de valores maximizantes para os parâmetros definidos, para verificar a existência de dependência entre parâmetros. Contudo estes revelaram-se independentes.
Com base nos gráficos apresentados, foi determinado um conjunto de valores dos parâmetros, sendo aqueles que maximizam o desempenho médio, usando assim o método anteriormente descrito para o quantificar \citep{ding_comparison_2013},\citep{m._alvarez_3d_2010}.

\begin{table}[h]\caption{Valores dos parâmetros usados para efetuar os testes aos algoritmos.}

 \begin{subtable}[h]{0.45\textwidth}
        \centering
    \begin{tabular}{ l|l }
  		\multicolumn{2}{c}{Parâmetros} \\
  		\hline
  		\hline
 	 	DetectionThreshold 	& 30 \\
  		GroupThreshold	 	& 10 \\
  		KernelWith 			& 2 \\
  		KernelHeight 		& 2 \\
  		LineWith 			& 500 \\
  		lineHeight 			& 150 \\
	\end{tabular}
	        \caption{Parâmetros usados no algoritmo Real Time Detection of Lane Markers in Urban Streets}
\end{subtable}
 \hfill
\begin{subtable}[h]{0.45\textwidth}
        \centering
	\begin{tabular}{ l|l }
  		\multicolumn{2}{c}{Parâmetros} \\
  		\hline
  		\hline
 	 	LineGap 			& 170 \\
  		MinVote	 		& 20 \\
  		TrackThreshold 	& 100 \\
	\end{tabular}
	        \caption{Parâmetros usados no algoritmo Lane Tracker}
\end{subtable}
    \label{table:max_values}
\end{table}



Os resultados apresentados na tabela \ref{table:performance} demonstram o desempenho dos algoritmos para a deteção das linhas de marcação da estrada para os parâmetros definidos na tabela \ref{table:max_values}.

\begin{minipage}{\textwidth}
\begin{table}[H]\caption{Desempenho dos diferentes algoritmos para um mesmo dataset.} 

\centering
\begin{tabular}{|c|c|c|c|c|}
\cline{2-4}
 \multicolumn{1}{c|}{} & \multicolumn{3}{c|}{Dataset} \\ 
\cline{2-4}
 \multicolumn{1}{c|}{} & $\hat{g}$ & DA & DR   \\
 \hline
 \begin{tabular}{c}
 Real Time Detection of Lane\\ Markers in Urban Streets 
\end{tabular}   & $0.892\pm0.07$ &  $0.899\pm0.08$ & $0.992\pm0.01$   \\ 
 \hline
Lane Tracker & $0.868\pm0.08$ & $0.886\pm0.03$ & $0.979\pm0.03$    \\
 \hline
Lane Tracker\footnote{Utilizando a segmentação de regiões ``watershed''} & $0.835\pm0.07$ & $0.982\pm0.03$ & $0.848\pm0.03$    \\
 \hline
\end{tabular}
\label{table:performance}
\end{table}
\end{minipage}
\\[0.5cm]
Nas figuras seguintes são apresentados os resultados dos algoritmos implementados para cada frame individual assim como a estimativa da distância do ponto mais distante da linha encontrada ao carro. 
\clearpage

\begin{landscape}
\begin{figure}[H]
  \centering
    \includegraphics[width=1.3\textwidth]{./Imagens/drawing_3svg.pdf}
    \caption{Gráfico do desempenho do algoritmo ``Lane Tracker'' para cada frame do dataset.}
    \label{fig:lane_tracker_dist}
\end{figure}
\end{landscape}
\clearpage
\begin{landscape}
\begin{figure}[H]
  \centering
    \includegraphics[width=1.3\textwidth]{./Imagens/drawing_caltech.pdf}
    \caption{Gráfico do desempenho do algoritmo ``Real Time Detection of Lane Markers in Urban Streets'' para cada frame do dataset.}
    \label{fig:real_time_dist}
\end{figure}
\end{landscape}
\clearpage
E possível observar que em ambos os casos existem casos em que a estrada não é bem identificada, por exemplo, o carro que segue em sentido contrário (frame 149, fig. \ref{fig:lane_tracker_dist} e fig. \ref{fig:real_time_dist}) não é bem identificado. Contudo em casos de curva é visível que o algoritmo Real Time Detection of Lane Markers in Urban Streets é mais preciso (Frame 35 e 260, fig. \ref{fig:lane_tracker_dist} e fig. \ref{fig:real_time_dist}).

Nos casos em que o algoritmo não seja capaz de identificar qualquer tipo de linha será publicado o resultado do frame anterior, pois em ambos os casos a distância de deteção das linhas é superior á distância entre eixos do veiculo (fig. \ref{fig:atlas_axis_distance})


\begin{figure}[H]
  \centering
    \includegraphics[width=0.7\textwidth]{./Imagens/atlas_axis_distance.pdf}
    \caption{Distância entre eixos AtlasCar.}
    \label{fig:atlas_axis_distance}
\end{figure}

Uma vez que o algoritmo trabalha a uma frequência de 50hz, e o carro viaja a uma velocidade máxima de 50km/h em estradas urbanas, o carro percorre cerca de 0.2m entre cada análise.
%\clearpage
%~\\
%\thispagestyle{empty}