eficiência, qualidade e compressão do processamento digital

158
UNIVERSIDADE ESTADUAL DE CAMPINAS Faculdade de Engenharia Elétrica e de Computação Daniel Rodrigues Ferraz Izario Eficiência, qualidade e compressão do processamento digital de imagem/vídeo Campinas 2019

Upload: others

Post on 27-Oct-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Eficiência, qualidade e compressão do processamento digital

UNIVERSIDADE ESTADUAL DE CAMPINASFaculdade de Engenharia Elétrica e de Computação

Daniel Rodrigues Ferraz Izario

Eficiência, qualidade e compressão doprocessamento digital de imagem/vídeo

Campinas

2019

Page 2: Eficiência, qualidade e compressão do processamento digital

UNIVERSIDADE ESTADUAL DE CAMPINASFaculdade de Engenharia Elétrica e de Computação

Daniel Rodrigues Ferraz Izario

Eficiência, qualidade e compressão do processamento digital de

imagem/vídeo

Dissertação apresentada à Faculdade deEngenharia Elétrica e de Computação daUniversidade Estadual de Campinas comoparte dos requisitos exigidos para a ob-tenção do título de Mestre em EngenhariaElétrica, na Área de Telecomunicações eTelemática.

Orientador: Prof. Dr. Yuzo Iano.

ESTE EXEMPLAR CORRESPONDE À VER-

SÃO FINAL DA DISSERTAÇÃO DEFENDIDA

PELO ALUNO DANIEL RODRIGUES FER-

RAZ IZARIO, E ORIENTADA PELO PROF.

DR. YUZO IANO.

Campinas

2019

Page 3: Eficiência, qualidade e compressão do processamento digital

Ficha catalográficaUniversidade Estadual de Campinas

Biblioteca da Área de Engenharia e ArquiteturaRose Meire da Silva - CRB 8/5974

Izario, Daniel Rodrigues Ferraz, 1993- Iz1e IzaEficiência, qualidade e compressão do processamento digital de

imagem/vídeo / Daniel Rodrigues Ferraz Izario. – Campinas, SP : [s.n.], 2019.

IzaOrientador: Yuzo Iano. IzaDissertação (mestrado) – Universidade Estadual de Campinas, Faculdade

de Engenharia Elétrica e de Computação.

Iza1. Processamento de imagem assistida por computador. 2. Equações

diferenciais parciais. I. Iano, Yuzo, 1950-. II. Universidade Estadual deCampinas. Faculdade de Engenharia Elétrica e de Computação. III. Título.

Informações para Biblioteca Digital

Título em outro idioma: Efficiency, quality and compression of digital image/videoprocessingPalavras-chave em inglês:Computer aided image processingPartial differential equationsÁrea de concentração: Telecomunicações e TelemáticaTitulação: Mestre em Engenharia ElétricaBanca examinadora:Yuzo Iano [Orientador]Cristiano AkamineRosivaldo FerrareziData de defesa: 16-08-2019Programa de Pós-Graduação: Engenharia Elétrica

Identificação e informações acadêmicas do(a) aluno(a)- ORCID do autor: https://orcid.org/0000-0002-8024-0324- Currículo Lattes do autor: http://lattes.cnpq.br/9174775045358016

Powered by TCPDF (www.tcpdf.org)

Page 4: Eficiência, qualidade e compressão do processamento digital

COMISSÃO JULGADORA - TESE DE MESTRADO

Candidato: Daniel Rodrigues Ferraz Izario | RA: 210314Data da Defesa: 16 de AGOSTO de 2019.

Título da Tese:

“Eficiência, qualidade e compressão do processamento digital de imagem/vídeo”.

Comissão Julgadora:

Prof. Dr. Yuzo Iano (Presidente, FEEC/UNICAMP);Prof. Dr. Cristiano Akamine (Titular, MACKENZIE);Prof. Dr. Rosivaldo Ferrarezi (Titular, UNIP);

A ata de defesa, com as respectivas assinaturas dos membros da Comissão Julgadora,encontra-se no processo de vida acadêmica do aluno.

Page 5: Eficiência, qualidade e compressão do processamento digital

Aos meus pais, Helcio e Neuzeli.

Page 6: Eficiência, qualidade e compressão do processamento digital

Agradecimentos

Gostaria de agradecer a Deus por me guiar, iluminar e me dar tranquilidade paraseguir em frente com os meus objetivos e não desanimar com as dificuldades.

Esta tese é fruto da colaboração de várias pessoas, que apoiaram várias fasesdeste trabalho tornando possível a sua realização. Agradeço a todos e em especial:

Ao meu pai, Prof. Dr. Helcio José Izario Filho e à minha mãe, Neuzeli AparecidaRodrigues Ferraz Izario, por toda a educação, carinho e confiança depositados em mimdurante o desenvolvimento desta tese.

Ao meu irmão, Me. Bruno Rodrigues Ferraz Izario, pelo apoio dado durante todoo processo de pesquisa.

À minha esposa, Karine Mendes Siqueira Rodrigues Ferraz Izario, pela paciênciae apoio em todo passo a passo para preparação das fases e resultados da pesquisa.

Ao meu filho, Daniel Rodrigues Ferraz Izario Filho, pelos sorrisos dados durantea reta final desta tese.

Ao meu orientador e incentivador, Prof. Dr. Yuzo Iano, pela oportunidade, con-selhos, sugestões e correções que propiciaram a finalização desta tese.

Por fim, ao LCV-UNICAMP (Laboratório de Comunicações Visuais - UNICAMP)e todos os amigos feitos por lá, que participaram das etapas deste trabalho, principal-mente, ao amigo Me. Diego Arturo Pajuelo Castro.

Page 7: Eficiência, qualidade e compressão do processamento digital

’Os encantos dessa sublime ciênciase revelam apenas àqueles que tem

coragem de irem a fundo nela.’(Carl Friedrich Gauss)

Page 8: Eficiência, qualidade e compressão do processamento digital

Resumo

A pesquisa apresenta três técnicas para a aplicação do processamento digital de ima-gem/vídeo, sendo elas: Partial Differential Equation, High Dynamic Range e Discrete Co-sine Transform, utilizando o máximo dos processadores (Central Process Unit e GraphicsProcessing Unit), com o uso intensivo e preciso das threads.

Todas as técnicas citadas passam por um processo chamado de “Planilha de Pixels eGráficos”, no qual, uma varredura sobre a imagem/quadro gera uma planilha de pi-xels, ou seja, gerar uma matriz MxN e executar uma análise de padronização de vizi-nhança, criando um processo inteligente de renderização de múltiplas cópias de cadapixel e a interpolação entre eles, recebendo um ganho de qualidade.

Ao contrário das técnicas convencionais, será possível ganhar em termos de tempode processamento, manipulação de pixels, qualidade de imagem e armazenamento embanco de dados. Todas as técnicas foram testadas e comprovadas através de imagensreais, podendo também ser aplicadas em vídeo. Os algoritmos criados usam as lingua-gens de programação JavaScript, Java e Clojure (Lisp), combinadas com modelos mate-máticos no domínio do tempo e no domínio da frequência.

Como resultado, a melhoria no processamento e desempenho da imagem/quadro di-gital, sendo visualizado por gráficos de tempo, histogramas RGB (R - Red, G - Green e B- Blue), razão entre o sinal-ruído e uma análise do perfil da imagem/quadro em termosde qualidade dos pixels, comparando matricialmente.

Palavras-chaves: Clojure; Discrete Cosine Transform; Filtros; High-Dynamic Range; His-tograma; Java; JavaScript; Lisp; Partial Differential Equation; Processamento Digital deImagem/Vídeo.

Page 9: Eficiência, qualidade e compressão do processamento digital

AbstractThe research presents three techniques for the application of digital image/video pro-cessing: Partial Differential Equation, High Dynamic Range and Discrete Cosine Trans-form, using the maximum of the processors (Central Process Unit and Graphics Pro-cessing Unit), with the intensive and precise use of threads.

All the mentioned techniques go through a process called "Pixels and Graphs Work-sheet", in which a scan on the image/frame generates a pixel sheet, that is, generatean MxN matrix and perform a neighborhood standardization analysis, creating an in-telligent process of rendering multiple copies of each pixel and interpolating betweenthem, receiving a quality gain.

Unlike conventional techniques, it will be possible to gain in terms of processing time,pixel manipulation, image quality and database storage. All the techniques have beentested and proven through real images, and can also be applied in video. The algo-rithms created use JavaScript, Java and Clojure (Lisp) programming languages, com-bined with mathematical models in time domain and frequency domain.

As a result, the improvement in the processing and performance of the digital im-age/frame is visualized by time graphs, RGB histograms (R - Red, G - Green and B -Blue), signal-noise ratio and image/frame in terms of pixel quality, comparing matrix.

Keywords: Clojure; Digital Image/Video Processing; Discrete Cosine Transform; Fil-ters; High-Dynamic Range; Histogram; Java; JavaScript; Lisp; Partial Differential Equa-tion.

Page 10: Eficiência, qualidade e compressão do processamento digital

Lista de Ilustrações

Figura 1.1 – Processo de evolução das revoluções industriais. . . . . . . . . . . . . 25Figura 2.1 – Modelo de hierarquia das etapas do PDI. . . . . . . . . . . . . . . . . 28Figura 2.2 – Espectro eletromagnético. . . . . . . . . . . . . . . . . . . . . . . . . . 30Figura 2.3 – Visão geral do olho humano. . . . . . . . . . . . . . . . . . . . . . . . 31Figura 2.4 – Comparação entre o olho humano e um sensor fotográfico. . . . . . . 32Figura 2.5 – Modelo cromático RGB. . . . . . . . . . . . . . . . . . . . . . . . . . . 33Figura 2.6 – Histograma do modelo cromático RGB. . . . . . . . . . . . . . . . . . 34Figura 2.7 – Modelo cromático CMY. . . . . . . . . . . . . . . . . . . . . . . . . . . 34Figura 2.8 – Representação de uma imagem/quadro digital bidimensional. . . . . 36Figura 2.9 – Representação em camada de uma imagem/quadro digital RGB -

Exemplo 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Figura 2.10–Representação em camada de uma imagem/quadro digital RGB -

Exemplo 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Figura 2.11–Representação em camada de uma imagem/quadro digital RGB -

Exemplo 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Figura 2.12–Influência da variação do número de amostras e de níveis de quan-

tização na qualidade de uma imagem/quadro digital. . . . . . . . . . 40Figura 3.1 – Primeiros passos do PDI nas aplicações (JavaScript e Java). . . . . . . 41Figura 3.2 – Escolha dos próximos passos nas aplicações (JavaScript e Java). . . . . 42Figura 3.3 – Estrutura da aplicação web (JavaScript). . . . . . . . . . . . . . . . . . . 43Figura 3.4 – Modelo básico do PDI (Java). . . . . . . . . . . . . . . . . . . . . . . . 45Figura 3.5 – Relação entre RParameter e o EParameter. . . . . . . . . . . . . . . . . 47Figura 3.6 – Relação entre o Parameter e o RError sem correção. . . . . . . . . . . . 47Figura 3.7 – Relação entre o Parameter e o RError com correção. . . . . . . . . . . . 48Figura 3.8 – Processamento de imagem/quadro usando Fourier. . . . . . . . . . . 50Figura 3.9 – Os passos da filtragem no domínio de Fourier. . . . . . . . . . . . . . 53Figura 3.10–Resultado da filtragem passa baixa. . . . . . . . . . . . . . . . . . . . 54Figura 3.11–Resultado da filtragem passa alta. . . . . . . . . . . . . . . . . . . . . 55Figura 3.12–Resultado do filtro Gabor, com o parâmetro f incorreto e correto. . . 57Figura 3.13–Resultado do filtro Gabor, com o parâmetro θ incorreto e correto. . . . 57Figura 3.14–Processo de convolução por filtragem espacial usando máscara. . . . 58Figura 3.15–Descontinuidades nas intensidades da imagem/quadro. . . . . . . . 59Figura 3.16–Filtro Blur em vídeo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Figura 3.17–Filtro Brightness em vídeo. . . . . . . . . . . . . . . . . . . . . . . . . . 65Figura 3.18–Filtro Contrast em vídeo. . . . . . . . . . . . . . . . . . . . . . . . . . . 66Figura 3.19–Filtro Grayscale em vídeo. . . . . . . . . . . . . . . . . . . . . . . . . . 66

Page 11: Eficiência, qualidade e compressão do processamento digital

Figura 3.20–Filtro Hue-rotate em vídeo. . . . . . . . . . . . . . . . . . . . . . . . . . 67Figura 3.21–Filtro Invert em vídeo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Figura 3.22–Filtro Opacity em vídeo. . . . . . . . . . . . . . . . . . . . . . . . . . . 69Figura 3.23–Filtro Saturate em vídeo. . . . . . . . . . . . . . . . . . . . . . . . . . . 70Figura 3.24–Filtro Sepia em vídeo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Figura 3.25–Filtro Blue em imagem/quadro. . . . . . . . . . . . . . . . . . . . . . . 72Figura 3.26–Filtro GrayScale em imagem/quadro. . . . . . . . . . . . . . . . . . . . 73Figura 3.27–Filtro Green em imagem/quadro. . . . . . . . . . . . . . . . . . . . . . 73Figura 3.28–Filtro Invert em imagem/quadro. . . . . . . . . . . . . . . . . . . . . . 74Figura 3.29–Filtro Red em imagem/quadro. . . . . . . . . . . . . . . . . . . . . . . 75Figura 3.30–Filtro Saturation em imagem/quadro. . . . . . . . . . . . . . . . . . . 76Figura 3.31–Filtro Sepia em imagem/quadro. . . . . . . . . . . . . . . . . . . . . . 77Figura 3.32–Filtro Thresholding em imagem/quadro. . . . . . . . . . . . . . . . . . 78Figura 3.33–Filtro Gaussian em imagem/quadro. . . . . . . . . . . . . . . . . . . . 79Figura 3.34–Filtro Highpass em imagem/quadro. . . . . . . . . . . . . . . . . . . . 79Figura 3.35–Filtro Laplacian em imagem/quadro. . . . . . . . . . . . . . . . . . . . 80Figura 3.36–Filtro Lowpass em imagem/quadro. . . . . . . . . . . . . . . . . . . . . 81Figura 3.37–Filtro Prewitt em imagem/quadro. . . . . . . . . . . . . . . . . . . . . 82Figura 3.38–Filtro Sharpen em imagem/quadro. . . . . . . . . . . . . . . . . . . . . 83Figura 3.39–Filtro Roberts em imagem/quadro. . . . . . . . . . . . . . . . . . . . . 84Figura 3.40–Filtro Sobel em imagem/quadro. . . . . . . . . . . . . . . . . . . . . . 84Figura 3.41–Exemplo do processo da equalização histogrâmica. . . . . . . . . . . 86Figura 3.42–Técnica Tone Mapping. . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Figura 3.43–Resultante HDR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Figura 4.1 – Etapas da técnica de Pixels e Gráficos. . . . . . . . . . . . . . . . . . . 93Figura 4.2 – Comparação entre a Ioriginal com ruído e a Iresult. . . . . . . . . . . . . 96Figura 4.3 – Localização da GPU na placa de vídeo. . . . . . . . . . . . . . . . . . 107Figura 4.4 – Processador Intel Core i9-8950HK. . . . . . . . . . . . . . . . . . . . . . 110Figura 4.5 – Placa de vídeo GeForce GTX 1070 Ti. . . . . . . . . . . . . . . . . . . . 111Figura 4.6 – Comparativo do PDI, entre CPU e GPU. . . . . . . . . . . . . . . . . . 114Figura 4.7 – Exemplo de uma imagem/quadro em blocos 8x8. . . . . . . . . . . . 117Figura 4.8 – Comparação entre a imagem/quadro original e a IDCT. . . . . . . . . 121Figura 5.1 – Comparativo do tempo de processamento da filtragem. . . . . . . . . 122Figura 5.2 – Aplicação da técnica de filtragem - Exemplo 1. . . . . . . . . . . . . . 124Figura 5.3 – Aplicação da técnica de filtragem - Exemplo 2. . . . . . . . . . . . . . 125Figura 5.4 – Aplicação da técnica de filtragem - Exemplo 3. . . . . . . . . . . . . . 126Figura 5.5 – Comparativo do histograma das imagens/quadros filtrados. . . . . . 127Figura 5.6 – Imagem resultante HDR utilizada no primeiro teste. . . . . . . . . . . 128Figura 5.7 – Comparativo do tempo de processamento HDR. . . . . . . . . . . . . 128

Page 12: Eficiência, qualidade e compressão do processamento digital

Figura 5.8 – Comparativo do histograma da imagem HDR. . . . . . . . . . . . . . 129Figura 5.9 – Comparativo na qualidade da imagem HDR. . . . . . . . . . . . . . . 130Figura 5.10–Comparativo do tempo de processamento da técnica HDR/Tone Map-

ping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Figura 5.11–Aplicação da técnica HDR/Tone Mapping - Exemplo 1. . . . . . . . . . 132Figura 5.12–Aplicação da técnica HDR/Tone Mapping - Exemplo 2. . . . . . . . . . 133Figura 5.13–Aplicação da técnica HDR/Tone Mapping - Exemplo 3. . . . . . . . . . 134Figura 5.14–Aplicação da técnica HDR/Tone Mapping - Exemplo 4. . . . . . . . . . 135Figura 5.15–Aplicação da técnica HDR/Tone Mapping - Exemplo 5. . . . . . . . . . 136Figura 5.16–Aplicação da técnica HDR/Tone Mapping - Exemplo 6. . . . . . . . . . 137Figura 5.17–Comparativo do tempo de processamento na DCT/IDCT. . . . . . . 138Figura 5.18–Comparativo na qualidade da imagem/quadro usando DCT/IDCT

- Exemplo 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139Figura 5.19–Comparativo na qualidade da imagem/quadro usando DCT/IDCT

- Exemplo 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Figura 5.20–Comparativo do histograma das imagens/quadros com DCT/IDCT. 141Figura 5.21–Gráficos das etapas dos pixels na DCT/IDCT. . . . . . . . . . . . . . . 142Figura 5.22–Aplicação da técnica DCT/IDCT - Exemplo 1. . . . . . . . . . . . . . 143Figura 5.23–Aplicação da técnica DCT/IDCT - Exemplo 2. . . . . . . . . . . . . . 144

Page 13: Eficiência, qualidade e compressão do processamento digital

Lista de Tabelas

Tabela 2.1 – Comprimento de onda das cores primárias RGB. . . . . . . . . . . . . 33Tabela 2.2 – Combinação de primárias nos modelos RGB e CMY. . . . . . . . . . . 34Tabela 2.3 – Representação das cores por valores decimais e inteiros. . . . . . . . . 35Tabela 2.4 – Número de bytes para uma imagem monocromática. . . . . . . . . . . 39Tabela 2.5 – Número de bytes para uma imagem colorida. . . . . . . . . . . . . . . 40Tabela 4.1 – Características Específicas - Central Process Unit. . . . . . . . . . . . . 106Tabela 4.2 – Características Específicas - Graphics Processing Unit. . . . . . . . . . . 108Tabela 4.3 – Características - Processador: Intel Core i9-8950HK. . . . . . . . . . . . 111Tabela 4.4 – Características - Placa de vídeo: GeForce GTX 1070 Ti. . . . . . . . . . 112Tabela 4.5 – Fatores de Qualidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Page 14: Eficiência, qualidade e compressão do processamento digital

Lista de Algoritmos

Algoritmo 3.1 Implementação em Java para conversão. . . . . . . . . . . . . 49Algoritmo 3.2 Implementação em JavaScript para conversão. . . . . . . . . . 49Algoritmo 3.3 Implementação em JavaScript da convolução. . . . . . . . . . . 61Algoritmo 3.4 Implementação em Java da convolução. . . . . . . . . . . . . . 62Algoritmo 3.5 Implementação em Lisp do CSS filtre. . . . . . . . . . . . . . . 63Algoritmo 3.6 Implementação do filtro Blur em CSS. . . . . . . . . . . . . . . 64Algoritmo 3.7 Implementação do filtro Brightness em CSS. . . . . . . . . . . 65Algoritmo 3.8 Implementação do filtro Contrast em CSS. . . . . . . . . . . . . 67Algoritmo 3.9 Implementação do filtro Grayscale em CSS. . . . . . . . . . . . 67Algoritmo 3.10 Implementação do filtro Hue-rotate em CSS. . . . . . . . . . . 68Algoritmo 3.11 Implementação do filtro Invert em CSS. . . . . . . . . . . . . . 68Algoritmo 3.12 Implementação do filtro Opacity em CSS. . . . . . . . . . . . . 69Algoritmo 3.13 Implementação do filtro Saturate em CSS. . . . . . . . . . . . . 71Algoritmo 3.14 Implementação do filtro Sepia em CSS. . . . . . . . . . . . . . 71Algoritmo 3.15 Implementação em JavaScript do filtro Blue. . . . . . . . . . . . 72Algoritmo 3.16 Implementação em JavaScript do filtro GrayScale. . . . . . . . . 73Algoritmo 3.17 Implementação em JavaScript do filtro Green. . . . . . . . . . . 74Algoritmo 3.18 Implementação em JavaScript do filtro Invert. . . . . . . . . . . 74Algoritmo 3.19 Implementação em JavaScript do filtro Red. . . . . . . . . . . . 75Algoritmo 3.20 Implementação em JavaScript do filtro Saturation. . . . . . . . 76Algoritmo 3.21 Implementação em JavaScript do filtro Sepia. . . . . . . . . . . 77Algoritmo 3.22 Implementação em JavaScript do filtro Thresholding. . . . . . . 78Algoritmo 3.23 Implementação em JavaScript do filtro Gaussian. . . . . . . . . 79Algoritmo 3.24 Implementação em JavaScript do filtro Highpass. . . . . . . . . 80Algoritmo 3.25 Implementação em JavaScript do filtro Laplacian. . . . . . . . . 80Algoritmo 3.26 Implementação em JavaScript do filtro Lowpass. . . . . . . . . 81Algoritmo 3.27 Implementação em JavaScript do filtro Prewitt. . . . . . . . . . 82Algoritmo 3.28 Implementação em JavaScript do filtro Sharpen. . . . . . . . . . 83Algoritmo 3.29 Implementação em JavaScript do filtro Roberts. . . . . . . . . . 84Algoritmo 3.30 Implementação em JavaScript do filtro Sobel. . . . . . . . . . . 85Algoritmo 3.31 Implementação em JavaScript do histograma. . . . . . . . . . . 87Algoritmo 3.32 Implementação em Java do histograma. . . . . . . . . . . . . . 88Algoritmo 4.1 Implementação em JavaScript do Tone Mapping Global. . . . . . 100Algoritmo 4.2 Implementação em Java do Tone Mapping Global. . . . . . . . . 101Algoritmo 4.3 Implementação em JavaScript do Tone Mapping Local. . . . . . 103Algoritmo 4.4 Implementação em Java do Tone Mapping Local. . . . . . . . . . 104

Page 15: Eficiência, qualidade e compressão do processamento digital

Algoritmo 4.5 Implementação em CG/HLSL do CUDA . . . . . . . . . . . . 109Algoritmo 4.6 Implementação em Clojure do multithreaded (Parte 1). . . . . . 113Algoritmo 4.7 Implementação em Clojure do multithreaded (Parte 2). . . . . . 114Algoritmo 4.8 Implementação em JavaScript do multithreaded extra. . . . . . 115Algoritmo 4.9 Implementação em JavaScript da DCT/IDCT (Parte 1). . . . . 117Algoritmo 4.10 Implementação em JavaScript da DCT/IDCT (Parte 2). . . . . 118

Page 16: Eficiência, qualidade e compressão do processamento digital

Abreviaturas, Acrônimos e Siglas3Ds Três Dimensões.

API Application Programming Interface.

BD Banco de Dados.

bit Binary Digit.

byte Binary Term.

CG C for Graphics.

CIE Comission Internationale de l’Eclairage.

CMY C - cyan, M - magenta e Y - yellow.

CPU Central Process Unit.

CSS Cascading Style Sheets.

CUDA Compute Unified Device Architecture.

DCT Discrete Cosine Transform.

DDR Double Data Rate.

deg Degree.

DFT Discrete Fourier Transform.

DMI Direct Media Interface.

ELT Erro Local de Truncamento.

EParameter Estimated Parameter.

FFmpeg Programa de computador que grava, converte e cria stream de áudio e vídeo.

FFT Fast Fourier Transform.

GB Unidade de armazenamento em computador, 1.073.741.824 bytes.

GDDR Graphics Double Data Rate.

GHz Gigahertz.

GPGPU General Purpose Graphics Processing Unit.

Page 17: Eficiência, qualidade e compressão do processamento digital

GPU Graphics Processing Unit.

GT Gigatransfers.

GTX Indica melhor performance para jogos e uso profissional de gráficos (NVIDIA).

HDR High-Dynamic Range.

HDRi High-Dynamic Range imaging.

HK H - Processor Line e K - Letter Suffix (Intel).

HLSL High Level Shading Language.

HTML Hypertext Markup Language.

Hz hertz.

I Componente Imaginária.

i9 Brand Modifier (Intel).

IEC International Electrotechnical Commission.

IoT Internet of Things.

IDCT Inverse Discrete Cosine Transform.

Ioriginal Imagem Original.

Iresult Imagem Resultante.

ISO International Organization for Standardization.

J joule.

JDK Java Development Kit.

JNA Java Native Access.

JPEG Joint Photographic Experts Group.

JRE Java Runtime Environment.

JSON JavaScript Object Notation.

JVM Java Virtual Machine.

kB Unidade de armazenamento em computador, 1.024 bytes.

LPDDR Low Power Double Data Rate.

Page 18: Eficiência, qualidade e compressão do processamento digital

MB Unidade de armazenamento em computador, 1.048.576 bytes.

MHz Megahertz.

MSAA MultiSample Anti-Aliasing.

MSE Mean Squared Error.

MVVM Model-View-View-Model.

nm Nanometro.

NPM Node Package Manager.

PDE Partial Differential Equation.

PDI Processamento Digital de Imagem.

PDI/V Processamento Digital de Imagem/Vídeo.

PDV Processamento Digital de Vídeo.

PHP Hypertext Preprocessor.

PNG Portable Network Graphics.

POO Programação Orientada a Objetos.

PSNR Peak Signal to Noise Ratio.

px Pixel.

R Componente Real.

RAM Random Access Memory.

RError Relative Error.

RGB R - red, G - green e B - blue.

RParameter Real Parameter.

RWD Responsive Web Design.

s Segundos.

SGBD Sistema de Gerenciamento de Banco de Dados.

SIMD Single Instruction Multiple Data.

SNR Signal to Noise Ratio.

Page 19: Eficiência, qualidade e compressão do processamento digital

