quinta-feira, 20 de outubro de 2011

Apresentação Webmedia 2011 - Reversing Anaglyph Videos Into Stereo Pairs

Olá!

Durante os dias 3 a 6 de outubro desse ano ocorreu o 17° WebMedia em Floripa. O artigo, escrito por mim, um aluno de doutorado também da área, e meu orientador, foi aceito e eu apresentei no último dia.

Neste artigo, apresentamos nossa técnica para reversão de um vídeo anaglífico, obtendo novamente o par estéreo que o originou. Essa técnica se insere numa proposta mais ampla do nosso grupo, em busca de criar um codificador exclusivo para vídeos estereoscópicos, buscando qualidade acima de tudo, ou seja, codificar o vídeo com o mínimo possível de perda da percepção de profundidade - que é a graça dos vídeos 3D esteoscópicos :)

Segue abaixo o link para a apresentação do artigo, tanto em português-BR quanto em inglês. O artigo logo será publicado na Digital Library da ACM, sob o título de "Reversing Anaglyph Videos Into Stereo Pairs".

Como este artigo foi submetido na metade do ano, de lá pra cá nossa técnica evoluiu e novos resultados foram obtidos; estes foram submetidos ao ACM SAC de 2012 e, uma grande alegria para nós, foi aceito para publicação e apresentação! Este simpósio é internacional e será realizado na Itália. O título do artigo é "RevGlyph - A Technique for Reverting Anaglyph Stereoscopic Videos". Como a técnica foi apresentada no primeiro artigo, neste o foco são em melhorias feitas e análise aprofundada dos resultado, fora que a técnica ganhou um nome ;) 

Até mais!

Links

Reversing Anaglyph Videos Into Stereo Pairs
apresentação Português-BR | English presentation


terça-feira, 11 de outubro de 2011

Minicurso - Criação de Imagens e Vídeos 3D com OpenCV


Slide inicial da apresentação do minicurso
Slide inicial da apresentação do minicurso

Olá!

Dia 20 de setembro dei um minicurso durante a Semana de Computação - SemComp do Instituto aqui na universidade. O minicurso foi voltado à criação de imagens e vídeos 3D esterescópicos do tipo anaglífico, utilizando o OpenCV. Contou com a participação de cerca de 40 alunos, que puderam criar imagens e vídeos anáglifos vermelho-ciano, e levaram de presente o óculos necessário para a visualização.

Deixei compartilhado na minha página pessoal o material do minicurso, incluindo o PDF da apresentação, bem como os códigos e links úteis. Para aqueles que desejarem utilizar meu material para outros minicursos/apresentações, só peço para que referenciem a origem. Caso necessitem, posso passar o PPT da apresentação.

Até mais!

terça-feira, 16 de agosto de 2011

Apresentação de Introdução ao Vídeo 3D Estereoscópico

Oi pessoal, tudo bem?

Hoje vou deixar um arquivo com uma apresentação que eu e minha amiga Sandra fizemos para a disciplina de Multimídia aqui na pós-graduação. Preparamos um material introdutório sobre vídeo 3D estereoscópico, abordando todo processo de visualização 3D estereoscópica. Os slides possuem pouco texto, por isso também disponibilizo um documento com mais detalhes de cada tópico abordado na apresentação.

Download da apresentação

Download do documento

Caso alguém queira utilizar parte do material, fique à vontade desde que referencie de onde o retirou: no caso, foi daqui do blog. Se quiser a versão Power Point é só me enviar um email que eu a disponibilizo.


segunda-feira, 8 de agosto de 2011

Debate TV 3D: Tecnologia ativa x passiva

Olá pessoal! Passando para deixar algumas atualizações no blog. Não, ele não está extinto... ainda :-)

O pessoal da Revista Home Theater & Casa Digital promoveu um debate convidando a LG (representada pela Fernanda Suma – gerente de produto) e a Samsung (representada pelo Rafael Cintra – gerente de produto) para falarem sobre suas TVs 3D, as diferenças entre elas e tirar dúvidas dos ouvintes e internautas acerca da tecnologia 3D como um todo. Deixo aqui minha opinião sobre o debate.

