Cálculo de uma homografia com base nas linhas detectadas

12

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:

insira a descrição da imagem aqui 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".

Henrik Kjus Alstad
fonte
2
Você tem algumas imagens de exemplo? Ou pelo menos um esboço de casos possíveis para detecção de linha? Eu acho que a curta resposta à sua pergunta é "sim, você pode", mas mais detalhes do que você iria ajudar a dar resposta mais detalhada :)
penelope
2
Você pode fornecer uma imagem de exemplo? Você está dizendo que os segmentos de linha detectados não se cruzam ou você tentou estender os segmentos detectados em linhas e depois tentou encontrar interseções?
ppalasek
3
Eu adicionei um exemplo de imagem para a pergunta
Henrik Kjus Alstad 28/11
1
Você já descobriu isso? Também estou interessado nos resultados.

Respostas:

3

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:

Relatório Interno: 2005-V04 Computando homografias de três linhas ou pontos em um par de imagens G. Lopez-Nicolas, JJ Guerrero, OA Pellejero, C. Sagues

Relatório Interno: 2003-V01 Correspondência robusta de linhas e estimativa de homografias simultaneamente G. Lopez-Nicolas

Correspondência probabilística de linhas para sua homografia Taemin Kim, Jihwan Woo e In So Kweon

2) Há um método específico para os campos aqui:

" Usando recursos de linha e elipse para retificação de transmissão de vídeo de hóquei .", Gupta, Ankur, James J. Little e Robert J. Woodham Computer and Robot Vision (CRV), Conferência Canadense de 2011 em. IEEE, 2011.

e

" Combinando correspondências de linha e ponto para estimativa de homografia .", Dubrofsky, Elan e Robert J. Woodham . Simpósio Internacional de Computação Visual. Springer Berlin Heidelberg, 2008.

euEu=(você,v,1)TeuEu=(x,y,1)T

euEu=HTeuEu

Neste formulário, a equação pode ser conectada diretamente ao método DLT:

UMAEu=[-você0 0vocêx-v0 0vx-10 0x0 0-vocêvocêy0 0-vvy0 0-1y]

A única diferença é a normalização, que você encontrará nas referências acima.

xCxTCx=0

C=HTCH1

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.

Tolga Birdal
fonte
2

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:

insira a descrição da imagem aqui

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 é:

x=(uma11x+uma12y+uma13)(uma31x+uma32.y+1)y=(uma21x+uma22y+uma23)(uma31x+uma32.y+1)

Seu objetivo é encontrar os coeficientes uma11,uma12,uma13,uma21,uma22,uma23,uma31,uma32.

Assim, se houver uma linha umax+by+c=0 0 que mapeia para UMAx+By+C, então:

UMAx+By+C=0 0UMA(uma21x+uma22y+uma23)+B(uma21x+uma22y+uma23)+C(uma31x+uma32.y+1)=0 0

Pode ser reescrito como:

(AxAyABxByBCxCy)(a11a12a13a21a22a23a31a32)=C

A,B,C are known values, because you calculated the lines equations. You can input any point (x,y) for which ax+by+c=0, and get additional constraint. Combine them together with the constraints that you get from points, and you might get additional information. Note that you will not get more information from more than two points, since any third point will add linear dependent lines to the matrix of constraints.

Referências adicionais " Estimativa da homografia por Elan Dubrovsky " - Ver parte 2.3.1, estimativa da homografia a partir de linhas.

Andrey Rubshtein
fonte