Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Orientador
Mrio Luiz Rodrigues Oliveira
Lavras
Minas Gerais - Brasil
2003
Lavras
Minas Gerais - Brasil
Sumrio
1
Introduo
1.1 Contextualizao . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fundamentao Terica
2.1 Fundamentos para Processamento Digital de Imagens
2.1.1 Imagem em Escala de Cinza . . . . . . . . .
2.1.2 Definio Matemtica de Imagem . . . . . .
2.1.3 Imagem Digital . . . . . . . . . . . . . . . .
2.1.4 Representao de Imagens . . . . . . . . . .
2.1.5 Propriedades de um pixel . . . . . . . . . . .
2.1.6 Formatos de Imagens . . . . . . . . . . . . .
2.2 Etapas para o Processamento Digital de Imagens . .
2.2.1 Aquisio de Imagens . . . . . . . . . . . .
2.2.2 Realce de Imagem . . . . . . . . . . . . . .
2.2.3 Segmentao de Imagens . . . . . . . . . . .
2.2.4 Classificao de Imagem . . . . . . . . . .
Metodologia
3.1 Algoritmos Implementados
3.2 Linguagem Utilizada . . . .
3.3 Equipamentos Utilizados . .
3.4 Teste dos Algoritmos . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
2
.
.
.
.
.
.
.
.
.
.
.
.
4
4
4
5
6
6
7
8
10
10
10
16
18
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
19
20
20
21
Resultados e Discusses
4.1 A Biblioteca . . . . . . . . . . . .
4.1.1 Classe clIContrast . . . .
4.1.2 Classe clPhilter . . . . . .
4.1.3 Classe clGRSweeping . . .
4.1.4 Classe clGRAllDirections
4.2 Algoritmos de Contraste . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
22
23
24
25
26
.
.
.
.
.
.
.
.
4.3
4.4
4.5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
26
26
26
26
27
28
28
28
29
29
30
31
Concluso
33
Trabalhos Futuros
34
Referncias bibliogrficas
35
A Diagrama de Classes
A.1 Classe clContrast . . . . .
A.1.1 Atributos . . . . .
A.1.2 Mtodos . . . . .
A.2 Classe clPhilter . . . . . .
A.2.1 Atributos . . . . .
A.2.2 Mtodos . . . . .
A.3 Classe clGRSeeping . . . .
A.3.1 Atributos . . . . .
A.3.2 Mtodos . . . . .
A.4 Classe clGRSeeping . . . .
A.4.1 Atributos . . . . .
A.4.2 Mtodos . . . . .
A.5 Classe clGRAllDirecitions
A.5.1 Atributos . . . . .
A.5.2 Mtodos . . . . .
A.6 Classe clCanvas . . . . . .
A.6.1 Atributos . . . . .
A.6.2 Mtodos . . . . .
A.7 Classe clImageCanvas . .
A.7.1 Atributo . . . . . .
A.7.2 Mtodos . . . . .
A.8 Classe clImageFrame . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38
38
38
38
38
38
39
39
39
39
40
40
40
40
40
40
41
41
41
41
41
41
42
A.8.1 Atributo .
A.8.2 Mtodos
A.9 Classe clFrame .
A.9.1 Atributos
A.9.2 Mtodos
A.10 Classe clApp . . .
A.10.1 Atributo .
A.10.2 Mtodos
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
42
42
42
42
43
43
43
43
Lista de Figuras
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
2.19
Conjunto E . . . . . . . . . . . . . . . . .
Produto cartesiano E x K . . . . . . . . . .
imagem [Bastos] . . . . . . . . . . . . . .
Representao vetorial [Schneider (2001)] .
Representao matricial [Schneider (2001)]
Vizinhana 4 de um pixel . . . . . . . . . .
Vizinhana 8 de um pixel . . . . . . . . . .
Estrutura do arquivo PNG [Ramos (2000)] .
Estrutura do arquivo bitmap [Ramos (2000)]
Estrutura do arquivo TIFF [Ramos (2000)] .
Cmera digital . . . . . . . . . . . . . . . .
Histograma de imagens [Maria (2000)] . . .
Funo linear . . . . . . . . . . . . . . . .
Funo raiz quadrada . . . . . . . . . . . .
Funo logaritmica . . . . . . . . . . . . .
Funo inversa . . . . . . . . . . . . . . .
Mascara de Roberts . . . . . . . . . . . . .
Mascara de Sobel . . . . . . . . . . . . . .
Mascara da mdia . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
5
5
6
7
7
8
9
9
10
10
12
12
13
14
14
15
15
16
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
27
27
28
29
29
30
30
31
31
32
32
iv
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Lista de Tabelas
Dedico a ...
vi
Agradecimentos
Agradeo a minha famlia pelo carinho e apoio, em especial a minha
me Vanda.
Agradeo aos meus amigos, que estiveram ao meu lado nesta difcil caminhada, em especial a Igor Chalfoun pelo carinho, respeito e
amizade inabalvel.
Agradeo a Sara Chalfoun pelo carinho e importantes sugestes na
escrita da monografia.
Agradeo a prof. Mrio pela sugesto do tema e orientao neste projeto.
Agradeo a UFLA por dar-me a oportunidade de expandir meus conhecimentos, em especial ao Departamento de Cincia da Computao
e seus professores.
vii
viii
Captulo 1
Introduo
A imagem captada pelo sentido visual humano tem uma ampla aplicao, desde a
pintura engenharia, constituindo-se em uma das importantes fontes na aquisio
de informaes sobre o meio em que vive e forma ponto de referncia para a
execuo de projetos de diferentes naturezas.
A imagem formada quando h interao entre raios luminosos e objeto. Parte
da energia deixa o objeto na forma de novos raios de luz, que podem ser captados
pelo sistema visual humano ou por outro sistema de captao de imagem.
A exemplo dos computadores desde seu advento, a imagem digital vem experimentando significativa evoluo com a ampliao do leque de possibilidades no
sentido de registrar e manipular imagens. Este salto qualitativo veio ao encontro
da demanda por imagem que apresente um elevado padro de qualidade.
1.1
Contextualizao
controle de queimadas.
O processamento digital de imagens dividido em quatro etapas bsicas:
Aquisio de Imagens
Etapa responsvel pela captao de imagens de uma cena especfica.
Realce de Imagens
Etapa responsvel pela melhoria da qualidade visual ou extrao de alguma
caracterstica de interesse.
Segmentao de Imagens
Etapa responsvel por encontrar ou extrair objetos de uma imagem.
Classificao
Etapa responsvel pela segmentao especfica usando tcnicas de reconhecimento de padres.
1.2
Motivao
1.3
Objetivo
Este projeto estudou e implementou alguns dos algoritmos clssicos em processamento digital de imagens para formao de uma biblioteca e de uma aplicao
(software).
A biblioteca composta por dez algoritmos com os seguintes objetivos: melhoramento de contraste, extrao bordas, filtragem de rudos e extrao de objetos.
O software implementado foi denominado wxPDI, este sendo de cdigo aberto
com licena GPL.
Os captulos seguintes apresentam um viso mais detalhada sobre o processamento digital de imagens. Estes foram divididos da seguinte forma:
Fundamentao Terica
Este captulo apresenta os conceitos e os passos para o PDI.
Metodologia
Este captulo apresenta a metodologia adotada, os algoritmos que fazem
parte da biblioteca e a linguagem utilizada.
Resultados e Discusses
Este captulo apresenta os resultados e as discuses dos algoritmos implementados, a biblioteca e o software wxPDI.
Concluso
Este captulo apresenta as concluses sobre o trabalho realizado.
Trabalhos Futuros
Este captulo prope trabalhos futuros relacionados a esse projeto.
Captulo 2
Fundamentao Terica
Este captulo descreve os fundamentos e as etapas do processamento digital de
imagens.
2.1
2.1.1
2.1.2
Segundo [Mascarenhas & Velasco (1989)] uma imagem pode ser definida matematicamente como uma funo f (x, y), onde o valor nas coordenadas espaciais
xy corresponde ao brilho (intensidade) da imagem nessa coordenada (Figura 2.3).
2.1.3
Imagem Digital
2.1.4
Representao de Imagens
Existem duas maneiras de representar uma imagem: representao vetorial e representao matricial. Estas representaes diferem na natureza dos dados que
compe a imagem.
Segundo [Schneider (2001)] uma imagem vetorial uma imagem de natureza
geomtrica, ou seja, ela definida em funo de elementos geomtricos e parmetros (Figura 2.4).
2.1.5
Propriedades de um pixel
Vizinhana 8
A vizinhana 8 de um pixel P formada pelo conjunto de todos os pixels que so
adjacentes a P (Figura 2.7).
2.1.6
Formatos de Imagens
Formato livre;
Permite paleta de cores;
Permite cores com oito, 16, 32, e 48 bits por pixel;
Permite transparncia em oito e 16 bits;
Permite mltiplas plataformas;
Estrutura de dados do arquivo PNG:
Os primeiros oito bits so reservados para assinatura PNG
IHDR - Cabealho da imagem
PLTE - Paleta de cores usadas na imagem
IDAT - Chunks de dados da imagem
IEND - Indicador de fim de dados
Formato BMP
Os formato bitmap foi desenvolvido pela Microsoft para aplicaes no sistema
R
Windows
. um formato de estrutura muito simples, tornando mnimas as possibilidades de erros na interpretao dos dados. Os arquivos possuem geralmente a
extenso .BMP e aceitam imagens com um, quatro, oito, 16, 24 e 32 bits por pixel
[Ramos (2000)]. A Figura 2.9 abaixo mostra a estrutura do arquivo bitmap.
Formato TIFF
O formato TIFF foi desenvolvido em 1986 em uma tentativa de criar um padro
para imagens geradas por equipamentos digitais. O formato capaz de armazenar
imagens em preto ou branco, escalas de cinza e em paletas de cores com 24 ou
com 32 emphbits. O TIFF reconhecido por praticamente todos os programas de
imagem [Ramos (2000)]. A Figura 2.10 ilustra a estrutura do arquivo TIFF.
9
2.2
Esta seo apresentar os passos para o processamento digital de imagens, enfatizando as etapas abordadas neste projeto, Aquisio de imagem, Realce de imagem,
Segmentao de imagem e Classificao de imagem.
2.2.1
Aquisio de Imagens
2.2.2
Realce de Imagem
O melhoramento de imagem obtido atravs de tcnicas, tais como, o melhoramento de contraste e filtragem aplicadas com finalidades especficas enfatizando
caractersticas de interesse ou recuperando imagens que sofreram algum tipo de
degradao devido a introduo de rudo, perda de contraste ou borramento.
10
A aplicao dessas tcnicas, designadas como realce de imagem, so transformaes radiomtricas que modificam o valor dos nveis de cinza dos pontos da
imagem.
Melhoramento de Contraste
Melhoramento de contraste busca melhorar a qualidade visual da imagem atravs
da manipulao dos nveis de cinza. Uma imagem possui valores de intensidade
de pixel, variando de 0 a 255. Quanto mais espalhados os pixels da imagem neste
intervalo melhor o seu contrate. Para [Mascarenhas & Velasco (1989)] contraste
consiste numa diferena local de luminncia e pode ser definido como a razo dos
nveis de cinza mdios do objeto e do fundo.
O processo de melhoramento de contraste transforma a escala de cinza de
forma pontual, ou seja, o novo valor do ponto depende somente do valor original do ponto. Uma funo de transferncia mapeia o valor de um ponto para um
novo valor. Essa funo definida da seguinte forma: g(x, y) = T (f (x, y)) onde,
f (x, y) o valor do nvel de cinza original, T a funo de transferncia e g(x, y)
o novo valor do ponto.
Uma boa forma de avaliar o contraste de uma imagem analisar seu shistograma. O histograma um grfico que representa a distribuio dos pixels para
cada nvel de cinza da imagem. No eixo horizontal fica a escala de cinza e no eixo
vertical fica a quantidade de pixels.
A (Figura 2.12) ilustra duas imagens com seus respectivos histogramas, note
que trata-se da mesma imagem. Observando o histograma da primeira imagem
pode-se notar que a distribuio dos pixels concentra-se prximo ao nvel zero,
exemplificando uma imagem com baixo contraste. A segunda imagem possui alto
contraste, seus pixels esto melhor distribudos no histograma, possibilitando um
melhor discernimento das informaes contidas na imagem.
Funes de transferncias modificam histograma para obter um imagem com
melhor contraste. As funes a seguir foram retiradas de [Maria (2000)].
Funo Linear => g(x, y) = a f (x, y) + b, onde os parmetros a e b so
valores de ajuste da funo que variam de 0 a 255 ( figura 2.13 ). Esta funo
utilizada para redistribuir os pixels da imagem de forma linear.
11
12
p
Raiz Quadrada => g(x, y) = a f (x, y), onde o parmetro a o fator de
ajuste da funo que varia de 0 a 255. Esta funo utilizada para realar
as reas escuras da imagem. Este comportamento facilmente verificado no
grfico da Figura 2.14, note que a inclinao da funo maior prximo a
reas escuras da imagem;
matrizes com pesos associados em cada posio. A mscara com centro na posio
(x, y) colocada sobre o pixel a ser modificado na imagem. O pixel correspondente na imagem substitudo por um valor que considera os pixels vizinhos e
os pesos correspondentes na mscara. A soma de todos os produtos dos pesos da
mscara pelos pixels correspondente na imagem resulta em um novo valor de cinza
que substituir o pixel central.
14
Gx2 + Gy 2
15
Gx2 + Gy 2
Filtros de Rudos
Para [Marta (1998)] os rudos so um conjunto de pixels aleatrios diferentes dos
dados da imagem.
Filtro da Mdia
O filtro da mdia utiliza uma mscara que percorre a imagem e substitui
cada pixel da imagem pela mdia de seus vizinhos. O objetivo desse filtro
no de eliminar o rudo e sim suaviz-lo. A mascara utilizada uma matriz
(3 X 3) baseada na vizinhana 8 [Facon (2002)].
Filtro da mediana
O objetivo do filtro da mediana substituir o pixel central de uma matriz,
geralmente 3 X 3, pelo valor que estiver na mediana desses pixels ordenados
em ordem crescente de nvel de cinza [Facon (2002)].
Este filtro pode ser facilmente implementado da seguinte forma:
1) Para todos os pontos da imagem;
2) Escolha um ponto e o atribua a x;
2.1) Coloque em ordem crescente x e sua vizinhana 8, guarde esses valores
em um conjunto X;
2.2) O novo valor do ponto o valor que est na mediana do conjunto X;
Este filtro baseia-se no fato de que se o ponto for um rudo, ao colocar em
ordem crescente este ponto e sua vizinhana, o rudo tende a ficar em um dos
extremos do conjuto X, sendo substitudo pelo valor mediano do conjunto
X.
16
de segmentao divide a imagem em regies, sem considerar o processo de classificao. Para [Mascarenhas & Velasco (1989)], a regio em uma imagem um
conjunto de pontos ligados, ou seja, de qualquer ponto da regio pode-se chegar a
qualquer outro ponto por um caminho inteiramente contido na regio, baseado na
vizinhana 4 ou vizinhana 8.
Segmentao Baseado em Crescimento de Regies
A segmentao baseada no crescimento de regies pode ser feito de duas formas:
por varredura ou por busca em todas as direes. Ambos os mtodos baseiam-se
no fato das regies a serem detectadas apresentarem propriedades locais aproximadamente constantes como, por exemplo, o nvel de cinza.
Crescimento de regies por busca em todas as direes.1
No crescimento por busca, em todas as direes uma nica regio crescida
por vez.
Algoritmo:
Inicialmente regio(p) = 0 para todo o ponto p da imagem.
1) k = 0;
2) escolha um ponto x, tal que regio (x) == 0, se no existe ponto nesta
condio, ento pare: fim;
3) inicie nova regio: k = k + 1; regio(x) = k;
4) ache todos os pontos p da vizinhana de x, tal que regio (p) == 0 e p
possa ser adicionado regio de x sem violar o critrio de homogeneidade:
faa regio(p) = regio(x) e guarde estes pontos em um conjunto X;
5) se X est vazio, v para 2; caso contrrio, escolha e extraia um ponto x
de X;
6) v para 4;
Onde:
x o ponto (x, y);
os vizinhos de P a sua vizinhana 4; regio (p) indica a regio do ponto p.
Crescimento de regies segundo a varredura2
Neste mtodo, a imagem percorrida da esquerda para direita e de cima para
baixo comparando um ponto inicial da imagem (x, y) com todos os outros
pontos da imagem, adicionando ou no esses pontos a regio do ponto inicial.
1
2
17
Algoritmo:
1) Percorra a imagem segundo a varredura;
2) Escolha um ponto x na imagem e o rotule;
3) Compare x com todos os outros pontos da imagem;
3.1) Adicione a regio de x os pontos que no violarem o critrio de homogeneidade;
2.2.4
Classificao de Imagem
18
Captulo 3
Metodologia
Este captulo apresenta a metodologia utilizada neste trabalho.
Este projeto implementou alguns dos principais algoritmos para processamento
digital de imagens. Esses algoritmos formaram uma biblioteca, que tornou possvel a implementao do aplicativo wxPDI, um software de cdigo aberto para
processamento digital de imagens.
3.1
Algoritmos Implementados
3.2
Linguagem Utilizada
A linguagem escolhida para execuo do projeto foi C++. Dentre as principais caractersticas que motivaram tal escolha esto: cdigo multiplataforma, paradigma
de orientao objeto e incorporao da biblioteca grfica wxWindows.
A wxWindows uma biblioteca grfica para C++. A facilidade dessa biblioteca
em trabalhar com imagens constitui a principal motivao de sua utilizao. Ela
consegue ler vrios formatos de imagens e convert-los para um tipo genrico
wxImage, permitindo a manipulao dos dados da imagem. Mais detalhes sobre a
wxWindows pode ser visto em [wxWindows.org].
O diagrama de classes baseado na linguagem UML foi a forma proposta para
modelagem do sistema. Mais detalhes sobre UML em [ BOOCH et al.].
3.3
Equipamentos Utilizados
20
3.4
21
Captulo 4
Resultados e Discusses
Este captulo apresenta os resultados e as discusses relativos ao projeto, apresentando as classes que compe a biblioteca, a modelagem do software e a disusso
sobre o funcionamento dos algoritmos.
4.1
A Biblioteca
Nesta seo est a descrio de todas as classes que compem a biblioteca para
processamento digital de imagens. A descrio engloba os arquivos que devem ser
includos, bem como os mtodos que o usurio pode utilizar.
4.1.1
Classe clIContrast
4.1.2
Classe clPhilter
23
4.1.3
Classe clGRSweeping
24
4.1.4
Classe clGRAllDirections
Esta classe contm o algoritmo que identifica todas as regies, atravs da busca
por todas as direes.
Arquivo a ser includo: clGRAllDirections
Mtodos da Classe
clGRAllDirections::GRAllDirections()
Construtor default da classe, inicializa os atributos com valores default deixandoos em seu estado consistente.
clGRAllDirections::clGRAllDirections( int _threshold, unsigned int width,
unsigned int height, unsigned char *data, unsigned int *cPtr )
_threshold - Limiar de similaridade entre os pixels.
width - Largura da imagem em pixels.
height - Altura da imagem em pixels.
data - Estrutura que contm os dados da imagem (pixels). Esta estrutura
um vetor simulando uma matriz, cada posio do vetor est codificada pela
seguinte frmula x Altura + y, ou seja, f (x, y) = data[x altura + y]
cPtr - Estrutura que contm as classes dos pixels da imagem, codificada da
mesma forma que data.
clGRAllDirections::clGRAllDirections()
Destrutor da classe.
unsigned int *clGRAllDirections::PDISerchAllDirections()
Algoritmo que cresce regies fazendo busca em todas as direes.
unsigned int clGRAllDirections::PDIGetK() const
Funo que retorna a maior classe encontrada na imagem.
25
4.2
Algoritmos de Contraste
4.2.1
A funo linear pode ser usada para redistribuir o histograma da imagem de forma
linear. Esta funo apresentou bons resultados em imagens escuras, nas quais
torna-se difcil o discernimento dos objetos em cena. O resultado dessa funo
uma melhoria no contraste (conforme exemplificado na Figura 4.1), que explicada pelo comportamento da funo linear. Todos os pontos da imagem so
mapeados para outros valores, seguindo o crescimento da reta linear.
4.2.2
4.2.3
4.3
Algoritmos de Filtragem
26
4.3.1
Filtro de Roberts
Este um dos filtros mais antigos e simples usados para detectar bordas na imagem
utilizando operador gradiente (Figura 4.5). O filtro de Roberts usa o operador
27
gradiente para detectar bordas. O operador marca reas constantes da imagem com
valores baixos e reas onde a taxa de variao da derivada maior com valores
altos. Originalmente reas constantes da imagem so marcadas com preto e as
bordas com branco, porm, no exemplo citado, a imagem foi invertida para dar
maior nfase nas bordas.
4.3.2
Filtro de Sobel
O filtro de sobel mais sofisticado do que o de Roberts. O princpio de funcionamento do operador de Sobel igual ao de Roberts, porm a mscara de deslocamento maior. Ele consegue encontrar mais detalhes na imagem. possvel
perceber que este marca as bordas com uma intensidade maior (Figura 4.6).
4.3.3
Filtro da Mdia
O filtro da mdia apenas suaviza os rudos da imagem. Ele redistribui os rudos para os pixels vizinhos (Figura 4.7). A grande desvantagem desse filtro a
suavizao de detalhes como as bordas da imagem. Este filtro substitui um ponto
da imagem por um valor que a mdia aritmtica desse ponto e sua vizinhana 8.
Se esse ponto for um rudo, ele ser redistribudo entre os vizinhos.
4.3.4
Filtro da Mediana
28
4.4
Algoritmos de Segmentao
4.4.1
4.4.2
A segmentao por busca em todas as direes encontra todas a regies que esto ligadas na imagem. Este algoritmo escolhe um ponto na imagem, o rotula e
comea a crescer a regio a partir desse ponto. Quando no mais conseguir expandir a regio, ele escolhe outro ponto e repete o processo at no houver mais
pontos para serem rotulados. A figura 4.10 ilustra o resultado da segmentao com
limiar = 30.
30
4.5
O software
31
32
Captulo 5
Concluso
O presente projeto confirmou o grande potencial da aplicao de tcnicas de processamento digital de imagens com diferentes finalidades, sejam elas o realce
atravs do melhoramento de contraste e filtragem ou a segmentao.
Como foi visto no Captulo Resultados e Discusses os algoritmos mostraramse bastante eficientes em relao ao seu funcionamento, confirmando a reviso de
literatura. Pode-se perceber tambm que a utilizao dos mesmos depende dos
resultados que deseja-se obter na imagem. Em muitos casos esta anlise emprica
e subjetiva.
Terminando este trabalho espera-se que tanto a biblioteca quanto o software
wxPDI sejam de grande utilidade.
Captulo 6
Trabalhos Futuros
Dando continuidade ao projeto, ficam como sugestes de trabalhos futuros:
Implementao de histograma;
Mtodos de filtragem e domnio da freqncia;
Mtodos de segmentao baseados em perseguio de contorno e pesquisa
em grafo;
Mtodos de classificao;
Referncias Bibliogrficas
[Banon (2000)] BANON, G. J. F. Formal Introduction to digital image processing.
INPE, So Jos dos Campos JULHO 2000.
[Bastos] TCNICAS DE SEGMENTAO DE IMAGENS PARA RECUPERAO DE INFORMAES VISUAIS. Disponvel em
http://http://atlas.ucpel.tche.br/ vbastos/. Visitado em 05/11/2003.
[ BOOCH et al.] BOOCH. G. & RUMBAUCH J. & JACOBSON I. UML - Guiado
usurio. Rio de Janeiro, Campus, 2000.
[Brito & Carvalho (1998)] BRITO, S. F. & CARVALHO, J. M. Sistemas de Processamento digital de imagens para Fins didticos/cintificos: Estudo, seleo e implementao de algoritmos de segmentao. Relatorio de iniciao
cintfica. Agosto de 1998.
[Darsa (1994)] DARSA, L. Deformao e Metarmofose de Objetos Grficos. Departamento de Informtica. Dissertao de Mestrado pela Pontificia Universidade Catlica do Rio de Janeiro. 14 de junho 1994.
[Escuri (2002)] ESCURI, A. E. Fundamentos da Imagem Digital. TecGraf /PUCRio. Setembro de 2002.
[Escuri (2004)] ESCURI, A. E. Filtros Interativos para Imagens Digitais no
Domnio da Frequncia. Dissertao de Mestrado Pontificia Universidade
Catolica do Rio de Janeiro. 14 de setembro de 1994.
[Facon (2002)] FACON, J. Processamento e Anlise de Imagens. Pontificia Universidade Catlica do Paran. Curso e Mestrado em Informatica Aplicada.
FEVEREIRO 21, 2002.
[Facon (2002)] FACON, J. Princpios Bsicos da Viso por Computador e do
Processamento de Imagens. Pontificia Universidade Catlica do Paran.
Curso e Mestrado em Informatica Aplicada, 2002.
[Ferraz (1998)] FERRAS, M.C. Codificao de Imagens. IMPA, Rio de janeiro.
28 de junho de 1998.
35
[Young & Gerbrands & Van Vliet (1998)] YOUNG, I. T. & GERBRANDS, J. J.
& Van Vliet, L. J. Fundamentals of Image Processing. Delft University of
Tecnology, 1998.
[INPE] ISTITUTO NACIONAL DE PESQUISA ESPACIAIS. Disponvel em
http://www.dpi.inpe.br/pdi.html . Visitado em 13/06/03.
[NPDI UFMG] NCLEO DE PROCESSAMENTO DIGITAL DE IMAGENS.
Disponvel em http://www.npdi.dcc.ufmg.br/. Visitado em 13/06/03.
[wxWindows.org] WXWINDOWS. Disponvel em http://www.wxwindows.org/.
Visitado em 13/11/03.
37
Apndice A
Diagrama de Classes
A.1
Classe clContrast
A.1.1
Atributos
A.1.2
Mtodos
+ clIContrast()
+ clIContrast( unsigned char *data, int _size )
+ c lIContrast()
+ PDILinearFunction( unsigned char a, unsigned char b ) : unsigned char *
+ PDISquareRootFunction( unsigned char a ) : unsigned char *
+ PDILogarithmFunction( unsigned char a ) : unsigned char *
+ PDIInverseFunction( unsigned char a, unsigned char b ) : unsigned char *
==================================================================================
A.2
Classe clPhilter
A.2.1
Atributos
A.2.2
Mtodos
+ clPhilter()
+ clPhilter( unsigned int width, unsigned int height, unsigned char *data, unsigned
char *newData )
+ c lPhilter()
+ PDIOperatorGradientRoberts() : unsigned char *
+ PDIOperatorGradientSobel() : unsigned char *
+ PDIAveragePhilter() : unsigned char *
+ PDIMediumPhilter() : unsigned char *
- GetPosition( unsigned int x, unsigned int y ) : unsigned int
- InitialArray() : void
- Average( unsigned int x, unsigned int y ) : unsigned char
- Medium( unsigned int x, unsigned int y ) : unsigned char
==================================================================================
A.3
Classe clGRSeeping
A.3.1
Atributos
- threshold : int = 0
- nWidth : unsigned int = 0
- nHeight : unsigned int = 0
- dataPtr : unsigned char * = NULL
- classPtr : unsigned int * = NULL
- k : unsigned int = 0
A.3.2
Mtodos
+ clGRSweeping()
+ clGRSweeping( unsigned int _threshold, unsigned int width, unsigned int height,
unsigned char *data, unsigned int *cPtr )
+ c lGRSweeping()
+ PDISweeping( unsigned int x, unsigned int y ) : unsigned int *
- InitialArray() : void
- GetPositon( int x, int y ) : unsigned int
- VThreshold( unsigned int x, unsigned int y, unsigned int xi, unsigned int yi ) :
bool
- VNeighbor( unsigned int x, unsigned int y ) : bool
39
A.4
Classe clGRSeeping
A.4.1
Atributos
- threshold : int = 0
- nWidth : unsigned int = 0
- nHeight : unsigned int = 0
- dataPtr : unsigned char * = NULL
- classPtr : unsigned int * = NULL
- k : unsigned int = 0
A.4.2
Mtodos
+ clGRSweeping()
+ clGRSweeping( unsigned int _threshold, unsigned int width, unsigned int height,
unsigned char *data, unsigned int *cPtr )
+ c lGRSweeping()
+ PDISweeping( unsigned int x, unsigned int y ) : unsigned int *
- InitialArray() : void
- GetPositon( int x, int y ) : unsigned int
- VThreshold( unsigned int x, unsigned int y, unsigned int xi, unsigned int yi ) :
bool
- VNeighbor( unsigned int x, unsigned int y ) : bool
A.5
Classe clGRAllDirecitions
A.5.1
Atributos
- threshold : int = 0
- nWidth : unsigned int = 0
- nHeight : unsigned int = 0
- dataPtr : unsigned char * = NULL
- classPtr : unsigned int * = NULL
- pixel : unsigned int = 0
- setX : deque< int > * = NULL
- setY : deque< int > * = NULL
- k : unsigned int = 0
A.5.2
Mtodos
+ clGRAllDirections();
+ clGRAllDirections( int _threshold, unsigned int width, unsigned int height, unsigned char *data, unsigned int *cPtr )
40
+ c lGRAllDirections()
+ PDISerchAllDirections() : unsigned int *
+ PDIGetK() : unsigned int
- InitialArray() : void
- VThreshold( unsigned int x, unsigned int xi ) : bool
- VNeighbor( unsigned int x ) : bool
- VLabel( unsigned int x ) : bool
- VClass( unsigned int x, unsigned int xi ) : void
- ClassifyNeighborhood4( unsigned int x ) : void ================================================
A.6
Classe clCanvas
A.6.1
Atributos
A.6.2
Mtodos
+ clCanvas()
+ clCanvas( wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, const wxBitmap &bitmap )
+ c lCanvas()
+ OnPaint( wxPaintEvent &event ) : void
+ SetBitmap( const wxBitmap &bitmap, bool k ) : void
+ OnEventMouse( wxMouseEvent &event ) : void ===============================================
A.7
Classe clImageCanvas
A.7.1
Atributo
A.7.2
Mtodos
+ clImageCanvas()
+ clImageCanvas( wxWindow *parent, wxWindowID id, const wxPoint &pos,
41
A.8
Classe clImageFrame
A.8.1
Atributo
A.8.2
Mtodos
+ clImageFrame()
+ clImageFrame( wxWindow *parent, wxWindowID id, const wxString &title, int
xpos, int ypos, int width, int height, const wxBitmap &bitmap, bool up )
+ c lImageFrame()
==================================================================================
A.9
Classe clFrame
A.9.1
Atributos
42
A.9.2
Mtodos
+ clFrame()
+ clFrame( wxWindow *parent, wxWindowID id, const wxString &title, int xpos,
int ypos, int width, int heigth )
+ c lFrame()
+ OnLoadImage( wxCommandEvent &event ) : void
+ OnFileOpen( wxCommandEvent &event ) : void
+ OnFileSave( wxCommandEvent &event ) : void
+ OnRefresh( wxCommandEvent &event ) : void
+ OnFileExit( wxCommandEvent &event ) : void
+ OnContrast( wxCommandEvent &event ) : void
+ OnPhilter( wxCommandEvent &event ) : void
+ OnSegmentation( wxCommandEvent &event ) : void
+ OnDrawClass( wxCommandEvent &event ) : void
+ OnWriteClassFile( wxCommandEvent &event ) : void
+ OnChooseColour( wxCommandEvent &event ) : void
+ OnHelpAbout( wxCommandEvent &event ) : void
+ RecreateToolbar() : void
- AllocateData( int choose ) : void
- GetPosition( int x, int y ) : int
- DrawImage( unsigned int k ) : void
- DrawImagePhilter() : void
A.10
Classe clApp
A.10.1
Atributo
A.10.2
Mtodos
+ OnInit() : bool
43