Você está na página 1de 25

Captulo

5
Tcnicas de Processamento Digital de Imagens com
Java
Ilis Cavalcante de Paula Jnior

Abstract
The human brain to processes and recognizes a huge data quantity from visual nature.
This motivates the development of techniques and devices in order to accomplish this capacity. The knowledge about this visual system and the studies of available methodologies
onto balance the image to a actual problem are important to develop automatable computational solutions. In a sense, the Digital Image Processing (DIP) permits to enable a
diversity of applications in different research areas such as medicine, biology, engineering, meteorology, cartography and others one. Some of these applications are developed
in programming languages with established performance and security in dealing with this
type of data (digital image). In this work, it will adopt the Sun Java language in the support for DIP techniques in a simple application of regions description. It is still made a
comparative among the main Application Program Interfaces (APIs) of this domain and
the more adequate usage of memory.
Resumo
O crebro humano processa e interpreta imensa quantidade de dados de natureza visual.
Isso motiva o desenvolvimento de tcnicas e dispositivos de modo a estender ainda mais
essa capacidade. O conhecimento de como reage este sistema visual e o estudo de metodologias disponveis para melhor adequar a imagem a um problema real so importantes
para desenvolver solues computacionais automatizveis. Neste sentido, a rea de Processamento Digital de Imagens (PDI) permite viabilizar diversas aplicaes em diferentes
reas de estudo como na medicina, biologia, engenharia, meteorologia, cartografia, entre outras. Algumas dessas aplicaes so desenvolvidas em linguagens de programao
com reconhecido desempenho e segurana na abordagem deste tipo de dado (imagem
digital). Neste trabalho, ser seguida a linguagem Sun Java como base para realizar tcnicas de PDI em uma aplicao simples de descrio de regies. Tambm feito ainda
um comparativo entre as principais Application Program Interfaces (APIs) deste domnio
e o melhor uso de memria.

5.1. Introduo
At que ponto a interpretao humana pode ser afetada por ajustes em uma informao
visual? Como adequar o processamento dos dados em cenas reais para a percepo automtica atravs de mquinas? Esses e outros questionamentos formam a motivao para
o estudo de processamento digital de imagens. E ainda, isso gera o grande interesse de
diferentes reas de aplicao no uso de suas tcnicas computacionais. Como rea de processamento visual de dados, alguns conceitos relacionados a Processamento Digital de
Imagens (PDI) se assemelham ao que aplicado em outras reas de estudo como Computao Grfica e Viso Computacional. Apesar das semelhanas, esses domnios se
diferenciam justamente pelos tipos de informao utilizados em suas respectivas entradas
e sadas. Como pode-se perceber pela Figura 5.1, processamento de imagens ser todo
processamento digital em que as entradas e sadas so imagens.

y<
yy

Processamento de Imagens

Imagem yyy

yy
yy
y
y

FF
FF
FF Imagem
FF
FF
FF
"

Dado

Computao Grfica
Viso Computacional

Figura 5.1. Comparativo das informaes de entrada/sada entre Processamento


