U NIVERSIDADE F EDERAL DE C AMPINA G RANDE D EPARTAMENTO DE S ISTEMAS E C OMPUTAÇÃO G RADUAÇÃO EM C IÊNCIA DA C OMPUTAÇÃO P ROJETO EM C OMPUTAÇÃO P ROCESSAMENTO D IGITAL DE I MAGENS NO D OMÍNIO DA F REQÜÊNCIA E LLOÁ B. G UEDES DA C OSTA O DILON F RANCISCO DE L IMA J R (A LUNOS ) J OSEANA M ACÊDO F ECHINE J OSÉ E USTÁQUIO R ANGEL DE Q UEIROZ (O RIENTADORES ) C AMPINA G RANDE M ARÇO - 2009 Conteúdo 1 2 3 Introdução 3 1.1 Processamento Digital de Imagens . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Sistema Típico para o Processamento Digital de Imagens . . . . . . . . . . 4 1.3 Conceitos Fundamentais do Processamento Digital de Imagens . . . . . . . 5 1.3.1 Pixel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3.2 Resolução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.3 Dimensão da Imagem . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.4 Profundidade de Bits . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.5 Faixa Dinâmica (Dynamic Range) . . . . . . . . . . . . . . . . . . 8 1.3.6 Compressão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Java no Contexto do Processamento Digital de Imagens 10 2.1 Característica Gerais da Linguagem Java . . . . . . . . . . . . . . . . . . . 10 2.2 Java no Processamento Digital de Imagens . . . . . . . . . . . . . . . . . . 11 2.3 Java Advanced Imaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3.1 Representação de Imagens . . . . . . . . . . . . . . . . . . . . . . 12 2.3.2 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Processamento Digital de Imagens no Domínio do Espaço 14 3.1 Conceito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2 Filtragem Espacial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.3 Morfologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.3.1 Dilatação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.3.2 Erosão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 i 4 5 6 Processamento Digital de Imagens no Domínio da Freqüência 23 4.1 Conceito de Freqüência em uma Imagem . . . . . . . . . . . . . . . . . . 23 4.2 Transformada de Fourier no Processamento Digital de Imagens . . . . . . . 24 Transformada de Fourier 25 5.1 Introdução à Transformada de Fourier . . . . . . . . . . . . . . . . . . . . 25 5.2 A Transformada Discreta de Fourier Bidimensional . . . . . . . . . . . . . 26 5.2.1 Importância da fase e magnitude . . . . . . . . . . . . . . . . . . . 27 5.2.2 Propriedades da Transformada Bidimensional de Fourier . . . . . . 27 Transformada Rápida de Fourier 30 6.1 Definição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.1.1 Raízes complexas de unidade . . . . . . . . . . . . . . . . . . . . 31 6.1.2 A idéia do algoritmo da FFT . . . . . . . . . . . . . . . . . . . . . 31 Algoritmo de Cooley-Tukey . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.2 A Estrutura deste documento 35 B Imagens 36 B.1 Processamento Digital de Imagens no Domínio do Espaço . . . . . . . . . ii 36 Apresentação Os primeiros computadores poderosos o suficiente para lidar com tarefas relativas ao processamento digital de imagens surgiram nos anos 60. O nascimento do conceito de Processamento Digital de Imagens (PDI) pode ser traduzido na viabilidade destas máquinas e nas primeiras aplicações daquele período em promoverem melhorias e alterações em imagens. Então, neste período que há também o surgimento dos primeiros conceitos e técnicas para manipulação de imagens. Apesar de ser recente, é uma área que possuiu uma rápida e efetiva consolidação. Uma das razões, em particular, é pela existência de um grande número de técnicas para a manipulação de imagens já desenvolvidas. Uma destas técnicas que merece destaque é o processamento digital de imagens no domínio da freqüência, na qual, com a utilização da Transformada de Fourier, é possível obter resultados e informações relevantes a partir da imagem original. Ao passo que é uma área bastante consolidada e existe uma vasta quantidade de materiais didáticos, há também a preocupação com os alunos que possuam interesse nesta área de pesquisa, sejam estes jovens pesquisadores ou alunos de disciplinas de Processamento Digital de Imagens dos cursos de Ciência da Computação. Esta preocupação reside em tornar a fundamentação teórica mais interativa e atrativa, de modo que possa ser acompanhada de uma parte prática na qual o aluno possa executar os algoritmos estudados verificar como esta execução é dada e qual o seu resultado. Visando atender a esta proposta, foi desenvolvida a ferramenta SImPLe (Software for Image Processing Learning) [Queiroz and Gomes 2005], sob a orientação do Professor Eustáquio Rangel (DSC/UFCG). Esta ferramenta se caracteriza por um software que implementa diversas técnicas de processamento digital de imagens no domínio do espaço e possui o intuito de se tornar uma ferramenta didática que ilustre a aplicação dos conceitos nela aborda1 2 dos fazendo com que isto reforce o aprendizado dos mesmos. Dado o perfil da ferramenta SImPLe, se identificou como necessidade para a melhoria deste software o desenvolvimento de algoritmos para o processamento digital de imagens no domínio da freqüência. A demanda pela implementação de técnicas de processamento digital de imagens no domínio da freqüência é oriunda do grande número de técnicas que esta forma de processamento abrange e da relevância na aplicação das mesmas, tornando-se essencial em uma ferramenta de cunho didático. Deste modo, o projeto em questão visa a implementação de um módulo que contenha técnicas para o processamento digital de imagens no domínio da freqüência e a incorporação deste módulo ao SImPLe, fazendo com que esta ferramenta adquira novas funcionalidades e se torne mais abrangente no domínio que se refere. Capítulo 1 Introdução O Processamento Digital de Imagens (PDI) consiste em uma área de pesquisa relevante no cenário atual da Computação. Seu estudo permite o desenvolvimento de técnicas e procedimentos aplicáveis à diversas áreas, desde jogos até a manipulação de imagens médicas. Neste capítulo apresentaremos em que consiste essa área da Computação e alguns dos conceitos introdutórios fundamentais para a compreensão da mesma. 1.1 Processamento Digital de Imagens O Processamento Digital de Imagens tem início com a captura da imagens, que corresponde à iluminação refletida na superfície dos objetos, adquirida através de um sistema de aquisição (câmera, scanner, etc.). Após esta captura, uma imagem precisa ser representada de forma apropriada para tratamento computacional, podendo ser representadas em duas ou mais dimensões [Queiroz and Gomes 2005]. Os primeiros computadores poderosos o suficiente para lidar com tarefas relativas ao processamento digital de imagens surgiram nos anos 60. O nascimento do conceito de PDI pode ser traduzido na viabilidade destas máquinas e nas primeiras aplicações daquele período em promoverem melhorias e alterações em imagens. Então, neste período que há também o surgimento dos primeiros conceitos e técnicas para manipulação de imagens. No escopo deste projeto, é possível definir uma imagem como uma função bidimensional f (x, y), onde x e y são pontos no plano, e a amplitude de f como um par de coordenadas (x, y) denominada intensidade do nível de cinza no determinado ponto da imagem. Quando 3 1.2 Sistema Típico para o Processamento Digital de Imagens 4 os valores de x,y e da amplitude f são finitos e discretos, dizemos que esta é uma imagem digital. A área do processamento digital de imagens se refere ao processamento digital de imagens em termos de um computador digital. Note que a imagem digital é composta por um número finito de elementos, onde cada qual possui uma localização particular e um valor. De um modo geral, é comum levar em consideração apenas os resultados do PDI que possuem algum significado para a percepção humana. A segunda maior aplicação de técnicas de processamento digital de imagens está em resolver problemas ligados à percepção de máquina. Neste escopo, há foco em procedimentos para extrair de uma imagem informações para o processamento computacional. Normalmente, esta informação possui alguma relação com a forma com que os humanos fazem para interpretar o conteúdo de uma imagem. Problemas típicos na área de percepção de máquina (ou visão computacional) são rotinas para reconhecimento automático de caracteres, processamento automático de impressões digitais, exibição de raios-X, interpretação de imagens de satélite, etc. Não existe um consenso sobre onde o processamento digital de imagens pára e outras áreas, a exemplo da análise de imagens e visão computacional, começam. Algumas vezes a distinção é feita através da definição do processamento digital de imagens como a área em que a entrada e a saída do processo são imagens [Gonzalez and Woods 2001]. 1.2 Sistema Típico para o Processamento Digital de Imagens O primeiro passo em um sistema típico para o processamento digital de imagens é a captura da luz refletida por um objeto, que em termos práticos é o mesmo que a captura da imagem. Esta etapa é denominada “aquisição”. Nesta etapa dois elementos são relevantes: 1. O dispositivo físico sensível à faixa de energia irradiada pelo alvo de interesse; e 2. O dispositivo conversor da saída do dispositivo físico em um formato digital. O hardware especializado para o processamento digital de imagens consiste de um digitalizador integrado a um hardware destinado à execução de outras operações primitivas, a exemplo de unidades lógico-aritméticas (ULA) que realizam o processamento à medida que as imagens são digitalizadas. 1.3 Conceitos Fundamentais do Processamento Digital de Imagens 5 Considerado o âmbito do processamento, o processamento digital de imagens pode ocorrer em um computador sem hardware especializado. Porém, para tanto, necessita de software especializado para processamento de imagens que consiste, em geral, de módulos destinados à realização de tarefas específicas, a exemplo de operações de processamento radiométrico e/ou geométrico de imagens monocromáticas ou coloridas, mono ou multiespectrais, dentre outras. O armazenamento de imagens digitais também é de interesse de estudo, seguindo três possibilidades: 1. Armazenamento de curta duração: É utilizado durante o armazenamento das imagens de interesse em diferentes etapas do processamento; 2. Armazenamento online ou de massa: Típico em operações relativamente rápidas ligadas à recuperação de imagens; 3. Arquivamento de imagens: Objetivando o acesso esporádico ao arquivo e à recuperação quando solicitado. Por fim, considerando a saída do sistema, duas alternativas são comuns: 1. Visualização da imagem: Requer tipicamente monitores de vídeo coloridos e preferencialmente de tela plana, que recebem dados de placas gráficas comerciais ou dedicadas; 2. Impressão da imagem: Costuma utilizar diferentes dispositivos de impressão de pequeno, médio e grande porte – impressoras e/ou traçadores gráficos (plotters) de jato de tinta, sublimação de cera ou laser. A figura 1.2 ilustra o sistema típico para o processamento digital de imagens que foi caracterizado: 1.3 Conceitos Fundamentais do Processamento Digital de Imagens Os conceitos fundamentais são necessários para a compreensão dos procedimentos e técnicas aplicados no PDI. São relativos desde como nós, seres humanos, compreendemos uma imagem, até como o computador manipula a mesma. Os tópicos a seguir abrangem os conceitos 1.3 Conceitos Fundamentais do Processamento Digital de Imagens 6 Rede Hardware de Visualização Sensores de Imagem Hardware para Processamento de Imagens Computador Hardware de impressão Software para Processamento de Imagens Armazenamento Figura 1.1: Ilustração de um sistema típico para o processamento digital de imagens [Queiroz and Gomes 2005]. fundamentais e introdutórios. Nas outras seções e capítulos outros conceitos importantes continuam a serem introduzidos. 1.3.1 Pixel Pixel, palavra formada da aglutinação das palavras inglesas “Picture” e “Element”, denota o menor elemento em um dispositivo de exibição ao qual é possível atribuir uma cor [Russ 2007]. De uma forma mais sintética, poderíamos dizer que pixel é a unidade atômica de composição de uma imagem. A cada pixel é atribuída uma tonalidade (branco, preto, tonalidades de cinza ou de cor), as quais são representadas na notação binária. Os bits para cada pixel são armazenados em uma seqüencia por computador e normalmente vinculados à uma representação matemática (compressão). Os bits então são lidos e interpretados para produzir uma imagem análoga para visualização e impressão [Cornell University Library 2003]. 1.3 Conceitos Fundamentais do Processamento Digital de Imagens 7 Figura 1.2: Exemplo de pixels que compõe uma imagem e dos valores das tonalidades associados à cada pixel. 1.3.2 Resolução Resolução é a habilidade de distinguir pequenos detalhes espaciais. A freqüência espacial na qual uma imagem é mostrada é um bom indicador da sua resolução. A resolução indica quantos pontos ou pixels por polegada existem na imagem. 1.3.3 Dimensão da Imagem São as medidas verticais e horizontais de uma imagem expressas em termos de pixel. As dimensões podem ser determinadas pela multiplicação da largura e altura pela quantidade de pontos por polegada (dpi). 1.3.4 Profundidade de Bits A profundidade de bits é determinada pelo número de bits utilizados para definir cada pixel. Quanto maior a profundidade de bits, maior será o número de tons representados, em escala de cinza ou cor. Imagens digitais podem ser representadas em preto e branco, escala de cinza ou cor. A figura 1.3 ilustra a mesma imagem com diferentes profundidades de bits. A imagem mais à esquerda é uma imagem com profundidade de bits igual 1, a segunda é uma imagem em escala de cinza, cuja profundidade é de 8 bits e a terceira imagem, colorida, possui 1.3 Conceitos Fundamentais do Processamento Digital de Imagens 8 profundidade de 24 bits. Figura 1.3: Exemplo de uma mesma imagem com diferentes valores de profundidade de bits. 1.3.5 Faixa Dinâmica (Dynamic Range) Faixa dinâmica é a largura da faixa de tons entre a luz mais clara e mais escura em uma imagem. Quanto mais larga é este faixa, maior é o potencial de sombras que podem ser representados, embora a faixa dinâmica não se relacione automaticamente ao número de tons produzidos. A figura 1.4 ilustra um exemplo de imagem onde a faixa dinâmica foi propositalmente aumentada. Neste caso, a intenção é aumentar a possibilidade de valores de níveis encontrados em cenas reais, indo da luz direta do sol até à sombras. 1.3.6 Compressão A compressão é utilizada para reduzir o tamanho da imagem a ser armazenada, visto que o tamanho das imagens digitais podem ser muito grandes, em virtude das dimensões das imagens e da profundidade de bits. Todas as técnicas de compressão de imagens abreviam uma string de código binário da 1.3 Conceitos Fundamentais do Processamento Digital de Imagens 9 Figura 1.4: Exemplo de imagem cujo intervalo dinâmico foi propositalmente acentuado. imagem original, segundo algoritmos matemáticos de relativa complexidade, de caráter livre ou proprietário. Capítulo 2 Java no Contexto do Processamento Digital de Imagens O processamento digital de imagens é comumente realizado na linguagem C, pelo fato desta ser uma linguagem consolidada, compilada e assim poder resultar em geração de código e resultados de processamento de uma forma mais rápida. Porém, esta realidade está sendo modificada com o avanço de outras linguagens de programação. A fim de ilustrar esta modificação, este capítulo trata da utilização da linguagem Java no contexto do processamento digital de imagens. 2.1 Característica Gerais da Linguagem Java Java é uma linguagem de programação de computadores proposta pela Sun Microsystems. Além da sintaxe e semântica da linguagem, Java contém um conjunto de tecnologias aliadas ao desenvolvimento e execução, ou seja, a linguagem Java é apenas um dos componentes das tecnologias Java. O diferencial em relação à suas precursoras é o fato da mesma ser executada em uma máquina virtual, denominada Java Virtual Machine (JVM). O código em Java gerado pelo programador é interpretado para bytecodes, uma linguagem intermediária que serve de entrada para a JVM a qual é capaz de executá-los em linguagem de máquina. Desse modo, a execução depende apenas da JVM e não de detalhes implementados pelo programador. Isto resulta em uma das grandes vantagens de Java em relação às demais linguagens: o código 10 2.2 Java no Processamento Digital de Imagens 11 gerado não é dependente de plataforma [Deitel and Deitel 2006]. Além desta vantagem, Java apresenta um grande suporte à documentação . Cada ponto de funcionalidade implementado (classes, métodos, etc. ) é capaz de ser documentado, ou seja, o programador escreve um texto sobre qual a funcionalidade daquele trecho de código. Do resultado desta etapa é possível gerar o Javadoc, ou seja, a documentação Java. O Javadoc gerado resulta em uma API – Application Programming Interface – conjunto de arquivos que descrevem os componentes de código, qual a sua funcionalidade, seus parâmetros, inclusive dados de quem é o autor do código. Isto facilita o reuso. O fácil reuso pode ser citado como uma dos grandes motivadores da utilização da linguagem Java. Além da fácil geração de bibliotecas, o processo de incorporação de funcionalidades desenvolvidas por terceiros é simples, podendo consistir tanto da importação de bibliotecas quanto de frameworks. Java também é vista com destaque nos dias atuais, pois com a grande demanda por aplicações Web, é uma das poucas linguagens que possui uma estrutura bem consolidada de frameworks desenvolvidos para este fim. 2.2 Java no Processamento Digital de Imagens O Processamento Digital de Imagens é uma tarefa de central interesse na Web. Em um meio onde vários formatos de dados são bastante utilizados – texto, áudio, imagens – as imagens costumam ser parte de uma grande porção do tráfego de dados. Em virtude disto, existe uma demanda por processamento de imagens. Novos formatos de imagens são criados a cada dia. Os browsers (navegadores da Web) crescem em tamanho e complexidade por razão da necessidade da instalação de plugins aptos para a codificação, processamento e decodificação destas imagens. Uma forma de diminuir este overhead é através do processamento de imagens via Web. Como citado anteriormente, Java facilita o reuso de código, simplificando a construção de plugins e também possibilita que o processamento destas imagens seja realizado via Web, ou seja, suprindo as duas maiores deficiências ligadas ao PDI nos dias atuais [Lyon 1999]. 2.3 Java Advanced Imaging 2.3 12 Java Advanced Imaging A API Java Advanced Imaging (JAI) proporciona um conjunto de funcionalidades relacionadas ao processamento digital de imagens. Desenvolvida pela Sun Microsystems, é livre de royalties, portável e se constitui por uma alternativa flexível para a implementação de aplicações com processamento digital de imagens desenvolvidas com a linguagem Java. Nas subseções a seguir, serão apresentadas características gerais desta API, baseadas no tutorial de Santos [Santos 2004]. 2.3.1 Representação de Imagens Os algoritmos de processamento de imagens requerem a manipulação de pixels. Em virtude desta necessidade, a JAI apresenta o devido suporte à representação de imagens, sejam elas bidimensionais ou multidimensionais, levando em conta a possibilidade de manipulação de diversos formatos existentes, de diferentes modelos de cores, etc. • PlanarImage: Classe básica para a representação de imagens no JAI. Permite o modo somente leitura, ou seja,deve ser criada e os valores dos pixels podem ser acessados de diversas maneiras, mas não podem ser alterados. • TiledImage: Subclasse de PlanarImage, a qual pode ser usada para leitura e escrita dos dados da imagem. • RenderedOp: Mais uma subclasse de PlanarImage, a qual representa um nó em um processo de renderização. Um processo de renderização de imagens é um conceito interessante e poderoso do JAI, que permite o processamento de imagens segundo uma série de passos (operadores e parâmetros), que podem ser aplicados a uma ou mais imagens. Além destas representações de imagens, a JAI dá suporte ao processamento independente de partes de uma mesma imagem. Isto permite um maior eficiência no processamento de imagens grandes e proporciona maior mobilidade na aplicação de filtros em uma mesma imagem. 2.3 Java Advanced Imaging 2.3.2 13 Operadores A API do JAI contém muitos operadores de imagens que podem ser aplicados sem muito esforço para programação. Estes operadores seguem o conceito de que um operador pode ser definido como um conjunto de passos aplicado à uma imagem dada. Estes operadores são especificados de uma forma simplificada: primeiro instancia-se um ParameterBlock (vetor de dados que será usado para a operação) e a partir deste é obtido um RenderOp, que pode ser manipulado como uma PlanarImage. Alternativamente, é possível adicionar uma imagem à instância do ParameterBlock, passando-a como parâmetro. Um operador é acessado pela JAI através de uma chamada a JAI.create. Os principais operadores definidos na JAI são: • Filestore: Define qual o formato que a imagem será salva: JPG,PNG, etc.; • Fileload: Responsável pela abertura de uma imagem e retorno da mesma segundo uma PlanarImage; • Invert: Inverte os bits de uma imagem passada como entrada; • Rotate: Rotaciona uma imagem de acordo com os graus fornecidos em radianos; • Convolte: Realiza a convolução de uma imagem com um dado kernel; • Add: Adiciona os bits de duas imagens; • Subtract: Realiza a subtração de duas imagens passadas como parâmetro. • Multiply: Multiplica os valores dos pixels de duas imagens; • Divide: Divide os valores dos pixels de uma imagem pelos de outra imagem passada como parâmetro. De um modo geral, a JAI facilita e simplfica o desenvolvimento de aplicações Java que realizam o processamento digital de imagens. Existe um conjunto vasto de ou- tras funcionalidades providas por esta que podem ser consultadas no site oficial da Sun [Sun Microsystems 2008]. Capítulo 3 Processamento Digital de Imagens no Domínio do Espaço O PDI no domínio do espaço refere-se ao conjunto de técnicas mais conhecidas para a manipulação de imagens. Operações bastante realizadas neste domínio são as operações de filtragem. Neste capítulo será conceituado o processamento digital de imagens no domínio do espaço e a apresentação dos principais filtros utilizados neste domínio. 3.1 Conceito O termo “espacial” se refere à própria imagem plana, ou seja, possui relação com a localização direta dos pixels. De fato, as técnicas de processamento digital de imagens no domínio do espaço condizem com a manipulação direta de um pixel ou de sua vizinhança. As técnicas do domínio do espaço são denotadas pela expressão: g(x, y) = T [f (x, y)] (3.1) em que f (x, y) é a imagem de entrada, g(x, y) é a imagem resultante, oriunda de um processo, e T é um operador sobre f , definido, por exemplo, sobre uma determinada vizinhança do ponto (x, y). Pode-se dizer ainda que T pode operar sobre um conjunto de imagem, a exemplo do processo de adição de um conjunto de imagens para redução de ruído [Gonzalez and Woods 2002]. 14 3.1 Conceito 15 A principal abordagem que define esta vizinhança de um ponto (x, y) é uma área quadrada ou retangular centrada em (x, y). O operador T é aplicado à cada (x, y) derivando o valor da função g para este ponto. Visto que T é uma operação local, a filtragem espacial é uma transformação dependente do contexto em que se insere cada pixel considerado [Queiroz and Gomes 2005]. Levando em consideração um pixel p de coordenadas (i, j), existem dois tipos de vizinhos associados: 1. Vizinhos mais próximos: pixels de coordenadas (i+1, j), (i−1, j), (i, j+1) e (i, j−1); 2. Vizinhos mais distantes: pixels de coordenadas (i−1, j −1), (i−1, j +1), (i+1, j −1) e (i + 1, j + 1). Existem tipos de vizinhanças comumente utilizadas em operações locais: as vizinhanças 4-conectada, 6-conectada e 8-conectada. A figura 6.1 ilustra os vizinhos de um pixel, estas vizinhança e a ligação entre estes e uma operação no domínio do espaço. P1 P2 P3 P4 P5 P65 P7 P8 P9 Transformação Parâmetros Figura 3.1: Exemplo de uma operação no domínio do espaço. Além do conceito de operação e dos parâmetros da mesma, estão denotados os pixels que compõem a vizinha do pixel no qual a operação é realizada. 3.2 Filtragem Espacial 3.2 16 Filtragem Espacial O primeiro passo efetivo do processamento digital de imagens é comumente conhecido como pré-processamento. Normalmente, esta etapa envolve a filtragem de ruídos e distorções geométricas introduzidos pelos sensores de captura das imagens. consistindo da forma mais básica do tratamento de imagens. Alguns operadores de vizinhança trabalham com valores de pixels da imagem da vizinhança e os valores correspondentes de uma sub-imagem que possui as mesmas dimensões desta vizinhança. À esta sub-imagem denominamos “filtro”, “máscara” ou “kernel”. O processo de filtragem consiste na movimentação do filtro da máscara ponto a ponto na imagem. Para cada (x, y), o resultado do filtro é calculado utilizando uma relação pré-definida. Para a filtragem linear, a resposta é dada pela soma dos produtos dos coeficientes do filtro o os pixels correspondentes da área abrangida pelos filtros da máscara. A figura 3.2 ilustra um exemplo de aplicação de filtro. Neste caso, uma imagem colorida é convertida em escala de cinza de acordo com vários níveis de intensidade diferentes. Podemos ilustrar o conceito definido na equação 3.1 da seguinte forma: f (x, y) o pixel colorido a ser transformado, T a função que converte a cor desse pixel em escala de cinza e g(x, y) o pixel anterior com nova cor (tom de cinza). Figura 3.2: Exemplo de utilização de filtro para conversão em escala de cinza. A intensidade do filtro é modificada em cada exemplo, onde temos a seguinte seqüência: 10, 25, 50, 75 e 80, respectivamente. Podemos listar alguns dos filtros espaciais mais utilizados: • Filtros de Suavização – Filtro da Média de ordem n: Produz como valor do pixel processado a média aritmética dos valores dos pixels (i, j) de uma vizinhança contendo n pixels. A figura 3.3 ilustra a aplicação deste filtro. 3.2 Filtragem Espacial 17 Figura 3.3: Exemplo de utilização do filtro da média. Foi aplicada à figura da direita uma máscara um filtro da Média de ordem 3. O resultado desta operação é a imagem da esquerda. – Filtro da Mediana de ordem n: produz como valor do pixel de saída a mediana dos valores dos pixels da imagem de entrada em uma vizinhança de (i, j) contendo n pixels. A figura 3.4 ilustra a aplicação deste filtro.; Figura 3.4: Exemplo de utilização do filtro da mediana. Foi aplicada à figura da direita uma máscara um filtro da Mediana de ordem 3. O resultado desta operação é a imagem da esquerda. – Filtro da Moda de ordem n: Produz como valor do pixel de saída a moda dos valores dos pixels da imagem de entrada em uma vizinhança de (i, j) contendo n pixels. A figura 3.5 ilustra a aplicação deste filtro. • Filtros operadores de gradiente: Produzem a acentuação ou aguçamento de regiões de uma imagem nas quais ocorrem variações significativas de níveis de cinza; – Operador de Roberts: Executa o gradiente cruzado, ou seja, o cálculo das diferenças dos níveis de cinza é executado em uma direção rotacionada de 45o ; 3.2 Filtragem Espacial 18 Figura 3.5: Exemplo de utilização do filtro da mediana. Foi aplicada à figura da direita uma máscara um filtro da Mediana de ordem 3. O resultado desta operação é a imagem da esquerda. Gx = 1 0 0 −1 Gy = 0 −1 1 0 A figura 3.6 ilustra a aplicação do operador em questão. Figura 3.6: Exemplo de utilização do operador de Roberts. Este operador foi aplicado à imagem do lado esquerdo tendo como resultado a imagem do lado direito. – Operador de Prewitt: Suaviza a imagem, atenuando o ruído; 1 1 1 −1 0 1 Gy = 0 Gx = −1 0 1 0 0 −1 −1 −1 −1 0 1 3.2 Filtragem Espacial 19 A imagem 3.7 ilustra a utilização do operador de Prewitt a uma imagem. Figura 3.7: Exemplo de utilização do operador de Prewitt. Este operador foi aplicado à imagem do lado esquerdo tendo como resultado a imagem do lado direito. – Operador de Sobel: Difere do operador de Prewitt apenas no tocante aos pesos conferidos aos vizinhos mais próximos não nulos do pixel central; −1 0 1 Gx = −2 0 2 −1 0 1 1 2 1 Gy = 0 0 0 −1 −2 −1 A figura 3.8 ilustra a aplicação do operador de Sobel a uma imagem. Figura 3.8: Exemplo de utilização do operador de Sobel. Este operador foi aplicado à imagem do lado esquerdo tendo como resultado a imagem do lado direito. 3.3 Morfologia 3.3 20 Morfologia A Morfologia Matemática (MM) é uma teoria e técnica para a análise e o processamento de estruturas geométricas, baseada em teoria dos conjuntos, topologia,funções randômicas, dentre outros. Os conceitos topológicos e geométricos do espaço contínuo tais como espaço, forma, conectividade, dentre outros, passam a ser caracterizados por MM em espaços discretos ou contínuos. A MM também é base para o processamento morfológico de imagens, que consiste de um conjunto de operadores de transformação de imagens de acordo com determinadas caracterizações. A morfologia de uma imagem refere-se ao contexto de morfologia matemática, na qual a análise morfológica é uma ferramenta para extrair componentes da imagens que são de interesse na representação e descrição de regiões tais como bordas, áreas, etc. Além desta utilidadade, existem técnicas relacionadas à morfologia tais como filtragem, poda, etc. que são de grande interesse no Processamento Digital de Imagens [Gonzalez and Woods 2002]. Inicialmente o processamento morfológico de imagens foi desenvolvidos para imagens binárias e depois estendido para imagens com maior profundidade de bits. A idéia básica da morfologia binária é examinar uma imagem como uma simples e prédeterminada forma, desenhando as conclusões em como esta forma se encaixa ou não na imagem na imagem original. Este elemento examinado é determinado “elemento estruturante” e se caracteriza por ser uma imagem binária. Dentre os procedimentos morfológicos para o processamento digital de imagens, destacam-se a erosão e a dilatação. Várias técnicas de mesmo caráter costumam utilizar tais procedimentos que envolvem erosão, dilatação ou combinações destas duas técnicas. 3.3.1 Dilatação A dilatação é uma operação que “aumenta” ou “diminui” objetos em uma imagem binária [Russ 2007]. A dilatação de uma imagem A por uma imagem B é denotada A ⊕ B e definida por n o b z ∩ A 6= ∅ A ⊕ B = z|(B) (3.2) 3.3 Morfologia 21 em que ∅ é conjunto vazio e B é o elemento estruturante. Tal definição é equivalente a dizer que a dilatação de A por B é o conjunto consistindo de todos os elementos estruturantes originalmente originalmente localizados que foram refletidos e transladados e que sobrepõem, pelo menos, alguma porção de A [Gonzalez and Woods 2001]. A figura 3.9 ilustra esta operação. Figura 3.9: Exemplo de utilização de dilatação. A imagem mais à esquerda é a imagem original. A dilatação foi aplicada com duas intensidades diferentes, de 4 e 8, respectivamente. 3.3.2 Erosão A erosão remove pixels de áreas contínuas em uma imagem. De modo equivalente, “desliga” pixels que estiveram originalmente “ligados”. O objetivo da erosão é remover pixels indesejados em certas regiões. O exemplo mais simples de erosão é a remoção de pixels que, em um processamento anterior, ficaram na imagem mas não são de interesse porque não se localizam em grandes áreas com determinada característica de interesse, o que significa que estes pixel podem ser oriundos de ruído, por exemplo. A figura 3.10 ilustra um exemplo de operação de erosão. A erosão de uma imagem A pelo elemento estruturante B é definida por: A ª B = {z ∈ E|Bz ⊆ A} (3.3) em que Bz é a translação de B sobre o vetor z, isto é Bz = {b + z|b ∈ B}, ∀z ∈ E. Quando o elemento estruturante B possui um centro (por exemplo, um disco ou um quadrado) e o seu centro é localizado na origem E, então a erosão de A por B pode ser compreendida como o conjunto de pontos alcançados pleo centro de B quando este move-se dentro de A. Uma forma alternativa de denotar a erosão de A por B é denotada pela expressão: 3.3 Morfologia 22 Figura 3.10: Exemplo de utilização de erosão. A imagem mais à esquerda é a imagem original. A erosão foi aplicada com duas intensidades diferentes, de 4 e 8, respectivamente. Esta intensidade indica o número de vizinhos levados em consideração. É interessante observar as diferenças entre a imagem original e as diferentes intensidades do procedimento realizado. AªB = \ b∈B A−b . (3.4) Capítulo 4 Processamento Digital de Imagens no Domínio da Freqüência O processamento digital de Imagens no domínio da freqüência refere-se à uma área do processamento digital de imagens que engloba a análise e operações com imagens levando em consideração as variações de valores de intensidade no domínio do espaço. O estudo desta vertente do PDI é de grande interesse pois além de possibilitar uma ampliação no número de técnicas que podem ser empregadas para o processamento de uma imagem, permite a melhor compreensão de conceitos relacionados ao processamento no domínio do espaço. 4.1 Conceito de Freqüência em uma Imagem A saída de uma imagem no espaço transformado pode ser analisada, interpretada e posteriormente processada para a implementação de diversas tarefas do processamento de imagens. Tais transformações são bastante utilizadas, pois a partir dos resultados obtidos, é possível expressar uma imagem como a combinação de um conjunto de sinais básicos, conhecidos como funções básicas. Um domínio de grande interesse é o domínio da freqüência. A representação de imagens neste domínio parte do pressuposto de que qualquer sinal espacial ou temporal possui uma representação equivalente no domínio da freqüência. Considerando uma imagem digital, a freqüência significa a variação sofrida ao longo de uma imagem dos valores associados aos pixels [Rossin 2006]. 23 4.2 Transformada de Fourier no Processamento Digital de Imagens 4.2 24 Transformada de Fourier no Processamento Digital de Imagens A compreensão da formação e análise de sinais bidimensionais, a exemplo de imagens, têm sido possível graças ao advento das várias transformações ortogonais. A transformada de Fourier é uma das ferramentas mais importante e vem sendo amplamente utilizada não somente para a compreensão da natureza de uma imagem e sua formação, mas também no seu processamento. No caso da Transformada de Fourier de uma imagem, os sinais básicos são senóides de diferentes períodos, descrevendo as freqüências espaciais de uma imagem. Isto implica que uma imagem é decomposta em senóides, utilizando a Transformada de Fourier, e as diferentes amplitudes constituem o espectro de freqüências de uma imagem . Assim, dado que uma imagem é um sinal bidimensional no domínio do espaço, a utilização da Transformada de Fourier possibilita a análise desta imagem como um conjunto de senóides em várias direções, onde cada uma delas possui uma freqüência precisa [Acharya and Ray 2005]. Os capítulos 5 e 6 apresentam a Transformada de Fourier Discreta e Rápida, que são utilizadas para o processamento digital de imagens em computadores digitais. Capítulo 5 Transformada de Fourier A Transformada de Fourier é uma importante ferramenta no processamento de sinais utilizada para decompor um sinal em componentes de seno e cosseno. 5.1 Introdução à Transformada de Fourier Seja f (x) uma função contínua de uma variável real x. A transformada de Fourier de f (x) denotada por “F(x)”, é definida pela equação Z ∞ F (u) = onde j = √ f (x) exp−j2πux dx (5.1) −∞ −1 Dado F (u), f (x) pode ser obtida através da transformada inversa de Fourier Z ∞ f (x) = F (u) expj2πux du (5.2) −∞ A variável u que aparece na transformada de Fourier é denominada variável de freqüência. Esse nome deriva da expressão do termo exponencial, exp [−jπ2ux], usando a fórmula de Euler, na forma [Gonzalez and Woods 2001] exp [−j2πux] = cos 2πux − j sin 2πux (5.3) Na imagem 5.1 tem-se uma interpretação geométrica da fórmula de Euler (equação 5.3). Onde ϕ representa o vetor rotativo (fasor). 25 5.2 A Transformada Discreta de Fourier Bidimensional 26 Figura 5.1: Interpretação geométrica da fórmula de Euler. 5.2 A Transformada Discreta de Fourier Bidimensional Como é do nosso interesse apenas a aplicação da transformada em processamento de imagens, nós iremos dar maior ênfase na discussão da Transformada Discreta de Fourier Bidimensional(Discret Fourier Transform – DFT). A DFT é uma amostra da Transformada de Fourier e, portanto, não contém todas as freqüências que formam uma imagem, mas apenas um conjunto de amostras que é grande o suficiente para descrever completamente o domínio espacial da imagem. O número de freqüências corresponde ao número de pixels no domínio espacial da imagem, isso significa que a imagem no domínio do espaço e da freqüência são do mesmo tamanho. F (u, v) = M −1 N −1 −j·2 ux vy 1 XX f (x, y) · exp π ( M + N ) M · N x=0 y=0 f (x, y) = M −1 N −1 X X 2·j F (u, v) · exp π ( ux + vy ) M N (5.4) (5.5) u=0 v=0 Note que f (x, y) é a imagem e é real, mas F (u, v) é a Transformada de Fourier da imagem e geralmente é complexa, isto é F (u, v) = R(u, v) + jI(u, v) (5.6) Onde R(u, v) e I(u, v) são os componentes real e imaginário de F (u, v) respectivamente. Normalmente é conveniente expressar a equação 5.6 na forma exponencial, isto é 5.2 A Transformada Discreta de Fourier Bidimensional F (u, v) =| F (u, v) | expjΦ(u,v) em que | F (u, v) |= p 27 (5.7) R(u, v)2 + I(u, v)2 (5.8) I(u, v) ] R(u, v) (5.9) e Φ(u, v) = tan [ A função magnitude | F (u, v) | é chamada espectro de Fourier de f (x, y) e Φ(u, v) é o ângulo da fase. A magnitude descreve o “quanto” de uma determinada componente de freqüência está presente e a fase descreve “onde” a componente de freqüência está na imagem. 5.2.1 Importância da fase e magnitude A Transformada de Fourier produz como saída uma imagem no domínio da freqüência que pode ser visualizada com duas imagens, ou com as partes real e imaginária, ou com magnitude e fase. Em processamento de imagem geralmente é apresentado apenas a magnitude, uma vez que contém a maior parte da informação geométrica da estrutura da imagem no domínio espacial. No entanto, se queremos re-transformar a imagem no domínio da freqüência em sua correspondente no domínio do espaço corretamente, temos de assegurar a preservação tanto da magnitude quanto da fase da imagem no domínio de Fourier. 5.2.2 Propriedades da Transformada Bidimensional de Fourier Separabilidade A propriedade de separabilidade pode ser descrita como o cálculo de uma transformada ndimensional como uma sucessão de n transformadas unidimensionais. Em se tratando de processamento digital de imagens, é possível restringir para duas dimensões, ou seja, efetuar o cálculo de uma transformada bi-dimensional é equivalente à sucessão de duas transformadas uni-dimensionais. Podemos ilustrar este caso através da seguinte relação: 5.2 A Transformada Discreta de Fourier Bidimensional # " N −1 M −1 2·i·π·wy ·y 2·i·π·wx ·x 1 X 1 X √ F[f (x, y)] ≡ F (wx , wy ) = √ e N f (x, y) · e M n x=0 M y=0 28 (5.10) ou, de modo equivalente: F (wx , wy ) = F[F (x, wy )] (5.11) onde F (x, wy ) denota a transformada unidimensional de f (x, y) sobre a coordenada y, mantendo-se se x fixo. Translação A translação é uma propriedade da transformada de Fourier e possui aplicações em 3 domínios: 1. Translação espacial; 2. Translação em duas dimensões; 3. Translação em freqüência. A translação que nos interessa é a translação em freqüência, pois é de nosso interesse analisar uma imagem no domínio da freqüência. Esta translação é definida por: F[e2·i·π·w0 ·x f (x)] = F (w − w0 ) (5.12) De um modo geral, a translação denota uma rotação. No caso da translação em freqüência denota-se uma rotação de acordo com a freqüência da função em questão. Periodicidade e Simetria Conjugada A periodicidade é decorrente da definição da Transformada de Fourier. A transformada de uma função qualquer é uma função periódica com período N em u e M em v: F (wx , wy ) = F (wx + N, wy ) = F (wx , wy + M ) = F (wx + N, wy ) + F (wx , wy + M (5.13) 5.2 A Transformada Discreta de Fourier Bidimensional 29 Desta propriedade se pode ver que é possível caracterizar uma função no domínio de freqüências completamente, especificando-se os valores dentro destes períodos, N e M . Considerando o caso em que os sinais de f (x, y) são reais, tem-se a propriedade de simetria: |F (wx , y)| = |F (−wx , y)| = |F (wx , −wy )| = |F (−wx , −wy )| Convolução e Correlação (5.14) Capítulo 6 Transformada Rápida de Fourier A transformada rápida de Fourier (Fast Fourier Transform – FFT) é um algoritmo eficiente para computar a Transformada Discreta de Fourier e a sua inversa. A FFT é de grande importância para uma variedade de aplicações, a citar o processamento digital de imagens, a resolução de equações diferenciais parciais e também algoritmos para multiplicação rápida de números inteiros muito grandes. Este capítulo visa conceituar a FFT e apresentar o algoritmo de Cooley-Tukey, que a implementa. 6.1 Definição Através da utilização da Transformada Rápida de Fourier (FFT), a qual tira proveitos de propriedades especiais das raízes complexas de unidade1 , é possível computar a DFT em tempo Θ(n · lgn), em oposição ao tempo Θ(n2 ) utilizado pela DFT [Cormen et al. 2002]. O algoritmo de Cooley-Tukey aqui apresentado segue a estratégia de divisão e conquista, com execução bastante similar à do conhecido algoritmo de ordenação Merge-Sort. A figura bla ilustra como este algoritmo fraciona a entrada em instâncias menores do problema, recombinadas com a utilização de somas, graças à propriedade da similaridade da Transformada de Fourier. 1 Complex roots of unity 30 6.1 Definição 31 ... ... ... ... ... ... ... ... Figura 6.1: Exemplo da estratégia de divisão e conquista implementada pelo algoritmo de Cooley-Tukey. O problema é dividido até chegar no caso base, de tamanho 1, e a partir deste ponto as soluções são recombinadas com a utilização de somas. 6.1.1 Raízes complexas de unidade A n-ésima raiz complexa da unidade é um número complexo ω tal que: ωn = 1 isso significa que existem exatamente n complexos que são raízes da unidade: e (6.1) 2·π·i·k n para k = 0, 1, . . . , n − 1. Para interpretar esta fórmula, basta utilizar a definição do expoente de um número complexo: ei·u = cos(u) + i · sin(u) (6.2) A figura 6.2 mostra as n raízes complexas da unidade. Tais raízes são igualmente espaçadas ao longo de uma circunferência de raio unitário com origem no plano complexo [Cormen et al. 2002]. 6.1.2 A idéia do algoritmo da FFT O algoritmo da FFT emprega a estratégia de divisão e conquista, separando os indíces ímpares e pares dos coeficientes do polinômio A(x) com o intuito de definir os polinômios 6.1 Definição 32 Figura 6.2: Os valores de ω80 , ω81 , . . . , ω87 no plano complexo, onde ω = e 2·i·π 8 é a principal 8a raiz da unidade. A[0](x) e A[1](x) de grau de abrangência n 2 em relação ao polinômio inicial. Ou seja, defi- nimos A[0](x) e A[1](x) da seguinte forma: n A[0](x) = a0 + a2 · x + a4 · x2 + . . . + an−2 · x 2 −1 n A[1](x) = a1 + a3 · x + a5 · x2 + . . . + an−1 · x 2 −1 Observe que A[0] contém todos os coeficientes de índices ímpares (cuja representação binária termina em 0) e A[1] contém todos os coeficientes de índices pares (cuja representação binária termina em 1), de modo que voltamos ao polinômio inicial de modo trivial: A(x) = A[0](x) + A[1](x) (6.3) O problema então passa a ser definido segundo dois aspectos: 1. Aplicar o mesmo procedimento de divisão e conquista para os polinômios A[0](x) e A[1](x) até os casos-base: (ωn0 )2 , (ωn1 )2 , . . . , (ωnn−1 )2 2. Combinar as soluções resultando na equação 6.3 (6.4) 6.2 Algoritmo de Cooley-Tukey 6.2 33 Algoritmo de Cooley-Tukey O algoritmo mais popular para a Transformada Rápida de Fourier é o algoritmo de CooleyTukey [Cooley and Tukey 1965], que utiliza a idéia de divisão e conquista. A origem deste algoritmo é baseada no trabalho proposto Carl Friedrich Gauss por volta de 1805. Para valores ímpares de n, o k-ésimo elemento da Transformada de Fourier é: F[a]k = n−1 X ax z xk x=0 n = −1 2 X ax z xk + n = ax z xk x= n 2 x=0 −1 2 X n X ax z x=0 xk + n X x= n 2 n ax+ n2 z (x+ 2 )k n −1 ³ 2 ´ X kn (lef t) (right) 2 ax + z ax z xk = (6.5) x=0 onde z = eσ i·2·π n e σ = ±1 é o sinal da transformada e k ∈ {0, 1, . . . , n − 1}. Na prática porém, é preciso uma uma definição mais geral que seja abrangente para números pares e ímpares. Deste modo, é possível estender a definição acima. Para tanto, ao invés de considerar k ∈ 0, 1, . . . , n − 1, é necessário utilizar a representação de k dada através da seguinte equação: k =2·j+δ (6.6) onde j ∈ {0, 1, . . . , n2 − 1} e δ ∈ {0, 1}. É importante observar que apesar da representação ser diferenciada, a equivalência com a definição anteriormente proposta é mantida. Assim, a relação 6.5 pode ser expressa da seguinte forma: n−1 X x=0 n ax z x(2·j+δ) = −1 2 X ¡ ¢ x·(2·j+δ) n t) + z (2·j+δ) 2 a(right) z a(lef x x x=0 (6.7) Pn ³ ´ −1 (lef t) (right) 2 x=0 ax + ax z 2·x·j Para δ = 0 ³ ´ = n t) (right) P 2 −1 z x a(lef + ax z 2·x·j Para δ = 1 x x=0 6.2 Algoritmo de Cooley-Tukey onde z = (2 · j + δ) · n 2 34 = e±i·π·δ é igual a mais ou menos um para δ = 0 ou δ = 1, correspondendo aos casos em que k é ímpar ou par. As duas equações resultantes do desenvolvimento da equação 6.7 podem ser escritas de modo compacto, como mostram as equações 6.8 e 6.9: n F[a](pares) = 2 F[a(lef t) + a(right) ] h 1¡ ¢i n F[a](ímpares) = 2 F S 2 a(lef t) + a(right) (6.8) (6.9) O resultado do algoritmo de Cooley-Tukey é idêntico ao da aplicação da Transformada Discreta de Fourier, diferenciando-se deste apenas pelo modo de cálculo para a obtenção dos valores da transformada [Arndt 2006]. Apêndice A Estrutura deste documento 35 Apêndice B Imagens Este apêndice ilustra de forma visual alguns dos conceitos apresentados neste material. A proposta é que por meio deste, a compreensão dos conceitos seja facilitada, visto que são utilizados exemplos visuais e que através deles é possível ter melhor conhecimento do resultado direto da aplicação da técnica e também possibilitar suporte para a decisão de qual técnica é mais adequada para uma dada situação. B.1 Processamento Digital de Imagens no Domínio do Espaço As imagens ilustradas nesta seção referem-se aos exemplos e técnicas ilustradas no capítulo 3. Em alguns casos, a aplicação dos filtros de média, mediana ou moda podem ter efeitos destrutivos na imagem. Um caso comum, é o de imagens que possuem um grande número de tonalidades e com o aumento das dimensões do filtro utilizado, as tonalidades resultantes diferem consideravelmente da inicial. Esta situação é ilustrada na figura B.1. Em situações em que a distribuição de tonalidades em uma imagem é aproximadamente uniforme, os efeitos dos filtros de média, mediana e moda podem ser bastante similares. Esta situação é ilustrada na figura B.2. Os operadores de Roberts, Sobel e Prewitt são de grande interesse na detecção de bordas. De um modo geral, esta é a função destes três operadores, que diferem em termos de como 36 B.1 Processamento Digital de Imagens no Domínio do Espaço 37 esta borda é determinada. Esta característica é ilustrada na figura B.3 A B D E C Figura B.1: A imagem A é a imagem original. As demais correspondem à aplicação do filtro da média de dimensões de 3, 5, 7 e 9, respectivamente. A B C D Figura B.2: A imagem A é a imagem original. As imagens B, C e D correspondem à aplicação dos filtros de média, mediana e moda, respectivamente, de dimensão 3 × 3. B.1 Processamento Digital de Imagens no Domínio do Espaço A B C D 38 Figura B.3: Exemplo de aplicação dos operadores de Roberts (B), Prewitt (C) e Sobel (D) a uma imagem (A). É interessante observar como as bordas da imagem original são acentuadas após a aplicação destes operadores. Bibliografia [Acharya and Ray 2005] Acharya, T. and Ray, A. K. (2005). Image Processing - Principles and Applications. John Wiley & Sons. [Arndt 2006] Arndt, J. (2006). Algorithms for programmers – ideas and source code. [Cooley and Tukey 1965] Cooley, J. W. and Tukey, J. W. (1965). An algorithm for the machine calculation of complex Fourier series. Math. Comput, 19:297–301. [Cormen et al. 2002] Cormen, T. H., Leiserson, C. E., Rivest, R. L., and Stein, C. (2002). Algoritmos - Teoria e Prática. Elsevier. [Cornell University Library 2003] Cornell ving theory into pratice - University digital image Library tutorial. http://www.library.cornell.edu/preservation/tutorial/contents.html. (2003). Disponível Acessado Moem em 10/06/2007. [Deitel and Deitel 2006] Deitel, H. M. and Deitel, P. J. (2006). Java - Como Programar. Pearson. [Gonzalez and Woods 2002] Gonzalez, R. and Woods, P. (2002). Digital Image Processing Using Matlab. Prentice Hall. [Gonzalez and Woods 2001] Gonzalez, R. C. and Woods, R. E. (2001). Digital Image Processing, volume 2. Prentice Hall. [Lyon 1999] Lyon, D. A. (1999). Image Processing in Java. Prentice Hall. [Queiroz and Gomes 2005] Queiroz, J. E. R. and Gomes, H. M. (2005). Introdução ao processamento digital de imagens. In Revista de Informática Teórica e Aplicada. 39 BIBLIOGRAFIA 40 [Rossin 2006] Rossin, P. (2006). Image processing in the frequency domain. Disponível em www.cse.lehigh.edu/˜spletzer. [Russ 2007] Russ, J. C. (2007). The image processing handbook. Taylor & Francis Group. [Santos 2004] Santos, R. (2004). Java advanced imaging api: A tutorial. Rita - Revista de Informática Teórica e Aplicada, 11:93–124. [Sun Microsystems 2008] Sun Microsystems (2008). cation programming interface. Java advanced imaging appli- Disponível em http://java.sun.com/products/java- media/jai/forDevelopers/jai-apidocs/index.html.