Analisador de codificação

Conforme descrito anteriormente, nosso projeto de formatura consiste em uma aplicação que permite ao usuário ter bastante controle sobre as entradas e saídas do Dirac. O programa se divide em duas partes, referentes a entrada de parametros para codificação e análise de resultados. Entre essas duas ações, temos nosso programa atuando juntamente com uma versão do Dirac alterada para gerar os dados necessários para análise.

Funcionamento básico do sistema

A utilização do Analisador é bastante simples. Ao abrir o programa, nos deparamos com a tela de resultados, praticamente toda desabilitada. A única parte com a qual se pode interagir nesse momento é um menu chamado Ações.

Figura 8:  Menu de ações do Analisador
Figura 8: Menu de ações do Analisador
Para utilizarmos o Analisador pela primeira vez, vamos acessar o comando "Codificar usando o Dirac...". Ele nos dará acesso a tela de definição de projeto e escolha de variáveis de entrada do Dirac.

Figura 9:  Janela para codificação de video
Figura 9: Janela para codificação de video
Para podermos codificar o vídeo, é necessário preencher o grupo de controles Configuração Base, que habilita o botão Iniciar, responsável pelo processo de codificação. Esse grupo de controles fornecem as informações básicas para o Analisador, como o nome do projeto que será criado, o video de entrada que será codificado e a codificação do vídeo de entrada.

Além dessas informações básicas, o usuário poderá modificar os diversos valores de entradas que o Dirac oferece.

Por fim, é possivel salvar os valores utilizados como configuração dentro de um Profile, que poderá ser acessado futuramente para codificar outros vídeos.

Após iniciado o processo, o Analisador irá codificar o vídeo a partir do Dirac e irá gerar uma série de conteúdos que serão armazenados num diretório com o nome do Projeto, em uma pasta criada junto com o vídeo de entrada. Se já houver uma pasta com o mesmo nome do projeto, a nova pasta será criada com um "_X" anexado ao nome, onde X é o numero de pastas que já possuem o mesmo nome do projeto que você está usando.

Ao final da codificação, será aberta a janela de análise de resultados, a partir de um arquivo xml que é criado dentro da pasta do projeto. Esse arquivo será criado como "nome do vídeo" + ".xml".

Figura 10: Análise de resultados
Figura 10: Análise de resultados
Uma vez codificado, os dados do vídeo serão armazenados na pasta do projeto. Dessa forma, para você abrir um projeto já existente, basta ir no me Ações e escolher o comando "Abrir arquivo de análise...". Na janela apresentada, vá até a pasta do projeto que você deseja abrir e selecione o arquivo com o nome do vídeo e a extensão ".xml". Dessa forma, o analisador de resultados irá apresentar todas as informações do projeto.

Até aqui foi possível ter uma visão rápida do comportamento geral do Analisador de codificação desenvolvido pelo grupo. A seguir, iremos ver com mais detalhes cada parte do processo.

Escolha dos parâmetros de codificação

O Dirac, conforme apresentado, é uma ferramenta de codificação bastante flexível, apresentando diversos parâmetros de entrada para codificação. Abaixo segue uma descrição de seus parâmetros, assim como uma analise qualitativa.

Nesse tópico será descrito os parâmetros de codificação do Dirac, e para alguns deles será feita uma analise qualitativa. O vídeo de entrada é um vídeo QCIF de 300 frames, podendo ser encontrado em http://trace.eas.asu.edu/yuv/akiyo/akiyo_qcif. 7z.

Entrada

O vídeo de entrada é um vídeo de 8 bits em formato YUV. Baseia-se num modo de transmissão vídeo de componentes separadas que utilizam três cabos diferentes para fazer transitar as informações de luminância (luminosidade) e dois para as componente de crominância (cor). Trata-se do formato utilizado nos padrões PAL (Phase Alternation Line) e SEGAM (Séquentiel Couleur avec Mémoire).

