Conversão de Disparidade em Coordenadas do Mundo

Uma vez na posse de um mapa de disparidade entre imagem esquerda e direita, obtido para câmaras calibradas, a conversão do ponto (u, v, d ) em coordenadas (x, y, z) (num dado referencial) é trivial. Admita-se que as imagens foram previamente rectificadas, seja (u, v, d ) as coordenadas de um pixel na imagem e a respectiva disparidade, e seja B a distância entre os centros de projecção das duas câmaras. Dado que as imagens foram rectificadas, B é simplesmente a coordenada x da descrição do centro de projecção da câmara direita no referencial local da câmara esquerda. Da rectificação sai também que a distância focal (f) de ambas as câmaras é igual e a coordenada cy do ponto principal é também igual. A intersecção segundo x de cada recta com o plano de projecção (no referencial local da câmara esquerda, ver figura 5.4.1) vem dada por

Figura: Conversão de disparidade em coordenadas cartesianas.
\begin{figure}\center
%
\input{disparidade.pstex_t}
\end{figure}

i1x = $\displaystyle {\frac{{u_1-c^x}}{{f}}}$    
i2x = $\displaystyle {\frac{{u_2-c^y}}{{f}}}$ + B    

tem-se o sistema

$\displaystyle {\frac{{x}}{{z}}}$ = $\displaystyle {\frac{{i_1^x}}{{1}}}$ = $\displaystyle {\frac{{u_1-c^x_1}}{{f}}}$    
$\displaystyle {\frac{{x-B}}{{z}}}$ = $\displaystyle {\frac{{i_2^x}}{{1}}}$ = $\displaystyle {\frac{{u_2-c^x_2}}{{f}}}$    

onde também é possivel escrever um sistema semelhante usando y. Assim, a transformação pretendida (para coordenadas no referencial da câmara esquerda) é

z = $\displaystyle {\frac{{-B f}}{{d-(c^x_r-c^x_l)}}}$    
x = z$\displaystyle {\frac{{u-c^x_l}}{{f}}}$    
y = z$\displaystyle {\frac{{v-c^y}}{{f}}}$    

onde os indices r e l na coordenada cx indicam a câmara direita ou esquerda respectivamente. Obtém-se então um ponto tridimensional em coordenadas locais da câmara esquerda. De forma a obter um ponto em coordenadas do mundo basta aplicar a inversa da transformação extrínseca esquerda ( $ \mathcal {E}$l-1), previamente obtida.

Em [14] refere-se a seguinte relação5.4

$\displaystyle \left[\vphantom{\begin{array}{ccccccc}u\\  v\\  d\\  1\end{array}}\right.$$\displaystyle \begin{array}{ccccccc}u\\  v\\  d\\  1\end{array}$$\displaystyle \left.\vphantom{\begin{array}{ccccccc}u\\  v\\  d\\  1\end{array}}\right]$ $\displaystyle \sim$ $\displaystyle \underbrace{{
\begin{bmatrix}
f & 0 & c^x_l & 0\\
0 & f & c^y_l...
... & 0 & c^x_r-c^x_l & -Bf\\
0 & 0 & 1 & 0
\end{bmatrix}}}_{{\mathcal{D}}}^{}\,$$\displaystyle \left[\vphantom{\begin{array}{ccccccc}x\\  y\\  z\\  1\end{array}}\right.$$\displaystyle \begin{array}{ccccccc}x\\  y\\  z\\  1\end{array}$$\displaystyle \left.\vphantom{\begin{array}{ccccccc}x\\  y\\  z\\  1\end{array}}\right]$

Indicando que o espaço de disparidade é uma reconstrução projectiva do cenário. Como se sabe (ver [4]), um plano em coordenadas projectivas é transformado entre projecções da seguinte forma

$\displaystyle \bar{P}{^\prime}$ = H-T$\displaystyle \bar{P}$ (5.4.1)

