segunda-feira, 6 de agosto de 2012

ANIMAÇÃO

A palavra Animação provém do latino “Anima”, que significa “Alma” ou “Sopro Vital“. Animação significa, antes de mais, “dar vida” a objectos estáticos.
Muitos foram os realizadores que mostraram o seu trabalho à câmara, para que este ganhasse movimento, o tal “sopro vital”.  Filmes como A Velha Senhora e os Pombos, de Chomet, A Aldeia de Idiotas, de Fedorenko, Tela de Alfinetes, de Norman McLaren, Wallace & Gromit, de Nick Park, Fado Lusitano, de Abi Feijó, O Casamento, de Garri Bardine, Estória do Gato e da Lua, de Pedro Serrazina, Os Contos de Xeherazade, de Florence Miailhe, O Velho e o Mar, de Alexander Petrov, O Cabeleireiro, de Steffen Schaffler ou A Suspeita, de José Miguel Ribeiro, são algumas das muitas maravilhas que foram realizadas até hoje, neste campo riquíssimo que é o da Animação.

Animação é pois um processo segundo o qual cada fotograma de um filme é produzido particularmente, podendo ser concebido quer por computação gráfica,  quer fotografando uma imagem desenhada, quer frequentemente fazendo exíguas transformações a um modelo (ver claymation e stop motion), fotografando o desfecho. Uma vez ligados os fotogramas o filme resultante é visto a uma velocidade de 16 ou mais imagens por segundo, havendo uma ilusão de movimento contínuo (por causa da persistência de visão).
A estruturação de um filme resulta de um trabalho muito activo e por vezes entediante. A produção da animação consome muito tempo e é quase sempre muito complexa. O progresso da animação digital melhorou muito a velocidade do processo, suprimindo tarefas mecânicas e repetitivas.

TÉCNICAS DE ANIMAÇÃO

A animação não é apenas os desenhos animados que vemos passar na TV e que são a perdição dos mais pequenos (e também dos graúdos). Existem dezenas de técnicas ao dispor dos realizadores, como podemos ver a seguir:
ANIMAÇÃO BIDIMENSIONAL: Desenhos animados, animação em acetato, rotoscoping, animação com objectos recortados, objectos recortados em silhueta, animação com grânulos muito finos, quadro preto ou branco, pintura animada, objectos Animados, filmographs, visual squeeze, scratch off animation, animação tipo computador, animação em papel Bond A4, etc.
ANIMAÇÃO TRIDIMENSIONAL: Objectos animados, animação com bonecos, animação com plasticina, pixilation, animação com sombras projectadas por alfinetes.
ANIMAÇÃO SEM CÂMARA: Pinturas no filme, riscar e pintar o filme.
ANIMAÇÃO SEM IMAGEM POR IMAGEM: filmes cibernéticos, “chroma key”, Animação com o equipamento de vídeo, bonecos articulados suspensos por fios, luz negra – luz ultravioleta – luz fluorescente, quadro magnético, fotografias animadas, figuras recortadas com pega ou suporte.
ANIMAÇÃO SEM FILME:  existem variadas técnicas de animação sem o uso da câmara de cinema.

Animação 2D

O impacto das técnicas 2D podem ser espectaculares. Como exemplos de utilização destas técnicas temos o filme ‘ET’, a cena onde o extraterrestre sai disparado com uma bicicleta fazendo-se um close-up deste com a lua. Outro exemplo será a remoção subtil dos arames que suspendiam o super homem. Estas técnicas contribuíram bastante para a animação computacional, através do fornecimento de ferramentas tais como blending (mistura), morphing, embutimento de imagens gráficas em vídeo ou a criação de padrões abstractos de equações matemáticas.
O morphing refere-se à acção de metamorfose de um objecto para outro. No ‘Black or White’ de Michael Jackson, os animadores criaram morphs de pessoas com aparências faciais bem diferentes umas das outras, gerando-se um efeito final bastante agradável. Infelizmente, o morphing é muito trabalhoso porque os elementos chave de cada imagem têm de ser especificados manualmente.
Se embutirmos objectos gráficos numa imagem, podemos introduzir novos elementos numa cena que já existe. Como exemplos temos os fantasmas do filme Gasparzinho, e muitos dos dinossauros do Parque Jurássico foram gerados por computador e depois embebidos no filme. Os objectos poderão ser também removidos de uma cena. Quando o autocarro no filme Speed sobrevoa uma fenda numa ponte que estava parcialmente construída. Essa fenda foi feita digitalmente retirando-se um pedaço de estrada de uma ponte já construída. Tanto o embutir como o de remover são mais difíceis de serem realizadas se a câmera se encontrar em movimento.
As equações matemáticas são muitas vezes usadas para criar sequências de movimento abstractas. Os Fractais são exemplos bastante conhecidos de padrões gerados a partir de funções matemáticas. O Morphing e a criação de imagens abstractas poderão ser generalizados para utilização em 3D. Todas estas técnicas de 2D poderão ser usadas sozinhas para a criação de uma animação, ou então utilizadas como um processo pós processamento para realçar imagens geradas usando outras técnicas de 2D ou 3D.