SO Sistema Operacional.

SPA Single-Page Applications.

SQL Structured Query Language.

STMD Single Thread Multiple Data.

TDP Thermal Design Power

TempE Tempos de Exposição.

Ti Nomenclatura utilizada para determinar alta performance (NVIDIA).

TMms Tone Mapping de escala múltipla.

TMss Tone Mapping de escala única.

UC Unidade de Controle.

UI User Interface.

ULA Unidade Lógica e Aritmética.

VLCj API para desenvolvimento em java de um player de vídeo open-source.

W watt.

web Referência à rede mundial de computadores.

YCbCr Y - brilho, Cb - componente blue e Cr - componente red.

Page 20: Eficiência, qualidade e compressão do processamento digital

Sumário

1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

1.1 Considerações Iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.2 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.4 Estrutura do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2 Revisão da Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2.1 Processamento Digital de Imagem . . . . . . . . . . . . . . . . . . . . . . 282.1.1 Natureza da Luz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.1.2 Olho Humano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.1.3 Modelos Cromáticos . . . . . . . . . . . . . . . . . . . . . . . . . . 332.1.4 Imagem Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352.1.5 Amostragem e Quantização . . . . . . . . . . . . . . . . . . . . . . 38

3 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

3.1 Aplicações: JavaScript e Java . . . . . . . . . . . . . . . . . . . . . . . . . . 413.1.1 Vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.1.2 Filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

3.1.2.1 Domínio da Frequência . . . . . . . . . . . . . . . . . . . 503.1.2.1.1 Filtro Passa Baixa . . . . . . . . . . . . . . . . . . 543.1.2.1.2 Filtro Passa Alta . . . . . . . . . . . . . . . . . . 553.1.2.1.3 Filtro de Gabor . . . . . . . . . . . . . . . . . . . 55

3.1.2.2 Domínio Espacial . . . . . . . . . . . . . . . . . . . . . . . 573.1.2.3 Convolução de Imagem . . . . . . . . . . . . . . . . . . . 603.1.2.4 Filtros Personalizados - Vídeo . . . . . . . . . . . . . . . 633.1.2.5 Filtros Personalizados - Imagem . . . . . . . . . . . . . . 71

3.1.3 Histograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.1.4 High Dynamic Range . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

4 Algoritmo/Equações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

4.1 Planilha de Pixels e Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . 924.2 Partial Differential Equation . . . . . . . . . . . . . . . . . . . . . . . . . . . 944.3 High Dynamic Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.4 Processadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

4.4.1 Central Process Unit . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064.4.2 Graphics Processing Unit . . . . . . . . . . . . . . . . . . . . . . . . 1074.4.3 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

4.5 Discrete Cosine Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

Page 21: Eficiência, qualidade e compressão do processamento digital

5.1 Partial Differential Equation . . . . . . . . . . . . . . . . . . . . . . . . . . . 1225.2 High Dynamic Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285.3 Discrete Cosine Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

6 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

7 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

7.1 Doutorado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Apêndices 154APÊNDICE A Publicações do Autor . . . . . . . . . . . . . . . . . . . . . . . . . 155

Page 22: Eficiência, qualidade e compressão do processamento digital

22

1 Introdução

1.1 Considerações Iniciais

O processamento digital de imagem/vídeo (PDI/V) entende-se como um pro-

cesso de manipulação de uma imagem (em vídeo, chamado de quadro) por compu-

tador de modo que a entrada e a saída do processo sejam imagens [1]. Contudo, o

conceito de imagem ganha diferentes interpretações ao longo dos anos, através da his-

tória da filosofia e das artes visuais [2]. Etimologicamente, a palavra “imagem”, tem

como registro uma definição de “representação artificial que aparenta a uma pessoa ou

coisa”. Porém, para a língua portuguesa o termo vem do francês image, antes imagene

(século XI), do latim imaginen (do nominativo imago). Denota “cópia, estátua, picture,

ideia ou aparência”, que vem de imitari enquanto “copiar/imitar” [3].

Mas não adianta entender a palavra “imagem”, sem entender a ideia de “ima-

gem”, a partir dos filósofos e da tradição oral filosófica que vem de imago do latim. O

primeiro foi Aristóteles (384 a.C. - 322 a.C.) [4], que estava ligado às coisas materiais,

tanto pela sensação como pela percepção. Depois vieram os Estoicos (111 a.C. - I d.C.)

que diferenciavam as imagens sensíveis das não sensíveis e passaram a usar a pala-

vra imaginação para imagem interior. Já os Epicuristas (111 a.C. - 11 a.C.) acreditavam

na verdade das imagens por estas serem produzidas e, tão somente, por aquilo que

existe. Estes conceitos cruzaram a Idade Média através de São Tomás de Aquino, que

os utiliza como forma de esclarecimento entre a natureza divina e a humana [5].

Registra-se, além dessas anteriores, o termo imagismo como o nome dado ao mo-

vimento em poesia para referir-se à busca da clareza de expressão através do uso de

imagens visuais precisas, por exemplo, hard light (“luz contrastada”) e clear edges (“ni-

tidez, contornos nítidos”), criado por Ezra Pound [6]. Na modernidade, estes conceitos

mudam. Para Bacon (1561-1626) e Hobbes (1588-1679) [7], a imagem passa a ser o ato de

sentir, e o termo imagem passa a perder espaço para a designação ideia, inicialmente

Page 23: Eficiência, qualidade e compressão do processamento digital

Capítulo 1. Introdução 23

conceituada como essência, ideal ou modelo do que é multíplice, e logo depois em

Descartes (1596-1650) e Wolff (1679-1754) [8], a imagem ou ideia passa a ser vista como

representação, por semelhança do objeto, representação de algo. Kant (1724-1804) [9]

a define como ato ou manifestação cognitiva independente de semelhança. Os termos

“ideia” e “representação” persistem na filosofia contemporânea e o termo “imagem”

hoje, encontra-se ligado ao caráter ou origem sensível das ideias ou representações de

que o ser humano dispõe.

No uso comum, uma imagem é um artefato que reproduz a semelhança a um

objeto, normalmente objeto físico ou pessoa, sendo bidimensionais, como uma fotogra-

fia, ou tridimensionais, como uma estátua. São tipicamente produzidas por aparelhos

ópticos, tais como câmeras, espelhos, lentes, telescópios, microscópios, computadores

etc. e objetos e fenômenos naturais como o olho humano ou superfícies de água, por

exemplo. Em outros contextos científicos e técnicos, “imagem” refere-se a um “sinal

bidimensional”, como um fenômeno físico que pode ser modelado como uma função

do domínio bidimensional. Em computação gráfica e processamento digital, que é o

ponto que está sendo analisado a fundo no contexto, a palavra quase sempre se re-

fere à imagem digital ou, por extensão, a qualquer produção imagética gerada pelo

computador [1].

Portanto, gerar uma imagem é algo fácil, pode ser no próprio imaginário e o

decorrer da história humana demonstra isso, mas produzir uma imagem/quadro de

alta resolução digital com perfeita qualidade e rapidez no alto processamento dos pi-

xels, isso ainda não foi realizado. No atual processamento digital de imagem/vídeo

existem vários tipos de degradações e distorções, inerentes aos processos de aquisição,

transmissão e visualização de imagens/quadros, que contribuem para limitar cada vez

mais a qualidade de todo o processo.

Page 24: Eficiência, qualidade e compressão do processamento digital

Capítulo 1. Introdução 24

1.2 Motivação

O processamento digital de imagem/vídeo surgiu como um processo fundamen-

tal na garantia da qualidade ou da informação a ser gerada em três aspectos funda-

mentais: qualidade, manipulação e interpretação. Além da grande evolução durante

os anos, como citado por [10]:

“A área de processamento digital de imagem/vídeo vem evoluindo con-

tinuamente ao longo dos anos, com um aumento significativo de estudos

envolvendo morfologia matemática, redes neurais, processamento de ima-

gens coloridas, compressão de imagens, reconhecimento de imagens e sis-

temas de análise de imagens baseados em conhecimento.”

Tudo se deu início na Revolução Industrial, a primeira delas foi um processo

de grandes transformações econômico-sociais que começou na Inglaterra no século

XVIII, o processo que levou à substituição das ferramentas pelas máquinas, da energia

humana pela energia motriz e do modo de produção doméstico (ou artesanal) pelo

sistema fabril. A partir do final do século XIX, a segunda Revolução Industrial se esta-

belece com as bases do progresso tecnológico e científico, visando a invenção e o cons-

tante aperfeiçoamento dos produtos e técnicas, para melhor desempenho industrial. A

terceira Revolução Industrial, teve o ponto culminante do desenvolvimento industrial,

em termos de tecnologia, teve início em meados do século XX, com o desenvolvimento

da eletrônica, que permitiu o desenvolvimento da informática e a automação das in-

dústrias [11].

A quarta Revolução Industrial é um conceito de indústria proposto recentemente

e que engloba as principais inovações tecnológicas dos campos de automação, controle

e tecnologia da informação, aplicadas aos processos de manufatura. A partir de siste-

mas cyber-físicos, internet das coisas e internet dos serviços, os processos de produção

tendem a se tornar cada vez mais eficientes, autônomos e customizáveis. Isso signi-

fica um novo período no contexto das grandes revoluções industriais. Com as fábricas

inteligentes, diversas mudanças ocorrerão na forma em que os produtos serão manu-

Page 25: Eficiência, qualidade e compressão do processamento digital

Capítulo 1. Introdução 25

faturados, causando impactos em diversos setores do mercado [12], como visualizado

na Figura 1.1.

Figura 1.1 – Processo de evolução das revoluções industriais.

A quarta Revolução Industrial é uma realidade que se torna possível devido aos

avanços tecnológicos da última década, aliados às tecnologias em desenvolvimento

nos campos de tecnologia da informação e engenharia. A internet das coisas (Internet

of Things - IoT) é um dos pontos principais e consiste na conexão em rede de objetos

físicos, ambientes, veículos e máquinas por meio de dispositivos eletrônicos embarca-

dos que permitem a coleta e troca de dados. Outro ponto é o Digital Data/Image/Video

Processing, base desse trabalho, que fazem todo o reconhecimento dos padrões e dados.

E por último, o big data analytics são estruturas de dados muito extensas e complexas

que utilizam novas abordagens para a captura, análise e gerenciamento de informações

[12].

Page 26: Eficiência, qualidade e compressão do processamento digital

Capítulo 1. Introdução 26

1.3 Objetivos

O principal objetivo é avaliar e melhorar as técnicas apresentadas nos softwares

comerciais de processamento digital de imagem/vídeo, desenvolvendo duas aplica-

ções idênticas em funcionalidades, mas diferentes em seus métodos de usabilidade,

instalação e algoritmo de desenvolvimento, a primeira aplicação é web (JavaScript) e a

outra, instalável (Java), como software computacional.

Nessas aplicações uma nova técnica computacional será inserida no contexto de

programação, na qual, amplia a visão do processo, em termos de qualidade, tempo

de processamento, nível dos pixels, distribuição no histograma e armazenamento. Esse

novo modelo de algoritmo será capaz de fazer a varredura de todos os pixels presentes

em uma imagem/quadro e avaliar todas as características presentes, podendo corrigir

todos os pixels de vizinhança errados ou contendo informação distorcida do estado real

nas camadas de cor e, com isso, efetuar filtragens e processamentos com alta precisão

e qualidade.

Como objetivo secundário, a criação de um repositório online e disponibilidade

parcial dos algoritmos desenvolvidos para estudo de alunos, cientistas e profissionais

da área, construindo uma rede de aprendizado e fechando um ciclo, no qual, o diálogo

permanecerá presente, com ideias, dúvidas e assuntos relevantes para o contexto.

Todo esse estudo e desenvolvimento se deu início devido ao alto consumo de

tempo e processamento nas imagens/quadros digitais utilizados em pequenos proces-

sos computacionais, mas que podem, por consequência, unir em processos complexos

de filtragem, armazenamento ou manipulação de uma zona em certa imagem/quadro

e os softwares comerciais não suprem o mercado com eficiência, qualidade e compres-

são do processamento digital de imagem/vídeo.

Page 27: Eficiência, qualidade e compressão do processamento digital

Capítulo 1. Introdução 27

1.4 Estrutura do Trabalho

Capítulo 1: Introdução, apresenta o que significa o termo “imagem” e a visão

dos filósofos durante o passar dos anos, as motivações para o desenvolvimento da

pesquisa, os objetivos e a organização dos capítulos.

Capítulo 2: Revisão da Literatura, apresenta uma revisão sobre o que é proces-

samento digital de imagem, como subtópicos, explicações sobre a natureza da luz, o

olho humano, modelos cromáticos, como se forma a imagem digital e sua importância,

amostragem e quantização.

Capítulo 3: Metodologia, apresenta sobre as aplicações desenvolvidas, JavaScript

e Java, como subtópicos, o processamento digital de vídeo, o processo de filtragem,

histograma e high dynamic range.

Capítulo 4: Algoritmo/Equações, apresenta as técnicas desenvolvidas, no qual,

é uma união de vários fatores divididos em tópicos e explicado passo a passo sobre os

algoritmos e equações das planilhas de pixels, partial differential equation, high dynamic

range, dos processadores (Central Process Unit, Graphics Processing Unit e threads) e do

armazenamento usando discrete cosine transform.

Capítulo 5: Resultados, apresenta os resultados gerados durante todos os testes

executados, levando em consideração a qualidade, histograma, tempo de processa-

mento e nível dos pixels.

Capítulo 6: Conclusão, apresenta a conclusão obtida durante a pesquisa, fa-

zendo uma síntese dos resultados.

Capítulo 7: Trabalhos Futuros, apresenta as próximas pesquisas relacionadas

ao Doutorado, voltadas para animações 3Ds (três dimensões) inteligentes e com alto

desempenho no processamento dos dados.

Page 28: Eficiência, qualidade e compressão do processamento digital

28

2 Revisão da Literatura

2.1 Processamento Digital de Imagem

Não existe tarefa simples em termos de processamento digital de imagem (PDI),

na realidade envolve um conjunto de tarefas interconectadas, como visualizado na Fi-

gura 2.1. A primeira etapa do processo é a captura da imagem, a qual, normalmente,

corresponde à iluminação que é refletida na superfície dos objetos. Logo após, é digi-

talizada, que é a forma apropriada para tratamento computacional, podendo também

ser capturada por sensor e salva na forma digital, diretamente.

Figura 2.1 – Modelo de hierarquia das etapas do PDI (baseado em [13]).

Qualquer imagem gerada é limitada por um plano retangular, no qual, cada po-

sição nesse plano contém a informação de cor relativa, ou seja, a imagem neste caso é

um sinal de cor 2D contínuo, onde o domínio é o plano e o contradomínio é o espaço

de cor. A imagem contínua é modelada matematicamente por Equação 2.1, sendo x e

y números reais, limitados ao intervalo de 0 a X, e de 0 a Y, respectivamente.

Page 29: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 29

imagem(x, y)↔ pixel(x, y) (2.1)

Já a imagem digital é obtida a partir de uma amostragem ou de uma quantização,

modelada matematicamente por Equação 2.1, onde x e y são números inteiros. A partir

disso, é gerado uma matriz de valores, no qual, cada valor representa o pixel da cor.

Com isso, se faz um pré-processamento, o qual envolve passos como a filtragem de

ruídos introduzidos pelos sensores e a correção de distorções geométricas causadas

pelo sensor [13].

Próximo passo é fazer uma análise e identificação de objetos, para isso, caracte-

rísticas ou atributos das imagens precisam ser extraídos, tais como as bordas, texturas,

movimentos e vizinhanças [14]. Em seguida, objetos precisam ser separados do plano

de fundo (background), o que significa que é necessário identificar, através de um pro-

cesso de segmentação, características constantes e descontinuidades. Para essa tarefa,

são necessárias técnicas mais avançadas, como regularização, modelagem, restauração

e reconstrução [13].

A partir dos objetos obtidos pelo processo, resultante da segmentação, pode-

se utilizar operadores morfológicos para analisar, modificar e extrair informações, as

quais podem ser úteis na sua classificação geral [15].

2.1.1 Natureza da Luz

Como explicado na seção 2.1, a luz é necessária para que uma imagem possa

existir, ela apresenta um comportamento ondulatório caracterizado por sua frequência

( f ) e comprimento de onda (λ). A faixa do espectro eletromagnético à qual o sistema

visual humano é sensível se estende aproximadamente de 400nm a 770nm e denomina-

se luz visível, como visualizado na Figura 2.2.

A radiação eletromagnética com comprimentos de onda fora da faixa de luz vi-

sível não é percebida pelo olho humano. Dentro dessa faixa, o olho percebe compri-

mentos de onda diferentes como cores distintas, sendo que fontes de radiação com um

Page 30: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 30

único comprimento de onda denominam-se monocromáticas [16].

Figura 2.2 – Espectro eletromagnético (adaptado de [16]).

2.1.2 Olho Humano

Quando se olha na direção de um objeto, a imagem atravessa a córnea e chega

à íris, que regula a quantidade de luz recebida por meio de uma abertura chamada

pupila. Quanto maior a pupila, mais luz entra no olho. Passada a pupila, a imagem

chega ao cristalino e é focada sobre a retina [16], como visualizado na Figura 2.3.

A lente do olho produz uma imagem invertida, e o cérebro a converte para a po-

sição correta. Na retina, mais de cem milhões de células fotorreceptoras transformam

as ondas luminosas em impulsos eletroquímicos, que são decodificados pelo cérebro.

Inspirado no funcionamento do olho, o homem criou a máquina fotográfica. Por-

tanto, nos olhos a córnea funciona como a lente da câmera, permitindo a entrada de

luz no olho e a formação da imagem na retina. Localizada na parte interna do olho, a

retina seria o filme fotográfico, onde a imagem se reproduz. A pupila funciona como

o diafragma da máquina, controlando a quantidade de luz que entra no olho. Ou seja,

em ambientes com muita luz a pupila se fecha e em locais escuros a pupila se dilata

com o intuito de captar uma quantidade de luz suficiente para formar a imagem [10].

A focalização apropriada da cena implica a formação nítida de sua imagem in-

vertida sobre a retina. A retina contém dois tipos de fotos sensores, os cones (sensíveis

Page 31: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 31

a cores e com alta resolução, operantes apenas em cenas suficientemente iluminadas)

e os bastonetes (insensíveis a cores, com baixa resolução, operantes em condições de

baixa luminosidade), encarregados do processo de conversão da energia luminosa em

impulsos elétricos que serão transmitidos ao cérebro, para posterior interpretação [17].

Figura 2.3 – Visão geral do olho humano (adaptado de [16]).

A visualização de um objeto consiste do posicionamento do olho pela estrutura

nervosa e muscular que o controla, implicando a projeção da imagem do objeto so-

bre a fóvea [10]. Em essência, toda câmera fotográfica é uma câmera escura, projetada

para reter a energia luminosa proveniente de uma cena, produzindo uma imagem ade-

quada. Trata-se de uma extensão do olho humano, o qual compõe imagens a partir de

excitação luminosa e as transmite ao cérebro sob a forma de impulsos bioelétricos. A

pálpebra do olho tem uma função análoga àquela do obturador da câmara [17].

Page 32: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 32

O diafragma (ou íris, no olho) de uma câmera funciona analogamente à íris do

olho humano, controlando a quantidade de luz que atravessa a lente. A lente da câ-

mera é análoga ao conjunto formado pelo cristalino do olho, a córnea e, em menor

grau, o humor aquoso e o humor vítreo. Ambos têm o propósito de focalizar a luz,

de modo a tornar nítidas as imagens que se formarão invertidas no plano focal [10].

A diferença é que o cristalino se deforma para focalizar a imagem, enquanto a lente

é dotada de um mecanismo manual ou automático para o ajuste da distância focal, à

exceção das lentes das câmeras de foco fixo, projetadas para dar foco a partir de uma

distância mínima (usualmente a partir de 1,5m). A coroide funciona como a câmera es-

cura de uma câmera fotográfica e a retina corresponde ao sensor da câmera fotográfica

(componente digital ou filme) [16], como visualizado Figura 2.4.

Figura 2.4 – Comparação entre olho humano e sensor fotográfico (adaptado de [16]).

Page 33: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 33

2.1.3 Modelos Cromáticos

Todo e qualquer objeto que emite luz visível é percebido em função da soma das

cores espectrais emitidas, conhecido como processo aditivo, que pode ser interpretado

como uma combinação variável de componentes monocromáticas nas faixas espectrais

associadas às sensações das cores primárias. Com isso, foi criado o modelo cromático

RGB (R - red, G - green e B - blue) [10] [18], como visualizado na Figura 2.5, no qual

a Comissão Internacional de Iluminação (Comission Internationale de l’Eclairage - CIE),

estabeleceu o comprimento de onda das cores primárias, reconhecida pela Organiza-

ção Internacional de Normalização (International Organization for Standardization - ISO)

e pela Comissão Eletrotécnica Internacional (International Electrotechnical Commission -

IEC) [19], como visualizado na Tabela 2.1.

Figura 2.5 – Modelo cromático RGB.

Tabela 2.1 – Comprimento de onda das cores primárias RGB (baseado em [18]).

Sigla Primária λ (nm)R Vermelho 700,0G Verde 546,1B Azul 435,8

O histograma (explicado na subseção 3.1.3) do modelo cromático RGB, identifica

as porções de cores por cada camada, como visualizado na Figura 2.6. Com isso, é im-

portante conhecer sobre as três cores primárias RGB, a primeira é o vermelho, que do

latim vermiculos, é uma das sete cores do espectro solar sendo denominada fundamen-

tal ou primitiva. A verde, que do latim viridis, no qual, se interpõe entre o céu e o sol.

O azul, tem sua origem no árabe e no persa lázúrd e, é a cor do céu sem nuvens, dando

a sensação para o infinito [14].

Page 34: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 34

Figura 2.6 – Histograma do modelo cromático RGB.

A combinação dessas cores, duas a duas e em igual intensidade, produz as cores

secundárias, conhecidas como modelo cromático CMY (C - cyan, M - magenta e Y -

yellow) [16], como visualizado na Figura 2.7. As cores primárias no modelo CMY são

definidas em função da absorção de uma cor primária da luz branca incidente e da

reflexão das demais componentes, ou seja, as cores primárias são as secundárias do

modelo RGB, como visualizado na Tabela 2.2.

Figura 2.7 – Modelo cromático CMY.

Tabela 2.2 – Combinação de primárias nos modelos RGB e CMY (baseado em [16]).

Modelo Combinação de Primárias Secundária ResultanteRGB Vermelho + Verde AmareloRGB Vermelho + Azul MagentaRGB Verde + Azul CianoCMY Ciano + Magenta AzulCMY Magenta + Amarelo VermelhoCMY Amarelo + Ciano Verde

Page 35: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 35

Em vídeo, a formação dos quadros se dá por emissão de radiação eletromagné-

tica visível, em um processo que integra, em diferentes proporções, as cores vermelha,

verde e azul. Há vários outros modelos cromáticos nos quais a caracterização da cor

não se dá conforme o comportamento fisiológico da retina humana, mas sim em função

de outros atributos de percepção cromática empregados por seres humanos [14]. É im-

portante notar, que as cores podem ser representadas por valores decimais e inteiros,

como visualizado na Tabela 2.3.

Tabela 2.3 – Representação das cores por valores decimais e inteiros (baseado em [14]).

Cor Valor Decimal Valor InteiroPreto (0, 0, 0) (0, 0, 0)Vermelho (1, 0, 0) (255, 0, 0)Verde (0, 1, 0) (0, 255, 0)Azul (0, 0, 1) (0, 0, 255)Branco (1, 1, 1) (255, 255, 255)Amarelo (1, 1, 0) (255, 255, 0)Ciano (0, 1, 1) (0, 255, 255)Magenta (1, 0, 1) (255, 0, 255)

2.1.4 Imagem Digital

Uma imagem monocromática é uma função bidimensional contínua f (x, y), na

qual x e y são coordenadas espaciais e o valor de f em qualquer ponto (x, y) é proporci-

onal à intensidade luminosa (brilho ou nível de cinza) no ponto considerado. Como os

computadores e sensores não são capazes de processar imagens contínuas, mas apenas

arrays de números digitais, é necessário representar imagens como arranjos bidimensi-

onais de pontos [13] [17].

Cada ponto na grade bidimensional que representa a imagem digital é denomi-

nado elemento de imagem ou pixel. A matriz é a notação usual para a localização de

um pixel no arranjo de uma imagem bidimensional, como visualizado na Figura 2.8.

O primeiro índice é a posição da linha (m), na qual o pixel se encontra, enquanto o se-

gundo é a posição da coluna (n). Se a imagem digital contiver M linhas e N colunas, o

índice m varia de 0 a M− 1, enquanto n varia de 0 a N − 1.

Page 36: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 36

Figura 2.8 – Representação de uma imagem/quadro digital bidimensional.

A intensidade luminosa no ponto (x, y) pode ser decomposta em i componente

de iluminação (i(x, y)), associada à quantidade de luz incidente sobre o ponto (x, y) e a

componente de reflectância r(x, y), associada à quantidade de luz refletida pelo ponto

(x, y), apresentado na Equação 2.2.

f (x, y) = i(x, y)r(x, y) (2.2)

Onde 0 < i(x, y) < ∞ e 0 < r(x, y) < 1, sendo i(x, y) dependente das carac-

terísticas da fonte de iluminação, enquanto r(x, y) das características das superfícies

dos objetos. Em uma imagem digital colorida no sistema RGB, um pixel pode ser visto

como um vetor cujas componentes representam as intensidades de vermelho, verde

e azul de sua cor [20]. A imagem colorida pode ser vista como a composição de três

imagens monocromáticas, como apresentado na Equação 2.3.

f (x, y) = fR(x, y) fG(x, y) fB(x, y) (2.3)

No qual, fR(x, y), fG(x, y) e fB(x, y) representam as intensidades luminosas das

componentes RGB no ponto (x, y), como visualizado na Figura 2.9 (Exemplo 1) e na Fi-

gura 2.10 (Exemplo 2). Outra forma de representar a imagem decomposta em camadas

RGB, é visualizado na Figura 2.11 (Exemplo 3), que separa as cores dos pixels naquele

exato ponto e não sua conversão para a escala de cinzas.

Page 37: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 37

Figura 2.9 – Representação em camada de uma imagem/quadro digital RGB -Exemplo 1.

Figura 2.10 – Representação em camada de uma imagem/quadro digital RGB -Exemplo 2.

Page 38: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 38

Figura 2.11 – Representação em camada de uma imagem/quadro digital RGB -Exemplo 3.

2.1.5 Amostragem e Quantização

Para que uma imagem possa ser armazenada ou processada, é necessário fazer

a discretização em nível de coordenadas espaciais e de valores de brilho. O processo