Diferença nas tecnologias


A Samsung fez uma apresentação mais comercial, defendendo a tecnologia de óculos ativos, que eu classifico como óculos obturadores. Essa é a tecnologia dominante nos televisores 3D. Pretendo criar um post com mais detalhes sobre esta tecnologia. Bem resumido, o funcionamento é o seguinte: existem dois sinais de vídeos, um para cada olho, chamado de par estéreo. A TV alterna entre esses sinais de vídeo, enviando um frame de cada um, ou seja, um frame do vídeo esquerdo, outro do vídeo direito, e assim por diante. Essa alternância ocorre a uma frequência bem alta. Os óculos ativos são sincronizados com a TV através de Bluetooth, alternando a visão de cada lente de forma a acompanhar o frame sendo exibido pela TV. Em outras palavras, quando a TV envia um frame do vídeo esquerdo, os óculos ativam apenas a lente esquerda, deixando a lente direita ofuscada; o mesmo ocorre quando é enviado um frame do vídeo direito. Com isso, a tecnologia é parecida com um pisca-pisca, porém em alta frequência (cerca de 60 frames para cada olho por segundo). Com essa frequência, nossos olhos acabam não notando o ofuscamento causado pelos óculos. Eles defendem esta tecnologia pela qualidade das imagens, possibilitando reprodução Full HD, sem utilização de filtros, o que garante a reprodução fiel da mídia.

A LG apresenta e defende tecnologia de óculos passivos, que eles chamam de FPR, que eu classifico como óculos polarizadores. O funcionamento resumido é que os frames de ambos os vídeos são enviados simultaneamente, sendo separados pelos óculos (que funciona como um filtro, captando desse modo apenas o vídeo desejado). Segundo eles, essa nova tecnologia promove melhor conforto visual por não haver mais a alternância entre frames necessária na tecnologia ativa. Essa alternância, dependendo da frequência utilizada, provoca cintilação, ou flickering . O flickering é considerado como principal reclamação de quem tem seu primeiro contato com uma tela 3D, devido ao mal estar causado (pense em uma lâmpada no fim da vida, que começa a piscar sem parar e você entende o mal estar que alguns sentem). Há também conforto no uso, pois os óculos são mais leves, não precisam de bateria nem de sincronismo com o televisor. Por fim, o custo é reduzido (R$20,00 por óculos adicionais), um diferencial que muitos consumidores irão levar em conta na hora da compra.

Ambas apresentam televisores com garantia de reprodução 3D Full HD e possibilidade de conversão de conteúdo 2D para 3D, cuja qualidade não chega à de conteúdo criados exclusivamente em 3D.

Principais dúvidas do público


1-    Questão do peso e do preço dos óculos

A Samsung se compromete em proporcionar a melhor qualidade de imagem ao invés de redução de preços que poderiam influenciar em uma qualidade menor. Porém, estão sempre investindo em pesquisa para reduzir os preços, sempre garantindo melhor qualidade. Com relação ao peso, por necessitar de dispositivos físicos para o funcionamento do óculos (Bluetooth, infravermelho), o peso dos óculos da tecnologia ativa é maior. Outra característica a ser levado em conta na tecnologia ativa é a necessidade de se recarregar a bateria dos óculos, o que pode trazer incômodo se a bateria termina no meio de um filme, por exemplo.

2-    Questão da resolução Full HD na tecnologia passiva.

Não ficou muito claro para mim o esclarecimento da gerente de produto da LG. Pelo que eu entendi, a LG garante que entrega a imagem 3D em Full HD (1920x1080 linhas), através da combinação das duas imagens do par estéreo. Ou seja, cada imagem sozinha possui uma resolução menor, porém, quando em conjunto, a resolução das duas é somada para fornecer as 1080 linhas do Full HD. Em minha opinião, acho esse esclarecimento ou pouco fraco, pois para mim ambas as imagens deveriam ser de resolução Full HD, independente de serem exibidas separadas ou em conjunto, pois a perda de resolução (logo, de detalhes finos da cena) existe, sim.

