%------------------------------------------------------------------------------------
% This is an introduction and description on stereo processing
%------------------------------------------------------------------------------------

\subsection{Princípio de funcionamento} \label{subsec:principle}

Nas secções anteriores, abordaram-se as questões de aquisição de dados
do sistema sensorial em causa e a respetiva calibração; nesta secção
descreve-se a forma como a informação de imagens do sensor pode ser 
convertida para dados tridimensionais para posterior análise.

A visão estéreo consiste na interpretação de dados de duas ou mais imagens obtidas do
mesmo cenário de pontos de vista diferentes. O princípio de funcionamento é semelhante
ao que acontece com a visão humana, na qual cada um dos olhos fornece uma perspetiva
diferente do cenário visualizado, o que dá uma perceção tridimensional do ambiente que nos rodeia.

Sabendo a diferença de posição entre duas câmaras (\textit{baseline}) e as suas propriedades óticas, é possível
estimar a localização de objetos em profundidade num determinado cenário.
O princípio consiste em aplicar a diferença de coordenadas das duas imagens, 
sabendo que quanto mais próximo um determinado obstáculo estiver da câmara, 
maior será a diferença em píxels nas duas imagens obtidas, ou seja, maior
será a sua disparidade.

\begin{figure}[h!]
\centering
\includegraphics[width=\textwidth]{Images/stereo_color_pair_zone.eps}
\caption{Par de imagens estéreo.}
\label{fig:stereo_pair_zone}
\end{figure}

Atente-se, por exemplo, aos blocos de píxels assinalados a diferentes cores na figura \ref{fig:stereo_pair_zone}.
Como é fácil compreender, a diferença de coordenadas de píxels nas duas imagens será maior no objeto assinalado
a vermelho (objeto mais próximo), que no objeto assinalado a verde (objeto mais longínquo).

\subsection{Correspondência estéreo} \label{subsubsec:correspondence}

A corresponência estéreo consiste no método de determinação
de semelhanças entre as duas imagens para o cálculo da disparidade.
Para uma melhor compreensão da correspondência estéreo, tome-se a titulo de exemplo a 
figura \ref{fig:stereo_pair_zone}, obtida pela câmara estéreo a bordo do ATLASCAR.
Para determinar a correspondência de píxels e o respetivo mapa de disparidade, divide-se
a imagem da esquerda em zonas. Atente-se à zona assinalada a vermelho na
ilustração \ref{fig:stereo_epipolar_search} (figura da esquerda). Para cada zona nesta
imagem, procura-se a zona de maior correspondência na imagem da direita, numa banda horizontal à mesma
altura do bloco de procura (figura \ref{fig:stereo_epipolar_search}). 
Este método designa-se por \textit{Block Match} e é baseado na geometria epipolar, ou seja, 
exige que as imagens estejam perfeitamente alinhadas na horizontal, o que implica 
que o par estéreo seja previamente calibrado conforme a descrição na secção \ref{sec:calibration}.
O método encontra-se implementado no módulo ROS (\textit{stereo\_image\_proc}), cuja descrição
detalhada do funcionamento encontra-se detalhado adiante.

\begin{figure}[h!]
\centering
\includegraphics[width=\textwidth]{Images/stereo_color_pair_epipolar_search.eps}
\caption{Correspondência estéreo.}
\label{fig:stereo_epipolar_search}
\end{figure}

A essência do problema no uso da visão estéreo está na relação inversa entre 
a qualidade de mapas de disparidade obtidos e o custo computacional envolvido no processo de cálculo.
Torna-se necessário jogar com estes dois fatores de forma a encontrar a melhor relação entre qualidade e custos computacionais.
Dos diversos algoritmos de cálculo de zonas de correspondência, existem situações comuns 
que frequentemente geram zonas de correspondência mal calculada \cite{STEREO_COMPARISON}.
A seguir enumeram-se as principais: 

\begin{itemize}
 \item Superfícies refletoras de luminosidade.
 \item Regiões com falta de textura que causam ambiguidade.
 \item Descontinuidades de profundidade nas arestas dos objetos, especialmente quando os objetos são finos.
 \item Zonas oclusas, quando um objeto se encontra a ocludir parte de outro.
      Na verdade os algoritmos deveriam detetar zonas de oclusão quando as arestas dos obstáculos se intersetam
