Upload
luis-claudio-la
View
164
Download
2
Embed Size (px)
DESCRIPTION
Monografia do Ronie Paulúcio Porfírio onde eu fui um de seus orientadores (com relação ao que envolve matemática).
Citation preview
1
RONIE PAULUCIO PORFIRIO
PROCESSAMENTO DE IMAGENS DE SENSORIAMENTO REMOTO
MULTITEMPORAIS USANDO A TRANSFORMADA RÁPIDA DE FOURIER
FILTRO TEMPORAL
Brasília
2008
Trabalho apresentado ao Centro
Universitário de Brasília (UniCEUB) como
pré-requisito para a obtenção de Certificado
de Conclusão do Curso de Graduação em
Engenharia de Computação. Orientador:
Luis Cláudio Lopes de Araújo.
2
RONIE PAULUCIO PORFIRIO
PROCESSAMENTO DE IMAGENS DE SENSORIAMENTO REMOTO
MULTITEMPORAIS USANDO A TRANSFORMADA RÁPIDA DE FOURIER
FILTRO TEMPORAL
Aprovado pelos membros da banca examinadora em 01/12/2008, com menção ____
(_________________________________________________________________).
Banca Examinadora:
_________________________________
Presidente: Prof. Dr. Luis Cláudio Lopes de Araújo
UniCEUB
_________________________________
Prof. Dr. Jose Roque Magalhaes
UniCEUB
_________________________________
Prof. Dr. Miguel Arcanjo Bacellar Goes Telles Juni
UniCEUB
Monografia apresentada ao Centro
Universitário de Brasília (UNICEUB) como
pré-requisito para a obtenção de Certificado
de Conclusão do Curso de Graduação em
Engenharia de Computação.
3
AGRADECIMENTOS
A Deus, por ter me concedido, através de sua bondade infinita, o potencial de
concretizar mais uma conquista em minha vida.
A toda minha família, em especial aos meus pais, Rommel Ferreira Porfírio e
Aparecida Paulucio Porfirio, pelo esforço na minha formação.
A minhas irmãs Elaine e Érica, pelo carinho e força que me dão.
Ao meu professor e orientador, Luis Cláudio Lopes de Araújo, pelo seu espírito
inovador e empreendedor na tarefa de multiplicar seus conhecimentos e sua presteza e
paciência sempre me direcionando para o caminho correto.
Aos meus co-orientadores Osmar Abílio de Carvalho Júnior e Nilton Correia da
Silva pelo auxílio no conhecimento técnico prestado.
Aos meus amigos do LSIE, em especial Antonio Felipe C. Júnior e José Oniram
A. Limaverde Filho, pelos esclarecimentos e contribuições de informações, sem os quais a
realização deste se tornaria mais árdua.
Aos amigos e colegas, em especial, Cristiano R. Isaac e João A. Romero, pelo
incentivo e momentos de descontração.
E a todos aqueles que direta ou indiretamente contribuíram para a realização deste
trabalho, os meus sinceros agradecimentos.
4
EPÍGRAFE
“De tudo, ficaram três coisas: a certeza de que ele estava sempre começando, a
certeza de que era preciso continuar e a certeza de que seria interrompido antes de terminar.
Fazer da interrupção um caminho novo. Fazer da queda um passo de dança, do medo uma
escada, do sono uma ponte, da procura um encontro.”
Fernando Sabino
5
RESUMO
Introdução. Com o avanço nas tecnologias de sensoriamento remoto e exploração espacial, o
homem tornou-se capaz de produzir diferentes tipos de imagens da superfície desse planeta.
Em especial, quando a imagem de uma determinada porção da superfície terrestre é obtida
periodicamente, produzimos as chamadas imagens de sensoriamento remoto multitemporais.
Essas imagens são de particular interesse, pois remetem a conhecimentos valiosos que ajudam
no entendimento de importantes assuntos como desmatamentos, queimadas dentre muitas
outras questões. Todavia, são raras as imagens multitemporais que possibilitam uma análise e
interpretação imediata em vista da existência de problemas e erros denominados ruídos
provenientes de diversos fatores como nuvens, sombras, etc. A rigor, nuvens e suas sombras
não são ruídos, elas são fenômenos naturais que podem aparecer ou não numa imagem. Mas
como uma imagem multitemporal possui inúmeras bandas, podemos considerá-las ruídos por
modificarem o sinal de forma abrupta. Assim, nesse trabalho, nuvens e sombras serão
considerados a fonte dos erros que se quer tratar.
Objetivo. Dessa forma, o objetivo desse trabalho é remover esse erro desenvolvendo um
software científico para processar essas imagens produzindo uma nova imagem sintética livre
desses ruídos. Pontos onde ocorre a presença de erros serão substituídos por uma informação
que mais se aproxima da realidade de acordo com o filtro empregado.
Método. O método (ou a solução) consiste em aplicar um filtro no domínio da freqüência por
meio do algoritmo da Transformada Rápida de Fourier. Basicamente podemos resumir o
método nos seguintes passos: transformação direta do sinal temporal extraído da imagem,
filtragem no domínio da freqüência e posterior transformação inversa do sinal filtrado de volta
para o domínio do tempo.
Resultado. O resultado é uma ferramenta capaz de remover o erro (proveniente de condições
atmosféricas) de imagens multitemporais. É um programa. Um Software Científico capaz de
filtrar qualquer imagem multitemporal eliminando ruídos.
Conclusões. Essa ferramenta auxiliará cientistas a desenvolver análises e interpretações nesse
tipo de dado de forma prática e rápida.
Palavras-chave: sensoriamento remoto, processamento de imagens, imagens multitemporais,
transformada rápida de Fourier, filtro, domínio do tempo, domínio da freqüência, programa,
algoritmo, software científico.
6
ABSTRACT
The advances in spacial exploration by developing artificial satellites and remote sensors
capable of retrieving valuable data changed the way mankind percept the outer space and our
inner home: The Earth. One of the new accomplished technologies is time remote sensors
images which gather information about a specific area of the planet several days per year.
Analysis and correct interpretation of those images may give us knowledge about some
significant set of issues. For example, they can show us the progress of deforestation in a
specific forest, the cycles between drought and rain seasons and many other questions
depending of the multitemporal image‟s data. Nevertheless, rarely multitemporal images are
in their best shape for correct interpretation to be performed since there are many factors that
may cause problems and errors. These errors are related with weather conditions like clouds,
shadows and many other things that together create what we call image noise. Thus, the main
goal of this piece of work is to process noisy multitemporal images producing new images
noise-removed. The means which we expect to achieve this goal is by performing frequency
filters using the Fast Fourier Transforms algorithm. Basically the process is resumed by three
steps: forward transform of the time domain sign extracted from the image, frequency
filtering followed by the inverse transform of the frequency domain filtered sign. The result
will be a scientific software tool that will produce noise-free steady images ready to yield
valuable knowledge.
Keywords: remote sensing, image processing, multitemporal images, Fast Fourier Transform
(FFT), filter, time domain, frequency domain, program, algorithm, scientific software.
7
Lista de Figuras
Figura 1 – Sinal extraído de uma imagem multitemporal. .................................................................................... 17 Figura 2 – Sinais original (em azul) e final (em vermelho). .................................................................................... 17 Figura 3 – Espectro eletromagnético. Fonte: http://static.howstuffworks.com ................................................... 22 Figura 4 – Eixos coordenados da imagem de sensoriamento remoto. ................................................................. 29 Figura 5 – Banda da imagem e respectivo zoom do quadrante mostrando os pixels. .......................................... 30 Figura 6 – Primeira banda da imagem multitemporal. ......................................................................................... 34 Figura 7 – Representação gráfica de três bandas da imagem multitemporal. ..................................................... 35 Figura 8 – Imagem multitemporal na qualidade de conjunto de imagens. ........................................................... 37 Figura 9 – Representação gráfica: Composição colorida de três bandas da imagem multitemporal. .................. 41 Figura 10 – Cubo representando uma imagem multitemporal. ............................................................................ 44 Figura 11 – Sinal temporal obtido a partir da imagem multitemporal. ................................................................ 45 Figura 12 - Sinal no domínio do tempo. ................................................................................................................. 46 Figura 13 – Sinal no domínio da freqüência. ......................................................................................................... 47 Figura 14 - Sinal contínuo. ..................................................................................................................................... 48 Figura 15 - Sinal discreto. ...................................................................................................................................... 49 Figura 16 – Número complexo na forma retangular. ................................................................................ 50 Figura 17 - Plano cartesiano. ................................................................................................................................. 51 Figura 18 – Magnitude e Fase para N = 4 + 3i. ...................................................................................................... 52 Figura 19 – Representação polar para N = 4 + 3i. ................................................................................................. 52 Figura 20 - Parte Real de um sinal no domínio do tempo...................................................................................... 54 Figura 21 - Parte real de um sinal no domínio da freqüência. ............................................................................... 55 Figura 22 - Parte Imaginária do sinal no domínio do tempo. ................................................................................ 55 Figura 23 - Parte imaginária do sinal no domínio da freqüência. ......................................................................... 56 Figura 24 - A Magnitude ou Espectro do sinal no domínio do tempo. .................................................................. 56 Figura 25 – Magnitude ou Espectro do sinal no domínio da freqüência. .............................................................. 57 Figura 26 - Fase do sinal no domínio do tempo. .................................................................................................... 57 Figura 27 - Fase do sinal no domínio da freqüência. ............................................................................................. 58 Figura 28 - Norma do sinal no domínio do tempo. ................................................................................................ 58 Figura 29 - Norma do sinal no domínio da freqüência. ......................................................................................... 59 Figura 30 - Parte real do sinal no ponto (100,100) da imagem da Figura 8. ........................................................ 60 Figura 31 - Parte real completada com zeros. ....................................................................................................... 60 Figura 32 - Parte imaginária. ................................................................................................................................. 61 Figura 33 – Espectro ou magnitude. ...................................................................................................................... 61 Figura 34 – Fase. .................................................................................................................................................... 61 Figura 35 - Espectro de potência ou norma. .......................................................................................................... 62 Figura 36 - Parte real do sinal transformado para o domínio da freqüência. ....................................................... 62 Figura 37 - Zoom da parte real. ............................................................................................................................. 62 Figura 38 - Parte imaginária. ................................................................................................................................. 63 Figura 39 - Zoom da parte imaginária do sinal. .................................................................................................... 63 Figura 40 - Espectro do sinal.................................................................................................................................. 63 Figura 41 - Zoom do Espectro. ............................................................................................................................... 63 Figura 42 - Fase do sinal. ....................................................................................................................................... 64 Figura 43 - Zoom da fase do sinal. ......................................................................................................................... 64 Figura 44 - Espectro de potência do sinal. ............................................................................................................. 65 Figura 45 - Zoom do espectro de potência. ........................................................................................................... 65 Figura 46 - Retrato de Jean B. J. Fourier ................................................................................................................ 67 Figura 47 - Teoria Analítica do Calor de Jean B. J. Fourier ..................................................................................... 68 Figura 48 – Cubo de uma imagem de sensoriamento remoto multitemporal...................................................... 87 Figura 49 – Sinal temporal discreto extraído da imagem no ponto (100,100). ..................................................... 88 Figura 50 – O sinal temporal foi transformado para o domínio da freqüência. .................................................... 88 Figura 51 –Filtro passa-banda sendo aplicado ao sinal anterior. .......................................................................... 89 Figura 52 – Sinal original (azul) e sinal filtrado (vermelho). .................................................................................. 89 Figura 53 - Fluxograma do processo. .................................................................................................................... 90
8
Figura 54 Imagem multitemporal resposta gerada a partir do filtro que foi aplicado. ........................................ 91 Figura 55 - Banda antes do filtro. .......................................................................................................................... 92 Figura 56 - Banda depois do filtro. ........................................................................................................................ 92 Figura 57 – Filtro passa-alta. ................................................................................................................................. 93 Figura 58 - Filtro passa-baixa. ............................................................................................................................... 94 Figura 59 – Filtro passa-banda. ............................................................................................................................. 95 Figura 60 - Filtro para-banda. ............................................................................................................................... 95 Figura 61- Janela Principal do programa em execução. ...................................................................................... 102 Figura 62 - Menu Arquivo. ................................................................................................................................... 103 Figura 63 - Abrir uma imagem multitemporal. Nesse exemplo abrimos pnsc_ndvi.img. .................................... 103 Figura 64 - Janela Inicial mostrando os dados da imagem escolhida.................................................................. 104 Figura 65 - Menu Visualizar. ................................................................................................................................ 104 Figura 66 - Janela visualizando a banda da imagem carregada. ........................................................................ 105 Figura 67 - Alternando entre as bandas da imagem. .......................................................................................... 105 Figura 68 – Sinal temporal extraído da imagem multitemporal na coordenada escolhida. ............................... 106 Figura 69 - Visualização do filtro, e do sinal no domínio do tempo e da frequência. .......................................... 107 Figura 70 - Janela "Filtro". ................................................................................................................................... 107 Figura 71 – Filtro configurável em tempo real. .................................................................................................. 108 Figura 72 - Após ter definido o filtro, encontramos a opção "Gerar" na janela principal. .................................. 109 Figura 73 - Diálogo pedindo o nome e o local onde a nova imagem resposta será salva. .................................. 109 Figura 74 - A nova imagem está sendo criada. ................................................................................................... 110 Figura 75 - A nova imagem está sendo criada. ................................................................................................... 111 Figura 76 - A nova imagem foi criada com sucesso, ............................................................................................ 111 Figura 77 - Interface principal do Laboratório de Sinais. ..................................................................................... 112 Figura 78 - Interface Gerar Sinais ........................................................................................................................ 115 Figura 79 - Gráfico da Amostra da Exponencial. ................................................................................................. 118 Figura 80 – Parte real da transformada de Fourier da exponencial. ................................................................... 119 Figura 81 - Parte imaginária da transformada de Fourier da exponencial. ........................................................ 119 Figura 82 - Transformada inversa da transformada direta de fourier. ............................................................... 120 Figura 83 - Parte real do sinal cosseno gerado. ................................................................................................... 123 Figura 84 - Espectro (Magnitude) da transformada do sinal. ............................................................................. 123 Figura 85 - Zoom do espectro. ............................................................................................................................. 124 Figura 86 - Fase da transformada. O eixo y foi colocado em graus. ................................................................... 124 Figura 87 - Zoom da fase. .................................................................................................................................... 125 Figura 88 - Sinal exemplo gerado pelo programa. .............................................................................................. 126 Figura 89 - Gráfico do Espectro de Magnitude gerado por outro software. ....................................................... 129 Figura 90 - Gráfico do Espectro de magnitude gerado pelo programa. .............................................................. 129 Figura 91 - Gráfico do espectro de fase gerado por outro software. .................................................................. 130 Figura 92 - Gráfico do Espectro de Fase gerado pelo programa. ........................................................................ 130 Figura 93 - Tela inicial da instalação. .................................................................................................................. 150
9
Sumário
Capítulo 1 Introdução ................................................................................................ 12
1.1 Motivação .................................................................................................................. 13
1.2 Objetivo Geral ............................................................................................................ 13
1.3 Objetivos Específicos .................................................................................................. 13
1.4 Resultados Esperados ................................................................................................. 14
1.5 Estrutura do Trabalho ................................................................................................. 14
Capítulo 2 Apresentação do Problema ....................................................................... 16
Capítulo 3 Imagens de Sensoriamento Remoto Multitemporais .................................. 19
3.1 Sensoriamento Remoto .............................................................................................. 19
3.2 Imagens de Sensoriamento Remoto: Formação ........................................................... 21 3.2.1 A radiação eletromagnética .......................................................................................................... 21 3.2.2 Sensores Remotos ......................................................................................................................... 23 3.2.3 Satélites Artificiais ......................................................................................................................... 24
3.3 Imagens de Sensoriamento Remoto: Características .................................................... 27 3.3.1 Estrutura das Imagens de Sensoriamento Remoto ....................................................................... 28 3.3.2 Resolução das Imagens de Sensoriamento Remoto ...................................................................... 31
3.4 Composição de Imagens de Sensoriamento Remoto .................................................... 33 3.4.1 Dados ou Imagens? ....................................................................................................................... 33 3.4.2 Redefinindo alguns termos ............................................................................................................ 37 3.4.3 Tipo de Imagens de Sensoriamento Remoto................................................................................. 38
3.5 Imagens de Sensoriamento Remoto encontradas nesse trabalho ................................. 40
Capítulo 4 Sinais ........................................................................................................ 43
4.1 O que são Sinais? ........................................................................................................ 43
4.2 Propriedades dos Sinais .............................................................................................. 45 4.2.1 Domínio do Sinal ............................................................................................................................ 45 4.2.2 Periodicidade do Sinal ................................................................................................................... 47 4.2.3 Sinais contínuos versus sinais discretos ........................................................................................ 47
4.3 Classes de sinais ......................................................................................................... 49
4.4 Complexidade do Sinal................................................................................................ 49 4.4.1 Representação de Sinais Complexos ............................................................................................. 53 4.4.2 Um último exemplo ....................................................................................................................... 59
Capítulo 5 Transformadas de Fourier ......................................................................... 66
5.1 Introdução às Transformadas ...................................................................................... 66
5.2 Histórico ..................................................................................................................... 67
5.3 A Análise de Fourier .................................................................................................... 69 5.3.1 Transformada de Fourier de Tempo Contínuo .......................................................................... 71 5.3.2 Discrete Fourier Transform: A Série de Fourier de Tempo Discreto .............................................. 73
5.4 A Transformada Rápida de Fourier (FFT) ............................................................. 76 5.4.1 Histórico ....................................................................................................................................... 76
10
5.4.2 O método ...................................................................................................................................... 76 5.4.3 O Algoritmo ................................................................................................................................... 79
Capítulo 6 Processamento de Imagens de Sensoriamento Remoto Multitemporais ..... 81
6.1 Introdução ao Processamento Digital de Imagens de Sensoriamento Remoto .............. 81
6.2 Formas de Processamento de Imagens ........................................................................ 82
6.3 Razão de se processar imagens de sensoriamento remoto multitemporais .................. 83
Capítulo 7 Procedimento que iremos adotar para processar imagens de sensoriamento remoto multitemporais usando a Transformada Rápida de Fourier .................................. 86
7.1 Procedimento e Processos .......................................................................................... 86
7.2 Os Filtros .................................................................................................................... 93 7.2.1 Filtro Passa-alta ............................................................................................................................. 93 7.2.2 Filtro Passa-baixa ........................................................................................................................... 94 7.2.3 Filtro Passa-banda ......................................................................................................................... 94 7.2.4 Filtro Para-banda ........................................................................................................................... 95
Capítulo 8 Programando o Software Científico ........................................................... 96
8.1 A Linguagem de Programação ..................................................................................... 96
8.2 As Estruturas de Dados ............................................................................................... 97 8.2.1 A classe complex ............................................................................................................................ 97 8.2.2 A classe valarray ............................................................................................................................ 98 8.2.3 Modelando os Sinais ...................................................................................................................... 98
8.3 As bibliotecas de acesso e manipulação de imagens .................................................... 99
8.4 Os Algoritmos Desenvolvidos .................................................................................... 100 8.4.1 Transformadas dos sinais ............................................................................................................ 100 8.4.2 Processamento da Imagem ......................................................................................................... 101
8.5 Processando Imagens Multitemporais ....................................................................... 102
8.6 Laboratório de Sinais ................................................................................................ 112
Capítulo 9 Validando os Resultados ......................................................................... 117
9.1 Primeiro Exemplo: Função Exponencial ..................................................................... 117
9.2 Segundo Exemplo: Função Cosseno ........................................................................... 120
9.3 Terceiro Exemplo: Cosseno e Seno ............................................................................ 125
Capítulo 10 Conclusão ............................................................................................... 134
10.1 Conclusões ............................................................................................................... 134
10.2 Sugestões para trabalhos futuros .............................................................................. 135
Referências ................................................................................................................... 137
APÊNDICE A - Estruturas de Dados ............................................................................ 139
APÊNDICE B - Algoritmos Desenvolvidos: Transformadas .......................................... 140
APÊNDICE C - Algoritmos Desenvolvidos: Processamento .......................................... 145
APÊNDICE D - DVD .................................................................................................... 150
ANEXO A - O Algoritmo da Transformada Rápida de Fourier (FFT) ............................ 153
11
ANEXO B - A Biblioteca TImagem ............................................................................. 156
12
Capítulo 1 Introdução
Os avanços na exploração espacial mudaram a forma como o homem percebe o
espaço que o rodeia seja olhando para fora e maravilhando-se com uma infinidade de
planetas, estrelas e galáxias que habitam o universo ou olhando para dentro e observando esse
pequeno planeta azul que chamamos Planeta Terra. Sem dúvida, muita tecnologia foi
produzida desde que o Sputnik, primeiro satélite artificial, foi lançado alavancando assim a
então corrida espacial até os dias de hoje quando podemos observar nosso planeta na palma de
nossa mão, ou pelo menos, na tela de nosso computador usando diversos softwares de
simulação.
Em especial, quando a imagem de uma determinada porção da superfície terrestre
é obtida periodicamente, produzimos as chamadas imagens de sensoriamento remoto
multitemporais. Essas imagens são de particular interesse quando devidamente analisadas e
corretamente interpretadas porque remetem a conhecimentos valiosos que ajudam no
entendimento de importantes assuntos como desmatamentos, queimadas dentre muitas outras
questões. Todavia, são raras as imagens multitemporais que possibilitam uma análise e
interpretação imediata em vista da existência de problemas e erros denominados ruídos
provenientes de diversos fatores como nuvens, sombras, suspensão de partículas sólidas no ar,
etc.
Dessa forma, esse trabalho se destina a desenvolver uma ferramenta
computacional de processamento de imagens de sensoriamento remoto multitemporais com o
objetivo de corrigir esses problemas e erros. Basicamente, esse processamento consiste em
filtrar imagens multitemporais ruidosas gerando novas imagens eliminando, ou pelo menos,
minimizando esses ruídos. À medida que o leitor avançar na leitura, os conceitos que
permeiam esse trabalho serão explicados e o leitor será conduzido ao entendimento de todo o
13
processo. Se você possuir algum interesse em processamento de imagens, processamento de
sinais e até mesmo sobre sensoriamento remoto, certamente a leitura desse trabalho será
proveitosa.
1.1 Motivação
A principal motivação é desenvolver novas tecnologias aplicando na prática os
conhecimentos alcançados ao longo do curso de Engenharia de Computação. Nesse sentido,
valendo-se dos métodos matemáticos aprendidos durante o curso de engenharia aliados ao
conhecimento das ciências da computação, procurou-se desenvolver novas ferramentas
destinadas à resolução dos mais diversos problemas. Nesse trabalho, os esforços foram
direcionados no sentido de criar uma nova forma de processar imagens.
1.2 Objetivo Geral
O objetivo geral desse trabalho é desenvolver um software científico para
processar imagens de sensoriamento remoto multitemporais usando o método matemático
denominado Transformada de Fourier. Esse método será utilizado para realizar filtragens na
freqüência de sinais extraídos das imagens multitemporais. Essas filtragens darão origem a
novas e melhores imagens.
1.3 Objetivos Específicos
Esse método matemático referenciado no tópico 1.2 acima deu origem a um
método numérico consagrado denominado Transformada Rápida de Fourier. Assim, entender
e adaptar esse método numérico de forma a empregá-lo no processamento de imagens de
sensoriamento remoto multitemporais constitui um primeiro objetivo específico.
14
Além disso, outro objetivo é desenvolver um software científico capaz de usar
essa transformada para processar imagens. Para tanto, será necessário definir as estruturas de
dados necessárias à programação e modelagem computacional do problema e sua solução.
1.4 Resultados Esperados
Espera-se ter desenvolvido (e documentado com essa monografia) uma ferramenta
de tratamento ou processamento de imagens de sensoriamento remoto multitemporais capaz
de filtrar essas imagens minimizando os erros e, assim, porque não dizer corrigindo a
imagem? Espera-se gerar novas imagens a partir das originais passíveis de serem
interpretadas corretamente.
1.5 Estrutura do Trabalho
No Capítulo 2 – “Apresentação do Problema” (p. 16) apresentamos de forma bem
definida qual é o problema que estamos tentando resolver.
No Capítulo 3 – “Imagens de Sensoriamento Remoto” (p.19) mostramos todos os
conceitos e processos relativos à formação de uma imagem de sensoriamento remoto.
Também é aqui que definimos o que é uma imagem de sensoriamento remoto multitemporal.
No Capítulo 4 – “Sinais” (p.43) introduzimos conceitos gerais relativos a sinais e
direcionamos a discussão aos sinais que poderemos extrair de imagens multitemporais.
No Capítulo 5 - "Transformadas de Fourier” (p.66) abordamos esse método
matemático que deu origem ao principal método numérico que assume importância central
nesse trabalho: A Transformada Rápida de Fourier.
No Capítulo 6 – “Processamento de Imagens de Sensoriamento Remoto
Multitemporais” (p.81) introduzimos algumas formas de se processar imagens terminando por
explicar quais as razões de se processar imagens de sensoriamento remoto multitemporais.
15
No Capítulo 7 – “Procedimento que iremos adotar para processar imagens de
sensoriamento remoto multitemporais usando a Transformada Rápida de Fourier” (p.86)
fazemos o que o título desse capítulo informa, ou seja, detalhamos todo o processo escolhido
para se processar nossas imagens.
No Capítulo 8 – “Programando o Software Científico” (p.96) apresentamos as
estruturas de dados utilizadas no software desenvolvido.
No Capítulo 9 – “Validando os Resultados” (p.117) mostramos alguns exemplos
de processamento de sinais controlados para validar a correção do algoritmo usado.
Finalmente, no Capítulo 10 – “ Conclusão” (p.134) terminamos esse trabalho
apresentando nossas conclusões e sugestões para trabalhos futuros.
16
Capítulo 2 Apresentação do Problema
Uma vez que esse trabalho se intitula “Processamento de Imagens de
Sensoriamento Multitemporais usando a Transformada Rápida de Fourier” fica óbvio que o
objetivo desse processamento é resolver algum “problema” na imagem multitemporal.
Como veremos mais detalhadamente no tópico 6.3 – “Razão de se processar
imagens de sensoriamento remoto multitemporais” (p. 83), a razão de processar imagens de
sensoriamento remoto multitemporais é corrigir erros. De fato, esses erros podem ser
provenientes de diversos fatores: nuvens, por exemplo, tanto a formação da nuvem em si
como a sua sombra constituem a principal fonte de erro encontrado em imagens de
sensoriamento remoto multitemporais. A rigor, nuvens e suas respectivas sombras são
fenômenos naturais. Não estaria correto considerá-las fontes de erro. Contudo, em se tratando
de imagens multitemporais que se caracterizam por inúmeras imagens de uma mesma região.
Há de se esperar que nuvens e sombras ocorram em apenas algumas dessas imagens. Assim,
nesse trabalho as nuvens e as sombras serão consideradas o erro fonte de ruídos nos sinais que
queremos remover.
Como veremos no Capítulo 4 – “Sinais” (p. 43), podemos extrair sinais a partir
da imagem multitemporal. Dessa forma, nesses sinais o erro aparece em forma de ruído. A
ilustração a seguir mostra um sinal real extraído de uma imagem de sensoriamento remoto
multitemporal. Os erros ou ruídos foram circulados pelas elipses vermelhas. No eixo y
mostramos o valor do pixel da imagem, no eixo x o tempo.
17
Figura 1 – Sinal extraído de uma imagem multitemporal.
Perceba que as variações bruscas na amplitude (valores do eixo y) constituem o
ruído que estamos descrevendo. Veja que enquanto o sinal percorre o tempo, existem
momentos (circulados de vermelho na ilustração) em que ocorrem variações muito acentuadas
no valor do pixel da imagem (eixo y). Nesses momentos, o sinal sobe e desce ou desce e sobe
muito rapidamente retornando logo depois a um nível relativamente próximo ao nível que ele
estava antes dessa variação. São essas bruscas mudanças que constituem o ruído proveniente
dos erros presentes nas imagens multitemporais.
Na ilustração a seguir, mostramos o mesmo sinal anterior em azul e o sinal
resultante de seu tratamento usando a ferramenta desenvolvida nesse trabalho em vermelho.
Perceba que o sinal vermelho “tenta percorrer o mesmo caminho” que o sinal azul, mas agora
já não há variações súbitas.
Figura 2 – Sinais original (em azul) e final (em vermelho).
Em suma, o problema é o erro que essas imagens apresentam. O objetivo é
remover esse erro. A metodologia é aplicar um filtro no domínio da freqüência. A matemática
18
é a Transformada de Fourier e o algoritmo é o algoritmo da Transformada Rápida de
Fourier. O resultado é uma ferramenta capaz de remover o erro de imagens multitemporais.
19
Capítulo 3 Imagens de Sensoriamento Remoto
Multitemporais
Com a evolução das ciências e da tecnologia, o homem desenvolveu inúmeras
formas de registrar o que pudesse observar. Na antiguidade, os desenhos em cavernas já eram
a forma mais intuitiva de registrar fenômenos considerados importantes. Os chineses possuem
registros do fenômeno da fixação de imagens em quartos escuros desde tempos imemoriais.
Dessa forma, os princípios de captação, registro e representação de fenômenos observáveis
evoluíram na mesma proporção que o homem desenvolvia novas tecnologias. Atualmente, o
homem consegue obter dados sobre os mais diferentes fenômenos observáveis desde imagens
de nanoestruturas passando por imagens de microorganismos, imagens de fotografias tiradas
por máquinas fotográficas comuns, imagens de fotografias aéreas e imagens obtidas por meio
de satélites artificiais. O que todos esses exemplos possuem em comum é que todos obtêm os
dados por meio de um mesmo processo: o sensoriamento remoto.
3.1 Sensoriamento Remoto
Sensoriamento remoto é definido como o processo de adquirir informações sobre
um objeto de interesse sem estar em contato físico com ele. (HAYKIN & VEEN, 2001, p. 27).
De acordo com Florenzano, o termo sensoriamento refere-se à obtenção dos dados, e remoto,
que significa distante, é utilizado porque a obtenção é feita à distância, ou seja, sem o contato
físico entre o sensor e a fonte de dados. No caso, de Imagens de Satélite, essa fonte de dados é
justamente a superfície terrestre que está sendo observada pelo sensor. Haykin e Veen
aproximam o conceito de Sensoriamento Remoto para o universo do Processamento de Sinais
ao mostrar que “[...] a aquisição de informações é realizada detectando-se e medindo-se as
mudanças que o objeto impõe ao campo circunvizinho.” Isso é importante já que mostra que
20
um sinal pode ser extraído de um campo eletromagnético, acústico, magnético ou
gravitacional, dependendo da aplicação de interesse. No caso do sensoriamento remoto feito
por satélites artificiais, estaremos interessados no campo eletromagnético cobrindo o espectro
eletromagnético inteiro.
Haykin e Veen também afirmam que “a aquisição de informações pode ser
realizada de maneira passiva, ouvindo-se o campo (sinal) que é emitido naturalmente pelo
objeto e processando-o; ou de maneira ativa, iluminando-se intencionalmente o objeto com
um campo (sinal) bem-definido e processando-se o eco (isto é, o sinal retornado) do objeto.”
[grifo deles](2001, p. 27). Um exemplo trivial de obtenção ativa de informações é o sistema
de sensoriamento do morcego: o morcego utiliza um sensoriamento remoto ativo medindo as
variações no campo acústico, isto é, ele ilumina intencionalmente o meio ao seu redor
emitindo ondas ultra-sônicas e processa o eco para localizar-se. No que concerne o
sensoriamento remoto de satélites artificiais, o sensoriamento pode ocorrer de forma ativa ou
passiva dependendo do sensor que é utilizado no satélite. Como exemplo de sensoriamento
remoto passivo, podemos citar o sensor eletrônico multiespectral TM do Satélite LANDSAT-
5 que capta dados em diferentes faixas espectrais sendo três da região do visível e quatro da
região do infravermelho. Já em relação ao sensoriamento remoto ativo, sensores denominados
Radares são responsáveis por enviar sinais e processar o eco. Como exemplo, podemos citar o
ASAR (Advanced Synthetic Aperture Radar) que opera abordo do Satélite Artificial
ENVISAT, lançado em 2002. (FLORENZANO, 2002, p. 13)
Não é preocupação, nesse trabalho, aprofundar nesses detalhes. O que nos
interessa é apenas introduzir o conceito de sensoriamento remoto para então poder explicar
como são formadas as Imagens de Satélite: principal dado de entrada e de saída no
processamento que esse trabalho se propõe a fazer. O próximo tópico fará uma breve
descrição do que são e de como são formadas essas imagens.
21
3.2 Imagens de Sensoriamento Remoto: Formação
Teresa Gallotti Florenzano resume o processo de formação de uma Imagem de
Sensoriamento Remoto com o trecho a seguir:
“A energia refletida ou emitida pela superfície terrestre e captada por sensores eletrônicos,
instalados em satélites artificiais, é transformada em sinais elétricos, que são registrados e
transmitidos para estações de recepção na Terra, equipadas com enormes antenas parabólicas.
Os sinais enviados para essas estações são transformados em dados na forma de gráficos,
tabelas ou imagens” [grifo deles]. (FLORENZANO, 2002, p. 10).
Essa forma resumida não nos é interessante já que o processamento depende de
como essas imagens são produzidas pelas estações de recepção dos sinais na Terra. Assim,
iremos nos aprofundar um pouco mais no processo descrito acima. Começaremos
descrevendo o que é essa energia que é refletida ou emitida pela superfície terrestre, falaremos
sobre os sensores que captam e registram as informações e como essas informações são
“empacotadas” pelas estações de recepção na Terra e transformadas em imagem. Veremos
que o termo “imagem” assumirá uma nova conotação muito mais abrangente do que aquela a
que estamos acostumados.
3.2.1 A radiação eletromagnética
Quando nos referimos a energia que é refletida ou emitida pela superfície terrestre
para ser captada e registrada por sensores, estamos na verdade tratando de energia na forma
de radiação eletromagnética. Radiação eletromagnética é toda forma de onda eletromagnética
que se propaga no vácuo à velocidade da luz.
Uma onda eletromagnética possui duas características que a definem. A primeira,
denominada freqüência, estabelece o número de vezes que a onda se repete por unidade de
tempo. A segunda, o comprimento de onda, é a medida da distância entre dois picos de ondas
sucessivas. Essas características da onda são complementares por que estão relacionadas entre
si e a velocidade da luz segundo a equação:
22
(3.1)
Onde,
: velocidade da luz no vácuo;
: comprimento de onda medido em unidades de metro;
: freqüência de oscilação medida em unidades de hertz;
Assim, para cada freqüência teremos um determinado comprimento de onda e
vice-versa.
Como o fator que determina uma onda eletromagnética é a sua freqüência (ou seu
comprimento de onda), cada freqüência possível determina uma onda diferente. Esse conjunto
de ondas eletromagnéticas foi classificado pelo Homem em diversas regiões que juntas
compõe o que chamamos de espectro eletromagnético. A Figura 3 ilustra isso.
Figura 3 – Espectro eletromagnético. Fonte: http://static.howstuffworks.com
Haykin e Veen dizem que:
“O espectro eletromagnético se estende das ondas de rádio de baixa freqüência às regiões de
microondas, submilimétricas, infravermelho, visíveis, ultravioleta, raios-X e raios gama do
espectro” (2001, p. 18)
23
Florenzano complementa afirmando que “[...] na região do espectro visível, o olho
humano enxerga a energia (luz) eletromagnética sendo capaz de distinguir as cores do violeta
ao vermelho” (2002, p. 11).
Dessa forma, as imagens formadas no cérebro do ser humano nada mais são do
que a percepção que o olho humano tem das ondas eletromagnéticas que chegam até ele
compreendidas na região do visível. Assim, a capacidade de perceber o mundo depende da
capacidade do sensor captar e registrar as ondas eletromagnéticas nas freqüências desejáveis.
E é sobre sensores que o próximo tópico tratará.
3.2.2 Sensores Remotos
Como foi mostrado no exemplo do morcego, sensor é qualquer aparato
responsável por captar e registrar mudanças em qualquer um campo. O olho biológico é um
sensor natural que enxerga somente uma determinada região do espectro eletromagnético. No
Homem, essa região limita-se a região da luz visível; em outros animais, ele pode alcançar
outras regiões. Mas o que nos interessa aqui não são os sensores biológicos e sim os sensores
remotos artificiais que, dependendo de suas características, “[...] podem ser instalados em
plataformas terrestres, aéreas (balões, helicópteros e aviões) e orbitais (satélites artificiais)”.
(FLORENZANO, 2002, p. 13).
“Infelizmente, um único sensor sozinho pode cobrir somente uma pequena parte do espectro
eletromagnético, sendo o mecanismo responsável pela interação onda-matéria influenciado por
um número limitado de propriedades físicas do objeto de interesse”. (HAYKIN & VEEN,
2001, p. 28).
Isto mostra que o homem desenvolveu sensores remotos para perceber quase todo
o espectro eletromagnético. Dessa forma, para cobrir uma grande parte do espectro
eletromagnético e obter várias informações diferentes sobre uma determinada região, faz-se
necessário utilizar múltiplos sensores cada qual responsável por coletar informações sobre
uma particular faixa do espectro.
24
Chamamos essa faixa do espectro de canal ou banda1. Assim, podemos ter várias
imagens de sensoriamento remoto de um mesmo local, coletadas no mesmo instante, mas
cada uma pertencente a um canal diferente, isto é, uma determinada faixa do espectro
eletromagnético diferente. Veremos mais adiante, quando discorrermos sobre as
características das imagens de sensoriamento remoto que esse conceito de canal será uma de
várias características de imagens de sensoriamento remoto.
3.2.3 Satélites Artificiais
Continuando nossa introdução, já sabemos que essa energia refletida ou emitida
pela superfície terrestre trata-se, na verdade, de ondas eletromagnéticas. Sabemos também que
são os sensores os responsáveis por registrar essa energia. Assim, para dar continuidade,
abordaremos agora um pouco sobre os Satélites Artificiais que carregam os sensores para
então, finalmente, podermos definir algumas características das imagens de sensoriamento
remoto.
Segundo Florenzano, um satélite é um objeto que se desloca em círculos (elipses),
em torno de outro objeto. Um satélite pode ser natural, como a lua que gira em torno da terra
ou artificial – construído pelo homem(2002, p. 23). Florenzano também cita os diversos tipos
de satélites artificiais: os satélites de comunicações, em maior número, os de televisão, os
científicos, espiões (para fins militares), meteorológicos e de sensoriamento remoto de
recursos terrestres. São esses últimos dois tipos de satélite que nos interessam já que são eles
que irão carregar os sensores responsáveis por coletar os dados a respeito dos recursos da
Terra.
1 Veremos mais adiante que o termo banda vai ganhar outro significado – razão pela qual vamos
preferir o termo canal para referirmos a uma faixa do espectro eletromagnético.
25
3.2.3.1 Satélites Meteorológicos
Podemos citar como exemplos de satélites meteorológicos o GOES
(Geostationary Operational Environmental Satellite) – de órbita geoestacionária2 – e o
NOAA (National Oceanic Atmospheric Administration) – de órbita polar. Como Florenzano
afirma, a órbita é o caminho que o satélite faz em volta da terra. (2002, p. 23). Quando a
órbita é geoestacionária, “o satélite mantém a mesma posição no espaço em relação a um
ponto fixo na superfície, dando a impressão que ele está estacionado no espaço.” (IDEM).
Quando polar, o satélite orbita de um pólo até o outro permitindo observar toda a superfície da
Terra. A título de exemplo, apresenta-se a seguir, informações desses dois satélites citados.
Essas informações foram retiradas do livro de Teresa Gallotti Florenzano (2002, p. 25).
GOES
Satélites da série GOES estão a 36.000 km da superfície da Terra fornecendo imagens a
cada 30 minutos. O sensor a bordo desse satélite opera em um canal visível, com uma
resolução espacial de 1 km e quatro canais no infravermelho, com uma resolução espacial3 de
4 a 8 km.
NOAA
Satélites da série NOAA estão a uma altitude aproximada de 850 km. O sensor
AVHRR (Advanced Very High Resolution Radiometer) que opera a bordo desses satélites
operam em cinco canais fornecendo pelo menos duas imagens por dia da mesma área com
2 Na órbita geoestacionária, o satélite mantém a mesma posição no espaço em relação a um ponto
fixo na superfície, dando a impressão que ele está estacionado no espaço.
3 Diferentes tipos de resolução de imagem serão apresentados no tópico 3.3.2 – “Resolução das
Imagens de Sensoriamento Remoto” p. 31
26
resolução espacial de 1,1 km e cobrem uma área da superfície terrestre de aproximadamente
2500 por 4000 km.
3.2.3.2 Satélites de Recursos Terrestres
“Os satélites de recursos terrestres possuem uma órbita “circular, quase polar e
síncrona com o sol” (FLORENZANO, 2002, p. 25) – isso garante as mesmas condições de
iluminação para a superfície terrestre e a “passagem aproximadamente no mesmo horário
local sobre os diferentes pontos da Terra”. Dentre os vários satélites de sensoriamento remoto
dos recursos terrestres existentes, são dois os satélites que mais se destacam: O LANDSAT
(não é uma sigla), americano, e o SPOT (Satellite pour l'Observation de la Terre) francês. A
seguir, falaremos brevemente a respeito de cada um deles. Essas informações também foram
encontradas em Florenzano (2002, p. 25).
SPOT 5
O SPOT 5 possui órbita circular quase polar e síncrona com o Sol. Dentre os
principais sensores que operam no SPOT estão o HRV (Haute Résolution Visible), que opera
na região do visível com uma resolução espacial de 10 metros e no infravermelho com uma
resolução espacial de 20 metros; o HRVIR (Haute Résolution Visible ET Infra Rouge) com
canais que possibilitam capturar algumas faixas da região do visível e do infravermelho
próximo e médio; dentre outros.
LANDSAT
O LANDSAT é talvez, o mais importante satélite artificial para o Brasil, já que o
país recebe imagens dele desde 1973 através de uma antena da estação de recepção do INPE
(Instituto Nacional de Pesquisas Espaciais), localizada em Cuiabá-MT. Até o momento foram
lançados sete satélites da série LANDSAT, sendo o primeiro deles, o LANDSAT-1, lançado
em julho de 1972 pela NASA (National Aeronautics and Space Administration). A órbita dos
27
satélites da série LANDSAT é circular quase polar síncrona com o sol estando ele(s) a uma
altitude de 705 km.
A bordo do LANDSAT-1,2 e 3 estavam os sensores MSS ( Multiespectral
Scanner System) que operavam em quatro canais, sendo dois na faixa do espectro visível e
dois na faixa do espectro do infravermelho próximo.
Aos LANDSAT-4 e 5, foram adicionados um novo sensor mais avançado a bordo:
o TM (Thematic Mapper) que opera em sete canais sendo três na faixa do visível, um no
infravermelho próximo, dois no infravermelho médio e um no infravermelho termal. A
resolução espacial é de 30 metros (exceto para o canal termal, que é de 120 metros).
Os LANDSAT-1 a 5 citados até agora já ultrapassaram seu tempo de vida
deixando de operar. Em 5 de outubro de 1993, foi lançado o LANDSAT-6 que falhou em
alcançar sua órbita e foi declarado perdido. O LANDSAT-7, lançado em 15 de abril de 1999,
carrega o sensor ETM+ (Enhanced Thematic Mapper Plus) que substituiu o antigo sensor TM.
Esse sensor possui as mesmas configurações que o TM além de um canal pancromático (da
região do visível ao infravermelho próximo) com uma resolução espacial de 15 metros
(exceto o canal termal que possui uma resolução espacial de 60 metros). Ele passa sobre a
mesma superfície a cada 16 dias fornecendo imagens de 185 por 185 km.
3.3 Imagens de Sensoriamento Remoto: Características
Até agora, explicamos introdutoriamente todo o processo pelo qual o Satélite
Artificial, munido de sensores, captura determinadas faixas de ondas eletromagnéticas e as
registra na forma de dados. Esses dados são, depois, processados e podem ser apresentados na
forma de imagens digitais. Dessa forma, o passo seguinte é mostrar algumas características de
uma imagem digital de sensoriamento remoto: a estrutura e a resolução.
28
3.3.1 Estrutura das Imagens de Sensoriamento Remoto
As imagens de sensoriamento remoto fornecidas pelas estações de recepção nada
mais são do que matrizes bidimensionais de números com um número de linhas e colunas
bem definidos. Como afirma Alvaro P. Crósta, elas “são constituídas por um arranjo de
elementos sob a forma de uma malha ou grid” [grifo deles] (1993, p. 23). Cada um desses
elementos, ou seja, cada cela desse grid possui uma localização bem definida em um sistema
de coordenadas do tipo “linha e coluna”. Também podemos representar a localização desse
elemento da imagem em um sistema de coordenadas cartesianas “x e y” onde a abscissa (eixo
x) corresponde à coluna e a ordenada corresponde à linha.
Convencionou-se que a origem do grid, ou seja, a origem desse plano cartesiano
corresponde ao canto superior esquerdo da imagem. Assim, os sentidos de crescimento dos
valores de linha (y) e coluna (x) são de cima para baixo e da esquerda para a direita,
respectivamente.
A Figura 4 ilustra isso com uma imagem gerada a partir de uma imagem de
sensoriamento remoto multitemporal. As cores vistas não são as cores reais, são cores geradas
por computador. Ela mostra o Parque Nacional da Serra da Canastra onde podemos identificar
a Represa de Furnas. Note a orientação dos eixos coordenados.
29
Figura 4 – Eixos coordenados da imagem de sensoriamento remoto. 4
A esse elemento que possui uma localização bem definida damos o nome
de pixel, derivado do inglês, picture element – elemento de imagem. O pixel é o menor ponto
indivisível observável numa imagem de sensoriamento remoto e cada um deles representa
sempre uma área com as mesmas dimensões na superfície terrestre dependendo da resolução
espacial da imagem em questão5. Assim, se uma dada imagem possui, por exemplo, 850 por
850 pixels, e uma resolução espacial de 30 metros, então a área que a imagem representa
possuiria 850x30 metros por 850x30 metros que é igual a 25,5 por 25,5 quilômetros. Dessa
forma, o número de linhas e de colunas de uma imagem representa um quadrante na
superfície terrestre.
4 A imagem multitemporal que gerou a representação gráfica acima se encontra no DVD que
acompanha essa monografia. Consulte o APÊNDICE D -DVD p.150 para maiores informações.
5 Diferentes tipos de resolução de imagem serão apresentados no tópico 3.3.2 – “Resolução das
Imagens de Sensoriamento Remoto” p. 31
30
Na Figura 5 a seguir apresentamos em (a) a oitava banda de uma imagem
multitemporal. Essa banda foi obtida no centésimo sexagésimo primeiro dia do ano 2000.
Possui resolução espacial de 250 metros. Em (b) mostramos um zoom do quadrado visto em
(a). Perceba nesse zoom que cada “quadradinho” da imagem em (b) representa um pixel e,
cada pixel, por sua vez representa uma área da superfície da terra de 250 por 250 metros.
Figura 5 – Banda da imagem e respectivo zoom do quadrante mostrando os pixels.
A cada pixel, está associado um número correspondente ao nível de cinza. Crósta
mostra que:
“[...] esse nível de cinza é conhecido em inglês por DN, de „digital number‟. O DN de uma cela
representa a intensidade da energia eletromagnética (refletida ou emitida) medida pelo sensor
para a área da superfície da Terra correspondente ao tamanho do pixel. Deve ser ressaltado que
o DN de um pixel corresponde sempre à média da intensidade da energia refletida ou emitida
pelos diferentes materiais presentes nesse pixel.” [grifo deles] (1993, p. 23).
Dessa forma, quanto maior for esse número digital, mais próximo do branco é o nível
de cinza indicando maior intensidade de energia eletromagnética refletida ou emitida naquele
pixel. Quanto menor, menor será essa intensidade de energia e, portanto, mais próximo do
preto é o nível de cinza.
31
Colocado em outras palavras, se a média da intensidade da energia refletida ou emitida
pelos diferentes materiais presentes numa determinada área da superfície terrestre (o pixel)
resultar em um número próximo ao zero, mais escuro será o nível de cinza e,
conseqüentemente, podemos aferir que naquela região houve pouca reflexão ou emissão de
ondas eletromagnéticas na faixa do espectro eletromagnético percebida pelo sensor. Se esse
número crescer, mais claro, isto é, mais próximo do branco será o nível de cinza e, assim
descobre-se que naquela região, houve maior reflexão ou emissão de energia.
Um exemplo ajuda a entender esses conceitos. Suponha que tenhamos conosco uma
imagem de uma região hipotética obtida pelo sensor ETM+ do satélite artificial LANDSAT-7
no canal correspondente aos comprimentos de onda eletromagnéticos correspondentes à
região do visível da cor vermelha. Sabendo que a resolução espacial do LANDSAT-7 é de 30
metros, isto é, um pixel na imagem corresponde a uma área terrestre de 30 por 30 metros (ou
900 metros quadrados), digamos que escolhamos ao acaso uma coordenada . Se o
valor DN (ou nível de cinza) do pixel correspondente à coordenada escolhida for zero,
saberemos que naquela área de 900 metros quadrados a média da intensidade de energia
eletromagnética correspondente à cor vermelha será mínima ou nula. Assim, deve haver
muita pouca emissão dessa cor naquela região.
3.3.2 Resolução das Imagens de Sensoriamento Remoto
No exemplo anterior, já mencionamos um tipo de resolução de Imagem de
Sensoriamento Remoto: a resolução espacial. Contudo, existem mais dois tipos de parâmetros
de resolução usados em imagem de Sensoriamento Remoto: a resolução espectral e a
resolução radiométrica.
O primeiro parâmetro, a resolução espacial, é definido “pela capacidade do
sistema sensor em „enxergar‟ objetos na superfície terrestre” [grifo deles] (CRÓSTA, 1993,
p. 25). Para melhor compreender esse conceito, considere o seguinte exemplo: se dizemos que
32
uma imagem possui resolução espacial de 30 metros, isso significa que um pixel daquela
imagem representa, na realidade, um quadro de área de 30 por 30 metros. Assim, quanto
menor for o objeto possível de ser visto, maior é a resolução espacial necessária. Cada sensor
possui uma resolução específica. Os sensores dos satélites artificiais da série LANDSAT, por
exemplo, possuem resoluções espaciais de 15, 30, 60 e 120 metros.
Outro parâmetro de resolução definido é a resolução espectral. A resolução espectral é
um conceito que só se aplica às imagens multiespectrais de sensoriamento remoto. Crósta
define resolução espectral como sendo o “[...] número de bandas espectrais de um sistema
sensor e pela largura do intervalo de comprimento de onda coberto por cada banda.” [grifo
deles] (1993, p. 25). Na prática, como veremos mais adiante no tópico 3.4 – “Composição de
Imagens de Sensoriamento Remoto” - uma imagem pode ser fruto da composição de diversas
outras imagens. E é dessa composição que construímos imagens multiespectrais e imagens
temporais de sensoriamento remoto. Dessa forma, ao lidarmos com imagens multiespectrais,
quanto maior o número de bandas e menor a largura do intervalo de comprimento de ondas,
maior será a resolução espectral daquela imagem. Esse conceito se tornará mais claro no
tópico mencionado.
Por fim, a resolução radiométrica “[...] é dada pelo número de níveis digitais
representando níveis de cinza, usados para expressar os dados coletados [...]” [grifo deles]
(CRÓSTA, 1993, p. 26). Lembre-se que no tópico anterior, quando definimos o DN, não se
estabeleceu uma faixa de possíveis valores que poderiam ser assumidas. Agora podemos
complementar a definição afirmando que essa faixa vai do número zero até o número relativo
à resolução radiométrica do sensor. Assim, se dizemos que uma imagem possui resolução
radiométrica de 10 bits, por exemplo, então estamos afirmando que o conjunto de possíveis
valores que o DN pode assumir estará na faixa de zero a 1024, isso é, de 0 a .
33
Concluindo, esses três parâmetros de resolução informam sobre características da
imagem em si – características essas que serão importantes para se decidir entre uma forma de
processamento ou outra.
3.4 Composição de Imagens de Sensoriamento Remoto
Nos tópicos acima, quando falamos sobre as características de imagens de
sensoriamento remoto, o leitor pode ter notado que essas imagens são diferentes do tipo de
imagem a que estamos acostumados a lidar no cotidiano. Naturalmente, seria esperado que
tivéssemos discutido sobre muitos outros elementos de uma imagem como, por exemplo, as
cores. No entanto, o único elemento discutido que mais se aproximou do conceito de cor foi
quando discorremos sobre aquele número que corresponde a um nível de cinza. Ora! Estamos
acostumados a lidar com imagens muito mais coloridas do que imagens em tons de cinza.
Dessa forma, cabe a pergunta: “E as imagens coloridas? Como são formadas?”. Esse tópico se
destina a separar vários conceitos diferentes inerentes ao termo “imagem” a fim de responder
essa pergunta.
3.4.1 Dados ou Imagens?
O tópico 3.3 – “Imagens de Sensoriamento Remoto: Características” (p.27)
apresenta conceitos relativos às imagens de sensoriamento remoto que servirão de dado de
entrada para o processamento que esse trabalho se propõe a fazer. Entretanto, o termo
“imagem” pode ser usado com o objetivo de referenciar diferentes coisas. Assim, deseja-se
separar os diversos significados que essa palavra pode assumir na direção de evitar quaisquer
confusões. São muitos os sentidos que o termo “imagem” pode assumir, mas de todos eles,
são três o que nos interessam nesse trabalho: dados brutos, representação da realidade e
conjunto de dados.
34
3.4.1.1 Dados Brutos ou Primitivos
O primeiro diz respeito à acepção de dado bruto ou dado primitivo. De fato, as
características formuladas no tópico 3.3 – “Imagens de Sensoriamento Remoto:
Características” (p.27) trabalham no conceito de imagem de sensoriamento remoto como uma
matriz bidimensional de números correspondentes a níveis de cinza. Cada um desses números
é um dado bruto. A imagem em si é um dado bruto.
Na Figura 6 a seguir mostramos a primeira banda da imagem multitemporal que
estamos usando para exemplificar os diferentes conceitos desse capítulo. Essa banda é um
exemplo de dado bruto.
Figura 6 – Primeira banda da imagem multitemporal.
3.4.1.2 Representação Gráfica
O segundo sentido que podemos apresentar para a palavra “imagem” é o de
representação gráfica. Na verdade, esse é o sentido a que estamos mais acostumados no
cotidiano. Diversas imagens de sensoriamento remoto na qualidade de dados brutos podem
ser processadas a fim de se produzir uma representação gráfica daqueles dados. Agora sim
35
poderemos ter imagens coloridas com toda gama de cores que o homem consegue enxergar.
Pinturas, fotografias digitais são todos exemplos de representações gráficas de algum objeto.
Imagem nos sentido de representação gráfica é tudo aquilo que pode ser visto.
Podemos fazer uma representação gráfica de uma imagem na qualidade de dado bruto? Sim.
O produto final poderá ser visto, entretanto não será fácil interpretar e compreender o que está
sendo representado. Por outro lado, podemos também processar um conjunto de imagens na
qualidade de dados brutos com o objetivo de produzir uma representação gráfica melhor
interpretável e, conseqüentemente, mais fácil de ser compreendida. A Figura 7 mostra uma
representação gráfica gerado por computador ao combinarmos três bandas de uma imagem de
sensoriamento remoto multitemporal. Note que as cores foram geradas por computador e,
portanto, não representam a realidade.
Figura 7 – Representação gráfica de três bandas da imagem multitemporal.
O terceiro e último sentido que nos interessa é completamente novo para a maioria
das pessoas e será bastante importante para o desenvolvimento desse trabalho: uma imagem
de sensoriamento remoto pode na verdade se tratar de um conjunto de imagens. Expliquemos:
como vimos no Tópico 3.3.1- “Estrutura das Imagens de Sensoriamento Remoto” (p. 28)
imagens de sensoriamento remoto são constituídas de matrizes bidimensionais de pixels.
36
Essas matrizes são armazenadas no computador na forma de arquivos de computador que
seguem padrões que possibilitem manuseá-las adequadamente. Contudo, em vez de criarmos
um arquivo por imagem gerando, assim, muitos arquivos; muitas vezes é mais cômodo criar
um único arquivo contendo diversas imagens diferentes.
Dessa forma, quando nos referimos a uma imagem de sensoriamento remoto no
sentido de conjunto de imagens, estamos, na realidade, nos referindo a um único arquivo de
computador que armazena, de alguma forma, diversas matrizes bidimensionais – cada uma
correspondendo a uma imagem de sensoriamento remoto com características próprias. Cada
uma dessas imagens que compõe o conjunto passa a ser chamada de “banda” 6 de forma a
evitar confusões. A única característica que deve ser igual para todas as bandas de um
conjunto de imagens é que todas elas possuam o mesmo número de linhas e colunas, isto é,
todas elas representem uma mesma porção, um mesmo quadrante da superfície terrestre.
Assim, um conjunto de imagens pode ser visto como uma matriz tridimensional de números
ou até mesmo um cubo.
Na Figura 8 a seguir mostramos um cubo representando uma imagem de
sensoriamento remoto na qualidade de conjunto de imagens. Essa imagem possui 180 bandas.
O intervalo de tempo entre cada banda é de 16 dias. Isso dá 23 cenas por ano entre os anos de
2000 a 2007.
6 O termo banda será usado, a partir de agora, como representando uma imagem específica dentre
um conjunto de imagens. Veja o tópico 3.4.2 – “Redefinindo alguns termos” p. 38
37
Figura 8 – Imagem multitemporal na qualidade de conjunto de imagens.7
Para concluir, falar em imagens no sentido de conjunto de imagens será
importante já que é a partir daqui que nasceram conceitos como imagem multiespectral e
imagem multitemporal.
3.4.2 Redefinindo alguns termos
Com tantos sentidos possíveis para uma mesma palavra, como saber quando
estamos usando a palavra “imagem” com um ou outro sentido? A forma de fazer isso é
7 A imagem multitemporal que gerou esse Cubo 3D se encontra no DVD que acompanha essa
monografia. Consulte o APÊNDICE D -DVD p.150 para maiores informações.
38
definir, agora, qual termo utilizar para cada sentido possível e passar a usar o termo adequado
daqui para frente. Então a seguir apresentamos uma lista de palavras e os significados que
serão adotados, além de exemplos quando couber.
Imagem: A palavra “imagem” será usada a partir de agora no sentido de
conjunto de bandas.
Banda: Observe que já estamos usando a palavra imagem no sentido acima
exposto. Assim, uma imagem possui várias bandas. Cada banda em si
corresponde a uma matriz bidimensional de números. Esses números
corresponderão a níveis de cinza a menos que algo mais seja dito a respeito da
natureza da banda da imagem.
Canal: O termo canal preserva seu sentido usado no tópico 3.2.2 – “Sensores
Remotos” (p.23). Vale repetir: canal é a faixa do espectro eletromagnético
que foi captada pelo sensor e registrada na forma de uma banda de imagem.
Uma imagem pode possuir mais de uma banda, cada banda da imagem possui
um canal. Várias bandas podem apresentar o mesmo canal, ou terem sido
formadas a partir de canais diferentes.
Representação Gráfica: É o resultado que é obtido a partir do
processamento de uma imagem com a finalidade de apresentar visualmente as
informações contidas numa imagem.
3.4.3 Tipo de Imagens de Sensoriamento Remoto
Recapitulando, uma imagem possui várias bandas. Cada banda possui duas
características: o canal, já explicado; e o tempo. O tempo corresponde à data que aquela banda
de imagem foi formada. Variando-se os canais e o tempo entre cada banda de uma imagem,
surgirão os tipos de imagens de sensoriamento remoto que trataremos a seguir.
39
3.4.3.1 Imagens de Sensoriamento Remoto Multiespectrais
Uma imagem de sensoriamento remoto multiespectral é aquela que possui várias
bandas, cada banda representa uma mesma região da superfície da terra, mas cada uma
pertence a um canal diferente. Aqui, o sensor a bordo do satélite registrou vários canais, cada
canal dando origem a uma banda e esse conjunto de bandas reunidas numa só imagem.
Geralmente, o sensor registra todas essas bandas ao mesmo tempo, isto é, numa mesma
“passada” do satélite. Aqui, cada pixel de cada banda representa uma mesma área da
superfície só que em canais diferentes.
3.4.3.2 Imagens de Sensoriamento Remoto Multitemporais
Uma imagem de sensoriamento remoto multitemporal é aquela que possui várias
bandas, cada banda representa uma mesma região da superfície da Terra, mas cada uma
pertence a um tempo diferente. Todas as bandas podem pertencer ao mesmo canal, a canais
diferentes ou, ainda, a combinações de canais diferentes. Aqui, o importante é cada pixel de
cada banda representar uma mesma área na superfície terrestre só que em tempos diferentes.
Nesse trabalho, daremos atenção a esse tipo de imagem de sensoriamento remoto,
pois essa será a fonte dos sinais de entrada que serão processados usando a transformada
rápida de Fourier.
Uma imagem de sensoriamente remoto multitemporal pode ser vista como uma
matriz tridimensional de números. Assim, cada elemento dessa matriz possui uma coordenada
no espaço tridimensional .
A coordenada refere-se ao número da banda. Por exemplo, se uma imagem
possui „10‟ bandas, o eixo z deverá variar discretamente nos números inteiros assumindo
valores de „0‟ até „9‟. A banda „0‟ correspondendo à primeira imagem, a banda „1‟ à segunda
e assim por diante.
40
Decerto, mantendo-se um valor constante para , por exemplo, mantendo-se
, ao variarmos as demais coordenadas restantes estaremos percorrendo uma banda
específica da imagem. Do mesmo modo, se mantermos um ponto constante, por
exemplo, e variarmos a coordenada estaremos percorrendo várias bandas da
imagem sempre num mesmo pixel, isto é, cada valor associado a cada elemento
nos dará uma informação a respeito daquela área da superfície terrestre em tempos diferentes.
Em suma, os eixos x e y são eixos espaciais e o eixo z, um eixo temporal. É
importante deixar esses conceitos bem claros, pois os mesmos serão importantes no Capítulo
6 – “Processamento de Imagens de Sensoriamento Remoto Multitemporais” (p. 81) quando
formos mostrar o procedimento que iremos adotar para processar esse tipo de imagem.
O próximo capítulo vai apresentar alguns conceitos a respeito dos sinais que
podemos extrair a partir de imagens de sensoriamento remoto multitemporais.
3.5 Imagens de Sensoriamento Remoto encontradas nesse
trabalho
Faltou apenas apresentarmos informações sobre as duas imagens de
sensoriamento remoto multitemporais que vimos até agora e servirão de exemplo para os
diversos conceitos introduzidos nesse trabalho. Esse tópico se destina a passar algumas
informações sobre essas imagens.
A primeira imagem multitemporal já foi ilustrada na Figura 4 (p.29) e foi usada
para exemplificar diversos conceitos até o momento. Como já foi mencionado na primeira vez
que essa imagem foi apresentada, trata-se de uma imagem multitemporal onde podemos
visualizar a represa de Furnas e, mais acima, a região do Parque Nacional da Serra da
Canastra.
41
A segunda imagem multitemporal também já foi apresentada pelo menos uma vez
quando exemplificamos uma imagem na qualidade de conjunto de imagens na Figura 8 (p.37).
Trata-se de uma imagem onde podemos identificar a região conhecida como Campo de
Instrução de Formosa – Goiás. Na ilustração a seguir, mostramos uma composição colorida
entre algumas bandas dessa imagem onde colocamos algumas referenciais para que o leitor
possa entender que região ela retrata.
Figura 9 – Representação gráfica: Composição colorida de três bandas da imagem multitemporal.
42
Na Figura 9, como foi dito, o círculo vermelho é a região conhecida como Campo
de Instrução de Formosa – Goiás. Também podemos visualizar parte da região leste do
Distrito Federal à esquerda desse Campo de Instrução.
O que essas duas imagens multitemporais têm em comum é que ambas se
originam do mesmo sensor chamado sensor MODIS: O sensor Moderate Resolution Imaging
Spectroradiometer (MODIS) é um espectroradiômetro com 36 bandas abrangendo as
radiações do visível e do infravermelho, permitindo a obtenção de dados relacionados à
vegetação, cobertura terrestre, nuvens e aerossóis, incidência de fogo, neve e cobertura de
gelo no mar. Este sensor está a bordo das plataformas Terra e Aqua, lançadas,
respectivamente, em 1999 e 2002. As imagens deste sensor permitem o monitoramento da
cobertura global quase em tempo real, possuindo as seguintes resoluções: espacial (250, 500 e
1000m), espectral (545 a 14385 nm) e temporal (de 1 a 2 dias) (JUSTICE & TOWNSHEND,
2002)
Dentre os produtos MODIS disponíveis, encontram-se os índices de vegetação
NDVI (Normalized Difference Vegetation Index) e EVI (Enhanced Vegetation Index)
gerados automaticamente e disponibilizados na forma de mosaicos. Esses índices estão
correlacionados com parâmetros biofísicos da vegetação, possibilitando a estimativa de
parâmetros como: índice de área foliar, biomassa vegetal, produtividade e atividade
fotossintética. (JUSTICE & TOWNSHEND, 2002).
Nesse trabalho, as duas imagens anteriormente descritas são ambas do tipo NDVI
e o intervalo de tempo entre cada banda é de 16 dias.
43
Capítulo 4 Sinais
O forte desse trabalho recai no processamento dos sinais que são extraídos das
imagens de sensoriamento remoto multitemporais. Dessa forma é importante definir o que é
um sinal e quais são suas propriedades. Então, vamos fazer uma breve descrição dos aspectos
teóricos relativos a sinais para então poder prosseguir e mostrar como processar sinais usando
a transformada de Fourier.
4.1 O que são Sinais?
Estamos cercados de sinais. Realmente, como afirmam Haykin e Veen, os sinais
constituem um ingrediente básico de nossa vida diária. Nos comunicamos através de sinais da
fala, percebemos o mundo através de sinais visuais de objetos que nos cercam. Enfim, a
primeira sensação que temos é que toda forma de informação com as quais percebemos o
mundo constituem sinais. Assim, procurando uma forma mais formal de definir o que é um
sinal, vamos citar a definição expressa por Haykin e Veen:
“Um sinal é formalmente definido como uma função de uma ou mais variáveis, a qual veicula
informações sobre a natureza de um fenômeno físico.”(2001, p. 22)
Haykin e Veen ainda completam essa definição dizendo que se essa função
depende de uma única variável, diz-se que o sinal é unidimensional e quando depende de
duas ou mais variáveis, diz-se que o sinal é multidimensional.
Dessa forma, uma imagem de sensoriamento remoto multitemporal pode ser
percebida como um sinal multidimensional – tridimensional especificamente. As coordenadas
horizontais e verticais, eixos e , constituem as duas dimensões espaciais enquanto o eixo z
constitui a dimensão temporal. De certo, podemos extrair sinais unidimensionais desse sinal
tridimensional: tudo o que temos que fazer é fixar um ponto e percorrer o eixo z e
assim obteremos um sinal unidimensional temporal.
44
Na Figura 10 a seguir mostramos um cubo 3D na qual adicionamos os eixos
coordenados e . Adicionamos também o eixo relativo às bandas da imagem e um eixo
auxiliar que perpassa a imagem através do ponto .
Figura 10 – Cubo representando uma imagem multitemporal.
Dessa forma, fixando-se um ponto e variando-se o eixo z‟, podemos
montar um sinal como ilustrado na Figura 11 a seguir. Nessa figura, o eixo z‟ aparece como o
eixo x representando as 165 bandas que essa imagem multitemporal possui. No eixo y, temos
o valor do nível de cinza do pixel .
45
Figura 11 – Sinal temporal obtido a partir da imagem multitemporal.
Resumindo, uma imagem de sensoriamento remoto multitemporal pode ser
encarado como um conjunto de sinais unidimensionais cujas amplitudes (os DNs) variam com
o tempo. Isso é muito importante pois podemos processar a imagem multitemporal inteira
processando separadamente cada um de seus sinais unidimensionais.
4.2 Propriedades dos Sinais
Um sinal possui três principais atributos que nos interessam nesse trabalho. A
partir desses atributos vamos definir classes de sinais e então poderemos restringir nosso
trabalho a preocupar-se com apenas uma dessas classes. O primeiro atributo é o domínio do
sinal. O segundo trata da periodicidade dele e o terceiro, da continuidade ou não desse sinal.
A seguir, introduzimos cada um desses casos separadamente.
4.2.1 Domínio do Sinal
Um processo físico pode ser descrito tanto no domínio do tempo pelos valores de
alguma quantidade quanto no domínio da freqüência especificando, para cada freqüência
uma amplitude (geralmente um número complexo que indica, também, a fase). (PRESS,
TEUKOLSKY, VETTERLING, & FLANNERY, 1992, p. 496).
Na definição de Haykin e Veen “um sinal é formalmente definido como uma
função” [grifo nosso] (2001). Mas não uma função qualquer, uma função na “qual veicula
46
informações sobre a natureza de um fenômeno físico” [grifo nosso] (2001). Assim, o
domínio representa a grandeza física (tempo, espaço, frequência) que é usada para medir a
informação.
Os sinais encontrados no processamento de imagens de sensoriamento remoto
multitemporais estão todos nos domínio do tempo. A transformada de Fourier será
responsável por transformar esses sinal do domínio do tempo para o domínio da frequência
(ou domínio de fourier) e vice versa.
A Figura 12 mostra um sinal no domínio do tempo. O eixo x representa as bandas.
Como cada banda está num tempo diferente, o sinal se encontra no domínio do tempo.
Figura 12 - Sinal no domínio do tempo.
Já na próxima ilustração apresentamos um sinal no domínio da freqüência. O eixo
x está no domínio da freqüência. O eixo y são os valores dos componentes de freqüência do
sinal, no Capítulo 4 veremos que esses valores serão os espectros de magnitude do mesmo.8
8 Isso será apresentado no tópico 4.4.1 “Representação de Sinais Complexos” (p.53).
47
Figura 13 – Sinal no domínio da freqüência.
4.2.2 Periodicidade do Sinal
Um sinal pode ser periódico ou não periódico. Um sinal é dito periódico quando
ele apresenta um comportamento que se repete à medida que avançamos em seu domínio.
Haykin e Veen definem um sinal temporal periódico como uma função que satisfaz a
condição , onde é a função que representa o sinal, é a variável de
tempo independente e é uma constante positiva. Assim, qualquer sinal para o qual não haja
nenhum valor de que satisfaça essa condição é chamada de sinal não-periódico ou sinal
aperiódico.
Não existe nenhuma certeza quanto à periodicidade dos sinais que poderemos
encontrar nesse projeto. Dessa forma, veremos no Tópico 5.3.2 – “Discrete Fourier
Transform: A Série de Fourier de Tempo Discreto” (p.73) que não importa se os sinais serão
periódicos ou aperiódicos. Para usar o algoritmo da transformada rápida de Fourier trataremos
todos os sinais como se fossem periódicos.
4.2.3 Sinais contínuos versus sinais discretos
Um sinal é contínuo se ele é definido para todos os valores que pode
assumir. Se um sinal possui o domínio do tempo , por exemplo, então ele será um sinal
de tempo contínuo se ele for definido para todo tempo . Estamos muito mais habituados com
48
sinais expressos no domínio do tempo, mas também podemos ter sinais expressos em outros
domínios, como o da freqüência. Se um sinal possui o domínio da freqüência então ele
será um sinal de freqüência continua, se ele for definido para toda freqüência . Mostrar esses
casos em domínios diferentes é importante porque veremos que os sinais podem ser
convertidos de um domínio para o outro e isso será importante para aplicar os filtros nesse
trabalho.
A figura a seguir ilustra um sinal contínuo.
Figura 14 - Sinal contínuo.
Por outro lado, um sinal é discreto só é definido em instantes isolados da variável
de seu domínio. Isto é, a variável independente terá somente valores discretos, os quais no
geral são uniformemente espaçados. Freqüentemente, podemos gerar sinais discretos a partir
de sinais contínuos. Esse processo, chamado de amostragem, consiste em obter os valores de
um sinal contínuo a uma taxa uniforme. Contudo, vale observar que nem todo sinal discreto é
uma amostragem de um sinal contínuo.
Ilustramos um sinal discreto com a seguinte figura:
49
Figura 15 - Sinal discreto.
Vale informar que os sinais que lidamos no processamento de imagens
multitemporais são sinais discretos.
4.3 Classes de sinais
A partir dessas três propriedades listadas no tópico anterior pode-se, portanto,
classificar um sinal em quatro classes distintas. São elas: sinais periódicos de domínio
contínuo, sinas não periódicos de domínio contínuo, sinais periódicos de domínio discreto e
sinais não periódicos de domínio discreto.
4.4 Complexidade do Sinal
A última coisa importante que falta dizer sobre sinais é de sua complexidade. Não
complexidade no sentido de o quão complicado ele pode ser, complexidade aqui se refere à
possibilidade de representar cada elemento do sinal por um número complexo.
Um número complexo é definido como um número do tipo:
(4.1)
50
Onde, é o número imaginário tal que . Dessa forma, um número complexo possui
uma parte real ( ) e uma parte imaginária ( ).
Podemos representar um número complexo de duas formas distintas: a primeira é
denominada forma retangular e a segunda, a forma polar.
A forma retangular tem esse nome porque representamos o número complexo
como vetores em um diagrama de coordenadas cartesianas. No eixo das abscissas marcamos
um ponto correspondente à parte real do número e no eixo das ordenadas, a parte imaginária.
Assim, teremos dois vetores que representarão o número complexo. No exemplo ilustrado a
seguir, mostramos a representação retangular para o número complexo
(4.2)
Figura 16 – Número complexo na forma retangular.
Outra forma de representar um número complexo é usando a forma polar de
representação. Nessa forma transformamos a parte real e imaginária do número complexo em
dois elementos chamados magnitude e ângulo de fase (ou simplesmente fase).
Considere o número onde representa a parte real e a
parte imaginária do número complexo:
51
Figura 17 - Plano cartesiano.
Definimos por magnitude ( ) o módulo do vetor que é formado ligando-se a
origem do diagrama cartesiano ao ponto que se obtêm traçando paralelas aos eixos
perpendiculares aos pontos correspondentes a parte real e imaginária. Matematicamente, a
magnitude é expressa pela fórmula:
(4.3)
A fase é definida como o ângulo entre o eixo das abscissas e o vetor
correspondente á magnitude. Matematicamente:
( 4.4)
Assim, com a par Magnitude e Fase podemos representar o número complexo
como um único vetor de módulo (ou cumprimento) igual à magnitude inclinado em relação à
horizontal de um ângulo igual à fase.
52
Figura 18 – Magnitude e Fase para N = 4 + 3i.
Figura 19 – Representação polar para N = 4 + 3i.
No caso de sinais extraídos de imagens multitemporais, não faria sentido
representar cada pixel por um número complexo visto que tratamos apenas de números reais.
Mas como veremos no Capítulo 5 “Transformadas de Fourier” (p. 66) a transformada de
Fourier de um sinal qualquer age sobre um sinal complexo retornando outro sinal, também,
complexo. Assim, para trabalharmos corretamente no domínio da freqüência, vamos precisar
usar números complexos para representar esses sinais.
Dessa forma, é conveniente trabalhar usando números complexos também no
domínio do tempo. Como fazer isso? Simples: toda vez que quisermos trabalhar com um sinal
complexo como se ele fosse real, copiamos os valores reais para a parte real do elemento
complexo e zeramos a parte imaginária desse elemento.
Resumindo, os sinais que adotaremos serão sinais formados por elementos
complexos por causa da transformada de Fourier.
53
4.4.1 Representação de Sinais Complexos
Até agora, as representações que temos feito para os sinais consistia de um
diagrama mostrando um gráfico x e y. Quando o domínio do sinal expresso era o domínio do
tempo, estávamos lidando com um Sinal Real (não complexo) onde o eixo das abscissas era o
tempo e o eixo das ordenadas era o valor do pixel de cada banda da imagem.
Por outro lado, quando o domínio do sinal era o domínio da freqüência, nada foi
dito sobre o significado do eixo das ordenadas. Qual o significado do eixo y num sinal que se
encontra no domínio de Fourier? De fato, a resposta para essa questão tem haver sobre como
representar um Sinal Complexo em um diagrama bidimensional.
Veremos no capítulo seguinte: Capítulo 5 – “Transformadas de Fourier” (p.66)
que as transformadas de Fourier agem sobre sinais complexos retornando outros sinais
complexos. Como já sabemos, sinais complexos possuem, para cada elemento do sinal, uma
parte real e uma parte imaginária. Então, como representar um sinal complexo em um
gráfico?
Nesse trabalho, trabalhamos com cinco formas distintas de representar um sinal
complexo: só a parte real, só a parte imaginária, a magnitude (ou espectro), a fase e a norma
(ou espectro de potência). Cada uma será discutida e ilustrada a seguir.
4.4.1.1 Parte Real
Representar um sinal complexo mostrando só a parte real consiste em desprezar a
parte imaginária do sinal e usar o eixo y para mostrar apenas a parte real. A ilustração a seguir
54
mostra um sinal temporal discreto na forma de um cosseno de tamanho igual a 64, período
igual a 32 unidades de tempo e fase igual a 45 graus9. A função geradora desse sinal é:
(4.5)
Variamos de 0 até 63 de uma em uma unidade na função anterior obtendo o sinal
complexo representado na Figura 20 que usaremos nas próximas seções para exemplificar
cada uma dessas cinco formas de representar sinais complexos. Veja que a Figura 20 já ilustra
a primeira forma: representa-se o sinal mostrando apenas a parte real do mesmo.
Figura 20 - Parte Real de um sinal no domínio do tempo.
Obviamente que essa forma de representar sinais complexos só será usada quando
a parte imaginária for desprezível. Isso ocorre, por exemplo, quando precisamos representar
sinais complexos no domínio do tempo. Quando, o sinal complexo está no domínio da
freqüência, entretanto, a parte imaginária não pode ser desprezada, assim não é adequado
representá-la mostrando apenas seus valores reais. De qualquer forma, na ilustração a seguir
mostramos a transformada direta de Fourier do sinal temporal da ilustração anterior
visualizando apenas as componentes reais do sinal complexo.
9 Esse sinal nomeado “cosseno32_64_p4.ini” se encontra no DVD que acompanha essa
monografia. Consulte o APÊNDICE D -DVD p.150 para maiores informações.
<Real> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[0](0
,000
00)
[6](6
,000
00)
[13](1
3,0
0000)
[21](2
1,0
0000)
[29](2
9,0
0000)
[37](3
7,0
0000)
[45](4
5,0
0000)
[53](5
3,0
0000)
[61](6
1,0
0000)
Eix
o y
1
0,5
0
-0,5
-1
55
Figura 21 - Parte real de um sinal no domínio da freqüência.
4.4.1.2 Parte Imaginária
Também podemos usar o diagrama para representar no eixo das ordenadas
somente a parte imaginária do sinal complexo. Isso não é muito utilizado porque quando
estamos interessados na parte imaginária, também estamos interessados na parte real e,
portanto, utilizamos outras formas de representar o sinal complexo como a representação
por magnitude e a representação pela norma do elemento complexo. Mesmo assim, somente
como forma de ilustrar, apresenta-se a seguir a parte imaginária do sinal temporal da Figura
20. Veja que todos os valores são nulos!
Figura 22 - Parte Imaginária do sinal no domínio do tempo.
Como era de se esperar, o sinal temporal é um sinal real. Não existe, portanto,
componentes imaginários. Por outro lado, se o sinal temporal é transformado para o domínio
da freqüência usando a transformada de Fourier, aparecerão componentes imaginários mesmo
que iguais a zero que não podem ser desprezados. Na Figura 23 a seguir elucidamos com uma
figura.
<Real> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[-32](0
,00000
)
[-24](8
,00000
)
[-16](1
6,0
000
0)
[-8](2
4,0
0000
)
[0](3
2,0
0000)
[7](3
9,0
0000)
[15](4
7,0
0000)
[23](5
5,0
0000)
[31](6
3,0
0000)
Eix
o y
0,35
0,3
0,25
0,2
0,15
0,1
0,05
0
<Imag> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[0](0
,000
00)
[6](6
,000
00)
[13](1
3,0
0000)
[21](2
1,0
0000)
[29](2
9,0
0000)
[37](3
7,0
0000)
[45](4
5,0
0000)
[53](5
3,0
0000)
[61](6
1,0
0000)
Eix
o y
0
56
Figura 23 - Parte imaginária do sinal no domínio da freqüência.
4.4.1.3 Magnitude ou Espectro
Continuando, uma terceira forma de representar sinais complexos é usando a
Magnitude ou Espectro de cada número complexo que forma o sinal. Estamos falando da
mesma magnitude apresentada na Equação (4.3), só que em se tratando de processamento de
imagens, o termo “Espectro” é mais utilizado.
Em relação a sinais temporais, representá-los usando o Espectro não é adequado
pelo fato de sinais temporais possuírem a parte imaginária nula. Assim, a transformação de
um elemento do sinal temporal para o Espectro acaba fazendo com que todos os valores
negativos sejam transformados em positivos “rebatendo” a parte negativa do sinal para a parte
positiva.
A Figura 24 mostra o sinal temporal da Figura 20 representada usando a
magnitude. Perceba que se trata de uma cópia do sinal real com a parte negativa espelhada em
relação ao eixo x.
Figura 24 - A Magnitude ou Espectro do sinal no domínio do tempo.
<Imag> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[-32](0
,00000
)
[-24](8
,00000
)
[-16](1
6,0
000
0)
[-8](2
4,0
0000
)
[0](3
2,0
0000)
[7](3
9,0
0000)
[15](4
7,0
0000)
[23](5
5,0
0000)
[31](6
3,0
0000)
Eix
o y
0,3
0,2
0,1
0
-0,1
-0,2
-0,3
<Espectro> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[0](0
,000
00)
[6](6
,000
00)
[13](1
3,0
0000)
[21](2
1,0
0000)
[29](2
9,0
0000)
[37](3
7,0
0000)
[45](4
5,0
0000)
[53](5
3,0
0000)
[61](6
1,0
0000)
Eix
o y
1
0,8
0,6
0,4
0,2
0
57
Essa forma de representação é bem melhor empregada se utilizada para
representar sinais complexos no domínio da freqüência porque para calcular o valor da
magnitude utilizamos as duas partes do número complexo (a parte real e imaginária). Aliado a
esse fato, tornou-se prática comum representar sinais no domínio da freqüência dessa forma.
A Figura 25 mostra o sinal no domínio da freqüência representado usando a Magnitude ou
Espectro.
Figura 25 – Magnitude ou Espectro do sinal no domínio da freqüência.
4.4.1.4 Fase
Continuando as formas de representação, uma quarta forma de representar sinais
complexos é optando-se por ver o valor da fase do sinal no eixo y. A fase de um elemento é
obtida usando a Equação ( 4.4).
Novamente, representar a fase de sinais temporais não é interessante já que, como
a parte imaginária dos elementos desse sinal são todas nulas, também serão as fases. A Figura
26 elucida isso.
Figura 26 - Fase do sinal no domínio do tempo.
<Espectro> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[-32](0
,00000
)
[-24](8
,00000
)
[-16](1
6,0
000
0)
[-8](2
4,0
0000
)
[0](3
2,0
0000)
[7](3
9,0
0000)
[14](4
6,0
0000)
[22](5
4,0
0000)
[30](6
2,0
0000)
Eix
o y
0,5
0,4
0,3
0,2
0,1
0
<Fase> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[0](0
,000
00)
[6](6
,000
00)
[13](1
3,0
0000)
[21](2
1,0
0000)
[29](2
9,0
0000)
[37](3
7,0
0000)
[45](4
5,0
0000)
[53](5
3,0
0000)
[61](6
1,0
0000)
Eix
o y
0
58
Agora, novamente, em se tratando de sinais no domínio da freqüência, mostrar as
diversas fases de cada elemento do sinal faz mais sentido. A Figura 27 mostra a fase do sinal
no domínio da freqüência.
Figura 27 - Fase do sinal no domínio da freqüência.
4.4.1.5 Norma ou Espectro de Potência
Finalmente, uma última forma de representar um sinal complexo é usando a
Norma ou Espectro de Potência. A norma de um número complexo é dada por:
(4.6)
Novamente, a norma de um sinal temporal não é interessante por motivos
semelhantes aos do espectro de sinais temporais. A Figura 28 mostra a norma do sinal.
Figura 28 - Norma do sinal no domínio do tempo.
Quanto a sinais no domínio da freqüência, a norma pode ser tão interessante
quanto a magnitude dependendo da aplicação. Mas, em se tratando de processamento de
<Fase> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[-32](0
,00000
)
[-24](8
,00000
)
[-16](1
6,0
000
0)
[-8](2
4,0
0000
)
[0](3
2,0
0000)
[7](3
9,0
0000)
[15](4
7,0
0000)
[23](5
5,0
0000)
[31](6
3,0
0000)
Eix
o y
40
20
0
-20
-40
<Pow er> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[0](0
,000
00)
[6](6
,000
00)
[13](1
3,0
0000)
[21](2
1,0
0000)
[29](2
9,0
0000)
[37](3
7,0
0000)
[45](4
5,0
0000)
[53](5
3,0
0000)
[61](6
1,0
0000)
Eix
o y
1
0,8
0,6
0,4
0,2
0
59
imagens de sensoriamento remoto multitemporais, iremos preferir a representação por
magnitude em vez da representação por espectro de potência (ou norma).
A Figura 29 mostra a norma do mesmo sinal no domínio da freqüência usado em
todos os exemplos.
Figura 29 - Norma do sinal no domínio da freqüência.
Resumindo, sinais no domínio do tempo são melhores representados mostrando
apenas a parte real de seus elementos. Sinais no domínio da freqüência são melhores
representados usando a magnitude e a fase dos mesmos. Essas duas práticas de representação
serão adotadas deste ponto em diante a menos que declaremos explicitamente que estamos
usando alguma outra representação para os sinais que estamos mostrando.
4.4.2 Um último exemplo
Vamos apresentar nessa seção, apenas um último exemplo das representações
mostradas usando dessa vez um sinal real obtido da imagem de sensoriamento remoto
multitemporal ilustrada na Figura 10 (p.44). Nessa imagem, se escolhermos o ponto
teremos o seguinte sinal temporal:10
10 Esse sinal nomeado “NDVI_2000_2007_RP_100_100.ini” se encontra no DVD que acompanha
essa monografia. Consulte o APÊNDICE D -DVD p.150 para maiores informações.
<Pow er> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo x
[-32](0
,00000
)
[-24](8
,00000
)
[-16](1
6,0
000
0)
[-8](2
4,0
0000
)
[0](3
2,0
0000)
[7](3
9,0
0000)
[14](4
6,0
0000)
[22](5
4,0
0000)
[30](6
2,0
0000)
Eix
o y
0,25
0,2
0,15
0,1
0,05
0
60
Figura 30 - Parte real do sinal no ponto (100,100) da imagem da Figura 8.
A Figura 8 possui 180 bandas. É por isso que esse sinal discreto possui 180 pontos
ou elementos. Cada elemento é um número complexo que, por estamos no domínio do tempo,
possuem parte imaginária nula.
Como veremos no item 5.4 – “A Transformada Rápida de Fourier (FFT)” (p.76)
para podermos continuar e obter um sinal no domínio da freqüência, precisamos aumentar o
número de elementos desse sinal para a maior potência de 2 mais próxima de 180 que, nesse
caso é 256. Cada elemento que for adicionado possuirá o valor .
Fazendo isso, obtemos o sinal a seguir, ainda no domínio do tempo que agora sim
pode ser representado de todas as formas nas Figuras de 31 a 45:
Figura 31 - Parte real completada com zeros.
Normalmente, para sinais temporais a parte real é a única representação
necessária.
<Real> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 165
Eixo x
[0](0
,000
00)
[18](1
8,0
0000)
[38](3
8,0
0000)
[58](5
8,0
0000)
[78](7
8,0
0000)
[98](9
8,0
0000)
[119](1
19
,00000)
[142](1
42
,00000)
Eix
o y
0,8
0,6
0,4
0,2
0
<Real> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[0](0
,000
00)
[27](2
7,0
0000)
[57](5
7,0
0000)
[87](8
7,0
0000)
[120](1
20
,00000)
[155](1
55
,00000)
[187](0
,00000)
[217](0
,00000)
[247](0
,00000)
Eix
o y
0,8
0,6
0,4
0,2
0
61
Figura 32 - Parte imaginária.
Normalmente a parte imaginária não é mostrada por ser nula no caso de sinais
temporais.
Figura 33 – Espectro ou magnitude.
Nesse caso, por não existirem valores negativos nesse sinal, e por se tratar de um
sinal temporal, os gráficos da Magnitude e da parte Real foram os mesmos.
Figura 34 – Fase.
<Imag> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[0](0
,000
00)
[27](2
7,0
0000)
[57](5
7,0
0000)
[87](8
7,0
0000)
[119](1
19
,00000)
[154](1
54
,00000)
[186](0
,00000)
[216](0
,00000)
[246](0
,00000)
Eix
o y
0
<Espectro> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[0](0
,000
00)
[27](2
7,0
0000)
[57](5
7,0
0000)
[87](8
7,0
0000)
[120](1
20
,00000)
[155](1
55
,00000)
[187](0
,00000)
[217](0
,00000)
[247](0
,00000)
Eix
o y
0,8
0,6
0,4
0,2
0
<Fase> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[0](0
,000
00)
[27](2
7,0
0000)
[57](5
7,0
0000)
[87](8
7,0
0000)
[119](1
19
,00000)
[154](1
54
,00000)
[186](0
,00000)
[216](0
,00000)
[246](0
,00000)
Eix
o y
0
62
Figura 35 - Espectro de potência ou norma.
Para terminar esse exemplo, vamos proceder com a transformada de Fourier,
apresentada no próximo capítulo, para obtermos um sinal no domínio da freqüência e
podermos visualizá-lo usando todas as representações. A seguir mostramos ilustrações de
cada uma das representações seguidas de um zoom das mesmas para melhor visualizar os
aspectos dos diagramas.
Figura 36 - Parte real do sinal transformado para o domínio da freqüência.
Figura 37 - Zoom da parte real.
Essa forma de representação não será usada, pois esconde informação (a parte
imaginária não pode ser desprezada).
<Pow er> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[0](0
,000
00)
[27](2
7,0
0000)
[57](5
7,0
0000)
[87](8
7,0
0000)
[120](1
20
,00000)
[155](1
55
,00000)
[187](0
,00000)
[217](0
,00000)
[247](0
,00000)
Eix
o y
0,8
0,6
0,4
0,2
0
<Real> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-128](0
,0000
0)
[-96](3
2,0
000
0)
[-64](6
4,0
000
0)
[-32](9
6,0
000
0)
[0](1
28,0
0000)
[32](1
60,0
0000)
[62](0
,00
000)
[90](0
,00
000)
[119](0
,00000)
Eix
o y
0,25
0,2
0,15
0,1
0,05
0
-0,05
<Real> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-31](9
7,0
000
0)
[-22](1
06,0
00
00)
[-13](1
15,0
00
00)
[-4](1
24,0
000
0)
[4](1
32,0
0000)
[12](1
40,0
0000)
[21](1
49,0
0000)
[30](1
58,0
0000)
Eix
o y
0,25
0,2
0,15
0,1
0,05
0
-0,05
63
Figura 38 - Parte imaginária.
Perceba que há informação na parte imaginária que não pode ser desprezada.
Figura 39 - Zoom da parte imaginária do sinal.
Figura 40 - Espectro do sinal.
Figura 41 - Zoom do Espectro.
<Imag> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-128](0
,0000
0)
[-96](3
2,0
000
0)
[-64](6
4,0
000
0)
[-32](9
6,0
000
0)
[0](1
28,0
0000)
[31](1
59,0
0000)
[61](0
,00
000)
[89](0
,00
000)
[118](0
,00000)
Eix
o y
0,1
0,05
0
-0,05
-0,1
<Imag> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-10](1
18,0
00
00)
[-6](1
22,0
000
0)
[-2](1
26,0
000
0)
[2](1
30,0
0000)
[6](1
34,0
0000)
[10](1
38,0
0000)
[14](1
42,0
0000)
Eix
o y
0,1
0,05
0
-0,05
-0,1
<Espectro> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-128](0
,0000
0)
[-96](3
2,0
000
0)
[-64](6
4,0
000
0)
[-32](9
6,0
000
0)
[0](1
28,0
0000)
[32](1
60,0
0000)
[62](0
,00
000)
[90](0
,00
000)
[119](0
,00000)
Eix
o y
0,25
0,2
0,15
0,1
0,05
0
<Espectro> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-4](1
24,0
000
0)
[-2](1
26,0
000
0)
[0](1
28,0
0000)
[2](1
30,0
0000)
[4](1
32,0
0000)
Eix
o y
0,25
0,2
0,15
0,1
0,05
0
64
O Espectro ou Magnitude é a forma de representação que será adotada para
representar sinais complexos no domínio de Fourier.
Figura 42 - Fase do sinal.
Verifique na Figura 42 que mostramos a fase de cada elemento do sinal. Como o
sinal não é um sinal controlado (gerado a partir de uma função) veja que o diagrama de fase
numa visão geral pode apresentar um aspecto “feio”, mas isso não significa que esteja
incorreto.
Figura 43 - Zoom da fase do sinal.
Cada ponto do sinal possui uma fase. Aqui o eixo das ordenadas está em graus. A
melhor forma de representar um sinal no domínio da freqüência é usando o espectro e a fase.
Entretanto, muitas vezes o diagrama de fase é omitido deixando para ser usado somente
quando for realmente necessário.
<Fase> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-128](0
,0000
0)
[-97](3
1,0
000
0)
[-65](6
3,0
000
0)
[-33](9
5,0
000
0)
[-1](1
27,0
000
0)
[31](1
59,0
0000)
[61](0
,00
000)
[89](0
,00
000)
[118](0
,00000)
Eix
o y
50
0
-50
<Fase> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-2](1
26,0
000
0)
[-1](1
27,0
000
0)
[0](1
28,0
0000)
[1](1
29,0
0000)
[2](1
30,0
0000)
Eix
o y
50
0
-50
65
Figura 44 - Espectro de potência do sinal.
Figura 45 - Zoom do espectro de potência.
Cada representação depende da aplicação, no nosso caso iremos preferir o
Espectro (magnitude) para visualizar os sinais no domínio de Fourier.
Dessa forma, finalizamos a parte referente aos sinais. Mostramos cinco diferentes
formas de representá-los e definimos aquelas que iremos adotar para cada domínio de sinal. A
seguir, falaremos sobre a transformada de Fourier – método que utilizaremos para processar
os sinais das imagens multitemporais.
<Pow er> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-128](0
,0000
0)
[-96](3
2,0
000
0)
[-64](6
4,0
000
0)
[-32](9
6,0
000
0)
[0](1
28,0
0000)
[32](1
60,0
0000)
[62](0
,00
000)
[90](0
,00
000)
[119](0
,00000)
Eix
o y
0,07
0,06
0,05
0,04
0,03
0,02
0,01
0
<Pow er> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo x
[-32](9
6,0
000
0)
[-23](1
05,0
00
00)
[-14](1
14,0
00
00)
[-5](1
23,0
000
0)
[3](1
31,0
0000)
[11](1
39,0
0000)
[20](1
48,0
0000)
[29](1
57,0
0000)
Eix
o y
0,07
0,06
0,05
0,04
0,03
0,02
0,01
0
66
Capítulo 5 Transformadas de Fourier
Nesse capítulo abordaremos a Transformada de Fourier, que é o método que
utilizaremos para processar os sinais extraídos das imagens de sensoriamento remoto
multitemporais.
5.1 Introdução às Transformadas
Antes de falarmos da Transformada de Fourier em si, vamos começar com uma
breve introdução do que é uma transformada. E. Oran Brigham começa seu livro sobre esse
assunto com a seguinte afirmação: “Every reader has at one time or another used transform
analysis techniques to simplify a problem solution.” (1974, p. 1) que pode ser traduzido como
“Todo leitor já deve ter usado alguma técnica de transformação para simplificar a solução de
algum problema.” De fato, um exemplo simples de transformação é a transformação
logarítmica. Por exemplo, para determinar o valor de um quociente com uma boa
aproximação e sem o auxílio de um computador, podemos seguir dois caminhos. O primeiro
caminho é dividir à mão – o que pode resultar numa conta trabalhosa. O segundo caminho é
seguir a sugestão e aplicar a transformada logarítmica: . Nesse
momento, consulta-se uma tabela com os valores dos logaritmos, realiza-se a subtração e
encontraremos o valor de . Com esse valor, aplicamos a transformada logarítmica
inversa para, finalmente, encontrar o valor de Y desejado. Esse exemplo mostra que há várias
formas de se resolver um problema. Podemos resolvê-lo analiticamente ou aplicar uma
transformação para reduzir a complexidade do problema, resolver e aplicar a transformação
inversa para encontrar a resposta.
É nesse contexto que se encaixa a transformada de Fourier. Veremos mais adiante
que a transformada de Fourier é um caso particular de uma teoria completa chamada Análise
67
de Fourier que abrange quatro formas de analisar quatro possíveis formas de sinais distintos.
Veremos que os sinais que vamos lidar nesse trabalho são todos de um tipo específico e,
portanto, tal como foi feito no exemplo da transformada logarítmica utilizaremos a
transformada de Fourier para transformá-los, “resolveremos o problema” e depois, usaremos a
transformada inversa para chegar à resposta.
A Transformada de Fourier é, portanto, uma técnica de análise bastante útil para
simplificar problemas em diversas áreas do conhecimento. A seguir, apresentamos um
histórico sobre esse excepcional cientista cuja transformada leva o nome, prosseguiremos com
um entendimento mais formal da Transformada de Fourier para podermos apresentar o
algoritmo da Transformada Rápida de Fourier (FFT, do inglês Fast Fourier Transform) que é
o principal algoritmo usado no processamento realizado nesse trabalho.
5.2 Histórico
Jean Baptiste Joseph Fourier nasceu em 1768 na
cidade de Auxerre – França. Filho de Alfaiate, Fourier se
tornou órfão muito jovem, pois sua mãe morreu quando ele
tinha nove anos e o seu pai quando ele tinha dez. Internado
na escola militar de Auxerre, ele inicialmente mostrou ter
talento para a literatura. Entretanto, aos treze anos começou a
interessar-se pela matemática.
Em 1787, Fourier decidiu seguir carreira religiosa
entrando na abadia beneditina de St. Benoit-sur-Loire.
Mesmo assim, persistiu em seu interesse pela matemática mantendo contato com seu antigo
professor de matemática de Auxerre. Em 1789 abandonou a abadia sem chegar a fazer os
votos religiosos e visitou Paris onde apresentou um artigo à Academia Real de Ciências
Figura 46 - Retrato de Jean B. J.
Fourier
68
francesa sobre as suas pesquisas para a solução de equações numéricas. Em 1790 tornou-se
professor de matemática na mesma escola militar que tinha estudado.
Em 1793, seduzido pelos ideais republicanos, envolveu-se na política juntando-se
ao Comitê Revolucionário de Auxerre. Entretanto, tentou demitir-se do comitê revolucionário
depois do terror gerado pela Revolução Francesa. No entanto, a essa altura já estava muito
envolvido para poder abandonar sua atividade política e chegou a ser preso em julho de 1794
ao defender uma das facções da revolução.
Temendo pela sua vida, ainda mais depois da morte de Robespierre – um dos
principais líderes da Revolução Francesa – condenado à guilhotina, Fourier terminou por ser
libertado devido a novas mudanças políticas nessa época conturbada.
Em 1794 Fourier é nomeado para estudar na École Normale de Paris, uma
instituição que foi fundada pela república com o objetivo de ensinar professores. Nesta escola
Fourier tem como professores Joseph-Louis de Lagrange, Pierre Simon Laplace e Gaspard
Monge, os maiores físico-matemáticos da época. Lecionou no Collège de France e na École
Polytechnique sob a direção de Lazare Carnot e Gaspard Monge. Nessa época, iniciou uma
atividade mais séria em investigação matemática ao manter excelentes contatos com
Lagrange, Laplace e Monge.
Em 1797, sucedeu a Lagrange ao ser
nomeado para a cátedra de Análise e Mecânica na École
Polytechnique. Ficou conhecido pelas suas aulas
excepcionais, devido ao seu dom para a oratória que já
lhe tinha trazido reconhecimento na política.
Em 1798, juntou-se a Napoleão na sua
expedição ao Egito e foi feito governador e secretário do
Instituto Egípcio fundado por Napoleão no Cairo. Em
Figura 47 - Teoria Analítica do Calor de
Jean B. J. Fourier
69
1801, depois das vitórias inglesas e resultante capitulação francesa, Fourier voltou à França e
foi nomeado por Napoleão Prefeito de Isère, posto que manteve até a Restauração tendo mais
tarde sido nomeado prefeito de Grenoble.
Foi em Grenoble que Fourier desenvolveu a maioria do seu trabalho experimental
e teórico sobre a propagação do calor que lhe permitiu modelar a evolução da temperatura
através de séries trigonométricas. Em 1822 Fourier escreveu “Theorie analytique de la
chaleur” (Teoria Analítica do Calor, na tradução para o Português), um marco na física-
matemática. Este trabalho mostra como uma série matemática de senos e cossenos pode ser
usada para analisar a condução de calor em corpos sólidos. Essas séries de Fourier, como
ficaram conhecidas, é provavelmente a primeira aplicação sistemática de séries
trigonométricas para resolver um problema. Fourier passou o resto de sua vida trabalhando
em seu conceito e expandindo-o para incluir a integral de Fourier antes de sua morte em 1830.
(O'CONNOR & ROBERTSON, 1997)
Ambas a série de Fourier e a integral de Fourier permitem transformar sinais do
domínio do tempo para o domínio da freqüência. São ferramentas matemáticas para o que
agora chamamos de Análise de Fourier.
Hoje em dia, as aplicações da Análise de Fourier transcendem a aplicação original
de condução de calor servindo para inúmeras áreas de estudo incluindo sistemas lineares,
antenas, vibrações mecânicas, ótica, biomedicina, processamento de imagens dentre muitos
outros processos e problemas.
5.3 A Análise de Fourier
Segundo, Haykin e Veen, existem quatro representações de Fourier distintas, cada
uma aplicável a uma das classes de sinais discutidas no capítulo anterior.
70
“A série de Fourier (FS) (Fourier Series) se aplica a sinais periódicos de tempo contínuo, e a
série de Fourier de tempo discreto (DTFS) (Discrete Time Fourier Series) se aplica a sinais
periódicos de tempo discreto.” [grifo nosso] (2001, p. 165).
Ainda:
“Se o sinal for de tempo contínuo e não periódico, a representação denominar-se-a
transformada de Fourier (FT) (Fourier Transform). Se o sinal for de tempo discreto e não
periódico, será usada a transformada de Fourier de tempo discreto (DTFT) (Discrete Time
Fourier Transform).” [grifo nosso](IDEM).
Antes de prosseguirmos, precisamos fazer uma importante observação. A teoria
encontrada nesse capítulo ficou conhecida popularmente como as “Transformadas de
Fourier”. Porém, formalmente, a Transformada de Fourier (Fourier Transform – FT) seria
apenas mais uma representação de Fourier dentre as quatro existentes. Não confunda,
portanto, as Transformadas de Fourier no sentido amplo com a Transformada de Fourier em
seu sentido restrito.
Durante a elaboração desse trabalho, daríamos continuidade ao texto afirmando
que seria a Transformada de Fourier de Tempo Discreto (DTFT) aquela análise que nos
interessaria. A razão disso é evidente: Como não podemos afirmar nada a respeito da
periodicidade dos sinais extraídos de imagens multitemporais, haver-se-ia de convir que
estivéssemos tratando sinais de tempo discretos não periódicos. E que dessa forma, a DTFT
seria a escolha adequada.
Contudo, à medida que se prosseguiu com o desenvolvimento do texto, percebeu-
se que isso era um equívoco. Esse equívoco tornou-se claro ao nos depararmos com o
seguinte trecho em Haykin e Veen:
“A DTFS é a única representação de Fourier que pode ser avaliada e manipulada
numericamente em um computador.”[grifo nosso] (2001, p. 175).
Essa afirmação mostrou estar havendo uma confusão em relação à teoria
matemática que daria suporte à introdução teórica ao algoritmo da Transformada Rápida de
Fourier vista mais a frente no Tópico 5.4 – “A Transformada Rápida de Fourier (FFT)”
(p.76). Acreditávamos até então que a Transformada Rápida de Fourier se originava a partir
da Transformada de Fourier de Tempo Discreto. Além da clara semelhança entre esses
71
nomes, outro motivo que nos fez cometer esse equívoco foi a forma como outras referências
apresentavam o assunto. De certo, alguns autores apresentam a teoria relativa à DTFS sob o
título: “Discrete Fourier Transforms” e não “Discrete Fourier Series”.
Então, na Análise de Fourier, as transformadas (FT e DTFT) são para sinais não
periódicos. Já as sériers (FS e DTFS) são para sinais periódicos. Como a única delas que pode
ser avaliada e manipulada numericamente em um computador é a DTFS, será ela que vai nos
interessar.
Finalmente, um leitor atencioso deverá ter feito a seguinte observação: Como foi
dito, nada podemos afirmar sobre a periodicidade dos sinais das imagens multitemporais.
Então, como usar a DTFS – que se aplica a sinais periódicos de tempo discreto a esses sinais
que poderão ser não periódicos? A solução é bem simples: vamos tratar esses sinais como se
eles fossem periódicos!
Dessa forma, ao extrairmos um sinal de uma imagem multitemporal e adaptá-lo de
forma a usar nosso algoritmo, faremos a suposição de que aquele sinal repete-se no tempo
com período igual ao número de amostras do sinal. O que importa é que fazendo isso,
poderemos obter a representação do sinal no domínio da frequência podendo, assim, aplicar o
filtro.
5.3.1 Transformada de Fourier de Tempo Contínuo
Na literatura que trata das Transformadas de Fourier não é comum fazer a divisão
tão detalhada em representações de Fourier segundo a Análise de Fourier que Haykin e Veen
propõe. O mais comum é encontrarmos apenas dois casos: A Transformada de Fourier de
tempo Contínuo e a Transformada de Fourier de Tempo Discreto11
que se referem a como
11 Novamente, vale salientar que alguns livros mostram a Série de Fourier de Tempo Discreto sob
o nome de Transformada de Fourier de Tempo Discreto.
72
transformar funções de um domínio para o outro. Embora aquela que nos interesse seja a de
tempo discreto, vamos apresentar a contínua apenas a título de formalidade.
A transformada de Fourier de Tempo Contínuo é sintetizada no par de equações a
seguir que é comumente chamado de Par de Transformações de Fourier já que elas mostram
como levar uma função de um domínio para o outro:
(5.1)
(5.2)
As funções e podem ser entendidas como duas representações distintas
para um mesmo sinal. Enquanto é a função que representa o sinal no domínio do tempo,
é a função que representa o sinal no domínio da freqüência.
Note os termos e . O que chama atenção nesses termos é a
presença do símbolo que representa o número imaginário já definido no tópico 4.4 –
“Complexidade do Sinal” (p.49). Por isso a preocupação no Capítulo 4 – “Sinais” (p.43) de
representar os sinais usando números complexos. Ainda, „t‟ é a unidade de tempo e „f‟ a
unidade de freqüência. Se „t‟ for dado em segundos, então „f‟ será dado em Hertz.
De fato, cada uma das equações acima retornam um número complexo. Isso pode
ser compreendido valendo-se das propriedades de que:
(5.3)
73
(5.4)
Baseado nessas propriedades pode-se reescrever as equações do Par de Transformadas
de Fourier da seguinte forma:
(5.5)
(5.6)
Ou seja, as funções e serão números complexos em cada ponto
ou , respectivamente.
5.3.2 Discrete Fourier Transform: A Série de Fourier de Tempo Discreto
Segundo Press et al. (1992) a Discrete Fourier Transform se dá segundo o par de
equações a seguir:
(5.7)
(5.8)
Onde, é o valor no domínio da freqüência e é o valor no domínio do tempo.
é o número complexo. E e variam de a a completando elementos.
74
Agora, segundo Haykin e Veen a representação por Discrete Time Fourier Series
é dada por:
(5.9)
(5.10)
Onde X é o valor no domínio da freqüência e é o valor no domínio do
tempo. é o número complexo e e variam livremente desde que essa variação esteja
compreendida em valores. Ainda, Haykin e Veen afirmam que tem período
fundamental N e .
Comparando a Equação (5.7) – “Forward Discrete Fourier Transform” com a
Equação (5.9) – “DTFS Direta” e a Equação (5.8) – “Inverse Discrete Fourier Transform”
com a Equação (5.10) – “DTFS Inversa” percebemos que elas são bastante semelhantes, mas
algumas observações são necessárias.
Primeiramente, deixamos os termos “Forward Discrete Fourier Transform” e
“Inverse Discrete Fourier Transform” no idioma inglês propositadamente apara mostrar que
sua tradução para o português os confundiriam com a DTFT.
A segunda observação é que o termo que aparece na equação da inversa de
Press et al. aparece na equação da direta de Haykin e Veen. De fato, as conclusões que se
tiram ao se estudar essa teoria em diferentes livros é que cada um adota uma forma diferente.
O importante, todavia, é que esse termo exista em uma equação ou na outra. Nesse trabalho,
essa divisão por N denominada “normalização” será empregada na equação da transformada
direta assim como é usada nas equações de Haykin e Veen.
75
Terceiro, e mais importante, o valor que N assume não é apenas o número de
amostras que o sinal possui. A constante também fará o papel do período fundamental do
sinal. Lembre-se que a DTFS exige que o sinal seja periódico, e nossos sinais embora não
periódicos serão supostos que o fossem. Assim, será não só o número de amostras do sinal,
mas fará também o papel de seu período tanto no domínio do tempo quanto no da freqüência.
Assim, dado um sinal com N valores discretos, se quisermos computar a
transformada direta de Fourier, teremos que calcular para k variando de 0 até N-1.
Entretanto, para calcular cada termo precisamos fazer um somatório de N
elementos. Assim, o total de vezes que fazemos esses cálculos para transformar um vetor de N
elementos para o outro domínio é de vezes, isto é um processo O( ), ou seja, o número
de operações é da ordem de operações.
Abriremos um parêntese aqui para explicar rapidamente o que é a notação O(x)
que se diz notação “ó grande”. A notação “ó grande” é usada para determinar o quanto um
algoritmo é mais eficiente que outro. Assim, em ordem decrescente de eficiência podemos ter:
, etc.
Computacionalmente, um processo é desanimador. Por exemplo, se
possuirmos um sinal com 100 amostras de tempo, será preciso 10.000 operações para realizar
a transformada. Sabendo-se que nossas imagens multitemporais possuem em média 500x500
sinais, e cada sinal pode chegar a possuir 180 elementos, seriam necessários
operações. Isso dá mais do que bilhões de operações para se processar a imagem
inteira!
Para contornar isso, alguns cientistas desenvolveram algoritmos que aumentam a
velocidade de realização dessa transformada conseguindo complexidades iguais a
O( que são mais rápidas que as O( . No exemplo de nossa imagem, isso reduz o
76
número de cálculos para que resulta em menos do que 2 milhões
de operações. Isso são 4 mil vezes menos operações.
Esses algoritmos são conhecidos como Transformadas Rápidas de Fourier. Um
deles, aquele adotado nesse projeto, será apresentado no tópico que se segue.
5.4 A Transformada Rápida de Fourier (FFT)
Diminuir o tempo de processamento de um sinal é crucial para viabilizar um
programa de processamento de imagens digitais. A FFT (Fast Fourier Transform –
Transformada Rápida de Fourier) é uma classe de algoritmos capazes de processar a série de
tempo discreto de Fourier em menos tempo do que se fosse realizado o processamento
segundo as equações Equação (5.7) e Equação (5.8) (p.73).
5.4.1 Histórico
A existência de um algoritmo de transformada rápida só ficou conhecida no meio
da década de 60 a partir dos trabalhos dos cientistas J.W. Cooley e J.W. Tukey.
Retrospectivamente, agora nós sabemos que métodos apara computar a transformada de
tempo discreto de Fourier foi descoberta independentemente e desenvolvidos por uma dúzia
de indivíduos a começar por Gauss em 1805! (PRESS, TEUKOLSKY, VETTERLING, &
FLANNERY, 1992, p. 504).
5.4.2 O método
O algoritmo de transformada rápida de Fourier foi desenvolvido na década de 60 a
partir dos trabalhos de J.W. Cooley e J.W. Tukey (1965). Danielson e Lanczos (1942)
mostraram que a transformada discreta de Fourier de um sinal de tamanho N pode ser
reescrita como a soma de duas transformadas de Fourier, cada uma de tamanho igual a .
77
Uma delas é obtida a partir dos elementos pares do sinal, a outra, a partir dos elementos
ímpares. A prova12
é a seguinte:
(5.11)
Onde, que é uma constante. representa o -ésimo componente da
transformada de Fourier de tamanho formado pelos componentes pares (“ ” de even que
do inglês quer dizer par) da original. , por sua vez, representa o -ésimo componente da
transformada de Fourier de tamanho formado pelos componentes ímpares (“o” de odd
que do inglês quer dizer ímpar) da original.
Note que varia de até e não só até N/2. Dessa forma, as transformadas e
são periódicas em com tamanho . Assim, cada uma delas é repetida a cada dois
ciclos para obter .
A maravilha aqui é que podemos usar isso recursivamente reduzindo o problema
de calcular em calcular e . Recursivamente, porque, para calcular novamente e
12 Recomenda-se consultar Haykin e Veen (2001, p. 325) onde se encontra uma forma alternativa
de provar o método da Fast Fourier Transform.
78
, podemos submeter cada um desses cálculos a novas reduções. Por exemplo, podemos
encontrar , encontrando e , ambas de tamanho N/4, e assim por diante. A esse
processo recursivo damos o nome de Danielson e Lanczos Lemma. (PRESS, TEUKOLSKY,
VETTERLING, & FLANNERY, 1992, p. 504 e 505).
Embora, existam formas de tratar outros casos, o mais fácil deles é quando o
tamanho de N original é uma potência de 2. Nesse trabalho, portanto, o algoritmo de FFT
programado utiliza esse caso. Mas existe a questão: rara são os sinais cujo tamanho é uma
potencia de 2. O que fazer nesses casos? Nesses casos, o que é feito é aumentar o tamanho de
N até a maior e mais próxima potência de 2 completando com zeros.
Nossas imagens multitemporais possuem número de bandas da ordem de 165 a
180 bandas, ou seja, os sinais extraídos dessas imagens possuem um tamanho N original que
varia nessa faixa. Sabemos que esses números não são potencias de 2. Dessa forma, sabendo
que a maior e mais próxima potência de 2 que possuímos para essa faixa de números é igual a
256, completamos esses sinais com zeros até alcançarmos esse novo tamanho.
Com essa restrição em N, é evidente que podemos continuar aplicando o
Danielson e Lanczos Lemma continuamente reduzindo o problema em transformadas de
Fourier de sinais de tamanho , , até chegarmos a transformadas de Fourier de
tamanho 1. E o que é a transformada e Fourier de tamanho 1? Não é nada mais do que uma
operação na qual a saída e a entrada são o mesmo valor:
para algum
(5.12)
A próxima etapa é entender que valores de correspondem a qual padrão de e
. A resposta é: reverter os padrões de e assinalando = 0 e e teremos, em
binário o valor de . Isso funciona porque as sucessivas subdivisões dos dados em dados
79
pares e ímpares correspondem aos bits menos significativos de . A essa idéia, damos o nome
de bit reverse – do inglês – reversão de bits.
O processo de reversão de bits combinado ao Danielson e Lanczon Lemma faz a
FFT se tornar um processo prático: Primeiro rearranjamos os elementos de um sinal na ordem
bit reversa e depois um loop externo é executado vezes calculando transformadas de
tamanho 2,4,8,...,N. Para cada etapa desse loop externo há dois loops internos alinhados que
agem sobre as já computadas sub-transformações implementando o Danielson-Lanczos
Lemma. Dessa forma todo o algoritmo se torna da ordem de . (PRESS,
TEUKOLSKY, VETTERLING, & FLANNERY, 1992)
No processo descrito acima, primeiro ocorreu a reordenação dos elementos
segundo a ordem bit reversa para depois construir-se a transformada usando iterações.
A essa forma de proceder é dado o nome de decimation-in-time ou Cooley-Tukey FFT
algorithm. Contudo, podemos proceder da forma contrária, ou seja, primeiro constrói-se a
transformada para depois reordenar os elementos. Nesse caso, o nome que é dado é
decimation-in-frequency ou Sande-Tukey FFT algorithms. Nesse trabalho, optamos pelo
algoritmo de Cooley-Tukey FFT, que é apresentado no tópico seguinte.
5.4.3 O Algoritmo
O algoritmo da transformada de Fourier que programamos nesse trabalho foi
encontrado no livro de GORMAN, SAMMON, & SEUL, 2008. Como dados de entrada são
fornecidos dois vetores, um contendo os N números reais (real) e o outro, os N números
imaginários (imag) correspondentes aos N números complexos de entrada. Também é
requerido especificar o tamanho de N (npoints) que já deve ser uma potência de 2. Por fim,
requer-se também um número inteiro (inv). Se inv for igual a -1, o algoritmo retorna a
transformada direta de tempo discreto de Fourier, se inv for igual a +1, o algoritmos retorna a
80
inversa. Finalmente, vale destacar que o algoritmos é feito in place, isso é, os elementos dos
vetores de entrada de dados real e imag são substituídos pelos elementos dos vetores de saída.
O algoritmo citado pode ser encontrado no ANEXO A - “O Algoritmo da Transformada
Rápida de Fourier (FFT)” (p. 153).
81
Capítulo 6 Processamento de Imagens de
Sensoriamento Remoto Multitemporais
Nos capítulos anteriores, mostramos como as imagens de sensoriamento remoto
são formadas e como podemos obter sinais a partir delas. Mostramos também como processar
esses sinais usando a Transformada Rápida de Fourier. Continuamos esse trabalho mostrando
no que consiste processar uma imagem e como vamos proceder para realizar esse
processamento.
6.1 Introdução ao Processamento Digital de Imagens de
Sensoriamento Remoto
Crósta resume bem qual é a função primordial do processamento digital no
primeiro parágrafo de sua introdução:
“A função primordial do processamento digital é a de fornecer ferramentas para facilitar a
identificação e a extração da informação contida nas imagens, para posterior interpretação.
Nesse sentido, sistemas dedicados de computação são utilizados para atividades interativas de
análise e manipulação das imagens brutas. O resultado desse processo é a produção de outras
imagens, estas já contendo informações específicas, extraídas e realçadas a partir das imagens
brutas”. [grifo deles] (1993, p. 17).
Esse trecho é perfeito já que resume a finalidade de todo esse trabalho. Vale
destacar do trecho algumas idéias e explicá-las no ponto de vista deste trabalho.
“fornecer ferramentas” – De fato, o objetivo desse trabalho é criar uma
ferramenta computacional que vai facilitar a identificação e a extração da
informação contida em imagens de sensoriamento remoto multitemporais. Na
verdade, o objetivo intrínseco é filtrar essa imagem multitemporal de forma a
corrigir ruídos e obter uma imagem nova, filtrada e livre de ruídos.
“imagens brutas” – Tal qual foi apresentado no Capítulo 3 , imagens de
sensoriamento remoto na qualidade de dados brutos “escondem” informações.
82
O processamento digital é o responsável para realçar essas imagens
identificando as informações e facilitando a interpretação dessas imagens.
“resultado” – O resultado do processamento que será realizado nesse trabalho
também será outra imagem. Partiremos de uma imagem multitemporal como
dado de entrada e produziremos uma imagem multitemporal como dado de
saída ou resposta.
6.2 Formas de Processamento de Imagens
Existem diversas formas de se processar uma imagem dependendo do objetivo
que se quer alcançar com esse processamento. A literatura está cheia de livros sobre o assunto
e cada autor apresenta formas distintas de processamento de imagens. WOODS &
GONZALES, por exemplo, apresentam em seu livro 10 capítulos inteiros, cada um falando
sobre uma vertente de possíveis formas de se processar uma imagem. Dentre essas:
“Image Enhancement in the Spatial Domain”: Realce de Imagens no
Domínio Espacial – mostra diversas técnicas de processamento de
imagens no domínio do espaço.
“Image Enhancement in the Frequency Domain”: Realce de Imagens
no Domínio da Freqüência – apresenta conceitos referentes ao
processamento de imagens no domínio da freqüência (bem parecido com o
objetivo desse trabalho)13
.
“Image Restoration”: Restauração de Imagens – introduz técnicas de
restauração de imagens.
13 Esse capítulo de WOODS & GONZALES mostra como transformar uma imagem do domínio
do espaço para o domínio da freqüência usando transformadas de Fourier. Está sendo, portanto, uma importante
referência nesse trabalho já que estamos transformando imagens do domínio do tempo para o a da freqüência.
83
“Color Image Processing”: Processamento de Imagens Coloridas –
introduz técnicas e conceitos relativos a imagens coloridas.
“Image Compression”: Compressão de Imagens – Apresenta formas de
comprimir imagens.
Já CRÓSTA, por sua vez, apresenta outras formas de processar imagens, dentre as
quais:
“Filtragem de frequências espaciais” – Apresenta alguns filtros
importantes no tratamento e processamento de imagens.
“Operações aritméticas em imagens”- Apresenta conceitos relativos a
adição, subtração e multiplicação de imagens.
“Correção Geométrica e Registro de Imagens” – Mostra técnicas de
correção de imagens distorcidas.
Enfim, cada autor mostra, em função do objetivo de seu livro, inúmeras formas de
se processar uma imagem. Porém, o mais curioso é que pouco se fala de processamento de
imagens de sensoriamento remoto multitemporais, isto é, há muito pouco na literatura sobre o
processamento de imagens de sensoriamento remoto no domínio do tempo. A razão disso é o
fato de a aplicabilidade de um processamento como esse ser bastante específico – o que torna
esse trabalho, inclusive, um trabalho pioneiro até o momento.
6.3 Razão de se processar imagens de sensoriamento remoto
multitemporais
Como já foi definido no tópico 3.4.3.2 - "Imagens de Sensoriamento Remoto
Multitemporais” (p.39), uma imagem de sensoriamento remoto multitemporal é aquela que
possui várias bandas, cada banda representando uma mesma região da superfície da Terra,
84
mas cada uma registrada em um tempo diferente. Dessa forma, as condições de tempo
ambientais que cada banda dessa imagem possui as diferem entre si.
Por exemplo, em um determinado dia quando um satélite passou para coletar
dados referentes a uma das bandas da imagem multitemporal poderia haver nuvens cobrindo
uma parte da superfície observada. Já um tempo depois, quando o satélite passou pela
segunda vez para observar aquela mesma região poderia haver nuvens tampando ou revelando
regiões distintas da banda anterior. Dessa forma, as condições atmosféricas podem interferir
na interpretação da imagem multitemporal criada. Essa interferência será considerada, nesse
trabalho, como o erro que se apresenta na forma de ruído nos sinais por causa de sua natureza
aleatória produzindo variações bruscas nos sinais extraídos da imagem multitemporal.
De certo, é importante tecer um exemplo para completar o entendimento do
conceito de erro que está sendo adotado nesse trabalho. Se na grande maioria das bandas da
imagem multitemporal houvesse uma região onde sempre existisse uma nuvem e, em algumas
outras poucas bandas essa nuvem não se apresentasse, a situação estaria invertida. Nesse caso,
o erro se daria pela ausência de nuvens e o que o software iria fazer seria “colocar” uma
nuvem naquela região para “corrigir” essas bandas que estão em desacordo com as demais
bandas. Felizmente, casos como esse constituem uma exceção já que regiões onde a presença
constante de nuvens implica tratamento especial. O mais comum é que as nuvens sejam
eventos aleatórios de baixa freqüência de ocorrência em um determinado pixel para o
universo de bandas da imagem: Quanto mais bandas, melhor!
Mas não são apenas as distorções atmosféricas as principais causadoras de erros.
Os erros podem ser causados de muitas outras formas. Wilkie e Fin (1996) apresentam nas
páginas de 107 a 122 um detalhamento de técnicas usadas para detectar e corrigir possíveis
erros em imagens de satélite. Segundo eles, as principais fontes de erros podem ser: distorções
atmosféricas (incluindo aqui desde a formação de nuvens, passando por moléculas diversas
85
suspensas no ar até partículas associadas a fumaça e poeira); erros originados pelos sensores
(como, por exemplo, a calibração relativa entre um sensor e outro) e erros originados por
distorções geométricas (como a rotação da Terra no momento da aquisição das imagens, a
curvatura da Terra, efeitos de ângulo de visualização, topografia, anomalias gravitacionais e
instabilidade da plataforma do satélite na qual o sensor está fixado).
De fato, poderíamos até mesmo melhorar o conceito encontrado no tópico 6.1-
“Introdução ao Processamento Digital de Imagens de Sensoriamento Remoto” (p.81)
inserindo a informação de que outra função do processamento de imagens é tentar corrigir os
diversos tipos de erros que podem existir numa imagem. Nesse trabalho, entretanto, o
principal tipo de erro que estaremos preocupados em tratar são aqueles decorrentes do tempo.
Portanto, dentre os erros citados os que mais nos interessa são os erros originados de
distorções atmosféricas.
Concluindo, podemos definir qual é a razão de processar imagens de
sensoriamento remoto multitemporais: corrigir erros. E a forma como escolhemos para
corrigir esses erros é a filtragem temporal nos dados de imagens de sensoriamento remoto
multitemporais usando transformadas de Fourier. Essa “forma” será discutida no Capítulo que
se segue.
86
Capítulo 7 Procedimento que iremos adotar para
processar imagens de sensoriamento remoto
multitemporais usando a Transformada Rápida de
Fourier
Haja vista esse trabalho ser relativamente novo, isso é, por existir pouca coisa na
literatura a respeito do processamento de imagens de sensoriamento remoto multitemporais,
faz-se necessário definir a nossa forma de processar imagens de sensoriamento remoto
multitemporais, isto é, o procedimento que iremos adotar para nos levar a atingir o nosso
objetivo. É sobre esse procedimento que se preocupará o próximo tópico.
7.1 Procedimento e Processos
Esse nosso procedimento para processar imagens de sensoriamento remoto
multitemporais consiste em sete processos (ou etapas) listados e comentados a seguir. Cada
etapa é ilustrada com dados de uma imagem multitemporal real.
1. Escolher uma imagem de sensoriamento remoto multitemporal como dado de
entrada. A essa imagem daremos o nome de Imagem Multitemporal Original (IMO).
A primeira coisa a fazer é escolhermos uma imagem de sensoriamento remoto
multitemporal o qual vamos querer processar. Essa imagem será o dado de entrada do qual
poderemos extrair todos os sinais que serão processados.
87
Figura 48 – Cubo de uma imagem de sensoriamento remoto multitemporal
Para ilustrar a primeira etapa escolhemos a Imagem de Sensoriamento Remoto
Multitemporal ilustrada na Figura 48. Essa imagem multitemporal vai servir de dado de
entrada para o programa.
2. Extrair um sinal no domínio do tempo da IMO;
Fixando-se um ponto da IMO e variando-se o eixo z (eixo das bandas),
podemos traçar um sinal temporal. Se a imagem possuir linhas por colunas, então o total
de possíveis sinais existentes na imagem será de sinais diferentes, cada um referente ao
um ponto diferente.
88
Figura 49 – Sinal temporal discreto extraído da imagem no ponto (100,100).14
3. Transformar esse sinal para o domínio da freqüência;
O sinal extraído na etapa anterior será transformado (usando a transformada de
Fourier) para o domínio da freqüência (ou domínio de Fourier).
Figura 50 – O sinal temporal foi transformado para o domínio da freqüência.
4. Aplicar um filtro nesse sinal
O sinal é então filtrado de alguma forma15
produzindo, assim, sinais filtrados no
domínio da freqüência. Esse processo de filtragem é o responsável por eliminar os erros
presentes na imagem. Essa é a finalidade máxima de todo esse trabalho: poder filtrar esses
sinais no domínio da freqüência.
14 Esses gráficos, embora discretos, foram representados no diagrama usando uma linha contínua para fins de
melhor visualização.
15 Os filtros utilizados nesse trabalho serão discutidos no tópico seguinte.
89
Figura 51 –Filtro passa-banda sendo aplicado ao sinal anterior.
5. Aplicar a transformada inversa nesse sinal filtrado de forma a voltar para o domínio
do tempo;
Nessa etapa, aplicaremos a transformada inversa de Fourier ao sinal filtrado no
domínio da freqüência e obteremos sinais (ainda filtrados) no domínio do tempo.
Figura 52 – Sinal original (azul) e sinal filtrado (vermelho).
6. Gravar esse sinal filtrado no domínio do tempo numa nova imagem multitemporal
filtrada de acordo com o filtro usado na etapa quatro. A essa última imagem
daremos o nome de Imagem Multitemporal Resposta (IMR).
O sinal é então gravado numa nova imagem multitemporal que é gerada a partir
da imagem original. Essa nova imagem multitemporal é o dado de saída do processamento.
7. Fazer novamente as etapas de 2 a 6, escolhendo a cada iteração um novo ponto
da IMO (e portanto, um sinal diferente) até haver percorrido todos os
pontos possíveis tomando o cuidado de aplicar sempre o mesmo filtro em todos os
sinais.
90
O processo é, portanto, iterativo, com as etapas de 2 a 6 repetindo-se para cada
pixel da imagem multitemporal original. É importante destacar que o filtro que é aplicado a
cada sinal extraído da IMO deve sempre ser o mesmo para todos os sinais. A Figura 53 a
seguir apresenta o fluxograma do processo descrito.
Figura 53 - Fluxograma do processo.
91
Figura 54 Imagem multitemporal resposta gerada a partir do filtro que foi aplicado.
Assim, a Figura 54 anterior mostra um cubo representando a imagem
multitemporal resposta. Ainda, nas ilustrações a seguir podemos ver uma mesma banda da
imagem original e da imagem resposta para fins de comparação.
92
Figura 55 - Banda antes do filtro.
Figura 56 - Banda depois do filtro.
93
7.2 Os Filtros
Uma vez estando o sinal no domínio da freqüência, temos que aplicar algum tipo
de filtro para eliminar do sinal determinadas freqüências. Estabelecer se uma freqüência é
desejável ou não é tarefa do usuário que está operando o programa que estamos
desenvolvendo, portanto, não vamos entrar nesse mérito.
Filtrar no contexto desse trabalho é o processo de anular os valores das
freqüências indesejadas e manter os valores de freqüências desejadas. Assim, nesse projeto foi
programado quatro tipos de filtros diferentes16
listados, comentados e ilustrados a seguir:
7.2.1 Filtro Passa-alta
O filtro passa-alta consiste em deixar “passar” altas freqüências e eliminar
(anular) freqüências baixas. O que determina se uma freqüência é alta ou baixa é um limite
arbitrário imposto pelo usuário do programa. Se, por exemplo, ele determinar esse limite em
, então freqüências abaixo de serão anuladas mantendo-se aquelas acima de .
Figura 57 – Filtro passa-alta.
16 No DVD encontramos um vídeo chamado “Filtros.wmv” mostrando como criar esses filtros no
programa desenvolvido. Consulte o APÊNDICE D - “DVD” p.150 para maiores informações.
94
7.2.2 Filtro Passa-baixa
O filtro passa-baixa, por sua vez, é o contrário do filtro passa-alta descrita acima.
Ele consiste em deixar “passar” baixas freqüências e eliminar (anular) freqüências altas. Se,
por exemplo, ele determinar que o limite que separa freqüências altas e baixas é de , então
freqüências acima de serão zeradas mantendo-se aquelas abaixo de .
Figura 58 - Filtro passa-baixa.
7.2.3 Filtro Passa-banda
Enquanto os filtros passa-alta e passa-baixa precisa de apenas um único parâmetro
para separar as altas das baixas freqüências, filtros passa-banda e para-banda precisam de dois
parâmetros. O filtro passa-banda consiste em deixar “passar” determinadas bandas de
freqüências eliminando-se todo o resto. Essas bandas de freqüências consistem em faixas de
freqüências determinados pelo usuário. Assim, se , por exemplo, o usuário escolhe os valores
de freqüência e , como parâmetros, então freqüências menores ou iguais que e
maiores ou iguais que serão mantidas, eliminando-se todas as demais frequências que não
pertencerem a este intervalo.
95
Figura 59 – Filtro passa-banda.
7.2.4 Filtro Para-banda
O filtro para-banda, como é de se esperar, é o contrário do filtro passa-banda. Se
valores de freqüência e , são escolhidos como parâmetros, freqüências menores ou
iguais que e maiores ou iguais que serão eliminadas, mantendo-se todas as demais
freqüências.
Figura 60 - Filtro para-banda.
Dessa forma, verificamos o quadro geral do procedimento que deverá ser
executado para cumprir com os objetivos desse trabalho bem como os filtros que foram
programados.
96
Capítulo 8 Programando o Software Científico
Até agora não nos preocupamos com relação aos aspectos do programa em si.
Apresentamos a teoria relacionada às imagens de sensoriamento remoto, a teoria relacionada à
transformada de Fourier e até mesmo discorremos sobre o algoritmo da Transformada Rápida
de Fourier. Tudo isso faz parte da esfera da engenharia.
Nesse capítulo, partiremos para a esfera da ciência da computação mostrando
formalmente o programa desenvolvido. Começaremos pelas principais estruturas de dados
utilizadas para modelar os sinais, pelas bibliotecas de funções e pelos principais algoritmos
usados e desenvolvidos. Mostraremos também como ele funciona e como usá-lo.
8.1 A Linguagem de Programação
Nesse programa escolhemos usar a Linguagem C++ para programar a ferramenta.
Desde que foi desenvolvida pelo Doutor Bjarne Stroustrup em 1980, a linguagem C++ tem
sido bastante usada por programadores profissionais para aplicações de telecomunicação,
aplicações financeiras, sistemas embarcados dentre diversas outras aplicações. A versatilidade
dessa linguagem aliada à rica literatura associada a ela foram as principais razões dessa
escolha (Rogue Wave Software, 2008).
Em 1998 a linguagem C++ foi padronizada pelas organizações ANSI (American
National Standards Institute) e pela ISO (International Standards Organization) produzindo
um documento chamado ISO/IEC 14882:2003 - International Standard for Information
Systems -- Programming Language C++, que é um padrão internacional para sistemas da
informação que utilizam a Linguagem C++ (Rogue Wave Software, 2008).
97
8.2 As Estruturas de Dados
As estruturas de dados são a forma pelo qual o programador modela no
computador o fenômeno que ele quer representar e com o qual ele quer interagir. Podemos
encontrar praticamente um conjunto idêntico de estruturas de dados em quaisquer linguagens
de programação, o que varia é basicamente a sintaxe, ou seja, a forma de escrever e definir
essas estruturas. Podemos citar como exemplo de estruturas de dados as pilhas, listas, árvores,
grafos, etc. Por outro lado, algumas linguagens também apresentam estruturas de dados
especiais.
Assim, escolheu-se usar um conjunto de estrutura de dados especiais
desenvolvidos para linguagem C++ para facilitar a construção do programa. Essas estruturas
de dados fazem parte de uma biblioteca chamada Rogue Wave implementation of the C++
Standard Library (que do inglês significa Biblioteca Padrão do C++). Em agosto de 2005 essa
biblioteca foi doada para a comunidade mundial de desenvolvimento de software através do
Apache Software Foundation que o torna livre de licenças comerciais restritivas. (Rogue
Wave Software, 2008)
Deste modo, são duas as estruturas de dados presentes nessa biblioteca que
facilitou a modelagem do programa: as estruturas de dados complex e valarray. Essas duas
estruturas de dados ou classes de dados foram usadas em conjunto para podermos modelar e
manipular os sinais que eram extraídos das imagens multitemporais.
Nos tópicos a seguir falaremos um pouco dessas duas classes e mostraremos como
os sinais foram modelados a partir dessas duas classes.
8.2.1 A classe complex
A classe complex é uma estrutura de dados usada para criar objetos para
representar e manipular números complexos. As operações definidas nessa classe admitem
98
que elas sejam utilizadas juntamente a outros tipos numéricos da linguagem C++ permitindo
que softwares numéricos sejam facilmente e naturalmente desenvolvidos. (Apache Software
Foundation, 2008).
Não é difícil imaginar porque escolher essa estrutura de dados para modelar os
sinais. No Tópico 4.4 – “Complexidade do Sinal” (p.49) definimos que nossos sinais seriam
formados por elementos complexos. Dessa forma, utilizar uma classe pronta de manipulação
de dados complexos foi uma ótima idéia.
8.2.2 A classe valarray
Sabemos que um sinal é um conjunto de elementos complexos. Entretanto, a
classe complex apresentada anteriormente só representa um único número complexo. Dessa
forma, precisamos criar vetores de números complexos para representar completamente o
sinal. É nesse contexto que utilizamos a classe valarray.
A estrutura de dados valarray é uma classe usada para representar vetores de
dados unidimensionais que serão usadas para desempenhar cálculos sem prejudicar o
desempenho do programa. Ela facilita a modelagem e manipulação de vetores de dados e
fornece a eficiência indispensável que programas numéricos requerem.
8.2.3 Modelando os Sinais
Dessa forma, usando a classe complex definiu-se um novo tipo de dado chamado
TXFloat. Dessa maneira qualquer variável declarada como TXFloat estará se tratando de um
número complexo.
Em seguida, usando a classe valarray definiu-se dois outros tipos de dados. O
primeiro, mais utilizado no programa foi chamado TXSinal. O TXSinal é um vetor de dados
complexos e representa, portanto, o sinal complexo. O segundo, definido para realizar alguns
99
testes foi chamado TFSinal. Ele representa um sinal não complexo, isto é, seus elementos são
números reais.
No APÊNDICE A -Estruturas de Dados (p.139) mostramos essas estruturas de
dados com maior detalhe.
8.3 As bibliotecas de acesso e manipulação de imagens
O Dr. Nilton Correia da Silva desenvolveu em 2003 uma biblioteca de funções
para acessar e manipular imagens de sensoriamento remoto chamada TImagem. De fato,
existem diversas formas de armazenar uma imagem em um arquivo de computador. Cada uma
dessas formas ou formatos é identificada pela extensão do arquivo. Podemos citar os
seguintes formatos de arquivo de imagem para computadores: img, tif, bmp, gif, jpg, ras, sgi,
pcx, tga e led.
Cada um desses formatos de arquivo possui suas características únicas e, portanto,
logísticas próprias de acesso e manipulação de seus dados. Assim, a função da biblioteca
TImagem é fornecer ao programador uma forma de acessar e manipular os dados de qualquer
um desses formatos de forma transparente. Ela fornece um conjunto de funções que cria um
nível de abstração onde o programador consegue acessar e manipular os dados sem precisar se
preocupar com a logística inerente a cada formato de arquivo.
Dessa forma, nesse trabalho, o desenvolvimento limitou-se ao que foi proposto,
isso é, realizar um filtro temporal em imagens de sensoriamento remoto. O acesso e a
manipulação dessas imagens foram providos usando as funções dessa biblioteca. Essa
biblioteca é explorada com maior detalhe no ANEXO B - “A Biblioteca TImagem” (p.156).
100
8.4 Os Algoritmos Desenvolvidos
Para que o programa funcione corretamente é necessário programar diversos
algoritmos responsáveis pelas mais diversas funcionalidades dentro do programa. Além das
funções de tratamento dos sinais os transformando de um domínio para o outro, ainda temos
que nos preocupar com a forma como vamos visualizá-los para o usuário, enfim, como o
usuário dará entrada e como o programa dará saída nos dados.
Assim, para organizar o código fonte, os diversos algoritmos foram divididos em
seções e subseções. Nesse contexto, os algoritmos usados para controle de janelas do
programa não é importante uma vez que você pode encontrar informações sobre isso em
literaturas específicas sobre o assunto. Então, focalizaremos nos algoritmos de processamento
dos sinais e imagens.
Dividimos os algoritmos em duas seções diferentes: Algoritmos relativos às
transformadas dos sinais e os algoritmos relativos ao processamento da imagem. É importante
destacar que esses algoritmos apresentados aqui são o básico fundamental do programa que
possui mais de trinta funções (sem contar as funções das bibliotecas que ele utiliza).
8.4.1 Transformadas dos sinais
Os algoritmos relativos às transformadas dos sinais são três:
void __fastcall fft(int npoints, TFSinal *real,TFSinal *imag,int inv);
void __fastcall fourier(TXSinal *XSinal, int isign);
void __fastcall ordena(TXSinal *XSinal);
O primeiro já foi discutido no Tópico - 5.4.3 “O Algoritmo” (p.79). Trata-se do
algoritmo da Transformada Rápida de Fourier (FFT) apresentado no ANEXO A - “O
Algoritmo da Transformada Rápida de Fourier (FFT)” (p.153). Entretanto, o algoritmo que
apresentamos nesse anexo é o algoritmo original. Vale destacar que o mesmo foi adaptado
101
para a Linguagem C++ usando as estruturas de dados que adotamos. Além do mais, uma
importante alteração foi feita no algoritmo: Originalmente, ele faz a “normalização”
referenciada no Tópico 5.3.2 – “Discrete Fourier Transform: A Série de Fourier de Tempo
Discreto” (p.73) ao executar a transformada inversa. Mas a convenção que adotamos foi a de
executar essa normalização na transformada direta. Assim, tivemos que mudar o algoritmo
para que isso fosse atingido. Veja o APÊNDICE B - “Algoritmos Desenvolvidos:
Transformada” (p.140) que mostrará esse algoritmo adaptado comentando aonde foi feita essa
alteração.
O segundo algoritmo é responsável por servir de “ponte” entre a modelagem de
dados do programa e o algoritmo da FFT discutido no parágrafo anterior. Veja que dessa
forma, nunca fazemos uma chamada diretamente à função fft(...). Quando quisermos
transformar um sinal, utilizamos a função fourier(...) que por sua vez irá chamar a fft(). O
APÊNDICE B - também apresenta essa função.
O terceiro algoritmo também é um algoritmo auxiliar que só é chamado pela
função fourier(...) acima exposta. Seu papel é fazer a inversão dos valores das freqüências do
sinal de forma a ordenar as freqüências da menor para a maior. O APÊNDICE B - também
apresenta essa função.
8.4.2 Processamento da Imagem
Os principais algoritmos relativos ao processamento das imagens são quatro:
void __fastcall pegaSinal();
void __fastcall trataSinal();
void __fastcall gravaSinal();
void __fastcall Execute();
102
O último algoritmo é aquele responsável por todo o processamento da imagem e
geração de uma imagem nova. Os três primeiros algoritmos são algoritmos auxiliares
chamados pela função Execute (). Note que apenas os nomes dessas três funções auxiliares
revelam o processamento descrito no Tópico 7.1 – “Procedimento e Processos” (p.86).
Basicamente o algoritmo Execute () é responsável por criar a nova imagem pegando
sucessivamente sinais da imagem original, tratando-os segundo o filtro e gravando os sinais
filtrados na nova imagem. Esses algoritmos são mostrados e comentados no APÊNDICE C -
“Algoritmos Desenvolvidos: Processamento” (p.145).
8.5 Processando Imagens Multitemporais
De fato, o leitor pode ter percebido que muitas ilustrações encontradas até agora
são capturas de tela de algum programa de computador em execução. De fato, trata-se do
programa final fruto da aplicação de toda a teoria encontrada até agora nessa monografia.
A seguir mostramos passo a passo como proceder para realizar o processamento
de uma imagem de sensoriamento remoto multitemporal filtrando-a e gerando uma nova
imagem.17
Figura 61- Janela Principal do programa em execução.
17 No DVD encontramos o vídeo “ProcessandoImagens.wmv” mostrando como usar o programa
para realizar esse processamento. Consulte o APÊNDICE D - “DVD” p.150 para maiores informações.
103
Primeiramente, você deve executar o aplicativo. A Figura 61 anterior mostra a
primeira janela que aparece. Trata-se a janela principal do programa com o seguintes menus:
Arquivo: Basicamente usado para carregar e gerar imagens.
Visualizar: Visualizar as ferramentas.
Sinais: Laboratório de Sinais para testes.
Créditos: Informações sobre o programa.
Figura 62 - Menu Arquivo.
Acessando o menu arquivo procedemos acessando o sub-menu “Carregar
Imagem” para carregar uma imagem.
Figura 63 - Abrir uma imagem multitemporal. Nesse exemplo abrimos pnsc_ndvi.img.
104
Agora, escolhemos o arquivo da imagem multitemporal que queremos processar.
Para exemplificar abrirmos o arquivo pnsc_ndvi.img. Essa imagem está na pasta Imagens do
CD que acompanha esse trabalho.
Figura 64 - Janela Inicial mostrando os dados da imagem escolhida.
Após abrir a imagem, veja que os dados referentes a essa imagem são carregados
na janela principal do programa.
Figura 65 - Menu Visualizar.
Carregada uma imagem, o menu “Visualizar” está agora habilitado. Você pode
usá-lo para visualizar diversas ferramentas. Perceba as teclas de atalho ao lado dos sub-
menus. Pressionar qualquer dessas teclas de atalho com o foco em qualquer janela do
programa principal executa a ação correspondente. Tente, por exemplo, pressionar Ctrl + A e
você verá a janela de Visualização da Imagem se abrir.
105
Figura 66 - Janela visualizando a banda da imagem carregada.
Perceba que todas as janelas são independentes uma das outras. Assim, você pode
arrastar e redimensionar cada janela da forma como desejar. Caso você acidentalmente feche
ou simplesmente perca a janela de vista, você pode pressionar a tecla de atalho
correspondente para mostrar a janela escondida.
Figura 67 - Alternando entre as bandas da imagem.
106
Na ilustração anterior, rearranjamos as posições das janelas e ainda chamamos a
janela de “Visão Geral” usando o atalho Ctrl + S. Depois, chamamos a janela principal com o
atalho Ctrl + R e abrimos a lista de bandas. Veja que ao mudar as bandas, a visualização da
imagem muda automaticamente.
Figura 68 – Sinal temporal extraído da imagem multitemporal na coordenada escolhida.
Continuando, ao mover o mouse na janela “Visualizar Imagem” perceba que a
coordenada da posição do mouse é mostrada no canto inferior esquerdo dessa janela.
Ao dar um duplo clique sobre a imagem, a posição é marcada com dois traços vermelhos.
Ainda, o perfil Z desse pixel pode ser mostrado ao abrir a janela “Domínio do Tempo” usando
o atalho Ctrl + Q.
A janela do “Domínio do Tempo” mostra o sinal que é extraído em tempo real da
imagem multitemporal. No eixo x, mostramos as bandas de 0 a N. No eixo y, mostramos o
valor daquele pixel em cada banda.
Perceba que a janela “Domínio do Tempo” pode ser redimensionada para o
tamanho que você desejar. Você também pode navegar pelo gráfico apertando o botão
107
esquerdo do mouse e arrastando. Ainda, você pode dar um zoom no gráfico ao clicar com o
botão direito do mouse e desenhando um retângulo na região que você quer aproximar.
Retângulos desenhados da esquerda para a direita avançam o zoom, retângulos desenhados da
direita para a esquerda retornam o gráfico para o zoom original.
Verifique, finalmente, que ao mudar o pixel na imagem, o “Domínio do Tempo” é
automaticamente atualizado para aquela posição.
Figura 69 - Visualização do filtro, e do sinal no domínio do tempo e da frequência.
Prosseguindo, a Ilustração anterior mostra duas novas janelas: As janelas
“Domínio da Freqüência” e “Filtro”. A janela “Domínio da Freqüência” se comporta
exatamente como a janela “Domínio do Tempo” com a diferença de que na primeira o sinal já
foi convertido para o domínio de Fourier.
A janela “Filtro” apresenta a interface usada para criar os filtros desejados.
Figura 70 - Janela "Filtro".
108
Podemos construir a partir dessa interface qualquer um dos quatro filtros
discutidos no Tópico 7.2 – “Os Filtros” (p.93).
Figura 71 – Filtro configurável em tempo real.
Verifique que ao configurar o filtro, um novo gráfico vermelho aparece em cada
janela do “Domínio do Tempo” e na janela do “Domínio da Freqüência”. Enquanto o gráfico
azul das duas janelas mostra o sinal original, os gráficos vermelhos mostram, em tempo real,
o resultado da filtragem nos dois domínios.
Note também que quando uma configuração de filtro é criada, pode-se mudar a
coordenada do pixel de interesse que todos os sinais atualizam-se para o novo sinal.
Dessa forma, cabe ao usuário analisar em tempo real qual será a melhor
configuração de filtro para a nova imagem que o programa está prestes a gerar. Uma vez que
uma configuração de filtro tiver sido escolhida, tudo o que o usuário deverá fazer é ir na
janela principal (Ctrl+R), selecionar “Arquivo” e “Gerar” ou simplesmente pressionar o
atalho “Ctrl + G”.
109
Figura 72 - Após ter definido o filtro, encontramos a opção "Gerar" na janela principal.
Figura 73 - Diálogo pedindo o nome e o local onde a nova imagem resposta será salva.
Após o usuário tiver mandando o programa gerar a nova imagem baseada no filtro
configurado, o programa abrirá uma janela pedindo um local e um nome para a nova imagem
que será gerada. Nesse exemplo, o nome que escolhemos foi pnsc_ndvi_novo.img.
110
Figura 74 - A nova imagem está sendo criada.
Ao mandar “Salvar”, o programa entra no início do processamento que consiste
em clonar a estrutura da imagem original, isso é, criar uma nova imagem com as mesmas
dimensões e números de bandas da imagem original. Essa fase demora cerca de alguns
minutos dependendo da capacidade de processamento do computador que está rodando o
programa.
Entenda que nenhum processamento real está sendo feito nessa fase. O programa
está apenas preparando um novo arquivo no qual ele irá armazenar os sinais filtrados da
imagem original compondo, assim, uma nova imagem multitemporal.
111
Figura 75 - A nova imagem está sendo criada.
A próxima fase é o processamento propriamente dito. Nessa fase o programa está
lendo cada posição da imagem original, extraindo um sinal temporal, transformando para o
domínio da freqüência, aplicando o filtro configurado, transformando de volta para o domínio
do tempo e, finalmente, gravando o sinal filtrado no novo arquivo de imagem criado na fase
anterior. Verifique a barra de progresso que mostra quanto por cento da imagem já foi
processada e quanto ainda falta processar.
Figura 76 - A nova imagem foi criada com sucesso,
112
Quando o processamento termina, a janela da ilustração anterior aparece
anunciando o fim do processamento e que a imagem foi processada com sucesso. Perceba que
mostramos também o tempo decorrido entre o momento que o usuário clica em “Salvar” até o
momento final de todo o processamento.
Concluindo, o programa apresenta uma interface bastante intuitiva e dinâmica
para analisar os sinais, configurar o filtro e gerar a nova imagem.
8.6 Laboratório de Sinais
Além de todas as interfaces mostradas no tópico anterior usadas para processar as
imagens de sensoriamento remoto, também foi desenvolvida uma ferramenta para produzir e
visualizar sinais controlados para fins de testar o programa. Chamamos essa ferramenta de
“Laboratório de Sinais” e mostramos uma captura de tela da mesma na Figura 77 a seguir.
Figura 77 - Interface principal do Laboratório de Sinais.
Nessa interface podemos visualizar ao mesmo tempo até quatro sinais
inicialmente chamados de Sinal A, Sinal B, Sinal C e Sinal D. Para cada sinal, possuímos seis
113
botões que executam ações nesses sinais. Os botões e a descrição de suas ações são os
seguintes:
Abrir – Abre um sinal a partir de um arquivo INI. Originalmente,
arquivos INI são usados para guardar configurações de programas.
Entretanto, primando pela facilidade de manipulação desses arquivos,
escolhemos usá-los para salvar e restaurar os dados referentes a sinais
produzidos por esse programa.
Salvar – Salva o sinal em um arquivo INI.
Zero Pad – Sabemos que o algoritmo da Transformada Rápida de Fourier
usada nesse programa só consegue ser executada em sinais cujo número de
amostras N seja uma potência de dois. Isto é, para algum número
p inteiro positivo. Dessa forma, se quisermos aplicar a transformada de
Fourier direta ou inversa em algum sinal cujo N não seja uma potência de
2, precisamos primeiro adicionar zeros (Zero Pad) até que o número de
amostras seja igual ao número potência de 2 mais próximo. Por exemplo,
se o N do sinal original for igual a 12, “Zero Pad” irá adicionar quatro
zeros gerando um sinal com 16 amostras: .
Fourier – Ao pressionar o botão “Fourier” o programa vai transformar o
sinal usando a transformada direta ou inversa de Fourier. A escolha entre a
transformada direta ou inversa é feita escolhendo um dos dois tipos no
radiogroup “Fourier” que mostra duas opções possíveis: “Direto” e
“Inverso”.
Filtrar – O botão “Filtrar” abre a interface de filtro permitindo que o
usuário visualize filtros feitos no sinal. Vale destacar que só há sentido
usar o botão “Filtrar” quando o sinal está no domínio do tempo. Se o sinal
114
estiver no domínio de Fourier, o programa vai tratar esse sinal como se
estivesse no domínio do tempo e vai produzir uma “transformada da
transformada”.
Mostrar – O botão mostrar é usado para criar uma janela independente e
mais rica em detalhes do sinal que está sendo visualizado. O groupbox
“Ao mostrar” possui dois radiogroups usados para configurar a janela que
será visualizada. O radiogroup “tipo” permite que você escolha dentre as
cinco possíveis representações do sinal (Espectro, Espectro de Potência,
Parte Real, Parte Imaginária e Fase). O radiogroup “Eixo X” permite que
você escolha apenas a ordem dos valores da legenda do eixo x do gráfico
que será mostrado. Naturalmente, quando o sinal que será mostrado está
no domínio do tempo, prefere-se mostrar o eixo x na forma de números
inteiros positivos crescentes a partir do zero. Quando o sinal está no
domínio da freqüência, o correto seria mostrá-lo usando os valores de x
(freqüência) negativos e positivos.
Além desses botões, podemos notar também os botões “Fechar” que é usado para
fechar essa interface e o botão “Gerar Sinais”. Clicando nesse último, abrimos a interface
“Gerar Sinais”. Usamos essa última para gerar sinais que serão salvos no formato adequado
para posterior manipulação no “Laboratório de Sinais”.18
18 Um vídeo exemplo mostrando como gerar sinais usando o programa pode ser encontrado no
DVD sob o nome “LabSinaisEx1.wmv”. Consulte o APÊNDICE D - “DVD” p.150.
115
Figura 78 - Interface Gerar Sinais
Nessa interface o usuário pode produzir sinais discretos complexos amostrando
funções. Algumas considerações importantes são necessárias:
As funções disponíveis são a função seno, cosseno, tangente e exponencial
identificadas como sen(x), cos(x), tan(x) e exp(x) respectivamente.
O usuário pode optar dentre as seguintes letras: x, t ou k para referenciar à
variável independente. O programa não as diferencia, assim se o usuário
escreve, por exemplo, sen(x) + x ou sen(t) + t ou ainda sen(x) + t, o programa
vai apresentar o mesmo resultado.
116
A letra “p” é reservada e utilizada como valendo 3,14159.
O programa usa aproximação para 5 casas decimais.
Os valores de inicio e o passo podem ser decimais. Você pode até mesmo usar
a constante “p” para criar valores de passo.
O valor Total deve ser um número inteiro positivo maior do que 2.
O usuário ainda pode definir algumas expressões no grupo de Testes para ver
qual o resultado do processamento.
Todas as funções de manipulação de expressões foram desenvolvidas pelo
autor desse trabalho, embora se criou um poderoso manipulador capaz de
calcular expressões complexas definidas pelo usuário, alguns avisos devem ser
feitos:
o Cuidado ao multiplicar uma constante por uma função. Em vez de
multiplicar direto, ex.: , utilize parênteses, ex.: ,
ou .
o Cuidado ao usar o sinal de negativo como operador e não como
operação. Em vez de digitar utilize um zero antes:
.
o Funções compostas de mais de uma função podem produzir resultados
inesperados. Ex.: Não utilize esse tipo de expressão.
117
Capítulo 9 Validando os Resultados
Esse capítulo se destina a validar os resultados encontrados com o algoritmo da
Transformada Rápida de Fourier que foi programado ao utilizá-la para analisar sinais
controlados.
9.1 Primeiro Exemplo: Função Exponencial
No capítulo 9 de BRIGHAM pág 132, encontramos um exemplo no qual o autor
analisa a transformada de um sinal obtido pela amostragem de uma função exponencial a
seguir. Vamos repetir esse exemplo tecendo comentários pertinentes. 19
(9.1)
Nesse exemplo, essa função será amostrada em N=32 amostras com intervalo de
amostragem ∆ igual a 0,25. Ainda, escolhemos = 0. Dessa forma, varia na faixa de 0 até
19 No DVD encontramos o vídeo “LabSinaisExp” mostrando esse exemplo. Consulte o
APÊNDICE D - “DVD” p.150 para maiores informações.
118
7,75 com passo igual a 0,25. Considere a Figura 79 a seguir gerada pelo programa.20
Figura 79 - Gráfico da Amostra da Exponencial.
O próximo passo é proceder com a Transformada Direta de Fourier.
20 Esse sinal pode ser encontrado no DVD sob o nome “ValidandoResultados_Exponencial.ini”.
Consulte o APÊNDICE D - “DVD” p.150.
[0](0,00000) 1
[1](0,25000) 0,779
[2](0,50000) 0,607
[3](0,75000) 0,472
[4](1,00000) 0,368
[5](1,25000) 0,287
[6](1,50000) 0,223
[7](1,75000) 0,174
[8](2,00000) 0,135
[9](2,25000) 0,105
[10](2,50000) 0,082
[11](2,75000) 0,064
[12](3,00000) 0,05
[13](3,25000) 0,039
[14](3,50000) 0,03
[15](3,75000) 0,024
[16](4,00000) 0,018
[17](4,25000) 0,014
[18](4,50000) 0,011
[19](4,75000) 0,009
[20](5,00000) 0,007
[21](5,25000) 0,005
[22](5,50000) 0,004
[23](5,75000) 0,003
[24](6,00000) 0,002
[25](6,25000) 0,002
[26](6,50000) 0,002
[27](6,75000) 0,001
[28](7,00000) 0,001
[29](7,25000) 0,001
[30](7,50000) 0,001
[31](7,75000) 0,000
<Real> Exponencial
exp(0-t) + 0 j
N = 32
Eixo x
[0](0
,000
00)
[3](0
,750
00)
[6](1
,500
00)
[9](2
,250
00)
[12](3
,00
000)
[15](3
,75
000)
[18](4
,50
000)
[21](5
,25
000)
[24](6
,00
000)
[27](6
,75
000)
[30](7
,50
000)
Eix
o y
1
0,95
0,9
0,85
0,8
0,75
0,7
0,65
0,6
0,55
0,5
0,45
0,4
0,35
0,3
0,25
0,2
0,15
0,1
0,05
0
119
Figura 80 – Parte real da transformada de Fourier da exponencial.
Figura 81 - Parte imaginária da transformada de Fourier da exponencial.
[-16](0,00000) 0,018
[-15](0,25000) 0,018
[-14](0,50000) 0,018
[-13](0,75000) 0,018
[-12](1,00000) 0,018
[-11](1,25000) 0,018
[-10](1,50000) 0,018
[-9](1,75000) 0,019
[-8](2,00000) 0,019
[-7](2,25000) 0,02
[-6](2,50000) 0,022
[-5](2,75000) 0,024
[-4](3,00000) 0,028
[-3](3,25000) 0,035
[-2](3,50000) 0,052
[-1](3,75000) 0,094
[0](4,00000) 0,141
[1](4,25000) 0,094
[2](4,50000) 0,052
[3](4,75000) 0,035
[4](5,00000) 0,028
[5](5,25000) 0,024
[6](5,50000) 0,022
[7](5,75000) 0,02
[8](6,00000) 0,019
[9](6,25000) 0,019
[10](6,50000) 0,018
[11](6,75000) 0,018
[12](7,00000) 0,018
[13](7,25000) 0,018
[14](7,50000) 0,018
[15](7,75000) 0,018
<Real> Exponencial
exp(0-t) + 0 j
N = 32
Eixo x
[-16](0
,00000
)
[-13](0
,75000
)
[-10](1
,50000
)
[-7](2
,25000)
[-4](3
,00000)
[-1](3
,75000)
[2](4
,500
00)
[5](5
,250
00)
[8](6
,000
00)
[11](6
,75
000)
[14](7
,50
000)
Eix
o y
0,14
0,135
0,13
0,125
0,12
0,115
0,11
0,105
0,1
0,095
0,09
0,085
0,08
0,075
0,07
0,065
0,06
0,055
0,05
0,045
0,04
0,035
0,03
0,025
0,02
0,015
0,01
0,005
0
[-16](0,00000) 0
[-15](0,25000) 0,002
[-14](0,50000) 0,003
[-13](0,75000) 0,005
[-12](1,00000) 0,006
[-11](1,25000) 0,008
[-10](1,50000) 0,01
[-9](1,75000) 0,012
[-8](2,00000) 0,015
[-7](2,25000) 0,018
[-6](2,50000) 0,022
[-5](2,75000) 0,027
[-4](3,00000) 0,034
[-3](3,25000) 0,043
[-2](3,50000) 0,056
[-1](3,75000) 0,06
[0](4,00000) 0
[1](4,25000) -0,06
[2](4,50000) -0,056
[3](4,75000) -0,043
[4](5,00000) -0,034
[5](5,25000) -0,027
[6](5,50000) -0,022
[7](5,75000) -0,018
[8](6,00000) -0,015
[9](6,25000) -0,012
[10](6,50000) -0,01
[11](6,75000) -0,008
[12](7,00000) -0,006
[13](7,25000) -0,005
[14](7,50000) -0,003
[15](7,75000) -0,002
<Imag> Exponencial
exp(0-t) + 0 j
N = 32
Eixo x
[-16](0
,00000
)
[-13](0
,75000
)
[-10](1
,50000
)
[-7](2
,25000)
[-4](3
,00000)
[-1](3
,75000)
[2](4
,500
00)
[5](5
,250
00)
[8](6
,000
00)
[11](6
,75
000)
[14](7
,50
000)
Eix
o y
0,06
0,055
0,05
0,045
0,04
0,035
0,03
0,025
0,02
0,015
0,01
0,005
0
-0,005
-0,01
-0,015
-0,02
-0,025
-0,03
-0,035
-0,04
-0,045
-0,05
-0,055
-0,06
120
Se o leitor puder consultar BRIGHAM para fins de comparação, atente para o fato
de que esse autor não mostra seu resultado na forma convencional que seria de até .
Essa forma convencional está sendo adotada aqui.
A seguir, continuamos fazendo a inversa da transformada direta que obviamente
deverá resultar num sinal igual ao sinal original no domínio do tempo.
Figura 82 - Transformada inversa da transformada direta de fourier.
Concluindo, os resultados que o programa produz está de acordo com os
resultados presentes num exemplo idêntico de um dos livros do referencial bibliográfico.
9.2 Segundo Exemplo: Função Cosseno
Prosseguindo com a validação dos resultados, vamos resolver um exemplo
proposto por Haykin e Veen (2001, p. 171). 21
21 No DVD encontramos o vídeo “LabSinaisCos.wmv” mostrando esse exemplo. Consulte o
APÊNDICE D - “DVD” p.150 para maiores informações.
[0](0,00000) 1
[1](0,25000) 0,779
[2](0,50000) 0,607
[3](0,75000) 0,472
[4](1,00000) 0,368
[5](1,25000) 0,287
[6](1,50000) 0,223
[7](1,75000) 0,174
[8](2,00000) 0,135
[9](2,25000) 0,105
[10](2,50000) 0,082
[11](2,75000) 0,064
[12](3,00000) 0,05
[13](3,25000) 0,039
[14](3,50000) 0,03
[15](3,75000) 0,024
[16](4,00000) 0,018
[17](4,25000) 0,014
[18](4,50000) 0,011
[19](4,75000) 0,009
[20](5,00000) 0,007
[21](5,25000) 0,005
[22](5,50000) 0,004
[23](5,75000) 0,003
[24](6,00000) 0,002
[25](6,25000) 0,002
[26](6,50000) 0,002
[27](6,75000) 0,001
[28](7,00000) 0,001
[29](7,25000) 0,001
[30](7,50000) 0,001
[31](7,75000) 0,000
<Real> Exponencial
exp(0-t) + 0 j
N = 32
Eixo x
[0](0
,000
00)
[3](0
,750
00)
[6](1
,500
00)
[9](2
,250
00)
[12](3
,00
000)
[15](3
,75
000)
[18](4
,50
000)
[21](5
,25
000)
[24](6
,00
000)
[27](6
,75
000)
[30](7
,50
000)
Eix
o y
1
0,95
0,9
0,85
0,8
0,75
0,7
0,65
0,6
0,55
0,5
0,45
0,4
0,35
0,3
0,25
0,2
0,15
0,1
0,05
0
121
Esse exemplo consiste em encontrar a representação por DTFS para o sinal
discreto a seguir:
(9.2)
A solução que Haykin e Veen (2001) apresentam para o referido exercício é
descrito a seguir:
O período fundamental de é N = 16. Consequentemente, . Dessa
forma, escrevemos:
(9.3)
Comparando isso com a DTFS da Equação 5.10 (p.74) reescrita abaixo usando-se
um índice inicial k = -7:
(9.4)
E igualando os termos da Equação 9.3 e Equação 9.4, tendo freqüências iguais,
, resulta em:
(9.5)
122
Uma vez que tem período N = 16, temos e
similarmente com todos os outros valores de iguais a
zero. Ainda, a magnitude (ou espectro) de é igual á magnitude de que vale 0,5
para qualquer ângulo de fase . Isso é facilmente verificado fazendo:
(9.6)
Aqui, . Da Equação (4.3 (p.51) a magnitude
será expressa por:
(9.7)
Haykin e Veen resolveram esse exercício por meio de inspeção matemática em
função de . Para resolvê-lo usando o programa, precisamos definir um valor para .
Arbitrariamente, escolhemos = radianos que corresponde a um ângulo de fase igual a
graus. Assim, precisaremos alimentar o programa com esses dados na direção de resolvê-lo –
dessa vez – usando nosso software para validá-lo ao verificar os mesmos resultados.
Então, primeiramente, produzimos um sinal de entrada adequado. Note na
Equação (9.2 que o período fundamental N vale 16 uma vez que . Portanto como
123
N = 16, produziremos um sinal com 16 amostras da função .
Escolheremos igual a 0 e ∆ (passo) = 1.22
Na Figura 83 mostramos o sinal gerado.
Figura 83 - Parte real do sinal cosseno gerado.
A seguir prosseguimos realizando a transformada direta de Fourier. A Figura 84
mostra o gráfico encontrado.
Figura 84 - Espectro (Magnitude) da transformada do sinal.
Verifique que o resultado está de acordo com a resposta dada por Haykin e Veen.
De fato, quando k = , a componente espectral de freqüência é 0,5 com todos os outros
22 Esse sinal pode ser encontrado no DVD sob o nome “ValidandoResultados_Cosseno.ini”.
Consulte o APÊNDICE D - “DVD” p.150.
[0](0,00000) 0,707
[1](1,00000) 0,383
[2](2,00000) 0
[3](3,00000) -0,383
[4](4,00000) -0,707
[5](5,00000) -0,924
[6](6,00000) -1
[7](7,00000) -0,924
[8](8,00000) -0,707
[9](9,00000) -0,383
[10](10,00000) 0
[11](11,00000) 0,383
[12](12,00000) 0,707
[13](13,00000) 0,924
[14](14,00000) 1
[15](15,00000) 0,924
<Real> Cosseno
cos(t*(p/8)+p/4) + 0 j
N = 16
Eixo x
[0](0
,000
00)
[2](2
,000
00)
[4](4
,000
00)
[6](6
,000
00)
[8](8
,000
00)
[10](1
0,0
0000)
[12](1
2,0
0000)
[14](1
4,0
0000)
Eix
o y
1
0,8
0,6
0,4
0,2
0
-0,2
-0,4
-0,6
-0,8
-1
[-8](0,00000) 0
[-7](1,00000) 0
[-6](2,00000) 0
[-5](3,00000) 0
[-4](4,00000) 0
[-3](5,00000) 0
[-2](6,00000) 0
[-1](7,00000) 0,5
[0](8,00000) 0
[1](9,00000) 0,5
[2](10,00000) 0
[3](11,00000) 0
[4](12,00000) 0
[5](13,00000) 0
[6](14,00000) 0
[7](15,00000) 0
<Espectro> Cosseno
cos(t*(p/8)+p/4) + 0 j
N = 16
Eixo x
[-8](0
,00000)
[-6](2
,00000)
[-4](4
,00000)
[-2](6
,00000)
[0](8
,000
00)
[2](1
0,0
0000)
[4](1
2,0
0000)
[6](1
4,0
0000)
Eix
o y
0,5
0,4
0,3
0,2
0,1
0
124
valores de iguais a zero. Verifique isso na Figura 85 a seguir que apresenta um zoom da
Figura 84 anterior.
Figura 85 - Zoom do espectro.
Traçamos agora o gráfico da Fase da transformada do sinal. Verifique que a fase
do sinal está de acordo com aquela escolhida. Resolvemos colocar o eixo y na unidade de
graus para facilitar a análise do gráfico.
Figura 86 - Fase da transformada. O eixo y foi colocado em graus.
Por fim, verifique o zoom de um dos elementos do sinal no domínio de Fourier.
[-8](0,00000) 0
[-7](1,00000) 0
[-6](2,00000) 0
[-5](3,00000) 0
[-4](4,00000) 0
[-3](5,00000) 0
[-2](6,00000) 0
[-1](7,00000) 0,5
[0](8,00000) 0
[1](9,00000) 0,5
[2](10,00000) 0
[3](11,00000) 0
[4](12,00000) 0
[5](13,00000) 0
[6](14,00000) 0
[7](15,00000) 0
<Espectro> Cosseno
cos(t*(p/8)+p/4) + 0 j
N = 16
Eixo x
[-1](7
,00000)
[0](8
,000
00)
[1](9
,000
00)
Eix
o y
0,55
0,5
0,45
0,4
0,35
[-8](0,00000) 0
[-7](1,00000) 0
[-6](2,00000) 0
[-5](3,00000) 0
[-4](4,00000) 0
[-3](5,00000) 0
[-2](6,00000) 0
[-1](7,00000) -45
[0](8,00000) 0
[1](9,00000) 45
[2](10,00000) 0
[3](11,00000) 0
[4](12,00000) 0
[5](13,00000) 0
[6](14,00000) 0
[7](15,00000) 0
<Fase> Cosseno
cos(t*(p/8)+p/4) + 0 j
N = 16
Eixo x
[-8](0
,00000)
[-6](2
,00000)
[-4](4
,00000)
[-2](6
,00000)
[0](8
,000
00)
[2](1
0,0
0000)
[4](1
2,0
0000)
[6](1
4,0
0000)
Eix
o y
40
30
20
10
0
-10
-20
-30
-40
125
Figura 87 - Zoom da fase.
Dessa forma, o programa produz resultados de acordo com a teoria.
9.3 Terceiro Exemplo: Cosseno e Seno
Considere o seguinte sinal23
:
(9.8)
No programa esse sinal foi gerado amostrando a função:
(9.9)
Com variando de 0 a 63 com passo igual a um. Dessa forma, geramos o seguinte
gráfico:
23 Esse sinal pode ser encontrado no DVD sob o nome “ValidandoResultados_CossenoSeno.ini”.
Consulte o APÊNDICE D - “DVD” p.150.
[-8](0,00000) 0
[-7](1,00000) 0
[-6](2,00000) 0
[-5](3,00000) 0
[-4](4,00000) 0
[-3](5,00000) 0
[-2](6,00000) 0
[-1](7,00000) -45
[0](8,00000) 0
[1](9,00000) 45
[2](10,00000) 0
[3](11,00000) 0
[4](12,00000) 0
[5](13,00000) 0
[6](14,00000) 0
[7](15,00000) 0
<Fase> Cosseno
cos(t*(p/8)+p/4) + 0 j
N = 16
Eixo x
[0](8
,000
00)
[1](9
,000
00)
[2](1
0,0
0000)
Eix
o y
50
45
40
35
30
25
20
15
10
5
0
-5
126
Figura 88 - Sinal exemplo gerado pelo programa.
Para este sinal temos:
(9.10)
(9.11)
Como dois ciclos completos da segunda parcela terminam onde termina o
primeiro ciclo da primeira parcela o período fundamental será .
Então:
(9.12)
Onde,
(9.13)
e . Neste caso teremos:
<Real> Validacao_Slides
3*cos(t*p/32) + sen(t*p/16) + 0 j
N = 64
Eixo x
[-32](0
,00000
)
[-27](5
,00000
)
[-21](1
1,0
000
0)
[-15](1
7,0
000
0)
[-9](2
3,0
0000
)
[-4](2
8,0
0000
)
[1](3
3,0
0000)
[6](3
8,0
0000)
[11](4
3,0
0000)
[17](4
9,0
0000)
[22](5
4,0
0000)
[28](6
0,0
0000)
Eix
o y
3,5
3
2,5
2
1,5
1
0,5
0
-0,5
-1
-1,5
-2
-2,5
-3
-3,5
127
Considere e percebemos que os coeficientes de
Fourier serão tais que:
(9.14)
Agora, lembrando que:
(9.15)
Tentaremos reescrever o sinal de tal forma que seja possível compará-lo com
a Equação (9.14). Deste modo ficaremos com:
(9.16)
Agora, ordenando teremos:
(9.17)
Comparando com a Equação (9.14), podemos concluir que:
128
(9.18)
Note que estes coeficientes não são reais e assim o espectro de fase não será todo
nulo. Primeiramente escrevemos X[k] na forma polar e teremos:
(9.19)
Assim, o espectro de magnitude será:
(9.20)
Cujo gráfico é apresentado a seguir:
129
Figura 89 - Gráfico do Espectro de Magnitude gerado por outro software.24
Usando o programa, o gráfico do espectro de magnitude foi:
Figura 90 - Gráfico do Espectro de magnitude gerado pelo programa.
Note que os gráficos das figuras Figura 89 e Figura 90 são os mesmos.
Já o espectro de fase será:
(9.21)
E isto dará como gráfico (fase em radianos):
24 O software usado para gerar esses gráficos alternativos foi o GeoGebra. Acesse o site:
http://www.geogebra.org/cms/ para maiores informações.
<Espectro> Validacao_Slides
3*cos(t*p/32) + sen(t*p/16) + 0 j
N = 64
Eixo x
[-32](0
,00000
)
[-27](5
,00000
)
[-22](1
0,0
000
0)
[-16](1
6,0
000
0)
[-10](2
2,0
000
0)
[-4](2
8,0
0000
)
[1](3
3,0
0000)
[6](3
8,0
0000)
[11](4
3,0
0000)
[16](4
8,0
0000)
[21](5
3,0
0000)
[26](5
8,0
0000)
[31](6
3,0
0000)
Eix
o y
1,5
1,4
1,3
1,2
1,1
1
0,9
0,8
0,7
0,6
0,5
0,4
0,3
0,2
0,1
0
130
Figura 91 - Gráfico do espectro de fase gerado por outro software.25
Usando o programa, o gráfico do espectro de fase será (fase em graus):
Figura 92 - Gráfico do Espectro de Fase gerado pelo programa.
Note que os gráficos das figuras Figura 91 e Figura 92 são os mesmos (lembre-se
que o eixo y da primeira está em radianos enquanto na segunda, em graus). Agora, para
completar esse último exemplo vamos calcular a transformada inversa.
Lembrando que para qualquer número complexo vale:
(9.22)
Teremos,
25 O software usado para gerar esses gráficos alternativos foi o GeoGebra. Acesse o site:
http://www.geogebra.org/cms/ para maiores informações.
<Fase> Validacao_Slides
3*cos(t*p/32) + sen(t*p/16) + 0 j
N = 64
Eixo x
[-32](0
,00000
)
[-27](5
,00000
)
[-22](1
0,0
000
0)
[-16](1
6,0
000
0)
[-10](2
2,0
000
0)
[-4](2
8,0
0000
)
[1](3
3,0
0000)
[6](3
8,0
0000)
[11](4
3,0
0000)
[16](4
8,0
0000)
[21](5
3,0
0000)
[26](5
8,0
0000)
[31](6
3,0
0000)
Eix
o y
90
80
70
60
50
40
30
20
10
0
-10
-20
-30
-40
-50
-60
-70
-80
-90
131
(9.23)
Observando os dois gráficos das figuras Figura 89 e Figura 91 podemos concluir
sem dificuldades que:
(9.24)
Agora, como teremos e assim,
(9.25)
Ou seja,
(9.26)
E então teremos:
132
(9.27)
Reagrupando nos dá:
(9.28)
Agora, usando a Equação (9.15) teremos:
(9.29)
Por fim,
(9.30)
Assim, a função geradora original é:
(9.31)
133
Então, o que os gráficos de espectro de magnitude e espectro de fase realmente
mostram são as componentes de Fourier do sinal original. A transformada de Fourier
decompõe o sinal original em um somatório de senos e cossenos cujas amplitudes,
freqüências naturais e ângulos de fase são mostrados nos gráficos.
134
Capítulo 10 Conclusão
10.1 Conclusões
Nesse trabalho, utilizamos a Série de Tempo Discreto de Fourier sintetizada no
algoritmo da Transformada Rápida de Fourier para programar um software científico capaz de
processar qualquer imagem de sensoriamento multitemporal produzindo novas imagens
segundo o filtro configurado pelo usuário. Dependendo das configurações desse filtro, o
usuário pode, agora, remover erros presentes nas imagens. Assim, podemos constatar que
alcançamos completamente o Objetivo Geral enunciado no Tópico 1.2 – “Objetivo Geral”
(p.13).
Quanto aos Objetivos Específicos enunciados no Tópico 1.3 – “Objetivos
Específicos” (p.13), o Capítulo 4 – “Sinais” (p.43) e o Capítulo 5 – “Transformadas de
Fourier” (p.66) contribuíram para compreender e adaptar a teoria presente na Análise de
Fourier de forma a empregá-lo no processamento de imagens de sensoriamento remoto
multitemporais.
Já no Capítulo 7 – “Procedimento que iremos adotar para processar imagens de
sensoriamento remoto multitemporais usando a Transformada Rápida de Fourier” (p.86),
Capítulo 8 – “Programando o Software Científico” (p.96) e no Capítulo 9 – “Validando os
Resultados” (p.117), encontramos a modelagem computacional do problema, as estruturas de
dados necessárias à programação do software científico e a validação do programa de acordo
com a teoria.
Nos demais capítulos, explicamos todo o referencial teórico indispensável para o
completo entendimento do problema e da solução apresentada.
135
Dessa forma, pode-se dizer que alcançamos integralmente todos os objetivos
específicos desse trabalho solucionando completamente o problema apresentado no Capítulo
2 – “Apresentação do Problema” (p.16).
10.2 Sugestões para trabalhos futuros
Seguem-se três sugestões de trabalhos que podem ser desenvolvidos tomando esse
trabalho como referência:
Processamento usando as Transformadas de Fourier no Domínio Espacial -
Nesse trabalho, focalizamos o processamento de imagens no domínio do tempo. Uma
sugestão é efetuar esse processamento no domínio do espaço. Certamente já existem
softwares que efetuam filtros processando-se a imagem no domínio do espaço, mas a idéia
não deixa de ser boa para um trabalho em nível de monografia.
Processamento Temporal usando Análise por Wavelets – Existe outra teoria
matemática denominada de Análise por Wavelets ou simplesmente “Wavelets” onde podemos
aproximar um sinal para um somatório de funções de outras bases. Isso geraria muitos outros
filtros e constituiria um bom trabalho.
Análise de confiabilidade – Uma das críticas que esse trabalho recebeu foi que
não foi feita uma medição adequada que comparasse as imagens antes e depois dos filtros
mostrando o quanto melhorou ou o quanto mudou. Entretanto, essa análise requer fazer um
levantamento dos parâmetros que se quer medir e escolher e programar um dentre muitos
algoritmos existentes com essa função. Com certeza, esse trabalho não seria simples e daria
origem a um novo projeto final.
Com certeza, a primeira sugestão é a mais fácil de todas em razão de já existir
trabalhos semelhantes. A segunda sugestão possui um nível de médio para difícil já que, como
foi feito com a teoria das Transformadas de Fourier nesse trabalho, o autor teria de
136
compreender a teoria de Wavelets para poder fazer a modelagem computacional da mesma.
Por fim a última sugestão complementaria bastante esse trabalho. Em suma, são três boas
sugestões que produziriam três bons trabalhos.
137
Referências
Apache Software Foundation. (25 de 10 de 2008). Apache C++ Standard Library
(STDCXX). Acesso em 25 de 10 de 2008, disponível em Apache C++ Standard Library
(STDCXX): http://stdcxx.apache.org/
ARONOFF, S. (2005). Remote Sensing for GIS Managers. California: ESRI.
BRIGHAM, E. O. (1974). The Fast Fourier Transform. New Jersey: Prentice
Hall.
CARVALHO JUNIOR, O. A., HERMUCHE, P. M., & GUIMARÃES, R. F.
(2006). Identificação regional da floresta decidual na bacia do rio PARANÃ (GO/TO) a partir
da análise multitemporal de imagens MODIS. Revista Brasileira de Geofísica , 24, 319-332.
COOLEY, J. W., & TUKEY, J. W. (1965). An algorithm for machine calculation
of complex Fourier series (Vol. 19). Math Computation.
CRÓSTA, A. P. (1993). Processamento Digital de Imagens de Sensoriamento
Remoto. Campinas: Unicamp.
DANIELSON, G. C., & LANCZOS, C. (1942). Some improvements in practical
Fourier analysis and their application to X-ray scattering from liquids (Vol. 233). J. Franklin
Inst.
FLORENZANO, T. G. (2002). Imagens de Satélite para Estudos Ambientais. São
Paulo: Oficina de Textos.
Geogebra. (s.d.). Geogebra. Acesso em 30 de Outubro de 2008, disponível em
Geogebra: http://www.geogebra.org/cms/
GONÇALVES, L. A. (2004). Um estudo sobre a Transformada Rápida de
Fourier e seu uso em processamento de imagens. Porto Alegre.
GORMAN, L., SAMMON, M. J., & SEUL, M. (2008). Practical Algorithms for
Image Analysis (2 ed.). New York: Cambridge University Press.
HAYKIN, S., & VEEN, B. V. (2001). Sinais e Sistemas. (A. Laschuk, Ed., & J. C.
Santo, Trad.) Porto Alegre: Bookman.
JUSTICE, C. O., & TOWNSHEND, J. R. (2002). Special issue on the moderate
resolution imaging spectroradiometer (MODIS): a new generation of land surface monitoring.
Remote Sensing of Environment , 1-2.
MASTERS, T. (1995). Neural, Novel & Hybrid Algorithms for Time Series
Prediction. New York: John Wiley & Sons.
O'CONNOR, J. J., & ROBERTSON, E. F. (1997, January). Jean Baptiste Joseph
Fourier. Retrieved 10 10, 2008, from The MacTutor History of Mathematics archive:
http://www-history.mcs.st-andrews.ac.uk/Biographies/Fourier.html
PRESS, W. H., TEUKOLSKY, S. A., VETTERLING, W. T., & FLANNERY, B.
P. (1992). Numerical Recipes in C The Art of Scientific Computing (2 ed.). Cambridge, New
York, Port Chester, Melbourne, Sydney: Press Syndicate of the University of Cambridge.
RAMIREZ, R. W. (1985). The FFT Fundamentals and Concepts. New Jersey,
Englewood Cliffs: Prentice Hall.
Rogue Wave Software. (25 de 10 de 2008). C++ Standard Library. Acesso em 25
de 10 de 2008, disponível em RogueWave.com:
http://www.roguewave.com/products/sourcepro/standard-library.php
WILKIE, D. S., & FIN, J. T. (1996). Remote Sensing Imagery for Natural
Resources Monitoring – A GUIDE FOR FIRST TIME USERS. New York: Columbia
University.
138
WOODS, R. E., & GONZALES, R. C. (2001). Digital Image Processing (2 ed.).
New Jersey: Prentice Hall.
139
APÊNDICE A - Estruturas de Dados
Descrição: Nesse apêndice vamos apresentar alguns tipos de dados definidos usando as
estruturas de dados complex e valarrays definidas na C++ Standard Library. Abaixo
mostramos parte do header principal do programa onde as estruturas de dados principais
foram definidas. Comentamos esse código fonte sempre que necessário.
Início da Amostra de Código Fonte
#include <complex>
using std::complex;
#include <valarray>
using std::valarray;
typedef complex<float> TXFloat; //Tipo Float Complexo
typedef valarray<TXFloat> TXSinal;//Tipo Sinal de Float Complexo
typedef valarray<float> TFSinal;//Tipo Sinal de Float
typedef struct Sinal_stru{
TXSinal XSinal; //XSinal se for preciso
TFSinal FSinal; //FSinal se for preciso
//Em Relação ao Sinal
String Nome; //Nome do Sinal
//Em Relação à Imagem de Onde Ele foi Retirado
AnsiString FileName; //Caminho do Arquivo de Imagem do Qual o Sinal Foi Gerado
int px,py; //Localização da coordenada na imagem do qual o sinal foi extraído
//Em Relação as Posicoes Importantes
//Posição do Vetor onde ocorrem essas posicoes importantes
struct Pos_stru{
int mfn; //Menor (ou Maior) Frequencia Negativa (ou Positiva) mfn (cooresponde ao //0
do vetor ordenado)
int pnDe,pnAte; //Parte Negativa pnDe, pnAte
int fz; //Frequencia = 0 fz
int ppDe, ppAte; //Parte Positiva ppDe, ppAte
}pos;
}TSinal;
Final da Amostra de Código Fonte
140
APÊNDICE B - Algoritmos Desenvolvidos: Transformadas
Algoritmo: void __fastcall fft(int npoints, TFSinal *real,TFSinal *imag,int inv);
Descrição: Algoritmo que executa a transformada inversa ou direta de Fourier adaptada da
original para a Linguagem C++, as estruturas de dados que definimos e na
convenção de “normalização” que adotamos.
Entrada: npoints com o número N de elementos do sinal; dois ponteiros para vetores do
tipo TFSinal onde um vai conter a parte real do sinal (*real) e o outro vai
conter a parte imaginária do sinal (*imag); inv contendo o código para
transformada direta ou inversa. Se igual a -1, o algoritmo executa a
transformada direta, se igual a +1, o algoritmo executa a transformada inversa.
Saída: Como o algoritmo é feito in place, os vetores *real e *imag são substituídos
pela resposta.
Início do Algoritmo void __fastcall TFRppSFLib::fft(int npoints, TFSinal *real,TFSinal *imag,int inv){
register int i, index, swapindex, j, k;
register float tr, ti, angle, wr, wi;
/* SWAP THE INPUT ELEMENTS FOR THE DECIMATION IN TIME ALGORITHM. */
for (index = 1, swapindex = 0; index < npoints; index++)
{
k = npoints;
do
k /= 2;
while ((swapindex + k) >= npoints);
swapindex = (swapindex % k) + k;
if (swapindex <= index)
continue;
tr = real->operator[](index);
real->operator[](index) = real->operator[](swapindex);
real->operator[](swapindex) = tr;
ti = imag->operator[](index);
imag->operator[](index) = imag->operator[](swapindex);
imag->operator[](swapindex) = ti;
}
/*
* DO THE BUTTERFLY COMPUTATIONS.
* stage index: k = 1, 2, 4, 8 . . .
* For npoints = 8, for example, there will
* be three stages of butterfly computations.
* b'fly indices: i and j will be separated by a distance
* dependent on the current stage.
141
* k is used as the separation constant.
*/
for (k = 1; k < npoints; k *= 2)
for (index = 0; index < k; index++)
{
angle = (float) M_PI *((float) index * inv) / ((float) k);
wr = (float) cos (angle);
wi = (float) sin (angle);
for (i = index; i < npoints; i += 2 * k)
{
j = i + k;
tr = (wr * (real->operator[](j))) - (wi * (imag->operator[](j)));
ti = (wr * (imag->operator[](j))) + (wi * (real->operator[](j)));
real->operator[](j) = real->operator[](i) - tr;
imag->operator[](j) = imag->operator[](i) - ti;
real->operator[](i) += tr;
imag->operator[](i) += ti;
}
}
/* for inverse transform, scale output by 1/N */
if (inv == -1) //Ronie: Alterei aqui. Vou adotar a convenção do Haykin
for (i = 0; i < npoints; i++)
{
real->operator[](i) = real->operator[](i) / npoints;
imag->operator[](i) = imag->operator[](i) / npoints;
}
}
Final do Algoritmo
142
Algoritmo: void __fastcall fourier(TXSinal *XSinal, int isign);
Descrição: Algoritmos que serve de “ponte” entre as estruturas de dados da modelagem e
o algoritmo da fft adaptado.
Entrada: É fornecido um ponteiro para o vetor complexo do tipo TXSinal (*XSinal)
contendo o sinal que quer se transformar. Fornece-se também o isign que é um
código. Se isign for igual a +1, executamos a transformada direta e se for igual
a -1 executa-se a inversa. Perceba que aqui esse código é o contrário do código
da fft(..). Isso foi feito porque o programador achou que seria mais lógico usar
essa codificação. É claro que essa mudança é observada no código fonte.
Saída: O sinal complexo transformado é substituído no lugar do vetor complexo do
sinal de entrada.
Início do Algoritmo void __fastcall TFRppSFLib::fourier(TXSinal *XSinal, int isign){
int nM,i;
TFSinal sReal;
TFSinal sImag;
isign = isign*(-1); //Corrige o isign para a codificação do fft
//Se for fazer a inversa, ordena o sinal para voltar para o sinal nativo
if (isign > 0)
ordena(XSinal);
nM = XSinal->size();
sReal.resize(nM,0);
sImag.resize(nM,0);
for (i=0;i<nM;i++){
sReal[i] = XSinal->operator[](i).real();
sImag[i] = XSinal->operator[](i).imag();
}
fft(nM,&sReal,&sImag,isign);
for (i=0;i<nM;i++){
XSinal->operator[](i)._M_re = sReal[i];
XSinal->operator[](i)._M_im = sImag[i];
}
//Se tiver feito a direta, ordena o sinal para ficar em ordem crescente
if (isign < 0)
ordena(XSinal);
}
Final do Algoritmo
143
Algoritmo: void __fastcall ordena(TXSinal *XSinal);
Descrição: Usado para ordenar o sinal complexo que está no domínio da freqüência em
ordem crescente de freqüência.
Entrada: Um ponteiro para o sinal complexo.
Saída: O sinal complexo ordenado.
Início do Algoritmo //Ordena Sinal: Coloca da Menor Frequencia Até a Maior
//Se for usada novamente, faz o inverso (coloca na forma nativa)
void __fastcall TFRppSFLib::ordena(TXSinal *XSinal){
int nM,n,cont;
float aux;
int nDe,nAte, nM2;
nM = XSinal->size();
TXSinal sxCp(*XSinal);//Faz uma cópia do Sinal Original
//Frequencias Mínima e Máxima (são iguais)
aux = nM/2;
nM2 = ceil(aux);
//Zera o Contador
cont = 0;
//##################################
//Menor Frequencia Negativa
XSinal->operator[](cont) = sxCp[nM2];
cont++;
//Parte Negativa
//De N/2 + 1
aux = nM/2 + 1;
nDe = ceil(aux);
//Ate N - 1
nAte = nM - 1;
for (n = nDe; n <= nAte; n++){
XSinal->operator[](cont) = sxCp[n];
cont++;
}
//Frequencia = 0
XSinal->operator[](cont) = sxCp[0];
cont++;
//Parte Positiva
//De 1
144
nDe = 1;
//Ate N/2 - 1
aux = nM/2 - 1;
nAte = ceil(aux);
for (n = nDe; n <= nAte; n++){
XSinal->operator[](cont) = sxCp[n];
cont++;
}
//Maior Frequencia Positiva (Omite)
//XSinal->operator[](cont) = sxCp[nM2];
//cont++;
//##################################
}
Final do Algoritmo
145
APÊNDICE C - Algoritmos Desenvolvidos:
Processamento
Algoritmo: void __fastcall pegaSinal();
Descrição: Essa função auxiliar será usada na função Execute () com objetivo de percorrer
um determinado ponto da imagem extraindo um sinal da imagem que será
processado.
Início do Algoritmo void __fastcall thCriaImagem::pegaSinal(){
int i;
FRppSFLib->sxNSinal = FRppSFLib->sxLimpo; //Limpa Sinal Antigo
for (i = 0; i < thqtband; i++){
FRppSFLib->sxNSinal[i]._M_re = FRppSFLib->Img-
>pixel2(&i,&thNLINHA,&thNCOLUNA);
FRppSFLib->sxNSinal[i]._M_im = 0;
}
}
Final do Algoritmo
146
Algoritmo: void __fastcall trataSinal();
Descrição: Essa função auxiliar tem o objetivo de processar o sinal extraído da imagem
usando a função pegaSinal () anterior. Aqui procede-se com a transformação
direta, o filtro e a transformação inversa retornando um sinal filtrado já no
domínio do tempo.
Início do Algoritmo void __fastcall thCriaImagem::trataSinal(){
int i;
//Cria o Fourier
FRppSFLib->fourier(&FRppSFLib->sxNSinal,1);
//Aplica o Filtro
if (FRppSFLib->FILTRO_nCk == 2){
//Caso Passa Alta e Passa Baixo
for (i = 0; i < thpow2;i++)
if (FRppSFLib->FILTRO_bExclui){
if ( (i >= FRppSFLib->FILTRO_nDe) && (i <= FRppSFLib->FILTRO_nAte)){
FRppSFLib->sxNSinal[i]._M_re = 0;
FRppSFLib->sxNSinal[i]._M_im = 0;
}
}
else
{
if ( (i <= FRppSFLib->FILTRO_nDe) || (i >= FRppSFLib->FILTRO_nAte)){
FRppSFLib->sxNSinal[i]._M_re = 0;
FRppSFLib->sxNSinal[i]._M_im = 0;
}
}
}
else
{//Só sobrou o caso FRppSFLib->FILTRO_nCk == 1
for (i = 0; i < thpow2;i++)
if (FRppSFLib->FILTRO_bExclui){
if (i <= FRppSFLib->FILTRO_nDe){
FRppSFLib->sxNSinal[i]._M_re = 0;
FRppSFLib->sxNSinal[i]._M_im = 0;
}
}
else
{
if (i >= FRppSFLib->FILTRO_nDe){
FRppSFLib->sxNSinal[i]._M_re = 0;
FRppSFLib->sxNSinal[i]._M_im = 0;
}
}
}
//Cria o Tempo Filtrado
FRppSFLib->fourier(&FRppSFLib->sxNSinal,-1);
}
Final do Algoritmo
147
Algoritmo: void __fastcall gravaSinal();
Descrição: Essa última função auxiliar tem por objetivo gravar o sinal já filtrado no
domínio do tempo resultante da função trataSinal () na nova imagem que está
sendo gerada pelo programa.
Início do Algoritmo
void __fastcall thCriaImagem::gravaSinal(){
int i;
float vY;
for (i = 0; i < thqtband; i++){
vY = FRppSFLib->sxNSinal[i].real();
FRppSFLib->NImg->setpixel(&i,&thNLINHA,&thNCOLUNA,&vY);
}
}
Final do Algoritmo
148
Algoritmo: void __fastcall Execute();
Descrição: Essa é a função principal responsável por criar a nova imagem e proceder com
todo o processamento. Ela utiliza as funções apresentadas anteriormente. O
usuário já deve ter escolhido a imagem original que será processada e já deve
ter configurado um filtro.
Início do Algoritmo
void __fastcall thCriaImagem::Execute()
{
int nLinha,nColuna;
//Largura = x = Colunas = nColunas
//Altura = y = Linhas = nLinhas
bool pok;
//Final de Tudo
Synchronize(tempoStart);
//Prepara Imagem Resposta
pok = FRppSFLib->NImg->novo_img(thFilename,"Filtro",DateToStr(Date()), thqtband,
thlargura, thaltura, 0, 4, FRppSFLib->Img->bandanomes,
FRppSFLib->Img->bandadatas,FRppSFLib->Img->classes,FRppSFLib->Img-
>georef,FRppSFLib->Img->bandacomp);
//Imagem Resposta Preparada
Synchronize(WaitBoxImagemCriada);
//Processa Imagem Original e Cria Imagem Resposta
for (nLinha = 0; nLinha < thaltura; nLinha++){
//Faz alguma coisa a cada Linha Terminada ANTES
for (nColuna = 0; nColuna < thlargura; nColuna++){
//Processamento
thNLINHA = nLinha;
thNCOLUNA = nColuna;
Synchronize(pegaSinal);
Synchronize(trataSinal);
Synchronize(gravaSinal);
//Fim do Processamento
}/*fim for nColuna*/
//Faz alguma coisa a cada Linha Terminada DEPOIS
Synchronize(atualizaProgresso);
if (!bCont)
break;
}/*fim for nLinha*/
149
//Fechar arquivo gerado
Synchronize(finaliza);
//Final de Tudo
Synchronize(WaitBoxImagemProcessada);
}
Final do Algoritmo
150
APÊNDICE D - DVD
Nesse apêndice iremos descrever os recursos encontrados no DVD que
acompanha essa monografia. Esses recursos são basicamente: O aplicativo de instalação do
programa FiltroTemporal.exe; exemplos de imagens de sensoriamento remoto multitemporais
originais e filtradas; exemplos de sinais controlados e de sinais obtidos a partir das referidas
imagens e uma re-compilação do Tópico 8.5 – “Processando Imagens Multitemporais”
(p.102) e 8.6 – “Laboratório de Sinais” (p.112) em um arquivo PDF para servir de guia na
utilização do programa.
Desse modo, a seguir comentaremos cada arquivo ou conjunto de arquivos
incluídos no DVD.
Ao inserir o DVD no drive de DVD-ROM de seu computador ele deverá inicar a
instalação do software automaticamente mostrando a janela ilustrada na Figura 93 a seguir.
Caso isso não aconteça você pode executar Setup.exe ou FiltroTemporal.msi a partir do DVD.
Figura 93 - Tela inicial da instalação.
O progresso de instalação é o padrão. Note apenas que o usuário pode escolher a
instalação Típica que inclui todos os exemplos, a instalação Mínima que inclui apenas o
programa ou escolher quais itens irá querer instalar usando a instalação Customizada. As
explicações que se seguem valem-se da premissa de que a instalação Típica foi escolhida.
151
Após a instalação, haverá três atalhos na Área de Trabalho do usuário. Um deles é
um atalho para o programa. O outro é um atalho para o PDF citado. O terceiro é um atalho
para a pasta contendo os exemplos de imagens e de sinais. A seguir comentaremos cada
arquivo desses exemplos e seu conteúdo.
Pasta Imagens – Imagens de Exemplo
o Originais – Contem três imagens multitemporais (.img). Essas são
as imagens usadas ao longo dessa monografia para os diversos
exemplos utilizados.
o Filtradas – Contem algumas imagens filtradas geradas por esse
programa.
Pasta Sinais – Sinais de Exemplo
o Controlados – Sinais controlados usados nessa monografia.
o DeImagens – Sinais obtidos a partir de imagens. Seu nome está na
forma nome_X_Y em que nome representa de qual imagem aquele
sinal foi extraído e X e Y são as coordenadas do ponto de onde o
sinal foi obtido.
Pasta Vídeos – Vídeos de Exemplo
o VisãoGeral.wmv – Visão geral do programa introduzindo as
principais janelas.
o Filtros.wmv – Como criar os quatro filtros usando a interface de
Filtros do programa.
o ProcessandoImagens.wmv – Vídeo mostrando o passo a passo para
se filtrar uma imagem.
o LabSinaisExp.wmv – Vídeo mostrando o exemplo do Tópico 9.1 –
“Primeiro Exemplo: Função Exponencial” (p.117).
152
o LabSinaisCos.wmv – Vídeo mostrando o exemplo do Tópico 9.2 –
“Segundo Exemplo: Função Cosseno” (p.120).
o LbSinaisEx1.wmv – Mais um exemplo do uso do “Laboratório de
Sinais”: como gerar sinais.
o labSinaisEx2 – Mais outro exemplo do uso do “Laboratório de
Sinais”: visualizar vários sinais ao mesmo tempo.
Pasta Adicionais – Arquivos adicionais
o MonografiaRoniePP.pdf – Cópia dessa monografia em formato
pdf.
o klcodec431s.exe – Pacote de CODECs para visualizar os vídeos.
É importante observar que o formato dos vídeos é o WMA/WMV. Se o seu
computador não reproduzi-los, talvez seja necessário instalar alguns CODECS
(Codificadores/Decodificadores) para esse formato de vídeo. Nesse caso, incluímos no DVD
um pacote de CODECS chamado K LITE que pode ser encontrado na pasta “Adicionais” sob
o nome “klcodec431s.exe”. Informações sobre esse pacote de CODECS pode ser encontrado
no site: http://www.codecguide.com/features_standard.htm.
153
ANEXO A - O Algoritmo da Transformada Rápida de Fourier (FFT)
Descrição: O algoritmo da transformada de Fourier que programamos nesse trabalho foi
extraído do livro de GORMAN, SAMMON, & SEUL, 2008. Como dados de entrada são
fornecidos dois vetores, um contendo os N números reais (real) e o outro, os N números
imaginários (imag) correspondentes aos N números complexos de entrada. Também é
requerido especificar o tamanho de N (npoints) que já deve ser uma potência de 2. Por fim,
requer-se também um número inteiro (inv). Se inv for igual a -1, o algoritmo retorna a
transformada direta de tempo discreto de Fourier, se inv for igual a +1, o algoritmos retorna a
inversa. Finalmente, vale destacar que o algoritmos é feito in place, isso é, os elementos dos
vetores de entrada de dados real e imag são substituídos pelos elementos dos vetores de saída.
Início do Algoritmo /*
* fft.c
*
* Practical Algorithms for Image Analysis
*
* Copyright (c) 1997, 1998, 1999 MLMSoftwareGroup, LLC
*/
#define PI 3.14159265358979
/*
* fft()
* DESCRIPTION:
* Uses time decomposition with input bit reversal. The Cooley/Tookey
* Fortran scheme for doing recursive odd/even decimation without really
* doing bit reversal is used. The computation is done in place, so the
* output replaces the input. The contents of the arrays are changed
* from the input data to the FFT coefficients.
* ARGUMENTS:
* npoints(int) the number of points in the FFT. Must be a power of 2.
* real, imag(float *) pointers to arrays of floats for input and output.
* inv(int) inv = 1 for inverse transform
* inv = -1 for forward transform
* RETURN VALUE:
* none
*/
void
fft (npoints, real, imag, inv)
int npoints, inv;
float *real, *imag;
{
register int i, index, swapindex, j, k;
register float tr, ti, angle, wr, wi;
154
double sin (), cos ();
/* SWAP THE INPUT ELEMENTS FOR THE DECIMATION IN TIME ALGORITHM. */
for (index = 1, swapindex = 0; index < npoints; index++)
{
k = npoints;
do
k /= 2;
while ((swapindex + k) >= npoints);
swapindex = (swapindex % k) + k;
if (swapindex <= index)
continue;
tr = real[index];
real[index] = real[swapindex];
real[swapindex] = tr;
ti = imag[index];
imag[index] = imag[swapindex];
imag[swapindex] = ti;
}
/*
* DO THE BUTTERFLY COMPUTATIONS.
* stage index: k = 1, 2, 4, 8 . . .
* For npoints = 8, for example, there will
* be three stages of butterfly computations.
* b'fly indices: i and j will be separated by a distance
* dependent on the current stage.
* k is used as the separation constant.
*/
for (k = 1; k < npoints; k *= 2)
for (index = 0; index < k; index++)
{
angle = (float) PI *((float) index * inv) / ((float) k);
wr = (float) cos (angle);
wi = (float) sin (angle);
for (i = index; i < npoints; i += 2 * k)
{
j = i + k;
tr = (wr * (real[j])) - (wi * (imag[j]));
ti = (wr * (imag[j])) + (wi * (real[j]));
real[j] = real[i] - tr;
imag[j] = imag[i] - ti;
real[i] += tr;
imag[i] += ti;
}
}
/* for inverse transform, scale output by 1/N */
if (inv == 1)
155
for (i = 0; i < npoints; i++)
{
real[i] = real[i] / npoints;
imag[i] = imag[i] / npoints;
}
}
Final do Algoritmo
156
ANEXO B - A Biblioteca TImagem
Descrição: O Dr. Nilton Correia da Silva desenvolveu em 2003 uma biblioteca de funções
para acessar e manipular imagens de sensoriamento remoto chamada TImagem. Nesse anexo
mostraremos apenas os métodos disponíveis nessa classe que foram realmente utilizados pelo
programa comentando brevemente cada um. Essa biblioteca é propriedade intelectual e,
portanto, não podemos mostrar os algoritmos desses métodos.
Início dos Métodos
//Declaração de uma variável da classe TImagem
TImagem *Img;
//Carregar header ou imagens tipo bitmaps
bool carrega_imagem(AnsiString nome, AnsiString extensao);
Método usado para carregar imagens passando como parâmetros o caminho
completo do arquivo (nome) e a sua extensão (extensão).
//Fecha uma imagem
void Fecha();
Método usado para fechar uma imagem previamente carregada.
//Carrega uma das bandas da imagem atual em uma estrutura
//Graphics::TBitmap de 8 bits (256 tons de cinza)
Graphics::TBitmap *carrega_bitmap(int pbanda);
Métodos usados para visualizar alguma banda da imagem previamente carregada.
//Atualiza histograma
//pdlin,pdcol = intervalos de leitura de valores (subamostragem)
void atualiza_histograma(int pbanda, int pdlin, int pdcol, int ptipo, float ppercI, float
ppercF);
Método usado para gerar o histograma da imagem antes de carregar seu bitmap.
//Cria nova imagem
bool novo_img(AnsiString pnomarq, AnsiString pdescricao, AnsiString pdtimg, int
pqtband,int pqtcol, int pqtlin, int ptseqpix,int ptdn, AnsiString *pnomes, AnsiString
*pdatas, TClasses *pclas,TProje *pgref, AnsiString *pcomp);
Método usado para criar uma nova imagem.
//Retorna o valor do pixel
float __fastcall pixel2(int *b, int *y, int *x );
Método usado para receber o valor float do pixel que está na banda b na
coordenada (x,y).
Final dos Métodos
157
CENTRO UNIVERSITÁRIO DE BRASÍLIA
RONIE PAULUCIO PORFIRIO
PROCESSAMENTO DE IMAGENS DE SENSORIAMENTO REMOTO
MULTITEMPORAIS USANDO A TRANSFORMADA RÁPIDA DE FOURIER
FILTRO TEMPORAL
Brasília
2008