Post on 17-Apr-2015
Disparidades, Correspondências e
Corte Mínimo para EstéreoVitor Barata R. B. Barroso
vbarata@tecgraf.puc-rio.br
INF 2064 - Visão Computacional eRealidade Aumentada
Trabalho Final
Introdução
O Problema de Visão em Estéreo Duas câmeras capturam a mesma cena
simultaneamente A partir das duas seqüências de imagens,
queremos: Descobrir pontos, vistos por cada câmera num
mesmo instante, que correspondem ao mesmo ponto real
Deduzir posições reais dos pontos e gerar um modelo virtual do mundo
Cam 2Cam 1
O Problema de Visão em Estéreo Simplificações comuns: Câmeras sincronizadas, imagens do mesmo
instante Modelo das câmeras conhecido, imagens
retificadas Deslocamento apenas em um eixo, horizontal nas
imagens Distância e ângulo pequenos entre as câmeras Ruído desprezível
O Problema das Disparidades Dadas duas imagens de estéreo: Encontrar os pixels correspondentes e oclusos
entre as duas Gerar um mapa indicando, para cada pixel de uma
imagem: A distância em relação ao pixel correspondente na
outra imagem Um valor especial para indicar oclusão
<x2,y2> = <x1,y1> d(x1,y1)
O Problema das Disparidades Modelagem do problema Superfícies lambertianas: a aparência não varia
com o ponto-de-vista Semelhança entre pontos individuais medida pela
intensidade (luminância) Superfícies suaves por partes
Regiões com variação suave de intensidade devem ter variação suave de disparidade
Descontinuidades na intensidade indicam bordas e devem poder ser preservadas na disparidade
Abordagens Análise local Correspondência entre dois pixels depende apenas das vizinhanças
(janelas) SSD/SAD (“sum of squared/absolute differences”) com janela fixa ou adaptativa Correlação cruzada normalizada
Análise global Correspondência entre pares de pixels estabelecida na imagem inteira por
meio de um problema de otimização (minimização de função de custo/erro/energia) Têmpera simulada (“Simulated annealing”) Difusão probabilística Corte mínimo de grafos
Análise por scanlines Dificuldade de preservar a ordem dos pixels e manter consistência entre
scanlines
Análise cooperativa Baseada na modelagem computacional da visão estéreo humana Operações locais iterativas resultando numa otimização global
Abordagens
Refinamento do mapa de disparidades Estimativas de disparidade sub-pixel Validação cruzada
Computam-se disparidades nos dois sentidos entre duas imagens
Se o pixel A for mapeado em B e este não for mapeado de volta, marca-se A como ocluso
Filtros para eliminar erros espúrios Preenchimento de “buracos” por ajuste de
superfícies
Algoritmos de Análise Local
Correlação Cruzada
SSD com janela fixa Idéia: a vizinhança de pixels correspondentes
deve ter alta correlação nas duas imagens
-
SSD com janela fixa Problema: essa heurística nem sempre
funciona, principalmente perto de descontinuidades de oclusão
-
SSD com janela fixa Erro associado a mapearmos um pixel A
(xA,yA) para um pixel B (xB,yB) com disparidade (u,v) Tomamos janelas de tamanho 2W ao redor de
ambos pixels Erro de intensidade = ||I2 – I1|| ou (I2 – I1)2
Erro de mapeamento = soma dos erros de intensidade ao longo de toda a janela
xA
yA
xB=xA+u
yB= yA +vA
B
SSD com janela fixa Escolha do mapeamento do pixel A na
segunda imagem (u,v) que minimize a expressão abaixo, dentre
todas as opções de disparidade consideradas
Wx
Wxx
Wy
Wyy
A
A
A
A
vyuxIyxIvuE 212 ),(),(),(
xA
yA
xB=xA+u
yB= yA +vA
B
SSD com janela fixa
Resultados após validação cruzada
Algoritmos de Análise Global
Corte Mínimo de Grafo baseado em Pixels
Minimização de Energia Encaramos a correspondência como um problema de
classificação de pixels A imagem é um conjunto P de pixels com um sistema de vizinhança
N O rótulo/etiqueta de um pixel p é sua disparidade fp, que pode
assumir apenas valores discretos (inteiros ou não) O mapeamento f pode ser associado à seguinte energia (a ser
minimizada):
Edata mede o erro de intensidade entre pixels correspondentes:
Eneighbor penaliza relações indesejadas entre disparidades de pixels vizinhos. Geralmente, é usado para garantir a conservação de regiões suaves ( V(a,a) = 0 ) e descontinuidades:
)()()( fEfEfE neighbordata
2)()(
Pp
pPp
ppdata pIfpIfDfE
Nqp
qppqsmoothneighbor ffVfEfE},{
,)()(
Minimização Local de Energia Minimizar E(f) para uma imagem é um problema NP-
difícil Milhões de mapeamentos possíveis! Muitos mínimos locais ruins!
Buscamos um mínimo local forte, próximo ao global
Algoritmo iterativo: Começamos com um mapeamento f arbitrário Ciclo:
f pode ser alterado por “movimentos”, gerando vários possíveis f’ Para cada f’ que possa ser gerado a partir de f
Encontrar f’ que tem a menor energia Se E(f’) < E(f), fazemos f f’
Repetir o ciclo enquanto for possível qualquer atualização de f
Crítico: encontrar f’ de menor energia em cada iteração Conseguiremos em tempo polinomial, praticamente linear!
Tipos de movimentos Movimentos locais Alteração do rótulo (disparidade) de um pixel
para um valor qualquer Costuma achar mínimos locais muito distantes do
global
Movimentos globais Inversões
Substituímos, de uma só vez, rótulos por e vice-versa, para qualquer número de pixels
Achar mínimos locais muito fortes Expansões
Substituímos, de uma só vez, o rótulo de qualquer número de pixels por um rótulo
Acha mínimos locais a um fator pequeno e conhecido do global
Corte Mínimo de Grafos Solução por Grafos: Um nó para cada pixel da imagem
Apenas rótulos ou para inversões
Qualquer rótulo para expansões Nós terminais extras:
e para inversões e ! para expansões
Arestas entre cada pixel e ambos terminais Arestas entre pares de pixels vizinhos Pesos apropriados nas arestas
Corte do grafo: Conjunto mínimo de arestas que separa os terminais Partição dos nós em subconjuntos contendo cada terminal Custo do corte é dado pela soma dos pesos das arestas Corte mínimo: aquele com o menor custo possível
Corte Mínimo de Grafos Relacionando com o problema: Corte do grafo mapeamento f’
O corte separa cada pixel de um, e apenas um, dos terminais Os pixels recebem o rótulo do nó terminal que foi separado pelo
corte Custo do corte energia de f’ Corte mínimo f’ de menor energia
Corte Mínimo de Grafos Construção do grafo: Pesos das arestas são penalidades pelo corte passar por elas
Projetados para casar o custo do corte com a energia do mapeamento
Refeita dinamicamente a cada ciclo do algoritmo Pode ser necessário criar vértices auxiliares
Para expansões α, aparecem apenas entre vértices com rótulos diferentes em f
Grafo para Inversões
Nqp
Pqpqp
PqNq qpp
PqNq qpp
Ve
PpfVDt
PpfVDt
p
p
,,, ),,(
,,
,,
Grafo para Expansões
PpDt
PpfDt
Ppt
pp
ppp
p
,
,
,
qppqp
qp
qpa
qqa
pap
ffNqpfVe
ffNqp
ffVt
fVe
fVe
,,),,(
,,
),(
),(
),(
,
,
,
ComparaçãoImagem EsquerdaDisparidades Verdadeiras
Correlação Corte de Grafo por Pixels
Corte de Grafopor Atribuições
Algoritmos de Análise Global
Corte Mínimo de Grafo baseado em Atribuições
Reformulação do Problema A formulação anterior trata as imagens de forma
assimétrica e não trata: Oclusões – pixels de uma imagem sem correspondente na outra Unicidade – cada pixel só deveria ser mapeado a um único pixel
de destino
Abordagem alternativa Pixels:
Imagem da esquerda L com pixels l L Imagem da direita R com pixels r R União de todos os pixels p P = L R
Atribuições Conjunto A de todas as atribuições a = < l , r > que podem ser feitas
correspondendo pares de pixels nas duas imagens O rótulo fa de uma atribuição a só pode ser 1 (ativa) ou 0 (inativa) Unicidade: impomos que só pode haver uma (ou nenhuma) atribuição
ativa para cada pixel
Unicidade e Movimentos Unicidade
f = configuração de atribuições (ativas e inativas) active(f) = {a : fa = 1} = conjunto de atribuições ativas em f
Nl(f) = { <l,x> ativa } = atribuições ativas que envolvem o pixel l
Nr(f) = { <x,r> ativa } = atribuições ativas que envolvem o pixel r
Pixel ocluso: | Np(f) | = 0
Unicidade: | Np(f) | <= 1, p P
Expansão A = todas as atribuições com disparidade α active(f’) (active(f) A) Quaisquer atribuições podem ser desfeitas Atribuições com disparidade α podem ser acrescentadas
Inversão A = todas as atribuições com disparidade α ou β (active(f’) A) = (active(f) A) Atribuições com disparidades α ou β podem ser acrescentadas ou removidas
Função de Energia Usamos a seguinte função de energia:
Penalidades:
Vizinhança: atribuições são vizinhas quando partem ou chegam em pixels vizinhos Inversão: penaliza atribuições ativas próximas com disparidades diferentes
Expansão: penaliza a não existência de atribuições ativas próximas com a mesma disparidade
)()()()( fEfEfEfE smoothocclusiondata
2)(
factivea
srcdstdata aIaIfE
21
21 21},{ 21 1)(
adadNaa aasmooth afafTVfE
occPp
occlusion KpoccludedTfE
))(()(
21
21 21},{ 21)(
adadNaa aasmooth afafTVfE
Definições: A0 = {aactive(f) : d(a) α} A = {aA : d(a) = α} F = (f : active(f) = Ã), Ã = A0 A
Np(F) {0,1,2}, p P
Vértices: terminais s,t cada atribuição a Ã
Arestas direcionadas: (s,a) e (a,t) entre cada atribuição e os terminais (a1,a2) e (a2,a1) entre a1 e a2 vizinhas ({a1, a2} N, ambas A0 ou ambas A )
(a1,a2) e (a2,a1) entre a1A0 e a2A ambas envolvendo um pixel p
Relacionando: aA0 f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aA f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada) aà f’(a) = 0
Grafo para Expansões
t
s
aa0
1
10
0
Custo de dados Lembrando: aA0 f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aA f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada)
Então:
factiveafactivea
srcdstdata aDaIaIfE )()(2
t
s
aa0
D(a0)
D(a)
AaaDas
AaaDta
,),(
,),( 0
Custo de oclusão e unicidade Lembrando: aA0 f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aA f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada)
Definições:
Então:
occPp
occlusion KpoccludedTfE
))(()(
)1)(()(
),(
FactiveTKpD
rDlDrlaD
occocc
occoccocc
AaAa
apapPp
Kaa
aa
AaaDta
AaaDas
occ
occ
occ
20
1
21
12
21
0
,
,,
),(
),(
,),(
,),(
t
s
aa0
Docc(a0)
Docc(a)
Kocc
Custo de (des)continuidade Lembrando: aA0 f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aA f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada)
Definição:
Então:
21
21 21},{ 21)(
adadNaa aasmooth afafTVfE
Ãaadad
Naaaasmooth VaD
2
21
2121)()(
,,)(
AouAaa
adad
Naa
Vaa
Vaa
AaaDta
aa
aa
smooth
021
21
21
,12
,21
0
,
)()(
,
),(
),(
,),(
21
21
a1
d
a2d
a2d
a2d
a2d
Custo de (des)continuidade Lembrando: aA0 f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aA f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada)
Definição:
Então:
t
s
aa0
21
21 21},{ 21)(
adadNaa aasmooth afafTVfE
Dsmooth(a0)
AouAaa
adad
Naa
Vaa
Vaa
AaaDta
aa
aa
smooth
021
21
21
,12
,21
0
,
)()(
,
),(
),(
,),(
21
21
Ãaadad
Naaaasmooth VaD
2
21
2121)()(
,,)(
Grafo para Expansões Pesos:
AaAa
apapPp
Kaa
aa
Ãaa
Naa
Vaa
Vaa
AaaDas
AaaDaDta
AaaDta
AaaDas
occ
aa
aa
smooth
occ
occ
20
1
21
12
21
21
21
,12
,21
0
0
,
,,
),(
),(
,
,
),(
),(
,),(
,),(
,),(
,),(
21
21
ÃaadadNaa aasmooth
occoccocc
VaD
rDlDrlaD
22121 21),()(,, ,)(
),(
Grafo para Inversões Definições: A0 = {aactive(f) | d(a) α e d(a) β} A = {aA | d(a) = α}, A = {aA | d(a) = β} A = A Aβ
Vértices: terminais s,t cada atribuição aA
Arestas direcionadas: (s,a) e (a,t) entre cada atribuição e os terminais (a1,a2) entre a1A e a2A vizinhas ({a1, a2}N)
(a2,a1) entre a1A e a2A ambas envolvendo um pixel p
Relacionando: aA f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aAβ f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada) aAβ f’(a) = f(a)
t
s
aβaα
1
10
0
Custo de dados Lembrando: aA f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aAβ f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada)
Então:
factiveafactivea
srcdstdata aDaIaIfE )()(2
t
s
aβaα
D(aα)
D(aβ)
AaaDas
AaaDta
,),(
,),(
Custo de oclusão (e unicidade) Lembrando: aA f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aAβ f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada)
Definições:
Então:
occPp
occlusion KpoccludedTfE
))(()(
)1)(()(
),(
FactiveTKpD
rDlDrlaD
occocc
occoccocc
t
s
aβa
Docc(a)
Docc(aβ)
Kocc
AaAa
apapPp
Kaa
aa
AaaDta
AaaDas
occ
occ
occ
21
21
12
21
,
,,
),(
),(
,),(
,),(
Custo de (des)continuidade Lembrando: aA f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aAβ f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada)
Definição:
Então:
AaAa
Naa
aa
Vaa
AaaDas
AaaDta
aa
smooth
smooth
21
21
12
,21
,
,
0),(
),(
,),(
,),(
21
a
aβ
aβ
aβ
aβ
0
2
2121
, ,)(Aa
Naa aasmooth VaD
21
21 21},{ 21 1)(
adadNaa aasmooth afafTVfE
Custo de (des)continuidade Lembrando: aA0 f’(a) = 1 se a ficar ligado a s (se (s,a) não for cortada) aA f’(a) = 1 se a ficar ligado a t (se (a,t) não for cortada)
Definição:
Então:
t
s
aβa
Dsmooth(a)
21
21 21},{ 21 1)(
adadNaa aasmooth afafTVfE
Dsmooth(aβ)
0
2
2121
, ,)(Aa
Naa aasmooth VaD
AaAa
Naa
aa
Vaa
AaaDas
AaaDta
aa
smooth
smooth
21
21
12
,21
,
,
0),(
),(
,),(
,),(
21
Grafo para Inversões Pesos:
AaAa
apapPp
Kaa
aa
AaAa
Naa
Vaa
aa
AaaDaDas
AaaDaDta
AaaDta
AaaDas
occ
aa
smooth
smooth
occ
occ
21
21
12
21
21
21
,21
12
,
,,
),(
]),[(
,
,
),(
0),(
,),(
,),(
,),(
,),(
21
02
2121
, ,)(
),(
AaNaa aasmooth
occoccocc
VaD
rDlDrlaD
Inversões e Unicidade Unicidade no algoritmo de inversões Não incluir atribuições aαβ=<l,r> se Nl(f) = {a0} ou Nr(f) =
{a0} Como a atribuição a0 não será desligada, não podemos ligar aα
nem aβ
Custo ∞ para ligar simultaneamente aα e aβ envolvendo um mesmo pixel
Vantagens Unicidade garantida por construção Implementação mais simples, cada pixel admite
apenas uma atribuição ativa em cada instante Problema Inversões ficam restritas demais e perdem poder Atingimos mínimos locais muito ruins
Parâmetros Custo de dados
Custo de oclusão: Kocc
Custo de suavidade: Fixo ou proporcional à descontinuidade? Rezudido onde há descontinuidade de
intensidade?
contráriocaso
daIaIaIaIseV rrll
aa,3
,max, min2121, 21
max
2
max
,min)(
,min)(
daIaIaD
daIaIaD
srcdst
srcdst
ComparaçãoImagem EsquerdaDisparidades Verdadeiras
Correlação Corte de Grafo por Pixels
Corte de Grafopor Atribuições
Melhor Resultado Expansão de atribuições Custo de dados quadrático limitado em 400 Custo de oclusão 15 Custo de continuidade 10 Aumentado para 100 se intensidades diferem
menos de 10
Referências Y Boykov, O Veksler, R Zabih, Fast Approximate
Energy Minimization via Graph Cuts - IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 23, no. 11, pp. 1222-1239, November, 2001.
V Kolmogorov, R Zabih, Computing Visual Correspondence with Occlusions via Graph Cuts - International Conference on Computer Vision, 2001
D Scharstein, R Szeliski, A taxonomy and evaluation of dense two-frame stereo correspondence algorithms - International Journal of Computer Vision, vol. 47, no. 1-3, pp. 7-42, April, 2002