de discretização das coordenadas espaciais é a amostragem, enquanto a discretização

dos valores de brilho é a quantização. No caso, ambos os processos são uniformes, o

que força o processo da amostragem da imagem f (x, y) ser em pontos igualmente es-

paçados, distribuídos na forma de uma matriz MxN, sendo cada elemento uma apro-

ximação do nível de cinza da imagem no ponto amostrado para um valor no conjunto

0, 1, ..., L− 1 [21], como apresentado na Equação 2.4.

F ≈

f (0, 0) f (0, 1) · · · f (0, N − 1)

f (1, 0) f (1, 1) · · · f (1, N − 1)...

......

...

f (0, M) f (1, M) · · · f (M− 1, N − 1)

(2.4)

O limite inferior (0) da faixa de níveis de cinza de um pixel é associado ao preto, e

o limite superior (L− 1) ao branco, pixels com valores entre 0 e L− 1 serão visualizados

em diferentes tons de cinza, os quais serão tão mais escuros quanto mais próximo

de zero forem seus valores. Uma vez que os processos de amostragem e quantização

Page 39: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 39

implicam na eliminação de informação de uma imagem analógica, seu equivalente

digital é uma aproximação, no qual, a qualidade depende essencialmente dos valores

de M, N e L [20]. Com isso, o número de valores de brilho (L) é associado a potências

de 2, como apresentado na Equação 2.5.

L = 2l (2.5)

Onde l ∈ ℵ (os números Aleph (ℵ) são uma sequência de números usados para

representar os tamanhos de conjuntos infinitos [20]), assim sendo, o número de bits

necessário para representar uma imagem digital de dimensões MxN é apresentado na

Equação 2.6.

b = MNl (2.6)

Com o uso da Equação 2.6, o aumento de M, N e l implica na elevação da quali-

dade da imagem, o aumento do número de bits necessários para a codificação binária

da imagem e o aumento do volume de dados a serem armazenados, processados e

transmitidos [20]. O número de bytes empregado na representação de uma imagem di-

gital monocromática para alguns valores típicos de M e N, com L igual a 2, 32 e 256

níveis de cinza, são visualizados na Tabela 2.4.

Tabela 2.4 – Número de bytes para uma imagem monocromática (baseado em [21]).

M N L = 2 L = 32 L = 256480 640 38400 192000 307200600 800 60000 300000 480000768 1024 98304 491520 7864321200 1600 240000 1200000 1920000

Para entender o número de amostras e de níveis de cinza necessários para a

representação de uma imagem digital de qualidade, é preciso saber as características

da imagem, como suas dimensões e complexidade da aplicação (JavaScript e Java) à

qual se destina. A influência dos parâmetros de digitalização na qualidade visual de

uma imagem monocromática é visualizado na Figura 2.12.

Page 40: Eficiência, qualidade e compressão do processamento digital

Capítulo 2. Revisão da Literatura 40

Figura 2.12 – Influência da variação do número de amostras e de níveis dequantização na qualidade de uma imagem/quadro digital: (A) 200x200

pixels/256 níveis; (B) 100x100 pixels/256 níveis; (C) 25x25 pixels/256níveis; e (D) 200x200 pixels/2 níveis.

O número de cores que um pixel pode assumir em uma imagem RGB é LRLGLB.

Usando logaritmo, lR = log2(LR), lG = log2(LG) e lB = log2(LB), o número de bits por

pixel necessários para representar as cores será igual a lR + lG + lB e o número de bits

necessário para representar uma imagem digital de dimensões MxN é apresentado na

Equação 2.7.

b = MN(lR + lG + lB) (2.7)

O número de bytes empregado na representação de uma imagem digital colorida

para alguns valores típicos de M e N, com L igual a 2, 32 e 256 níveis de cinza, são

visualizados na Tabela 2.5.

Tabela 2.5 – Número de bytes para uma imagem colorida (baseado em [21]).

M N L = 2 L = 32 L = 256480 640 115200 576000 921600600 800 180000 900000 1440000768 1024 294912 1474560 23592961200 1600 720000 3600000 5760000

Page 41: Eficiência, qualidade e compressão do processamento digital

41

3 Metodologia

3.1 Aplicações: JavaScript e Java

As aplicações (web e local) tem exatamente as mesmas funcionalidades imple-

mentadas e seguem a mesma ordem de execução do processamento digital de ima-

gem/vídeo. Primeiramente, a imagem/quadro é capturada por uma câmera/sensor

ou escolhida do próprio sistema, após isso, faz a análise do seu tamanho para poder

gerar a planilha de pixels (explicada na seção 4.1) e gerar o histograma RGB (explicada

na subseção 3.1.3), como visualizado na Figura 3.1.

Figura 3.1 – Primeiros passos do PDI nas aplicações (JavaScript e Java).

Page 42: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 42

Após isso, a imagem/quadro está padronizada, podendo escolher entre efetuar a

filtragem com Partial Differential Equation (PDE) (explicado na seção 4.2) ou gerar o High

Dynamic Range (HDR) (explicado na seção 4.3). Todo o processamento é feito utilizando

de threads (explicado na seção 4.4) e a imagem/quadro resultante armazenada usando

a técnica Discrete Cosine Transform (DCT) (explicada na seção 4.5), como visualizado na

Figura 3.2.

Figura 3.2 – Escolha dos próximos passos nas aplicações (JavaScript e Java).

As aplicações JavaScript [22] e Java [23] foram criadas somente para gerar os re-

sultados das técnicas criadas durante a pesquisa.

Page 43: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 43

A estrutura da aplicação web, visualizada na Figura 3.3, foi desenvolvida utili-

zando vários conceitos e tecnologias do que há de mais moderno no mercado. Para de-

senvolver o website e sua estrutura base, foi utilizado a linguagem de marcação HTML

(Hypertext Markup Language) e o CSS (Cascading Style Sheets) que é uma linguagem de

folha de estilos, a qual, tem a função de tornar uma página apresentável na web, relaci-

onada diretamente com o design e aparência [24].

Figura 3.3 – Estrutura da aplicação web (JavaScript).

O sistema precisa ser padronizado e visualizado em todo e qualquer tamanho de

tela, para isso foi um implementado o Responsive Web Design (RWD), que é uma abor-

dagem para tornar as páginas da web renderizadas em uma variedade de dispositivos

Page 44: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 44

e tamanhos de janelas ou telas. Na estrutura do CSS, foi utilizado quatro modelos de

framework/bibliotecas, que é uma abstração que une códigos comuns, provendo uma

funcionalidade genérica, mas pode atingir uma funcionalidade específica, por configu-

ração, durante a programação da aplicação.

O Foundation, fornece grade responsiva, componentes de interface HTML e CSS

[25], modelos de código, para formulários, botões, navegação e outros elementos de

interface. O Bootstrap, melhora a experiência do usuário em um site amigável e respon-

sivo. O Materialize CSS, utiliza bibliotecas que se destinam a facilitar as estilizações da

página web. O último, o Semantic UI, é uma biblioteca de componentes de User Interface

(UI).

Mas o que resume toda a aplicação web é a linguagem de programação inter-

pretada JavaScript, é com ela que todas as funcionalidades são criadas. Na estrutura

do JavaScript, foi utilizado três modelos de framework/bibliotecas. O Angular, auxilia

na execução de Single-Page Applications (SPA), no qual, consiste de uma única página

web com o objetivo de fornecer uma experiência de usuário melhor, construído sob o

padrão Model-View-View-Model (MVVM). O jQuery [26] é uma biblioteca que interage

com o HTML, desenvolvida para simplificar os scripts interpretados no navegador do

cliente (client-side). O último, o React [27], é o mais eficiente em criar as User Interface

(UI).

O Node [28] foi escolhido como um interpretador de código JavaScript, focado em

migrar o JavaScript do lado do cliente para servidores, ou seja, seu objetivo é criar apli-

cações de alta escalabilidade (como um servidor web), com códigos capazes de mani-

pular dezenas de milhares de conexões simultâneas, numa única máquina física. Sendo

assim, o NPM (Node Package Manager) foi escolhido para o gerenciamento e execução

de tarefas, ele é um gerenciador de pacotes padrão para o ambiente de execução JavaS-

cript/Node.

Para testes nas linhas de código e de execução, foram escolhidos o Mocha e o

Jest. O Mocha é um modelo de teste JavaScript/Node, com suporte a navegador, teste

assíncrono, relatórios de cobertura de teste e uso de qualquer biblioteca de asserção. O

Page 45: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 45

Jest é usado para testar todo o código JavaScript, incluindo React.

Por fim, o Banco de Dados (BD) escolhido foi o diskDB, que é um banco de da-

dos JSON (JavaScript Object Notation), baseado em disco leve com uma API (Application

Programming Interface) do tipo MongoDB (software de banco de dados orientado a do-

cumentos livre) para Node. O JSON [29] é um formato compacto, de padrão aberto

independente, de troca de dados simples e rápida entre sistemas.

A estrutura da aplicação local, diferente da aplicação web, foi utilizado somente

Java, que é uma linguagem de Programação Orientada a Objetos (POO). Como fra-

mework/bibliotecas, foi utilizado o Java 2DTM e o VLCj (juntamente com a JNA (Java

Native Access)). Dentro do Java 2DTM, as classes de imagem de modo imediato e as in-

terfaces fornecem técnicas para lidar com imagens mapeadas por pixel cujos dados são

armazenados na memória, além de, suportar o acesso a dados de imagem em vários

formatos de armazenamento e a manipulação de dados de imagem por meio de vários

tipos de operações de filtragem, sendo o modelo básico do processamento digital de

imagem visualizado na Figura 3.4. O VLCj é uma biblioteca de vídeo com vários tipos

de formato de áudio/vídeo.

Figura 3.4 – Modelo básico do PDI (Java).

Para o Java funcionar corretamente ele precisa do seu JDK (Java Development Kit),

que é um conjunto de utilitários que permitem criar sistemas de software para a plata-

forma Java, e o JRE (Java Runtime Environment), que é utilizado para executar as aplica-

ções da plataforma Java.

Page 46: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 46

3.1.1 Vídeo

Nas aplicações desenvolvidas (web e local), o processamento digital de vídeo

(PDV) é uma das técnicas inserida ao sistema. Como por trás de toda a ação e do mo-

vimento que é visto em qualquer tipo de vídeo, um algoritmo transforma o vídeo em

várias imagens (quadros), o cérebro interpreta como movimento esses vários quadros

consecutivos em um curto período de tempo.

Durante a obtenção e/ou transmissão do vídeo, os ruídos aparecem, compro-

metendo o desempenho dos sensores de captura, por fatores climáticos, vida útil dos

equipamentos e interferências nos canais de transmissão, com isso, existem dois mode-

los de ruídos em processamento digital de imagem/vídeo (PDI/V), o ruído aditivo e o

multiplicativo. No caso, o aditivo é um dos mais usados na prática, tanto no domínio

espacial quanto no domínio da frequência [30], explicados na subseção 3.1.2.

O ruído aditivo simulado está próximo do real, ou seja, modela a soma de várias

pequenas fontes de ruído. A função que representa a função de densidade de probabi-

lidade gaussiana de uma variável aleatória x é dada na Equação 3.1, onde x representa

o nível de cinza presente por filtragem, µ é a média dos valores de cinza e α é seu

desvio padrão [30].

ρ(x) =1√

2πα2e−(x−µ)2

2α2 (3.1)

Parameter =∣∣∣∣RParameter− EParameter

RParameter

∣∣∣∣ (3.2)

Se aplicar na Equação 3.1, por exemplo, o filtro blur (esse filtro aplicará desfoque

gaussiano às imagens), o gráfico apresentado na Figura 3.5, comprova a relação do Real

Parameter (RParameter) e o Estimated Parameter (EParameter) em uma matriz imagem,

executando cálculos dentro de um limiar (valor 0 para pixels com ruídos).

Com a Figura 3.5 é possível analisar os valores reais e os estimados de uma cap-

tura de imagem analisada por pixels com ruídos. Desse modo, a aplicação extrai as

informações específicas com uma taxa de Relative Error (RError) grande, dada na Equa-

Page 47: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 47

ção 3.2, como apresentado na Figura 3.6.

Figura 3.5 – Relação entre RParameter e o EParameter.

Figura 3.6 – Relação entre o Parameter e o RError sem correção.

Page 48: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 48

Para as taxas de RError superiores a 1, a aplicação fica vulnerável e é necessá-

rio corrigir os ruídos encontrados no processo de captura. Para a correção é aplicado

uma filtragem inversa antes da visualização do usuário, esse é um método simples de

restauração que aproxima o vídeo a um modelo sem ruídos, com uma taxa de Relative

Error (RError) próxima de zero [30], como apresentado na Figura 3.7.

Figura 3.7 – Relação entre o Parameter e o RError com correção.

Para chegar ao RError próximo de zero foi aplicado a Equação 3.3. A aplicação

da filtragem inversa tem como resultado a aproximação da imagem original multipli-

cando valor a valor da matriz de ruído G(u,v) por 1H(u,v) , onde este representa a inver-

são de cada valor da matriz e não a inversão da matriz por inteiro [30]. Após aplicação

da filtragem inversa, os filtros podem ser aplicados.

F(u, v) =1

H(u, v)G(u, v) (3.3)

O Algoritmo 3.1 e Algoritmo 3.2, foram criados com base no FFmpeg, que é uma

biblioteca gratuita para manusear dados multimídia. O FFmpeg foi escrito usando a lin-

guagem de programação C, e encontra-se disponível para várias plataformas, sistemas

operacionais e linguagens de programação [31].

Page 49: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 49

Algorithm 3.1 Implementação em Java para conversão.