mas normalmente não o fazem \cite{STEREO_COMPARISON}.
\end{itemize}

\subsection{Cálculo da disparidade} \label{subsubsec:disparity}
A partir dos princípios descritos anteriormente,
é possível obter uma imagem com diferentes tonalidades em que cada tom representa uma distância diferente.
Esta representação constitui um mapa de disparidade, exemplificado na figura \ref{fig:disparity}, onde claramente se
reconhece que os tons mais claros representam objetos mais próximos da câmara e os
tons mais escuros representam objetos mais distantes.

\begin{figure}[h!]
\centering
\includegraphics[scale=0.5]{Images/Disparity.eps}
\caption{Mapa de disparidade.}
\label{fig:disparity}
\end{figure}

Com particular interesse na aplicação de visão estéreo no ATLASCAR, pretende-se um algoritmo
com elevada eficiência para processamento em tempo real. A forma mais eficaz
de calcular estéreo é a utilização da geometria epipolar para reduzir ao máximo as zonas de
procura de semelhanças entre pares de imagens \cite{OPENCV}. Esta geometria é de extrema importância
porque torna possível a procura apenas numa dimensão em vez de duas, e para além de reduzir o 
custo computacional envolvido, tem a vantagem acrescida de reduzir as zonas que poderiam induzir 
o erro de disparidade \cite{OPENCV}.

Em ambiente de programação ROS existe um nodo bastante otimizado para cálculo estéreo
baseado em ferramentas do OpenCv, denominado por \textit{stereo\_image\_proc}, cujas etapas do algoritmo de cálculo enunciam-se pela seguinte 
ordem \cite{OPENCV}:

\begin{enumerate}
 \item  Remoção matemática da distorção causada pelas lentes, para obtenção de imagens distorcidas.
 \item  Ajuste de ângulos e distâncias entre lentes para obtenção de imagens alinhadas na horizontal e retificadas.
 \item  Cálculo da correspondência, para obtenção de um mapa de disparidade de diferenças de coordenadas horizontais.
 \item  Conversão do mapa de disparidades para um mapa de profundidades por triangulação. 
\end{enumerate}

O funcionamento dos algoritmos de distorção e retificação de imagem são
semelhantes aos usados para outras câmaras que não as estéreo, portanto 
não são especificados aqui os detalhes acerca da sua utilização.
Uma descrição mais detalhada pode ser encontrada em \textit{Learning OpenCV} \cite{OPENCV}

Para o cumprimento do terceiro tópico mencionado na lista acima, é necessário
recorrer os seguintes passos.

\begin{enumerate}
 \item Pré filtragem das imagens para normalizar o brilho e enaltecer a textura das superfícies.
 \item Cálculo da disparidade através do algoritmo da soma das diferenças absolutas.
 \item Pós filtragem para reduzir as zonas de má correspondência.
\end{enumerate}

A pré filtragem consiste na normalização da imagem, em que se faz percorrer uma 
janela de determina dimensão sobre a imagem entre 5x5 (min) a 21x21 (max), em que o pixel central $I_c$ é substituído por: 

\begin{equation}
I_c=min[max(I_c - I , - I_{cap}), I_{cap}] 
\label{eq:prefilter}
\end{equation}

em que $I$ é o valor médio calculado 
na janela e $I_{cap}$ é um limite numérico, normalmente com valor 
constante igual a trinta \cite{OPENCV}.
A dimensão da janela a percorrer é especificada pelo utilizador, e o seu valor
constitui um dos parâmetros de configuração do nodo ROS (\textit{prefilter\_size}). 
De seguida, é necessário aplicar o método de deteção de semelhanças entre as imagens.
O método consiste na aplicação de uma janela (5x5 até 21x21)
SAD (\textit{Sum of absolute difference}) em imagens retificadas e monocromáticas.
Esta varíável denomina-se por janela de correlação (\textit{correlation\_window\_size}) 
e é também um parâmetro definido pelo utilizador. 
Este método é interessante e largamente utilizado em aplicações que exigem um tempo de 
processamento reduzido, uma vez que apenas envolve cálculos de somas e subtrações \cite{OPENCV}. 
Para melhor compreender o método, considere-se uma zona de dimensão 3x3 (píxels) proveniente da 
imagem da esquerda da câmara estéreo,
que corresponde a um modelo; e outra zona 3x5 (píxels) obtida da imagem da direita da câmara
que representa a zona de procura na mesma linha epipolar. Os valores dos píxels estão representados
por números inteiros de zero a nove para simplificação do exemplo.