Animação 3D

Quando são utilizados técnicas 3D, o animador constrói um mundo virtual no qual as personagens e os objectos se movem e interagem. Este usa este mundo virtual para gerar imagens de uma animação. A geração de uma animação necessita de três passos decisivos: modelação, animação e renderização.
Passo  a explicar de uma forma sucinta como quase todas as animações 3D são criadas.

Criação de uma Animação

Storyboards: Imensos desenhos de storyboard são criados como planta para a acção e o diálogo entre as personagens. Estas são revistas várias vezes durante o processo de desenvolvimento criativo.
Modelagem: Com auxílio de programas gráficos 3D, são criados as personagens e os modelos 3D. Estes modelos computacionais descrevem a forma geral do objecto, bem como os controles que os animadores irão utilizar para mover as personagens.
Animação: Qualquer uma das três técnicas possíveis para a criação de uma animação pode ser utilizada nesta fase – Keyframing, motion capture ou simulação.
Sombrear: Utilizam-se programas de computador que descrevem as características da superfície, incluindo texturas, acabamentos e cores, são adicionados a todos os objectos do cenário. Estes programas designados por “shaders”, podem simular uma grande variedade de aparências, incluindo lã, madeira, metal, tecido, vidro, cabelo e pele.
Iluminação: Utilizando “luzes digitais”, cada cena é iluminada mais ou menos da mesma forma que um palco é iluminado. Todos os tipos de iluminação são tratadas para criar um ambiente familiar com o intuito de realçar um determinado tipo de humor para cada cena.
Renderização: Desenha a imagem final, calculando cada pixel da imagem proveniente do modelo, animação, sombreamento, e iluminação. As imagens finais já renderizadas poderão levar até cerca de 24 horas cada até estarem acabadas. Uma vez renderizada, as imagens finais são transferidos para filme, vídeo ou CD-Rom.

segunda-feira, 14 de maio de 2012

Codigos de Huffman


A codificação de Huffman

David Huffman propôs em 1952 um método estatístico que permite atribuir uma palavra de código binário aos diferentes símbolos a comprimir (pixéis ou caracteres por exemplo). O comprimento de cada palavra de código não é idêntico para todos os símbolos: os símbolos mais frequentes (que aparecem geralmente) são codificados com pequenas palavras de código, enquanto os símbolos mais raros recebem códigos binários mais longos. Fala-se de codificação de comprimento variável (em inglês VLC, para variable length code ) prefixada para designar este tipo de codificação porque nenhum código é o prefixo de outro. Assim, a sequência final de palavras codificadas com comprimentos variáveis será em média mais pequena do que com uma codificação de dimensão constante.
O codificador de Huffman cria uma árvore ordenada a partir dos símbolos e a sua frequência de aparecimento. Os ramos são construídos recursivamente partindo dos símbolos menos frequentes.
A construção da árvore faz-se ordenando inicialmente os símbolos por frequência de aparecimento. Sucessivamente, os dois símbolos de mais fraca frequência de aparecimento são retirados da lista e unidos a um nó cujo peso vale a soma das frequências dos dois símbolos. O símbolo de mais fraco peso é afectado ao ramo 1, o outro ao ramo 0 e assim sucessivamente, considerando cada nó formado como um novo símbolo, até obter um só nó parente, chamado raiz.
O código de cada símbolo corresponde na sequência dos códigos ao longo do caminho que vai deste carácter à raiz. Assim, quanto mais o símbolo é “profundo” na árvore, mais a palavra de código será longa.
Vejamos a frase seguinte: “COMMENT_CA_MARCHE”. Eis as frequências de aparecimentos das letras :
M
A
C
E
_
H
O
N
T
R
3
2
2
2
2
1
1
1
1
1



Eis a árvore correspondente :
árvore de huffman



Os códigos correspondentes a cada carácter são tais que os códigos dos caracteres mais frequentes são curtos e os que correspondem aos símbolos menos frequentes são longos :
M
A
C
E
_
H
O
N
T
R
00
100
110
010
011
1110
1111
1010
10110
10111



As compressões baseadas neste tipo de codificação dão boas taxas de compressão, em especial para as imagens monocromas (os telefaxes, por exemplo). É utilizado nomeadamente nas recomendações T4 e T5 do ITU-T.

A compactação foi muito usada no início da era dos microcomputadores, pois preservavam espaço nos discos rígidos que eram extremamente pequenos e caros. Os disquetes, muitas vezes, não comportavam totalmente arquivos maiores, principalmente programas de instalação. Isso obrigava a compactar o arquivo de forma dividida em vários disquetes[COM 05].
Hoje, mesmo com grandes discos rígidos e gravadores de CDs a compactação continua sendo usada. A razão disso se explica no fato de o acesso de muitos computadores a redes, tanto públicas quanto privadas, ser feito ainda por meios com baixa largura de banda onde a informação não pode ser muito elevada, como os modens domésticos usados para acessar à internet e chegando a uma taxa de transmissão máxima de 56KBPS [COM 05].
Um código compactado é considerado ótimo quando as palavras-código com maior probabilidade possuem menor tamanho. Nesse sentido, as duas palavras-código de menor probabilidade possuem o mesmo tamanho e diferem somente no ultimo bit.
A compressão pelo algoritmo de Huffman reduz o tamanho do código usado para representar os símbolos de um alfabeto. Símbolos do alfabeto que ocorrem frequentemente são atribuídos por códigos mais curtos. O principal objetivo é permitir ao tamanho do código variar de caracter para caracter e de assegurar que o codigo utilizado seja menor. O código de Huffman é considerado como um código ótimo.

