• Nenhum resultado encontrado

2.3 Correspondência Estéreo Semi Global (SGM)

2.3.3 Exemplificando o algoritmo SGM

A fim de melhorar o entendimento sobre o SGM, é dado um exemplo da computação deste método sobre duas imagens hipotéticas que considera-se que sejam estéreo e retificadas como mostrado na Figura 22. Os dados das duas imagens são valores aleatórios e portanto não têm interpretação real do cenário.

Figura 22 – Imagem de teste para a computação do SGM. (a) Imagem da esquerda (b) Imagem da direita

As operações seguem o fluxo mostrado no pseudocódigo 1, no qual primeiro calcula-se para cada disparidade o custo inicial, depois os custos de caminho para todos caminhos considerados, em seguida os custos de caminhos são agregados através do somatório e por fim é verificado a disparidade que tem o menor custo para definir 𝐷𝐿. O fluxo do

ponto de vista do acesso aos pixels e comutação de disparidade é realizado da seguinte forma: para cada linha, acessados de cima para baixo são computados todas as colunas da esquerda para a direita e para cada coluna são computados todas as disparidades começando da menor disparidade para a maior. É mostrado no final de cada iteração 𝑑 o estado atual dos custos de caminho 𝐿r𝑡, do valor agregado 𝑆 e da disparidade 𝐷𝐿. Por

simplicidade é adotado para o cálculo do custo inicial o método de diferença absoluta

𝐶(𝑝𝑖, 𝑝𝑗, 𝑑) = |𝐼𝐿(𝑝𝑖, 𝑝𝑗) − 𝐼𝑅(𝑝𝑖, 𝑝𝑗− 𝑑)|. Considere o intervalo de disparidade 𝑁𝑑 = 3, os

caminhos r0∘ e r45∘ para o cálculo do custo de caminho 𝐿

r𝑡 e as penalidades 𝑃1 = 24 e

𝑃2 = 96.

Para computar o custo agregado do pixel 𝑝(0, 0) na disparidade 𝑑 = 0, ou seja, 𝑆(0, 0, 0) tem-se: 𝑆(0, 0, 0) = 𝐿r0∘(0, 0, 0) + 𝐿r45∘(0, 0, 0) (2.25) no qual 𝐿r0∘(0, 0, 0) e 𝐿r45∘(0, 0, 0) são: 𝐿r0∘(0, 0, 0) = |𝐼𝐿(0, 0) − 𝐼𝑅(0, 0 − 0)| + min[𝐿r0∘(0, 0 − 1, 0), 𝐿r0∘(0, 0 − 1, 0 − 1) + 24, 𝐿r0∘(0, 0 − 1, 1) + 24, min 𝑖∈[0,3−1]𝐿r 0∘(0, 0 − 1, 𝑖) + 96] − min 𝑘∈[0,3−1]𝐿r 0∘(0, 0 − 1, 𝑘) (2.26)

𝐿r45∘(0, 0, 0) = |𝐼𝐿(0, 0) − 𝐼𝑅(0, 0 − 0)| + min[𝐿r45∘(0 − 1, 0 − 1, 0), 𝐿r45∘(0 − 1, 0 − 1, 0 − 1) + 24, 𝐿r45∘(0 − 1, 0 − 1, 1) + 24, min 𝑖∈[0,3−1]𝐿r 45∘(0 − 1, 0 − 1, 𝑖) + 96] − min 𝑘∈[0,3−1]𝐿r 45∘(0 − 1, 0 − 1, 𝑘) (2.27)

Como pode ser observado os custos de caminho anterior 𝐿r0∘(0, 0 − 1, 0) e 𝐿r45∘(0 − 1, 0 − 1, 0) estão fora do espaço de imagem. Isto acontece nas bordas da imagem. Estes casos são considerados inválidos e não podem participar do cálculo do custo de caminho atual como já mencionado anteriormente. Nos casos de borda o custo de caminho no qual o custo de caminho anterior está fora da imagem pode resumir-se ao valor de 𝐶(p, 𝑑). Outra situação inválida é quando o valor de disparidade é negativo ou é maior que 𝑁𝑑−1, ou