public byte[] criarImagemDoVideo(byte[] bytes) (throws IOException {InputStream inputStream = (new ByteArrayInputStream(bytes);Java2DFrameConverter converter = (new Java2DFrameConverter();FFmpegFrameGrabber grabber = (new FFmpegFrameGrabber(inputStream);grabber.setImageWidth(x);grabber.setImageHeight(y);grabber.start();Frame frame = grabber.grabImage();BufferedImage grabbedImage = converter.convert(frame);ByteArrayOutputStream byteArrayOutputStream =

(new ByteArrayOutputStream();ImageIO.write(grabbedImage, "jpg", byteArrayOutputStream);byteArrayOutputStream.flush();byte[] imageInByte = byteArrayOutputStream.toByteArray();byteArrayOutputStream.close();return imageInByte;

}

Algorithm 3.2 Implementação em JavaScript para conversão.

var sampleVideoData;function retrieveSampleVideo() {

var oReq = new XMLHttpRequest();oReq.open("GET", "webm", true);oReq.responseType = "arraybuffer";oReq.onload = function (oEvent) {

var arrayBuffer = oReq.response;if (arrayBuffer) {

sampleVideoData = new Uint8Array(arrayBuffer);}

}; oReq.send(null);}

function getDownloadLink(fileData, fileName) {var a = document.createElement(’a’);a.download = fileName;var blob = new Blob([fileData]);var src = window.URL.createObjectURL(blob);a.href = src;a.textContent = ” + fileName +;return a;

}

var result = ffmpeg_run(module);result.forEach(function(file) {

getDownloadLink(file.data, file.name);});

Page 50: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 50

3.1.2 Filtros

O objetivo principal de efetuar uma filtragem na imagem/quadro é melhorar a

qualidade. Isso pode ser feito, através da ampliação do seu contraste, eliminação de

padrões periódicos ou aleatórios, melhoria no seu foco e acentuação de características.

Existem diversos modelos de classificação para filtragem, o primeiro é o domínio ou

espaço em que atuam, sendo da frequência ou espacial. Depois, se observa o tipo de

frequência, se é passa baixa, passa alta ou passa faixa. A classificação em linearidade,

tem a identificação de linear ou não linear. E por último, o tipo de aplicação, ou seja, se

é suavização, contraste, adaptativos, globais, janelados ou locais.

3.1.2.1 Domínio da Frequência

No domínio da frequência, as técnicas fundamentadas são baseadas no teorema

da convolução, explicado na subseção 3.1.2.3, que é uma das propriedades da transfor-

mada de Fourier. Com isso, o processamento digital de imagem/vídeo no domínio da

frequência é realizado seguindo alguns passos, no primeiro a imagem é transformada

do domínio espacial para o da frequência (transformada de Fourier). Depois, são feitas

operações de filtragem na imagem e realiza-se o processo inverso, onde a imagem no

domínio da frequência é transformada para o domínio espacial, para que a imagem

possa ser exibida e vista pelo olho humano [14], como visualizado pela Figura 3.8.

Figura 3.8 – Processamento de imagem/quadro usando Fourier (baseado em [14]).

A transformada de Fourier (desenvolvida pelo matemático francês Jean Baptiste

Joseph Fourier) é uma ferramenta matemática fundamental na solução de problemas

na área de processamento digital de imagem/vídeo. A utilização de suas formas dis-

creta (DFT - Discrete Fourier Transform) e rápida (FFT - Fast Fourier Transform) e o enten-

dimento de suas propriedades são muito importantes, já que, a mudança de domínio

Page 51: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 51

do espaço para o domínio da frequência e vice-versa, ocorre através dessas transfor-

madas. Na transformada de Fourier, não há perda da informação durante a mudança

de domínios, apenas a informação visual da imagem está representada de uma ou-

tra forma, no domínio da frequência [14]. A transformada de Fourier de uma função

contínua f (x) de uma variável real x é modelada matematicamente na Equação 3.4.

F(u) =∫ ∞

−∞f (x)exp [−j2πux] dx (3.4)

Onde j =√−1. A partir de F(u), pode-se obter f (x) através da transformada

inversa de Fourier, representada na Equação 3.5.

f (x) =∫ ∞

−∞F(u)exp [j2πux] du (3.5)

A Equação 3.4 e Equação 3.5, são chamadas de par de transformada de Fourier e

podem existir se forem integráveis e se f (x) for contínua. A transformada de Fourier

de uma função f (x), é uma função complexa e pode ser expressa pela soma de suas

componentes, real (R) e imaginaria (I), representada na Equação 3.6.

F(u) = R(u) + jI(u) (3.6)

É usual, para obter-se o espectro de Fourier e o ângulo de fase da função f (x),

expressar a Equação 3.6 na forma exponencial, como representado na Equação 3.7.

F(u) = |F(u)| ejθ(u) (3.7)

Com isso obtêm-se o espectro de Fourier, representado na Equação 3.8.

|F(u)| =[

R2(u) + I2(u)] 1

2 (3.8)

Page 52: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 52

E o ângulo de fase, representado na Equação 3.9.

φ(u) = tan−1[

I(u)R(u)

](3.9)

Além disso, pode-se obter o espectro de potência da função, elevando-se ao qua-

drado, como representado na Equação 3.10.

P(u) = R2(u) + I2(u) (3.10)

A transformada de Fourier de uma função unidimensional pode ser implemen-

tada para uma função bidimensional f (x, y), como representada na Equação 3.11.

F(u, v) =∫ ∞

−∞

∫ ∞

−∞f (x, y)exp [−j2π(ux + vy)] dxdy (3.11)

E a partir de F(u, v), pode-se obter f (x, y) através da transformada inversa de

Fourier, como representada na Equação 3.12.

f (x, y) =∫ ∞

−∞

∫ ∞

−∞F(u, v)exp [j2π(ux + vy)] dudv (3.12)

A transformada de Fourier bidimensional de uma função de f (x, y) é uma função

complexa e pode ser expressa pela soma de componentes reais (R) e imaginárias (I),

representada na Equação 3.13.

F(u, v) = R(u, v) + jI(u, v) (3.13)

Como no caso unidimensional, o espectro de Fourier (Equação 3.14), o ângulo de

fase (Equação 3.15) e o espectro da potência (Equação 3.16) podem ser representados.

∣∣∣F(u, v) =[

R2(u, v) + I2(u, v)]∣∣∣ 1

2 (3.14)

Page 53: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 53

φ(u, v) = tan−1[

I(u, v)R(u, v)

](3.15)

P(u, v) = R2(u, v) + I2(u, v) (3.16)

Como o objetivo é a utilização da transformada de Fourier aplicada ao proces-

samento de digital de imagem/vídeo. Uma imagem/quadro pode ser representada

através de uma função bidimensional I(x, y) e esta pode ser transformada em um con-

junto de frequências espaciais F(u, v). Um único ponto F(u, v), representa quanto de

frequência espacial é contida pela imagem, no domínio da frequência. Ao produto

F(u, v)H(u, v) (H(u, v) representa o filtro) é aplicada a inversa da transformada de

Fourier para retornar ao domínio espacial, onde se tem a imagem processada I′(x, y)

[14], como visualizado pela Figura 3.9.

Figura 3.9 – Os passos da filtragem no domínio de Fourier.

Page 54: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 54

3.1.2.1.1 Filtro Passa Baixa

A força de uma imagem/quadro, geralmente está concentrada nas componentes

de baixa frequência, ou seja, as componentes de alta frequência representam pouca

força da imagem/quadro. Portanto, utilizando um filtro passa baixa obtém-se uma

imagem menos nítida ou suavizada, no qual, ocorre uma perda de detalhes que são os

componentes de altas frequências [13].

No espectro de Fourier da Figura 3.10, é fácil perceber a presença dos ruídos

representados pelas altas frequências, ou seja, as informações que estão mais afastadas

da origem. Neste caso, as baixas frequências serão mantidas e as altas frequências, fora

do círculo de raio r, presentes na transformada da imagem F(u, v), serão removidas.

Figura 3.10 – Resultado da filtragem passa baixa (adaptado de [13]).

Na Equação 3.17, o filtro é chamado de passa baixa ideal, já que todas as frequên-

cias, dentro do círculo de raio r, são passadas sem atenuação e todas as fora do círculo

são retidas completamente.

H(u, v) =

1 ∴ u2 + v2 < r2

0 ∴ u2 + v2 ≥ r2(3.17)

Page 55: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 55

3.1.2.1.2 Filtro Passa Alta

A filtragem passa alta é uma operação contrária à filtragem passa baixa, já que,

as componentes de alta frequência da transformada de Fourier não são alterados, en-

quanto os de baixa frequência são removidos. Isto faz com que os detalhes finos da

imagem sejam enfatizados [13], como visualizado na Figura 3.11.

Figura 3.11 – Resultado da filtragem passa alta (adaptado de [13]).

Na Equação 3.18, o filtro é chamado de passa alta ideal, já que todas as frequên-

cias, fora do círculo de raio r, são passadas sem atenuação e todas as dentro do círculo

são retidas completamente.

H(u, v) =

0 ∴ u2 + v2 < r2

1 ∴ u2 + v2 ≥ r2(3.18)

3.1.2.1.3 Filtro de Gabor

O filtro de Gabor é linear bidimensional, não variante com o deslocamento e pode

ser entendido como o produto de uma função gaussiana, simétrica em relação à origem

e uma função cossenoidal. Com aplicações variadas como, a segmentação de imagens,

o reconhecimento de faces, o reconhecimento de assinaturas e a melhoria e identifica-

ção de impressões digitais [32] [33]. Matematicamente expressa como representada na

Equação 3.19.

Page 56: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 56

G(x, y, f , θ, σ) = exp

[−1

2

(x2

θ

σ2x+

y2θ

σ2y

)]exp [2π j f (xθ)] (3.19)

No qual, xθ = xcosθ + ysenθ, yθ = −xsenθ + ycosθ e x, y são as coordenadas da

imagem, j =√−1. Sendo, f a frequência da onda no plano senoidal, θk a orientação

do filtro, e σx e σy são o desvio padrão da função gaussiana ao longo dos eixos x e y.

Decomposto assim, em componentes reais (Equação 3.27) e imaginárias (Equação 3.28).

Greal(x, y, f , θ, σ) = exp

[−1

2

(x2

θ

σ2x+

y2θ

σ2y

)]cos (2π f (xθ)) (3.20)

Gimag(x, y, f , θ, σ) = exp

[−1

2

(x2

θ

σ2x+

y2θ

σ2y

)]sen (2π f (xθ)) (3.21)

Sendo Gcomplexo = Greal + jGimag, podendo ser representada como na Equação 3.29.

Com isso, a função gaussiana é representada na Equação 3.30 e a função cossenoidal

na Equação 3.24.

Greal(x, y, f , θ, σ) = W(x, y, θ, σ)V(x, f ) (3.22)

W(x, y, θ, σ) = exp[−12(

x2θ

σ2x+

y2θ

σ2y)] (3.23)

V(y, f ) = cos(2π f xθ) (3.24)

A função Greal(x, y, f , θ, σ) é obtida pelo produto de uma gaussiana por uma cos-

senoidal de frequência f , então pode ser representada no domínio da frequência e sua

transformada de Fourier pode ser obtida pela convolução da transformada de Fourier

dessas duas funções [32] [33]. O resultado dessa convolução é um filtro passa banda,

que realça as senóídes com frequências em torno de f , suprimindo seus ruídos. Con-

tudo, uma das dificuldades para utilização do filtro de Gabor é a escolha ou obtenção

de seus parâmetros, como visualizado na Figura 3.12 e Figura 3.13.

Page 57: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 57

Figura 3.12 – Resultado do filtro Gabor, com o parâmetro f incorreto e correto(adaptado de [32] [33]).

Figura 3.13 – Resultado do filtro Gabor, com o parâmetro θ incorreto e correto(adaptado de [32] [33]).

3.1.2.2 Domínio Espacial

Os métodos de filtragem que trabalham no domínio espacial operam direta-

mente sobre os pixels, normalmente utilizando operações de convolução com máscaras,

explicado na subseção 3.1.2.3. Essas máscaras são pequenas matrizes bidimensionais e

os valores de seus coeficientes determinam o objetivo a ser alcançado durante o pro-

cessamento. Os pixels que compõem uma imagem e os métodos neste domínio são

procedimentos que operam diretamente sobre esses pixels [15], como representada na

Equação 3.25.

g(xi, yi) = T[ f (xi, yi)] (3.25)

Onde, f (xi, yi) é a imagem de entrada a ser filtrada, g(xi, yi) é a imagem resul-

tante, e T é um operador sobre f , definido em alguma vizinhança do pixel de posição

(xi, yi), como visualizado na Figura 3.14.

Page 58: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 58

Figura 3.14 – Processo de convolução por filtragem espacial usando máscara (baseadoem [15]).

Com o uso da Figura 3.14, a imagem resultante é gerada utilizando a técnica de

vizinhança de pixels, multiplicado pelo filtro desejado, como representada na Equa-

ção 3.26.

g(x, y) = T[ f (x, y)] =

Z0 f (x− 1, y− 1) + Z1 f (x, y− 1) + Z2 f (x + 1, y− 1)+

Z3 f (x− 1, y) + Z4 f (x, y) + Z5 f (x + 1, y)+

Z6 f (x− 1, y + 1) + Z7 f (x, y + 1) + Z8 f (x + 1, y + 1)

(3.26)

Existem dois modelos de filtros que são os lineares e os não-lineares. Os filtros

lineares usam máscaras que realizam somas ponderadas das intensidades de pixels ao

longo da imagem. Se pesos diferentes forem usados em partes diferentes da imagem, o

filtro linear é considerado espacialmente variante. E os filtros não-lineares são qualquer

filtro que não é uma soma ponderada de pixels.

Outro ponto, é em relação aos patamares e descontinuidades nas intensidades da

imagem/quadro, como visualizado na Figura 3.15, no qual, tem o objetivo de acentu-

ação de contornos, que é enfatizar detalhes dos limites de objetos de modo a permitir

sua identificação e análise posterior. Com isso, existem três pontos de análise: o con-

torno, que é identificado por mudanças locais de intensidade significativas na imagem,

ocorrendo tipicamente na separação de duas regiões diferentes. As regiões ou objetos,

que são identificados por patamares mais ou menos constantes de tons e cores, e por

Page 59: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 59

último, a fronteira, que ocorre onde a função de intensidade da imagem ( f (xi, yi)), va-

ria bruscamente, consistindo em limites de regiões cujos valores de cor apresentam

grandes diferenças [10].

Figura 3.15 – Descontinuidades nas intensidades da imagem/quadro: (A) TipoDegrau; (B) Tipo Pico; e (C) Tipo Rampa.

Por último, os tipos mais importantes de filtros no domínio espacial são os de

suavização e acentuação. O filtro de suavização, tem o objetivo de suavizar a imagem

pela redução das variações nos níveis de cinza, que dão à aparência de “serrilhado”

nos patamares de intensidade, atenuar as altas frequências, que correspondem às tran-

sições abruptas e minimizar os ruídos. E o filtro de acentuação, atenuam ou eliminam

as baixas frequências, realçando assim, as altas frequências, são usados para realçar

os detalhes na imagem (intensificação ou sharpening), destacam características como

bordas, linhas, curvas e manchas e tornam mais nítidas as transições entre regiões di-

ferentes (como os contornos), realçando o contraste [10].

Page 60: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 60

3.1.2.3 Convolução de Imagem

A convolução de uma imagem f (x, y) com uma outra imagem/filtro h(x, y) gera

uma terceira imagem g(x, y), estando os valores compreendidos no intervalo, x ∴

[0, M− 1] e y ∴ [0, N − 1]. Sendo M e N a quantidade de linhas e colunas dessas ima-

gens e asterisco (∗) o operador que indica a convolução [34]. Com isso, a Equação 3.27

e Equação 3.28 são apresentadas.

g(x, y) = f (x, y) ∗ h(x, y) (3.27)

g(x, y) =1

MN

M−1

∑m=o

N−1

∑n=o

f (m, n)h(x−m, y− n) (3.28)

O sinal negativo (−m) e (−n) significa que a função no processo de cálculo da

convolução é espelhada sobre a origem. Na Equação 3.28, é feito um espelhamento

da função h(x, y) sobre a origem, depois desloca a função h(x, y) pelo incremento dos

valores de (m, n) e calcula a soma dos produtos sobre os valores de m e n, para cada

deslocamento. Esses deslocamentos são incrementos inteiros que são interrompidos

quando as funções não mais se sobrepõem [15] [34].

Como as transformadas de Fourier são F(u, v) 7→ f (x, y) e H(u, v) 7→ h(x, y),

o teorema da convolução demonstra que f (x, y) ∗ h(x, y) e F(u, v)H(u, v) constituem

um par de transformadas de Fourier. Com isso, obtém a Equação 3.29 e Equação 3.30

no domínio da frequência.

f (x, y) ∗ h(x, y)⇔ F(u, v)H(u, v) (3.29)

f (x, y)h(x, y)⇔ F(u, v) ∗ H(u, v) (3.30)

Essa relação indica que a convolução pode ser obtida pela transformada de Fou-

rier inversa do produto F(u, v)H(u, v). Portanto, a convolução entre duas funções no

Page 61: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 61

domínio espacial tem como transformada a multiplicação das transformadas das duas

funções no domínio da frequência, e vice-versa [15]. No Algoritmo 3.3, é apresentado

em JavaScript a convolução de uma imagem/quadro e no Algoritmo 3.4, é apresentado

a mesma funcionalidade, mas em Java.

Algorithm 3.3 Implementação em JavaScript da convolução.

convolution = function(pixels, weights) {var side = Math.round(Math.sqrt(weights.length));var halfSide = Math.floor(side/2), src = pixels.data;var canvasWidth = pixels.width, canvasHeight = pixels.height;var temporaryCanvas = document.createElement(’canvas’);var temporaryCtx = temporaryCanvas.getContext(’2d’);var outputData = temporaryCtx.createImageData(canvasWidth,

canvasHeight);for (var y = 0; y < canvasHeight; y++) {

for (var x = 0; x < canvasWidth; x++) {var dstOff = (y * canvasWidth + x) * 4, sumReds = 0, sumGreens = 0,

sumBlues = 0, sumAlphas = 0;for (var kernelY = 0; kernelY < side; kernelY++) {for (var kernelX = 0; kernelX < side; kernelX++) {

var currentKernelY = y + kernelY - halfSide,currentKernelX = x + kernelX - halfSide;

if (currentKernelY >= 0 && currentKernelY < canvasHeight&& currentKernelX >= 0 && currentKernelX< canvasWidth) {var offset = (currentKernelY * canvasWidth

+ currentKernelX) * 4, weight = weights[kernelY* side + kernelX];

sumReds += src[offset] * weight;sumGreens += src[offset + 1] * weight;sumBlues += src[offset + 2] * weight;

} } }outputData.data[dstOff] = sumReds;outputData.data[dstOff+1] = sumGreens;outputData.data[dstOff+2] = sumBlues;outputData.data[dstOff+3] = 255;

} } return outputData;};

getImage = function(img) {var c = document.createElement(’canvas’);

c.width = img.width;c.height = img.height;

var ctx = c.getContext(’2d’);return ctx.getImageData(0, 0, img.width, img.height);

};

Page 62: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 62

Algorithm 3.4 Implementação em Java da convolução.

public BufferedImage convolve(BufferedImage img, float[ ][ ] kernel) {BufferedImage out = new BufferedImage(img.getWidth(), img.getHeight(),

BufferedImage.TYPE_INT_RGB);for (int y = 0; y < img.getHeight(); y++) {

for (int x = 0; x < img.getWidth(); x++) {float r = 0.0f;float g = 0.0f;float b = 0.0f;for (int ky = 0; ky < 3; ky++) {

for (int kx = 0; kx < 3; kx++) {int px = x + (kx-1);int py = y + (ky-1);if (px < 0 || px >= img.getWidth() ||

py < 0 || py >= img.getHeight()) {continue;

}Color pixel = new Color(img.getRGB(px, py));r += pixel.getRed() * kernel[kx][ky];g += pixel.getGreen() * kernel[kx][ky];b += pixel.getBlue() * kernel[kx][ky];

}}out.setRGB(x, y, toColor(r, g, b));

}}return out;

}

public int clamp(float value) {int v = (int)value;return v > 255 ? 255 : (v < 0 ? 0 : v);

}

private int toColor(float r, float g, float b) {return new Color(clamp(r), clamp(g), clamp(b)).getRGB();

}

private void salvar(BufferedImage img, String name) throws IOException {ImageIO.write(img, "jpg", new File(name + ".jpg"));System.out.printf("Salvo %s.png%n", name);

}

Page 63: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 63

3.1.2.4 Filtros Personalizados - Vídeo

Os filtros personalizados desenvolvidos para serem aplicados no vídeo em “tempo

real”, apresentando 1,2ms de atraso na sua visualização, levam em consideração os fil-

tros gráficos, que são obtidos com o uso de uma propriedade muito conhecida pelos

designers, o CSS (Cascading Style Sheets) filtre, destinado a aplicar efeitos em um ele-

mento da marcação HTML (Hypertext Markup Language) [35].

No caso, o CSS é um mecanismo para adicionar estilo a um documento web, para

ele funcionar na linguagem Java foi preciso criar um algoritmo em Lisp, que vem de

List Processing (a lista é a estrutura de dados fundamental desta linguagem). Tanto os

dados como o programa são representados como listas, o que permite que a lingua-

gem manipule o código fonte como qualquer outro tipo de dados [36], com isso, ele

interpreta o HTML/CSS e converte para o Java, como apresentado no Algoritmo 3.5.

Algorithm 3.5 Implementação em Lisp do CSS filtre.

((send "<html><head><title>")(send (progn *title*))(send «/title></head><body><table><tr><th>n</th><th>n<sup>2

</sup></th></tr>")(send (progn (with-output-to-string (strm)

(dolist (n n-lst)(format strm " &<tr><td> A</td><td> A</td></tr>"

n (expt n 2))))))(send "</table></body></html>"))

(defun read-template (template)(mappend #’(lambda (lst2)

(list ‘(send ,(first lst2) strm)(read-from-string(format nil "(send (progn % A %) strm)"

(second lst2)))))(split-template-into-pairs template)))

(defun call-template (pn &optional (strm *standard-output*) ht)(funcall (load-template pn) strm ht))

(defun load-template (pn)(eval ‘#’(lambda (&optional (strm *standard-output*) ht)

,(read-template (slurp-file pn)))))

Page 64: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 64

O CSS filtre altera somente a camada superior da imagem, manipulando os pixels,

sem precisar aplicar nenhum processo criterioso de convolução. Os filtros desenvolvi-

dos foram:

Blur: Esse filtro aplicará desfoque gaussiano aos quadros. Tendo que inserir o

valor do comprimento que determinará quantos pixels precisarão ser mesclados. Isso

implica que, quanto maior o valor, mais desfoque no quadro terá. O valor 0 será usado

se não especificar o parâmetro, além de, não aceitar valores negativos [35] [37]. Na

Figura 3.16, vários exemplos da aplicação do filtro são visualizados, e o Algoritmo 3.6,

apresenta a implementação do filtro.

Figura 3.16 – Filtro Blur em vídeo [37].

Algorithm 3.6 Implementação do filtro Blur em CSS.

img {-webkit-filter: blur(<length>px);-moz-filter: blur(<length>px);-ms-filter: blur(<length>px);-o-filter: blur(<length>px);filter: blur(<length>px);

}

Page 65: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 65

Brightness: Esse filtro aplicará um multiplicador linear aos quadros, tornando-os

mais claros ou escuros, comparando aos originais. Aceita números ou valores percen-

tuais e não aceita valores negativos. Com 0%, o quadro fica todo preto e com 100%,

um quadro sem mudanças. Valores mais altos resultarão em quadros mais claros. Um

valor alto suficiente deixará o quadro praticamente branco [35] [37]. Na Figura 3.17,

vários exemplos da aplicação do filtro são visualizados, e o Algoritmo 3.7, apresenta a

implementação do filtro.

Figura 3.17 – Filtro Brightness em vídeo [37].

Algorithm 3.7 Implementação do filtro Brightness em CSS.

img {-webkit-filter: brightness([ <number> | <percentage> ]);-moz-filter: brightness([ <number> | <percentage> ]);-ms-filter: brightness([ <number> | <percentage> ]);-o-filter: brightness([ <number> | <percentage> ]);filter: brightness([ <number> | <percentage> ]);

}

Contrast: Esse filtro altera o contraste dos quadros. Aceita números ou valores

percentuais e não aceita valores negativos. O valor 0% dará um quadro totalmente

cinza e o de de 100% não causa qualquer efeito. Valores maiores que 100% produzirão

Page 66: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 66

quadros com alto contraste [35] [37]. Na Figura 3.18, vários exemplos da aplicação do

filtro são visualizados, e o Algoritmo 3.8, apresenta a implementação do filtro.

Figura 3.18 – Filtro Contrast em vídeo [37].

Grayscale: Esse filtro tornará os quadros em tons de cinza. 0% deixa o quadro

inalterado, enquanto 100% fará o quadro completamente em tom de cinza. Qualquer

valor entre esses dois, será um multiplicador linear para esse efeito e não aceita va-

lores negativos [35] [37]. Na Figura 3.19, vários exemplos da aplicação do filtro são

visualizados, e o Algoritmo 3.9, apresenta a implementação do filtro.

Figura 3.19 – Filtro Grayscale em vídeo [37].

Page 67: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 67

Algorithm 3.8 Implementação do filtro Contrast em CSS.

img {-webkit-filter: contrast([ <number> | <percentage> ]);-moz-filter: contrast([ <number> | <percentage> ]);-ms-filter: contrast([ <number> | <percentage> ]);-o-filter: contrast([ <number> | <percentage> ]);filter: contrast([ <number> | <percentage> ]);

}

Algorithm 3.9 Implementação do filtro Grayscale em CSS.

img {-webkit-filter: grayscale([ <number> | <percentage> ]);-moz-filter: grayscale([ <number> | <percentage> ]);-ms-filter: grayscale([ <number> | <percentage> ]);-o-filter: grayscale([ <number> | <percentage> ]);filter: grayscale([ <number> | <percentage> ]);

}

Hue-rotate: Esse filtro aplicará uma rotação de matriz aos quadros. O parâmetro

(em valor angular) determinará o número de graus ao redor do círculo de cor que o

quadro será ajustado. Com 0deg, o quadro ficará inalterado, igualmente com 360deg,

já que o número de graus está exatamente sobre o mesmo ponto do círculo de cor

[35] [37]. Na Figura 3.20, vários exemplos da aplicação do filtro são visualizados, e o

Algoritmo 3.10, apresenta a implementação do filtro.

Figura 3.20 – Filtro Hue-rotate em vídeo [37].

Page 68: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 68

Algorithm 3.10 Implementação do filtro Hue-rotate em CSS.

img {-webkit-filter: hue-rotate(<angle>);-moz-filter: hue-rotate(<angle>);-ms-filter: hue-rotate(<angle>);-o-filter: hue-rotate(<angle>);filter: hue-rotate(<angle>);

}

Invert: Esse filtro inverterá o quadro. A quantidade de inversão dependerá do

valor passado como parâmetro. 0% causará nenhum efeito ao quadro, por outro lado,

100% inverterá completamente e 50% gerará um quadro totalmente cinza. Qualquer

valor entre os extremos será um multiplicador linear e não aceita valores negativos

[35] [37]. Na Figura 3.21, vários exemplos da aplicação do filtro são visualizados, e o

Algoritmo 3.11, apresenta a implementação do filtro.

Figura 3.21 – Filtro Invert em vídeo [37].

Algorithm 3.11 Implementação do filtro Invert em CSS.

img {-webkit-filter: invert([ <number> | <percentage> ]);-moz-filter: invert([ <number> | <percentage> ]);-ms-filter: invert([ <number> | <percentage> ]);-o-filter: invert([ <number> | <percentage> ]);filter: invert([ <number> | <percentage> ]);

}

Page 69: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 69

Opacity: O filtro de opacidade aplica transparência ao quadro. 0% significa ter

0% de opacidade, ou seja, transparência total. Similarmente, 100% resulta em um qua-

dro totalmente opaco [35] [37]. Na Figura 3.22, vários exemplos da aplicação do filtro

são visualizados, e o Algoritmo 3.12, apresenta a implementação do filtro.

Figura 3.22 – Filtro Opacity em vídeo [37].

Algorithm 3.12 Implementação do filtro Opacity em CSS.

img {-webkit-filter: opacity([ <number> | <percentage> ]);-moz-filter: opacity([ <number> | <percentage> ]);-ms-filter: opacity([ <number> | <percentage> ]);-o-filter: opacity([ <number> | <percentage> ]);filter: opacity([ <number> | <percentage> ]);

}

Saturate: Esse filtro determina a saturação do quadro. A saturação depende do

valor passado e não aceita usar valores negativos. 0%, valor mínimo, o quadro estará

totalmente não saturado e com saturação em 100%, o quadro fica inalterado. Somente

usar valores acima de 100%, para quadros supersaturados [35] [37]. Na Figura 3.23,

vários exemplos da aplicação do filtro são visualizados, e o Algoritmo 3.13, apresenta

a implementação do filtro.

Page 70: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 70

Figura 3.23 – Filtro Saturate em vídeo [37].

Sepia: O filtro transforma os quadros em tons de sépia (uma cor marrom-avermelhada).

Com 100%, será totalmente sépia e com 0% o quadro ficará inalterado. Valores interme-

diários serão multiplicadores lineares para o filtro e não aceita usar valores negativos

[35] [37]. Na Figura 3.24, vários exemplos da aplicação do filtro são visualizados, e o

Algoritmo 3.14, apresenta a implementação do filtro.

Figura 3.24 – Filtro Sepia em vídeo [37].

Page 71: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 71

Algorithm 3.13 Implementação do filtro Saturate em CSS.

img {-webkit-filter: saturate([ <number> | <percentage> ]);-moz-filter: saturate([ <number> | <percentage> ]);-ms-filter: saturate([ <number> | <percentage> ]);-o-filter: saturate([ <number> | <percentage> ]);filter: saturate([ <number> | <percentage> ]);

}

Algorithm 3.14 Implementação do filtro Sepia em CSS.

img {-webkit-filter: sepia([ <number> | <percentage> ]);-moz-filter: sepia([ <number> | <percentage> ]);-ms-filter: sepia([ <number> | <percentage> ]);-o-filter: sepia([ <number> | <percentage> ]);filter: sepia([ <number> | <percentage> ]);

}

3.1.2.5 Filtros Personalizados - Imagem

Os filtros personalizados desenvolvidos para serem aplicados na imagem/qua-

dro, utilizam como base o método de convolução (apresentado na subseção 3.1.2.3).

Alguns filtros não utilizam de convolução devido ao método da aplicação depender

somente de uma multiplicação simples de matrizes entre todas os pixels das camadas

de uma imagem/quadro RGB (R - Red, G - Green e B - Blue). Nesse caso, é preciso so-

mente criar uma função que retorna o valor de cada pixel da imagem/quadro, e então,

a máscara percorre a matriz imagem/quadro efetuando as transformações solicitadas

[10] [38].

No caso, os filtros foram desenvolvidos em JavaScript, que é uma linguagem web,

sendo assim, para seu funcionamento na versão em Java, o algoritmo de filtragem se-

gue o mesmo padrão da subseção 3.1.2.4, fazendo o uso da implementação em lingua-

gem Lisp [36], com isso, ele interpreta o HTML/JavaScript e converte para o Java. Os

filtros desenvolvidos foram:

Blue: Esse filtro tem a funcionalidade de separar a componente responsável pela

camada azul da imagem/quadro [10] [38], como visualizado na Figura 3.25 e imple-

mentado no Algoritmo 3.15.

Page 72: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 72

Figura 3.25 – Filtro Blue em imagem/quadro.

Algorithm 3.15 Implementação em JavaScript do filtro Blue.

blue = function(pixels, args) {var d = pixels.data;for (var i = 0; i < d.length; i += 4) {

d[i] = 0;d[i+1] = 0;

}return pixels;

};

GrayScale: Esse filtro tem a funcionalidade de tornar a imagem/quadro em es-

cala de cinza. A partir das camadas RGB (R - Red, G - Green e B - Blue), realiza-se o

cálculo apresentado na Equação 3.31.

grayscale = 0.2126R + 0.7152G + 0.0722B (3.31)

Os valores da Equação 3.31 estão relacionados a sensibilidade do olho humano

[39] [40], como visualizado na Figura 3.26 e implementado no Algoritmo 3.16.

Green: Esse filtro tem a funcionalidade de separar a componente responsável

pela camada verde da imagem/quadro [10] [38], como visualizado na Figura 3.27 e

implementado no Algoritmo 3.17.

Page 73: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 73

Figura 3.26 – Filtro GrayScale em imagem/quadro.

Algorithm 3.16 Implementação em JavaScript do filtro GrayScale.

grayscale = function(pixels, args) {for (var i = 0; i < pixels.data.length; i += 4) {var r = pixels.data[i],

g = pixels.data[i+1],b = pixels.data[i+2];

pixels.data[i] = pixels.data[i+1] = pixels.data[i+2] =0.2126*r + 0.7152*g + 0.0722*b;

}return pixels;

};

Figura 3.27 – Filtro Green em imagem/quadro.

Page 74: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 74

Algorithm 3.17 Implementação em JavaScript do filtro Green.

green = function(pixels, args) {var d = pixels.data;for (var i = 0; i < d.length; i += 4) {

d[i] = 0;d[i+2] = 0;

}return pixels;

};

Invert: Esse filtro é responsável por fazer uma operação que modifica o valor

do pixel para seu inverso, realizando uma diferença em cada componente da imagem,

ou seja, em cada camada, em relação ao branco (255) [39] [40], como visualizado na

Figura 3.28 e implementado no Algoritmo 3.18.

Figura 3.28 – Filtro Invert em imagem/quadro.

Algorithm 3.18 Implementação em JavaScript do filtro Invert.

invert = function(pixels, args) {for (var i = 0; i < pixels.data.length; i += 4) {

pixels.data[i] = 255 - pixels.data[i];pixels.data[i+1] = 255 - pixels.data[i+1];pixels.data[i+2] = 255 - pixels.data[i+2];

}return pixels;

};

Page 75: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 75

Red: Esse filtro tem a funcionalidade de separar a componente responsável pela

camada vermelha da imagem/quadro [10] [38], como visualizado na Figura 3.29 e im-

plementado no Algoritmo 3.19.

Figura 3.29 – Filtro Red em imagem/quadro.

Algorithm 3.19 Implementação em JavaScript do filtro Red.

red = function(pixels, args) {var d = pixels.data;for (var i = 0; i < d.length; i += 4) {

d[i] = d[i];d[i+1] = 0;d[i+2] = 0;

}return pixels;

};

Saturation: O efeito obtido com aplicação deste filtro, é o de saturar as cores da

imagem/quadro. Para isso, é utilizado de uma técnica, na qual, multiplicasse as cama-

das da imagem/quadro por valores obtidos por meio de um número pré-estabelecido

e depois soma eles a própria camada novamente [39] [40], como visualizado na Fi-

gura 3.30 e implementado no Algoritmo 3.20.

Page 76: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 76

Figura 3.30 – Filtro Saturation em imagem/quadro.

Algorithm 3.20 Implementação em JavaScript do filtro Saturation.

saturation = function(pixels, args) {var level = 2.9,

RW = 0.3086,RG = 0.6084,RB = 0.0820,RW0 = (1 - level) * RW + level,RW1 = (1 - level) * RW,RW2 = (1 - level) * RW,RG0 = (1 - level) * RG,RG1 = (1 - level) * RG + level,RG2 = (1 - level) * RG,RB0 = (1 - level) * RB,RB1 = (1 - level) * RB,RB2 = (1 - level) * RB + level;

for (var i = 0; i < pixels.data.length; i += 4) {pixels.data[i] = RW0*pixels.data[i] + RG0*pixels.data[i+1]

+ RB0*pixels.data[i+2];pixels.data[i+1] = RW1*pixels.data[i] + RG1*pixels.data[i+1]

+ RB1*pixels.data[i+2];pixels.data[i+2] = RW2*pixels.data[i] + RG2*pixels.data[i+1]

+ RB2*pixels.data[i+2];}return pixels;

};

Page 77: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 77

Sepia: Esse filtro somente pode ser obtido, após a imagem/quadro ter passado

pela máscara de tons de cinza (grayscale), realizando o cálculo de intensidade, como

apresentado na Equação 3.32.

sepia = 40R + 20G− 20B (3.32)

Deixando a imagem/quadro com uma aparência envelhecida [39] [40], como vi-

sualizado na Figura 3.31 e implementado no Algoritmo 3.21.

Figura 3.31 – Filtro Sepia em imagem/quadro.

Algorithm 3.21 Implementação em JavaScript do filtro Sepia.

sepia = function(pixels, args) {for (var i = 0; i < pixels.data.length; i += 4) {

var r = pixels.data[i],g = pixels.data[i+1],b = pixels.data[i+2];

pixels.data[i] = pixels.data[i+1] = pixels.data[i+2] =0.2126*r + 0.7152*g + 0.0722*b;

pixels.data[i] += 40;pixels.data[i+1] += 20;pixels.data[i+2] -= 20;

}return pixels;

};

Page 78: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 78

Thresholding: Esse filtro somente pode ser obtido, após a imagem/quadro ter

passado pela máscara de tons de cinza (grayscale), com isso, foi inserido um valor li-

mite, onde se o pixel originado da escala de cinza fosse acima de 128, seria convertido

para branco, caso o contrário, para preto [39] [40], como visualizado na Figura 3.32 e

implementado no Algoritmo 3.22.

Figura 3.32 – Filtro Thresholding em imagem/quadro.

Algorithm 3.22 Implementação em JavaScript do filtro Thresholding.

thresholding = function(pixels, args) {for (var i = 0; i < pixels.data.length; i += 4) {

var r = pixels.data[i],g = pixels.data[i+1],b = pixels.data[i+2];

var v = 0.2126*r + 0.7152*g + 0.0722*b;pixels.data[i] = pixels.data[i+1] = pixels.data[i+2] = v > 128 ? 255 : 0;

}return pixels;

};

Gaussian: É um filtro que reduz o nível de ruído de um sinal de entrada, di-

minuindo, assim, distorções na imagem/quadro. Normalmente utilizado para sua-

vização de imagens/quadros, sendo que não preserva as arestas das mesmas, sendo

equivalente a um filtro passa-baixa [39] [40], como visualizado na Figura 3.33 e imple-

mentado no Algoritmo 3.23.

Page 79: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 79

Figura 3.33 – Filtro Gaussian em imagem/quadro.

Algorithm 3.23 Implementação em JavaScript do filtro Gaussian.

gaussian = function(pixels, args) {var divider = 16,operator = [1/divider, 2/divider, 1/divider,

2/divider, 4/divider, 2/divider,1/divider, 2/divider, 1/divider];

return convolution(pixels, operator);};

Highpass: Esse filtro produz um sharpering da imagem/quadro, isto é, as tran-

sições entre regiões diferentes tornam-se mais nítidas. Este filtro é utilizado para re-

alçar algumas características da imagem/quadro, tais como bordas, linhas, curvas ou

manchas, mas enfatizam o ruído existente [39] [40], como visualizado na Figura 3.34 e

implementado no Algoritmo 3.24.

Figura 3.34 – Filtro Highpass em imagem/quadro.

Page 80: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 80

Algorithm 3.24 Implementação em JavaScript do filtro Highpass.

highpass = function(pixels, args) {var operator = [-1, -1, -1,

-1, 8, -1,-1, -1, -1];

return convolution(pixels, operator);};

Laplacian: O Filtro tem como função destacar regiões na qual acontecem uma rá-

pida variação de intensidade, ou seja, é considerado um filtro para detecção de bordas.

Em matemática, o operador de Laplace é um operador diferencial dado pela divergên-

cia do gradiente de uma função no espaço euclidiano [39] [40], como visualizado na

Figura 3.35 e implementado no Algoritmo 3.25.

Figura 3.35 – Filtro Laplacian em imagem/quadro.

Algorithm 3.25 Implementação em JavaScript do filtro Laplacian.

laplacian = function(pixels, args) {var operator = [ 0, -1, 0,

-1, 4, -1,0, -1, 0 ];

return convolution(pixels, operator);};

Page 81: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 81

Lowpass: Esse filtro tem a finalidade de suavizar a imagem/quadro, atenuando

as altas frequências, que são equivalentes às transições abruptas, minimizando ruídos

e dando um efeito de borramento na imagem/quadro [39] [40], como visualizado na

Figura 3.36 e implementado no Algoritmo 3.26.

Figura 3.36 – Filtro Lowpass em imagem/quadro.

Algorithm 3.26 Implementação em JavaScript do filtro Lowpass.

lowpass3 = function(pixels, args) {var k = 1/9;var operator = [ k, k, k,

k, k, k,k, k, k];

return convolution(pixels, operator);};

lowpass5 = function(pixels, args) {var k = 1/25;var operator = [ k, k, k, k, k,

k, k, k, k, k,k, k, k, k, k,k ,k, k, k, k,k ,k, k, k, k];

return convolution(pixels, operator);};

Page 82: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 82

Prewitt: É um filtro de detecção de bordas e um operador de diferenciação dis-

creta, ele calcula uma aproximação do gradiente da função de intensidade da ima-

gem/quadro. Em cada ponto da imagem/quadro, o resultado do operador de Prewitt

é o vetor gradiente correspondente ou a norma desse vetor. Matematicamente, o ope-

rador usa dois núcleos 3×3 que são aplicados por convolução com a imagem/quadro

original para calcular aproximações das derivadas, uma para mudanças horizontais e

uma para vertical, [39] [40], como visualizado na Figura 3.37 e implementado no Algo-

ritmo 3.27.

Figura 3.37 – Filtro Prewitt em imagem/quadro.

Algorithm 3.27 Implementação em JavaScript do filtro Prewitt.

prewittHorizontal = function(pixels, args) {var divider = 3;var operator = [1/divider, 1/divider, 1/divider,

0, 0, 0,-1/divider, -1/divider, -1/divider];

return convolution(pixels, operator);};

prewittVertical = function(pixels, args) {var divider = 3;var operator = [-1/divider, 0, 1/divider,

-1/divider, 0, 1/divider,-1/divider, 0, 1/divider];

return convolution(pixels, operator);};

Page 83: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 83

Sharpen: O filtro visa acentuar os contornos da imagem/quadro, proporcionando

um aumento de detalhe e nitidez, sempre que há um contorno entre duas áreas distin-

tas. Podendo ser entre claros e escuros ou entre cores diferentes, especialmente en-

tre pares de complementares: Ciano/Vermelho, Magenta/Verde e Amarelo/Roxo [39]

[40], como visualizado na Figura 3.38 e implementado no Algoritmo 3.28.

Figura 3.38 – Filtro Sharpen em imagem/quadro.

Algorithm 3.28 Implementação em JavaScript do filtro Sharpen.

sharpen = function(pixels, args) {var operator = [0, -0.2, 0,

-0.2, 1.8, -0.2,0, -0.2, 0];

return convolution(pixels, operator);};

Roberts: É uma aproximação simples da magnitude do gradiente ou de deriva-

das de imagens/quadros. Ele tem uma desvantagem, certas bordas são mais realçadas

do que outras dependendo da direção aplicada, mesmo com magnitude igual. O resul-

tado final, é uma imagem/quadro com altos valores de nível de cinza, em regiões de

variação de intensidade abruptas e valores mais baixos em regiões de limites suaves

[39] [40], como visualizado na Figura 3.39 e implementado no Algoritmo 3.29.

Page 84: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 84

Figura 3.39 – Filtro Roberts em imagem/quadro.

Algorithm 3.29 Implementação em JavaScript do filtro Roberts.

roberts = function(pixels, args) {var operator = [0, 0, 0,

1, -1, 0,0, 0, 0];

return convolution(pixels, operator);};

Sobel: É um filtro de detecção de bordas muito utilizado, funciona a partir da

aproximação do gradiente, ou seja, utiliza derivadas de imagens/quadros. Esse filtro

realça as linhas verticais e horizontais mais escuras que o fundo, sem realçar os pontos

isolados [39] [40], como visualizado na Figura 3.40 e implementado no Algoritmo 3.30.

Figura 3.40 – Filtro Sobel em imagem/quadro.

Page 85: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 85

Algorithm 3.30 Implementação em JavaScript do filtro Sobel.

sobelHorizontal = function(pixels, args) {var divider = 4,

operator = [ 1/divider, 2/divider, 1/divider,0, 0, 0,-1/divider, -2/divider, -1/divider ],

pixels = convolution(pixels, operator);return pixels;

};

sobelVertical = function(pixels, args) {var divider = 4,

operator = [ 1/divider, 0, -1/divider,2/divider, 0, -2/divider,1/divider, 0, -1/divider ],

pixels = convolution(pixels, operator);return pixels;

};

3.1.3 Histograma

O histograma de uma imagem traduz a distribuição estatística dos seus níveis

de cinza. Trata-se de uma representação gráfica do número de pixels associado a cada

nível de cinza presente em uma imagem, podendo também ser expressa em termos do

percentual do número total de pixels na imagem [41]. Com isso, o histograma H f (C) de

uma imagem digital f (x, y) com M linhas e N colunas, é apresentado na Equação 3.33.

H f (C) =nC

MN(3.33)

No qual, nC é o número de vezes em que o nível de cinza C aparece na imagem.

Muitas operações pontuais usam o histograma como parâmetro de decisão para forne-

cer resultados para o pixel da imagem processada, como na inversão da escala de cinza,

expansão de contraste e na equalização histogrâmica.

A inversão da escala de cinza de uma imagem pode ter diversas aplicações, uma

delas é que, em se tratando do negativo da imagem, após o registro fotográfico a partir

de um sensor, a revelação do negativo produzirá uma imagem positiva. Adicional-

mente, o negativo de uma imagem pode possibilitar melhor discriminação de alvos

Page 86: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 86

em determinados tipos de imagens.

Expansão de contraste, se faz necessária, toda vez que acontecer uma ilumina-

ção deficiente no instante da aquisição da imagem, abertura insuficiente do diafragma

da câmera, tempo de exposição demasiadamente curto ou problemas de natureza di-

versa no processo de digitalização, gerando imagens de baixo contraste. Sendo assim,

é preciso redistribuir os tons de cinza dos pixels de uma imagem de modo a elevar

o contraste na faixa de níveis possíveis, nos casos em que a faixa de tons de cinza já

se encontra totalmente utilizada, a expansão de contraste por partes, linear ou não,

possibilita melhor discriminação da porção realçada da imagem [42].

O processo de equalização de histograma visa o aumento da uniformidade da

distribuição de níveis de cinza de uma imagem, sendo usualmente empregado para

realçar diferenças de tonalidade na imagem e resultando, em diversas aplicações, em

um aumento significativo no nível de detalhes perceptíveis [41]. Na Equação 3.34, é

apresentado como equalizar o histograma de uma imagem de dimensões MxN com L

níveis de cinza.

T(nce) = rnd[((L− 1)

MN)H f (nce)] (3.34)

Onde, rnd representa o arredondamento do resultado da expressão para o inteiro

mais próximo. Na Figura 3.41, é visualizado um exemplo do processo da equalização

histogrâmica.

Figura 3.41 – Exemplo do processo da equalização histogrâmica (adaptado de [42]).

O Algoritmo 3.31 (JavaScript) e o Algoritmo 3.32 (Java), apresentam a implemen-

tação do histograma nas aplicações.

Page 87: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 87

Algorithm 3.31 Implementação em JavaScript do histograma.

function histogramChart() {var margin = {top: 0, right: 0, bottom: 20, left: 0}, width = 960, height = 500;var histogram = d3.layout.histogram(),

x = d3.scale.ordinal(), y = d3.scale.linear(),xAxis = d3.svg.axis().scale(x).orient("bottom").tickSize(6, 0);

function chart(selection) {selection.each(function(data) {

data = histogram(data);x .domain(data.map(function(d) { return d.x; }))

.rangeRoundBands([0, width - margin.left - margin.right], .1);y .domain([0, d3.max(data, function(d) { return d.y; })])

.range([height - margin.top - margin.bottom, 0]);var svg = d3.select(this).selectAll("svg").data([data]);var gEnter = svg.enter().append("svg").append("g");gEnter.append("g").attr("class", "bars");gEnter.append("g").attr("class", "x axis");svg .attr("width", width).attr("height", height);var g = svg.select("g").attr("transform",

"translate("+ margin.left + ","+ margin.top + ")");var bar = svg.select(".bars").selectAll(".bar").data(data);bar.enter().append("rect"); bar.exit().remove();bar .attr("width", x.rangeBand())

.attr("x", function(d) { return x(d.x); })

.attr("y", function(d) { return y(d.y); })

.attr("height", function(d) { return y.range()[0] - y(d.y); })

.order();g.select(".x.axis")

.attr("transform", "translate(0,"+ y.range()[0] + ")")

.call(xAxis);});

}chart.margin = function(_) {

if (!arguments.length) return margin;margin = _;return chart; };

chart.width = function(_) {if (!arguments.length) return width;width = _;return chart; };

chart.height = function(_) {if (!arguments.length) return height;height = _;return chart; };

d3.rebind(chart, histogram, "value", "range", "bins");d3.rebind(chart, xAxis, "tickFormat");return chart;

}

Page 88: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 88

Algorithm 3.32 Implementação em Java do histograma.

public class Histograma {public static final String PATH = ;int[] calculaHistograma(BufferedImage img){

int[] histograma = new int[256];for (int y = 0; y < img.getHeight(); y++) {

for (int x = 0; x < img.getWidth(); x++) {Color color = new Color(img.getRGB(x, y));int red = color.getRed(); histograma[red] += 1;

} } return histograma; }public int[] calculaHistogramaAcumulado(int[] histograma) {

int[] acumulado = new int[256];acumulado[0] = histograma[0];for(int i=1;i < histograma.length;i++) {

acumulado[i] = histograma[i] + acumulado[i-1];} return acumulado; }

private int menorValor(int[] histograma) {for(int i=0; i <histograma.length; i++) {

if(histograma[i] != 0){return histograma[i]; }

} return 0; }private int[] calculaMapadeCores(int[] histograma, int pixels) {

int[] mapaDeCores = new int[256];int[] acumulado = calculaHistogramaAcumulado(histograma);float menor = menorValor(histograma);for(int i=0; i < histograma.length; i++) {

mapaDeCores[i] = Math.round(((acumulado[i] - menor) /(pixels - menor)) * 255);

} return mapaDeCores; }public BufferedImage equalizacao(BufferedImage img) {

int[] histograma = calculaHistograma(img);int[] mapaDeCores = calculaMapadeCores(histograma, img.getWidth()

* img.getHeight());BufferedImage out = new BufferedImage(img.getWidth(),

img.getHeight(), BufferedImage.TYPE_int_RGB);for (int y = 0; y < img.getHeight(); y++) {

for (int x = 0; x < img.getWidth(); x++) {Color color = new Color(img.getRGB(x, y));int tom = color.getRed();int newTom = mapaDeCores[tom];Color newColor = new Color(newTom, newTom, newTom);out.setRGB(x, y, newColor.getRGB()); }

} return out; }void run() throws IOException {

BufferedImage img = ImageIO.read(new File(PATH, ));BufferedImage newImg = equalizacao(img);ImageIO.write(newImg, "png", new File(PATH, )); }

public static void main(String[] args) throws IOException {new Histograma().run(); }

}

Page 89: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 89

3.1.4 High Dynamic Range

Como explicado na seção 3.1, as duas aplicações (JavaScript e Java) fazem o pro-

cesso de High-Dynamic Range (HDR) ou High-Dynamic Range imaging (HDRi), que são

conjuntos de técnicas e métodos utilizados no processamento digital de imagem, fo-

tografias e computação gráfica, para capturar um alcance dinâmico superior entre as

áreas mais claras e mais escuras de uma imagem, quando comparados a métodos con-

vencionais [43].

O HDR é um recurso desenvolvido para que dispositivos eletrônicos gerem ou

reproduzam imagens que apresentem cores mais vivas, com melhores níveis de con-

traste, tons claros com mais brilho (fonte de luz) e tons pretos mais escuros (sombras).

As câmeras, são capazes de registrar imagens com grande alcance dinâmico, ou os te-

levisores e monitores, habilitados em aceitar esse padrão e reproduzir as imagens com

maior qualidade de cor [43].

As fotografias são, geralmente, padronizadas em JPEG (Joint Photographic Experts

Group), que possui uma profundidade de cor de 8-bit por canal, isso é, cores de 0 a 255,

do preto ao branco, em cada canal. O desafio é utilizar 16-bit por canal, que permite ter

uma fidelidade maior nas cores, devido ao alcance dinâmico entre 8-bit e 16-bit.

Foram desenvolvidas técnicas que a partir de múltiplas imagens com diferen-

tes tempos de exposição, uma resultante das imagens é gerada em HDR, baseado no

algoritmo Debevec and Malik [44], na utilização de uma função de câmera e um mapa

de radiância/histograma das camadas das cores, as novas componentes RGB (R - red,

G - green e B - blue) da imagem são criadas, um estudo foi realizado para melhorar

o processamento da imagem e gerar uma resultante HDR de visualização online em

monitores convencionais [42].

De qualquer forma de obtenção da imagem, quando uma cena é representada

em HDR, obtém-se um vetor bidimensional contendo os valores do brilho por pixel,

em cada imagem. Estes valores não podem ser interpretados como medidas reais da

radiância relativa da cena construída, já que não existe um mapeamento linear entre

Page 90: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 90

essas informações e o valor de cada pixel. O que existe é um mapeamento não-linear

desconhecido que determina como, dada a radiância da cena, os valores associados aos

pixels são obtidos[45].

Os tempos de exposição (TempE) são ajustados de acordo com cada modelo de

câmera, utilizando a velocidade do obturador, a abertura, ou ambas situações. Para

padronizar os valores de tempos, serão considerados 3 momentos: -2TempE, 0TempE

e +2TempE. Em 0TempE, a câmera procurará uma média iluminação para alcançar

uma cena cinzenta, o +2TempE resulta em uma imagem mais brilhante que capta mais

detalhes nas áreas mais escuras da cena e o -2TempE resulta em uma imagem mais

escura que captura detalhes nas áreas claras [46].

Para mapear os conjuntos de cores da imagem resultante HDR, foi realizado um

estudo na técnica Tone Mapping [47]. Monitores comuns possuem um alcance dinâmico

muito menor do que o solicitado por imagens HDR, o que os torna inadequados para

a exibição de toda a faixa de intensidades luminosas presentes em uma determinada

cena. A técnica, representada na Figura 3.42, tenta corrigir o problema da forte redução

de contraste, preservando os detalhes e as cores capturadas. O algoritmo desenvolvido

será apresentado no capítulo 4.

Figura 3.42 – Técnica Tone Mapping (adaptado de [47]).

Todas as imagens obtidas vão desempenhar uma parte importante na resultante

HDR, como visualizado na Figura 3.43, cada uma contribuindo com seus melhores

pixels para a imagem final.

Page 91: Eficiência, qualidade e compressão do processamento digital

Capítulo 3. Metodologia 91

Figura 3.43 – Resultante HDR (baseado em [45]).

Page 92: Eficiência, qualidade e compressão do processamento digital

92

4 Algoritmo/Equações

4.1 Planilha de Pixels e Gráficos

O primeiro passo quando uma imagem/quadro é selecionado nas aplicações (Ja-

vaScript e Java), é executar um processamento detalhado, são vários processos criados

com threads (subseção 4.4.3). Esses processos são separados precisamente para executar

uma varredura sobre a imagem/quadro e gerar uma planilha de pixels, ou seja, gerar

uma matriz MxN, com isso, uma análise de padronização de vizinhança acontece.

Nesse caso, todos os pixels foram preenchidos na planilha gerada e padroniza-

dos para não existir discrepâncias exageradas entre um pixel e outro daquela região

de vizinhança, aumentando assim, a qualidade daquela imagem/quadro em 2% (va-

lor encontrado através de testes efetuados a nível matricial de qualidade de pixel), um

valor relativamente pequeno, mas grande para a área de processamento digital de ima-

gem/vídeo.

Essa padronização de vizinhança, é baseada na técnica MSAA (MultiSample Anti-

Aliasing), no qual cria um processo inteligente de renderização de múltiplas cópias de

cada pixel e a interpolação entre eles, recebendo um ganho de qualidade. Se dentro de

um polígono existem quatro pixels idênticos, por exemplo, eles são processados como

se fossem apenas um e o mesmo valor de cor é aplicado aos quatro. Em qualquer outra

técnica eles seriam processados como quatro pixels separados, o que consumiria quatro

vezes mais processamento.

Para a segurança que todos os dados serão claros e avaliados, um documento

de texto é criado com todos os dados da planilha de pixels daquela imagem/quadro,

esse documento tem o tamanho de 1 byte, não influenciando em nenhuma aquisição

ou armazenamento da imagem/quadro.

O último passo é gerar um gráfico de todos os pixels e traçar uma linear de avalia-

Page 93: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 93

ção para estudo daquela imagem/quadro, ou seja, é feito um reconhecimento se aque-

les pixels estão linearmente traçados no gráfico ou se ainda precisão ser retrabalhados

na padronização, aumentando a taxa de 2% para 2,3% de qualidade da imagem/qua-

dro. Feito isso, a imagem/quadro está preparado para passar pelo histograma e ser

trabalhado, gerando uma nova avaliação e padronização, como explicado na subse-

ção 3.1.3.

O passo a passo é visualizado na Figura 4.1, essa técnica é incorporada em todas

as obtenções de imagem/quadro das aplicações e será apresentada juntamente com as

outras partes pesquisadas no capítulo 5.

Figura 4.1 – Etapas da técnica de Pixels e Gráficos.

Page 94: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 94

4.2 Partial Differential Equation

A utilização da PDE, é uma alternativa para substituir os métodos de filtragens

convencionais. Os resultados obtidos usando PDE mostram uma significativa melhora

na qualidade das imagens filtradas com perda mínima de resolução [48].

No processamento digital de imagem/vídeo, a imagem/quadro é representada

por matriz, não importando o tamanho dela na aplicação, utilizando para isso a função

ϑ(xi, yj), no qual, i, j = 1, 2, ..., representando o tamanho dessa matriz por linhas (i) e

colunas (j). Para obter as diferenças relativas às derivadas parciais, referente a função

ϑ(x, y), um método bastante usado é a aproximação por diferenças finitas [48].

A aproximação por diferenças finitas têm como base a expansão em série de

Taylor de uma função f . Supondo que f seja contínua no intervalo [a, b] de interesse

e que possua derivadas até ordem N, a série de Taylor, para todo ponto x ∈ [a, b] [49],

é representada na Equação 4.1.

f (x) = f (xi) + (∆x)dfdx

∣∣∣∣xi

+(∆x)2

2!d2fdx2

∣∣∣∣xi

+(∆x)3

3!d3fdx3

∣∣∣∣xi

+ · · ·+ RN (4.1)

No qual, ∆x = x− x0 e RN é o resto, definido como RN = (∆x)N

N!dNfdxN

∣∣∣∣ζ

, ζ ∈ [a, b].

Expandindo f (xi + ∆x) em série de Taylor em torno do ponto xi, tem-se a Equação 4.2.

f (xi + ∆x) = f (xi) + (∆x)dfdx

∣∣∣∣xi

+(∆x)2

2!d2fdx2

∣∣∣∣xi

+(∆x)3

3!d3fdx3

∣∣∣∣xi

+ · · · (4.2)

Em que o · · · indica os termos restantes da série de Taylor até o resto RN. Isolando

a primeira derivada, tem-se a Equação 4.3.

∂ f∂x

∣∣∣∣i=

f (xi + ∆x)− f (xi)

∆x+

[−∆x

2!∂2 f∂x2

∣∣∣∣i

− ∆x3!

∂3 f∂x3

∣∣∣∣i

− · · ·]

(4.3)

Para obter ∂ f∂x

∣∣∣∣i, todos os outros termos da série de Taylor foram divididos pelo

espaçamento ∆x. O Erro Local de Truncamento (ELT), apresentado na Equação 4.4,

Page 95: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 95

aparece devido à utilização de um número finito de termos na série de Taylor, podendo

simplificar a equação fi para f (xi) ou, em geral, fi±k para f (xi ± k∆x) [49], como apre-

sentado na Equação 4.5.

ELT =

[−∆x

2!∂2 f∂x2

∣∣∣∣i

− ∆x3!

∂3 f∂x3

∣∣∣∣i

− · · ·]

(4.4)

∂ f∂x

∣∣∣∣i=

fi+1 − fi

∆x+ 0(∆x) (4.5)

A Equação 4.5, é uma equação de diferenças finitas que representa uma aproxi-

mação de primeira ordem para a primeira derivada de f , utilizando diferenças pro-

gressivas, devido ao fato que o cálculo da derivada no ponto xi, foi utilizado um ponto

adiante de xi, no caso, xi+1.

Agora, com o objetivo de eliminar parâmetros desnecessários da PDE, onde em

muitos casos eles são correlacionados, a Equação 4.6 é criada, sendo uma equação de

filtragem, com eliminação de ruídos, com ampliação para detecção de bordas, onde

apenas dois parâmetros interrelacionados existem e que dependem da imagem origi-

nal (Ioriginal) [50].

Iresult = δ(|OGσ ∗ ϑ|) |Oϑ| div(

|Oϑ|

)− (1− δ)(ϑ− Ioriginal) (4.6)

No qual, ϑ(x, 0) = Ioriginal(x) representa a imagem ruidosa inicial, δ(|OGσ ∗ ϑ|)

é uma função suave não crescente com δ(0) = 1, δ(s) ≥ 0, δ(s) → 0 como s → ∞.

A escolha usual para δ é δ(s) = 1(1+ks)2 , permitindo realizar uma suavização seletiva

de acordo com o tamanho do gradiente da imagem no ponto x. A constante σ a ser

usada no cálculo de Gσ, é tomada como o desvio padrão de ruído da Ioriginal e Gσ é

uma função gaussiana. δ pode ser representado como na Equação 4.7, sendo k uma

constante dependente [50].

δ = δ(|GσIoriginal ∗Oϑ|) = 11 + k|GσIoriginal ∗Oϑ|2 (4.7)

Page 96: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 96

Aplicando a Equação 4.6, é visto que, os pixels da imagem foram filtrados corre-

tamente e com agilidade durante o processo, como visualizado na Figura 4.2. Todos os

resultados obtidos com essas técnicas serão apresentados no capítulo 5.

Figura 4.2 – Comparação entre a Ioriginal com ruído e a Iresult (baseado em [41]).

Page 97: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 97

4.3 High Dynamic Range

O algortimo criado para o HDR, tanto em JavaScript ou Java, seguem o mesmo

padrão. A primeira etapa do algoritmo é obter as imagens com suas respectivas infor-

mações [42]. Na Equação 4.8, é representado cada imagem por x, mas todas contêm em

suas informações os dados de tempo de exposição (∆tj) e a radiância (Ei) [44], repre-

sentado na Equação 4.9.

Zij = f (x) (4.8)

Zij = f (Ei∆tj) (4.9)

Após essa análise, é criado um valor Zij para cada valor de intensidade do pixel

representativo, que é uma função não-linear com relação aos valores de exposição x,

representado na Equação 4.10 e Equação 4.11.

f−1(Zij) = Ei∆tj (4.10)

ln f−1(Zij) = lnEi + ln∆tj (4.11)

Nas equações apresentadas, os valores conhecidos são Zij e ∆tj de cada imagem.

Os valores a serem obtidos são Ei, assim como, uma nova função g(Zij). Essa nova

função, representada na Equação 4.12, possui um intervalo de domínio finito e bem

definido de valores (0− 255), que é o valor dos pixels RGB, já que o domínio do brilho

associado a cada um desses pixel é finito [44].

g(Zij) = lnEi + ln∆tj (4.12)

Nesse caso, é preciso utilizar uma análise matemática para encontrar os pontos

de g(Zij) e Ei que minimizam o erro quadrático da função, representada na Equa-

Page 98: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 98

ção 4.13.

$ =N

∑i=1

P

∑j=1

[g(Zij)− lnEi − ln∆tj]2 + λ

Zmax−1

∑z=Zmin+1

g′′(z)2 (4.13)

Onde P é o número de fotos disponíveis, N é o número de pixels avaliados, Zmax

são valores máximos de intensidade dos pixels e Zmin são valores mínimos de intensi-

dade dos pixels. Utilizando a Equação 4.13, a imagem não fica adequada para a aplica-

ção, então é criado uma função de peso triangular, suavizando a imagem, representada

na Equação 4.14.

w(z) =

z− Zmin → z ≤ 12(Zmin + Zmax)

Zmax − z→ z > 12(Zmin + Zmax)

(4.14)

Inserindo a suavização na Equação 4.13, a nova função é obtida, representada

por Equação 4.15.

$ =N

∑i=1

P

∑j=1{w(Zij)[g(Zij)− lnEi − ln∆tj]}2 + λ

Zmax−1

∑z=Zmin+1

[w(z)g′′(z)]2 (4.15)

Obtendo os valores de g(Zij), são convertidos para valores de radiância relativos,

assumindo que ∆tj de cada foto é conhecido, representado na Equação 4.16.

lnEi = g(Zij)− ln∆tj (4.16)

Para gerar o mapa de radiância/histograma, são utilizadas as informações das

imagens, realizando uma média ponderada destes valores, representado na Equação 4.17.

lnEi =∑P

j=1 w(Zij(g(Zij)− ln∆tj)

)∑P

j=1 w(Zij)(4.17)

Após efetuar todos esses cálculos matemáticos dentro do algoritmo, é criado o

modelo de visualização com a técnica Tone Mapping. A informação de cor confiável

do mundo real é extraída pelo sistema visual humano e introduzido por escala única

Page 99: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 99

(TMss) e escala múltipla (TMms) [51]. O TMss é representado na Equação 4.18.

Ri(x, y) = log(

Ii(x, y))− log

(F(x, y) ∗ Ii(x, y)

)(4.18)

Onde (x, y) são as coordenadas dos pixels na imagem, Ri(x, y) é o resultado do

cálculo com a banda espectral, Ii(x, y) é a distribuição da imagem na sua banda es-

pectral, ∗ representa a operação de convolução e F(x, y) é a função gaussian, que é

representada na Equação 4.19.

F(x, y) = Ke−x2+y2

c2 (4.19)

No qual, c é uma constante de espaço gaussiano e K é um fator de normalização.

Além disso, TMms é representada na Equação 4.20.

RTMmsi(x, y) =N

∑n=1

ωnRni(x, y) (4.20)

Nesse caso, o N é o número de escalas, Rni(x, y) representa o i-ésimo componente

da n-ésima escala, RTMmsi(x, y) representa o componente espectral da saída TMms e ωn

é o peso associado à n-ésima escala. Os objetivos do TMms são reduzir os artefatos em

torno das bordas de alto contraste, manter o equilíbrio com a compactação do inter-

valo dinâmico e a renderização das cores. O TMms produz uma boa compactação de

faixa dinâmica, mas sofre com a qualidade dos artefatos. Além disso, o TMss com a pe-

quena constante de espaço que agrega, faz com que grandes regiões uniformes fiquem

grudadas e com imagens de aparência plana [51].

Existem dois processos para ser efetuado pelo algoritmo agora, o Tone Mapping

global e o local. O global simula o estágio inicial do sistema visual humano, que detecta

o brilho como uma função logarítmica aproximada, de acordo com a lei de Weber-

Page 100: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 100

Fechner [52], que é representado na Equação 4.21.

Lg(x, y) =log( Lw(x,y)

L̄w+ 1)

log( Lw max

L̄w+ 1) (4.21)

Onde o Lg(x, y) é a saída global, Lw(x, y) são os valores de luminância de en-

trada, Lw max é o valor máximo de luminância e L̄w é a luminância média logarítmica,

como representado na Equação 4.22.

L̄w = e1m ∑x,y log

(δ+Lw(x,y)

)(4.22)

O m é o número total de pixels de um único canal e δ é um valor muito baixo,

somente para evitar a singularidade que ocorre se os pixels pretos estiverem marcantes

na imagem. Além disso, os valores de luminância de entrada Lw(x, y) são derivados,

como representado na Equação 4.23.

Lw(x, y) = 0.299Red(x, y) + 0.587Green(x, y) + 0.114Blue(x, y) (4.23)

O Red, Green e Blue da Equação 4.23, representam os canais de cores RGB da

imagem de entrada, como apresentado no Algoritmo 4.1 e Algoritmo 4.2.

Algorithm 4.1 Implementação em JavaScript do Tone Mapping Global.

function toneMappingGlobal(display, image, a) {var averageLuminance = a / estimateAverageLuminance(image);var newImage = [];for (var j = 0; j < image.length; j += 4) {

var avg = image[j+3] * averageLuminance; avg /= 1 + avg;newImage[j+0] = image[j+0] / image[j+3] * avg;newImage[j+1] = image[j+1] / image[j+3] * avg;newImage[j+2] = image[j+2] / image[j+3] * avg;newImage[j+3] = 0;

} return newImage; }function estimateAverageLuminance(image) { var sum = 0;

for (var j = 0; j < image.length; j += 4) {sum += Math.log(0.0001 + image[j+3]);

} return Math.exp(sum / (image.length / 4) - 0.0001); }

Page 101: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 101

Algorithm 4.2 Implementação em Java do Tone Mapping Global.

private static List<Mat> toneMappingGlobal(Mat b, Mat g, Mat r, int rows, intcols){

Mat Lw = new Mat(rows, cols, r.type());Core.multiply(r, new Scalar(rParam), r); // rParam = 0.299Core.multiply(g, new Scalar(gParam), g); // gParam = 0.587Core.multiply(b, new Scalar(bParam), b); // bParam = 0.114Core.add(r, g, Lw); Core.add(Lw, b, Lw);double LwMax = Core.minMaxLoc(Lw).maxVal;Mat Lw_ = Lw.clone();Core.add(Lw_, new Scalar(0.001), Lw_);double LwAver = Math.exp(Core.sumElems(Lw_).val[0] / (rows * cols));Mat Lg = Lw.clone();Core.divide(Lg, new Scalar(LwAver), Lg);Core.add(Lg, new Scalar(1.0), Lg);Core.divide(Lg, new Scalar(Math.log(LwMax / LwAver + 1.0)), Lg);List<Mat> list = new ArrayList<>();list.add(Lw); list.add(Lg);return list;

}

O Tone Mapping local é aplicado após o processo global. A saída do TMss e do

TMms, sofre de artefatos fortes e com aparência artificial. A fim de lidar com essas des-

vantagens, um filtro para preservar a borda da imagem é usado, substituindo assim,

o filtro gaussian do algoritmo anterior para reduzir os efeitos dos artefatos. O filtro

para preservar a borda depende das diferenças de luminância apresentada na imagem

original [51]. O Tone Mapping local é representado na Equação 4.24.

Ll(x, y) = log Lg(x, y)− log Hg(x, y) (4.24)

No qual, Ll(x, y) representa a saída do modelo local e Hg(x, y) indica a saída do

resultado do modelo global, com o filtro para preservar a borda da imagem, represen-

tado na Equação 4.25.

Hg(x, y) =1|ω| ∑

(ζx,ζy)∈ω(x,y)

(a(ζx, ζy)Lg(x, y) + b(ζx, ζy)

)(4.25)

Nesse caso, o ζx, ζy são as coordenadas dos pixels de vizinhança, ω(x, y) é um

Page 102: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 102

quadrado local de raio r, centrado em um determinado pixel (x, y), |ω| representa o

número de pixels em ω(x, y), enquanto a(ζx, ζy) e b(ζx, ζy) são coeficientes lineares,

calculados na Equação 4.26.

a(ζx, ζy) =µ2(ζx, ζy)− µ2(ζx, ζy)

σ2(ζx, ζy) + ε

b(ζx, ζy) = µ(ζx, ζy)− a(ζx, ζy)µ(ζx, ζy)

(4.26)

Onde µ(ζx, ζy) e σ2(ζx, ζy) são as médias e as variâncias de Lg em ω(ζx, ζy),

µ2(ζx, ζy) é a média de L2g em ω(ζx, ζy) e ε é o parâmetro de regularização, obtendo

assim, o Hg final.

Depois de obter o resultado global com o filtro para preservar a borda da ima-

gem, em vez de aplicar diretamente a equação local, dois fatores são inseridos para

evitar a aparência plana causada pelo filtro e melhorar o desempenho do algoritmo.

Um é o fator de aumento de contraste e o outro é o offset de não-linearidade adaptável.

O fator de aumento de contraste é calculado na Equação 4.27.

α(x, y) = 1 + ηLg(x, y)Lg max

(4.27)

No qual, η é o parâmetro de controle de contraste e Lg max é o valor máximo

de luminância da saída do modelo global. E o offset de não-linearidade adaptável é

calculado na Equação 4.28.

β = λL̄g (4.28)

Esse valor depende do conteúdo presente no quadrado gerado anteriormente

(ω(x, y), na Equação 4.25), λ é o parâmetro de controle de não linearidade e o L̄g é

a luminância média logarítmica da saída do modelo global. Após derivar esses dois

fatores, o modelo local fica representado pela Equação 4.29.

Lout(x, y) = α(x, y) log(

Lg(x, y)Hg(x, y)

+ β

)(4.29)

Page 103: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 103

Onde Lout(x, y) é a saída do Tone Mapping local final. Após o modelo local, os

valores de luminância processados são redimensionados de 0 a 1. Finalmente, a ima-

gem Tone Mapping resultante final é obtida a partir dos valores de luminância da saída

do modelo local e da imagem HDR de entrada, como apresentado no Algoritmo 4.3 e

Algoritmo 4.4. Todos os resultados obtidos com esses algoritmos e técnicas serão apre-

sentados no capítulo 5.

Algorithm 4.3 Implementação em JavaScript do Tone Mapping Local.

function toneMappingLocal(display, image, key, sharpening) {var blurred = []; var onePixelGaussian = 1 / (2 * Math.sqrt(2));for (var i = 0; i < sharpening; i ++) {

if (i == 0) {var blurbase = [];for (var j = 0; j < image.length; j += 4) {

blurbase[j/4] = image[j+3];}var gaussian = gaussianKernelHalf(onePixelGaussian);var blurred0 = gaussianBlur(display, blurbase, gaussian);blurred.push(blurred0);

} else {var r1 = Math.pow(1.6, i-1) * onePixelGaussian;var r = Math.pow(1.6, i) * onePixelGaussian;var r2 = Math.sqrt(r * r - r1 * r1);var gaussian = gaussianKernelHalf(r2);var blurredI = gaussianBlur(display, blurred[i-1], gaussian);blurred.push(blurredI); } }

var localEnvironment = [];var epsilon = 0.001; var scaler = Math.pow(2, sharpening) * key;for (var i = 0; i < blurred[0].length; i ++) {

var j;for (j = 0; j < blurred.length - 1; j ++) {

var v = blurred[j][i] - blurred[j+1][i];v /= scaler / Math.pow(1.6, j * 2) + blurred[j][i];

} localEnvironment[i] = blurred[j][i]; }var averageLuminance = 1 / estimateAverageLuminance(image);var newImage = [];for (var j = 0; j < image.length; j += 4) {

avg = averageLuminance / (1 + localEnvironment[j/4]* averageLuminance);

newImage[j+0] = image[j+0] * avg;newImage[j+1] = image[j+1] * avg;newImage[j+2] = image[j+2] * avg; newImage[j+3] = 0;

} return newImage; }

Page 104: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 104

Algorithm 4.4 Implementação em Java do Tone Mapping Local.

private static Mat toneMappingLocal(Mat Lg, int rows, int cols) {int krnlSz = Arrays.asList(3.0, rows * krnlRatio, cols * krnlRatio)

.stream().max(Double::compare).get().intValue();Mat Lg_ = new Mat();Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT,

new Size(krnlSz, krnlSz), new Point(-1,-1));Imgproc.dilate(Lg, Lg_, kernel);Mat Hg = Filters.GuidedImageFilter(Lg, Lg_, r, eps);return Hg;

}

