Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
UNIVERSIDADE REGIONAL DE BLUMENAU
CENTRO DE CIÊNCIAS EXATAS E NATURAIS
CURSO DE CIÊNCIA DA COMPUTAÇÃO – BACHARELADO
FRAMEWORK PARA SUPER-RESOLUÇÃO DE IMAGENS
DIGITAIS EM IOS
MAICON FELDHAUS
BLUMENAU 2011
2011/2-17
MAICON FELDHAUS
FRAMEWORK PARA SUPER-RESOLUÇÃO DE IMAGENS
DIGITAIS EM IOS
Trabalho de Conclusão de Curso submetido à Universidade Regional de Blumenau para a obtenção dos créditos na disciplina Trabalho de Conclusão de Curso II do curso de Ciência da Computação — Bacharelado.
Prof. Paulo César Rodacki Gomes, Dr. - Orientador
BLUMENAU 2011
2011/2-17
FRAMEWORK PARA SUPER-RESOLUÇÃO DE IMAGENS
DIGITAIS EM IOS
Por
MAICON FELDHAUS
Trabalho aprovado para obtenção dos créditos na disciplina de Trabalho de Conclusão de Curso II, pela banca examinadora formada por:
______________________________________________________ Presidente: Prof. Paulo César Rodacki Gomes, Dr. – Orientador, FURB
______________________________________________________ Membro: Prof. Aurélio Faustino Hoppe, Msc. – FURB
______________________________________________________ Membro: Prof. Dalton Solano dos Reis, Msc. – FURB
Blumenau, 14 de dezembro de 2011
Dedico este trabalho a minha namorada, meus pais e todos os amigos, que me ajudaram e apoiaram na realização deste.
As coisas que vemos não são em si o que vemos. Continua completamente desconhecido para nós o que objetos podem ser em si mesmos e separados da receptividade dos nossos sentidos. Nada sabemos exceto o nosso modo de percebê-los...
Immanuel Kant
RESUMO
Este trabalho apresenta as técnicas envolvidas no desenvolvimento de um framework para realizar a Super-Resolução de imagens digitais de códigos de barras em dispositivos na plataforma iOS. A partir de algumas imagens de baixa resolução fornecidas, o framework é capaz de construir uma imagem com resolução superior às previamente amostradas – os códigos de barras devem estar centralizados na imagem. Por serem necessárias apenas duas cores, preto e branco, técnicas de limiarização (binarização) são empregadas, com o objetivo de remover pequenas distorções e, principalmente, efeitos de luz e sombra sobre a imagem.
Palavras-chave: Super-resolução. Limiarização. Código de barras.
ABSTRACT
This work presents the techniques used in the development of a framework that makes Super-Resolution of digital images of barcode. By some provided images in small resolution, the framework is able to construct an image with superior resolution than the previously sampled. For it has been necessary only two colors, black and white, techniques of threshold (binarization) are used, with the objective of removing little distortions and, mainly, light and shadow effects on the image.
Key-words: Super-resolution. Threshold. Barcode.
LISTA DE ILUSTRAÇÕES
Figura 1 – Código de barras de um livro (EAN-13) ................................................................. 13
Figura 2 – Exemplo do histograma de uma imagem ................................................................ 15
Figura 3 – Imagens em tons de cinza e seus respectivos histogramas: (a) alto contraste; (b)
baixo contraste ....................................................................................................... 16
Figura 4 – Efeito de limiarização: (a) imagem em tons de cinza; (b) histograma da imagem;
(c) limiarização com valor 80; (d) limiarização com valor 150 ............................ 16
Quadro 1 – Representação matemática da limiarização ........................................................... 17
Figura 5 – Fluxograma da técnica de limiarização de Bernsen ................................................ 18
Quadro 2 – Psedocódigo para a técnica de Wellner ................................................................. 19
Figura 6 – Médodo de Boustrophedon ou como o boi lavra .................................................... 19
Figura 7 – Efeito da baixa resolução espacial .......................................................................... 20
Figura 8 – Visão global da SR .................................................................................................. 21
Figura 9 – Demonstração do Zebra Barcode Reader em execução .......................................... 22
Figura 10 – Visão geral do processo ........................................................................................ 25
Figura 11 – Diagrama de casos de uso ..................................................................................... 26
Figura 12 – Diagrama de classes .............................................................................................. 28
Quadro 3 – Método thresholdBernsen da classe SureImage ..................................... 30
Quadro 4 – Trecho do método thresholdBernsenAdapted da classe SureImage .... 31
Figura 13 – Demonstração do processo de normalização ........................................................ 32
Figura 14 – Demonstração do mapeamento em três imagens .................................................. 33
Quadro 5 – Método binaryRowMeasured da classe SureImage ................................... 33
Figura 15 – Interface gráfica e seus principais componentes ................................................... 34
Figura 16 – (a) Imagem original; (b) Limiarização de Bernsen; (c) Limiarização de Bernsen
Adaptada; (d) Limiarização de Wellner ................................................................ 35
Figura 17 – Mapeamento de linhas binárias ............................................................................. 36
Figura 18 – Aplicativo exemplo e resultados obtidos .............................................................. 36
Quadro 6 – Comparação entre o trabalho e aplicativos correlatos ........................................... 37
LISTA DE TABELAS
Tabela 1 – Sistema a ser adotado conforme o 1o dígito ............................................................ 14
Tabela 2 – Codificação dos dígitos ........................................................................................... 14
LISTA DE SIGLAS
HR – High Resolution
HRI – Human Readable Information
IOS – Iphone Operating System
LR – Low Resolution
MVC – Model-View- Controller
RF – Requisito Funcional
RNF – Requisito Não-Funcional
SDK – Software Development Kit
SR – Super Resolução
UML – Unified Modeling Language
SUMÁRIO
1 INTRODUÇÃO .................................................................................................................. 11
1.1 OBJETIVOS DO TRABALHO ........................................................................................ 12
1.2 ESTRUTURA DO TRABALHO ...................................................................................... 12
2 FUNDAMENTAÇÃO TEÓRICA .................................................................................... 13
2.1 CÓDIGO DE BARRAS .................................................................................................... 13
2.1.1 EAN-13 ........................................................................................................................... 14
2.2 HISTOGRAMA DE IMAGEM DIGITAL ....................................................................... 15
2.2.1 Limiarização .................................................................................................................... 16
2.2.1.1 Limiarização adaptativa de Bernsen ............................................................................. 17
2.2.1.2 Limiarização adaptativa de Wellner ............................................................................. 18
2.3 SUPER-RESOLUÇÃO ..................................................................................................... 20
2.4 TRABALHOS CORRELATOS ........................................................................................ 22
2.4.1 Zebra Barcode Scanner ................................................................................................... 22
2.4.2 Barcode Scanner .............................................................................................................. 23
2.4.3 Super-Resolução Simultânea para Sequência de Imagens .............................................. 23
2.4.4 ClearCam ......................................................................................................................... 23
3 DESENVOLVIMENTO DO FRAMEWORK ................................................................ 24
3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO ....................... 24
3.2 ESPECIFICAÇÃO ............................................................................................................ 25
3.2.1 Visão Externa do Framework ......................................................................................... 26
3.2.2 Visão Estrutural ............................................................................................................... 27
3.2.3 Modelo do Domínio e Controle ...................................................................................... 27
3.3 IMPLEMENTAÇÃO ........................................................................................................ 29
3.3.1 Técnicas e ferramentas utilizadas .................................................................................... 29
3.3.1.1 Limiarização ................................................................................................................. 29
3.3.1.2 Normalização ................................................................................................................ 31
3.3.1.3 Mapeamento .................................................................................................................. 32
3.3.2 Operacionalidade da implementação .............................................................................. 34
3.4 RESULTADOS E DISCUSSÃO ...................................................................................... 35
4 CONCLUSÕES .................................................................................................................. 38
4.1 EXTENSÕES .................................................................................................................... 38
11
1 INTRODUÇÃO
Durante as décadas de 70 e 80 surgiram as primeiras câmeras digitais, que não tiveram
grande sucesso entre os consumidores, devido a uma baixa resolução e preços exorbitantes, se
comparadas com as analógicas da época. Seu mercado começa a crescer no final da década de
90, com a popularidade e evolução dos computadores, da internet e das mídias digitais, até
tornar-se um item inerente nos dispositivos móveis atuais (MATOS, 2004, p. 7-8).
Apesar das constantes evoluções, as imagens obtidas das câmeras de celulares ainda
são, em sua grande maioria, de baixa qualidade, por causa das limitações do aparelho. E, nem
sempre é viável, nem mesmo possível aperfeiçoar estas imagens utilizando-se de lentes e/ou
sensores mais sofisticados, por exemplo. Outros fatores também prejudicam a qualidade da
imagem, tais como o descolamento de objetos na cena, foco incorreto e carência ou excesso
de iluminação.
De acordo com Almeida e Tommaselli (2003, p. 164), a qualidade de uma imagem
digital é vinculada a resolução espacial e a radiométrica. A primeira é pertinente ao tamanho e
a quantidade de pixels que formam a imagem e a segunda é vinculada aos níveis de
luminosidade da cena. Então, para aumentar a resolução espacial e, consequentemente, a
qualidade da imagem sem o auxílio de equipamentos adicionais ou de imagens já captadas,
nasceram técnicas de processamento digital, entre elas a Super-Resolução (SR). Lara (2008)
define SR como um "termo dado a algoritmos que aumentam o poder de resolução da imagem
a partir de várias outras imagens de baixa resolução da mesma cena".
De acordo com exposto, propõe-se o estudo e desenvolvimento de uma técnica de SR
para remover distorções e realçar características da imagem, através de informações
provenientes de uma sequência de imagens do dispositivo móvel. Isso aplicado a plataforma
iPhone Operating System (iOS), seguindo os padrões de projeto determinados pela Apple,
com a competência de prover esta funcionalidade a desenvolvedores que necessitem deste
recurso para suas aplicações diversas.
12
1.1 OBJETIVOS DO TRABALHO
O objetivo deste trabalho é desenvolver um framework para iOS capaz de fornecer
uma imagem com qualidade superior às imagens de baixa resolução, previamente,
amostradas.
Os objetivos específicos do trabalho são:
a) permitir a obtenção de imagens com resolução melhor do que as imagens
adquiridas nativamente pelo iPhone;
b) permitir utilizar a câmera do aparelho ou fotos armazenadas como amostras de
imagens, essas com baixa resolução;
c) ler e exibir o valor numérico do código de barras, para corroborar o resultado;
d) seguir os padrões de projetos definidos pela Apple, já que o Software Development
Kit (SDK) do mesmo é fortemente baseado nesses padrões;
e) disponibilizar um aplicativo exemplo que utilize uma técnica de SR no framework.
1.2 ESTRUTURA DO TRABALHO
Este trabalho está organizado em quatro capítulos. O capitulo 2 apresenta o
embasamento teórico necessário para a SR de imagens de códigos de barras . Primeiramente é
feita uma explanação sobre códigos de barras. Em seguida são descritos o histograma de
imagens e também as técnicas para limiarização. Na sequencia, são explicados os conceitos
fundamentais e as etapas envolvidas no processo de SR. Por fim, são apresentados e
discutidos alguns trabalhos correlatos ao presente trabalho.
O capitulo 3 descreve o desenvolvimento do framework, apresentando os seus
principais requisitos, sua especificação e detalhes referentes à sua implementação. Também
são comentadas questões relacionadas à operacionalidade do framework e realizada uma
discussão sobre os resultados obtidos.
Finalmente, o capitulo 4 apresenta as conclusões deste trabalho e perspectivas de
trabalhos futuros.
13
2 FUNDAMENTAÇÃO TEÓRICA
Esse capitulo apresenta os tópicos relevantes para o processo de SR em códigos de
barras. A seção 2.1 aborda os conceitos básicos referentes a códigos de barras. Na seção 2.2
são discutidos histograma de imagens e técnicas de limiarização. A seção 2.3 apresenta o
conceito básico da SR e as principais etapas envolvidas nesse processo. Por fim, na seção 2.4
são apresentados alguns trabalhos correlatos ao trabalho proposto.
2.1 CÓDIGO DE BARRAS
O código de barras é uma representação gráfica de dados formado por barras claras (0)
e escuras (1), obtendo-se assim combinações binárias que podem ser utilizadas por um
computador. Quando o código de barras de um produto é lido, pode-se rastrear algumas
informações acerca dele, tais como nome e preço. O mesmo ocorre nos códigos usados em
boletos bancários, por exemplo, onde os dados obtidos são da transação, como: conta,
agência, valor, vencimento, etc.
Conforme Artero e Santos (2010, p. 187), “essa representação é intensamente utilizada,
sendo dividida em vários tipos, entre eles os mais comuns [são os padrões] EAN-13, EAN-8,
UPC-A, UPC-E” e Intercalado 2 de 5. Na Figura 1, vemos um exemplo de código de barras
no padrão EAN-13.
Figura 1 – Código de barras de um livro (EAN-13)
14
2.1.1 EAN-13
Este padrão de código de barras possui treze dígitos, dos quais os três primeiros
representam o código do país, os quatro seguintes representam o código da empresa
fabricante, que deve ser filiada ao órgão internacional de logística, responsável pelo cadastro e
emissão de prefixos numéricos no sistema EAN (ARTERO; SANTOS, 2010, p. 187). Os
próximos cinco dígitos representam o item comercial dentro da empresa e o último número é
um dígito verificador usado para confirmar se a leitura do código foi feita de forma correta.
Possui duas barras (mais compridas) delimitadoras no inicio, no meio e no fim.
A partir do primeiro dígito é possível encontrar o primeiro e segundo grupo de dígitos
que serão usados, como pode ser visto na Tabela 1. Após encontrada a sequencia, comuta-se
para valores binários, de acordo com a Tabela 2 e, obtém-se assim, uma sucessão de zeros e
uns, que representam barras brancas e pretas, consequentemente.
Tabela 1 – Sistema a ser adotado conforme o 1o dígito 1o Dígito 1o Grupo 2o Grupo
0 AAAAAA CCCCCC 1 AABABB CCCCCC 2 AABBAB CCCCCC 3 AABBBA CCCCCC 4 ABAABB CCCCCC 5 ABBAAB CCCCCC 6 AAABBA CCCCCC 7 ABABAB CCCCCC 8 ABABBA CCCCCC 9 ABBABA CCCCCC
Fonte: adaptado de Artero e Santos (2010, p. 187).
Tabela 2 – Codificação dos dígitos Dígito Classe A Classe B Classe C
0 0001101 0100111 1110010 1 0011001 0110011 1100110 2 0010011 0011011 1000010 3 0111101 0100001 1011100 4 0100011 0011101 1011100 5 0110001 0111001 1001110 6 0101111 0000101 1010000 7 0111011 0010001 1000100 8 0110111 0001001 1001000 9 0001011 0010111 1110100
Fonte: adaptado de Artero e Santos (2010, p. 187).
15
2.2 HISTOGRAMA DE IMAGEM DIGITAL
O histograma de uma imagem é simplesmente um conjunto de números indicando o
percentual de pixels naquela imagem que apresentam um determinado nível de cinza
(MARQUES FILHO; VIERA NETO, 1999, p. 55). Geralmente é representado por um gráfico
de barras que mostra o percentual de cada nível de cinza correspondente na imagem (Figura
2). Ele é construído da seguinte forma:
a) analisa-se o tom de cinza de cada pixel;
b) conta-se o número de pixels de cada valor de intensidade;
c) normalizam-se esses valores, dividindo-os pela quantidade de pixels da imagem;
d) representam-se esses valores na forma de tabela ou gráfico.
Figura 2 – Exemplo do histograma de uma imagem
Para Azevedo, Conci e Leta (2008, p. 77), através do histograma podemos obter uma
indicação quanto a distribuição ao nível de contraste e do brilho médio, ou seja, se a imagem é
clara ou escura (Figura 3). De acordo com Marques Filho e Viera Neto (1999, p. 58-59), é
conveniente enfatizar que, apesar de o histograma fornecer diversas informações sobre a
imagem, conclusões de caráter qualitativo somente podem ser extraídas dispondo-se da
imagem propriamente dita.
16
Fonte: adaptado de Azevedo, Conci e Leta (2008, p. 96).
Figura 3 – Imagens em tons de cinza e seus respectivos histogramas: (a) alto contraste; (b) baixo contraste
2.2.1 Limiarização
Para Marques Filho e Viera Neto (1999, p. 71), a limiarização consiste em separar as
regiões de uma imagem quando esta apresenta duas classes, o fundo e o objeto. Em outras
palavras, consiste em transformar uma imagem em tons de cinza em uma imagem com apenas
dois tons (binária), os pixels podem ser preto ou branco (FACON, 2004). A forma mais
simples de limiarizar a imagem consiste em dividir o histograma em duas partes, em um
determinado valor de limiar. O efeito da limiarização pode ser visto na Figura 4.
Fonte: Azevedo, Conci e Leta (2008, p. 85).
Figura 4 – Efeito de limiarização: (a) imagem em tons de cinza; (b) histograma da imagem; (c) limiarização com valor 80; (d) limiarização com valor 150
17
Imagens binárias, que possuem apenas dois valores (preto e branco), geralmente, são
úteis quando a silhueta contém informação suficiente para se reconhecer um objeto. Para que
isso seja possível, as imagens devem conter um alto contraste entre as regiões a serem
separadas e a iluminação uniforme. A complexidade computacional de um sistema trabalhando com 256 cores tons de níveis de cinza será bem maior que um sistema trabalhando com uma imagem binária. O tempo de processamento é mais baixo porque muitas operações em imagem binárias podem ser executadas como operações lógicas, em vez de operações aritméticas. (AZEVEDO; CONCI; LETA, 2008, p. 80).
Matematicamente, para Marques Filho e Viera Neto (1999, p. 71), a limiarização pode
ser descrita como uma técnica na qual uma imagem de entrada f(x,y), em tons de cinza,
produz à saída uma imagem g(x,y), onde, normalmente, g(x,y) apresenta 2 níveis de cinza,
selecionados a partir de um limite T, sendo:
! !,! = 1, !" !(!,!) ≥ !0, !" !(!,!) < !
Quadro 1 – Representação matemática da limiarização
As técnicas de limiarização podem ser globais ou locais. Uma técnica global encontra
um limiar único para toda a imagem. Uma técnica local encontra limiares distintos
considerando as características dos pixels vizinhos, ou seja, adapta-se a região a qual está
localizado. As técnicas locais apresentam melhores resultados quando existe pouca variação
do nível de cinza do objeto e do fundo e a iluminação é não uniforme. De acordo com Silva
(2009, p. 19), as técnicas globais exigem menos processamento, visto que uma vez definido
um limiar, o único processamento restante é a separação dos objetos da imagem.
2.2.1.1 Limiarização adaptativa de Bernsen
A limiarização adaptativa de Bernsen consiste em uma técnica onde, para cada pixel, o
limiar é escolhido como o valor intermediário entre o menor e o maior tom de cinza
encontrado na vizinhança (SILVA, 2009, p. 27). Durante esse processo alguns valores devem
ser definidos: tamanho da vizinha (NxN), contraste mínimo (N) e contraste (C). O contraste é
a diferença entre o máximo e o mínimo nível de cinza dado.
Com estes valores em mãos, segundo Sebastiane (2009, p. 48), o próximo passo é
verificar se o contraste (C) é maior que o contraste mínimo (N). Em caso afirmativo, se o
pixel tiver valor maior que o limiar (L), ele recebe cor branca, caso contrário, preta.
Entretanto, se o contraste da região for inferior ao contraste mínimo, e o valor do limiar (L)
18
for maior que 127 (média entre 0 e 255) o pixel passa a ser branco, caso contrário, preto
(Figura 5).
Fonte: adaptado de Sebastiane (2009, p. 49).
Figura 5 – Fluxograma da técnica de limiarização de Bernsen
2.2.1.2 Limiarização adaptativa de Wellner
A técnica de Wellner, ou média móvel, como também é conhecida, calcula uma média
dos níveis de cinza dos últimos (N) pixels que foram observados. Conforme Silva (2009, p.
31), a média encontrada passa a ser o limiar (L) naquele momento e a cada ponto percorrido,
descarta-se um valor proporcional e acrescenta ao calculo da valor do pixel atual, de acordo
com o Quadro 2.
19
Fonte: adaptado de Silva (2009, p. 32). Quadro 2 – Psedocódigo para a técnica de Wellner
Para evitar desvio de um lado da imagem para outro, um método chamado
Boustrophedon é empregado (conhecido também como “o caminho que o boi lavra”). Isso
significa atravessar a imagem em direções opostas em cada linha (SILVA, 2009, p. 31). Por
exemplo, inicia-se a varredura da linha, partindo da primeira coluna até a final, na linha
seguinte faz-se o caminho inverso, da última coluna até a inicial, e assim sucessivamente (ver
Figura 6).
Figura 6 – Médodo de Boustrophedon ou como o boi lavra
INICIO lin,col <- tamanho (imagem) media <- col/8 soma <- 127*media PARA i <- 1 ATÉ lin FAÇA SE (numero da linha for par) ENTÃO PARA j <- 1 ATÉ col FAÇA soma <- soma – (soma/media) + imagem[i,j] porcentagem <- (soma/media) * (1-pct) SE imagem[i,j] > porcentagem ENTÃO imagem[i,j] <- branco SENÃO imagem[i,j] <- preto FIM SE FIM PARA FIM SE SE (numero da linha for impar) ENTÃO PARA j <- col ATÉ 1 FAÇA soma <- soma – (soma/media) + imagem[i,j] porcentagem <- (soma/media) * (1-pct) SE imagem[i,j] > porcentagem ENTÃO imagem[i,j] <- branco SENÃO imagem[i,j] <- preto FIM SE FIM PARA FIM SE FIM PARA FIM.
20
2.3 SUPER-RESOLUÇÃO
Segundo Silva (2009, p. 2), “a resolução [espacial] de uma imagem é a quantidade de
pixels que representa dada cena”. Portanto, conforme pode ser observado na Figura 7, quanto
maior a resolução espacial, melhor a qualidade da imagem no que diz respeito a representação
de detalhes capturados desta cena. Uma alternativa para aumentar a resolução de imagens,
sem ter que modificar o hardware responsável pela aquisição das imagens, é a utilização de
técnicas de SR.
Fonte: adaptado de Zibetti (2007, p. 1).
Figura 7 – Efeito da baixa resolução espacial
Estas técnicas combinam imagens de baixa resolução espacial (Low Resolution - LR)
de uma mesma cena, com o intuito de obter uma ou várias imagens de alta resolução espacial
(High Resolution - HR). As imagens LR da amostragem, apesar de pertencerem a mesma
cena, possuem características diferentes entre elas: diferentes projeções, pequenas variações
na resolução espacial e deslocamentos de pixel.
Apesar das imagens LR capturadas terem grande semelhança entre si, uma pequena
diferença de informação encontrada entre essas proporciona uma nova informação para a
recuperação dos detalhes nas imagens HR. A forma mais comum de obter-se esta informação
é no movimento de subpixel, que ocorre quando o movimento existente entre as imagens é
fracionário com respeito à grade de baixa resolução (ZIBETTI, 2007, p. 2-3).
A maioria dos métodos de SR, propostos na literatura, consistem, basicamente, de três
estágios: registro, interpolação e restauração (KANG; PARK; PARK, 2003, p. 24-25). Na
fase de registro, os deslocamentos relativos entre imagens LR são estimados com precisão de
pixel fracionário. Obviamente, a estimativa precisa de movimento de subpixel é um fator
muito importante para o sucesso do algoritmo de reconstrução de imagem SR (Figura 8).
21
Fonte: adaptado de Walt (2010, p. 14).
Figura 8 – Visão global da SR
O segundo estágio refere-se ao mapeamento dos pixels manipulados pelo primeiro
estágio, uma vez que as mudanças entre as imagens LR são arbitrárias, e nem sempre a
imagem HR corresponde ao esperado. Assim, a interpolação não-uniforme é necessária para
obter uma imagem HR uniformemente espaçadas. Ao final, é aplicada a restauração para
eliminar o desfoque e ruídos, ocasionados durante o processo.
Entretanto, o uso de uma sequência de imagens com movimento pode ocasionar
algumas dificuldades para os algoritmos SR. Isso devido a erros na estimativa de movimento
ou devido a elementos que apareçam/desapareçam entre o conjunto de imagens LR. Nestes
casos é inevitável a ocorrência de erros, portanto, o algoritmo SR deve ser robusto a esses.
22
2.4 TRABALHOS CORRELATOS
Nesta seção são apresentados, brevemente, quatro trabalhos que aplicam técnicas de
SR ou realizam leitura de códigos de barras, os quais são: Zebra Barcode Scanner (FARIA,
2008), Barcode Scanner (ZXING, 2011), Super-Resolução Simultânea para Sequência de
Imagens (ZIBETTI, 2007) e ClearCam (APPLE INC, 2010a).
2.4.1 Zebra Barcode Scanner
Zebra Barcode Reader é uma solução de código aberto, que roda em Linux, capaz de
decodificar um código de barras através da captura de uma webcam ou imagens gravadas no
disco (FARIA, 2008). Este roda em plataforma Linux e tem suporte aos padrões mais
populares de códigos de barras: EAN-8, EAN-13, UPC-A, CODE 128, CODE 39 e
intercalado 2 de 5.
Segundo Faria (2008), uma imagem contendo o código de barras é enviada para
processamento e, a seguir, é calculada a largura das barras para uma posterior decodificação.
O pacote Zebra utiliza técnicas eficazes para a localização e decodificação do código de
barras. O resultado final é semelhante aos leitores que encontramos em supermercado. Na
Figura 9 vemos o projeto em execução, o usuário exibe um código de barras para a webcam,
este é identificado e, em seguida, decodificado.
Fonte: Faria (2008).
Figura 9 – Demonstração do Zebra Barcode Reader em execução
23
2.4.2 Barcode Scanner
Barcode Scanner é um aplicativo desenvolvido em Java, para dispositivos Android
que, aliado à câmera digital do aparelho, lê as informações de QR Code, e também de códigos
de barra simples – e fornece informações ao usuário (ZXING, 2011).
De acordo com Veras (2011), este software pode ser utilizado em conjunto com outras
aplicações, com o programa instalado no dispositivo, cria-se um link na aplicação e o mesmo
chama o programa que vai ler o código de barras e retorna o resultado à aplicação.
2.4.3 Super-Resolução Simultânea para Sequência de Imagens
Zibetti (2007) propõe o aperfeiçoamento (redução do custo computacional) e robustez
da SR simultânea. Os algoritmos simultâneos estimam toda a sequência de imagens HR
conjuntamente, em um único processo. Onde a partir de um conjunto de imagens LR, obtém-
se um conjunto de imagens HR, empregando no processo as imagens HR previamente
alcançadas. Estes métodos são convenientes para aplicações onde é almejada uma sequência
de imagens e não apenas uma única imagem.
2.4.4 ClearCam
Por fim, no mercado há o ClearCam, aplicativo desenvolvido para a plataforma iOS,
que apõe uma técnica de SR em uma sequência de seis imagens adquiridas a partir da câmera
do dispositivo, permitindo a manipulação e armazenamento da imagem HR (APPLE INC,
2010a). Este elimina borrões causados por mãos tremulas ou objetos em movimento. Também
reduz ruídos originados da falta de luz.
24
3 DESENVOLVIMENTO DO FRAMEWORK
Este capítulo detalha as etapas do desenvolvimento do framework. São apresentados os
requisitos, a especificação e a implementação do mesmo, mencionando as técnicas e
ferramentas utilizadas. Também são comentadas questões referentes à operacionalidade do
mesmo e os resultados obtidos.
3.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO
Para o framework proposto, foi criado um protótipo com interface gráfica, que tem por
objetivo permitir ao usuário fornecer as imagens necessárias para o processo de SR e
visualizar o resultado.
Desta forma, foram elicitados, analisados e validados os seguintes requisitos:
a) permitir a entrada de uma sequência de imagens de uma mesma cena (Requisito
Funcional – RF);
b) permitir que esta sequência de imagens possam ser capturadas diretamente da
câmera do iPhone (RF);
c) exibir uma imagem com resolução superior ao do conjunto de três amostras
informadas (RF);
d) exibir o valor numérico do código de barras, com o intuito de evidenciar o
resultado (RF);
e) ser desenvolvido para a plataforma iOS (Requisito Não-Funcional – RNF);
f) ser implementado na linguagem Objective-C (RNF);
g) utilizar a câmera do dispositivo para obtenção das imagens (RNF).
25
3.2 ESPECIFICAÇÃO
A especificação do software em questão foi desenvolvida seguindo a análise orientada
a objetos, utilizando a notação Unified Modeling Language (UML). Uma visão geral do
processo envolvido pode ser visto na Figura 10.
Figura 10 – Visão geral do processo
Primeiramente é efetuada a aquisição das imagens, através de imagens em arquivo ou
captura da câmera do dispositivo. Ao carregar, essas imagens são convertidas para tons de
cinza. Após isso é realizada a limiarização dos códigos de barras, para discernir as barras
pretas das brancas, apenas em algumas linhas.
Em seguida, efetua-se a normalização e o mapeamento entre as imagens, ou seja,
compara-se cada linha para encontrar o bit (1 para preto e 0 para branco) denominador, ao fim
dessa fase tem-se um valor binário. Com a informação em forma binária, entra-se na fase de
decodificação, onde são efetuados os cálculos necessários para obter o valor numérico e com
isso pode-se validar o resultado. Por fim, tem-se um valor binário que pode ser, facilmente,
transformado em uma imagem HR.
26
3.2.1 Visão Externa do Framework
Esta seção visa fornecer uma perspectiva do framework desenvolvido a partir de um
ponto de vista externo. Para tal, é utilizado o diagrama de casos de uso. No framework em
questão, o aplicativo faz o papel de iniciador, ou seja, é a entidade externa que dá inicio à
sequencia de interações dele com o sistema. As principais interações do aplicativo com o
framework são apresentadas no diagrama de casos de uso da Figura 11.
Figura 11 – Diagrama de casos de uso
As duas primeiras interações que o aplicativo pode ter com o framework estão
especificadas nos casos de uso Carregar imagem do disco e Capturar imagem da
câmera, os quais permitem ao aplicativo fornecer como entrada as imagens que serão
utilizadas no processo.
Os quatro próximos casos de uso (Aplicar limiarização simples, Aplicar
limiarização de Bernsen, Aplicar limiar de Wellner e Aplicar limiarização de
Bernsen adaptada) têm como objetivo permitir ao aplicativo realizar a limiarização em uma
imagem. Uma condição para estes casos de uso é que a imagem deve estar carregada.
O caso de uso Buscar linha binarizada tem por finalidade retornar ao aplicativo,
uma linha de uma imagem, previamente carregada, com valores binários. Este inclui o caso de
uso Aplicar limiarização de Bernsen adaptada. Em seguida, tem-se o caso de uso
Buscar linha mensurada (que inclui o caso de uso anterior), este retorna o valor binário
mapeado entre três linhas binárias.
27
Por fim, o caso de uso Decodificar código de barras, possui como pré-condição
um código binário, e retorna ao aplicativo o valor real (Human Readable Information - HRI).
Este caso de uso pode ser executado a qualquer momento, desde que haja o código binário a
ser traduzido.
3.2.2 Visão Estrutural
Esta seção apresenta o framework desenvolvido visto sob seu aspecto estrutural. É
apresentada a arquitetura do sistema e, através de diagramas de classes, descreve-se como as
classes que o compõem estão estruturadas e relacionadas.
O software foi desenvolvido utilizando o padrão de arquitetura Model-View-
Controller (MVC) em conjunto com o padrão de projeto Target-action (APPLE INC, 2010b).
O padrão MVC divide o código em três áreas funcionais independentes: model, view e
controler. O Model define o motor do aplicativo e é responsável por manter a integridade dos
dados. A View define a interface com o usuário e não está explicitamente ligada a origem dos
dados. O Controler atua como uma ponte entre o Model e a View e facilita as atualizações
entre eles (APPLE INC, 2010c).
No padrão de projeto Target-action um objeto contém as informações necessárias para
enviar uma mensagem para outro objeto quando um evento ocorre. A informação armazenada
é composta por dois itens de dados: um seletor de ação, que identifica o método a ser
chamado, e uma meta, que é o objeto para receber a mensagem (APPLE INC, 2010b).
3.2.3 Modelo do Domínio e Controle
Este seção tem por objetivo descrever as entidades referentes ao domínio do problema,
o qual refere-se as técnicas envolvidas na construção da imagem SR. O diagrama de classes
da Figura 12 apresenta as principais classes e estruturas de dados, bem como o
relacionamento entre elas.
28
Figura 12 – Diagrama de classes
Primeiramente, temos a classe SureViewController que é responsável por criar uma
ponte entre o modelo e a view. É responsável, também, por dar inicio à execução do
aplicativo, instanciando e inicializando os itens da interface, bem como encerrar a execução e
liberar a memória alocada.
A classe SureMain, por sua vez, tem por objetivo iniciar o processo de SR. Esta classe
agrega três objetos SureImage, que são carregados através das funções loadImagesFromFile
ou loadImagesFromCamera.
Para representar as imagens e realizar os cálculos sobre estas, foi definida a classe
SureImage. Esta classe encapsula os dados dos pixels (atributo pixelData) e suas dimensões.
Dentre os principais métodos desta classe, tem-se:
a) thresholdBernsen: aplica a limiarização local de Bernsen na imagem;
b) thresholdBernsenAdapted: aplica a limiarização local de Bernsen adaptada na
imagem;
c) binaryRowThresholded: retorna, por referencia, uma linha da imagem com os
valores binarizados;
d) binaryRowMeasured: retorna, por referencia, uma linha mensurada, com base em um
cálculo realizado entre outras linhas;
e) visitNeighborhoodIn: retorna, por referencia, os valores mínimo e máximo de uma
vizinhança de pixels.
Por fim, a classe SureBarcode, é responsável por realizar os cálculos referentes a
códigos de barras. Tais como, normalizar uma linha binária, ou seja, decifrar o tamanho de
cada barra para ser decodifica, obtendo-se assim o valor numérico do código de barras.
29
3.3 IMPLEMENTAÇÃO
Esta seção tem por objetivo apresentar as ferramentas e bibliotecas utilizadas para a
implementação do software proposto, bem como trechos de código fonte e questões referentes
à operacionalidade do mesmo.
3.3.1 Técnicas e ferramentas utilizadas
A implementação do framework foi realizada utilizando a linguagem de programação
Objective-C, juntamente com o iPhone SDK, que inclui: o ambiente de desenvolvimento
XCode; editor de interface Interface Builder – para demonstração dos resultados; e o
simulador do iPhone.
Para distinguir, de forma minuciosa, as barras pretas e brancas, são utilizadas técnicas
de limiarização adaptativa. Para fins de comparação, duas foram selecionadas, a técnica de
Bernsen e a técnica de Wellner. O conceito de SR é adotado para confrontar os dados das
diferentes imagens utilizadas no processo.
3.3.1.1 Limiarização
Com o intuito de distinguir as barras brancas das pretas foi utilizado um método de
limiarização. Conforme descrito na seção 2.2.1, a limiarização global é mais veloz, pois
possui um limiar único para toda a imagem, porém não é eficaz quando a imagem possui
baixo contraste ou está sob o efeito de luz e/ou sombra.
Para sanar essa deficiência surgiram as limiarizações locais, onde o limiar é calculado
a partir do pixel corrente. Dentre os métodos existentes, dois foram selecionados: Bernsen e
Wellner. Ambos foram implementados para análise dos resultados e decisão do mais eficiente
a ser utilizado.
No framework desenvolvido, o método de Bernsen pode ser encontrado na função
thresholdBernsen da classe SureImage, sem a necessidade de passagem de parâmetros, já
que nesse ponto a imagem está carregada e em escala de cinza. Basicamente, o método
30
percorre toda a imagem (rows e cols), e para cada pixel, analisa o valor máximo e o valor
mínimo, então encontra o limiar através da média dos valores encontrados. Seu código fonte é
encontrado no Quadro 3.
- (void)thresholdBernsen { // copy pixelData to temp UInt8 UInt8 pixelDataTemp[length]; [self copyData:pixelDataTemp]; // initialize int index, value; int max, min; int xs, xe, ys, ye; int distance = 5; // for each pixel for (int x = 0; x < rows; x ++) { xs = x - distance; xe = x + distance; for (int y = 0; y < cols; y ++) { ys = y - distance; ye = y + distance; min = 255; max = 0; // look neighbors [self visitNeighborhoodIn:pixelDataTemp beginningX:xs endX:xe beginningY:ys endY:ye value:&max value:&min]; // black or white? index = (x * bytesPerRow) + (y * 4); if ((max-min) > distance) { value = (pixelDataTemp[index] >= (max+min)/2) ? 255 : 0; } else { value = ((max+min)/2 > 127) ? 255 : 0; } [self setPixelGray:index setGray:value]; } } }
Quadro 3 – Método thresholdBernsen da classe SureImage
Analisando o código do Quadro 3 percebe-se que, ele percorre cada pixel da imagem e
vasculha sua vizinhança, em uma determinada distância, em busca do valor máximo e mínimo
– função visitNeighborhoodsIn. Caso o contraste entre max e min seja menor que a
distância percorrida nos pixels vizinhos, assume-se o limiar com valor 127 (média entre 255 e
0). Após encontrado o limiar, o valor do pixel é determinado da seguinte forma, se maior ou
igual ao limiar é branca, caso menor, é preto.
31
Da mesma forma que a técnica anterior, o médoto de Wellner percorre toda a imagem,
mas leva em consideração apenas os últimos pixels visitados. Portanto, se a região percorrida
for muito clara, o limiar tende a ser elevado, o mesmo ocorre para regiões escuras. Seu
pseudocódigo é exemplificado na seção 2.2.1.2, no Quadro 2.
Assumindo o método de Bernsen para a limiarização de barras verticais, com o
objetivo de obter o valor binário, para então encontrar o número correspondente do código,
modificações foram aplicadas. Tratando-se de barras verticais, percorre-se apenas a
vizinhança na horizontal. E ao invés de usar o limiar 127 (quando houver um baixo contraste),
aumenta-se a distância da região a ser percorrida, até encontrar um contraste razoável ou o
fim da linha. O trecho do código do método thresholdBernsenAdapted, como a alteração
relatada, encontra-se no Quadro 4.
- (void) thresholdBersenAdapted { [...] // while contraste is small while (((max-min) <= distance) && ((ys > 0) || (ye < cols))) { ys --; ye ++; [self visitNeighborhoodIn:pixelDataTemp beginningX:x endX:x+1 beginningY:ys endY:ye value:&max value:&min]; } [...] }
Quadro 4 – Trecho do método thresholdBernsenAdapted da classe SureImage
Se o contraste for muito pequeno e a linha ainda não foi percorrida por inteiro,
continua-se o while até que uma das condições seja falsa. E a cada nova iteração, busca-se
um novo valor máximo e mínimo, atualizando as posições ys (inicial) e ye (final), que são
afastadas, abrangendo dessa maneira uma vizinhança maior de pixels.
Partindo do pressuposto que o código de barras está no centro da imagem ou próximo a
ele, não há necessidade de aplicar a limiarização em toda a imagem. Tomando como partida o
centro, analisa-se uma linha acima e outra abaixo, para realizar o mapeamento.
3.3.1.2 Normalização
Na etapa de normalização o processo consiste em converter a linha binarizada, de
forma a permitir que a fase de comparação seja eficaz. Para isto calcula-se a largura das barras
e, logo após, define-se 1 pixel para barra simples, 2 pixels para barra dupla e assim
sucessivamente – levando em consideração o padrão EAN-13, que inicia com duas barras
32
simples. Desta forma, pode-se efetuar a comparação de imagens de tamanhos e deslocamentos
diferentes.
Na Figura 13 vemos uma demonstração deste processo, onde vê-se três códigos de
barras em disposições diferentes. No primeiro é ignorada a primeira barra (de acordo com o
padrão EAN-13). No segundo temos barras deslocadas, o que ocasiona um aumento na
largura das barras, mas que é compensado com a normalização. No terceiro caso, tem-se uma
largura maior da barras, mas novamente ajustado.
Figura 13 – Demonstração do processo de normalização
Este procedimento é executado na classe SureBarcode no método normalize. Na
função normalize é chamada função findPeak com o objetivo de encontrar a largura da
barra simples, para então normalizar a linha binarizada.
3.3.1.3 Mapeamento
No processo de mapeamento, logo após a binarização das linhas desejadas, aplica-se o
conceito de SR, onde é realizada uma votação entre os dados de três linhas de uma imagem.
Verifica-se qual valor dominante para cada posição dessas linhas. O resultado é novamente
exposto a uma nova eleição entre o produto das demais imagens.
Na Figura 14 vê-se a exemplificação desta etapa, onde três imagens distintas, mas
pertencentes ao mesmo código de barras, são comparadas entre si.
33
Figura 14 – Demonstração do mapeamento em três imagens
Analisando o código fonte da função binaryRowMeaseured da classe SureImage no
Quadro 5, vê-se a instancia de três linhas – a escolha de um número impar se deve ao fato de
não haver empates. Em seguida, os campos destas linhas são preenchidos pela função
binaryRowThresholded (que retorna uma linha binarizada através da técnica de Bernsen).
Tratando-se de valores binários, soma-se o valor de cada linha na posição em questão,
caso seja maior que 1, houve maior incidência de cor preta (1), caso contrário, houve maior
contingente de cor branca (0).
- (void)binaryRowMeasured:(int *)row { // initialize int row1[cols]; int row2[cols]; int row3[cols]; // get rows [self binaryRowThresholded:rows/2-10 to:row1]; [self binaryRowThresholded:rows/2 to:row2]; [self binaryRowThresholded:rows/2+10 to:row3]; // mapping for (int i = 0; i < cols; i ++) { row[i] = ((row1[i] + row2[i] + row3[i]) > 1) ? 1 : 0; } }
Quadro 5 – Método binaryRowMeasured da classe SureImage
34
3.3.2 Operacionalidade da implementação
Esta seção tem por objetivo mostrar, em nível de usuário, a operacionalidade do
framework desenvolvido. Para isto, foi criado um aplicativo exemplo, com uma interface
gráfica (Figura 15), de forma a exibir os resultados obtidos.
Figura 15 – Interface gráfica e seus principais componentes
O uso a nível de usuário é simples e exige poucas ações. Primeiramente, devem ser
carregadas as amostradas, para isso o usuário deve selecionar as imagens em arquivo do
dispositivo ou capturar da câmera do mesmo. Após carregadas, as três amostras são exibidas
nas suas devidas janelas.
Ao clicar no botão, no canto inferior esquerdo, o processo será iniciado. Será realizada
então a limiarização, normalização e mapeamento das imagens. Nas imagens três linhas são
vistas com a limiarização, e na parte superior dessas imagens é sobreposto o código resultante
35
do processo, para que possa ser comparado. Através do código binário encontrado, é efetuada
a decoficação do mesmo, o valor obtido é informado no canto inferior direito (ver Figura 18).
3.4 RESULTADOS E DISCUSSÃO
O presente trabalho apresentou um estudo referente ao processo de criação de imagens
HR a partir de amostras LR, mais especificamente de imagens de códigos de barras, para
dispositivos da plataforma iOS.
Primeiramente foram discutidas algumas técnicas de limiarização, etapa essencial para
o processo. Nesta etapa, inicialmente devem ser feitas operações de detecção das cores pretas
e brancas, transformando-as em uma informação binária, e por fim, decodificar este valor
binário em código real.
A técnica de limiarização de Bernsen mostrou-se mais eficiente, apesar de gerar vários
ruídos na imagem, nas áreas de baixo contraste. A técnica de Wellner, por sua vez, mostrou-se
mais veloz em relação a técnica anterior, porém menos eficaz. Ao efetuar ajustes no método
de Bernsen, obteve-se uma resposta mais aceitável. Os resultados destas técnicas, que estão
implementadas na classe SureImage (thresholdBernsen, thresholdBersenAdapted e
thresholdWellner), pode ser visualizado na Figura 16.
Figura 16 – (a) Imagem original; (b) Limiarização de Bernsen; (c) Limiarização de Bernsen Adaptada;
(d) Limiarização de Wellner
36
Para aperfeiçoar o resultado obtido, foi aplicado um mapeamento entre três linhas,
previamente binarizadas, ou seja, uma comparação entre linhas da mesma imagem. O
resultado desse mapeamento pode ser visto na Figura 17, onde tem-se três linhas limiarizada
e, logo abaixo, o produto desse processo.
Figura 17 – Mapeamento de linhas binárias
Após isso, confronta o resultado com o de outras imagens, ao todo três. E por fim, tem-
se um código binário, que é resultado de três imagens. Este código binário é decodificado,
para o padrão EAN-13, resultando em um valor real. Na Figura 18 é demostrada a imagem do
aplicativo exemplo com as três imagens amostradas e o resultado obtido, em três situações
diferentes: código rasurado, sombra e deslocamento.
Figura 18 – Aplicativo exemplo e resultados obtidos
37
Conforme a Figura 18, nos dois primeiros casos a técnica mostrou-se eficiente,
conseguiu eliminar algumas falhas e sombras que prejudicam a decodificação do código de
barras. Porém, no último caso, com o deslocamento dos códigos de barras houveram
problemas na leitura do código, ocasionados por barras inexistentes.
Em relação aos trabalhos correlatos, tem-se o ClearCam (APPLE INC, 2011a), está
disponível na plataforma iOS e, em suma, produz uma imagem com melhor resolução
espacial do que a obtida da câmera do dispositivo, mas seu código fonte é fechado e o
aplicativo é pago, e diferentemente do trabalho proposto, não permite que outros aplicativos
possam utilizar sua funcionalidade.
Já o trabalho de Zibetti (2007) é uma importante fonte de pesquisa, pois busca o
melhor aproveitamento e desempenho dos algoritmos de SR. Porém ambos se fundamentam
na teoria, e apesar de mostrarem alguns resultados visuais, não há informações sobre a
linguagem e plataforma empregada ou estimativas de tempo para obtenção da imagem HR.
Os aplicativos Barcode Scanner (ZXING, 2011) e Zebra Barcode Reader (FARIA,
2008), assemelham-se mais a este trabalho, cada um com suas características. No Quadro 6
pode ser visto de maneira rápida e sucinta as diferenças e semelhanças entre estes aplicativos
e o framework proposto.
Framework
proposto Barcode Scanner
Zebra Barcode
Reader
Plataforma iOS / Mobile Android / Mobile Linux / Desktop
Origem da imagem Disco / Câmera Câmera Disco / Webcam
Processamento de
imagem Software
Hardware /
Foco da câmera Software
Extensível Sim Sim Sim
Encontra o código
na imagem Não Não Sim
Tipos de código de
barras aceitos EAN-13
QR Code, EAN,
CODE 39, UPC, ...
EAN, CODE 39,
CODE 128 UPC, ...
Quadro 6 – Comparação entre o trabalho e aplicativos correlatos
38
4 CONCLUSÕES
Os celulares tornaram-se itens indispensáveis para os dias atuais, e conforme seu
avanço, outros recursos lhe foram acrescentados, entre eles a câmera digital, e com isso o
acréscimo de novas funcionalidades, por exemplo a leitura de códigos de barras. Porém a
qualidade das imagens nem sempre suprem as necessidades que lhe são conferidas. Para
tentar sanar ou amenizar este problema, surgem as técnicas de SR.
Este trabalho investigou como utilizar a informação contida em várias imagens, as
quais representam a mesma cena, mas que podem possuir características diferentes. Para tal,
foi desenvolvido um framework que permite a geração de imagens HR a partir de outras LR.
A escolha do iOS se deve ao fato de seus dispositivos possuírem um bom poder de
processamento, mas mesmo com a evolução das câmeras acopladas ao aparelho, ainda sim
existem condições que prejudicam a qualidade da imagem (iluminação, foco, etc.), além de ter
um ótimo ambiente de desenvolvimento e uma boa documentação, sendo assim bastante
adequado para desenvolvimento deste tema.
Conforme foi exposto, apesar da melhora na imagem do código de barras, não é
garantido que a decodificação ocorra com sucesso, pois qualquer mudança, adição ou
subtração nas barras, por mínima que seja, afeta a leitura do código.
Uma limitação na técnica implementada é o uso apenas para código de barras. O
conceito de SR envolve a utilização de diversas técnicas de processamento de imagens e,
desta forma, necessita de um estudo específico e aprofundado nesta área. Outra limitação é
leitura de apenas um tipo de código de barras, o EAN-13.
4.1 EXTENSÕES
A grande área de aplicabilidade de limiarização e SR, abre perspectivas para futuros
trabalhos. Pode-se agregar novas funcionalidades ou aperfeiçoar as já existentes no presente
trabalho. A SR pode ser aplicada em várias áreas, entre elas, imagens espaciais e de
sensoriamento remoto, como também imagens médicas.
Uma relação das possíveis extensões para o trabalho desenvolvido é apresentado a
seguir:
39
a) implementar o reconhecimento do código de barras e a direção deste na imagem, para
não haver a necessidade de centraliza-lo;
b) implementar a decodificação de outros tipos de códigos de barras ou códigos 2D
como, por exemplo, QR Code, já que este tipo é cada vez mais utilizado;
c) utilizar a técnica de limiarização para reconhecimento de impressões digitais.
40
REFERÊNCIAS BIBLIOGRÁFICAS
ALMEIDA, Leandro L.; TOMMASELLI, Antonio M. G. Melhoramento da resolução a partir de seqüências de imagens. Boletim de Ciências Geodésicas, Curitiba, v. 9, n. 2, p.163-178, jul./dez. 2003. Disponível em: <http://ojs.c3sl.ufpr.br/ojs2/index.php/bcg/article/viewFile/1442/1196>. Acesso em: 22 ago. 2011.
ARTERO, Almir O.; SANTOS, Tiago H. T. Processamento digital de imagens de códigos de barras usando telefones celulares. Presidente Prudente, 2010. Disponível em: <http://iris.sel.eesc.usp.br/wvc/anais_WVC2010/artigos/poster/72797.pdf>. Acesso em: 14 de out. 2011.
AZEVEDO, Eduardo; CONCI, Aura; LETA, Fabiana R. Computação gráfica: teoria e prática. 2. ed. Rio de Janeiro: Elsevier, 2008.
APPLE INC. ClearCam for iPhone and iPod touch on the iTunes App Store. [S.l.], 2011a. Disponível em: <http://itunes.apple.com/pt/app/clearcam/id364930963?mt=8#>. Acesso em: 15 set. 2011.
______. Target-action. [S.l.], 2011b. Disponível em: <http://developer.apple.com/library/ios/#documentation/General/Conceptual/Devpedia-CocoaApp/TargetAction.html>. Acesso em: 12 set. 2011.
______. Tutorial overview and design patters. [S.l.], 2011c. Disponível em: <http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/Articles/01_Overview.html>. Acesso em: 11 set. 2011.
FACON, Jacques. Limiarização adaptativa de Bernsen. [S.l.], 2004. Disponível em: <http://www.ppgia.pucpr.br/~facon/Binarizacao/LimiarAdaptativaBernsen3.PDF>. Acesso em: 10 out. 2011.
FARIA, Alessandro O. Zebra Barcode Reader: lendo código de barras com a sua Webcam no Linux. [S.l.], 2008. Disponível em: <http://www.vivaolinux.com.br/artigo/Zebra-Barcode-Reader-Lendo-codigo-de-barras-com-a-sua-Webcam-no-Linux?pagina=1>. Acesso em: 10 set. 2011.
KANG, Moon G.; PARK, Sung C.; PARK, Min K. Super-resolution image reconstruction: a technical overview. IEEE Signal Processing Magazine, [S.l.], v. 20, n. 3, p. 21-36, May. 2003. Disponível em: <http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.114.6852&rep=rep1&type=pdf >. Acesso em: 4 set. 2011.
41
LARA, Daniel S. D. Estudo comparativo de seis métodos para super resolution: 2 versões para Pocs, Iterated Back Projection, Robust Super Resolution, Structure-Adaptive Normalized Convolution e composição de imagens realçadas. [Belo Horizonte], 2008. Disponível em: <http://www.verlab.dcc.ufmg.br/_media/cursos/aerea/g3/superresolution.pdf?id=cursos:aerea:g3:index&cache=cache>. Acesso em: 23 ago. 2011.
MARQUES FILHO, Ogê; VIEIRA NETO, Hugo. Processamento digital de imagens. Rio de Janeiro: Brasport, 1999. MATOS, Luis (Ed.). Desvendando a fotografia digital. São Paulo: Digerati Books, 2004. Disponível em: <http://www.google.com.br/search?q=Desvendando+a+fotografia+digital&hl=pt-BR&source=lnms&tbs=bks:1&ei=ZpKNTL73HIGC8gbaodzqCQ&sa=X&oi=mode_link&ct=mode&ved=0CA8Q_AU&prmdo=1>. Acesso em: 16 ago. 2011.
SEBASTIANI, Regis L. Módulo de processamento de imagens de exames médicos para aplicação em software de ensino de medicina. 2009. 76 f. Trabalho de Conclusão de Curso (Bacharel em Ciências da Computação) - Curso de Ciências da Computação, Centro Universitário Feevale, Novo Hamburgo. Disponível em: <tconline.feevale.br/tc/files/0001_1929.doc>. Acesso em: 8 out. 2011.
SILVA, Fernanda B. Super-resolução utilizando quadros chave em seqüências de vídeo de resolução mista. 2009. 110 f. Dissertação (Mestrado em Engenharia Elétrica) - Faculdade de Tecnologia, Universidade de Brasília, Brasília. Disponível em: <http://image.unb.br/queiroz/papers/tese_fernanda_msc.pdf>. Acesso em: 15 ago. 2011.
SILVA, Maíra S. Binarização de imagens de cheque. 2009. 58 f. Trabalho de Conclusão de Curso (Bacharel em Engenharia da Computação) – Curso de Engenharia da Computação, Universidade de Pernambuco, Recife. Disponível em: <http://dsc.upe.br/~tcc/20091/Tcc_MairaSaboia_BinarizacaoImagensCheque_2009.1.pdf>. Acesso em: 12 out. 2011.
VERAS, Auerê. Usando a câmera do celular como leitor de código de barras numa aplicação web. [S.l.], 2011. Disponível em: <http://www.auere.com.br/blog/html/usando-a-camera-do-celular-como-leitor-de-codigo-de-barras-numa-aplicao-web>. Acesso em: 13 set. 2011.
WALT, Stéfan J. V. D. Super-resolution Imaging. 2010. 156 f. Dissertação (Doutorado em Filosofia em Engenharia) – Matemática Aplicada, Universidade de Sttelenbosch, África do Sul.
ZIBETTI, Marcelo V. W. Super-resolução simultânea para sequência de imagens. 2007. 167 f. Tese (Doutorado em Engenharia Elétrica) – Programa de Pós-Graduação em Engenharia Elétrica, Universidade Federal de Santa Catarina, Florianópolis. Disponível em: <http://pessoal.utfpr.edu.br/marcelozibetti/arquivos/tese.pdf>. Acesso em: 15 ago. 2011.
ZXING. Barcode Scanner. [S.l.], 2011. Disponível em: <http://code.google.com/p/zxing/>. Acesso em: 13 set. 2011.