\begin{center}
\begin{tabular}{cc}
\textbf{Modelo} & \textbf{Zona de Procura} \\
   $ \begin{bmatrix}
    2 & 5 & 5 \\
    4 & 0 & 7 \\
    7 & 5 & 9
  \end{bmatrix} $      
&
$  \begin{bmatrix}
    2 & 7 & 5 & 8 & 6 \\
    1 & 7 & 4 & 2 & 7 \\
    8 & 4 & 6 & 8 & 6 \\
  \end{bmatrix} $ 
\end{tabular}
\end{center}


Existem apenas três localizações onde o modelo apresentado pode encaixar na zona de procura, na esquerda,
no centro ou na direita. Para saber qual a melhor zona de correspondência, calcula-se a soma
das diferenças absolutas. Por exemplo, a começar pela esquerda: $|2-2|=0$, $|4-1|=3$, $|7-8|=|-1|=1$ e os restantes
resultados obtendo as diferenças, para as três possibilidades.

\begin{center}
\begin{tabular}{ccc}

\textbf{Esquerda} &  \textbf{Centro} & \textbf{Direita} \\
$
  \begin{bmatrix}
    0 & 2 & 0 \\
    3 & 7 & 3 \\
    1 & 1 & 3
  \end{bmatrix}
$
 & 
$
  \begin{bmatrix}
    5 & 0 & 3 \\
    3 & 4 & 5 \\
    3 & 1 & 1
  \end{bmatrix}
$ &

$
  \begin{bmatrix}
    3 & 3 & 1 \\
    0 & 2 & 0 \\
    1 & 3 & 4
  \end{bmatrix}
$ \\
\end{tabular}
\end{center}

Por fim, basta obter a soma de todas as diferenças, que resulta em: $20$, $25$ e $17$. Conclui-se que a zona da direita
é a mais semelhante do modelo, porque a soma das diferenças absolutas é a menor. 
Ao aplicar este princípio a todas as zonas da imagem, é possível completar o mapa de disparidade.

Para finalizar o método, procede-se a uma pós filtragem de dados, que visa
excluir do mapa regiões de falha no método de cálculo de correspondência.
A primeira etapa de filtragem consiste na remoção das zonas onde a textura é menor que um determinado
valor (normalmente 12) \cite{OPENCV}. 
Este valor consiste apenas num limite numérico aplicado diretamente ao resultado da soma das diferenças absoluta.
O cálculo de correspondência por blocos é limitado
na obtenção de bons resultados nos limites dos objetos, isto porque a janela de correspondência
agrega píxels do objeto e píxels do fundo em simultâneo. Nesses limites, ao calcular a soma das diferenças
absolutas, ocorre o efeito denominado por \textit{speckling}, semelhante ao demonstrado
na secção acerca de calibração. (figura \ref{fig:speckling}).
Na tentativa de redução de maus cálculos de disparidade aplica-se um limite (\textit{uniqueness\_ratio}) em percentagem
à correlação de píxels dado pela expressão:

\begin {equation}
 uniqueness\_ratio \ge \dfrac{match\_val - min\_match}{min\_match}
\end {equation}

em que o valor de $match\_val$ é o valor da correspondência determinada
pela aplicação da soma das diferenças absolutas e o valor de $min\_match$
é o valor mínimo da função de correspondência.

A etapa final consiste na aplicação de uma janela (5x5 até 21x21) píxels sobre o mapa de disparidade. 
Desde que os valores mínimo e máximo de disparidades dentro dessa janela respeitem um limite (normalmente igual a 4) \cite{OPENCV}, 
a correspondência é permitida. No caso da correspondência não ser admitida,
essa zona fica por preencher no mapa de disparidade, ou seja, é uma zona indeterminada.

\subsection{Parâmetros} \label{subsec:parameters}

O módulo existente em ROS para cálculo estéreo permite a utilização de um servidor de parâmetros estéreo.
A tabela \ref{tab:parameters} enumera os parâmetros configuráveis em estéreo, os valores padrão e estimados,
e a forma em que eles podem influenciar a qualidade estéreo resultante \cite{OPENCV}.

