perspective
 

Corrigindo a perspectiva de uma foto usando o hugin


E, pelos deuses, Sócrates, meu espanto é inimaginável ao indagar-me o que isso significa, ao contemplar essas coisas, verdadeiramente sinto vertigem.
-- Platão, Teeteto

Introdução

Alguma vez você já tirou uma foto assim:

mas na verdade desejava uma foto assim:

Se você respondeu afirmativamente, então continue lendo, pois o que vamos fazer aqui é justamente corrigir a perspectiva de uma foto que, por uma razaão ou outra, não pôde ser fotografada de frente.

Há muitos programas de código aberto e comerciais para fazer isso. Por exemplo, poderíamos usar o GIMP ou mesmo Photoshop, mas um programa de código aberto chamado hugin não apenas permite corrigir a perspectiva, como também corrigir distorções na imagem que foram provocadas pela lente.

Procedimento

O primeiro passo é abrir o hugin e carregar a foto. A figura abaixo mostra o ambiente de trabalho do hugin. Não é meu objetivo neste tutorial fazer uma apresentação detalhada do hugin, mas apenas mostrar como pode ser utilizado para resolver o problema proposto.

Para carregar a imagem, começamos clicando o botão "Add Individual Images", em destaque na figura acima. No momento em que a foto é carregada, algumas informações a respeito do sistema óptico de sua câmera serão detectados, caso estejam presentes no pacote EXIF da foto. Em meu caso, falta alguma coisa e o hugin me pergunta um tal crop factor:

Esse valor é definido como o quociente da divisão de 43.3mm pelo comprimento em mm da diagonal do filme ou do sensor da câmera. Vasculhando a Internet, descobri que minha Olympus C-5060 tem um crop factor de 4.83429595. Esse valor não é muito crítico para esta aplicação, e caso você não o tenha, aceite o valor sugerido pelo hugin clicando o botão Ok.

Em seguida, vamos escolher valores comuns para alguns parâmetros do hugin. Para isso, clique sobre a aba "Stitcher" e digite o valor 100 nas caixas horizontal e vertical do "Field of View" conforme a figura abaixo. Não se preocupe com os demais valores presentes nessa página ou em outras partes do hugin, pois muitos deles serão estimados pelo programa.

Vamos também trabalhar com tipo de projeção retilinear, escolhendo "Rectilinear" no item "projection (f):" dessa mesma página.

O hugin é um programa originalmente escrito para auxiliar na confecção de imagens panorâmicas a partir de uma série de fotos individuais de menor tamanho e com sobreposição entre elas. O processo de montagem do panorama é chamado stitching, ou costurar em Inglês.

Pois bem, para poder costurar o panorama, o hugin precisa saber quais pontos de uma foto correspondem a quais pontos da foto seguinte. Esses são chamados pontos de controle ou control points.

Aqui não estaremos trabalhando com mais do que uma foto, mas vamos usar os pontos de controle do hugin de uma forma um pouco diferente a fim de permitir ao programa estimar as distorções causadas pelo ângulo relativo entre o objeto e a câmera e outras distorções causadas pela lente. Na foto original estas distorções estão bem visíveis na moldura do quadro fotografado.

Em seguida vamos escolher a aba "Control Points" e começar a marcar alguns pontos de controle. Mas antes, certifique-se de que a caixa "auto fine-tune" esteja selecionada e as caixas "auto add" e "auto estimate" não etejam, conforme pode ser visto na figura abaixo.

O objetivo é marcar um ponto na imagem da esquerda e seu correspondente na imagem da direita, de modo que formem uma linha horizontal ou uma linha vertical. Para isso, será preciso identificar essas características na imagem original.

Para a foto escolhida, as linhas da moldura e do fundo da pintura foram usadas como referência.

Para marcar cada par de pontos, procedemos do seguinte modo: primeiro escolhemos arbitrariamente o local do ponto e clicamos sobre ele na foto da esquerda. A foto é instantaneamente ampliada e podemos ver melhor onde o ponto foi marcado. Caso desejado podemos clicar e arrastar o ponto livremente.

Em seguida, para marcar o ponto correspondente, clicamos em algum ponto na foto da direita, demodo que a linha imaginária ligando os dois pontos escolhidos forme uma linha horizontal ou uma linha vertical. Para isso, devemos imaginar as duas fotos como se estivessem uma sobre a outra.

Ao marcar o segundo ponto, a foto da direita também é instantaneamente ampliada e podemos fazer ajustes na localização do ponto. Opcionalmente podemos clicar no botão "Fine tune" (1 na figura abaixo) para que o hugin faça esse ajuste automaticamente.

Tendo marcado um par de pontos, devemos acrescentar esses pontos à lista de pontos de controle. Para isso clicamos no botão "Add" (2 na figura acima). Para obter um bom resultado, é preciso marcar uma quantidade bastante razoável de pares de pontos, digamos 10 ou mais, e de preferência que esses pontos sejam bem espalhados pelo quadro.

É bom observar que na lista de pontos de controle, exibida na parte inferior da janela, a coluna "Alignment" informa se o par escolhido é horizontal ou vertical. A coluna "Distance" indica a distância entre a linha fornecida e uma linha ideal, calculada pelo hugin, após rodar o otimizador de pontos de controle. Vamos fazer isso mais adiante.

Após marcar todos os pontos, verificamos cada par individualmente para ter certeza de que estão corretos. Quanto mais exatos melhor será o resultado final. A lista de pontos de controle é vista imediatamente abaixo do par de imagens na parte superior da janela.

A correspondência entre os pontos é dada conforme a imagem composta abaixo:

Estamos quase no final do processo. O penúltimo passo é rodar o otimizador que irá calcular, a partir dos pontos de controle marcados, qual é a transformação que deve ser aplicada à imagem para corrigí-la.

Vamos então clicar sobre a aba "Optimizer". Nessa janela, primeiro vamos informar ao otimizador o que ele deve fazer. Desejamos otimizar a posição, a vista, e também a distorção do tipo barril. Assim, na caixa "Optimize", escolhemos "Positions, view and barrel (y,p,r,v,b)". (1 na figura abaixo).

Para dar início ao otimizador, clicamos no botão "Optimize now!" (2 na figura acima). Uma pequena caixa de diálogo do otimizador se abrirá e ele irá exibir uma porção de números à medida em que o processo for avançando. No final, uma outra caixa de diálogo se abrirá informando o resultado.

Se tudo correu bem, devemos esperar uma caixa como esta:

Se os números exibidos não parecem muito grandes, são digamos menores do que 10 ou 15, então temos um bom ajuste, e podemos clicar no botão Ok para aceitar o resultado. Caso contrário, talvez seja desejável revisar a lista de pontos de controle em busca de um ou mais pares que não estão se ajustando muito bem.

Ocasionalmente, o otimizador chega a uma situação em que não teve um bom êxito em sua tentativa de ajuste. Nesse caso, uma janela como a seguinte poderá aparecer:

Caso isso aconteca, e você tem razoável certeza de que os pontos foram corretamente marcados, podemos tentar otimizar primeiro apenas a posição e a vista, rodando primeiro o otimizador com a opção "Positions and view (y,p,r,v)" e, em seguida, uma nova rodada com "Positions, view and barrel (y,p,r,v,b)".

Se nada parece funcionar, então provavelmente, algum par de pontos, senão mais do que um, não esteja correspondendo exatamente a uma linha horizontal ou vertical no resultado. Será preciso voltar e analizar a lista.

Quando tiver obtido êxito com o otimizador, será o momento de voltar à janela do "Stitcher" e clicar o botão "Calculate Field of View" a fim de obter um quadro que contenha o resultado.

Depois disso, podemos clicar o botão "Preview panorama" para termos uma idéia de como será o resultado final.

A figura abaixo mostra a janela do modo preview. É comum notarmos que boa parte do quadro está preenchida em preto, o que é perfeitamente normal. Mais adiante vamos recortar a foto, removendo essa borda preta. Não tente fazer isso agora, pois irá arruinar a correção.

Caso a parte desejada não esteja inteiramente dentro do quadro, podemos ajustar as barras de rolagem, mas muito sutilmente, e precionar o botão "Update" para ver o resultado.

Estando satisfeito com o resultado, a ultima etapa é costurar o panorama, o que em nosso caso irá produzir uma imagem semelhante à que foi visualizada, mas em alta definição. Para isso, basta clicar o botão "Stitch Now!" (2 na figura abaixo).

Essa etapa não deve ser muito demorada, mas pode levar alguns minutos se a imagem original for muito grande. O resultado pode ser visto abaixo:

Agora será preciso carregar essa imagem em algum programa gráfico como o GIMP ou o Photoshop e recortar a parte de interesse. Após o recorte, um ajuste dos níveis e a aplicação de uma curva-S, o resultado final é este:

Para mais dicas e sobre como usar o hugin de outras maneiras diferentes porém muito interessantes, veja o Tutorial [3] abaixo.

Coisas a experimentar

Integrar este procedimento ao de criação de imagens panorâmicas. Para isso é só marcar os pontos de cada imagem constituinte conforme o que foi visto acima, ao mesmo tempo em que se mantém os pontos de controle que correspondem a imagens adjacentes.

  

Conclusão

O hugin pode ser uma ferramenta bastante efetiva para corrigir a perspectiva de imagens que de outra forma não podem ser fotografadas de frente. Adicionalmente, ele provê o recurso interessante e conveniente, ausente em muitos programas comerciais, de correção de distorções causadas pela lente.

Apesar de ser aparentemente trabalhoso, com um pouco de prática essa tarefa poderá ser feita com bastante rapidez, de modo que este recurso poderia ser usado efetivamente por profissionais de um birô de produções gráficas.

No entanto, se a imagem não apresentar sérias distorções ópticas causadas pela qualidade da lente, então pode ser mais vantajoso usar a ferramenta de correção de perspectiva disponível, por exemplo, no GIMP ou no Photoshop, entre os principais programas de editoração fotográfica.

Referências

  • [1] GIMP - Gnu Image Manipulation Program é um programa de código aberto para manipulação de imagens rasterizadas, com muitos (porém nem todos) recursos disponíveis no Photoshop.
  • [2] hugin - Programa de código aberto para montagem de imagens panorâmicas. Disponível para Linux, Windows e Mac OS
  • [3] Hugin tutorial — Perspective correction (inglês) - Um tutorial avançado de correção de perspectiva usando o hugin.

Updated on  Fri Aug 14 12:16:40 2009
Departament of Mathematics, UFSCar
Copyright © 1997-2010, Waldeck Schutzer