de Imagens, Computao Grfica (Fonte: Animao UP da Pixar Pictures http://www.pixar.com/featurefilms/up/) e Viso Computacional (Fonte:
Sistema FootScanAge - http://www.imago.ufpr.br/footscan.html).

O mesmo no acontece para os outros casos, j que um sistema de Computao


Grfica exige dados na forma vetorial ou modelos matemticos [Gomes e Velho 1994]
como entrada. Isso bastante perceptvel quando se trabalha com jogos digitais, pois
no momento que o usurio aciona um comando no joystick gerada uma nova imagem
pelo jogo, o que resulta em uma nova cena ou movimentao/ao de um personagem.
O estudo de Computao Grfica envolve modelagem e representao de dados, visualizao e projeo de curvas e superfcies, efeitos tridimensionais, animao, renderizao
e outras tcnicas que so adequadas gerao de imagens/cenas [Azevedo et al. 2007,
Velho et al. 2009].
Em Viso Computacional, dados so exibidos na sada do sistema e representam caractersticas extradas da imagem de sua entrada. Estas caractersticas so proces-

sadas para tcnicas diferenciadas, principalmente em tomadas de decises inteligentes


como sistemas especialistas, redes neurais, algoritmos genticos, etc. Quando os dados no passam por essa etapa anterior, ainda se considera sistema de PDI (para alguns
pesquisadores [Mokhtarian e Mackworth 1986, Lee et al. 1995, Paula Jnior et al. 2006,
Csar Jnior e Costa 1996]) e envolve uma rea especificada como Anlise de Imagens
[Costa e Csar Jnior 2009] - esta encontre-se em nvel intermedirio a Processamento
de Imagens e Viso Computacional. Esta ltima bastante implementada em aplicaes
de Robtica [Castleman 1996]. Um exemplo especfico de aplicao de Viso Computacional o sistema FootScanAge [Silva et al. 2006] que avalia, a partir de imagens obtidas
das superfcies plantares de recm-nascidos, a idade gestacional1 de um beb pr-maturo
(e sem histrico de pr-natal em sua gestao) para estudo de suas caractersticas neurofisiolgicas. Como sada, o FootScanAge apresenta um score para essa idade gestacional
que permite definir um fator de sobrevida ao paciente e seu tratamento adequado.
Com relao s tcnicas de PDI, em geral so abordadas operaes de realce,
compresso, restaurao ou transformaes de informaes adquiridas na forma de pixels (picture elements). Qualquer imagem digital pode ser representada por uma funo
bidimensional de intensidade da luz f (x, y), onde x e y denotam as coordenadas espaciais [Gonzalez e Woods 2008]. Assim, para imagens em nvel de cinza, o valor de f em
qualquer ponto (x, y) proporcional ao brilho (intensidade do tom de cinza) da imagem
naquele ponto. A Figura 5.2 mostra a representao de uma imagem no domnio discreto e sua subdiviso em pixels. Assume-se uma conveno dos eixos de funo para a
abordagem de imagens digitais, como segue na Figura 5.2(b).

(a) Imagem original.

(b) Imagem discreta.

(c) Intensidade dos pixels.

Figura 5.2. Descrio dos valores de pixels em uma imagem.

Os primeiros registros de estudos em Processamento Digital de Imagens foram


notificados nos anos 60, impulsionados pelos projetos de pesquisa criados pela NASA,
nos Estados Unidos da Amrica durante a Guerra Fria [Castleman 1996]. Nas dcadas
seguintes surgiriam mais atividades que necessitariam dos adventos proporcionados por
esta rea de conhecimento; entre estas estam a medicina, biologia, meteorologia, astronomia, agricultura, sensoriamento remoto, cartografia e a indstria petrolfera. Percebe-se
1A

idade gestacional o tempo, medido em semanas ou em dias completos, decorrido desde o incio da
ltima menstruao (ou data da ltima menstruao) da mulher grvida.

desta forma que o processamento de imagens essencialmente uma rea multidisciplinar,


tanto na atuao quanto na derivao, pois suas tcnicas baseiam-se na fsica, neurofisiologia, engenharia eltrica e cincia da computao. Paralelamente, com o avano dos
recursos computacionais permitiu-se alcanar um desenvolvimento mais eficiente e robusto do processamento digital de imagens.
Dentro da pesquisa na rea de sade, pode-se encontrar alguns trabalhos relevantes
com PDI. Em [Passarinho et al. 2006], o tratamento fisioterpico de Reeducao Postural
Global (RPG) permite uma abordagem com a captao de imagens dos pacientes durante
o tratamento. Destas imagens possvel extrair a forma postural de cada paciente e a
partir disso obter caractersticas desta imagem. Com essas informaes, permite-se ao especialista avaliar o desempenho do tratamento em cada caso clnico. Em imagens clnicas,
como exames de mamografia, imagens de ultra-som [Calope et al. 2004] e ressonncia
magntica h diversas implementaes de filtros digitais para possibilitarem melhor avaliao dos exames clnicos por parte dos mdicos e tcnicos de sade. O estudo nesses
tipos de imagens deve apresentar resultados cada vez mais precisos, como na deteco de
aneurismas [Martins et al. 2008], j que uma identificao errnea de um patologia (ou
ainda a no percepo desta) resulta grandes problemas tanto para pacientes quanto para
a equipe mdica.
A indstria petrolfera tambm apresenta interesse em solues de PDI para problemas crticos como deteco de derramamento de leo no mar [Lopez et al. 2006] e
localizao automtica de corroso e depredao de oleodutos e demais equipamentos
martimos e terrestres [Bento et al. 2009b, Bento et al. 2009a]. Passando para o contexto
da produo agrcola, o crescimento dos agronegcios vem contribuindo para a insero
das pesquisas de processamento de imagens na agricultura. Na tentativa de distribuio
de laranjas [Ramalho e Medeiros 2003] e outros produtos perecveis, busca-se a criao
de sistemas de inspeo visual automtica para seleo dos alimentos, direcionando a
classificao para os diferentes mercados a que o produtor esteja voltado.
Em se tratando de classificao, na biologia existem diversas abordagens para a
busca de similaridade entre formas naturais [Bernier e Landry 2003]. Nesta similaridade
so avaliados descritores de formas [Costa et al. 2004] para as diferentes imagens de espcies de seres e corpos trabalhadas: plantas, folhas, aves, insetos, bactrias, clulas,
etc. Tambm h classificao de informao no processamento de imagens de Radar de
Abertura Sinttica (Synthetic Aperture Radar) [Marques et al. 2004]. Reconhecimento de
regies de cultivo, reas de floresta e urbanas importante para a avaliao do crescimento
das cidades e do aproveitamento dos recursos naturais. Alm disso, permite-se com aplicaes de sensoriamento remoto a deteco de alvos [Marques et al. 2008] e acidentes
martimos nas regies costeiras cobertas por satlites.
Este captulo tem um carter introdutrio sobre os conceitos envolvidos em processamento de imagens e a gerao de pequenas aplicaes com a linguagem de programao Java neste domnio. Aps apresentar uma viso geral sobre PDI e suas aplicaes
em diferentes reas de pesquisa, sero tratadas as principais Application Program Interfaces (APIs) Java voltadas para sistemas de processamento de imagens na Seo 5.2. Em
seguida, tcnicas relevantes para aplicaes de PDI so descritas na Seo 5.3. Na Seo
5.4, ser apresentado ao leitor o desenvolvimento de um aplicativo simples de descrio

de regies em imagens. Ao final, na Seo 5.5, so expostas as concluses e consideraes finais deste trabalho.

5.2. APIs Java para Imagens


H alguns anos atrs, a comunidade de processamento de imagens era formada por um
grupo pequeno de pesquisadores que tinham acesso limitado a ferramentas comerciais
de PDI, algumas desnecessrias, e que eram desenvolvidas sob componentes de softwares
proprietrios. Estes eram resumidos a pequenos pacotes de software para carregamento de
arquivos de imagem e armazenamento dos mesmos em disco e ainda apresentavam documentaes incompletas e formatos de arquivos proprietrios [Murray e VanRyper 1996].
Surgiram ento novos formatos, inicialmente desenvolvidos para aplicaes especficas,
mas muitos dos quais no despontaram ou foram esquecidos [Miano 1999]. Nos anos
80 e 90 surgiram alguns novos formatos de imagens e diversos softwares para convertlos, alm do suporte dos formatos criados para modelos especfico de hardware definidos
pelos desenvolvedores.
Atualmente, apenas um pequeno conjunto desses formatos permaneceu na ativa:
Tagged Image File Format (TIFF), Graphics Interchange Format (GIF), Portable Network
Graphics (PNG), padro JPEG, Windows Bitmap (BMP) e o Portable Bitmap Format
(PBM) que possui os tipos PBM (portable bitmap) para bitmaps binrios, PGM (portable
graymap) para imagens em nvel de cinza e PMN (portable any map) para imagens coloridas [Burger e Burge 2009]. Esses so suportados pela maioria das APIs padres para
C/C++ e Java.
Nos ltimos anos, com o incremento da capacidade de compresso dos formatos
de arquivos de imagem e a evoluo das linguagens de programao, muitos desenvolvedores tm definido seus aplicativos utilizando a linguagem de programao Java para
sistemas de PDI [Rodrigues 2001]. A linguagem possui algumas caractersticas que tm
sido atrativas comunidade de desenvolvimento [Deitel e Deitel 2005] como: livre,
portvel (write once, run anywhere), segura, sintaxe similar linguagem C, possui facilidade de internacionalizao dos caracteres, vasta documentao, coletor de lixo (para
desalocao automtica de memria) e facilidade de criao de programao distribuda e
concorrente. H ainda o paradigma orientado a objetos [Santos 2003] que define o modus
operandi de Java e descreve a estrutura de todas as APIs criadas a partir desta linguagem.
Esta seo apresenta uma alternativa flexvel, portvel e sem custos para que o
desenvolvedor faa uso da linguagem Java na implementao de seus programas. Para
representao e processamento de imagens, a Java Advanced Imaging (JAI) API (criada
e mantida pela Sun Microsystems) pode ser trabalhada. Ainda que a API no faa parte
de um software de PDI completo, as operaes existentes e possibilidades de extenso
aliadas ao baixo custo e implementao simples tornam esta API uma opo atrativa para
desenvolvimento de algoritmos de processamento de imagens [Santos 2004].
Nesta API, a PlanarImage a principal classe para representao de imagens na
JAI e traz mais flexibilidade que a classe nativa BufferedImage. Em ambas as classes, seus
pixels so armazenados em uma instncia de Raster que contm uma instncia de uma
subclasse de DataBuffer (DataBufferByte, DataBufferFloat, DataBufferInt, DataBufferDouble, DataBufferShort, etc.) de acordo com o comportamento seguido pela instncia

de uma subclasse de SampleModel. Uma instncia de PlanarImage tambm tem uma instncia de ColorModel associada a ela, a qual contm uma instncia de ColorSpace, que
determina como os valores de pixels sero deslocados aos valores de cores [Santos 2004].
Figura 5.3 mostra a composio geral da classe PlanarImage com as demais classes da
API Java 2D [Liang e Zhang 2006].

Figura 5.3. Estrutura da classe de suporte a imagem na API JAI. Adaptado de


Santos (2004).

Uma PlanarImage permite somente leitura imagem, ou seja, pode ser criada e
seus valores de pixels podem ser lidos de vrias maneiras, mas no h mtodos implementados para a modificao de seus elementos [Santos ]. PlanarImage possui uma grande
flexibilidade j que pode ter a origem da imagem em uma posio diferente da coordenada
(0,0), ou ainda coordenadas de pixels com valores negativos [Rodrigues 2001].

(a)

(b)

Figura 5.4. Imagem. Fonte: Imagem adaptada de http://www.lenna.org/.

Para visualizao, a API JAI disponibiliza um componente simples e extensvel


determinado pela classe DisplayJAI. Esta uma subclasse de JPanel e pode ser trabalhado
como qualquer outro componente grfico Java. Na Tabela 5.1, apresentado o cdigofonte referente a uma classe de exibio de imagem chamada ExibeImagem que faz uso
de uma instncia de DisplayJAI. Essa mesma instncia associada com um objeto de JScrollPane para suportar (com barras de rolagem) qualquer imagem que possua dimenso

maior que a interface grfica definida. O resultado da execuo da classe ExibeImagem


est disposto na Figura 5.4.
Tabela 5.1. Cdigo da classe ExibeImagem.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

/**
* Lendo imagem usando apenas APIs nativas
* @author ERCEMAPI 2009
*/
public class ExibeImagem extends JFrame {
// Construtor padro: define interface e exibe a imagem lida na mesma
public ExibeImagem() throws IOException {
BufferedImage imagem = ImageIO.read(new File(Lenna.png));
String infoImagem = Dimenses: +imagem.getWidth()+
x+imagem.getHeight()+ Bandas: +
imagem.getRaster().getNumBands();
ImageIcon icone = new ImageIcon(imagem);
JLabel labImagem = new JLabel(icone);
this.setTitle(Display da Imagem: +Lenna.png);
Container contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(new JScrollPane(labImagem), BorderLayout.CENTER);
contentPane.add(new JLabel(infoImagem), BorderLayout.SOUTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(imagem.getWidth(),imagem.getHeight());
this.setVisible(true);
} // fim do construtor
// Mtodo principal
public static void main(String args[]){
try{ // tratamento de exceo de E/S
ExibeImagem appExibeImg = new ExibeImagem();
}catch(IOException exc){
System.out.println(Erro de leitura! +exc.getMessage());
}
} // fim do mtodo principal
} // fim da classe

Outra alternativa aos desenvolvedores na rea de processamento de imagens com


Java o uso da API e software ImageJ [Rasband 2009]. Criada por Wayne Rasband,
ela apresenta em seu site oficial (http://rsbweb.nih.gov/ij/) a verso atual do
aplicativo, pacotes, documentao, updates, cdigo-fonte completo, imagens para teste
e uma coleo continuamente crescente de plugins [Burger e Burge 2009] desenvolvidos
por terceiros e que podem ser adicionados ao aplicativo. A organizao da API ImageJ
est disposta na Figura 5.5. Algumas classes da API so definidas a partir da API AWT
de interface grfica. Isso permite que os resultados de suas operaes sejam visualizados
tambm pela API Swing da linguagem Java, porque essa ltima herda as caractersticas de

AWT. Com relao aos plugins, os desenvolvedores podem criar seus prprios ou reaproveitar plugins j utilizados no aplicativo. Isso d uma grande flexibilidade na criao de
classes mas no impede a produo de cdigos redundantes entre os trabalhos de vrios
desenvolvedores.

Figura 5.5. Estrutura geral da API ImageJ. Adaptado de Burger & Burge (2009).

Apesar desse problema, as classes nativas da API oferecem suporte maioria


das tcnicas de PDI. Duas classes so bastante utilizadas: ImagePlus e ByteProcessor.
A classe ImagePlus normalmente exige um objeto de java.awt.Image na instanciao de
seus objetos e sempre carrega a imagem trabalhada para a visualizao na interface grfica
(associando com a classe ImageCanvas). Com relao classe ByteProcessor, essa a
base da execuo das principais tcnicas de processamento de imagens com a ImageJ.
A partir de uma instncia dessa classe possvel chamar diretamente um mtodo para
muitas das operaes a serem vistas na prxima seo.
O aplicativo ImageJ foi desenvolvido para teste das operaes implementadas pela
API e pelos plugins mas ele tem sido utilizado tambm em uma abordagem didtica para
exibio dos resultados das tcnicas de PDI. Uma implementao mais completa com esta
API descrita na Seo 5.4.
Esta seo apresentou uma viso geral sobre as API JAI e ImageJ. Essas so as
principais referncias para processamento de imagens usando a linguagem de programao Java. Suas definies e arquitetura foram dispostas aqui, mas o modo de uso de seus
operadores ser apresentado nas sees seguintes.

5.3. Tcnicas de Processamento de Imagens


Esta seo tem o objetivo de apresentar tcnicas relevantes de processamento de imagens
que deem o embasamento terico necessrio para o desenvolvimento de um aplicativo
usando a linguagem Java. Para isso, sero discutidos mtodos relacionados a realce de
imagens, segmentao e morfologia matemtica.

Mas a princpio, requerido um conhecimento sobre os tipo de imagens tratadas


em PDI. Primeiramente, deve-se considerar as imagens binrias como um tipo de imagem
digital (ver Figura 5.6(a)), em que o valor assumido por cada pixel 0 (cor preta) ou 1
(cor branca). Outro tipo considerado so as imagens em nvel de cinza (ver Figura 5.6(b)),
onde cada pixel pode assumir um valor entre 0 e 255 e levando em conta que quanto menor
o nvel de cinza, mais prximo da cor preta, e quanto maior o nvel de cinza, mais prximo
da cor branca. Finalmente, as imagens coloridas (ver Figura 5.6(c)) seguem um modelo
de cor para a definio dos valores de seus pixels. Nesta situao, a imagem possui mais
de uma matriz de nvel de cinza de acordo com o modelo assumido: modelo RGB, possui
trs matrizes com a influncia de uma cor em cada (Red - Vermelha, Green - Verde e Blue
- Azul); no modelo CMYK h quatro camadas de nvel de cinza para cada cor definida
na modelagem (Cyan - Ciano, Magenta - Magenta, Yellow - Amarela e Black - Preta); e a
mesma lgica seguida nos demais modelos de cores. As imagens coloridas no so foco
deste trabalho, j que o processamento a ser proposto direcionado a imagens em nvel
de cinza.

(a) Imagem binria.

(b) Imagem em nveis de cinza.

(c) Imagem colorida.

Figura 5.6. Tipos de Imagens. Adaptado de Meyer & Beucher (1990).

Nem sempre a imagem a ser processada encontra-se em um estado ideal para


ser trabalhada. Isso quer dizer, que a imagem pode apresentar distores indesejveis
e ter sua qualidade visual afetada. Essa problemtica motiva o estudo de tcnicas de
realce em imagens, que tem como objetos suprimir as distores da imagem e enfatizar
caractersticas especficas da mesma. Este captulo se resume s tcnicas de realce no
domnio do espao, que seguem: negativo da imagem e filtragem (passa-baixa e passaalta), em que todas so funes de transformao (g(x, y) = T ( f (x, y)) s = T (r)).
Em alguns exames clnicos e resduos de filme fotogrfico, pode-se identificar a
aplicao do processo de negativo em uma imagem (ver Figura 5.7) que considerado um
processamento ponto-a-ponto. Esta tcnica se resume em submeter uma imagem funo
de transformao dos nveis de cinza, como na Figura 5.7(c). Isso ocorre com imagens
em nvel de cinza, j que o mesmo processo em imagens binrias se torna o mtodo de
inverso dos pixels (s = L 1 r). Como resultado, no instante que a intensidade da
imagem de sada diminui ento a intensidade da entrada aumenta. Isso permitir realar
regies especficas na imagem.
Distores presentes em uma imagem afetam a percepo da real informao pre-

(a) Imagem original.

(b) Imagem processada.

(c) Funo de transformao.

Figura 5.7. Processo de negativo de uma imagem. A imagem submetida funo de transformao dos nveis de cinza. Adaptado de Burger & Burge (2009).

sente na mesma. Uma distoro crtica a presena de rudo na imagem. Esse fator
implica em nova informao na imagem, diferente do seu comportamento real. Normalmente os rudos so definidos por uma distribuio estatstica, como o modelo gaussiano,
speckle e de poisson. Na Figura 5.8 esto identificados os efeitos de alguns tipos de rudo
na mesma imagem.

(a) Imagem original.

(b) Presena de rudo (c) Presena de rudo de (d) Presena de rudo


sal e pimenta.
Poisson.
spackle.

Figura 5.8. Imagem sob efeito de diferentes tipos de rudo.

Para eliminao do rudo em uma imagem, faz-se necessrio aplicar tcnicas de


realce com processamento por mscara. Isso consiste em definir uma nova imagem, de dimenso menor do que aquela a ser processada, e aplicar valores a cada um dos elementos
dessa nova imagem que ser chamada de mscara (ou janela). Essa janela percorre toda
a imagem, e faz uma avaliao pixel a pixel de acordo com sua dimenso. A distribuio
de valores nessa mscara define o tipo de filtragem a ser executada: passa-alta (preserva
as informaes de alta-frequncia, como bordas e rudo, e elimina as demais) ou passabaixa (preserva as informaes de baixa-frequncia, como regies homogneas em seus
nveis de cinza, e elimina o restante). Na Figura 5.9 esto dispostos trs exemplos de filtro
passa-alta com suas respectivas mscaras. Cada mscara apresenta um efeito diferenciado no resultado da filtragem. O filtro de Roberts um exemplo tambm de gradiente da

imagem, o que implica na representao do sentido de crescimento das bordas presentes


nela.

(a) Imagem original.

(d) Filtro de Sobel.

(b) Filtro de Prewitt.

(e) Mscaras de Sobel.

(c) Mscaras
Prewitt.

(f) Filtro de Roberts.

de

(g) Mscaras
de Roberts.

Figura 5.9. Detectores de bordas (gradiente da imagem).

Com os filtros passa-baixa tem-se um comportamento diferenciado. A partir da


Figura 5.10, pode-se notar a influncia do filtro da mediana com a mudana na dimenso
da janela. O filtro da mediana consiste em coletar os valores dos pixels abordados pela
mscara, orden-los e definir o valor da mediana no pixel da imagem correspondente
ao centro da mscara. medida que a janela cresce, elimina-se mais informao de
alta-frequncia (rudo e tambm as bordas da imagem). Considerando-se borda qualquer
regio com diferena de intensidade dos seus pixels, tem-se ento uma distoro da borda
proporcional eliminao do rudo. Nesse caso, tem-se uma relao custo-benefcio em
que deve-se levar em conta qual a informao mais importante para a aplicao.
A importncia do realce em uma imagem percebida no momento em que o processo de segmentao efetuado. O mtodo de segmentao precisa que a imagem tratada

(a)

(b)

(c)

(d)

Figura 5.10. Aplicao do filtro da mediana com diferentes mscaras. Na (a)


imagem ruidosa, originada do efeito do rudo sal e pimenta (com maior intensidade) sob a imagem presente na Figura 5.8(a), foi aplicada a filtragem com
modificao nas mscaras: (b) janela 3x3, (c) janela 5x5 e (d) janela 7x7.

esteja livre de distores para cumprir seu objetivo que separar as regies presentes na
imagem. A tcnica mais simples limiarizao (ver Figura5.11), que consiste em definir
um tom de cinza como limiar e modificar todos os pixels da imagem com base no mesmo.
Isso ocorre a partir de um comparativo, em que o pixel com intensidade menor ou igual
ao limiar recebe valor 0 (zero) e, em caso contrrio, a intensidade do pixel receber valor
igual a 255. Assim duas regies so separadas na imagem.

(a) Imagem original.

(b) Imagem processada.

(c) Funo de transformao.

Figura 5.11. Processo de Limiarizao. Imagem submetida funo de transformao dos nveis de cinza. Adaptado de Burger & Burge (2009) e Gonzalez &
Woods (2008).

Uma tcnica de segmentao bastante conhecida, mas que apresenta maior complexidade, o mtodo watershed2 [Vincent e Soille 1991, Meyer e Beucher 1990]. Aqui
so necessrias duas informaes: a imagem de gradiente e a imagem de marcador(es),
que so definidas com base na imagem processada. Essa imagem de marcador(es) deve
apresentar em que regio(es) da imagem o processo ter incio e o gradiente informa
2 Animao

didtica
sobre
funcionamento
da
http://cmm.ensmp.fr/ beucher/wtshed.html.

tcnica

est

disponvel

em

onde o processo encerrado. De um modo geral, a tcnica de watershed traz uma representao de uma represa que inicia uma inundao a partir dos marcadores de tal
forma que encha a imagem de gua at alcanar a regio identificada pelo gradiente. A
execuo do mtodo pode ser acompanhado na Figura 5.12.

(a) Imagem original.

(b) Imagem em nveis de (c) Imagem de marcado- (d) Imagem de gradiente.


cinza.
res.

Figura 5.12. Aplicao da tcnica watershed. Adaptado de Meyer & Beucher (1990).

Dentro de PDI h o estudo de Morfologia Matemtica (MM), a qual tem como


base os conceitos de teoria dos conjuntos [Soille 2004]. O mtodo watershed est inserido
nessa rea. O primeiro conceito a ser relacionado o de Elemento Estruturante (EE), o
qual indica o comportamento do processo a ser seguido. A forma assumida pelo EE
(disco, quadrado, linha, losango, etc.) influencia diretamente no resultado do mtodo.
Outros dois conceitos importantes so o de eroso e dilatao. A partir da forma
do EE, pode erodir ou dilatar a borda de uma regio na imagem processada. A combinao desses dois ltimos tpicos faz surgir outros operadores morfolgicos, que so a
abertura (eroso seguida de dilatao com o mesmo EE) e o fechamento (eroso seguida
de dilatao, tambm com o mesmo EE). Os efeitos destes quatro operadores com um
elemento estruturante de disco (com raio igual a 11 pixels) so apresentados na Figura
5.13.
Os assuntos envolvidos nessa seo destacam importantes mtodos presentes no
domnio de processamento de imagens. Na prxima seo, um pequeno aplicativo ser
desenvolvido com base nos tpicos discutidos at aqui. Assim ser possvel entender
como integrar os conceitos de PDI apresentados com as definies da linguagem de programao Java.

5.4. Arquitetura de um Aplicativo de PDI


Para entendimento do relacionamento das tcnicas de processamento de imagens, sugerese aqui a proposta de um aplicativo simples de PDI. Esta aplicao trata da extrao de um
objeto presente em uma imagem ruidosa e seu funcionamento descrito na Figura 5.14.
Esta imagem apresenta a interferncia do rudo sal e pimenta [Gonzalez e Woods 2008]
na distribuio dos seus pixels. Esse tipo de rudo eliminado, com maior eficincia,
pelo filtro da mediana [Marques Filho e Vieira Neto 1999]. O filtro ser ento aplicado
e ter como resultado uma imagem mais adequada para a segmentao. Nesta etapa,
a imagem ser processada com o objetivo de identificar o objeto (estrela) presente na

(a) Imagem original.

(d) Abertura.

(b) Eroso.

(c) Dilatao.

(e) Fechamento.

Figura 5.13. Operaes de morfologia matemtica em imagens binrias.

mesma (ver Figura 5.15). O objeto de interesse estar presente na imagem resultante aps
a segmentao. Em caso de falha na etapa anterior, permite-se um ps-processamento
no qual se resume a adequar a regio segmentada em uma formatao prxima da sada
do aplicativo. Nesta seo, a classe a ser criada seguir a API ImageJ para definir a
aplicao. Com esta API, todas as operaes sobre as imagens passam pelos mtodos da
classe ByteProcessor que funciona como base para a execuo das tarefas mais simples
de PDI sem necessidade de mudana de parametrizao.
A imagem a ser tratada nesta aplicao (Figura 5.15(a)) se mostra bastante desafiadora. A estrela (objeto de interesse) a ser destacada possui o tom de cinza mais claro em
relao aos demais elementos da imagem (com exceo de alguns pixels do rudo). Com
essa informao, deve-se eliminar o rudo a fim de manter a homogeneidade nos tons de
cinza por todas as regies e, por consequncia, tambm remover a linha de cor preta que
percorre toda a imagem (inclusive sobre o objeto). Efetua-se ento a filtragem na imagem
com o mtodo medianFilter (ver Tabela 5.2) definido na classe ByteProcessor. Este mtodo aplica o filtro da mediana em toda a imagem com uma janela 3x3 de tal maneira que
mantenha as informaes de borda das regies mesmo que ainda permaneam artefatos
do rudo e da linha preta na imagem. Isso adotado por ser possvel a remoo dessa
informao nas prximas etapas do aplicativo.
Ao executar o cdigo sugerido na Tabela 5.2, obtm-se o resultado da filtragem
apresentado na Figura 5.15(b). Pode-se perceber at aqui, que o rudo sal e pimenta foi

Figura 5.14. Fluxograma do aplicativo.

Tabela 5.2. Aplicao do filtro da mediana na definio do sistema.

// objeto imagem" da classe java.awt.Image instanciado


// com a imagem original
ByteProcessor processador = new ByteProcessor(imagem);
processador.medianFilter();
// resultado do filtro passado ao objeto imagem
imagem = processador.createImage();

eliminado, bem como a linha preta que passava pelo objeto de interesse. Mesmo assim, o
efeito da filtragem em cima da linha preta fez permanecer alguns pixels de tonalidade de
cor preta de tal forma que distorce a homogeneidade das regies da imagem. Apesar desses resduos, a imagem ganha um novo aspecto visual (ver Figura 5.15(b)) e o resultado
da filtragem facilitar a separao da regio da estrela. Isso porque o prximo passo a ser
seguido a segmentao da imagem. Nesse processo, ser utilizada a tcnica de limiarizao para separar a regio de interesse das demais. No exemplo trabalhado, a imagem
possui uma diferena bem perceptvel entre os tons de cinza de cada regio. Desse modo,
basta identificar o valor do tom de cinza predominante no objeto e us-lo como limiar
para a segmentao. Realiza-se a limiarizao com o mtodo threshold (ver Tabela 5.3)
que tambm definido na classe ByteProcessor. Este mtodo tem como argumento um
valor inteiro que indica o limiar da segmentao. A partir dessa informao, o processo
de segmentao converte qualquer pixel, com valor maior ou igual a esse limiar, ao tom
de cinza igual a 0 (zero) - indicando a cor preta - e em caso contrrio, o pixel assume o
valor de 255 (cor branca).

(a) Imagem de Entrada (adaptada


de Gonzalez & Woods (2008)).

(b) Imagem Filtrada.

(c) Imagem Segmentada.

(d) Imagem de Sada.

Figura 5.15. Etapas do aplicativo proposto: processa imagem ruidosa para extrao da regio do objeto de interesse.

Tabela 5.3. Aplicao da segmentao na definio do sistema.

// objeto imagem da classe java.awt.Image instanciado


// com a imagem filtrada
ByteProcessor processador = new ByteProcessor(imagem);
// valorLimiar inteiro e que indica o limiar da segmentao
processador.threshold(valorLimiar);
// resultado da limiarizao passado ao objeto imagem
imagem = processador.createImage();

O resultado da segmentao pode ser observado na Figura 5.15(c). Percebe-se na


imagem segmentada a separao das regies: objeto de interesse e o fundo da imagem.
Mas nota-se tambm a presena de buracos na forma obtida, como pode ser notado
na Figura 5.15(c). Isso se deve aos processos assumidos at aqui. Aps a filtragem,
permaneceram ainda pixels que se diferenciavam da regio em que estavam presentes; e
na segmentao, esses pixels destoantes foram considerados elementos do fundo mesmo
estando na regio do objeto. Como a segmentao no foi totalmente eficiente, deve-se

ajustar o resultado para a obteno de uma regio com todos os seus pixels assumindo o
mesmo valor. Por conta destes buracos, aplica-se um ps-processamento para obter a
homogeneidade dos pixels na regio do objeto.
A etapa de ps-processamento ser realizada por uma operao de fechamento
na imagem, cuja execuo se d por uma operao de dilatao seguida de uma eroso
na mesma imagem e com o mesmo elemento estruturante [Soille 2004]. A API ImageJ
no traz a operao de fechamento implementada em suas classes nativas, mas a partir da
classe ByteProcessor adota-se as chamadas dos mtodos dilate e erode correspondendo
(ver Tabela 5.4), respectivamente, s operaes de dilatao e eroso [Rasband 2009]. As
duas operaes fazem uso de uma janela de forma quadrada com as dimenses 3x3.
Tabela 5.4. Aplicao da operao de fechamento na definio do sistema.

// objeto imagem da classe java.awt.Image instanciado


// com a imagem filtrada
ByteProcessor processador = new ByteProcessor(imagem);
// etapa de dilatao - 1o passo do fechamento
processador.dilate(1,0);
// resultado da dilatao passado ao objeto imagem
imagem = processador.createImage();
processador = new ByteProcessor(imagem);
// etapa de eroso - 2o passo do fechamento
processador.erode(1,0);
// resultado da eroso passado ao objeto imagem
imagem = processador.createImage();

Ao fim de todo esse processamento, alcana-se o resultado final com o objeto de


interesse separado do fundo de acordo com os pixels que compem duas regies correspondentes (ver Figura 5.15(d)). Com o ps-processamento foi possvel alcanar uma
segmentao completa e com as classes e mtodos j apresentados pode-se preparar uma
implementao melhorada para esse aplicativo utilizando interface grfica. Permite-se
criar neste trabalho uma classe de nome SegRdI (acrnimo de Segmentador de Regio de
Interesse) que suportar todas as tcnicas descritas nesta seo, baseadas na API ImageJ
para a linguagem Java.
Na Tabela 5.5, define-se a estrutura geral da classe no aplicativo a ser implementado. Na linha 05, define-se a classe SegRdI como subclasse de JFrame. Isso implica
que ser utilizada interface grfica na aplicao [Deitel e Deitel 2005], e esta mesma ser
baseada na API Swing (que herda suas caractersticas da API AWT para desenho de componentes grficos, assim como a API ImageJ). Outros componentes tambm sero integrados a essa interface a partir da API Swing: JButton, JFileChooser, JPanel, JOptionPane e
JScrollPane. Mas para a gerao desta interface grfica, implementado o mtodo iniciaComponentes que tem a criao de alguns botes de ao. Para estes botes, so descritos
mtodos para aplicar uma funcionalidade para cada um na interface da aplicao (mtodos
abrirActionPerformed, processarActionPerformed, limparActionPerformed e sairActionPerformed). No construtor desta classe, h apenas a chamada ao mtodo de inicializao

Tabela 5.5. Cdigo da classe SegRdI (viso geral).

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

/**
* Lendo imagem ruidosa e extraindo o objeto
* @author ERCEMAPI 2009
*/
public class SegRdI extends JFrame {
// atributos
JPanel painelPrinc, painelBotoes;
JButton btnAbrir, btnProc, btnLimpar, btnSair;
File fileName;
ImagePlus imagemIJ;
// inicializao dos componentes grficos
public void iniciaComponentes() { . . . }
// mtodo da ao ao clicar o boto Abrir
private void abrirActionPerformed(ActionEvent evt) { . . . }
// mtodo da ao ao clicar o boto Processar
private void processarActionPerformed(ActionEvent evt) { . . . }
// mtodo da ao ao clicar o boto Limpar
private void limparActionPerformed(ActionEvent evt) { . . . }
// mtodo da ao ao clicar o boto Sair
private void sairActionPerformed(ActionEvent evt) { System.exit(0); }
// construtor padro
public SegRdI() { this.iniciaComponentes(); }
// mtodo principal
public static void main(String[] args) {
SegRdI aplicacao = new SegRdI();
} // fim do mtodo principal
} // fim da classe

dos componentes grficos da interface. Por consequncia, no mtodo principal h apenas


a instanciao da classe. Isso porque buscou-se evitar o acmulo de variveis estticas no
mtodo principal [Arnold et al. 2000] para auxiliar o desempenho do coletor de lixo da
mquina virtual Java. O uso de variveis estticas deve ser evitado porque ocupam muito
recurso de memria e so as ltimas instncias a serem eliminadas pelo garbage collector
[Jones e Lins 1996].
O mtodo iniciaComponentes, descrito na Tabela 5.6, traz uma implementao
simples da interface grfica. Nele so definidas as propriedades mais relevantes dos botes
e a disposio dos demais componentes grficos na tela. Para cada boto associada um
mtodo correspondente que tambm est presente nesta seo.
O boto relacionado ao de limpar a tela (objeto btnLimpar) tem sua implementao apresentada na Tabela 5.7. Nela descreve-se o mtodo limparActionPerformed
que remove a imagem destacada no aplicativo. Nota-se aqui o uso da classe ImagePlus
que carrega a imagem a ser exibida na interface grfica e instancia o objeto suportado pela

Tabela 5.6. Cdigo da classe SegRdI mtodo iniciaComponentes que define a


interface grfica do aplicativo.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

public void iniciaComponentes(){


this.setLayout(new BorderLayout());
painelPrinc = new JPanel(); painelPrinc.setLayout(new BorderLayout());
this.add(painelPrinc, BorderLayout.CENTER);
painelBotoes = new JPanel(); painelBotoes.setLayout(new FlowLayout());
this.add(painelBotoes, BorderLayout.SOUTH);
// adicionando botes
btnAbrir = new JButton(); painelBotoes.add(btnAbrir);
btnAbrir.setText( Abrir ... );
btnProc = new JButton(); painelBotoes.add(btnProc);
btnProc.setText(Processar);
btnLimpar = new JButton(); painelBotoes.add(btnLimpar);
btnLimpar.setText( Limpar );
btnSair = new JButton(); painelBotoes.add(btnSair);
btnSair.setText( Sair );
// configurar aes dos botes
btnAbrir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
abrirActionPerformed(evt); } });
btnProc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
processarActionPerformed(evt); } });
btnLimpar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
limparActionPerformed(evt); } });
btnSair.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
sairActionPerformed(evt); } });
this.setVisible(true);
this.setSize(450,350);
this.setDefaultCloseOperation(
javax.swing.WindowConstants.EXIT_ON_CLOSE);
} // fim do mtodo initComponents