3-    Questão do conteúdo

Resposta de ambos: falta conteúdo. Realmente, a tecnologia avança, porém não é visto um grande investimento das emissoras na produção de conteúdo 3D (no Brasil, muitas ainda estão se recuperando do investimento em tecnologia para transmissão digital), estando atualmente limitados a grandes obras cinematográficas. Ambas as empresas possuem um canal em suas SmartTV para que os consumidores possam assistir conteúdo em 3D como filmes, trailers. Não deram muito detalhes sobre quais filmes são disponíveis nem se são atualizados constantemente com novos conteúdos.

Considerações finais


Foi bom saber o interesse crescente do público sobre a tecnologia estereoscópica e melhor ainda saber da variedade de tecnologias que a indústria de televisão vem a oferecer, possibilitando maior experiência do público para a escolha daquela que melhor se encaixa a seus gostos com um melhor custo-benefício. Espero que novos debates possam surgir, envolvendo pessoal mais técnico e independente, que possam responder com mais propriedade e profundidade em questões mais específicas sobre 3D de forma imparcial.

Com relação ao desconforto e mal estar, vale lembrar que por ser uma tecnologia em amadurecimento, ainda falta muita pesquisa para corroborar cientificamente o mal estar apontado por muitos. Muitos fatores estão envolvidos, desde a utilização dos óculos, a própria produção do conteúdo 3D e até mesmo os fatores biológicos de cada pessoa (miopias, presbiopias e derivados). Mesmo assim, por precaução, cabe sempre o bom senso no uso: não assistir por um longo período de tempo, desativar o 3D caso esteja causando desconforto, não deixar crianças assistindo conteúdo 3D por um longo período de tempo.

Com relação a qual é melhor: tecnologia ativa ou passiva, minha preferência por enquanto é pela tecnologia ativa. Tive a oportunidade de testar um televisor 3D para o Teste USP da Folha de São Paulo e pude comprovar a qualidade Full HD e a ótima sensação de profundidade, embora seja real o desconforto dos óculos, que por sinal, são delicados e nem se parecem com óculos. Já o mal estar visual, eu não tive problemas. A tecnologia passiva é muito utilizada nos cinemas 3D e, por experiências passadas, eu não gostei muito. A sensação de profundidade é realmente boa, mas os vídeos parecem mais escurecidos quando utilizada esta tecnologia, devido à utilização de filtros polarizadores (sensação semelhante a quando utilizamos óculos de sol).

Referências:


Vídeos do Debate: parte 1 e parte 2. Já aviso que os 40 minutos finais começam a ficar um pouco mais comercial e fogem do assunto 3D.

Teste comparativo 3D ativo e passivo.

Tecnologia FPR.

terça-feira, 26 de abril de 2011

Parada do blog - Aulas e Qualificação

Oi!

Pouco tempo de vida do blog e eu já vou fazer uma pequena parada nas atualizações. Em março começaram as aulas do Mestrado, que são bem puxadas, fora a aproximação da Quali e também submissão de artigos para os eventos científicos.

Quando possível, irei atualizando o blog com algumas postagens que eu tenho armazenadas aguardando revisão.

Abraços,
Matheus

sexta-feira, 11 de março de 2011

Criação de imagem anaglífica

Este será um post mais técnico, que os computeiros irão adorar. Irei disponibilizar o código que desenvolvi em OpenCV para criação de uma imagem anaglífica (vermelho-ciano) a partir de um par estéreo de imagens. O OpenCV é uma ótima biblioteca escrita em C que possui várias funções otimizadas para visão computacional e processamento de imagens. Ele tem sido utilizado em diversos projetos, inclusive para hacking do Kinect. Mais para frente, farei um ou mais posts somente para detalhar a biblioteca e seu uso.

Sobre o código

A utilização do OpenCV deixa o código bem simples e facilita o trabalho com imagens. Há uma estrutura já pronta para imagens chamada de IplImage , na qual podemos definir vários parâmetros, tais como dimensões (altura e comprimento), espaço de cores (grayscale, RGB, YCbCr, etc.), densidade de bits para cada canal de cor (isto é, número de bits para armazenar os valores de cada canal de cor), dentre outros descritos na documentação.

O código lê dois argumentos da linha de comando (argv[1] e argv[2]) como sendo o caminho para as duas imagens do par estéreo, sendo argv[1] a imagem correspondente ao lado direito e argv[2] a imagem correspondente ao lado esquerdo. Logo após, faço um tratamento de erros bem simples, verificando se os arquivos puderam ser abertos e se as imagens possuem mesma dimensão. Uma ressalva para o carregamento das imagens: o OpenCv as carrega no formato RGB, porém, com ordem alterada dos canais, ficando de fato sendo BGR. Isto é importante na hora de percorrermos a matriz que representa a imagem.

Partimos então para dois loops for, percorrendo coluna a coluna e depois linha a linha. Para cada linha, utilizam-se dois ponteiros, um para cada imagem. Observem que o valor atribuído aos ponteiros é feito através de um cálculo mais complexo do que um row++. É um pouco difícil de explicar isso sem detalhar a estrutura do IplImage, então peço para que tenham fé :-) pois é desse jeito que tem que ser feito para se ter certeza de ter passado corretamente para a próxima linha.

A estrutura do IplImage armazena em apenas uma matriz os valores associados a cada canal, diferente de estruturas clássicas que criam uma matriz para cada canal. Sendo assim, a cada três colunas teremos as informações correspondentes a um pixel, ou seja, teremos sempre os valores dessa maneira: B1G1R1, B2G2R2, B3G3R3, e assim por diante. Tendo isso em vista, zeramos os valores dos canais azul e verde na imagem correspondente ao lado direito (primeira e segunda colunas de cada pixel) e zeramos também os valores do canal vermelho na imagem correspondente ao lado esquerdo (terceira coluna de cada pixel).

Feito isso, criamos uma nova estrutura IplImage para armazenar a junção do par estéreo, copiando as propriedades de dimensão, densidade de bits e número de canal de uma das imagens. Logo após, utilizamos a função cvAdd, cujos parâmetros são a imagem direita, esquerda e a nova, e por fim, salvamos a nova imagem, em formato BMP. Mantendo uma boa prática de programação, liberamos os ponteiros utilizados antes de sair do programa.

Captura das imagens

O ideal seria ter duas câmeras acopladas e calibradas para fazer a captura de uma cena. Como isso é caro e demanda tempo, usamos o "jeitinho brasileiro". O problema com isso é a imperfeição de não conseguir capturar duas imagens ao mesmo tempo, ou seja, o lugar e os elementos dos quais queremos tirar a foto devem ser estáticos. Outro problema é com relação à posição da câmera: ela deve deslocar-se apenas horizontalmente, mantendo a mesma altura e ângulo de visão. Além disso, temos que levar em conta a qualidade da imagem criada pela câmera e se internamente já não é feita alguma compressão, como por exemplo, conversão para JPEG, o que pode interferir na transformação. Isso torna a conversão para anaglífico um pouco difícil e de baixa qualidade, porém, com teimosia você obtém uma imagem com bom efeito.

Sugiro utilizar uma câmera com tripé em um piso plano. Faça uma linha reta no chão e marque as duas posições onde a câmera deve ficar na hora de bater a foto. Durante o deslocamento da câmera, tenha o máximo de cuidado para não movimentá-la no eixo vertical, alterando o ângulo de visão.

Outra solução para os preguiçosos é utilizar o Google e fazer uma busca de imagens por “estereo pair”.

Utilização do programa

Para usuários Windows: Abra uma janela de comando e vá até a pasta onde você descompactou o pacote RAR. Digite então o nome do programa, o caminho para a imagem da direita e o caminho para a imagem da esquerda e aperte ENTER. Uma dica é deixar as duas imagens na mesma pasta em que se encontra o programa, desse jeito, basta apenas digitar o nome das imagens. Veja a Figura 1 para ter um exemplo de execução.