a intensidade de um pixel cuja localização está fora da imagem. Estas variáveis precisam ser detectadas e removidas durante o cálculo do custo de caminho atual.

Assim, aplicando os valores de custo de caminho e intensidade do pixel para as Equa- ções 2.26 e 2.27, e verificando as condições de invalidez, obtém-se:

𝐿r0∘(0, 0, 0) = |50 − 90| = 40 (2.28)

𝐿r45∘(0, 0, 0) = |50 − 90| = 40 (2.29) Assim aplicando o resultado das Equações 2.28 e 2.29 na Equação 2.25 obtém-se:

𝑆(0, 0, 0) = 40 + 40 = 80 (2.30)

Uma vez que S(0,0,0) é único valor calculado até agora, então a disparidade atual é 0.

Figura 23 – Estado atual do custo de caminho, do resultado agregado e disparidade com- putada para o pixel 𝑝(0, 0) e disparidade 0

O estado atual dos custos de caminhos são mostrados na Figura 23. É importante observar que os dados de custos de caminho precisam ser armazenados para serem aces- sados posteriormente pelos cálculos de custos de caminho a serem realizados pelos pixels adiante.

Repetindo as mesmas etapas para computar 𝑆(0, 0, 1) tem-se:

𝑆(0, 0, 1) = 𝐿r0∘(0, 0, 1) + 𝐿r45∘(0, 0, 1) (2.31) no qual 𝐿r0∘(0, 0, 1) e 𝐿r45∘(0, 0, 1) são respectivamente:

𝐿r0∘(0, 0, 1) = |𝐼𝐿(0, 0) − 𝐼𝑅(0, 0 − 1)| + min[𝐿r0∘(0, 0 − 1, 1), 𝐿r0∘(0, 0 − 1, 1 − 1) + 24, 𝐿r0∘(0, 0 − 1, 1 + 1) + 24, min 𝑖∈[0,3−1]𝐿r 0∘(0, 0 − 1, 𝑖) + 96] − min 𝑘∈[0,3−1]𝐿r 0∘(0, 0 − 1, 𝑘) (2.32) 𝐿r45∘(0, 0, 1) = |𝐼𝐿(0, 0) − 𝐼𝑅(0, 0 − 1)| + min[𝐿r45∘(0 − 1, 0 − 1, 1), 𝐿r45∘(0 − 1, 0 − 1, 1 − 1) + 24, 𝐿r45∘(0 − 1, 0 − 1, 1 + 1) + 24, min 𝑖∈[0,3−1]𝐿r45∘(0 − 1, 0 − 1, 𝑖) + 96] − min𝑘∈[0,3−1]𝐿r45∘(0 − 1, 0 − 1, 𝑘) (2.33)

A variável 𝐼𝑅(0, 0 − 1) é inválida. Então neste caso como não se tem um custo inicial

válido, define-se como resultado dos custos de caminho valores infinitamente grandes. Ao se definir valores de custo grande para custos de caminhos inválidos, faz com que estes custos não interfiram no cálculo de disparidade final o que torna as operações mais simples. Isto pode ser verificado diretamente na Equação 2.16 onde valores grandes de custo têm chance pequena de serem escolhidos pelas funções de mínimo, e assim nunca participarão das operações. No exemplo, para estas variáveis inválidas é adotado o valor 255, valor máximo permitido na representação de 8 bits da variável.

Assim, aplicando as condições nas Equações 2.32 e 2.33 obtém-se:

𝐿r0∘(0, 0, 1) = 255 (2.34)

𝐿r45∘(0, 0, 1) = 255 (2.35) Usando o resultado da Equações 2.34 e 2.35 na Equação 2.31 obtém-se:

𝑆(0, 0, 1) = 255 + 255 = 510 (2.36)

O valor de 𝑆(0, 0, 1) é maior do que o anterior 𝑆(0, 0, 0). Assim o valor de disparidade permanece inalterado.

