Pesquisando nas nuvens

Em meu trabalho estou realizando rastreamento de câmera, buscando desacoplar a estimação da posição da câ,era no espaço, com a sua orientação. Muitas técnicas para fazer esse tipo de rastreamento estimam todos os seis valores ao mesmo tempo (três para localização, três para orientação), utilizando por exemplo um filtro de Kalman. Mas existem benefícios em dividir o problema… O primeiro de todos é que em muitas ocasiões a variação ou da localização ou apenas da orientação é muito mais relevante do que a outra. Mais ainda, a variação em uma única direção pode ser bem mais relevante. Então se pudermos abordar o problema explicitando isto, é melhor.


Para estimar a orientação de uma câmera utilizando visão computacional geralmente utiliza-se a estimação da posição de pontos de fuga nas imagens. Se você conhece a direção destes pontos de fuga no espaço, pode determinar a orientação da câmera. É comum assumir que boa parte das bordas do espaço estão em direções ortogonais. Um artigo famoso que realiza estimação de orientação da câmera utilizando esta hipótese é o Manhattan World: Orientation and Outlier Detection by Bayesian Inference por James M. Coughlan and A. L. Yuille (doi:10.1162/089976603765202668).

Uma importante característica desta técnica é que ela se baseia diretamente nos valores dos pixels da imagem de entrada, mais especificamente nos valores do gradiente da imagem. Ela se difere de outras técnicas em que primeiro é realizada uma extração de retas utilizando, por exemplo, o algoritmo de Canny. Mas como o desempenho de um algoritmo destes pode ser bastante melhorado se já possuirmos a informação da orientação, pode valer muito a pena deixar para extrair retas apenas depois.

A figura abaixo mostra uma imagem de um banco de dados YorkUrbanDB. No topo à esquerda temos a entrada. Ainda à esquerda, abaixo, temos o valor da intensidade do gradiente. Notem como as bordas na imagem se tornam linhas nesta imagem, e regiões planas ficam pretas. Na coluna da direita temos duas imagens que mostram a direção do gradiente sobre as bordas.

Para localizar a câmera é preciso definirmos um estimador, uma função que possui um pico no ponto que é nossa solução. Ela pode ser derivada a partir de uma modelagem probabilística do problema. Em minha pesquisa estou modificando a fórmula apresentada por Coughland e Yuille para tornar o cálculo mais veloz, e a função que estou definindo possui três parâmetros livres. Na função deles os parâmetros livres são a definição das funções de densidade de probabilidade que eles utilizaram, no meu caso são valores que definem funções relacionadas a elas.

O que estou planejando agora é analisar as imagens daquele banco de dados testando diferentes combinações de parâmetros, para escolher o de melhor desempenho. Como são 100 imagens, e o número de combinações de parâmetros pode ser bastante grande (especialmente por se tratarem de três grandezas, fazendo a quantidade crescer com o cubo da resolução), estou planejando utilizar um serviço de computação em nuvem para fazer as contas.

A idéia está na figura a seguir. Cada bloco dentro do quadrado pontilhado representa o teste da performance de um certo conjunto de parâmetros para uma certa imagem. Precisamos coletar, para cada uma das várias possíveis combinações de parâmetros, o desempenho do estimador em todas as imagens. A a idéia a seguir é analisar estes dados, e escolhemos os melhores parâmetros no geral. Esse é um problema dito “embaraçosamente paralelizável”, porque é muito fácil dividir as tarefas entre várias máquinas funcionando de forma independente.

O serviço de nuvem que estou utilizando é o da Amazon, o AWS. Uma das modalidades que eles oferecem é o Elastic MapReduce. Map/Reduce é uma forma de trabalhar com paralelismo muito adequada para este tipo de problema, porque você define uma certa função (map) para ser executada de forma paralela em várias entradas dentro de um banco, e então produz uma saída (reduce) a partir do conjunto de saídas das execuções da função Map.

Ainda não fiz nenhum teste grande na Amazon, mas estou bastante empolgado com esse tipo de programação… O pessoal de lá gostou de meu empenho, e até me mandou uns adesivos! 🙂 Espero publicar resultados disso em breve.

O conteúdo deste post foi publicado em meu outro blog, em Masking your data.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


%d blogueiros gostam disto: