Computação Gráfica II
O objetivo deste exercício obter a profundidade de uma cena com base em imagens de duas câmeras posicionadas lado a lado.
Para ler uma arquivo de imagem e realizar a manipulação do pixels, utilize a biblioteca ImageClass, disponível nesta página.
Comparação de Imagens
Para comparar os pixels das imagens, utilize a as métricas como a SAD - Sum of Absolute Diferences.
http://en.wikipedia.org/wiki/Sum_of_absolute_differences
Algoritmo de Reconstrução
A ideia principal do algoritmo de reconstrução é analisar a imagem da esquerda linha a linha e, para cada ponto ImgEsq[LinhaY][X], identificar, na mesma linha da imagem da direita, a posição horizontal do ponto(ou de um muito "parecido" com ele), dentro de um intervalo de N pixels.
Para comparar o ponto da imagem da esquerda, com os pontos da imagem direita, usa-se o SAD de forma encontrar o ponto mais parecido com o ponto ImgEsq[Linha][X].
Na imagem a seguir, por exemplo, o canto inferior direito da face frontal do cubo
aparece em duas imagens, sendo que, na imagem da direita ele aparece
mais à esquerda.
![](Disparidade.png)
Figura - Exemplo de disparidade
Quando o algoritmo encontrar este ponto na posição ImgDir[LinhaY][Xdir], deve calcular a diferença entre as coordenadas X do ponto nas duas imagens, determinando a disparidade.
disparidade = X-Xdir.
Pode ocorrer que, no intervalo de busca na imagem da direita, nenhum
pixel seja muito "parecido" com o pixel que se está buscando. Neste
caso, a disparidade deve ser setata para 0.
Note que a busca deve ser iniciada na imagem da direita a partir da mesma posição do ponto na imagem da esquerda e fazer a busca em direção ao início da linha.
O valor calculado da disparidade deve ser armazenado em uma matriz de inteiros do mesmo tamanho da imagem.
MatDisp[LinhaY][X] = disparidade
Depois de processada toda a imagem a matriz, a matriz de disparidade
deve ser varrida de forma a obterem-se o maior e menor valores dentro
dela. Com estes valores, deve-se fazer uma escala na matriz de forma que
os valores fiquem no intervalo entre [0..255].
Ao final, as entradas da matriz devem ser copiadas para uma imagem, usando a disparidade como sendo a cor do pixel.
cor = MatDisp[Y][X]
Imagem.DrawPixel(X,Y,cor, cor,cor)
Apresentação dos Resultados
Os resultados devem ser apresentados
na forma de imagens exibidas simultaneamente, como um Mapa
de Profundidade, mostrando a profundidade dos pixels em tons de cinza.
Quando mais distante da câmera estiver um pixel, mais escuro este deve
ser exibido, quanto mais próximo da câmera, mais claro.
![](MapaDeProfundidade.png)
Exemplo de Mapa De Profundidade
Exemplos de Imagens para testes
Para realizar o exercício, salve as imagens coloridas apresentadas a seguir e realize o processamento sobre elas.
FIM.