O parâmetro Y representa a luminância (ou seja a informação a preto e branco), enquanto U e V permitem representar a corminância, ou seja, a informação sobre a cor. Este modelo foi criado para permitir transmitir informações coloridas para as televisões a cores, garantindo que as televisões a preto e branco existentes continuavam afixar uma imagem em tons de cinzentos.

Eis as relações que vinculam Y a R, G e B, U a R e à luminância: , e V a B e à luminância: :
  • Y = 0.299R 0.587 G 0.114 B
  • U = -0.147R - 0.289 G + 0.436B = 0.492(B - Y)
  • V = 0.615R -0.515G -0.100B = 0.877(R-Y)
(http://pt.kioskea.net/)

Codificação

Esse parâmetro define o tipo de vídeo de entrada. A melhor maneira de definir parâmetros de fonte é usar uma predefinição para diferentes formatos de vídeo.
As opções predefinidas disponíveis são:
  • QSIF525: largura = 176, altura = 120; formato 4:2:0; 14,98 frames / seg
  • QCIF: largura = 176, altura = 144; formato 4:2:0; 12,5 frames / seg
  • SIF525: largura = 352, altura = 240; formato 4:2:0; 14,98 frames / seg
  • CIF: largura = 352, altura = 288; formato 4:2:0; 12,5 frames / seg
  • 4SIF525: largura = 704, altura = 480; formato 4:2:0; 14,98 frames / seg
  • 4CIF: largura = 704, altura = 576; formato 4:2:0; 12,5 frames / seg
  • SD480I60: largura = 720, altura = 480; formato 4:2:2; 29,97 frames / seg
  • SD576I50: largura = 720, altura = 576; formato 4:2:2; 25 frames / seg
  • HD720P60: largura = 1280, altura = 720; formato 4:2:2; 60 frames / seg
  • HD720P50: largura = 1280, altura = 720; formato 4:2:2; 50 frames / seg
  • HD1080I60: largura = 1920, altura = 1080; formato 4:2:2; 29,97 frames / seg
  • HD1080I50: largura = 1920, altura = 1080; formato 4:2:2; 25 frames / seg
  • HD1080P60: largura = 1920, altura = 1080; formato 4:2:2; 59,94 frames / seg
  • HD1080P50: largura = 1920, altura = 1080; formato 4:2:2; 50 frames / seg
  • DC2K24: largura = 2048, altura = 1080; formato 4:2:2; 24 frames / seg
  • DC4K24: largura = 4096, altura = 2160; formato 4:2:2; 24 frames / seg
  • UHDTV4K60: largura = 3840, altura = 2160; formato 4:2:2; 59,94 frames / seg
  • UHDTV4K50: largura = 3840, altura = 2160; formato 4:2:2; 50 frames / seg
  • UHDTV8K60: largura = 7680, altura = 4320; formato 4:2:2; 59,94 frames / seg
  • UHDTV8K50: largura = 7680, altura = 4320; formato 4:2:2; 50 frames / seg
É importante destacar que nem sempre as opções de codificação pré-definidas terão os parâmetros certos do vídeo referido.

Largura

É a largura do quadro (frame) do vídeo.

Altura

É a altura do quadro do vídeo.

Chorma

É o formato de amostragem do vídeo. Os macroblocos podem estar nos seguintes formatos:
  • 4:2:0 (4 blocos para Y , 2 blocos para U e zero blocos para V).
  • 4:2:2 (4 blocos para Y , 2 blocos para U e 2 blocos para V).
  • 4:4:4 (4 blocos para Y , 4 blocos para U e 4 blocos para V).

Frame Rate

É a taxa de quadros por segundo do vídeo de origem.

Tipo de material

Esse parâmetro determina se o tipo de varredura do vídeo de origem é entrelaçada ou progressiva.

Codificação VLC

O padrão do Dirac é a utilização da codificação aritmética. Com essa opção ativada a codificação será por VLC (Variable Length Coding), assim como no padrão MPEG.
Para ser possível a utilização da codificação VLC, o número de quadros L1 foi setado para zero, para haver apenas frames do tipo INTRA no vídeo de teste. Portanto foi feita uma comparação com o vídeo com codificação padrão do Dirac e com vídeo apenas com frames tipo INTRA com e sem codificação VLC.

Contrariando o gráfico de erro, é curioso notar que visualmente a codificação padrão do Dirac é muito melhor do que a codificação utilizando apenas frames INTRA com e sem VLC. Alias, a codificação VLC é, visualmente falando, o que nos retorna o pior aspecto. Com apenas frames INTRA o vídeo aparenta ter muito ruído em volta das partes com movimento, alem de ficar com tamanho relativo muito maior que o vídeo padrão. Isso acontece, pois em termos de cores RGB os vídeos INTRA são muito mais fiéis que os INTER, mas não reflete uma melhor imagem.

Figura 11: Codificação VLC
Figura 11: Codificação VLC
Figura 12: Codificação VLC x Tamanho Relativo

Figura 12: Codificação VLC x Tamanho Relativo

Não Dividir Sub-Bandas

Essa opção permite ao Dirac não dividir sub-bandas em blocos de coeficientes antes da codificação por entropia. O vídeo final fica muito parecido com o codificado sem essa opção, variando apenas em algumas partes. Em termos absolutos, dividir sub-bandas deixa o vídeo com um aspecto um pouco melhor. Não há diferença significativa em relação ao tamanho relativo dos vídeos.

Figura 13: Divisão de Sub-Bandas

Figura 13: Divisão de Sub-Bandas

Múltipla Quantização

Essa opção permite, caso sub-bandas são divididas em vários blocos de coeficiente antes da codificação de entropia, atribuir quantizações diferentes para cada bloco dentro da sub-banda. Assim como a opção comentada acima, o vídeo final fica muito parecido com o codificado sem essa opção, variando apenas em algumas partes. Em termos absolutos, utilizar Múltipla Quantização deixa o vídeo com um aspecto um pouco melhor. Não há diferença significativa em relação ao tamanho relativo dos vídeos.

Figura 14: Múltipla Quantização

Figura 14: Múltipla Quantização

Codificação sem Perdas

O Dirac oferece a opção de codificar o vídeo sem nenhuma perda. Neste caso há diferença zero entre o vídeo codificado e o original. O que muda é apenas o tamnho relativo do vídeo, que neste caso fica cerca de 20% do vídeo original. No gráfico abaixo é mostrado o tamanho relativo do vídeo em relação ao fator de qualidade (que será explicado a seguir) e ao vídeo sem perdas.

Figura 15: Tamanho x Qualidade
Figura 15: Tamanho x Qualidade

Fator de qualidade

Esse valor é maior que zero, quanto maior o número, melhor a qualidade. De alta qualidade é típica de 8-10, mas vai variar de seqüência para seqüência, às vezes maior e, às vezes menor. O padrão é o fator de 5.5. É uma opção muito importante na codificação, pois é a que mais afeta a qualidade do vídeo.

Visualmente quanto maior o fator de qualidade, melhor a qualidade do vídeo. Vídeos com qualdiade aceitável estão com fator acima de 5. Os vídeos com fator 8, 9 e 10 são praticamente iguais ao original, visualmente falando.

O tamanho relativo dos vídeos em relação a qualidade foi mostrado no gráfico anterior.

Figura 16: Fator de Qualidade
Figura 16: Fator de Qualidade

Vetores de movimento

Indica a precisão os vetores de movimento. Os valores pode ser de 1 pixel, meio pixel, um quarto de pixel e um oitavo de pixel. O padrão é um quarto de pixel.
Com precisão de pixel, há grande custo dos vetores de movimento nas bordas do vídeo em relação às outras precisões. Há também menos macroblocos com sub-divisoes de valor 8 e 16. Os vetores de movimento têm módulo menor que das outras precisões.

Visualmente, vemos que com precisão de um oitavo de pixel os movimentos mais bruscos são melhor processados.
O tamanho relativo do arquivo não muda significativamente.

Figura 17: Precisão dos Vetores de Movimento
Figura 17: Precisão dos Vetores de Movimento

Numero de quadros L1

Este é um parâmetro que juntamente com a Separação entre Quadros L1 (quadros que são previsíveis, mas também utilizados como referenciais, como os quadros P em MPEG-2) controla o GOP (Group of Pictures). Tipicamente, ele define quando haverá um quadro INTRA, conforme a equação a sequir:
eq4.jpg (4)
Sendo o número de quadros L1 e a separação entre quadros L1. Quando , o vídeo codificado será formado apenas por quadros INTRA.

Visualmente, os vídeos com números de quadros L1 iguais a 10 e 19 apresentam aspecto melhor aos demais. O vídeo formado apenas por quadros INTRA, como já foi visto anteriormente, apesar de apresentar menor índice de erro parece estar chuviscado. O vídeo com grande valor de quadros L1 não apresenta nenhum quadro INTRA e a qualidade vai piorando visualmente ao longo do tempo, sendo assim condizente com o gráfico.

Figura 18: Numero de quadros L1
Figura 18: Numero de quadros L1
Em relação ao tamanho relativo dos vídeos, há um menor tamanho conformo vamos aumentando o parâmetro descrito.

Figura 19: Número de Quadros L1 x Tamanho Relativo

Figura 19: Número de Quadros L1 x Tamanho Relativo

Separação entre os quadros L1

Como foi dito anteriormente, essa opção assim como a anterior controla o GOP e a freqüência dos quadros INTRA. E mais importante que isso, esse parâmetro controla as referencias anterior e posterior dos frames do vídeo. Setando o valor para 1 (um), o vídeo terá referencia apenas do frame anterior. Setando para n, a distancia do frame anterior e do posterior será inicialmente igual a n. O valor padrão é 3, para vídeos pequenos.
Visualmente, analisando o gráfico abaixo, uma separação de modulo 2 e 3 apresenta uma melhor qualidade que as separações 1 e 5. Isso fica obvio se pensarmos que referencias anteriores e posteriores mais próximas em relação ao frame codificado resultam em uma predição de movimento melhor.

Figura 20: Separação entre os quadros L1
Figura 20: Separação entre os quadros L1
Em relação ao tamanho relativo, percebemos que é inversamente proporcional ao modulo do parâmetro analisado.

Figura 21: Separação entre os quadros L1 x Tamanho Relativo
Figura 21: Separação entre os quadros L1 x Tamanho Relativo

Largura e Altura dos blocos

Determina, respectivamente, a largura e altura dos blocos utilizados para compensação de movimento. Esse parâmetro serve apenas para controlar que separação horizontal e vertical dos blocos, parâmetro comentado a seguir. A separação horizontal e vertical entre os blocos deve ser, respectivamente, menor que a largura e altura dos blocos. O valor padrão de ambos os parâmetros é 12, para vídeos pequenos.

Separação horizontal e vertical entre os blocos

Sempre menor que a largura e altura dos blocos utilizados para compensação de movimento, respectivamente. Quanto menor o parâmetro, maior o numero de macroblocos e vetores de movimentos criados.

Visualmente, percebemos que há uma melhora nas partes de mais movimento do vídeo quando usamos um numero menor. Mais detalhes são mostrados.

Figura 22: Separação Horizontal e Vertical
Figura 22: Separação Horizontal e Vertical
Em relação ao tamanho relativo do arquivo, quanto menor o parâmetro maior fica o arquivo.

Figura 23: Separação Horizontal e Vertical x Tamanho Relativo
Figura 23: Separação Horizontal e Vertical x Tamanho Relativo

Distância normalizada

Parâmetro de distância normalizada de visualização, em ciclos por grau. O valor padrão para vídeos pequenos é de 20. Como podemos ver no gráfico abaixo, quanto maior o parâmetro, mais a linha tenta se manter constante.

Visualmente, o valor padrão mostra um melhor resultado. O tamanho relativo do arquivo não muda significativamente.

Figura 24: Distância Normalizada
Figura 24: Distância Normalizada

Filtro de quadro INTER

Filtro de transformação para usar durante a codificação dos quadros INTER. Os valores possíveis são DD97, LEGALL53, DD137, HAAR0, HAAR1, FIDELITY e DAUB97.
Visualmente, os vídeos codificados com DD97, LEGALL53, DD137 são muito parecidos, sendo o DD97 um pouco pior, condizendo com o gráfico abaixo. O filtro HAAR0 tenta manter uma taxa de erro constante nos quadros INTER, e tem um resultado bom na visualização, onde não há muita perda de cor durante o vídeo. O filtro HAAR1 mantém uma qualidade constante durante todo o processo, incluindo os quadros INTRA. O resultado é bom, melhor que o padrão, mas difícil dizer se é melhor que o HAAR0. Já os filtros FIDELITY e DAUB9_7 apresentam resultados interessantes. Percebemos segundo a figura um gráfico do tipo “dente de serra”, e visualmente o vídeo apresenta vários quadradinhos bem visíveis. No entanto, a qualidade é boa, mas não tão boa quanto os tipo HAAR.

Figura 25: Filtros de quadro INTER
Figura 25: Filtros de quadro INTER
O tamanho relativo é mostrado no gráfico abaixo. Vemos que o único filtro que destoa dos outros, em relação ao tamanho, é o FIDELITY.

Figura 26: Filtro de quadro INTER x Tamanho Relativo
Figura 26: Filtro de quadro INTER x Tamanho Relativo

Filtro de quadro INTRA

Filtro de transformação para usar durante a codificação dos quadros INTRA. Assim como nos quadros INTER, os valores possíveis são DD97, LEGALL53, DD137, HAAR0, HAAR1, FIDELITY e DAUB97.

Observando o gráfico abaixo, vemos que claramente há uma diferença de erro nos quadros INTRA dos vídeos, que aparecem de 60 em 60 frames. Visualmente, assim como nos filtros de quadro INTER, os vídeos codificados com DD97, LEGALL53, DD137 são muito parecidos. Nos filtros HAAR a imagem fica menos embaçada, porém um pouco mais quadriculada. Nos filtros FIDELITY e DAUB97, assim como no parâmetro anterior, há alguns quadradinhos visíveis na imagem. A qualidade dos vídeos parece ser a mesma, visualmente falando, apresentando apenas algumas diferenças como foi falado anteriormente. Talvez em vídeos que contenham apenas quadros INTRA, haja mais diferença usando este parâmetro.

Figura 27: Filtros de quadro INTER

Figura 27: Filtros de quadro INTER
O tamanho relativo é mostrado no gráfico abaixo. Vemos que o único filtro que destoa dos outros, em relação ao tamanho, é o FIDELITY, assim como nos filtro de quadro INTER.

Figura 28: Filtros de quadro INTER x Tamanho Relativo
Figura 28: Filtros de quadro INTER x Tamanho Relativo

Profundidade da Transformada

Profundidade da transformada, ou seja, número de vezes que o componente é dividido ao aplicar a transformada wavelet. O valor padrão para vídeos pequenos é 4.
Visualmente, com base nos valores testados, utilizando profundidade 1 há uma mudança brusca de imagem quando acontece a passagem pelo frames INTRA, o que condiz com o gráfico de erro gerado. O vídeo com profundidade 5 é um pouco melhor que o de qualidade 4, pois as variação ao se passar pelo frames INTRA não são tão grandes.

Figura 29: Profundidade da Transformada
Figura 29: Profundidade da Transformada
Em relação ao tamanho relativo, vemos conforme o gráfico abaixo que o mesmo aumenta proporcionalmente a profundidade da transformada.

Figura 30: Profundidade da Transformada x Tamanho Relativo
Figura 30: Profundidade da Transformada x Tamanho Relativo

Pré-filtros

Pré-filtro para aplicar a entrada de vídeo antes da codificação. É necessário colocar também uma profundidade do filtro, de 0 a 10. Os possíveis filtros são NOPF, CWM, RECTLP e DIAGLP. Em todos os testes foi usado a profundidade 5. O filtro padrão é o NOPF na profundidade 0.
Visualmente, utilizando o filtro RECTLP, o vídeo fica muito ruim. Os outros filtros ficam praticamente iguais entre si, com qualidade similar ao vídeo com codificação padrão.

Figura 31: Pré-Filtros de Entrada
Figura 31: Pré-Filtros de Entrada
O tamanho relativo apresenta variação a seguir:

Figura 32: Pré-Filtros de Entrada x Tamanho Relativo
Figura 32: Pré-Filtros de Entrada x Tamanho Relativo

Full Search

Permite habilitar o full search para a busca durante o pixel-accurate search, na estimativa de movimento. O processo ainda está em fase de testes no Dirac.

Combinar Componentes

Combinação de todos os três componentes para fazer estimativa de movimento. Praticamente não há diferença nos vídeos, e o tamanho é praticamente o mesmo. Abaixo o gráfico mostra que o erro é bem parecido. Talvez em conjunto com outros parâmetros haka uma diferença mais significativa deste parâmetro.

Figura 33: Combinar Componentes
Figura 33: Combinar Componentes

Codificação por Campo

Codifica o vídeo de entrada por campos em vez de quadros. Codificação padrão é por quadros.
Visualmente, a codificação por quadros apresenta aspecto muito melhor, além de ser bem mais rápida e gerar um arquivo menor que a Codificação por Campo.

Figura 33: Codificação por Campo
Figura 33: Codificação por Campo
Abaixo vemos que a diferença do tamanho relativo entre as duas codificações é muito significativa.

Figura 34: Codificação por Campo  x Tamanho Relativo
Figura 34: Codificação por Campo x Tamanho Relativo

Saída Detalhada

O codec apresentará, durante a codificação, um grande conjunto de informações a medida que o arquivo estiver sendo processado, conforme a figura a seguir:

Figura 35: Saida Detalhada
Figura 35: Saida Detalhada

Não gerar Diagnóstico

Esta opção faz com que apenas o arquivo codificado (*.drc) seja gerado e nada mais.

Quadro inicial e Final

Permite que apenas um range de frames seja codificado e analisado. Boa opção para vídeos muito grandes.

Taxa de Bits

Gera o vídeo codificado com taxa de bits em Kb/s PR-e-determinada. Com essa opção ativada, a opção de qualidade de vídeo será ignorada.

Análise de resultados

O processo de geração de resultados é organizado am 4 fases. Na primeira, executada pelo Dirac, com algumas modificações feitas pelo grupo, são geradas informações de apoio. Essas informações incluem uma versão do filme codificado em formato yuv, arquivos com as decisões tomadas pelo Dirac em xml e imt, além do vídeo codificado em formato drc.

Na segunda etapa, são gerados os arquivos com algumas das decisões tomadas pelo Dirac apresentadas sobre o filme original. Esses vídeos poderão ser vistos na aba Vídeos de Apoio. Na terceira fase, todos os videos gerados são convertidos em formato rgb e, em seguida, são criadas sequências de imagens bmp organizadas por pastas dentro do projeto. Ao final, teremos oito pastas, uma para o video original, uma para o video codificado e uma para cada vídeo de apoio. Por fim, é feita uma comparação entre as imagens do vídeo original e o codificado, para gerar o gráfico de comparação apresentado na aba Informações sobre o Vídeo. O resultado da análise é armazenada num arquivo dat, mas sua informação está escrita em formato xml.

A fim de organizar as informações, a janela de análise de resultados foi dividida em seis abas, com conteúdos logicamente relacionados.

Informações sobre o Vídeo

Nessa aba temos as informações sobre o vídeo como um todo.

Figura 36: Informações sobre o vídeo
Figura 36: Informações sobre o vídeo

Primeiramente temos as informações gerais, que contemplam configurações fornecidas ao Dirac no momento de sua codifição.

O formato da amostragem de croma é baseado em valores suportados pelo Dirac. Esse parâmetro é do tipo diracchromat e pode assumir os seguintes valores:
  • format444: Planar YUV 4:4:4 format;
  • format422: Planar YUV 4:2:2 format;
  • format420: Planar YUV 4:2:0 format;
  • formatNK: formato desconhecido.
Temos as dimensões do vídeo, exibidas pelo par largura x altura em pixels, e o tipo de codificação, que define se a seqüência a ser codificada é entrelaçada (assume o valor 1) ou progressiva (assume o valor 0). As sequencias entrelaçadas, geralmente indicadas por um i ao final da resolução, são codificadas em duas etapas, por exemplo mostrando as linhas pares e depois as ímpares. Cada parte do frame é chamada de field. Assim, no caso de termos uma seqüência entrelaçada, podemos ter o top field antes do bottom field (assume o valor 1) ou o bottom field antes do top field (assume o valor 0). Já nas seqüências progressivas, indicadas por um p ao final da resolução, todas as linhas são apresentadas de uma única vez.

Seguindo os campos apresentados temos a velocidade de exibição do filme, em imagens por segundo e o Pixel aspect ratio, que define a relação entre largura e altura de um pixel a ser apresentado. Para uma visualização clara do pixel aspect ratio, podemos observar a figura abaixo, comparando dois valores diferentes:

Figura 37:aspect ratio de 1:1Figura 37: aspect ratio de2:1
Figura 37: A esquerda temos o pixel aspect ratio de 1:1 e a direita de 2:1

A seguir, temos o fator de qualidade / quantização QF usado para codificação, que, conforme discutido, tem uma forte ligação com a qualidade final do vídeo. Por fim, temos as informações usadas para a formação dos grupos de imagens, o número de L1 por grupo de imagens e o número de imagens L2 separando imagens do tipo L1 / I.

Abaixo, temos um gráfico que apresenta uma comparação imagem a imagem entre o vídeo codificado e o vídeo original. Essa comparação é gerada usando-se as imagens em bmp que são criadas a partir dos vídeos em formato yuv. A função utilizada nessa análise pode ser descrita como:
eq5.jpg (5)
Dessa forma, imaginando-se duas imagens a serem comparadas como vetores de pixels que podem ser descritos pelos seus valores RGB e assumindo que as duas imagens tem as mesmas características de largura e altura e, portanto, número de pixels. Assim, somamos as diferenças absolutas entre cada uma das componentes RGB de cada pixel e dividimos por 3 vezes o número de pixels. Ao final, temos uma diferença média entre os componentes RGB por imagem.

Por fim, temos a direita uma comparação entre os tamanhos finais do arquivo original e do arquivo codificado, além de uma tabela contendo os dados usados para gerar o gráfico explicado acima.

Informações sobre o frame

Nessa aba temos um comparativo geral entre o frame original e o codificado, assim como alguns detalhes resultantes da codificação.

Figura 38: Informações sobre o frame
Figura 38: Informações sobre o frame
A partir dessa aba, podemos usar a barra deslizante que se encontra na parte inferior da janela. Com ela, poderemos nos locomover por entre os frames a disposição do Analisador. Podemos também usar a caixa de texto a direita para digitar um frame específico que o programa irá posicionar a barra deslizante nele e exibir suas informações. Por fim, temos o botão Play, que irá fazer a barra deslizante avançar segundo a velocidade indicada na caixa de texto Frames por segundo. Essa funcionalidade depende da capacidade de processamento e memória disponível na máquina, pois a cada novo frame o programa precisará reapresentar todos os dados para aquela tela.

Começando pelos dados gerais sobre o frame, temos o número do frame e as referências utilizadas para codificar a imagem. A seguir, temos o tipo de frame, podendo variar entre intra frame, que acontece uma vez por gupo de imagens, na presença do frame I planejado, ou pode ser inter frame, que são todos os outros.

A seguir temos o número de macroblocos codificados, apresentados como horizontais x verticais. Depois os vetores de movimento, que aparecem na proporção de um por bloco. Ou seja, esse número também representa o número de blocos, no formato horizontais x verticais. Conforme esperado, os valores referentes a blocos são 4 vezes maiores que os valores referentes a macroblocos. Por fim temos as informações referentes a sobreposição de blocos, indicada em pixels horizontais x pixels verticais.

Além dessas informações a respeito do frame atual, temos estampadas nessa aba diversas imagens do video original e do video codificado, para que o usuário possa fazer uma análise visual dos resultados da codificação.

Para facilitar ainda mais essa tarefa, as duas imagens do grupo Comparação do frame contam com uma ferramenta que, ao clicar em qualquer uma das imagens, ela será exibida em uma nova janela, podendo ser redimensionada para visualizar melhor os detalhes.

Figura 39: Comparação das duas imagens usando a ferramenta de exibição de detalhes
Figura 39: Comparação das duas imagens usando a ferramenta de exibição de detalhes

Essa janela vai sempre apresentar a imagem em sincronia com a barra deslizante, mesmo que você esteja em outra aba.

Macrobloco

Nessa aba, o usuário tem acesso a duas visualizações das decisões tomadas pelo Dirac para a codificação dos macroblocos.

A esquerda, temos um esquema mostrando os macroblocos criados pelo Dirac. Nele podemos ver dois tipos diferentes de decisões. A primeira é a escolha dos modos de divisão, que podem manter o macrobloco ou dividir ele em matrizes de 2x2 ou 4x4. A segunda são os modos de predição, que são definidos por unidade de divisão dentro do macrobloco. Eles podem se basear na referência 1, na referência 2, nas duas ou em nenhuma, o que dá o modo intra.

Esse esquema possui ainda o botão Ampliar grade, que abre a grade em uma nova janela, o que permite o seu redimensionamento.

Figura 41: Detalhes da grade em nova janela
Figura 41: Detalhes da grade em nova janela
Isso é bastante útil para a análise de esquemas com muitos macroblocos, que dentro do espaço da aba aparece como uma grade distorcida, mas na janela criada ele se ajusta e passa a ser exibido corretamente.

A direita temos um gráfico apresentando os custos de cada macrobloco, que é formado a partir da soma dos custos das suas unidades de divisão com pesos aplicados.

É importante notar que os macroblocos se iniciam no canto superior esquerdo, que representa a posição (0,0), mas não terminam nas outras bordas. Dessa forma, parte dos macroblocos podem ficar para fora da imagem. Isso poderá ser visualizado com mais clareza na aba Vídeos de apoio, em que os macroblocos são impressos sobre a figura original.

Vetores de movimento (histogramas)

Essa aba nos oferece uma visão do comprimento dos vetores de movimento a partir de dois histogramas, um para cada referência.

Figura 42: Vetores de movimento (histogramas)
Figura 42: Vetores de movimento (histogramas)

Os histogramas são montados basicamente a partir dos módulos dos vetores de movimento e as freqüências em que eles aparecem em determinado frame. Abaixo dos histogramas, temos os dados utilizados para contraí-lo.

Vetores de movimento (SAD)

Aqui, temos uma visão gráfica do custo do vetor de movimento aplicado a cada bloco da imagem.

Figura 43: Vetores de movimento (SAD)
Figura 43: Vetores de movimento (SAD)

São apresentados os custos referentes a cada vetor de movimento de forma gráfica, acompanhado de uma planilha com os dados usados para a geração dos gráficos.

Vídeos de apoio

Os vídeos de apoio são gerados a partir de uma ferramenta que acompanha o projeto do Dirac.

Figura 44: Vídeos de apoio
Figura 44: Vídeos de apoio

Seu objetivo é imprimir sobre os vídeos algumas informações relativas às decisões tomadas pelo Dirac durante a codificação. Nessa aba, temos os vídeos referentes ao modo de predição, modo de divisão, vetores de movimento, tanto sua direção e sentido quanto seu custo, para as referências 1 e 2.

Last edited Mar 31, 2010 at 4:29 PM by raphamotta, version 6

Comments

No comments yet.