...Mat alpha = new Mat(m, n, rChannel.type());Core.divide(Lg, new Scalar(Core.minMaxLoc(Lg).maxVal / eta), alpha);Core.add(alpha, new Scalar(1.0), alpha);Mat Lg_ = new Mat(m, n, rChannel.type());Core.add(Lg, new Scalar(1.0 / 255.0), Lg_);double beta = Math.exp(Core.sumElems(Lg_).val[0] / (m * n)) * lambda;Mat Lout = new Mat(m, n, rChannel.type());Core.divide(Lg, Hg, Lout);Core.add(Lout, new Scalar(beta), Lout);Core.normalize(alpha.mul(Lout), Lout, 0, 255, Core.NORM_MINMAX);...Mat gain = obtainGain(Lout, Lw, m, n);Core.divide(rChannel.mul(gain), new Scalar(Core.minMaxLoc(rChannel)

.maxVal / 255.0), rChannel); // Red ChannelCore.divide(gChannel.mul(gain), new Scalar(Core.minMaxLoc(gChannel)

.maxVal / 255.0), gChannel); // Green ChannelCore.divide(bChannel.mul(gain), new Scalar(Core.minMaxLoc(bChannel)

.maxVal / 255.0), bChannel); // Blue ChannelMat outval = new Mat();Core.merge(new ArrayList<>(Arrays.asList(bChannel, gChannel, rChannel))