onde H é a transformação projectiva a aplicar para levar um ponto $ \bar{{p}}$ em $ \bar{{p}}{^\prime}$ e { . }-T = $ \left(\vphantom{\{\cdot\}^{-1}}\right.${ . }-1$ \left.\vphantom{\{\cdot\}^{-1}}\right)^{T}_{}$ = $ \left(\vphantom{\{\cdot\}^T}\right.${ . }T$ \left.\vphantom{\{\cdot\}^T}\right)^{{-1}}_{}$. Ora, um hiper-plano $ \bar{s}$ divide o espaço em duas regiões (que se designarão por + e -) e um ponto $ \bar{p}$ pertence a uma das regiões consoante o sinal de $ \bar{s}$T$ \bar{p}$ é positivo ou negativo. Repare-se que aqui relaxa-se um pouco a definição de espaço projectivo dado que se diferencia o plano $ \bar{p}$ do plano - $ \bar{p}$, pela maneira em que separam o espaço (está-se portanto a falar de orientação).

Supondo então que se tem o plano de água W$ \bar{p}$ = $ \left[\vphantom{\begin{array}{ccccccc}0&0&1&0\end{array}}\right.$$ \begin{array}{ccccccc}0&0&1&0\end{array}$$ \left.\vphantom{\begin{array}{ccccccc}0&0&1&0\end{array}}\right]^{T}_{}$ correspondente ao plano z = 0 (a região + corresponde ao semi-espaço com a coordenada z positiva). Este plano pode ser levado para coordenadas de câmara através de 5.4.1 (usando $ \mathcal {E}$) e de seguida para o espaço de disparidade aplicando novamente 5.4.1 (usando $ \mathcal {D}$). Tem-se assim uma maneira de diferenciar pontos sobre e sob o plano de água no espaço de disparidade. Isto é importante dado que cada imagem apenas é ``válida'' dentro de água (caso se aplique a rectificação de snell) ou fora de água (caso não se aplique a rectificação de snell), obrigando a que cada triplo (u, v, d ) seja reconstruído de maneira diferente em cada caso.

Para o caso em que se pretende reconstruir objectos submersos, o uso de $ \mathcal {D}$ é apenas aproximado, sendo o resultado exacto obtido aplicando 4.1.10 e 4.1.11 a cada emparelhamento de pixels, detectando de seguida a intersecção das rectas descritas pelo emparelhamento, como descrito no Apêndice B. Note-se porém que o plano z = 0 não é alterado pela rectificação de snell (a transformação de Snell descrita mapeia o plano da interface nele próprio), pelo que é válido aplicar 5.4.1 para decidir quais os pixels sobre e sob o plano de água, como descrito no parágrafo anterior.

De forma a facilitar a visualização da reconstrução, desenvolveu-se uma aplicação em C usando OpenGL (com interface para Matlab), permitindo a navegação no ambiente. Na figura 5.4.2 apresentam-se imagens da aplicação a correr. Destaca-se que é possível uma navegação suave usando em combinação o rato e o teclado.

Figura: Visualização da reconstrução.
\includegraphics[width=200pt]{gl_mesh_snapshot1.eps} \includegraphics[width=200pt]{gl_mesh_snapshot2.eps}

Para testar a viabilidade da aproximação de snell, colocou-se um par de câmaras a cerca de 1.3m de altura relativamente ao interface (ver figura 5.4.3) e reconstruiu-se um objecto planar (colocado paralelo ao interface) a várias profundidades. O erro de reconstrução obtido quando se usa apenas a matriz $ \mathcal {D}$ apresenta-se na figura 5.4.4. Como seria de esperar, o erro aumenta com a profundidade a que o plano é colocado e com o ângulo que o raio de luz faz face à normal do interface. Em particular, repare-se nos cantos superiores onde muito ruído se faz notar devido a erros de rectificação provocados pelo ângulo já elevado dos raios de luz incidentes face à normal do interface (cerca de 25 graus para o canto superior direito da imagem da câmara esquerda). Não contando com este factor e olhando para o pior caso (plano a 1.5 metros de profundidade) observam-se erros de cerca de 25 centímetros perto dos cantos inferiores da imagem (ângulo incidente de cerca de 15 graus para o canto inferior direito da imagem obtida pela câmara esquerda). Dada a posição do plano face às câmaras, é um erro relativo5.5 de 10%. Este exemplo serve para mostrar que a rectificação a partir da aproximação de snell de primeira ordem apenas é válida numa vizinhança próxima da normal à interface. Nas imagens apresentadas esta vizinhança está centrada no pixel (u, v) = (424, 363).