Codificação de huffman

O código de Huffman é uma das melhores técnicas de compressão atualmente utilizadas. É uma forma de compressão de dados em que se representa cada um dos caracteres de um texto com códigos binários de comprimento variável. O tamanho do código varia conforme a freqüência com que ocorre no texto, atribuindo-se códigos menores aos caracteres mais freqüentes e maiores aos menos freqüentes [MIL 02]. Este procedimento faz com que o código resultante seja menor. Consideramos a seguinte freqüência de símbolos um um arquivo: 10 vezes o simbolo “a”, 5 vezes o símbolo “b” e 1 vez o símbolo “e”. Neste caso o código de Huffman seria a=1, b=01 e e=00 o qual resultaria no tamanho total de 22 bits (10x1 + 5x2 + 1x2 = 22). Caso não usássemos o menor código para o símbolo de maior frequencia o tamanho do arquivo poderia ficar com 32 bits (a=00, b=01 e e=1 => 10x2 + 5x2 + 1x1 = 32), ou seja, haveria um acréscimo de 10 bits.
A compressão de Huffman é feita através da construção de uma árvore binária e é relativamente simples. Consiste em fazer uma varredura no arquivo a fim de determinar a freqüência de ocorrência dos símbolos no arquivo. É criada uma lista ordenada e classificada pela freqüência que os símbolos aparecem. Os dois últimos símbolos da lista são substituídos por um novo símbolo cuja probabilidade é a soma dos dois símbolos usados. Ordena-se a árvore novamente e repete-se a operação de substituição recursivamente até ficar apenas um símbolo. A figura 2.1.1 ilustra este processo. Após, o símbolo com probabilidade de 100% será a raiz da árvore e seus filhos serão os dois símbolos que a formaram. Repete-se este método até que todos os símbolos estejam presentes na árvore, onde os símbolos originais contidos no arquivo serão sempre folhas. A figura 2.1.2 mostra a construção desta árvore. O código do dígito será o caminho percorrido da raiz até a folha.
Figura 2.1.1 – Construção da árvore de Huffman – [ALH 05]
Figura 2.1.2 – Construção da árvore de Huffman – [ALH 05]
Um dos problemas apresentados pelo código de Huffman é que o tamanho da árvore de Huffman é proporcional ao número de símbolos e isto faz crescer o tamanho dos códigos. Uma solução para este problema é eliminar os símbolos pouco freqüentes da árvore. Esses símbolos são inseridos num conjunto chamado “DIVERSOS” e não têm codificação. Quando um desses símbolos aparece, é emitido um símbolo “DIVERSOS” seguido do símbolo propriamente dito, sem compactação.
Outra variante do código de Huffman é a Codificação de Huffman Adaptativa ou Huffman Adaptativo. Essa técnica foi criada para que se pudesse usar a compressão de Huffman em casos em que não se conhecem as freqüências de ocorrência de cada caractere no texto. Neste caso, devemos atualizar constantemente as freqüências (entrada) na árvore. Quando um caracter a ser codificado já existe na árvore ele é codificado de acordo com a seqüência de bits especificada. Quando um caracter é novo, ele é enviado sem compressão para o destino. O codificador então atualiza sua árvore para que seja incrementado o contador de ocorrências do caracter ou criado uma nova entrada na árvore. Este método é utilizado em aplicações que envolvem transmissão de texto.

Decodificação do código de Huffman

A decodificação do código de Huffman é mais simples que sua codificação. Primeiramente, escolhemos o primeiro bit do código como bit corrente e descemos um nível da Árvore de Huffamn, a partir da raiz, de acordo com o valor do bit corrente (0 => filho esquerdo ou 1 => filho direito) e atribuímos ao bit corrente do próximo bit da string de bits do código a decodificar. Quando atingimos uma folha da árvore de Huffman, devemos fazer a substituição dos bits correspondentes à trajetória até a folha pelo caractere contido nessa folha. Repetimos esses passos até que termine a string de bits do código a decodificar.

O código de Huffman com sua simplicidade, rapidez e auto-sincronismo é usado principalmente na compactação onde permanece imbatível, mas também, pode ser usado em outras áreas como criptografia.
Apesar de ser considerado um método de compactação ótimo, o ideal na construção de um software compactador seria a combinação de outros métodos, como a supressão de brancos e nulos e supressão de repetições a fim de melhorar as taxas de compactação.

Fonte: http://www.ebah.com.br/content/ABAAABmZMAC/uso-codigo-huffman-na-compactacao-dados
fonte: http://pt.kioskea.net/contents/video/huffman.php3