Há algum tempo, vi uma demonstração de um pequeno 'tanque de brinquedos' com uma única câmera montada nele. Este tanque foi capaz de dirigir pelo chão e detectar objetos e depois mover / dirigir para evitá-los. A parte interessante foi que ele usava um único sistema de visão de câmera e, tanto quanto me lembro, estava aproveitando o piso plano. e, em seguida, usando a taxa em que um recurso estava se movendo na cena em relação aos motores e direções da viagem para avaliar e, portanto, mapear a cena.
Alguém pode me enviar indicadores sobre o que procurar para obter mais informações sobre isso ou alguns indicadores para bases de código que podem fazer isso.
A razão pela qual pergunto é que esse era um sistema de câmera único de vários anos atrás (5 ou mais) e, portanto (pelo que me lembro), era uma carga de computação relativamente baixa. Eu pretendia experimentar isso em um PI de framboesa para construir um carro / tanque que mapeia uma sala ou conjunto de salas.
Respostas:
É difícil dizer exatamente o que eles estavam fazendo, mas os termos que você pode querer aqui são " fluxo óptico " e " egomotion ". Parece que pode ter havido alguma detecção e correspondência de recursos (algo como SURF ou SIFT) ou segmentação de primeiro plano / plano de fundo também.
O OpenCV é provavelmente a base de código mais usada para visão computacional, pois possui muitas funcionalidades para análise de movimento . O OpenCV deve ser executado no Raspberry Pi, embora seus algoritmos possam ser limitados pelo poder da computação.
fonte
Com base na resposta de WildCrustcean , outra possibilidade seria a visão estéreo . Embora muitas vezes pensemos na visão estéreo usando duas câmeras, as técnicas realmente precisam apenas de imagens deslocadas no espaço e de um modelo de deslocamento. Em outras palavras, eu posso tirar uma imagem, mover e depois tirar outra imagem. Desde que eu conheça a transformação entre essas duas imagens, posso usar técnicas de visão estéreo para calcular a distância até um ponto na imagem.
fonte
Poderia ter sido usando Parellel Rastreamento e Mapeamento PTAM . O PTAM é uma implementação do problema de Localização e Mapeamento Simultâneo (SLAM) que usa uma única câmera para construir um mapa 3D do mundo e localizar rastreando recursos visuais.
Minha equipe experimentou o uso do pacote PTAM no ROS .
Estávamos rodando o Ubuntu em um Intel Atom e, pelo que me lembro, ele não granulava muito do processador. No entanto, não acabamos usando, principalmente porque não conseguimos encontrar recursos suficientes no ambiente em que nosso robô estaria funcionando.
fonte
Em geral, você não pode extrair medições de distância métrica de uma única imagem, a menos que tenha informações extras sobre o mundo. Por exemplo, se você sabe que o mundo é plano (ou é possível detectar o piso, que é uma região plana), é possível estimar uma homografia.
Uma homografia é uma transformação projetiva entre planos (matriz 3x3). Dada a calibração intrínseca da câmera, é possível decompor essa homografia induzida por plano em rotação e translação. A tradução está em escala. Você pode resolver essa ambiguidade da escala conhecendo a distância da câmera ao chão (plano).
Depois de ter a homografia, você pode detectar objetos que não estão no avião. A homografia permite distorcer a primeira imagem para a segunda. Os objetos no avião se alinham e terão um pequeno erro. Objetos fora do plano não serão alinhados. Isso é chamado de paralaxe.
Uma maneira de implementar isso pode ser
segunda. Pixels com grandes erros não estão no chão e podem ser
obstáculos.
A maioria dos blocos de construção é implementada no opencv (consulte http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html ).
Boa sorte.
PS, a decomposição da homografia também fornecerá o normal do avião. Mas, como você está assumindo que este é o plano de terra, temos o apontamento normal na direção para cima. Uma solução mais precisa pode ser realizada no seu procedimento de calibração. Você pode usar um alvo quadriculado e estimar sua pose. A pose terá um plano normal e a distância da câmera.
fonte