Pergunta

Eu encontrei muitas bibliotecas/sdks/APIs de AR, todas elas são baseadas em marcadores, até que encontrei esse vídeo, a partir da descrição e dos comentários, parece que ele está usando o SIFT para detectar o objeto e segui -lo.

Eu preciso fazer isso para o Android, então vou precisar de uma implementação completa do SIFT em Java Pure.

Estou disposto a fazer isso, mas preciso saber como o SIFT é usado para a realidade aumentada primeiro.

Eu poderia usar qualquer informação que você fornecer.

Foi útil?

Solução

Na minha opinião, tentando implementar Peneire Para um dispositivo portátil é loucura. O SIFT é um algoritmo de extração de recursos de imagem, que inclui matemática complexa e certamente requer muito poder de computação. O SIFT também é patenteado.

Ainda assim, se você realmente quer sair com essa tarefa, deve fazer uma pesquisa bastante a princípio. Você precisa verificar as coisas como:

  • Quaisquer variantes de peneirar que melhorem o desempenho, incluindo diferentes algoritmos
  • Eu recomendaria investigar Surf que é muito robusto e muito mais rápido (mas ainda um desses algoritmos assustadores)
  • Android NDK (Eu vou explicar mais tarde)
  • Muitas e muitas publicações

Por que Android NDK? Porque você provavelmente terá um ganho de desempenho muito mais significativo, implementando o algoritmo em uma biblioteca C que está sendo usada pelo seu aplicativo Java.

Antes de iniciar qualquer coisa, certifique -se de fazer essa pesquisa porque seria uma pena perceber que os algoritmos de extração de recursos da imagem são demais para um telefone Android. É um esforço sério, implementando um algoritmo que fornece bons resultados e executa em um período aceitável de tempo, muito menos em usá -lo para criar um aplicativo AR.

Como em como você usaria isso para AR, acho que o descritor que você obtém ao executar o algoritmo em uma imagem teria que ser comparado aos dados salvos em um banco de dados central. Em seguida, os resultados podem ser exibidos para o usuário. As características de uma imagem coletada de surf devem descrevê -la, como que ela pode ser identificada usando -as. Não tenho muita experiência em fazer isso, mas sempre há recursos na web. Você provavelmente gostaria de começar com coisas genéricas como Reconhecimento de objeto.

Boa sorte :)

Outras dicas

Se eu, onde você, examinaria como (e por quê) o recurso SIFT funciona (como foi dito, sua página da Wikipedia oferece uma boa explicação de cochise e, para mais detalhes, verifique o documento de ciências (que está vinculado na Wikipedia) ) e, em seguida, construa sua própria variante que se adapte ao seu gosto; O IE possui o equilíbrio ideal entre desempenho e carga de CPU, necessária para o seu aplicativo.

Por exemplo, acho que a suavização gaussiana pode ser substituída por uma maneira mais rápida de suavizar.

Além disso, quando você constrói sua própria variante, não tem nada a ver com patentes (já existem muitas variantes, como o Gloh).

Eu tentei o surf para o celular Symbian de 330MHz e ainda estava muito lento, mesmo com todas as otimizações e tabelas de pesquisa. E a peneira deve ser ainda mais lenta. Todos que usam rápido para celulares agora. De qualquer forma, a extração de recursos não é um maior problema. A correspondência e a limpeza do falso positivo nela são mais difíceis. Link rápidohttp://svr-www.eng.cam.ac.uk/~er258/work/fast.html

Eu recomendaria que você comece analisando os recursos já implementados na biblioteca OpenCV, que incluem surf, MSER e outros:

http://opencv.willowgarage.com/documentation/cpp/feature_detection.html

Isso pode ser suficiente para o seu aplicativo e é mais rápido que o SIFT. E como mencionado acima, o SIFT é patenteado.

Além disso, comece fazendo testes de desempenho em sua plataforma móvel, apenas extraindo os recursos em todos os quadros, assim você terá uma idéia de quais podem ser executados ou não em tempo real.

Você já tentou a implementação rápida da OpenCV na porta Android? Eu testei e corre de maneira arbusta.

Você também pode calcular descritores de histograma reduzidos em torno dos pontos -chave rápidos detectados. Ouvi falar do 3x3 em vez do padrão 4x4 do SIFT. Isso tem uma chance decente de trabalhar em tempo real se você o otimizar fortemente com instruções de néon. Caso contrário, eu recomendaria algo rápido e simples, como soma de diferenças quadradas ou absolutas para um patch nos pontos de chaves que são muito rápidos.

A peneira não é uma panacéia. Para aplicativos de vídeo em tempo real, geralmente é um exagero.

Como sempre, a Wikipedia é um bom lugar para começar: http://en.wikipedia.org/wiki/scale-invariant_feature_transform, mas observe que o SIFT é patenteado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top