\begin{table}[h!]
\centering
\resizebox{\textwidth}{!}{
\begin{tabular}{c|c|p{6cm}|p{1.4cm}|p{1.4cm}|}
\cline{2-5}
								 & \textbf{Parâmetro} 		        &  \textbf{Descrição}    										  		     & \textbf{Valor padrão}  & \textbf{Valor utilizado} \\ \hline
\multicolumn{1}{|c|}{}					         &  \textit{prefilter\_size}    	& Reduz diferenças na iluminação por normalização da imagem.  					    &   $ 9 \times 9 $       & $21 \times 21$  \\ \cline{2-5}
\multicolumn{1}{|c|}{\multirow{4}{*}{\rotatebox{90}{Pré filtragem}}}		 &  \textit{prefilter\_cap}       	& Constante de normalização de imagem. 					            &         $30$           & $63$            \\ \cline{2-5}		
\multicolumn{1}{|c|}{}						 &  \textit{correlation\_window\_size}  & Tamanho da janela de correspondência. 							    &     $15 \times 15$     & $15 \times 15$  \\ \cline{2-5}
\multicolumn{1}{|c|}{}		          			 &  \textit{min\_disparity}  	  	& Disparidade mínima. 									            &       $0 $             & $0$             \\ \cline{2-5}
\multicolumn{1}{|c|}{}						 &  \textit{disparity\_range}		& Campo de procura de correspondência estéreo. 							    &       $64$             & $32$            \\ \hline
\multicolumn{1}{|c|}{}						 &  \textit{uniqueness\_ratio}		& Limite em percentagem. A correlação só é aceite se o valor da disparidade calculada for reduzido. &       $10$             & $10$            \\ \cline{2-5}
\multicolumn{1}{|c|}{\multirow{3}{*}{\rotatebox{90}{Pós filtragem}}} &  \textit{texture\_threshold}		& Valor mínimo da textura para calcular a disparidade.                                              &       $10$             & $100$           \\ \cline{2-5}
\multicolumn{1}{|c|}{}						 &  \textit{speckle\_size}     		& Área máxima para remoção de \textit{speckling}.                                                   &       $100$            & $400$           \\ \cline{2-5}
\multicolumn{1}{|c|}{}						 &  \textit{speckle\_range}   		& Campo máximo de disparidade aceite entre píxels ligados.                                          &       $4$              & $15$            \\ \hline
\end{tabular}}
\caption{Parâmetros do algoritmo \textit{Block Match}}
\label{tab:parameters}
\end{table}

Não existem parâmetros que satisfaçam os requisitos da aplicação pretendida em todas as situações,
nem existe uma forma matemática para os poder determinar de forma coerente \cite{OPENCV}.
Os valores a utilizar dependem da aplicação pretendida, das condições de luminodidade e
do alcance que se pretende obter \cite{OPENCV}.
Contudo, o servidor de parâmetros do ROS permite ajustar os valores do processo
de cálculo estéreo, em que o critério é o \textit{feedback} visual da nuvem de pontos obtida.
Dos parâmetros ajustados, salienta-se a alteração do \textit{prefilter\_size} e do
\textit{prefilter\_cap} para aumentar a normalização da imagem, ditada pela equação 
\ref{eq:prefilter}. Uma vez que o veículo circula em ambiente exterior,
onde a fonte de iluminação é o sol,
a aplicação de um filtro de maior dimensão ajuda no sentido de normalizar 
a iluminação em superfícies refletoras, apesar de aumentar ligeiramente os requisitos
de processamento. Por outro lado, diminuiu-se ligeiramente o fator \textit{disparity\_range}
para reduzir o campo de procura estéreo e desta forma diminuir a computação.
O limite de textura exigido foi também aumentado significativamente (\textit{texture\_threshold}),
o que revelou a eliminação na nuvem de pontos de zonas de disparidade
mal calculadas. Por fim, aumentaram-se também os limites dos parâmetros
\textit{speckle\_size} e \textit{speckle\_range}.
O aumento destes limites conduziu à remoção de alguns pontos que influenciam
o \textit{speckling} explicado na subsecção \ref{subsubsec:speckling}
que é um fator importante, já que o principal objetivo é a segmentação da nuvem de pontos,
e neste caso, quanto menos pontos houver nas fronteiras entre segmentos maior
será a eficácia da segmentação.

A figura \ref{fig:parameters} ilustra um exemplo visual de como a alteração 
dos parâmetros estéreo da tabela \ref{tab:parameters} influenciam a nuvem de pontos
obtida.

% \begin{figure}[h!]
% \centering
% \includegraphics[scale=0.4]{Images/parameters_unchanged.eps}
% \caption{Exemplo da nuvem de pontos com o valor padrão dos parâmetros.}
% \label{fig:parameters}
% \end{figure}
% 
% \begin{figure}[h!]
% \centering
% \includegraphics[scale=0.4]{Images/parameters_changed.eps}
% \caption{Exemplo da nuvem de pontos com o valor estimado dos parâmetros.}
% \label{fig:parameters2}
% \end{figure}


\begin{figure}[h!]
\begin{minipage}[b]{0.5\linewidth}
\centering
\subfigure[Valor padrão.]
{
  \includegraphics[width=\textwidth]{Images/parameters_unchanged.eps}
  \label{subfig:parameters_unchanged}
}
\end{minipage}
\begin{minipage}[b]{0.5\linewidth}
\centering
\subfigure[Valor utilizado.]
{
  \includegraphics[width=\textwidth]{Images/parameters_changed.eps}
  \label{subfig:parameters_changed}
}
\end{minipage}
\caption{Exemplo visual do efeito da alteração de parâmetros.}
\label{fig:parameters}
\end{figure}

A alteração dos parâmetros permite obter uma qualidade superior nas superfícies
frontais representadas, como no pormenor assinalado a vermelho nas figuras \ref{subfig:parameters_unchanged}
e \ref{subfig:parameters_changed}, que resulta da alteração dos valores dos parâmetros de pré filtragem (\textit{prefilter\_size} e \textit{prefilter\_cap}). 
Por outro lado, as alterações revelaram um pouco de perda
de densidade na nuvem de pontos em zonas de baixa textura, como por exemplo,
na estrada (zona assinalada a verde nas figuras \ref{subfig:parameters_unchanged} e \ref{subfig:parameters_changed}), 
derivado à alteração dos parâmetros relativos aos limites de textura (\textit{texture\_threshold}).
Desta forma, verifica-se que não existe um conjunto de parâmetros capaz
de satisfazer todas as aplicações com estéreo, e mesmo dentro de uma aplicação,
os valores utilizados podem não ser sempre os mais adequados.
Contudo, neste trabalho em particular, os pontos relativos à estrada
podem ser aproximados a um plano como explicado adiante na secção
\ref{sec:plane_model_road_segmentation}, e é de especial interesse que os obstáculos
sejam representados com a melhor qualidade possível. Deste modo, optou-se por utilizar
os parâmetros modificados em vez dos valores padrão.


\subsection{Reconstrução tridimensional} \label{subsubsec:3dreconstruction}
Com os dados de disparidade, de cor e das propriedades óticas das câmaras, torna-se possível medir
distâncias em profundidade de pontos e proceder a uma reconstrução tridimensional do
cenário envolvente. 
Para obter a reconstrução tridimensional do cenário obtido por um sensor
estéreo é necessário garantir uma geometria semelhante à representada
na figura \ref{fig:stereo_rig} de forma a aplicar o algoritmo de 
\textit{Bouguet} \cite{OPENCV}, que consiste na reprojeção de pontos
para o espaço tridimensional.

\begin{figure}[h!]
\centering
\includegraphics[scale=0.4]{Images/epipolar_geometry.eps}
\caption{Geometria do sensor estéreo \cite{OPENCV}.}
\label{fig:stereo_rig}
\end{figure}

A figura \ref{fig:stereo_rig} representa o modelo
\textit{pinhole}, semelhante à representação
\ref{fig:pinhole_model}, generalizado para câmaras estéreo.
Para compreender a triangulação envolvida no cálculo
da reprojeção, considere-se que é possível encontrar 
um objeto qualquer $P$ no mundo físico
nas duas câmaras do sensor estéreo em que as suas
coordenadas no eixo $x$ correspondem a $x_l$ e $x_r$ para a imagem
da esquerda e da direita respetivamente (figura \ref{fig:stereo_rig}).
Desta forma, a disparidade é dada por $d=x_l-x_r$, assumindo
a geometria epipolar das imagens, e pode-se efetuar a triangulação
das coordenadas para estimar a profundidade $Z$,
segundo a equação \ref{eq:triangulation} \cite{OPENCV}.

