É possível hackear a calibração da câmera sem ter acesso à câmera?

8

Muitas vezes, temos um fluxo de vídeo para processar sem acesso à câmera. Ter acesso à matriz da câmera seria benéfico para várias técnicas de processamento. É possível hackear a calibração da câmera sem ter acesso à câmera?

Eu tenho um fluxo de vídeo de uma única câmera montada em um carro em movimento gravando a estrada (daí várias linhas paralelas no plano do solo, cantos dos marcadores das faixas, mas sem círculos). Quero criar uma visão de cima para baixo disso, mas não tenho acesso à câmera. É possível? Se sim, como?

Entendo do Learning OpenCV: Computer Vision com o livro OpenCV Library que eu preciso das seguintes matrizes:

  1. Intrínseca e
  2. Distorção

.. à cv2.undistort()imagem, calcule a homografia cv2.getPerspectiveTransform()e, cv2.warpPerspective()finalmente, obtenha a vista superior.

Questão

  1. Como posso calcular / aproximar / adivinhar matrizes / parâmetros intrínsecos ou de distorção? Todos os parâmetros são importantes?
  2. Seria bom copiar parâmetros de outras câmeras (como exemplos de código-fonte OpenCV)?

Pesquisa anterior:

Alguma ideia? Agradecemos sua ajuda com antecedência!


Atualização 1: Experiência de Transformação de Perspectiva

Eu tentei usar getPerspectiveTransform(pts1,pts2)e dst = cv2.warpPerspective(img,M,(x,y), flags=flags)combinar quatro pontos da imagem de entrada para obter uma espécie de visão de cima para baixo. Mas não sei como lidar com as distorções:

Selecionando pontos: Primeiro, ampliei o zoom na entrada e tentei selecionar com precisão os pontos externos correspondentes nos marcadores de faixa para criar a Homography Matrix e visualizar a imagem transformada em perspectiva warpPerspective. Vi as pistas distorcidas, mas não sabia o quão ruim. Para ter uma idéia, escolhi pontos mais detalhados por delta (50px) em cada extremidade. Isto é o que eu recebo:

Experiência de imagem

Posso corrigir as distorções sem ter acesso à câmera? Existe alguma outra maneira de corrigir isso.

Poucas imagens de entrada para brincar: Imgur Imgur


Atualização 2: Fluxo óptico não paralelo (disperso) na exibição de cima para baixo

Isso se deve a distorção ou algo mais ?: Imgur

Manav Kataria
fonte
11
mobileye.com/technology/mobileye-research - Tudo aqui pode ser relevante para você
Andrey Rubshtein
Esta é uma daquelas perguntas que estão ensinando ao mesmo tempo. Parece que o link mobileye-research não existe mais. Existe isso embora; mobileye.com/our-technology
uhoh

Respostas:

5

Se bem entendi, você não precisa de intrínsecas ou extrínsecas para conseguir isso, se uma visão de cima para baixo é tudo o que você deseja. Você pode basicamente definir 4 pontos em suas linhas paralelas e depois distorcer a imagem inteira em uma visualização canônica (digamos ).{{0,0},{480,960}}

Para fazer isso no OpenCV, tudo o que você precisa fazer é calcular a homografia usando findHomographycomo descrito aqui . Em seguida, use warpPerspective(veja aqui ) para distorcer suas imagens.

A única coisa com a qual você precisa se preocupar é a seleção das dimensões da vista frontal-paralela que você procura. Deve corresponder mais ou menos à proporção da região da imagem original.


Em relação à segunda parte da sua pergunta: Sim. Antes de tudo, deixe-me lembrá-lo de que muitos trabalhos como esse optam por ignorar a estimativa de distorção. Mas, posso pensar em duas maneiras de conseguir isso:

  1. Use as faixas de rodagem propriamente ditas para corrigir a distorção: Na vista frontal-paralela, crie outra distorção de perspectiva para que as faixas sejam verticais. Nessa configuração, pense nas linhas da faixa como as linhas que desaparecem na imagem (como em uma vista em perspectiva, elas sempre fazem). A partir disso, você pode até calibrar sua câmera. Veja aqui , aqui e aqui, por exemplo.

  2. Os carros devem seguir mais ou menos uma trajetória reta / suave. Se você calcular o movimento de todos os carros, eles deverão fornecer movimentos semelhantes, paralelos às faixas. Essa informação é novamente útil para restringir e gerar uma transformação, o que distorceria sua imagem para uma distorção reduzida.

Tolga Birdal
fonte
Obrigado @tbirdal: (0) "ignore a estimativa de distorção" - obtive bons resultados com isso. Ver atualização 2 (1) Os trabalhos parecem muito úteis. No entanto, pode demorar um pouco até que eu possa entendê-los completamente e responder de volta. (2) "[carros] devem fornecer movimentos semelhantes, paralelos às faixas" - Boa ideia! Mas estou recebendo um fluxo óptico disperso (não paralelo) nas faixas, mesmo na exibição de cima para baixo (consulte a atualização 2); Precisa descobrir como solucionar isso.
Manav Kataria
É difícil calcular o fluxo óptico das faixas, pois elas não se movem com muita frequência. As abordagens de rastreamento de borda seriam melhores, eu acho. (Tal como arestas, etc. ou mesmo contornos activos em movimento)
Tolga Birdal
Eu tenho um fluxo de vídeo em que a câmera está montada na frente de um veículo em movimento. Portanto, os marcadores das faixas se movem a cada quadro (exceção: um marcador de fim de faixa que é contínuo "---", não "- - -" tracejado).
precisa saber é o seguinte