O estado atual dos resultados de custo de caminho e agregação depois de se cal- cular 𝑆(0, 0, 0), 𝑆(0, 0, 1), 𝑆(0, 0, 2), 𝑆(0, 1, 0), 𝑆(0, 1, 1), 𝑆(0, 1, 2), 𝑆(1, 0, 0), 𝑆(1, 0, 1),

Figura 24 – Estado atual do custo de caminho, resultado agregado e disparidade depois de computado os custos de caminho do pixel 𝑝(1, 1) para disparidade 0

Vamos considerar um caso de computação de custo de caminho que não entra em nenhuma condição de borda. Então para computar 𝑆(1, 1, 1) tem-se:

𝑆(1, 1, 1) = 𝐿r0∘(1, 1, 1) + 𝐿r45∘(1, 1, 1) (2.37) no qual 𝐿r0∘(1, 1, 1) e 𝐿r45∘(1, 1, 1) são: 𝐿r0∘(1, 1, 1) = |𝐼𝐿(1, 1) − 𝐼𝑅(1, 1 − 1)| + min[𝐿r0∘(1, 1 − 1, 1), 𝐿r0∘(1, 1 − 1, 1 − 1) + 24, 𝐿r0∘(1, 1 − 1, 1 + 1) + 24, min 𝑖∈[0,3−1]𝐿r 0∘(1, 1 − 1, 𝑖) + 96] − min 𝑘∈[0,3−1]𝐿r 0∘(1, 1 − 1, 𝑘) (2.38) 𝐿r45∘(1, 1, 1) = |𝐼𝐿(1, 1) − 𝐼𝑅(1, 1 − 1)| + min[𝐿r45∘(1 − 1, 1 − 1, 1), 𝐿r45∘(1 − 1, 1 − 1, 1 − 1) + 24, 𝐿r45∘(1 − 1, 1 − 1, 1 + 1) + 24, min 𝑖∈[0,3−1]𝐿r 45∘(1 − 1, 1 − 1, 𝑖) + 96] − min 𝑘∈[0,3−1]𝐿r 45∘(1 − 1, 1 − 1, 𝑘) (2.39)

Assim, aplicando os valores de custo de caminho e intensidade do pixel para as Equa- ções 2.38 e 2.39 obtém-se:

𝐿r0∘(1, 1, 1) = |12 − 25| + min[255, 15 + 24, 255 + 24, 15 + 96] − 15 = 37 (2.40)

𝐿r45∘(1, 1, 1) = |12 − 25| = min[255, 40 + 24, 255 + 24, 40 + 96] − 40 = 37 (2.41) Assim, aplicando o resultado das Equações 2.40 e 2.41 na Equação 2.37 obtém-se:

𝑆(1, 1, 1) = 37 + 37 = 74 (2.42)

O valor de 𝑆(1, 1, 1) é maior do que o anterior 𝑆(1, 1, 0). Assim, o valor de disparidade permanece inalterado.

Figura 25 – O resultado final de custo de caminho, agregação e disparidade 𝐷𝐿

O estado atual depois de computado todos os custos de caminho e agregação é mos- trado na Figura 25.

Por coincidência os menores custos agregados para todos os pixels estão localizados na disparidade 0. Esta situação acontece porque próximo da borda esquerda da ima- gem as maiores disparidades ultrapassam os limites da imagem (como já é esperado). Intuitivamente, em outras palavras, isto acontece porque estas regiões próximas da borda esquerda são vistas apenas por uma das câmeras e portanto a disparidade não pode ser analisadas para todos os valores de disparidades, somente aqueles menores que ainda não ultrapassaram os limites da imagem.

Figura 26 – Exemplo de mapa de disparidade destacando as regiões escurecidas próximo a borda esquerda.

Uma vez que são definidos valores bastante grandes para as disparidades que ultrapas- saram os limites da imagem, estas não serão escolhidas durante o cálculo da disparidade que realiza uma função de mínimo dos custos de todas as disparidades. Um exemplo do

mapa de disparidade, destacando esta região próximo a borda esquerda é mostrada na Figura 26.