\begin{equation}
\dfrac{T-(x^l - x^r)}{Z-f}=\dfrac{T}{Z} \Rightarrow Z=\dfrac{f \times T}{x^l-x^r}
\label{eq:triangulation}
\end{equation}

Uma vez que a profundidade $Z$ é inversamente proporcional 
à disparidade, cria-se uma relação não linear entre estes dois termos.
Quando a disparidade é próxima de zero, pequenas diferenças na disparidade
correspondem a grandes diferenças na profundidade.
Por outro lado, quando a disparidade é elevada,
pequenas diferenças de disparidade não mudam muito a profundidade.
A principal consequência deste facto é que os sistemas de visão
estéreo apenas apresentam resolução de profundidade para objetos
relativamente perto do sensor. 

A figura \ref{fig:disparity_depth}
ilustra a relação entre disparidade e profundidade.

% \begin{figure}[h!]
% \centering
% \includegraphics[scale=0.5]{Images/disparity_depth.eps}
% \caption{Relação entre disparidade e profunidade \cite{OPENCV}.}
% \label{fig:disparity_depth}
% \end{figure}

\begin{figure}[h!]
\begin{minipage}[b]{0.4\linewidth}
\centering
\subfigure[Triângulação de coordenadas.]
{
  \includegraphics[height=8cm]{Images/disparity_depth.eps}
  \label{subfig:disparity_depth_ilustration}
}
\end{minipage}
\begin{minipage}[b]{0.6\linewidth}
\centering
\subfigure[Efeito na nuvem de pontos.]
{
  \includegraphics[height=8cm]{Images/pointcloud_top_view.eps}
  \label{subfig:pointcloud_top_view}
}
\end{minipage}
\caption{Relação entre disparidade e profunidade. \cite{OPENCV}}
\label{fig:disparity_depth}
\end{figure}


Ao conhecer a disparidade $d$ e a profundidade $Z$ calculadas por triangulação
é possível reprojetar o mapa de disparidade para a obtenção das coordenadas
$X$ e $Y$ dos pontos no referencial do mundo. Desta forma, para um ponto 
qualquer representado pelas coordenadas $x$ e $y$ no plano a 
reprojeção desse ponto no espaço é dado pela equação \ref{eq:reprojection} \cite{OPENCV}.

\begin{equation}
 Q
\begin{bmatrix}
 x \\ y \\ d \\ 1
\end{bmatrix}
=
\begin{bmatrix}
 X \\ Y \\ Z \\ W
\end{bmatrix}
\label{eq:reprojection}
\end{equation}

em que a matriz $Q$ é dada por:

\begin{equation}
 Q=
\begin{bmatrix}
 1 & 0 & 0      &  -c_x \\
 0 & 1 & 0      &  -c_y \\
 0 & 0 & 0      &  f \\
 0 & 0 & \dfrac{-1}{T_x} &  \dfrac{(c_x-c_{x}^{'})}{T_x} \\
\end{bmatrix}
\label{eq:reprojection_matrix}
\end{equation}

Os parâmetros definidos pela equação \ref{eq:reprojection_matrix}
são relativos à câmara da esquerda à excepção de $c_{x}^{'}$,
que representa a coordenada em $x$ na imagem da direita. 
Desta forma, de acordo com a figura \ref{fig:stereo_rig},
$Tx$ representa a distância entre as câmaras, $c_x$ e $c_y$
representam as coordenadas do ponto principal, e finalmente,
$f$ representa a distância focal.
Desta forma é possível estimar as coordendas dos pontos tridimensionais
dados por $(X/W, Y/W, Z/W)$.

Para finalizar, a figura \ref{fig:pointcloud} representa um cenário
tridimensional obtido a partir do mapa de disparidade da figura \ref{fig:disparity},
das propriedades da câmara obtidas na calibração (secção \ref{sec:calibration}) e 
de uma das imagens a cores da câmara (figura \ref{fig:stereo_pair_zone}).

\begin{figure}[h!]
\centering
\includegraphics[scale=0.5]{Images/pointcloud1.eps}
\caption{Exemplo de nuvem de pontos (Reconstrução tridimensional).}
\label{fig:pointcloud}
\end{figure}

