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:
- Intrínseca e
- Distorção
.. à cv2.undistort()
imagem, calcule a homografia cv2.getPerspectiveTransform()
e, cv2.warpPerspective()
finalmente, obtenha a vista superior.
Questão
- Como posso calcular / aproximar / adivinhar matrizes / parâmetros intrínsecos ou de distorção? Todos os parâmetros são importantes?
- Seria bom copiar parâmetros de outras câmeras (como exemplos de código-fonte OpenCV)?
Pesquisa anterior:
- Tutorial de calibração da câmera OpenCV Python - Requer acesso à câmera
- Calibração automática da câmera - dá esperança "a calibração pode ser obtida se vários conjuntos de linhas paralelas ou objetos com uma forma conhecida (por exemplo, circular) forem identificados"
- Tentando entender as respostas relacionadas à calibração da câmera [ 1 ] [ 2 ] [ 3 ] no SO, tentando encontrar respostas para o meu problema.
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:
Posso corrigir as distorções sem ter acesso à câmera? Existe alguma outra maneira de corrigir isso.
Poucas imagens de entrada para brincar:
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 ?:
fonte
Respostas:
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
findHomography
como descrito aqui . Em seguida, usewarpPerspective
(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:
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.
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.
fonte