Filtrando Homografias Estimadas pelo RANSAC

10

Estou usando o algoritmo RANSAC para estimativa de homografia entre pares de imagens tiradas com câmeras que não possuem nenhuma tradução entre elas (rotação pura e alteração de escala / zoom). Funciona bem na metade dos casos. A saída correta é assim:

insira a descrição da imagem aqui

As linhas vermelhas são correspondências filtradas e os quadriláteros ilustram como a homografia distorce a perspectiva.

Às vezes, no entanto, muitos casos ruins acontecem, como estes:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Eu já tenho um teste simples no loop RANSAC. Faz um quadrilátero simples (um quadrado unitário) e o transforma com transformação de amostra. Então, verifica se a transformação manteve sua convexidade.

Ainda assim, porém, surgem cachos de quadriláteros côncavos.

Você tem alguma idéia de como testar corretamente a homografia, se ela se comporta "bem" e filtrar as soluções incorretas?

Encontrei algum código em que eles testam que nenhum dos três pontos transformados é colinear. Mas isso não parece suficiente, pois não filtra deltóides e outros quadriláteros "inválidos" ...

Libor
fonte

Respostas:

4

Há um problema ao verificar se a homografia está correta.

O algoritmo para verificar homografias corretas pode interessar a alguém, por isso vou escrevê-lo aqui:

ABDC

A:(w/2,h/2,1.0)B:(w/2,h/2,1.0)C:(w/2,h/2,1.0)D:(w/2,h/2,1.0)

w,h

ABDCC=HC

uv

d1:A+(DA)s=A+usd2:B+(CB)t=B+vt

d1=d2

t=1d[(ByAy)ux(BxAx)uy]

s=1d[(AxBx)vy(AyBy)vx]

s,t(0,1)

s,t(λ,1.0λ)λ=0.01

Problema mais antigo, corrigido no algoritmo acima:

Encontrei o problema aqui - com uma certa homografia, o teste pode passar para um quadrilátero menor, mas não para o maior. É por isso que algumas homografias "doentes" passaram.

O quadrado verde representa uma imagem de origem, o laranja é um transformado. Como você pode ver, a mão esquerda é convexa, mas começa a se deformar à medida que a fonte é maior:

insira a descrição da imagem aqui

Finalmente, um rendimento de fonte ainda maior não converte quadrilátero:

insira a descrição da imagem aqui

(x,y,w)xyw

Corrigi o algoritmo de acordo.

Libor
fonte
1

x_i \sim Hx_i^'\sum_{j=1\dots n}\|x_j - Hx_j^'\|H^'x^' = H^'x\sum_{j=1\dots n}\|x_j - Hx_j^'\| + \|x_j^' - H^'x\|

Veja Hartley e Zisserman - Geometria de Múltiplas Visões na Visão por Computador, capítulo 4.2 e, especialmente, 4.2.3 e a equação (4.8).

buq2
fonte
Os quadriláteros exibidos são apenas colocados lá. Estou certo das correspondências, pois o ajuste é muito bom. Eu usei o algoritmo DLT normalizado sugerido por Hartley & Zisserman e depois usei o refinamento iterativo e a correspondência guiada, como você mencionou.
Libor
Mas o ajuste da homografia não pode ser tão bom quanto na primeira foto, há dois grupos de pontos: os do prédio (que provavelmente estão no mesmo plano) e os das árvores (que provavelmente nem estão no mesmo avião dentro de seu próprio grupo). Tem certeza de que não pretendia usar a matriz fundamental?
buq2
As linhas conectam pontos correspondentes e eu verifiquei todos - quando as imagens estão alinhadas, todas elas se encontram. Quando excluo os pares de imagens correspondentes ruins, resulta em um bom panorama.
Libor
As imagens são feitas usando uma câmera rotativa, por isso pode parecer que os planos mudam, mas como as câmeras giram em torno do centro óptico, tenho certeza de que a homografia é estimada. Eu posso até calcular a distância focal e a matriz de rotação a partir dele. Mas o problema está em outro lugar, uma peculiaridade no meu software eu tenho que encontrar ...
Libor
Ahh, você não incluiu a informação de que não há tradução entre as câmeras. Então você está certo e a homografia descreve a transformação entre as imagens.
buq2