, outval);outval.convertTo(outval, CvType.CV_8UC1);...

private static Mat obtainGain(Mat Lout, Mat Lw, int rows, int cols) {Mat gain = new Mat(rows, cols, Lout.type());for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {if (Lw.get(i, j)[0] == 0)

gain.put(i, j, Lout.get(i, j)[0]);else

gain.put(i, j, Lout.get(i, j)[0] / Lw.get(i, j)[0]);}

} return gain;}

Page 105: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 105

4.4 Processadores

Um processador é uma espécie de microchip especializado. A sua função é ace-

lerar, endereçar, resolver ou preparar dados, dependendo da aplicação. Basicamente,

um processador é uma poderosa máquina de calcular que recebe um determinado vo-

lume de dados, orientados em padrão binário 0 e 1 e tem a função de responder a

esse volume, processando a informação com base em instruções armazenadas em sua

memória interna [53].

O primeiro passo sobre os processadores é entender como eles e os sistemas ope-

racionais (SO) trabalham com as aplicações. Basicamente, a execução de uma aplicação

dá-se, em um primeiro instante, em uma ação do sistema operacional. Quando o usuá-

rio executa uma ação, ou seja, abre qualquer das aplicações, web ou local, o sistema

operacional interpreta a ação e requisita que os arquivos relacionados a esse software

sejam executados.

Sabendo que qualquer atividade do sistema operacional está sujeita à operação

do processador, seja CPU (Central Process Unit) ou GPU (Graphics Processing Unit). To-

davia, antes que uma aplicação esteja aberta e realmente requisite o trabalho de um

processador, ele é apenas carregado na memória RAM (Random Access Memory).

Ao efetuar o carregamento da aplicação, o sistema operacional trabalha com pro-

cessos (threads). Cada software possui um processo (alguns utilizam árvores de proces-

sos), cada qual com respectivas instruções para o processador saber como proceder na

hora de efetuar qualquer requisição [53].

Os chamados “processos” são módulos executáveis, os quais contêm linhas de

código para que a execução do programa seja realizada apropriadamente. Isso quer

dizer que o processo é uma lista de instruções, a qual informa ao processador que

passos devem ser executados e em quais momentos isso acontece [53].

Os processadores trabalham muito bem com os processos, mas a execução de

muitos processos simultaneamente acarreta em lentidão, para evitar esse ponto, é pre-

ciso saber o limite que existe no hardware escolhido para o trabalho e fazer a divisão

Page 106: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 106

correta entre as atividades da CPU e GPU.

4.4.1 Central Process Unit

O processador, também chamado de CPU, é o componente de hardware respon-

sável por processar dados e transformar em informação. Ele também transmite estas

informações para a placa mãe, que por sua vez as transmite para onde é necessário

(como o monitor, impressora, outros dispositivos). A placa mãe serve de ponte entre

o processador e os outros componentes de hardware da máquina, outras funções do

processador são fazer cálculos e tomar decisões lógicas [54]. Existem algumas caracte-

rísticas específicas para conhecer em uma CPU para fazer o processamento digital de

imagem/vídeo, como visualizado na Tabela 4.1.

Tabela 4.1 – Características Específicas - Central Process Unit (baseado em [54]).

Características DescriçãoClock (Hz - hertz) Define a capacidade do processador em processar in-

formações ao mesmo tempo.Core É o núcleo do processador.Cache É um tipo de memória auxiliar, que faz diminuir o

tempo de transmissão de informações entre o proces-sador e outros componentes.

Potência (W - watt) É a quantidade de energia consumida por segundo,1W = 1J/s.

CPU é um dispositivo programável de entrada e saída de dados, que processa os

dados digitais de entrada e, associando as instruções armazenadas em sua memória,

fornece como saída os dados resultantes do processamento, composta pela unidade

lógica e aritmética (ULA), que executa as operações aritméticas e lógicas; unidade de

controle (UC), que extrai instruções da memória e as decodifica e executa, requisitando

a ULA quando necessário; e os registradores e memória cache, no qual, armazena da-

dos para o processamento [55].

A velocidade de processamento das informações em um computador está dire-

tamente relacionada à velocidade do processador. Quanto mais rápido o processador,

maior a velocidade de processamento.

Page 107: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 107

4.4.2 Graphics Processing Unit

Uma placa de vídeo é composta por diversos circuitos e elementos eletrônicos,

porém seu papel mais importante é o de comportar um processador dedicado especi-

almente para a renderização de gráficos em tempo real [56]. Este tipo de processador é

chamado de GPU, como visualizado na Figura 4.3.

Figura 4.3 – Localização da GPU na placa de vídeo (adaptado de [56]).

Normalmente, a GPU fica localizada na parte mais central de uma placa de ví-

deo, rodeada pelos demais componentes do dispositivo. Como estes processadores ge-

ram muito calor enquanto trabalham, quase todos os fabricantes incluem um conjunto

de dissipador e ventoinha acoplado ao chip para mantê-lo na temperatura ideal.

A diferença entre a CPU (apresentado na subseção 4.4.1) e a GPU, é que a CPU

pode fazer qualquer tipo de cálculo de processamento, incluindo os gráficos, porém,

o processo através da CPU seria lento demais e por isto é utilizado um processador

específico para esta função, no caso, a GPU [56].

Existem algumas características específicas para conhecer em uma placa de vídeo

para fazer o processamento digital de imagem/vídeo, como visualizado na Tabela 4.2.

A GPU possui mais unidades de processamento que a CPU, ou seja, mais threads.

Porém, os processadores presentes na GPU são mais simples e geralmente mais lentos

Page 108: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 108

Tabela 4.2 – Características Específicas - Graphics Processing Unit (baseado em [56]).

Características DescriçãoClock (hertz) É o sistema de velocidade de informações, quanto

maior o número do clock, mais rápida será a respostado processador gráfico.

Memória (bytes) É o tamanho do armazenamento de memória, ela nãorepresenta qualidade em termos de potência para aplaca, mas obviamente, quanto mais espaço livre, me-lhor será a circulação das informações.

Quadros/s Significa a quantidade de imagens que a placa de vídeoconsegue reproduzir por segundo.

Clock de Memória É voltado especificamente para a memória da placa, equanto maior o número de clock, maior será a rapidezcom que as informações serão exibidas na tela.

que os processadores das CPUs, desta forma, aplicações muito iterativas, tais como

editores de texto, cálculos matemáticos, entre outros, não se beneficiariam muito do

poder de processamento das GPUs. Por outro lado, aplicações em que exista muito

paralelismo de dados, como imagens/quadros, são perfeitos para esse ambiente [57].

A GPU, em seu núcleo, implementa um modelo computacional chamado SIMD

(Single Instruction Multiple Data), que são vários processadores, mais somente uma uni-

dade de processamento. A NVIDIA, costuma usar a expressão STMD (Single Thread

Multiple Data) para caracterizar as GPUs dela, além das placas de vídeo da marca su-

portarem até 768 threads ativas por multiprocessador, algumas GPUs elevando este

número a 1.024 [58].

É natural que um hardware seja programado com uma linguagem de programa-

ção heterogênea, em que o programador possa especificar quais partes do programa

devem executar sobre a CPU e quais partes devem executar sobre a GPU. Existe a lin-

guagem CG, que é uma linguagem de shading que foi inventada pela própria NVIDIA

em colaboração com a Microsoft e, surgiu para ser mais uma linguagem de alto nível

para substituir o Assembly. Outra linguagem é a HLSL (High Level Shading Language),

que é uma linguagem de programação de alto nível utilizada na criação de shaders, que

são utilizados no pipeline gráfico da GPU [57] [58].

Utilizando essas linguagens foi desenvolvido um CUDA (Compute Unified Device

Page 109: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 109

Architecture), que é uma API (Application Programming Interface) destinada a computa-

ção paralela, GPGPU (General Purpose Graphics Processing Unit), e computação hetero-

gênea, criada pela NVIDIA.

A plataforma CUDA dá acesso ao conjunto de instruções virtuais da GPU e a ele-

mentos de computação paralela, para a execução de núcleos de computação, contendo

um corpo principal, que será executado sobre a CPU, e várias funções especiais, nor-

malmente chamadas kernels, que serão executadas na GPU [58]. Ao observar um kernel,

existe a impressão de que o texto se trata de um programa sequencial, mas este mesmo

código será simultaneamente executado por centenas de threads, como apresentado no

Algoritmo 4.5, no qual, processa uma matriz imagem/quadro.

Algorithm 4.5 Implementação em CG/HLSL do CUDA

void Mul(const float* A, const float* B, int width, float* C){int size = width * widht * sizeof(float);

float* Ad;cudaMalloc((void**)&Ad, size);cudaMemcpy(Ad, A, size, cudaMemcpyHostToDevice);

float* Bd;cudaMalloc((void**)&Bd, size);cudaMemcpy(Bd, B, size, cudaMemcpyHostToDevice);

float* Cd;cudaMalloc((void**)&Cd, size);

dim3 dimBlock(BLOCK_SIZE, BLOCK_SIZE);dim3 dimGRID(wB / dimBlock.x, hA / dimBlock.y);

Muld«<dimGRID, dimBlock»>(Ad, Bd, width, Cd);

cudaMemcpy(C, Cd, size, cudaMemcpyDeviceToHost);

cudaFree(Ad);cudaFree(Bd);cudaFree(Cd);

}

Page 110: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 110

4.4.3 Threads

A thread é uma divisão do processo principal de um software. As linhas de ins-

truções dos processos adquiriram características únicas, que possibilitaram separá-las

para execuções em diferentes núcleos, de certa maneira, uma linha de instrução é uma

tarefa que o processador deverá realizar.

Enfim, o problema é que nem todos os processos são divididos em múltiplas

threads, assim como nem todos os processadores são capazes de trabalhar com uma

quantidade grande de threads. Os mais recentes processadores (CPU) vêm com especi-

ficações quanto aos núcleos e às threads [59]. Verificando no site da fabricante, o pro-

cessador Intel Core i9-8950HK, como visualizado na Figura 4.4, utilizado para os testes

nas aplicações web (JavaScript) e local (Java), vem com seis núcleos e tem suporte para

trabalhar com até doze threads, como visualizado na Tabela 4.3. No caso, são utilizados

dois processadores Intel Core i9-8950HK, dando um máximo de vinte e quatro threads.

Figura 4.4 – Processador Intel Core i9-8950HK (adaptado de [59]).

Para os processadores (GPU), eles não vêm com especificações quanto aos nú-

cleos e às threads [60], mas são utilizadas três placas de vídeo NVIDIA GeForce GTX

1070 Ti, como visualizado na Figura 4.5, isso significa, três GPUs disponíveis para pro-

cessar a parte gráfica das aplicações. No site da fabricante, é possível ter algumas ca-

racterísticas importantes da placa, como visualizado na Tabela 4.4.

Page 111: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 111

Tabela 4.3 – Características - Processador Intel Core i9-8950HK (baseado em [59]).

Características DescriçãoDesempenhoNúmero de Núcleos 6Número de Threads 12Frequência Baseada em Processador 2,90 GHzFrequência Turbo Max 4,80 GHzCache 12 Mb SmartCacheVelocidade do Barramento 8 GT/s DMIThermal Design Power (TDP) 45 WMemóriaTamanho Máximo Memória 64 GbTipos de Memória DDR4-2666, LPDDR3-2133Número Máximo de Canais 2Largura de Banda Máxima 41,8 Gb/s

Figura 4.5 – Placa de vídeo GeForce GTX 1070 Ti (adaptado de [60]).

Page 112: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 112

Tabela 4.4 – Características - Placa de vídeo: GeForce GTX 1070 Ti (baseado em [60]).

Características DescriçãoArquitetura PascalCores 2432Framebuffer GDDR5 de 8 GbTipo de Memória - Velocidade 8 Gb/sBoost Clock Relativo 1.4xBoost Clock Real 1683 MHzLargura Interface da Memória 256-bitLargura Banda da Memória 256 Gb/s

O algoritmo criado para executar as threads inseridas no código de processa-

mento digital de imagem/vídeo foi desenvolvido em Clojure [61], que é um dialeto

da linguagem de programação Lisp. É uma linguagem de programação de propósito

geral com ênfase em programação funcional e executada na Java Virtual Machine (JVM)

por padrão, mas existem versões alternativas para outros ambientes de execução.

No Algoritmo 4.6 (Parte 1) e Algoritmo 4.7 (Parte 2), o processador percorre a

imagem escolhida, linha por linha, no qual, um número de threads específico, edita uma

linha de cada vez da imagem, sem colisão. No caso, a quantidade de threads empregada

no sistema, vai depender do modelo do processador alocado para essa função.

O interessante é que a linguagem Clojure, interage com o JavaScript (web) e o

Java (local), podendo assim, usar o mesmo algoritmo para as duas aplicações. A ma-

cro (multithreader), inicia declarando um conjunto de funções que executam um loop de

um índice inicial para um final, ou seja, uma função que usa múltiplas threads e final-

mente, divide o processo em duas partes, CPU (apresentado na subseção 4.4.1) e GPU

(apresentado na subseção 4.4.2).

Todos os cálculos matemáticos e de pixels são feitos pela CPU, mas como visu-

alizado na Figura 4.6, a CPU não consegue processar de forma rápida a parte gráfica

de uma imagem, então todos os processos relacionados a essa parte serão da GPU,

fazendo essa separação de forma precisa e detalhada, os resultados das imagens, com-

parando o tempo de processamento, são muito expressivos. Após cada parte executar

os seus processos, a imagem resultante é apresentada no software.

Page 113: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 113

Algorithm 4.6 Implementação em Clojure do multithreaded (Parte 1).

(defn do-it [start end](map println

(range start end)))

(defn do-it-iterating [start end](doseq [i (range start (+ 1 end))]

(println i)))

(defn do-times [start end](dotimes [i (range start end)]

(println i)))

(defn do-it-looping [start end](loop [i start]

(if (<= i end)(do

(println i)(recur (inc i))))))

(defn do-it-multithreaded [start end](let [ai (AtomicInteger. start)]

(defn looper [](loop [i (.getAndIncrement ai)]

(if (< i (+ 1 end))(do

(println i)(try(Thread/sleep 100)(catch Exception e (.printStackTrace e)))(recur (.getAndIncrement ai))))))

(dotimes [i (.availableProcessors (Runtime/getRuntime))](.start (Thread. looper)))))

(defn printer [i](println i)(try

(Thread/sleep 100)(catch Exception e (.printStackTrace e))))

Page 114: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 114

Algorithm 4.7 Implementação em Clojure do multithreaded (Parte 2).