Figura 1 - Exemplo de execução do código (clique para aumentar)


Para usuários Linux, sorry, mas eu não uso. Se você usa, tenho certeza que já tem conhecimento suficiente para usar os comandos de extrair e executar. Caso contrário, deixe um comentário e a gente sofre junto.

Seguem abaixo duas imagens que eu fiz com a minha câmera aqui em casa. Notem que sou pobre, e a qualidade da minha câmera é péssima. Mesmo assim, obtive imagens com efeito estereoscópico, porém de baixíssima qualidade, admito.





Para dúvidas no código ou execução, deixe um comentário.

Referência

Utilizo bastante o livro Learning OpenCV, escrito pelos próprios criadores da biblioteca.

Download do código

Faça o dowload clicando aqui.

sexta-feira, 4 de março de 2011

Informações de Profundidade - Disparidade e Paralaxe

Duas informações importantíssimas para a percepção e reprodução de vídeos estereoscópicos, muito exploradas para passar a sensação de profundidade. O conceito de ambas é semelhante, sendo diferenciadas pelo meio em que ocorrem.

Vamos falar primeiro da disparidade. Como já mencionado no primeiro post desse blog, possuímos visão binocular, o que faz com que cada um de nossos olhos enxerguem a mesma imagem sob uma perspectiva diferente, devido ao fato de eles estarem cerca de 6,5cm distantes horizontalmente. Com isso, ao olharmos uma paisagem, por exemplo, os diversos elementos presentes na cena ocupam posições muitas vezes diferentes em cada retina. A distância entre as posições de um elemento em cada retina é chamada de disparidade. Podemos enganar os nossos olhos com um simples exemplo para observar a disparidade. Observe a imagem abaixo.

Imagem para exemplificar o conceito de disparidade
Posicione seu polegar entre você e a imagem, de forma que ela ainda continue sendo vista por você.  Agora foque sua atenção no polegar, isto é, concentre seus olhos nele. Você percebe que a imagem começa a ficar como que duplicada. E esse efeito aumenta se você aproximar ainda mais seu polegar para perto de você. A disparidade é a distância entre essas duplicatas. Obtemos o mesmo efeito fazendo o reverso: focalizando o olhar na imagem e vendo o polegar sendo duplicado.

A paralaxe segue o mesmo conceito de distância, mas agora ao invés de ser observado no olho, a paralaxe ocorre em dispositivos de reprodução, como telas ou monitores. Para vídeos estereoscópicos, uma das formas de captura é utilizando um dispositivo especial que possui duas câmeras acopladas horizontalmente e calibradas para fazer a captura de maneira simultânea, simulando a nossa visão. Com isso, é gerado um par de vídeos, denominado par estéreo. Ao sobrepormos estes vídeos, podemos notar o deslocamentos de alguns elementos. A distância de tal deslocamento é a paralaxe.

Pode-se dividir a paralaxe em quatro tipos, sendo que para cada um obtemos um efeito diferente na visualização estereoscópica.

  • Paralalaxe Zero: quando a distância entre os pontos correspondentes em uma imagem é zero. Isso significa que o foco das câmeras estava nesse ponto (do mesmo jeito quando focamos no polegar).
  • Paralaxe Positiva: A distância entre os pontos está entre 0 e uma constante t, dando a sensação de que os objetos estão distantes.
  • Paralaxe Negativa: o inverso da positiva, a distância entre os pontos gera um valor negativo. É com ela que temos a sensação de objetos “saltando” da tela.
  • Paralaxe Divergente: é quando a distância entre os pontos ultrapassa a constante t, causando um efeito que não é similar a nenhum outro na visão humana, e com isso, causando desconforto na visualização.

That's all, folks! Fim de semana com o feriadão de Carnaval chegando. Vou aproveitar bastante.... jogando Playstation 3 :-) Até mais!

Referências:


StereoGraphics Developers' Handbook – Stereographics Corporation. Escrito em inglês, pode ser utilizado como introdução para estereoscopia, explica as variadas informações de profundidade, bem como formatos de reprodução.

Imagem do cisne negro