top of page

Stitching

Com exceção a alguns casos especiais em que, na aquisição, se utiliza apenas uma câmara que gira sobre si própria, é necessário juntar todas as imagens capturadas, num mesmo instante, numa só. Este processo é denominado stitching. O FOV coletivo deve cobrir 360º do espaço onde se encontra o equipamento de captura e cada imagem deve conter no seu FOV as extremidades das imagens a si adjacentes sobrepostas, em cerca de 15 a 30%. Infelizmente, mesmo que a condição anterior se verifique, é possível a ocorrência de outros problemas, tais como paralaxe (aparência de um objeto pode variar com a posição/lente com que é captado), distorção causada pelas lentes, movimentos, diferenças de luminosidade, entre outros.

 

 

 

 

 

 

 

​

​

​

​

​

Durante o processo de stitching, existem 3 fases: Registo (Registration), Calibração (Calibration) e Mistura (Blending).

 

A fase de registo prende-se com a correspondência de características entre imagens (num set), i.e., para que seja feito o alinhamento entre imagens, devem-se encontrar semelhanças entre os pixeis sobrepostos. Num alinhamento direto pretende-se minimizar a soma das diferenças absolutas entre os pixeis sobrepostos e, adicionalmente, podem-se impor algumas condições, como procurar correspondências apenas entre imagens vizinhas, o que torna a pesquisa mais exata e a comparação mais rápida. No alinhamento indireto, estima-se um modelo matemático a partir da informação, através de métodos como o RANSAC, iterativos e probabilísticos. Estes apoiam-se na discriminação dos dados em inliers (cuja distribuição pode ser explicada matematicamente) e outliers (que não entram no modelo, pois são considerados ruído ou incorretos).

 

O objetivo da calibração é detetar diferenças entre as várias imagens: distorções, variações na luminosidade, vignetting (redução do brilho ou saturação na periferia de uma imagem) e/ou distorções cromáticas (quando as lentes não focam adequadamente). Se na fase anterior foi criado algum modelo específico para os dados, poderá ser útil aqui também.

 

A minimização e/ou resolução dos problemas encontrados na calibração são resolvidos na fase de mistura e é neste ponto que as imagens são juntas. Quando os problemas (ou “artefactos”) não podem ser completamente resolvidos, ainda que sejam minimizados, é possível que as “costuras” (sítio onde se dá a sua junção) da imagem final sejam visíveis, pelo que os seus efeitos podem ser reduzidos através do ajuste do ganho das intensidades (da luminância e crominâncias) nessas zonas (que se sobrepunham), com vista a reduzir a diferença entre os respetivos pixeis. A imagem resultante é esférica. Após todos os melhoramentos possíveis, é feito o mapeamento.

Mapeamento e Rendering

Ainda não existem codificadores nem descodificadores capazes processar dados esféricos, pelo que é necessário projetar as imagens esféricas para o domínio plano e deste para esféricas novamente, para que possam ser posteriormente submetidos ao processo de rendering. O mapeamento de uma esfera para um plano (sphere-to-plane) consiste na projeção da imagem esférica para um dado plano, enquanto que o mapeamento inverso corresponde ao processo contrário.

 

As duas principais categorias de mapeamento são: qualidade uniforme (Uniform Quality Mappings) e qualidade variável (Variable Quality Mappings). Na primeira, todas as partes da esfera são mapeadas para o plano com qualidade uniforme, enquanto que na segunda uma melhor qualidade está reservada para as áreas que o utilizador está a visualizar (viewports), num dado momento, ou que têm maior probabilidade de serem visualizadas, sendo que as restantes têm pior qualidade.

 

Para mapeamentos de qualidade uniforme consideram-se as seguintes projeções (embora existam outras também):

  • Equiretangular (Equirectangular): a imagem 360º é projetada numa superfície retangular (de forma análoga ao MapaMundo); uma linha reta no mundo real não o será nesta projeção, o que torna a compressão complicada. Apresenta elevada qualidade nos pólos, o que é uma desvantagem, pois quando se renderiza um vídeo ou imagem com este mapeamento, desperdiçam-se pixeis em zonas que as pessoas não olham frequentemente (céu e chão), quando se poderia utilizar os mesmos noutras zonas;

​

  • Cúbica (Cubemaps): é uma melhoria em relação à anterior embora ainda contenha substanciais variações na densidade de pixeis. A imagem esférica é colocada dentro de um cubo e é projetada radialmente para o mesmo. O centro de cada face do cubo está mais próximo da esfera enquanto que os cantos estão mais afastados, o que faz com que nestas zonas cada pixel da esfera seja projetado para um par de pixeis. Após o rendering cada face do cubo corresponde a um sentido (frente/trás, cima/baixo, esquerda/direita), e como é sabido que as pessoas olham mais em frente (centro da face) do que para os cantos, estes terem mais pixeis é desnecessário. 

​

​

​

​

​

​

​

​

​

​

​

​