(defmacro multithreader [start end fun & args](let [ai# (AtomicInteger. start)]

(defn looper [](loop [i# (.getAndIncrement ai#)]

(if (< i# end)(do

( fun i# @args)(recur (.getAndIncrement ai#))))))

(let [threads# (map (fn [x#] (Thread. looper (str "Looper-"x#)))(range (.availableProcessors (Runtime/getRuntime))))]

(doseq [t# threads#](.start t#))

(doseq [t# threads#](.join t#)))))

(let [r (Random. (System/currentTimeMillis))](defn line-randomizer [row #f̂loats pixels width]

(let [offset (int (* width row))](dotimes [i width]

(aset pixels (+ i offset) (.nextFloat r))))))

(ij.process FloatProcessor))

(let [width (int 512)height (int 512)#ÎmagePlus imp (IJ/createImage width height 1)#f̂loats pixels (.getPixels (.getProcessor imp))]

(multithreader 0 heightline-randomizer pixels width)

(.setMinAndMax (.getProcessor imp) 0 1)(.show imp))

Figura 4.6 – Comparativo do PDI, entre CPU e GPU (adaptado de [56]).

Page 115: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 115

Para ajudar no processo e garantir o melhor desempenho da thread no algoritmo

desenvolvido na linguagem Clojure [61], a função chamada doItMultithreaded executa

um processo em paralelo nos núcleos da CPU e garante o processamento gráfico na

GPU. A função multithreader foi desenvolvida para aplicar filtros em um processo se-

parado com thread, deixando o sistema sempre estável para a chegada de novas funcio-

nalidades, como apresentado no Algoritmo 4.8. Todos os resultados obtidos com esses

algoritmos e técnicas serão apresentados no capítulo 5.

Algorithm 4.8 Implementação em JavaScript do multithreaded extra.

function doItMultithreaded(start, end) {var threads = java.lang.reflect.Array.newInstance(java.lang.Thread

.class, java.lang.Runtime.getRuntime().availableProcessors());var ai = new java.util.concurrent.atomic.AtomicInteger(start);var body = {

run: function() {for (var i=ai.getAndIncrement(); i<=end; i=ai.getAndIncrement()) {java.lang.Thread.sleep(100);

} } }for (var i = 0; i < threads.length; i++) {

threads[i] = new Thread(new Runnable(body));threads[i].start();

} }

function multithreader(fun, start, end) {var threads = java.lang.reflect.Array.newInstance(java.lang.Thread

.class, java.lang.Runtime.getRuntime().availableProcessors());var ai = new java.util.concurrent.atomic.AtomicInteger(start);var args = new Array();var b = 0;for (var a = 3; a < arguments.length; a++) {

args[b] = arguments[a];b++;

}var body = {run: function() {

for (var i=ai.getAndIncrement(); i<=end; i=ai.getAndIncrement()) {fun(i, args);

} } }for (var i = 0; i < threads.length; i++) {

threads[i] = new java.lang.Thread(new java.lang.Runnable(body));threads[i].start();

} }

Page 116: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 116

4.5 Discrete Cosine Transform

A DCT faz uso de números reais e é muito utilizada em processamento digital

de imagem/vídeo e compressão de dados. Expressa uma sequência finita de pontos

de dados em termos de uma soma de funções do cosseno oscilando em frequências

diferentes, onde pequenos componentes de alta frequência podem ser descartados [62].

O olho humano é mais sensível a mudanças no brilho do que a mudanças de

cor, por isso, a representação de cores é convertida de RGB para YCbCr, consistindo

em uma componente de brilho Y e duas componentes de cores Cb e Cr (b de blue e r

de red), isso significa que os dados da imagem são divididos em uma componente de

luminância e em duas de crominância. A DCT reduz as componentes espaciais de altas-

frequências da imagem, uma vez que o observador humano é mais sensível a erros

de reconstrução de componentes de baixas frequências. Diante da afirmação, a DCT

permite que os dados sejam representados em termos de coeficientes de frequência

dos seus componentes [63].

Existem vários formatos de imagem, é muito difícil decidir qual é o melhor para

cada tipo de aplicação, principalmente quando é necessário armazenar a imagem em

um banco de dados. Cada uma das extensões possui características próprias, sendo

indicadas para situações diferentes, o JPEG (Joint Photographic Experts Group) é mais

utilizado na web por seu pequeno tamanho, mas o PNG (Portable Network Graphics) é

mais versátil e recomendado para quando se deseja melhor qualidade [63].

Levando em consideração esses fatos, foi escolhido o formato PNG para o canvas

do HTML [64], e o JPEG para o armazenamento e aplicação da transformada discreta

do cosseno. Para aplicar a DCT em uma imagem, é necessário, a fim de otimizar os

cálculos e melhorar a taxa de compressão, dividir a imagem original em blocos, 4x4,

8x8 ou 16x16, podendo usar até blocos de 32x32 ou 64x64. O padrão para JPEG são

blocos de 8x8, como visualizado na Figura 4.7. O tamanho dos blocos tem grande im-

pacto na taxa de compressão, sendo que quanto maiores os blocos, menor será a taxa

de compressão.

Page 117: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 117

Figura 4.7 – Exemplo de uma imagem/quadro em blocos 8x8 (adaptado de [63]).

Assim, foi desenvolvido o Algoritmo 4.9 (Parte 1) e Algoritmo 4.10 (Parte 2) que

realiza a compressão JPEG utilizando a linguagem de programação JavaScript para a

versão web e para a local, foi utilizado o mesmo padrão de implementação, usando o

Lisp, ele interpreta o HTML/JavaScript e converte para o Java, como na subseção 3.1.2.4.

Algorithm 4.9 Implementação em JavaScript da DCT/IDCT (Parte 1).

function DiscreteCosineTransform(){this.main = function(){

var dctHelper = DiscreteCosineTransformHelper;var samplesNormalizedAndMinMax = dctHelper

.samplesNormalize(samplesOriginal);var samplesNormalized = samplesNormalizedAndMinMax[0];var sampleMin = samplesNormalizedAndMinMax[1];var sampleMax = samplesNormalizedAndMinMax[2];var samplesInFrequencyDomain = dctHelper

.samplesSpatialToFrequencyDomain(samplesNormalized);var samplesInSpatialDomain = dctHelper

.samplesFrequencyToSpatialDomain(samplesInFrequencyDomain);var samplesDenormalized = dctHelper.samplesDenormalize

(samplesInSpatialDomain, sampleMin, sampleMax);DisplayHelper.samplesDraw("Original", displaySize, samplesOriginal);DisplayHelper.samplesDraw("Normalizado", displaySize,

samplesNormalized);DisplayHelper.samplesDraw("DCT", displaySize,

samplesInFrequencyDomain);DisplayHelper.samplesDraw("IDCT", displaySize,

samplesInSpatialDomain);DisplayHelper.samplesDraw("Desnormalizado", displaySize,

samplesDenormalized);} }

Esse algoritmo divide a matriz de luminância e as duas matrizes de crominân-

Page 118: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 118

Algorithm 4.10 Implementação em JavaScript da DCT/IDCT (Parte 2).

function DiscreteCosineTransformHelper(){}{DiscreteCosineTransformHelper.samplesDenormalize = function

(samplesToDenormalize, sampleMin, sampleMax){var returnValues = [];var sampleRange = sampleMax - sampleMin;for (var s = 0; s < samplesToDenormalize.length; s++){

var sampleNormalized = samplesToDenormalize[s];var sampleDenormalized = (sampleNormalized + 1)/2

* sampleRange + sampleMin;returnValues[s] = sampleDenormalized;

} return returnValues; }DiscreteCosineTransformHelper.samplesNormalize = function

(samplesToNormalize){var samplesMinAndMax = MathHelper

.minAndMaxOfNumbers(samplesToNormalize);var sampleMin = samplesMinAndMax[0];var sampleMax = samplesMinAndMax[1];var sampleRange = sampleMax - sampleMin;var samplesNormalized = [];for (var s = 0; s < samplesToNormalize.length; s++){

var sample = samplesToNormalize[s];var sampleNormalized = (sample - sampleMin)/sampleRange* 2 - 1;samplesNormalized[s] = sampleNormalized;

} var returnValues = [samplesNormalized, sampleMin, sampleMax];return returnValues; }

DiscreteCosineTransformHelper.samplesSpatialToFrequencyDomain =function(samplesToConvert){ var samplesTransformed = [];var numberOfSamples = samplesToConvert.length;for (var i = 0; i < numberOfSamples; i++){

var sampleTransformed = 0;for (var j = 0; j < numberOfSamples; j++){

sampleTransformed += samplesToConvert[j]* Math.cos(Math.PI* i* (j + .5)/numberOfSamples);

} samplesTransformed[i] = sampleTransformed;} return samplesTransformed; }

DiscreteCosineTransformHelper.samplesFrequencyToSpatialDomain =function(samplesToConvert){ var samplesTransformed = [];var numberOfSamples = samplesToConvert.length;for (var i = 0; i < numberOfSamples; i++){

var sampleTransformed = samplesToConvert[0] / 2;for (var j = 1; j < numberOfSamples; j++){

sampleTransformed += samplesToConvert[j]* 2* Math.cos(Math.PI* (i + .5)* (j)/ numberOfSamples);

} sampleTransformed /= numberOfSamples;samplesTransformed[i] = sampleTransformed;

} return samplesTransformed; }} new DiscreteCosineTransform().main();

Page 119: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 119

cia em inúmeras matrizes, cada uma com o tamanho de 8x8 pixels. Portanto, tem-se

as várias matrizes compostas de 64 pixels, conhecidas como sample values. Sobre estas

matrizes é aplicado a DCT, gerando outras matrizes, denominadas de “Coeficientes de

DCT”, cuja maioria dos elementos tem valores próximos a zero, esse processo trans-

lada a informação do domínio do espaço para o domínio da frequência, utilizando uma

normalização dos valores, apresentado na Equação 4.30, que é, aplicar um conjunto de

regras que visa, principalmente, a organização dos dados para reduzir a redundância,

aumentar a integridade e o desempenho alcançado no armazenamento [62].

Z =X− α

θ(4.30)

Onde, o X é o valor a ser normalizado, α é a média aritmética da distribuição e

θ é o desvio padrão da distribuição. A DCT para uma matriz (ou seja, uma imagem/-

quadro) de tamanho NxM é apresentado na Equação 4.31.

F(µ, ϑ) =

(2N

) 12(

2M

) 12 N−1

∑i=0

M−1

∑j=0

∆(i)∆(j)cos[πµ

2N(2i + 1)

]cos[

πϑ

2M(2j + 1)

]f (i, j)

(4.31)

No qual, F(µ, ϑ) representa o coeficiente no domínio da transformada, µ é o eixo

horizontal no domínio da transformada, o ϑ é o eixo vertical no domínio da transfor-

mada, ∆(x) = 1√2

para x = 0, ∆(x) = 1 para x 6= 0, x = µ|ϑ, f (i, j) é a amplitude no

domínio do tempo, o i é eixo horizontal no domínio do tempo e o j é o eixo vertical no

domínio do tempo. A inversa (Inverse Discrete Cosine Transform - IDCT), é apresentada

na Equação 4.32.

F−1(µ, ϑ) (4.32)

Fazendo a aplicação da Equação 4.31, a DCT ocupa mais espaço do que a sua

matriz original, já que, os valores da matriz original são do tipo byte, ou inteiro, e os

coeficientes da DCT são reais. Para reduzir esses valores, é realizada a quantização,

que é o processo de reduzir o número de bits necessários para armazenar um valor

reduzindo a precisão de um inteiro. É neste processo de quantização, que acontece a

Page 120: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 120

perda da informação, ou seja, os valores dos coeficientes que eram reais, agora passam

a ser inteiros, perdendo a parte decimal, mas reduzindo o número de bits necessários

para armazenar os valores [62]. Para o formato JPEG, a quantização é apresentada pela

Equação 4.33.

Q [i] [j] = 1 + (1 + i + j)δ (4.33)

Onde o δ é um valor para a qualidade da imagem, sendo de 1 a 25. Valores mai-

ores do que 25 comprometem em muito a qualidade da imagem, perdendo completa-

mente as informações nela existente. Na Tabela 4.5, é apresentado os valores de quali-

dade aplicados a uma imagem de 400x400 pixels, resultando em uma dada compressão.

Tabela 4.5 – Fatores de Qualidade (baseado em [62]).

Qualidade (δ) 2 5 10 15 20 25Taxa de Compressão (%) 20.59 10.38 5.82 4.22 3.43 3.00Perda de Informação (%) 8.39 10.07 11.55 12.23 12.49 13.84Identificador (id) 1 2 3 4 5 6

Após o procedimento de quantização, a imagem/quadro é armazenada no banco

de dados com um tamanho reduzido, podendo voltar para as aplicações desenvolvi-

das quando for necessário executar um PDI/V, utilizando a IDCT. Para o sistema de

armazenamento das imagens/quadros foram utilizados comandos da linguagem SQL

(Structured Query Language) implementada juntamente ao JavaScript, com uma lingua-

gem de script PHP (Hypertext Preprocessor) para fazer toda a comunicação entre as apli-

cações, web/local e o banco de dados [65]. O driver utilizado foi o MySQL, que é um

SGBD (Sistema de Gerenciamento de Banco de Dados), que utiliza a linguagem SQL

como interface [66].

Aplicando a Equação 4.32, é visto que, quando recuperado os pixels da imagem,

os valores foram bem próximos dos originais, provando que as perdas são desprezí-

veis, somente as altas frequências foram descartadas, como visualizado na Figura 4.8.

Todos os resultados obtidos com esses algoritmos e técnicas serão apresentados no ca-

pítulo 5.

Page 121: Eficiência, qualidade e compressão do processamento digital

Capítulo 4. Algoritmo/Equações 121

Figura 4.8 – Comparação entre a imagem/quadro original e a IDCT (baseado em [63]).

Page 122: Eficiência, qualidade e compressão do processamento digital

122

5 Resultados

5.1 Partial Differential Equation

O primeiro teste da Partial Differential Equation [67] foi para medir o tempo de

processamento de três imagens/quadros na etapa de filtragem de um ruído, como vi-

sualizado na Figura 5.1. A razão entre o sinal-ruído (SNR - Signal to Noise Ratio) é uma

maneira útil e universal de comparar as quantidades relativas de sinal e ruído para

qualquer sistema eletrônico, no qual, razões altas terão pouco ruído visível enquanto

o oposto vale para baixas razões. Sendo assim, foi utilizado um SNR de grau interme-

diário, ou seja, ruído aleatório, que é caracterizado por flutuações de intensidade e tom

de cor em relação a imagem/quadro original, deixando menos nítido.

Figura 5.1 – Comparativo do tempo de processamento da filtragem: (A) Algoritmo 1;e (B) Algoritmo 2.

Como resultado, o “Algoritmo 1” (representado como a técnica padrão de filtra-

gem com uso de máscara e análise de pixels por vizinhança [10]) gerou em média a

matriz MxN das três imagens/quadros em 73,1 segundos e a análise e padronização

do histograma em 42 segundos, enquanto o “Algoritmo 2” (representado como a téc-

Page 123: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 123

nica apresentada na pesquisa) em 58 segundos e 32,4 segundos, respectivamente. Em

relação as três imagens/quadros (Figura 5.2, Figura 5.3 e Figura 5.4), o tempo médio

de processamento no “Algoritmo 1” foi de 24,6 segundos, enquanto no “Algoritmo 2”

foi de 20,13 segundos, com isso, gerou uma economia em tempo de 4,47 segundos.

O segundo teste gerado, é para analisar o perfil em termos de qualidade dos

pixels, para isso, as três imagens/quadros (Figura 5.2, Figura 5.3 e Figura 5.4) foram

matricialmente comparadas a nível de pixel. Para essa análise comparativa foram uti-

lizadas três placas de vídeo NVIDIA GeForce GTX 1070 Ti e dois processadores Intel

Core i9-8950HK, demorando 37 horas, 14 minutos e 02 segundos para conclusão. Como

resultado, o “Algoritmo 2” atingiu em média 91% de qualidade e precisão nos pixels

gerados, enquanto o “Algoritmo 1” atingiu 83%.

Para calcular o valor médio do PSNR (Peak Signal to Noise Ratio), que é usado para

definir a relação entre a máxima energia de um sinal e o ruído que afeta sua represen-

tação fidedigna, se faz a formulação do MSE (Mean Squared Error) (representado na

Equação 5.1) e depois aplica a relação sinal-ruído (representado na Equação 5.2).

MSE =1

MN

M−1

∑i=0

N−1

∑j=0‖ Imagem1(i, j)− Imagem2(i, j)) ‖2 (5.1)

PSNR = 20log10 (255)− 10log10 (MSE) (5.2)

Para o “Algoritmo 1” o valor médio do PSNR atingido foi de 31,90dB, mas no

“Algoritmo 2” o valor foi de 45,09dB, com isso, gerou um ganho de 13,19dB. E o úl-

timo teste realizado foi a nível de histograma, comparando as três imagens/quadros

(Figura 5.2, Figura 5.3 e Figura 5.4), como visualizado na Figura 5.5, classificando o

“Algoritmo 2” como melhor a nível de qualidade de histograma, apresentando em

cada camada RGB um número maior de pixels localizados na zona de tons médios.

O “Algoritmo 1”, por sua vez, teve uma concentração maior de pixels nas zonas de

sombras e luzes altas.

Page 124: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 124

Figura 5.2 – Aplicação da técnica de filtragem - Exemplo 1: (A) Imagem Original 4K;(B) Imagem com ruído; (C) Filtragem Normal (31,92dB); e (D) Partial

Differential Equation (46,58dB).

Page 125: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 125

Figura 5.3 – Aplicação da técnica de filtragem - Exemplo 2: (A) Imagem Original 4K;(B) Imagem com ruído; (C) Filtragem Normal (32,57dB); e (D) Partial

Differential Equation (44,55dB).

Page 126: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 126

Figura 5.4 – Aplicação da técnica de filtragem - Exemplo 3: (A) Imagem Original 4K;(B) Imagem com ruído; (C) Filtragem Normal (31,23dB); e (D) Partial

Differential Equation (44,15dB).

Page 127: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 127

Figura 5.5 – Comparativo do histograma das imagens/quadros filtrados: (A)Algoritmo 1; e (B) Algoritmo 2.

Page 128: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 128

5.2 High Dynamic Range

O primeiro teste de High Dynamic Range [67] foi para medir o tempo de proces-

samento na geração da imagem resultante, utilizando para isso a Figura 5.6.

Figura 5.6 – Imagem resultante HDR utilizada no primeiro teste.

Como resultado, o “Algoritmo 1” (representado como Debevec and Malik [44])

processou a imagem em 19,8 segundos, enquanto o “Algoritmo 2” (representado como

a técnica apresentada na pesquisa) em 12,4 segundos, obtendo um ganho de 7,4 segun-

dos do anterior, como visualizado na Figura 5.7.

Figura 5.7 – Comparativo do tempo de processamento HDR: (A) Algoritmo 1; e (B)Algoritmo 2.

O segundo teste realizado foi a nível de histograma, já que, o “Algoritmo 2”

efetua uma padronização dos pixels da imagem resultante HDR, ou seja, faz uma aná-

lise matricial e gráfica previamente, obtendo as melhores combinações dos pixels de

vizinhança, sendo assim, a Figura 5.6 é comparada, como visualizado na Figura 5.8,

classificando o “Algoritmo 2” como melhor a nível de qualidade de histograma, apre-

sentando em cada camada RGB um número maior de pixels localizados na zona de

Page 129: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 129

tons médios. O “Algoritmo 1”, por sua vez, teve uma concentração maior de pixels nas

zonas de sombras e luzes altas.

Figura 5.8 – Comparativo do histograma da imagem HDR: (A) Algoritmo 1; e (B)Algoritmo 2.

O terceiro teste gerado, é para analisar o perfil em termos de qualidade dos pi-

Page 130: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 130

xels na imagem resultante HDR, para isso, uma nova imagem resultante foi gerada

matricialmente e comparadas a nível de pixel. Para essa análise comparativa foram uti-

lizadas três placas de vídeo NVIDIA GeForce GTX 1070 Ti e dois processadores Intel

Core i9-8950HK, demorando 7 horas, 12 minutos e 23 segundos para conclusão. Como

resultado, o “Algoritmo 2” atingiu 93% de qualidade e precisão nos pixels gerados,

enquanto o “Algoritmo 1” atingiu 77%, como visualizado na Figura 5.9.

Figura 5.9 – Comparativo na qualidade da Imagem HDR: (A) Algoritmo 1; e (B)Algoritmo 2.

Page 131: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 131

O último teste gerado leva em consideração a técnica de Tone Mapping [47], o

primeiro passo foi medir o tempo de processamento na geração da técnica HDR/Tone

Mapping. Como resultado, o “Algoritmo 2” desempenhou tempos mais baixos de pro-

cessamento do que o “Algoritmo 1”, como visualizado na Figura 5.10, tendo como base

seis imagens diferentes para esse teste.

Figura 5.10 – Comparativo do tempo de processamento da técnica HDR/ToneMapping: (A) Algoritmo 1; e (B) Algoritmo 2.

O segundo passo, foi analisar o perfil em termos de qualidade dos pixels entre

o Tone Mapping normal (“Algoritmo 1”) e o Tone Mapping resultante (“Algoritmo 2”),

podendo perceber que no modelo resultante os pixels alcançaram um poder de visuali-

zação quase igual ao da Imagem HDR (também gerado em “Algoritmo 2”), como visu-

alizado na Figura 5.11, Figura 5.12, Figura 5.13, Figura 5.14, Figura 5.15 e Figura 5.16.

Para esse feito, uma máscara de filtro “controle dinâmico de brilho e aproximação”

desenvolvida juntamente com a técnica do “Algoritmo 2” na pesquisa, foi alocada na

frente da imagem gerada para que o valor pixel seja aproximado ao valor real HDR,

dando assim aos pixels de vizinhança um valor mais visível do que realmente é nos

monitores comuns. Para a análise nas seis imagens comparativas foram utilizadas três

placas de vídeo NVIDIA GeForce GTX 1070 Ti e dois processadores Intel Core i9-8950HK,

demorando 86 horas, 34 minutos e 12 segundos para conclusão.

Page 132: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 132

Figura 5.11 – Aplicação da técnica HDR/Tone Mapping - Exemplo 1: (A) Tone Mappingnormal; (B) Imagem HDR; e (C) Tone Mapping resultante.

Page 133: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 133

Figura 5.12 – Aplicação da técnica HDR/Tone Mapping - Exemplo 2: (A) Tone Mappingnormal; (B) Imagem HDR; e (C) Tone Mapping resultante.

Page 134: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 134

Figura 5.13 – Aplicação da técnica HDR/Tone Mapping - Exemplo 3: (A) Tone Mappingnormal; (B) Imagem HDR; e (C) Tone Mapping resultante.

Page 135: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 135

Figura 5.14 – Aplicação da técnica HDR/Tone Mapping - Exemplo 4: (A) Tone Mappingnormal; (B) Imagem HDR; e (C) Tone Mapping resultante.

Page 136: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 136

Figura 5.15 – Aplicação da técnica HDR/Tone Mapping - Exemplo 5: (A) Tone Mappingnormal; (B) Imagem HDR; e (C) Tone Mapping resultante.

Page 137: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 137

Figura 5.16 – Aplicação da técnica HDR/Tone Mapping - Exemplo 6: (A) Tone Mappingnormal; (B) Imagem HDR; e (C) Tone Mapping resultante.

Page 138: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 138

5.3 Discrete Cosine Transform

O primeiro teste da Discrete Cosine Transform [67] foi para medir o tempo de pro-

cessamento de duas imagens/quadros, como visualizado na Figura 5.17. Como resul-

tado, o “Algoritmo 1” (representado como a técnica padrão da aplicação DCT/IDCT

[62]) processou em média as duas imagens/quadros em 33,3 segundos, enquanto o

“Algoritmo 2” (representado como a técnica apresentada na pesquisa) em 25,7 segun-

dos, com isso, gerou uma economia em tempo de 7,6 segundos.

Figura 5.17 – Comparativo do tempo de processamento na DCT/IDCT: (A) Algoritmo1; e (B) Algoritmo 2.

O segundo teste gerado, é para analisar o perfil em termos de qualidade dos pi-

xels na imagem/quadro, para isso, as duas imagens/quadros (Figura 5.18 e Figura 5.19)

foram matricialmente comparadas a nível de pixel. Para essa análise comparativa fo-

ram utilizadas três placas de vídeo NVIDIA GeForce GTX 1070 Ti e dois processadores

Intel Core i9-8950HK, demorando 16 horas, 07 minutos e 14 segundos para conclusão.

Como resultado, o “Algoritmo 2” atingiu em média 98% de qualidade e precisão nos

pixels gerados, enquanto o “Algoritmo 1” atingiu 91%.

Page 139: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 139

Figura 5.18 – Comparativo na qualidade da imagem/quadro usando DCT/IDCT -Exemplo 1: (A) Original; (B) Algoritmo 1; e (C) Algoritmo 2.

Page 140: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 140

Figura 5.19 – Comparativo na qualidade da imagem/quadro usando DCT/IDCT -Exemplo 2: (A) Original; (B) Algoritmo 1; e (C) Algoritmo 2.

Page 141: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 141

O terceiro teste realizado foi a nível de histograma, comparando as duas ima-

gens/quadros (Figura 5.18 e Figura 5.19), como visualizado na Figura 5.20, classifi-

cando o “Algoritmo 2” como melhor a nível de qualidade de histograma, apresentando

em cada camada RGB um número maior de pixels localizados na zona de tons médios.

O “Algoritmo 1”, por sua vez, teve uma concentração maior de pixels nas zonas de

sombras e luzes altas.

Figura 5.20 – Comparativo do histograma das imagens/quadros com DCT/IDCT: (A)Algoritmo 1; e (B) Algoritmo 2.

O quarto teste realizado foi a visualização gráfica dos sessenta e quatro pixels ini-

ciais da Figura 5.18 em cada fase da DCT/IDCT, aplicados com a técnica apresentada

na pesquisa, comprovando que a imagem/quadro original que foi aplicado a DCT, de-

pois de recuperar do armazenamento em banco de dados e aplicado a IDCT, voltou

em quase 100% de igualdade, como visualizado na Figura 5.21.

Page 142: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 142

Figura 5.21 – Gráficos das etapas dos pixels na DCT/IDCT.

Page 143: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 143

O último teste realizado foi a demonstração/aplicação de duas imagens/qua-

dros (Figura 5.22 e Figura 5.23), inserindo a IDCT na fase de armazenamento do banco

de dados, podendo ser visualizado com dimensões de 4x2px à 2048x1024px. No caso,

as duas aplicações (JavaScript e Java) utilizam as dimensões de 32x16 para armazenar

no BD (que tem um tamanho médio de 1,55Kb, muito menor do que o tamanho da

imagem/quadro original que tem em média 3,5Mb), já que de todos os testes feitos fo-

ram o de melhor proporção, gerando resultado de quase 100% com a imagem/quadro

original.

Figura 5.22 – Aplicação da técnica DCT/IDCT - Exemplo 1.

Page 144: Eficiência, qualidade e compressão do processamento digital

Capítulo 5. Resultados 144

Figura 5.23 – Aplicação da técnica DCT/IDCT - Exemplo 2.

Page 145: Eficiência, qualidade e compressão do processamento digital

145

6 Conclusão

Em síntese, a pesquisa avalia o impacto na qualidade, tempo de processamento

e o armazenamento de três técnicas/algoritmos desenvolvidas para o processamento

digital de imagem/vídeo, que são: Partial Differential Equation, High Dynamic Range e

Discrete Cosine Transform, com o uso máximo dos processadores (Central Process Unit e

Graphics Processing Unit) e das threads. Para isso, foram criados modelos matemáticos e

análises precisas dos pixels, baseado em sua matriz de vizinhança.

Sendo assim, as três técnicas/algoritmos desenvolvidas na pesquisa tiveram re-

sultados melhores comparados aos modelos convencionais. Esse novo modelo permite

a busca dos melhores pixels de forma matricial, permitindo que os pixels da vizinhança

sejam padronizados, além do uso do histograma para avaliar a melhor posição dos

pixels nas áreas médias.

Essa padronização é baseada na técnica MSAA (MultiSample Anti-Aliasing), no

qual cria um processo inteligente de renderização de múltiplas cópias de cada pixel e a

interpolação entre eles, recebendo um ganho de qualidade em até 2,3%.

Em relação aos ganhos das três técnicas/algoritmos desenvolvidas (Partial Dif-

ferential Equation, High Dynamic Range e Discrete Cosine Transform), o valor médio do

PSNR (Peak Signal to Noise Ratio) ficou em aproximadamente 8dB, comparando os ga-

nhos de todos os testes feitos nas imagens/quadros durante a pesquisa.

A qualidade das imagens/quadros gerados, teve em média um aumento de 12%

em relação a imagem/quadro original, isso em termos de precisão dos pixels, compa-

rando todos os testes feitos durante a pesquisa, além do ganho significativo em tempo

de execução. Todo o conteúdo será utilizado para trabalhos futuros na área de proces-

samento digital de imagem/vídeo.

Page 146: Eficiência, qualidade e compressão do processamento digital

146

7 Trabalhos Futuros

7.1 Doutorado

No Doutorado, a área de pesquisa será voltada para animações 3Ds (três dimen-

sões) inteligentes e com alto desempenho no processamento dos dados. A animação

3D é uma das técnicas mais utilizadas para o desenvolvimento de desenhos animados

e produções de cinema. Com a evolução da tecnologia, o modelo digital permitiu a cri-

ação de camadas de cor, além de diferentes ângulos nas animações, sendo esses fatores

fundamentais para o desenvolvimento das animações 3Ds, o ponto considerado crítico

para esta tecnologia é o tempo gasto de desenvolvimento das animações [68].

Pelas pesquisas já analisadas na área, é possível extrair informações, utilizando

ferramentas de reconhecimento facial, que possibilitam a obtenção de movimentos fa-

ciais com precisão e qualidade para gerar as futuras animações automaticamente, se

baseando nos movimentos do próprio rosto do intérprete e, em cada frame capturado

é gerado uma varredura de análises matemáticas para o aprendizado da “máquina”

através da tecnologia de inteligência artificial, por exemplo, deep learning e machine le-

arning. [68].

Sendo assim, para realizar todas as etapas corretamente, é preciso seguir uma

ordem sequencial de passos, o primeiro, é gravar a interpretação do ator, fazendo a

captura de todos os movimentos e expressões da face. Na coleta de cada frame é feito

o uso da inteligência artificial para aprender como cada movimento é realizado sendo

armazenado no banco de dados para posterior uso. O próximo passo é criar uma pré-

modelagem 3D do rosto para dar início a criação do personagem. Por fim, a animação

3D é gerada, automaticamente, a partir dos movimentos feitos pelo seu próprio intér-

prete [68].

Page 147: Eficiência, qualidade e compressão do processamento digital

147

Referências

[1] G. Câmara, R. C. M. Souza et al., “Spring: Integrating remote sensing and gis by

object-oriented data modelling,” Elsevier - Computers & Graphics, vol. 20, pp. 395–

403, Atlanta, Georgia / USA: Elsevier Ltd, May-June 1996.

[2] A. M. Barbosa, Abordagem Triangular no Ensino das Artes e Culturas Visuais, 1st ed.

Perdizes, São Paulo / Brazil: Cortez Editora, January 2010.

[3] O. Dictionaries, Oxford Dictionary of English, 3rd ed. Oxford, United Kingdom /

England: OUP Oxford, July 2010.

[4] W. K. Guthrie, The Greek Philosophers: From Thales to Aristotle, 1st ed. New York

City, New York / USA: Harper & Row, August 1975.

[5] J. Marenbon, Medieval Philosophy: An Historical and Philosophical Introduction,

1st ed. Abingdon-on-Thames, United Kingdom / England: Routledge, November

2006.

[6] E. Pound, Hugh Selwyn Mauberley, 1st ed. Fulton, Missouri / USA: Ovid Press,

September 1920.

[7] C. T. Harrison, Bacon, Hobbes, Boyle and the Ancient Atomists, 15th ed. Cambridge,

Massachusetts / USA: Harvard University Press, July 1933.

[8] A. P. Martinich, F. Allhoff, and A. J. Vaidya, Early Modern Philosophy: Essential Re-

adings with Commentary, 1st ed. Hoboken, New Jersey / USA: Wiley-Blackwell,

January 2007.

[9] I. Kant, Crítica da razão pura, 4th ed. Petrópolis, Rio de Janeiro / Brazil: Editora

Vozes Ltda, January 2012.

[10] R. Gonzalez and P. Woods, Digital Image Processing, 3rd ed. New York City, New

York / USA: Pearson, June 2007.

Page 148: Eficiência, qualidade e compressão do processamento digital

Referências 148

[11] J. Bezerra, “Revolução industrial,” https://www.todamateria.com.br/revolucao-

industrial/, November 2018.

[12] C. B. Silveira, “O que é indústria 4.0?” https://www.citisystems.com.br/industria-

4-0/, November 2018.

[13] B. Jähne, Digital Image Processing, 1st ed. Tiergartenstraße, Heidelberg / Ger-

many: Springer-Verlag Berlin Heidelberg, April 2005.

[14] T. Acharya and A. K. Ray, Image Processing: Principles and Applications, 1st ed. Ho-

boken, New Jersey / USA: John Wiley & Sons, September 2005.

[15] R. E. Woods and R. C. Gonzalez, Digital Image Processing, 2nd ed. Upper Saddle

River, New Jersey / USA: Prentice Hall, April 1992.

[16] A. N. Rencz and R. A. Ryerson, Remote Sensing for the Earth Sciences, 3rd ed. Ho-

boken, New Jersey / USA: John Wiley & Sons, July 1999.

[17] D. Forsyth and J. Ponce, Computer Vision: A modern approach, 2nd ed. New York

City, New York / USA: Pearson, November 2001.

[18] C. D. Hansen and C. R. Johnson, The Visualization Handbook, 1st ed. Cambridge,

Massachusetts / USA: Academic Press, December 2004.

[19] “Instituto nacional de metrologia, qualidade e tecnologia - inmetro, sistema inter-

nacional de unidades - si,” http://www4.inmetro.gov.br/, August 2019.

[20] J. Serra, Image Analysis and Mathematical Morphology, 1st ed. Lincoln, United King-

dom / England: Academic Press, December 1982.

[21] J. C. Russ, The Image Processing Handbook, 6th ed. Boca Raton, Florida / USA:

CRC Press, April 2011.

[22] D. Flanagan, JavaScript: The Definitive Guide, 1st ed. Sebastopol, California / USA:

O’Reilly Media, June 2011.

Page 149: Eficiência, qualidade e compressão do processamento digital

Referências 149

[23] S. Oaks, Java Performance: The Definitive Guide: Getting the Most Out of Your Code,

1st ed. Sebastopol, California / USA: O’Reilly Media, May 2014.

[24] J. Duckett, HTML and CSS: Design and Build Websites, 1st ed. Hoboken, New

Jersey / USA: Wiley, November 2011.

[25] M. S. Silva, Fundamentos de HTML5 e CSS3, 1st ed. Santa Terezinha, São Paulo /

Brazil: Novatec, June 2015.

[26] J. Duckett, JavaScript and Jquery: Interactive Front-End Web Development, 1st ed. Ho-

boken, New Jersey / USA: Wiley, June 2014.

[27] B. Eisenman, Learning React Native: Building Native Mobile Apps with JavaScript,

2nd ed. Sebastopol, California / USA: O’Reilly Media, April 2017.

[28] S. Powers, Learning Node: Moving to the Server-Side, 2nd ed. Sebastopol, California

/ USA: O’Reilly Media, May 2016.

[29] L. Bassett, Introdução ao JSON: Um Guia Para JSON que vai Direto ao Ponto, 1st ed.

Santa Terezinha, São Paulo / Brazil: Novatec, September 2015.

[30] D. R. F. Izario, Y. Iano et al., “Development of a Digital Image Processing Web Tool

for a Monitoring System Relying on an Unmanned Ground Vehicle,” Proceedings

of the 3rd Brazilian Technology Symposium, vol. 1, pp. 111–116, New York City, New

York / USA: Springer International Publishing, April 2018.

[31] “Ffmpeg,” https://www.ffmpeg.org/, October 2018.

[32] S. G. de Oliveira and J. T. de Assis, “A Methodology for Identification of Finger-

prints based on Gabor Filter,” IEEE Latin America Transactions, vol. 4, New York

City, New York / USA: IEEE, March 2006.

[33] B. Bhanu and X. Tan, Computational Algorithms for Fingerprint Recognition, 1st ed.

New York City, New York / USA: Springer, June 2004.

Page 150: Eficiência, qualidade e compressão do processamento digital

Referências 150

[34] J. Serra, “Introduction to mathematical morphology,” Journal Computer Vision,

Graphics and Image Processing, vol. 35, pp. 283–305, San Diego, California / USA:

Academic Press Professional, Inc, April 1986.

[35] T. Zemel, “Filtros css3,” http://desenvolvimentoparaweb.com/ css/filtros-css3/,

October 2018.

[36] P. Graham, On Lisp, 1st ed. Upper Saddle River, New Jersey / USA: Prentice

Hall, June 1993.

[37] M. Shokeen, “Editando imagens no css: Filtros,”

https://code.tutsplus.com/pt/tutorials/editing-images-in-css-filters–cms-

25948, October 2018.

[38] D. R. F. Izario, I. M. de Oliveira et al., “UGV Solutions: Processamento digital de

imagem/vídeo e sensoriamento utilizando PLX-DAQ,” Artigo de TCC (Graduação -

Engenharia de Computação), pp. 1–23, Santa Rita do Sapucaí, Minas Gerais / Brazil:

Instituto Nacional de Telecomunicações - INATEL, April 2017.

[39] A. Yadav and P. Yadav, Digital Image Processing, 1st ed. Darya Ganj, New Delhi

/ India: Laxmi Publications Pvt Ltd, December 2009.

[40] W. Burger, Principles of Digital Image Processing: Core Algorithms, 1st ed. New York

City, New York / USA: Springer, July 2009.

[41] D. R. F. Izario, Y. Iano et al., “Técnicas de suavização para eliminação de ruídos e

detecção de bordas em imagens,” BTSym 2017 Proceedings, vol. 1, Campinas, São

Paulo / Brazil: Brazilian Technology Symposium - BTSym, April 2017.

[42] D. Izario, Y. Iano et al., “Técnicas de processamento digital de imagem (High-

Dynamic Range),” BTSym 2018 Proceedings, vol. 1, Campinas, São Paulo / Brazil:

Brazilian Technology Symposium - BTSym, December 2018.

[43] R. Concepcion, The HDR Book: Unlocking the Pros’ Hottest Post-Processing Techni-

ques, 1st ed. San Francisco, California / USA: Peachpit Press, July 2011.

Page 151: Eficiência, qualidade e compressão do processamento digital

Referências 151

[44] P. E. Debevec and J. Malik, “Recovering high dynamic range radiance maps from

photographs,” Special Interest Group on Computer Graphics and Interactive Techni-

ques, vol. 1, New York City, New York / USA: SIGGRAPH ACM, August 2008.

[45] K. Herrmann, “HDR Before-and-After,” https://farbspiel-photo.com/learn/hdr-

before-and-after, October 2018.

[46] F. McCollough, “What is HDR Photography?” http://www.hdr-

photography.com/articles/ what_is_hdr_photography.php, October 2017.

[47] Macphun, “Tone Mapping in HDR. What It is and How to Use It?”

https://macphun.com/blog/what-is-tone-mapping, October 2017.

[48] D. R. F. Izario, Y. Iano et al., “Edge-Detection Noise-Smoothing Image Filter Tech-

niques,” Proceedings of the 3rd Brazilian Technology Symposium, vol. 1, pp. 117–122,

New York City, New York / USA: Springer International Publishing, April 2018.

[49] M. Boaventura, C. A. Z. Barcelos, and E. C. S. Jr., “A well-balanced flow equa-

tion for noise removal and edge detection,” IEEE Transactions on Image Processing,

vol. 12, pp. 751–763, Hoboken, New Jersey / USA: IEEE Xplore, July 2003.

[50] C. A. Z. Barcelos, M. Boaventura, and E. C. S. Jr., “Edge detection and noise re-

moval by use of a partial differential equation with automatic selection of para-

meters,” Computational & Applied Mathematics, vol. 24, Petrópolis, Rio de Janeiro /

Brazil: Sociedade Brasileira de Matemática Aplicada e Computacional, April 2005.

[51] E. H. Land and J. J. McCann, “Lightness and Retinex Theory,” Journal of the Optical

Society of America, vol. 61, pp. 1–11, Washington, District of Columbia / USA: OSA

Publishing, December 1971.

[52] L. M. Surhone, M. T. Timpledon, and S. F. Marseken, Weber-Fechner Law: Stimu-

lus, Quantitative Research, Gustav Fechner, Ernst Heinrich Weber, Constant of Integra-

tion, Natural Logarithm, 1st ed. Saarbrücken, Saarland / Germany: Betascript

Publishing, August 2010.

Page 152: Eficiência, qualidade e compressão do processamento digital

Referências 152

[53] F. Garrett, “Saiba o que é processador e qual sua função,”

https://www.techtudo.com.br/artigos/noticia/2012/02/o-que-e-

processador.html, October 2018.

[54] Y. Pacievitch, “Processador,” https://www.infoescola.com/informatica/proces

sador/, November 2018.

[55] “Significado de cpu,” https://www.significados.com.br/cpu/, November 2018.

[56] W. W. Hwu, GPU Computing Gems Emerald Edition, 1st ed. Burlington, Massa-

chusetts / USA: Morgan Kaufmann, February 2011.

[57] R. J. da Silva Martins, “Coastline Watch - Processamento de imagens com GPU em

algoritmos de monitorização da linha da costa,” Faculdade de Ciências e Tecnologia,

vol. 1, Lisbon, Lisbon / Portugal: Universidade Nova de Lisboa, September 2015.

[58] F. M. Q. Pereira, “Técnicas de Otimização de Código para Placas de Processa-

mento Gráfico,” Universidade Federal de Minas Gerais, vol. 1, Belo Horizonte, Minas

Gerais / Brazil: Departamento de Ciência da Computação - DCC, May 2018.

[59] “Intel,” https://www.intel.com.br/content/www/br/pt/homepage.html, Octo-

ber 2018.

[60] “NVIDIA GeForce,” https://www.nvidia.com/pt-br/geforce/, October 2018.

[61] A. Miller, S. Halloway, and A. Bedra, Programming Clojure, 3rd ed. Raleigh, North

Carolina / USA: Pragmatic Bookshelf, March 2018.

[62] K. R. Rao and P. Yip, Discrete Cosine Transform: Algorithms, Advantages and Applica-

tions, 1st ed. Cambridge, Massachusetts / USA: Academic Press, June 1990.

[63] D. R. F. Izario, Y. Iano et al., “Digital Image Processing with Data Storage for Se-

curity Applications,” Proceedings of the 3rd Brazilian Technology Symposium, vol. 1,

pp. 103–109, New York City, New York / USA: Springer International Publishing,

April 2018.

Page 153: Eficiência, qualidade e compressão do processamento digital

Referências 153

[64] S. Fulton and J. Fulton, HTML5 Canvas: Native Interactivity and Animation for the

Web, 2nd ed. Sebastopol, California / USA: O’Reilly Media, November 2013.

[65] L. Thomson and L. Welling, PHP and MySQL Web Development, 5th ed. Boston,

Massachusetts / USA: Addison-Wesley Professional, June 2016.

[66] C. Technology, SQL QuickStart Guide: The Simplified Beginner’s Guide to SQL, 1st ed.

Albany, New York / USA: ClydeBank Media LLC, June 2015.

[67] D. R. F. IZARIO, Y. IANO et al., “Technical review on digital image/video pro-

cessing algorithms,” SET International Journal of Broadcast Engineering, pp. 34–39,

São Paulo, São Paulo / Brazil: SET International Journal of Broadcast Engineering,

December 2018.

[68] D. IZARIO, Y. IANO et al., “Face recognition techniques using artificial intelli-

gence for audio-visual animations,” SET International Journal of Broadcast Enginee-

ring, pp. 78–82, São Paulo, São Paulo / Brazil: SET International Journal of Broad-

cast Engineering, December 2017.

Page 154: Eficiência, qualidade e compressão do processamento digital

Apêndices

Page 155: Eficiência, qualidade e compressão do processamento digital

155

APÊNDICE A – Publicações do Autor

Artigos completos publicados em periódicos:

1. IZARIO, D. R. F.; IANO, Y.; IZARIO, B. R. F.; CASTRO, D. A. P.. Technical review on di-

gital image/video processing algorithms. SET International Journal of Broadcast Engineering,

p. 34-39, 2018. [ISSN Print: 2446-9246]. [ISSN Online: 2446-9432]. [doi:10.18580/setijbe

.2018.4].

2. CASTRO, D. A. P.; IANO, Y.; CARDOSO, P. E. R.; BARBIERI, R. O.; IZARIO, D. R. F.;

CHUMA, E. L.; CARVALHO, S. M.. A Technical Study on Cooperative Structure of a Hy-

brid Network for Video Content Delivery. SET International Journal of Broadcast Engineering,

p. 17-22, 2018. [ISSN Print: 2446-9246]. [ISSN Online: 2446-9432]. [doi:10.18580/setijbe

.2018.2].

3. IZARIO, D. R. F.; IZARIO, B. R. F.; CASTRO, D. A. P.; IANO, Y.. Face recognition te-

chniques using artificial intelligence for audio-visual animations. SET International Journal of

Broadcast Engineering, p. 78-82, 2017. [ISSN Print: 2446-9246]. [ISSN Online: 2446-9432].

[doi:10.18580/setijbe.2017.11].

4. CASTRO, D. A. P.; IANO, Y.; CARDOSO, P. E. R.; CABELLO, F.; LEÓN, J.; BARBIERI,

R. O.; IZARIO, D. R. F.; IZARIO, B. R. F.. A Technical Study on the Transmission of HDR

Content over a Broadcast Channel. SET International Journal of Broadcast Engineering, p. 29-

35, 2017. [ISSN Print: 2446-9246]. [ISSN Online: 2446-9432]. [doi:10.18580/setijbe.2017.4].

Capítulos de livros publicados:

1. IZARIO, D. R. F.; IANO, Y.; IZARIO, B. R. F.; MARINS, C. N. M.. Estudo do aqueci-

mento de um Raspberry Pi 3 em manipulação de imagem e implementação de sistema

térmico. As Ciências Exatas e da Terra no Século XXI. 1ed. Ponta Grossa/PR: Atena

Editora, 2019, v. 1, p. 72-82. [ISBN: 978-85-7247-351-4]. [doi:10.22533/at.ed.514192405].

Page 156: Eficiência, qualidade e compressão do processamento digital

APÊNDICE A. Publicações do Autor 156

2. IZARIO, D. R. F.; IANO, Y.; IZARIO, B. R. F.; CASTRO, D. A. P.. Digital Image Proces-

sing with Data Storage for Security Applications. Proceedings of the 3rd Brazilian Technology

Symposium. 1ed. New York/United States: Springer International Publishing, 2019, v. 1, p.

103-109. [ISBN Print: 978-3-319-93111-1]. [ISBN Online: 978-3-319-93112-8]. [doi:10.1007

/978-3-319-93112-8_11].

3. IZARIO, D. R. F.; IANO, Y.; IZARIO, B. R. F.; MAGALHAES, L. P.; CASTRO, D. A. P..

Development of a Digital Image Processing Web Tool for a Monitoring System Relying on an

Unmanned Ground Vehicle. Proceedings of the 3rd Brazilian Technology Symposium. 1ed. New

York/United States: Springer International Publishing, 2019, v. 1, p. 111-116. [ISBN Print:

978-3-319-93111-1]. [ISBN Online: 978-3-319-93112-8]. [doi:10.1007/978-3-319-93112-8_

12].

4. IZARIO, D. R. F.; IANO, Y.; IZARIO, B. R. F.; CASTRO, D. A. P.; MARINS, C. N.

M.. Edge-Detection Noise-Smoothing Image Filter Techniques. Proceedings of the 3rd Brazi-

lian Technology Symposium. 1ed. New York/United States: Springer International Publishing,

2019, v. 1, p. 117-122. [ISBN Print: 978-3-319-93111-1]. [ISBN Online: 978-3-319-93112-

8]. [doi:10.1007/978-3-319-93112-8_13].

5. ESTRELA, V. V.; HEMANTH, J.; SAOTOME, O.; GRATA, E. G. H.; IZARIO, D. R.

F.. Emergency Response Cyber-Physical System for Flood Prevention with Sustainable Electro-

nics. Proceedings of the 3rd Brazilian Technology Symposium. 1ed. New York/United States:

Springer International Publishing, 2019, v. 1, p. 319-328. [ISBN Print: 978-3-319-93111-1].

[ISBN Online: 978-3-319-93112-8]. [doi:10.1007/978-3-319-93112-8_33].

6. IZARIO, D. R. F.; MARINS, C. N. M.. UGV Solutions: UGVs e suas aplicações para

cidades inteligentes. Gestão da Produção em Foco. 1ed. Belo Horizonte/MG: Pois-

son, 2018, v. 19, p. 157-171. [ISBN: 978-85-93729-95-9]. [doi: 10.5935/978-85-93729-95-

9.2018B001].

Trabalhos completos publicados em anais de congressos:

1. IZARIO, D. R. F.; IANO, Y.; IZARIO, B. R. F.; MARINS, C. N. M.. Estudo do aqueci-

Page 157: Eficiência, qualidade e compressão do processamento digital

APÊNDICE A. Publicações do Autor 157

mento de um Raspberry Pi 3 em manipulação de imagem e implementação de sistema

térmico. Incitel - Congresso de Iniciação Científica do Inatel. Anais do Congresso de

Iniciação Científica do Inatel - Incitel. Santa Rita do Sapucaí/MG: INATEL, 2018. p.

84-88. [ISSN: 2359-6457].

2. IZARIO, D. R. F.; IANO, Y.; IZARIO, B. R. F.; MARINS, C. N. M.. Técnicas de pro-

cessamento digital de imagem (High-Dynamic Range). Brazilian Technology Symposium -

BTSym. BTSYM 2018 Proceedings. Campinas/SP: BTSym, 2018. v. 1. [ISSN: 2447-8326].

3. IZARIO, D. R. F.; IANO, Y.; IZARIO, B. R. F.; MARINS, C. N. M.. Técnicas para se-

gurança em aplicações web - baseado em message-digest algorithm. Incitel - Congresso

de Iniciação Científica do Inatel. Anais do Congresso de Iniciação Científica do Inatel -

Incitel. Santa Rita do Sapucaí/MG: INATEL, 2018. p. 162-166. [ISSN: 2359-6457].

4. IZARIO, D. R. F.; MAGALHAES, L. P.; MARINS, C. N. M.. UGVs e suas aplica-

ções para Cidades Inteligentes. Simpósio de Excelência em Gestão e Tecnologia - SE-

GeT. XIV SEGeT - Simpósio de Excelência em Gestão e Tecnologia. Resende/RJ: AEDB,

2017. p. 29-29. [ISSN: 2448-2676].

5. IZARIO, D. R. F.; IANO, Y.; IZARIO, B. R. F.; CASTRO, D. A. P.; MARINS, C. N.

M.. Técnicas de suavização para eliminação de ruídos e detecção de bordas em ima-

gens. Brazilian Technology Symposium - BTSym. BTSYM 2017 Proceedings. Campinas/SP:

BTSym, 2017. v. 1. [ISSN: 2447-8326].

6. IZARIO, D. R. F.; OLIVEIRA, I. M.; MAGALHAES, L. P.; ANDRADE, S. C.; MA-

RINS, C. N. M.. Bender - UGV. FETIN - Feira Tecnológica do Inatel. Revista Inatel.

Santa Rita do Sapucaí/MG: Inatel, 2017. v. 4. p. 26-27. [ISSN: 2316-5286].

7. IZARIO, D. R. F.; GONCALVES, E. D. C.; BRANCALHONE FILHO, J. L.; AN-

DRADE, S. C.; MARINS, C. N. M.. FisioGlove. FETIN - Feira Tecnológica do Inatel.

Revista Inatel. Santa Rita do Sapucaí/MG: Inatel, 2015. v. 3. p. 58-59. [ISSN: 2316-5286].

8. IZARIO, D. R. F.; TELLES, P. H. L. S.; MARINS, C. N. M.. Implementação de rotina

em MatLab para simulação no projeto de antenas. Incitel - Congresso de Iniciação Ci-

entífica do Inatel. Anais do Congresso de Iniciação Científica do Inatel - Incitel. Santa

Rita do Sapucaí/MG: Inatel, 2015. p. 204-207. [ISSN: 2359-6457].

9. IZARIO, D. R. F.; TELLES, P. H. L. S.; ANDRADE, S. C.; BORGES, S. M.; MARINS,

Page 158: Eficiência, qualidade e compressão do processamento digital

APÊNDICE A. Publicações do Autor 158

C. N. M.. As Aventuras de Inatelzinho II. FETIN - Feira Tecnológica do Inatel. Revista

Fetin. Santa Rita do Sapucaí/MG: Inatel, 2014. v. 3. p. 10-11. [ISSN: 2316-5286].

10. IZARIO, D. R. F.; TELLES, P. H. L. S.; BOAVIDA, H. G. C.; JORGE, G. F.; MARINS,

C. N. M.. As Aventuras de Inatelzinho. FETIN - Feira Tecnológica do Inatel. Revista

Inatel. Santa Rita do Sapucaí/MG: Inatel, 2013. v. 2. p. 8-9. [ISSN: 2316-5286].

11. IZARIO, D. R. F.; TELLES, P. H. L. S.; SOUSA, M. C.; SILVA, B. L.; GOMES, E. L. B..

Sarfex Software. FETIN - Feira Tecnológica do Inatel. Revista Fetin. Santa Rita do Sapu-

caí/MG: Inatel, 2012. v. 1. p. 32-33. [ISSN: 2316-5286].

Resumos publicados em anais de congressos:

1. IZARIO, D. R. F.; NOVAIS, F. R. M. A. P.; FREITAS, W. V. P.; MATIAS, N. T.; RI-

BEIRO, R. B.. Eu Jovem, em Busca da Profissão. VI Encontro de Iniciação Científica e

IV Mostra de Pós Graduação - UNIFATEA. Lorena/SP: ISPIC - Instituto Superior de

Pesquisa e Iniciação Científica, 2009. [ISBN: 85-99189-06-9].