classe ImageCanvas. Esta ltima classe habilita a integrao de uma imagem trabalhada
pelas classes da API ImageJ aos componentes oferecidos pela API Swing. Portanto, para
limpar a tela do sistema basta instanciar um novo objeto de ImagePlus e associ-lo
interface. J que o objeto ImagePlus instanciado com seu construtor padro, ento
nenhuma imagem apresentada na tela.
O mtodo abrirActionPerformed tem sua implementao detalhada na Tabela 5.8
e detalha a implementao do boto com ao de abrir uma nova imagem na interface.
Permite-se com esse mtodo o surgimento de uma caixa de dilogo (linhas 03 a 05) para

Tabela 5.7. Cdigo da classe SegRdI mtodo limparActionPerformed que remove a imagem destacada no aplicativo.

01
02
03
04
05
06

private void limparActionPerformed(ActionEvent evt) {


ImagePlus imp = new ImagePlus();
ImageCanvas ic = new ImageCanvas(imp);
painelPrinc.removeAll();
painelPrinc.add(ic,BorderLayout.CENTER);
} // fim do mtodo limparActionPerformed

Tabela 5.8. Cdigo da classe SegRdI mtodo abrirActionPerformed definido


para busca e visualizao da imagem a ser trabalhada.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21

private void abrirActionPerformed(ActionEvent evt) {


// exibe caixa de dilogo para abrir arquivo de imagem
JFileChooser dialogo = new JFileChooser();
dialogo.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = dialogo.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION) return;
// recupera arquivo selecionado
fileName = dialogo.getSelectedFile();
// exibe erro se invlido
if (fileName == null || fileName.getName().equals()) {
JOptionPane.showMessageDialog(this, Nome de Arquivo Invlido,
Nome de Arquivo Invlido, JOptionPane.ERROR_MESSAGE);
return;
imagemIJ = new ImagePlus(fileName.toString());
JScrollPane sp = new JScrollPane(
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
ImageCanvas ic = new ImageCanvas(imagemIJ); sp.add(ic);
sp.setSize(imagemIJ.getWidth(), imagemIJ.getHeight());
painelPrinc.add(sp,BorderLayout.CENTER);
} // fim do mtodo abrirActionPerformed

seleo do arquivo da imagem a ser trabalhada. Se o arquivo for vlido, a imagem escolhida apresentada na tela do aplicativo.
Por fim, na Tabela 5.9 apresenta-se a descrio do mtodo processarActionPerformed com a ao de processar a segmentao da imagem. Como j descrito nesta seo,
nas linhas 02 a 07 define-se a chamada ao filtro da mediana na imagem. Na linha 08 h
o carregamento da imagem filtrada para um objeto de ImagePlus, o que permite a visualizao (quando necessrio) do resultado da filtragem. Em seguida, uma busca pelo pixel
de maior intensidade na imagem feita nas linhas 10 a 15. Nesse trecho de cdigo, uma
varivel inteira armazena o valor assumido por cada pixel consultado na imagem. Com o

Tabela 5.9. Cdigo da classe SegRdI mtodo processarActionPerformed que


realiza todo o processamento em torno das informaes da imagem trabalhada.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
35
36

private void processarActionPerformed(ActionEvent evt) {


Image image = imagemIJ.getImage();
ByteProcessor byteProc = new ByteProcessor(image);
byteProc.medianFilter();
image = byteProc.createImage();
ImagePlus imFilt = new ImagePlus(filtragem,image);
// descobrindo maior valor de nvel de cinza
int max = -1;
for(int lin = 0; lin < imFilt.getHeight(); lin++)
for(int col = 0; col < imFilt.getWidth(); col++){
int[] pixels = imFilt.getPixel(col, lin);
if(pixels[0]>max) max = pixels[0]; }
image = imFilt.getImage(); byteProc = new ByteProcessor(image);
// aplicando a segmentao atravs de limiarizao
byteProc.threshold(max-1);
image = byteProc.createImage();
ImagePlus imSeg = new ImagePlus(segmentacao,image);
image = imSeg.getImage(); byteProc = new ByteProcessor(image);
// inicialmente aplica-se a dilatao
byteProc.dilate(1,0);
image = byteProc.createImage();
ImagePlus imDil = new ImagePlus(dilatacao,image);
image = imDil.getImage(); byteProc = new ByteProcessor(image);
// posteriormente aplica-se a eroso
byteProc.erode(1,0);
image = byteProc.createImage();
ImagePlus imErosao = new ImagePlus(erosao,image);
JScrollPane sp = new JScrollPane(
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
ImageCanvas ic = new ImageCanvas(imErosao); sp.add(ic);
sp.setSize(imErosao.getWidth(), imErosao.getHeight());
painelPrinc.removeAll();
painelPrinc.add(sp,BorderLayout.CENTER);
} // fim do mtodo processarActionPerformed

mtodo getPixel (linha 13) da classe ImagePlus possvel recuperar um array com quatro elementos distintos: o primeiro o valor de nvel de cinza do pixel e os demais so
o valores nas camadas RGB. Neste caso, apenas a informao do primeiro elemento
relevante.
Como mencionado anteriormente, os trechos de cdigo expostos nas linhas 16 a
20 so aplicados para a execuo da limiarizao da imagem. Na linha 18 da Tabela 5.9,

percebe-se que o limiar assumido possui o valor do pixel de maior nvel de cinza decrementado por uma unidade. Isso se deve ao fato que o mtodo converte para 0 qualquer
pixel com intensidade menor ou igual ao argumento passado no mtodo threshold. Como
na regio de interesse todos os pixels possuem o valor mximo de tom de cinza na imagem, ento decrementa-se esse limiar para que o objeto possa ser destacado. Aps este
passo, realiza-se o ps-processamento nas linhas 22 a 33 com a operao de fechamento.
Ao final dessas operaes, repassada a imagem com o resultado final para componentes
grficos apresentarem a imagem ps-processada na tela do aplicativo.
Nota-se no resultado final que as bordas do objeto de interesse na imagem de sada
no se assemelham com as bordas deste mesmo objeto na imagem de entrada. Pode-se
observar, mesmo com a presena do rudo, que as bordas da imagem de entrada trazem
um aspecto visual de linhas mais retilneas que na imagem final. possvel enumerar
alguns motivos para essa ocorrncia. Primeiramente, a linha preta que passa por toda
a imagem tambm atravessa a regio do objeto e isso faz perder a informao de continuidade da sua borda. Em segundo lugar, o comportamento do rudo sal e pimenta
- que converte um pixel aleatrio em um dos valores extremos de nvel de cinza - pode
afetar o resultado da filtragem quando um pixel de borda possui seu valor modificado. E
por ltimo, na operao de fechamento a borda ter uma degradao em sua topologia se
seu comportamento local (nos valores dos pixels tratados pelo elemento estruturante) foi
afetado pelos motivos anteriores.
Apesar dessas dificuldades, o resultado final ainda se mantm bastante eficiente
com relao identificao da regio de interesse. Pode-se afirmar que outras imagens,
que sigam o mesmo padro de distribuio de tons de cinza e deste mesmo rudo, obtero
resultados semelhantes na segmentao dos objetos.
Com este pequeno aplicativo foi possvel relacionar diferentes tcnicas de PDI
para alcanar um nico resultado para uma determinada imagem. Buscou-se, com esse
exemplo de aplicao, apresentar algumas funcionalidades resumidas da API ImageJ de
forma integrada com APIs voltadas gerao de interface grfica na linguagem de programao Java. Verificou-se ainda como o resultado de uma etapa deste aplicativo interferiu no resultado alcanado por uma etapa conseguinte. Esta mesma aplicao poderia
ser desenvolvida usando a API JAI, ou alguma outra API direcionada a imagens, mas
mesmo assim no teria uma implementao mais breve do que essa apresentada. Pode-se
comprovar isso estudando a documentao destas APIs [Rodrigues 2001, Rasband 2009,
Microsystems ] e ser observado que a API ImageJ possui descrio mais curtas em suas
chamadas de mtodos e implementaes mais simples para as tcnicas bsicas de processamento de imagens.

5.5. Concluses e Consideraes Finais


Neste captulo foram apresentadas definies de processamento de imagens e a implementao de um aplicativo direcionado para a descrio de regies em uma imagem de
nvel de cinza. Para obter maior embasamento neste desenvolvimento, apresentou-se aqui
aplicaes de PDI em diferentes reas de pesquisa, tcnicas de realce, segmentao e morfologia matemtica e as APIs Java dedicadas a processamento de imagens. Em relao ao
realce observou-se o funcionamento do filtro da mediana e negativo de uma imagem, em

tempo que com segmentao, as ideias de limiarizao e watershed foram apresentadas e,


como consequncia, a viso geral de morfologia matemtica com exposio dos conceitos
de eroso, dilatao, abertura e fechamento. Todas essas noes passadas serviram para a
definio do aplicativo Java proposto na seo anterior.
Com relao s APIs, pode-se notar que a JAI trabalha melhor com entrada e sada
das imagens na aplicao e a ImageJ traz definies mais simplificadas e implementao
rpida das tcnicas mais bsicas de PDI. As duas APIs so flexveis e bem extensveis, o
que facilita a continuidade de suas distribuies e a popularidade de cada uma na comunidade de desenvolvimento. Elas ainda fazem uso de classes em comum, o que possibilita
a criao de uma aplicativo que combine estas APIs. Mas deve-se ficar atento com a
redundncia de implementaes com mesmos resultados em classes diferentes. Outras
implementaes com o uso dos recursos citados nesse captulo podem ser encontrado em
http://engcomp.sobral.ufc.br/professores/ialis/ercemapi2009.

Referncias
[Arnold et al. 2000] Arnold, K., J., G., e Holmes, D. (2000). The Java Programming
Language. Prentice-Hall, 3rd edition.
[Azevedo et al. 2007] Azevedo, E., Conci, A., e Leta, F. (2007). Computao Grfica:
Processamento de Imagens Digitais, volume 2. Editora Campus.
[Bento et al. 2009a] Bento, M., Medeiros, F., Paula Jnior, I., e Ramalho, G. (2009a).
Image processing techniques applied for corrosion damage analysis. In Proceedings of
the XXII Brazilian Symposium on Computer Graphics and Image Processing, Rio de
Janeiro. RJ.
[Bento et al. 2009b] Bento, M., Medeiros, F., Ramalho, G., e Medeiros, L. (2009b).
Image processing techniques to monitor atmospheric corrosion. In Anais da X Conferncia sobre Tecnologia de Equipamentos (COTEQ), Salvador, BA.
[Bernier e Landry 2003] Bernier, T. e Landry, J. (2003). A new method for representing
and matching shapes of natural objects. Pattern Recognition, 36(8):17111723.
[Burger e Burge 2009] Burger, W. e Burge, M. J. (2009). Principles of Digital Image
Processing: Fundamental Techniques. Springer.
[Calope et al. 2004] Calope, P., Medeiros, F., Marques, R., e Costa, R. (2004). A
comparison of filters for ultrasound images. Lecture Notes in Computer Science,
3124:10341040.
[Castleman 1996] Castleman, K. R. (1996). Digital Image Processing. Prentice Hall,
Upper Saddle River.
[Costa e Csar Jnior 2009] Costa, L. e Csar Jnior, R. (2009). Shape Analysis and
Classification: Theory and Practice. CRC Press, 2nd edition.
[Costa et al. 2004] Costa, L., Dos Reis, S., Arantes, R., Alves, A., e Mutinari, G. (2004).
Biological shape analysis by digital curvature. Pattern Recognition, 37(3):515524.

[Csar Jnior e Costa 1996] Csar Jnior, R. e Costa, L. (1996). Towards effective planar
shape representation with multiscale digital curvature analysis based on signal processing techniques. Pattern Recognition, 28(9):15591569.
[Deitel e Deitel 2005] Deitel, H. e Deitel, P. (2005). Java: Como Programar. PrenticeHall, 6th edition.
[Gomes e Velho 1994] Gomes, J. e Velho, L. (1994). Computao Grfica: Imagem.
IMPA.
[Gonzalez e Woods 2008] Gonzalez, R. e Woods, R. (2008). Digital Image Processing.
Prentice Hall, Nova York, EUA, 3rd edition.
[Jones e Lins 1996] Jones, R. e Lins, R. (1996). Garbage Collection: Algorithms for
Automatic Dynamic Memory Management. John Wiley & Sons.
[Lee et al. 1995] Lee, J.-S., Sun, Y.-N., e Chen, C.-H. (1995). Multiscale corner detection
by using wavelet transform. IEEE Transactions on Image Processing, 4(1):100104.
[Liang e Zhang 2006] Liang, Y. e Zhang, H. (2006). Computer Graphics Using Java 2d
And 3d. Prentice-Hall.
[Lopez et al. 2006] Lopez, D., Ramalho, G., Medeiros, F., Costa, R., e Arajo, R. (2006).
Combining features to improve oil spill classification in sar images. Lecture Notes in
Computer Science, 4109:928936.
[Marques et al. 2004] Marques, R., Carvalho, E., Costa, R., e Medeiros, F. (2004).
Filtering effects on sar images segmentation. Lecture Notes in Computer Science,
3124:10411046.
[Marques et al. 2008] Marques, R., Medeiros, F., e Ushizima, D. (2008). Target detection
in sar images based on a level set approach. IEEE Transactions on Systems, Man and
Cybernetics - Part C, Applications and Reviews, 39(2):214222.
[Marques Filho e Vieira Neto 1999] Marques Filho, O. e Vieira Neto, H. (1999). Processamento Digital de Imagens. Brasport.
[Martins et al. 2008] Martins, C., Veras, R., Ramalho, G., Medeiros, F., e Ushizima, D.
(2008). Automatic microaneurysm detection and characterization through digital color
fundus images. In Anais do Simpsio Brasileiro de Redes Neurais (SBRN), Salvador,
BA.
[Meyer e Beucher 1990] Meyer, F. e Beucher, S. (1990). Morphological segmentation.
Journal of Visual Communication and Image Representation, 1(1):2146.
[Miano 1999] Miano, J. (1999). Compressed Image File Formats. ACM Press - AddisonWesley, Reading, MA.
[Microsystems ] Microsystems, S.
Java Advanced
http://java.sun.com/javase/technologies/desktop/media/jai/.

Imaging

(JAI)

API.

[Mokhtarian e Mackworth 1986] Mokhtarian, F. e Mackworth, A. (1986). Scale-based


description and recognition of planar curves and two-dimensional shapes. IEEE Transactions on Pattern Analysis and Machine Intelligence, 8(1):3443.
[Murray e VanRyper 1996] Murray, L. e VanRyper, W. (1996).
Graphics File Formats. OReilly, 2nd edition. Sebastopol, CA.

Encyclopedia of

[Passarinho et al. 2006] Passarinho, C., Cintra, L., Medeiros, F., Oliveira, I., e Paula Jnior, I. (2006). Anlise de similaridade e correspondncia de formas aplicada reeducao postural global. In Anais do XX Congresso Brasileiro de Engenharia Biomdica,
pages 117120, So Pedro, SP.
[Paula Jnior et al. 2006] Paula Jnior, I., Medeiros, F., Mendona, G., Passarinho, C., e
Oliveira, I. (2006). Correlating multiple redundant scales for corner detection. In Proceedings of the 2006 IEEE International Telecommunication Symposium (ITS), pages
650655.
[Ramalho e Medeiros 2003] Ramalho, G. e Medeiros, F. (2003). Um sistema de inspeo
visual automtico aplicado classificao e seleo de laranjas. In Anais do IV Congresso Brasileiro da Sociedade Brasileira de Informtica Aplicada Agropecuria e
Agroindstria (SBIAGRO), volume 2, pages 197200, Porto Seguro, BA.
[Rasband 2009] Rasband, W. S. (1997-2009). ImageJ: Image Processing and Analysis
in Java. http://rsbweb.nih.gov/ij/. U. S. National Institute of Health.
[Rodrigues 2001] Rodrigues, L. H. (2001). Building Imaging Applications with Java
Technology: Using AWT Imaging, Java 2D, and Java Advanced Imaging (JAI).
Addison-Wesley Professional.
[Santos ] Santos, R. Java Image Processing Cookbook (online).
www.lac.inpe.br/ rafael.santos/JIPCookbook/.
[Santos 2003] Santos, R. (2003).
Usando Java. Campus.

Disponvel em

Introduo Programao Orientada a Objetos

[Santos 2004] Santos, R. (2004). Java Advanced Imaging API: A Tutorial. Revista de
Informtica Terica e Aplicada, 11(1):93123.
[Silva et al. 2006] Silva, L., Bellon, O., Lemes, R., Meira, J., e Cat, M. (2006). An image
processing tool to support gestational age determination. In Proceedings of the 19th
IEEE International Symposium on Computer-Based Medical System, pages 867874.
[Soille 2004] Soille, P. (2004). Morphological Image Analysis: Principles and Applications. Springer-Verlag, Nova York.
[Velho et al. 2009] Velho, L., Frery, A., e Gomes, J. (2009). Image Processing for Computer Graphics and Vision. Springer, 2nd edition.
[Vincent e Soille 1991] Vincent, L. e Soille, P. (1991). Watersheds in digital spaces: An
efficient algorithm based on immersion simulations. IEEE Transactions on Pattern
Analysis and Machine Intelligence, 13(6):583598.