Figura: Visualização dos parâmetros extrínsecos do sistema stereo para as imagens renderizadas por software. Os parâmetros usados são aqueles que se consideram típicos. A tabela indica a posição das câmaras no referencial do mundo (a origem do referencial situa-se no canto superior esquerdo da grelha).
\includegraphics[width=200pt]{extrinsecos_renderizado.eps}
Parâmetro
Esquerda
Posição (m) (.53,.36,1.26)
Orientação (-2.14, -2.14, .1)

Figura: Erro de reconstrução para cada pixel da imagem usando apenas a rectificação de Snell e a conversão de disparidade em coordenadas do mundo usual. O cenário a reconstruir é um plano à profundidade indicada.
\includegraphics[width=200pt]{erro_reconstruccao_plano_01.eps} \includegraphics[width=200pt]{erro_reconstruccao_plano_50.eps} \includegraphics[width=200pt]{erro_reconstruccao_plano_100.eps} \includegraphics[width=200pt]{erro_reconstruccao_plano_150.eps}

Usando os mesmos mapas de disparidade obtidos acima, leva-se agora em consideração a existência da interface na reconstrução (ver figura 5.4.5). Os pontos tridimensionais são agora obtidos através da intersecção de dois raios refractados pela interface. Embora a existência de ruído seja ainda evidente nos cantos superiores (dado que não se mexeu nos mapas de disparidade), o erro diminui significativamente no pior caso passando a ser cerca de 3 centímetros a uma profundidade de 1.5 metros, resultando num erro relativo de pouco mais de 1%. Repare-se que este valor é o erro esperado devido à quantização da disparidade para a distância em questão.

Figura: Erro de reconstrução para cada pixel da imagem usando a rectificação de Snell e a conversão de disparidade em coordenadas do mundo descrita por 4.1.10 e 4.1.11. O cenário a reconstruir é um plano à profundidade indicada.
\includegraphics[width=200pt]{erro_reconstruccao_plano_01_corrected.eps} \includegraphics[width=200pt]{erro_reconstruccao_plano_50_corrected.eps} \includegraphics[width=200pt]{erro_reconstruccao_plano_100_corrected.eps} \includegraphics[width=200pt]{erro_reconstruccao_plano_150_corrected.eps}

Numa tentativa de diminuir o ruído existente nos exemplos anteriores, obteve-se um mapa de disparidade bidimensional (segundo u e v) usando o algoritmo de stereo denso semelhante ao das coordenadas cíclicas descrito na secção 5.3.3. Os resultados da aplicação deste algoritmo às imagens de planos anteriores apresentam-se na figura 5.4.6. Conclui-se que o algoritmo converge adequadamente nestas imagens, não havendo em qualquer imagem erros superiores aos cerca de 3 centímetros devido à quantização.

Figura: Erro de reconstrução para cada pixel da imagem. O cenário a reconstruir é um plano à profundidade indicada.
\includegraphics[width=200pt]{erro_reconstruccao_plano_01_corrected2.eps} \includegraphics[width=200pt]{erro_reconstruccao_plano_50_corrected2.eps} \includegraphics[width=200pt]{erro_reconstruccao_plano_100_corrected2.eps} \includegraphics[width=200pt]{erro_reconstruccao_plano_150_corrected2.eps}


Ricardo 2004-11-06