Como se pode concluir, as projeções acima enumeradas não são eficientes. Gastam recursos (bits) em áreas pouco prováveis de serem viewports não permitindo que áreas com grande probabilidade de serem viewports tenham melhor qualidade.

​

Em streaming, isto traduz-se no mau uso da largura de banda disponível. Então, surgiram os mapeamentos de qualidade variável. Seguem-se os dois mais utilizados:

 

  • Piramidal (Pyramid): proposta pelo Facebook, é a projeção da esfera para uma pirâmide cujo resultado é a planificação desta. Existe perda de informação: alguns pares de pixeis da esfera são fundidos num único pixel, que resulta da interpolação dos seus valores de cor; obtém-se maior qualidade na base da pirâmide que deverá corresponder, no rendering, ao viewport do utilizador, e nas faces pior qualidade;

 

  • Cúbica equiangular (EAC): lançada pela Google no principio de 2017, é até agora a projeção mais eficiente. Semelhante à cúbica, mas distribui os pixeis de forma uniforme, qualquer que seja a distância da esfera às diferentes coordenadas do cubo.

 

Mesmo utilizando EAC, o streaming de conteúdos 360 (nomeadamente o vídeo), ainda apresenta dificuldades.

Codificação

No que diz respeito a conteúdos 360º, a codificação é algo que depende de vários fatores: qualidade de visualização (resolução) pretendida, qualidade de streaming (que se prende com a largura de banda disponível), tamanho dos ficheiros obtidos e ainda compatibilidades dos dispositivos.

 

Por ser um assunto um pouco extenso, apenas abordaremos os aspetos considerados principais.

Os vídeos e imagens obtidos na captura, sejam 360º ou não, estão em formato PCM . são muito pesados. Ocupam um número elevadíssimo de bits que são impossíveis de transmitir, e podem (ou não) conter informação desnecessária (não importante e/ou redundante). Há então a necessidade de os comprimir (e descomprimir depois de serem transmitidos), para que o débito binário necessário seja menor sem comprometer a sua qualidade.

É de salientar que há perda de informação nos processos de codificação e descodificação: os codificadores adequados para streaming são lossy, mas se o codec (codificador) escolhido for bom o suficiente, a qualidade do produto final deverá ser boa. O formato (ou container) deste último será algum que não PCM e que dependerá do codec utilizado.

​

​

​

​

 

​

​

​

​

​

​

​

​

​

 

​

​

O container possui o ficheiro de vídeo (imagem e áudio) e meta-dados (título, descrição, entre outras informações).

 

Para imagem, o codec mais utilizado é o JPEG, mesmo após 25 anos da sua criação, e tipicamente alcança um fator de compressão de 10. De entre todos os codecs existentes apropriados para vídeo, os três mais utilizados são H.264/AVC (Advanced Video Coding), H.265 e VP9. O H.264/AVC baseia-se no MPEG-4 Part10 e, tal como os outros enumerados acima, permite obter vídeos de qualidade bastante razoável e com um débito relativamente reduzido, o que leva os formatos por ele produzidos a correr sem problemas em qualquer dispositivo, sendo também rápido a codificar.

 

Porém, os ficheiros obtidos são muito grandes: foi criado há já 14 anos e não sendo tão complexo como os outros, não é tão eficiente na compressão. Não suporta vídeos com resoluções superiores a 4K e a ocorrência de artefactos é comum quando o débito é muito baixo. A razão para ser tão popular é que já se encontra no mercado há muito tempo e grandes empresas, como a Samsung, ainda se apoiam nele. Também conhecido como HEVC (High Efficiency Video Codec), o H.265 oferece uma notável melhoria de 50% na compressão, em relação ao H.264, tem menos artefactos e suporta resoluções até 8K (8192x4320 pixeis). Contudo, só é suportado para dispositivos a partir do Android 5.0, não é suportado em iOS nem no YouTube e não funciona bem na maioria dos PCs. O VP9, que é uma melhoria do VP8 e opensource, nasceu da necessidade da Google de melhorar o streaming (cujos ficheiros em causa eram codificados com H.264). Apresenta melhores resultados que o HEVC para resoluções superiores a HD, chegando a ser possível renderizar vídeos com 4096x4096 pixeis com 60fps perfeitamente, o que com outro codec seria impossível.

 

Apesar de o H.265 e o VP9 parecerem os mais apropriados, pois o rendering dos seus formatos e as suas velocidades de streaming são ótimas, a codificação proporcionada por eles é muito lenta e requer muito poder de processamento por parte dos dispositivos.

​

No caso do áudio, o codec mais utilizado atualmente é o AAC (Advanced Audio Coding), que é lossy e reduz o tamanho dos ficheiros em cerca de 90%.

Para obter uma imagem ou vídeo a 360º, são necessários alguns passos de processamento de dados de modo a obter o resultado desejado.

Os três processos principais para a obtenção de um(a) imagem ou vídeo 360º são os seguintes:

Processamento

Overlapping de imagens.
Mapeamento de qualidade uniforme. a) Projeção Equiretangular; b) Projeção Cúbica.
Componentes de um container.
bottom of page