Eu sei que você pode calcular homografias da imagem para o plano da câmera usando pontos de correspondência entre um "modelo perfeito" e os pontos da imagem.
Estou fazendo isso em um campo / campo de futebol e usei a detecção de borda para encontrar as linhas brancas no campo.
Mas a câmera (sempre) não cobre todo o campo, então não consigo ver todos os cantos ... e apenas os cantos são pontos 100% conhecidos no modelo (nenhum outro ponto distinto).
Portanto, o problema é que, a menos que a linha cruze com outra linha e forme um canto, eu apenas conheço os pontos de imagem da linha, e não as coordenadas correspondentes "perfeitas / do mundo real" no modelo.
Existe alguma maneira de usar as linhas detectadas para calcular uma homografia, ou mesmo apenas um conjunto de homografias candidatas , mesmo que as linhas detectadas não se cruzem entre si e criem um canto?
Imagem de exemplo, mostrando a afinação, nosso campo de visão e os pontos da afinação onde eu posso conhecer as coordenadas correspondentes do mundo real / modelo (círculos verdes) e um exemplo de duas linhas que podem ser completamente inúteis, pois em nosso campo de visão , Não tenho idéia exatamente em que ponto eles começam ou param no mundo real / modelo correspondente do campo:
As linhas vermelhas são exemplos de linhas que eu gostaria de usar, mas não conheço as coordenadas do mundo real e é meio difícil calculá-las porque, dependendo da posição da câmera, os pontos correspondentes podem estar "em qualquer lugar".
fonte
Respostas:
Vou explicar duas abordagens para isso:
1) Uma abordagem exigiria um algoritmo de correspondência de linha. Depois de combinar as linhas, você pode simplesmente usar os pontos finais das linhas para calcular a homografia. Para conseguir isso, os descritores baseados em EDLine ou LSD foram recentemente propostos no OpenCV. Além disso, o hash e a correspondência rápida deles também são implementados. Confira os vídeos aqui:
http://www.youtube.com/watch?v=MqMjvSkM39k
http://www.youtube.com/watch?v=naSWTlbg3To
O recente repositório opencv_contrib contém o código fonte desses métodos.
No caso de os pontos finais da linha serem ruidosos, você poderá utilizar diretamente as linhas para calcular as homografias. Tais artigos liam então:
2) Há um método específico para os campos aqui:
e
Neste formulário, a equação pode ser conectada diretamente ao método DLT:
A única diferença é a normalização, que você encontrará nas referências acima.
As referências acima também explicam como inserir essa restrição no algoritmo DLT.
Usando elipses e linhas, é possível derivar uma relação projetiva robusta.
fonte
Se as linhas não forem paralelas, você pode calcular o ponto da interseção e usá-lo como ponto de referência. Na sua pintura, você também pode usar os pontos roxos:
A propósito, a interseção das linhas não precisa estar na imagem. Contanto que as linhas sejam paralelas
Se as linhas são paralelas, você pode usá-las para obter restrições adicionais. Por exemplo, se você tiver N <4 pontos e K linhas, poderá estimar a transformação
Lembre-se de que a equação da transformação projetiva é:
Seu objetivo é encontrar os coeficientesuma11, um12, um13, um21, um22, um23, um31, um32.
Assim, se houver uma linhaa x + b y+ c = 0 que mapeia para A x′+ B y′+ C , então:
Pode ser reescrito como:
Referências adicionais " Estimativa da homografia por Elan Dubrovsky " - Ver parte 2.3.1, estimativa da homografia a partir de linhas.
fonte