Escolar Documentos
Profissional Documentos
Cultura Documentos
FILTRO TEMPORAL
Brasília
2008
2
FILTRO TEMPORAL
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
3
AGRADECIMENTOS
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.
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 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.
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
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 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
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.
questões. Todavia, são raras as imagens multitemporais que possibilitam uma análise e
provenientes de diversos fatores como nuvens, sombras, suspensão de partículas sólidas no ar,
etc.
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
sinais e até mesmo sobre sensoriamento remoto, certamente a leitura desse trabalho será
proveitosa.
1.1 Motivação
destinadas à resolução dos mais diversos problemas. Nesse trabalho, os esforços foram
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
essa transformada para processar imagens. Para tanto, será necessário definir as estruturas de
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.
Também é aqui que definimos o que é uma imagem de sensoriamento remoto multitemporal.
matemático que deu origem ao principal método numérico que assume importância central
fazemos o que o título desse capítulo informa, ou seja, detalhamos todo o processo escolhido
sensoriamento remoto multitemporais é corrigir erros. De fato, esses erros podem ser
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
ruído que estamos descrevendo. Veja que enquanto o sinal percorre o tempo, existem
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
Perceba que o sinal vermelho “tenta percorrer o mesmo caminho” que o sinal azul, mas agora
Multitemporais
homem consegue obter dados sobre os mais diferentes fenômenos observáveis desde imagens
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
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
mudanças que o objeto impõe ao campo circunvizinho.” Isso é importante já que mostra que
20
eletromagnético inteiro.
realizada de maneira passiva, ouvindo-se o campo (sinal) que é emitido naturalmente pelo
variações no campo acústico, isto é, ele ilumina intencionalmente o meio ao seu redor
5 que capta dados em diferentes faixas espectrais sendo três da região do visível e quatro da
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
interessa é apenas introduzir o conceito de sensoriamento remoto para então poder explicar
processamento que esse trabalho se propõe a fazer. O próximo tópico fará uma breve
“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,
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
que o termo “imagem” assumirá uma nova conotação muito mais abrangente do que aquela a
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
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
(3.1)
Onde,
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
humano enxerga a energia (luz) eletromagnética sendo capaz de distinguir as cores do violeta
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
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
“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
Chamamos essa faixa do espectro de canal ou banda1. Assim, podemos ter várias
cada uma pertencente a um canal diferente, isto é, uma determinada faixa do espectro
características das imagens de sensoriamento remoto que esse conceito de canal será uma de
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
remoto.
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
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
afirma, a órbita é o caminho que o satélite faz em volta da terra. (2002, p. 23). Quando a
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
cada 30 minutos. O sensor a bordo desse satélite opera em um canal visível, com uma
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
“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
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
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
LANDSAT
país recebe imagens dele desde 1973 através de uma antena da estação de recepção do INPE
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
Scanner System) que operavam em quatro canais, sendo dois na faixa do espectro visível e
o TM (Thematic Mapper) que opera em sete canais sendo três na faixa do visível, um no
resolução espacial é de 30 metros (exceto para o canal termal, que é de 120 metros).
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
(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.
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
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
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 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
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
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
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.
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
pixel. Quanto menor, menor será essa intensidade de energia e, portanto, mais próximo do
pelos diferentes materiais presentes numa determinada área da superfície terrestre (o pixel)
conseqüentemente, podemos aferir que naquela região houve pouca reflexão ou emissão de
número crescer, mais claro, isto é, mais próximo do branco será o nível de cinza e, assim
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
metros, isto é, um pixel na imagem corresponde a uma área terrestre de 30 por 30 metros (ou
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
Sensoriamento Remoto: a resolução espacial. Contudo, existem mais dois tipos de parâmetros
resolução radiométrica.
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
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
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
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
imagem em si – características essas que serão importantes para se decidir entre uma forma de
processamento ou outra.
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.
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
estamos usando para exemplificar os diferentes conceitos desse capítulo. Essa banda é um
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
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,
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
como vimos no Tópico 3.3.1- “Estrutura das Imagens de Sensoriamento Remoto” (p. 28)
um arquivo por imagem gerando, assim, muitos arquivos; muitas vezes é mais cômodo criar
computador que armazena, de alguma forma, diversas matrizes bidimensionais – cada uma
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
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
importante já que é a partir daqui que nasceram conceitos como imagem multiespectral e
imagem multitemporal.
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
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
conjunto de bandas.
corresponderão a níveis de cinza a menos que algo mais seja dito a respeito da
Canal: O termo canal preserva seu sentido usado no tópico 3.2.2 – “Sensores
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
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,
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
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.
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 .
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
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.
importante deixar esses conceitos bem claros, pois os mesmos serão importantes no Capítulo
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
trabalho
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
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
Canastra.
41
A segunda imagem multitemporal também já foi apresentada pelo menos uma vez
Trata-se de uma imagem onde podemos identificar a região conhecida como Campo de
entre algumas bandas dessa imagem onde colocamos algumas referenciais para que o leitor
Na Figura 9, como foi dito, o círculo vermelho é a região conhecida como Campo
originam do mesmo sensor chamado sensor MODIS: O sensor Moderate Resolution Imaging
gelo no mar. Este sensor está a bordo das plataformas Terra e Aqua, lançadas,
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)
Nesse trabalho, as duas imagens anteriormente descritas são ambas do tipo NDVI
Capítulo 4 Sinais
O forte desse trabalho recai no processamento dos sinais que são extraídos das
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.
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
“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
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
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
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
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.
Um processo físico pode ser descrito tanto no domínio do tempo pelos valores de
uma amplitude (geralmente um número complexo que indica, também, a fase). (PRESS,
função” [grifo nosso] (2001). Mas não uma função qualquer, uma função na “qual veicula
46
domínio representa a grandeza física (tempo, espaço, frequência) que é usada para medir a
informação.
responsável por transformar esses sinal do domínio do tempo para o domínio da frequência
Como cada banda está num tempo diferente, o sinal se encontra no domínio do tempo.
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
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
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
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
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.
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
um sinal contínuo a uma taxa uniforme. Contudo, vale observar que nem todo sinal discreto é
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
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 à
(4.1)
50
Onde, é o número imaginário tal que . Dessa forma, um número complexo possui
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
(4.2)
origem do diagrama cartesiano ao ponto que se obtêm traçando paralelas aos eixos
(4.3)
( 4.4)
como um único vetor de módulo (ou cumprimento) igual à magnitude inclinado em relação à
representar cada pixel por um número complexo visto que tratamos apenas de números reais.
Fourier de um sinal qualquer age sobre um sinal complexo retornando outro sinal, também,
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
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
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?
complexo: só a parte real, só a parte imaginária, a magnitude (ou espectro), a fase e a norma
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)
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
<Real> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
1
0,5
Eixo y
-0,5
-1
[0](
[6](
[13
[21
[29
[37
[45
[53
[61
](13
](21
](29
](37
](45
](53
](61
0,0
6,0
00 0
00 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
0)
0)
000
000
000
000
000
000
000
)
)
Eixo x
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
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
9
Esse sinal nomeado “cosseno32_64_p4.ini” se encontra no DVD que acompanha essa
<Real> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
0,35
0,3
0,25
Eixo y
0,2
0,15
0,1
0,05
0
[-32
[-24
[-16
[-8](
[0](
[7](
[15
[23
[31
](47
](55
](63
32,0
39,0
](0,0
](8,0
](16
24,0
,0 0
,0 0
,0 0
0 00
0 00
,00
000
000
000
000
000
000
00 0
0)
0)
0)
0)
0)
)
)
Eixo x
somente a parte imaginária do sinal complexo. Isso não é muito utilizado porque quando
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
<Imag> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo y
0
[0](
[6](
[13
[21
[29
[37
[45
[53
[61
](13
](21
](29
](37
](45
](53
](61
0,0
6,0
00 0
00 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
0)
0)
000
000
000
000
000
000
000
)
Eixo x
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
que iguais a zero que não podem ser desprezados. Na Figura 23 a seguir elucidamos com uma
figura.
56
<Imag> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
0,3
0,2
0,1
Eixo y
0
-0,1
-0,2
-0,3
[-32
[-24
[-16
[-8](
[0](
[7](
[15
[23
[31
](47
](55
](63
32,0
39,0
](0,0
](8,0
](16
24,0
,0 0
,0 0
,0 0
0 00
0 00
,00
000
000
000
000
000
000
00 0
0)
0)
0)
0)
0)
)
)
Eixo x
Magnitude ou Espectro de cada número complexo que forma o sinal. Estamos falando da
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.
magnitude. Perceba que se trata de uma cópia do sinal real com a parte negativa espelhada em
relação ao eixo x.
<Espectro> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
1
0,8
0,6
Eixo y
0,4
0,2
0
[0](
[6](
[13
[21
[29
[37
[45
[53
[61
](13
](21
](29
](37
](45
](53
](61
0,0
6,0
00 0
00 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
0)
0)
000
000
000
000
000
000
000
)
Eixo x
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.
Espectro.
<Espectro> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
0,5
0,4
0,3
Eixo y
0,2
0,1
0
[-32
[-24
[-16
[-8](
[0](
[7](
[14
[22
[30
](46
](54
](62
32,0
39,0
](0,0
](8,0
](16
24,0
,0 0
,0 0
,0 0
0 00
0 00
,00
000
000
000
000
000
000
00 0
0)
0)
0)
0)
0)
)
)
Eixo x
4.4.1.4 Fase
complexos é optando-se por ver o valor da fase do sinal no eixo y. A fase de um elemento é
a parte imaginária dos elementos desse sinal são todas nulas, também serão as fases. A Figura
26 elucida isso.
<Fase> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
Eixo y
0
[0](
[6](
[13
[21
[29
[37
[45
[53
[61
](13
](21
](29
](37
](45
](53
](61
0,0
6,0
00 0
00 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
0)
0)
000
000
000
000
000
000
000
)
Eixo x
diversas fases de cada elemento do sinal faz mais sentido. A Figura 27 mostra a fase do sinal
no domínio da freqüência.
<Fase> cosseno32_64_p4
cos(t*(2*p/32) + p/4) + 0 j
N = 64
40
20
Eixo y
-20
-40
[-32
[-24
[-16
[-8](
[0](
[7](
[15
[23
[31
](47
](55
](63
32,0
39,0
](0,0
](8,0
](16
24,0
,0 0
,0 0
,0 0
0 00
0 00
,00
000
000
000
000
000
000
00 0
0)
0)
0)
0)
0)
)
)
Eixo x
(4.6)
0,8
0,6
Eixo y
0,4
0,2
0
[0](
[6](
[13
[21
[29
[37
[45
[53
[61
](13
](21
](29
](37
](45
](53
](61
0,0
6,0
00 0
00 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
,0 0
0)
0)
000
000
000
000
000
000
000
)
Eixo x
todos os exemplos.
0,2
0,15
Eixo y
0,1
0,05
0
[-32
[-24
[-16
[-8](
[0](
[7](
[14
[22
[30
](46
](54
](62
32,0
39,0
](0,0
](8,0
](16
24,0
,0 0
,0 0
,0 0
0 00
0 00
,00
000
000
000
000
000
000
00 0
0)
0)
0)
0)
0)
)
)
Eixo x
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
mostradas usando dessa vez um sinal real obtido da imagem de sensoriamento remoto
10
Esse sinal nomeado “NDVI_2000_2007_RP_100_100.ini” se encontra no DVD que acompanha
<Real> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 165
0,8
0,6
Eixo y 0,4
0,2
0
[0](
[18
[38
[58
[78
[98
[11
[14
](18
](38
](58
](78
](98
9] (1
2] (1
0,0
00 0
,0 0
,0 0
,0 0
,0 0
,0 0
19 ,
42 ,
0)
000
000
000
000
000
000
000
)
00)
00)
Eixo x
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,
número de elementos desse sinal para a maior potência de 2 mais próxima de 180 que, nesse
Fazendo isso, obtemos o sinal a seguir, ainda no domínio do tempo que agora sim
<Real> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
0,8
0,6
Eixo y
0,4
0,2
0
[0](
[27
[57
[87
[12
[15
[18
[21
[24
](27
](57
](87
0] (1
5] (1
7] (0
7] (0
7] (0
0,0
00 0
,0 0
,0 0
,0 0
20 ,
55 ,
,0 0
,0 0
,0 0
0)
000
000
000
000
000
000
000
000
)
00)
00)
Eixo x
necessária.
61
<Imag> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo y
0
[0](
[27
[57
[87
[11
[15
[18
[21
[24
](27
](57
](87
9] (1
4] (1
6] (0
6] (0
6] (0
0,0
00 0
,0 0
,0 0
,0 0
19 ,
54 ,
,0 0
,0 0
,0 0
0)
000
000
000
000
000
000
000
000
)
00)
00)
)
Eixo x
Normalmente a parte imaginária não é mostrada por ser nula no caso de sinais
temporais.
<Espectro> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
0,8
0,6
Eixo y
0,4
0,2
0
[0](
[27
[57
[87
[12
[15
[18
[21
[24
](27
](57
](87
0] (1
5] (1
7] (0
7] (0
7] (0
0,0
00 0
,0 0
,0 0
,0 0
20 ,
55 ,
,0 0
,0 0
,0 0
0)
000
000
000
000
000
000
000
000
)
00)
00)
)
Eixo x
Nesse caso, por não existirem valores negativos nesse sinal, e por se tratar de um
<Fase> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
Eixo y
0
[0](
[27
[57
[87
[11
[15
[18
[21
[24
](27
](57
](87
9] (1
4] (1
6] (0
6] (0
6] (0
0,0
00 0
,0 0
,0 0
,0 0
19 ,
54 ,
,0 0
,0 0
,0 0
0)
000
000
000
000
000
000
000
000
)
00)
00)
Eixo x
Figura 34 – Fase.
62
0,6
Eixo y
0,4
0,2
[0](
[27
[57
[87
[12
[15
[18
[21
[24
](27
](57
](87
0] (1
5] (1
7] (0
7] (0
7] (0
0,0
00 0
,0 0
,0 0
,0 0
20 ,
55 ,
,0 0
,0 0
,0 0
0)
000
000
000
000
000
000
000
000
)
00)
00)
)
Eixo x
cada uma das representações seguidas de um zoom das mesmas para melhor visualizar os
<Real> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
0,25
0,2
0,15
Eixo y
0,1
0,05
0
-0,05
[-12
[-96
[-64
[-32
[0](
[32
[62
[90
[11
](16
](0,
](0,
9] (0
128
8](0
](32
](64
](96
00 0
00 0
,0 0
0, 0
,0 0
,00
,00
,00
,00
000
000
00)
00)
000
00 0
00 0
00 0
00 0
0)
)
)
Eixo x
<Real> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
0,25
0,2
0,15
Eixo y
0,1
0,05
0
-0,05
[-31
[-22
[-13
[-4]
[4](
[12
[21
[30
](14
](14
](15
(
132
](97
](10
](11
124
,0 0
0, 0
9, 0
8, 0
,00
6,0
5,0
,00
000
000
000
000
00 0
00 0
00 0
00 0
0)
0)
0)
)
0)
0)
Eixo x
Essa forma de representação não será usada, pois esconde informação (a parte
<Imag> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
0,1
0,05
Eixo y
0
-0,05
-0,1
[-12
[-96
[-64
[-32
[0](
[31
[61
[89
[11
](15
](0,
](0,
8] (0
128
8](0
](32
](64
](96
00 0
00 0
,0 0
9, 0
,0 0
,00
,00
,00
,00
000
000
00)
00)
000
00 0
00 0
00 0
00 0
0)
)
)
)
Eixo x
Perceba que há informação na parte imaginária que não pode ser desprezada.
<Imag> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
0,1
0,05
Eixo y
-0,05
-0,1
[-10
[-6]
[-2]
[2](
[6](
[10
[14
](13
](14
(
130
134
](11
122
126
,0 0
,0 0
8, 0
2, 0
8,0
,00
,00
000
000
000
000
00 0
00 0
00 0
0)
0)
0)
Eixo x
<Espectro> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
0,25
0,2
Eixo y
0,15
0,1
0,05
0
[-12
[-96
[-64
[-32
[0](
[32
[62
[90
[11
](16
](0,
](0,
9] (0
128
8](0
](32
](64
](96
00 0
00 0
,0 0
0, 0
,0 0
,00
,00
,00
,00
000
000
00)
00)
000
00 0
00 0
00 0
00 0
0)
)
)
Eixo x
<Espectro> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
0,25
0,2
Eixo y
0,15
0,1
0,05
0
[-4]
[-2]
[0](
[2](
[4](
(
128
130
132
124
126
,0 0
,0 0
,0 0
,00
,00
000
000
000
00 0
00 0
)
)
Eixo x
<Fase> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
50
Eixo y
-50
[-12
[-97
[-65
[-33
[-1]
[31
[61
[89
[11
](15
](0,
](0,
8] (0
(
8](0
](31
](63
](95
127
00 0
00 0
9, 0
,0 0
,00
,00
,00
,00
,00
000
00)
00)
000
00 0
00 0
00 0
00 0
00 0
0)
)
)
)
Eixo x
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.
<Fase> D:\NDVI_RPreto\NDVI_2000_2007_RP.img
+ j
N = 256
50
Eixo y
-50
[-2]
[-1]
[0](
[1](
[2](
(
128
129
130
126
127
,0 0
,0 0
,0 0
,00
,00
000
000
000
00 0
00 0
)
)
Eixo x
Cada ponto do sinal possui uma fase. Aqui o eixo das ordenadas está em graus. A
Entretanto, muitas vezes o diagrama de fase é omitido deixando para ser usado somente
Eixo y
0,04
0,03
0,02
0,01
0
[-12
[-96
[-64
[-32
[0](
[32
[62
[90
[11
](16
](0,
](0,
9] (0
128
8](0
](32
](64
](96
00 0
00 0
,0 0
0, 0
,0 0
,00
,00
,00
,00
000
000
00)
00)
000
00 0
00 0
00 0
00 0
0)
)
)
)
Eixo x
0,04
0,03
0,02
0,01
0
[-32
[-23
[-14
[-5]
[3](
[11
[20
[29
](13
](14
](15
(
131
](96
](10
](11
123
,0 0
9, 0
8, 0
7, 0
,00
5,0
4,0
,00
000
000
000
000
00 0
00 0
00 0
00 0
0)
0)
0)
)
0)
0)
Eixo x
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
multitemporais.
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
logarítmica. Por exemplo, para determinar o valor de um quociente com uma boa
caminho é dividir à mão – o que pode resultar numa conta trabalhosa. O segundo caminho é
momento, consulta-se uma tabela com os valores dos logaritmos, realiza-se a subtração e
inversa para, finalmente, encontrar o valor de Y desejado. Esse exemplo mostra que há várias
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,
histórico sobre esse excepcional cientista cuja transformada leva o nome, prosseguiremos com
algoritmo da Transformada Rápida de Fourier (FFT, do inglês Fast Fourier Transform) que é
5.2 Histórico
tornou órfão muito jovem, pois sua mãe morreu quando ele
tinha nove anos e o seu pai quando ele tinha dez. Internado
Mesmo assim, persistiu em seu interesse pela matemática mantendo contato com seu antigo
votos religiosos e visitou Paris onde apresentou um artigo à Academia Real de Ciências
68
francesa sobre as suas pesquisas para a solução de equações numéricas. Em 1790 tornou-se
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
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
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
Polytechnique sob a direção de Lazare Carnot e Gaspard Monge. Nessa época, iniciou uma
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
e teórico sobre a propagação do calor que lhe permitiu modelar a evolução da temperatura
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
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.
domínio do tempo para o domínio da freqüência. São ferramentas matemáticas para o que
de condução de calor servindo para inúmeras áreas de estudo incluindo sistemas lineares,
“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:
apenas mais uma representação de Fourier dentre as quatro existentes. Não confunda,
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
estivéssemos tratando sinais de tempo discretos não periódicos. E que dessa forma, a DTFT
se que isso era um equívoco. Esse equívoco tornou-se claro ao nos depararmos com o
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
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
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
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,
filtro.
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
11
Novamente, vale salientar que alguns livros mostram a Série de Fourier de Tempo Discreto sob
transformar funções de um domínio para o outro. Embora aquela que nos interesse seja a de
seguir que é comumente chamado de Par de Transformações de Fourier já que elas mostram
(5.1)
(5.2)
para um mesmo sinal. Enquanto é a função que representa o sinal no domínio do tempo,
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
(5.3)
73
(5.4)
(5.5)
(5.6)
ou , respectivamente.
equações a seguir:
(5.7)
(5.8)
Agora, segundo Haykin e Veen a representação por Discrete Time Fourier Series
é dada por:
(5.9)
(5.10)
tempo. é o número complexo e e variam livremente desde que essa variação esteja
fundamental N e .
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
“Inverse Discrete Fourier Transform” no idioma inglês propositadamente apara mostrar que
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,
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.
transformada direta de Fourier, teremos que calcular para k variando de 0 até N-1.
elementos. Assim, o total de vezes que fazemos esses cálculos para transformar um vetor de N
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.
possuirmos um sinal com 100 amostras de tempo, será preciso 10.000 operações para realizar
sinais, e cada sinal pode chegar a possuir 180 elementos, seriam necessários
inteira!
O( que são mais rápidas que as O( . No exemplo de nossa imagem, isso reduz o
76
deles, aquele adotado nesse projeto, será apresentado no tópico que se segue.
5.4.1 Histórico
da década de 60 a partir dos trabalhos dos cientistas J.W. Cooley e J.W. Tukey.
tempo discreto de Fourier foi descoberta independentemente e desenvolvidos por uma dúzia
5.4.2 O método
partir dos trabalhos de J.W. Cooley e J.W. Tukey (1965). Danielson e Lanczos (1942)
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
(5.11)
do inglês quer dizer par) da original. , por sua vez, representa o -ésimo componente da
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
12
Recomenda-se consultar Haykin e Veen (2001, p. 325) onde se encontra uma forma alternativa
, podemos submeter cada um desses cálculos a novas reduções. Por exemplo, podemos
Embora, existam formas de tratar outros casos, o mais fácil deles é quando o
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
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.
tamanho 1. E o que é a transformada e Fourier de tamanho 1? Não é nada mais do que uma
para algum
(5.12)
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
tamanho 2,4,8,...,N. Para cada etapa desse loop externo há dois loops internos alinhados que
segundo a ordem bit reversa para depois construir-se a transformada usando iterações.
transformada para depois reordenar os elementos. Nesse caso, o nome que é dado é
5.4.3 O Algoritmo
encontrado no livro de GORMAN, SAMMON, & SEUL, 2008. Como dados de entrada são
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.
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.
Sensoriamento Remoto
saída ou resposta.
que se quer alcançar com esse processamento. A literatura está cheia de livros sobre o assunto
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:
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
comprimir imagens.
Já CRÓSTA, por sua vez, apresenta outras formas de processar imagens, dentre as
quais:
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
fato de a aplicabilidade de um processamento como esse ser bastante específico – o que torna
multitemporais
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.
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
trabalho, como o erro que se apresenta na forma de ruído nos sinais por causa de sua natureza
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
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
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.
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
Fourier
Haja vista esse trabalho ser relativamente novo, isso é, por existir pouca coisa na
multitemporais, isto é, o procedimento que iremos adotar para nos levar a atingir o nosso
multitemporais consiste em sete processos (ou etapas) listados e comentados a seguir. Cada
multitemporal o qual vamos querer processar. Essa imagem será o dado de entrada do qual
Multitemporal ilustrada na Figura 48. Essa imagem multitemporal vai servir de dado de
podemos traçar um sinal temporal. Se a imagem possuir linhas por colunas, então o total
um ponto diferente.
88
presentes na imagem. Essa é a finalidade máxima de todo esse trabalho: poder filtrar esses
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
5. Aplicar a transformada inversa nesse sinal filtrado de forma a voltar para o domínio
do tempo;
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
O sinal é então gravado numa nova imagem multitemporal que é gerada a partir
sinais.
90
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
Figura 54 Imagem multitemporal resposta gerada a partir do filtro que foi aplicado.
multitemporal resposta. Ainda, nas ilustrações a seguir podemos ver uma mesma banda da
7.2 Os Filtros
Uma vez estando o sinal no domínio da freqüência, temos que aplicar algum tipo
desejável ou não é tarefa do usuário que está operando o programa que estamos
freqüências indesejadas e manter os valores de freqüências desejadas. Assim, nesse projeto foi
(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
16
No DVD encontramos um vídeo chamado “Filtros.wmv” mostrando como criar esses filtros no
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
para separar as altas das baixas freqüências, filtros passa-banda e para-banda precisam de dois
freqüências determinados pelo usuário. Assim, se , por exemplo, o usuário escolhe os valores
maiores ou iguais que serão mantidas, eliminando-se todas as demais frequências que não
iguais que e maiores ou iguais que serão eliminadas, mantendo-se todas as demais
freqüências.
executado para cumprir com os objetivos desse trabalho bem como os filtros que foram
programados.
96
Até agora não nos preocupamos com relação aos aspectos do programa em si.
utilizadas para modelar os sinais, pelas bibliotecas de funções e pelos principais algoritmos
Desde que foi desenvolvida pelo Doutor Bjarne Stroustrup em 1980, a linguagem C++ tem
dessa linguagem aliada à rica literatura associada a ela foram as principais razões dessa
computador o fenômeno que ele quer representar e com o qual ele quer interagir. Podemos
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.
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
Apache Software Foundation que o torna livre de licenças comerciais restritivas. (Rogue
Deste modo, são duas as estruturas de dados presentes nessa biblioteca que
estruturas de dados ou classes de dados foram usadas em conjunto para podermos modelar e
Nos tópicos a seguir falaremos um pouco dessas duas classes e mostraremos como
A classe complex é uma estrutura de dados usada para criar objetos para
que elas sejam utilizadas juntamente a outros tipos numéricos da linguagem C++ permitindo
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
dados unidimensionais que serão usadas para desempenhar cálculos sem prejudicar o
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.
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.
existem diversas formas de armazenar uma imagem em um arquivo de computador. Cada uma
seguintes formatos de arquivo de imagem para computadores: img, tif, bmp, gif, jpg, ras, sgi,
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
manipulação dessas imagens foram providos usando as funções dessa biblioteca. Essa
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
programa não é importante uma vez que você pode encontrar informações sobre isso em
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).
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
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
Transformada” (p.140) que mostrará esse algoritmo adaptado comentando aonde foi feita essa
alteração.
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
função fourier(...) acima exposta. Seu papel é fazer a inversão dos valores das freqüências do
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
De fato, o leitor pode ter percebido que muitas ilustrações encontradas até agora
programa final fruto da aplicação de toda a teoria encontrada até agora nessa monografia.
imagem.17
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
primeira janela que aparece. Trata-se a janela principal do programa com o seguintes menus:
Para exemplificar abrirmos o arquivo pnsc_ndvi.img. Essa imagem está na pasta Imagens do
Após abrir a imagem, veja que os dados referentes a essa imagem são carregados
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
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
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
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.
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.
exatamente como a janela “Domínio do Tempo” com a diferença de que na primeira o sinal já
azul das duas janelas mostra o sinal original, os gráficos vermelhos mostram, em tempo real,
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
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
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
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
lendo cada posição da imagem original, extraindo um sinal temporal, transformando para o
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
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
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
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:
Fourier direta ou inversa em algum sinal cujo N não seja uma potência de
se o N do sinal original for igual a 12, “Zero Pad” irá adicionar quatro
“Inverso”.
transformada”.
“Ao mostrar” possui dois radiogroups usados para configurar a janela que
que será mostrado. Naturalmente, quando o sinal que será mostrado está
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
18
Um vídeo exemplo mostrando como gerar sinais usando o programa pode ser encontrado no
Os valores de inicio e o passo podem ser decimais. Você pode até mesmo usar
O usuário ainda pode definir algumas expressões no grupo de Testes para ver
calcular expressões complexas definidas pelo usuário, alguns avisos devem ser
feitos:
ou .
Transformada Rápida de Fourier que foi programado ao utilizá-la para analisar sinais
controlados.
(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
7,75 com passo igual a 0,25. Considere a Figura 79 a seguir gerada pelo programa.20
<Real> Exponencial
exp(0-t) + 0 j
N = 32
[0](0,00000) 1
1 [1](0,25000) 0,779
0,95 [2](0,50000) 0,607
0,9 [3](0,75000) 0,472
[4](1,00000) 0,368
0,85
[5](1,25000) 0,287
0,8 [6](1,50000) 0,223
0,75 [7](1,75000) 0,174
0,7 [8](2,00000) 0,135
[9](2,25000) 0,105
0,65
[10](2,50000) 0,082
0,6 [11](2,75000) 0,064
0,55 [12](3,00000) 0,05
Eixo y
[3](
[6](
[9](
[12
[15
[18
[21
[24
[27
[30
[28](7,00000) 0,001
](3,
](3,
](4,
](5,
](6,
](6,
](7,
0,0
0,7
1,5
2,2
[29](7,25000) 0,001
00 0
50 0
00 0
50 0
00 0
75 0
50 0
25 0
00 0
75 0
50 0
[30](7,50000) 0,001
0)
0)
0)
0)
00)
00)
00)
00)
00)
00)
00)
[31](7,75000) 0,000
Eixo x
20
Esse sinal pode ser encontrado no DVD sob o nome “ValidandoResultados_Exponencial.ini”.
<Real> Exponencial
exp(0-t) + 0 j
N = 32
0,14 [-16](0,00000) 0,018
[-15](0,25000) 0,018
0,135 [-14](0,50000) 0,018
0,13 [-13](0,75000) 0,018
0,125 [-12](1,00000) 0,018
[-11](1,25000) 0,018
0,12
[-10](1,50000) 0,018
0,115 [-9](1,75000) 0,019
0,11 [-8](2,00000) 0,019
0,105 [-7](2,25000) 0,02
[-6](2,50000) 0,022
0,1 [-5](2,75000) 0,024
0,095 [-4](3,00000) 0,028
0,09 [-3](3,25000) 0,035
[-2](3,50000) 0,052
0,085
[-1](3,75000) 0,094
0,08 [0](4,00000) 0,141
0,075 [1](4,25000) 0,094
Eixo y
[2](4,50000) 0,052
0,07
[3](4,75000) 0,035
0,065 [4](5,00000) 0,028
0,06 [5](5,25000) 0,024
0,055 [6](5,50000) 0,022
[7](5,75000) 0,02
0,05 [8](6,00000) 0,019
0,045 [9](6,25000) 0,019
0,04 [10](6,50000) 0,018
[11](6,75000) 0,018
0,035
[12](7,00000) 0,018
0,03 [13](7,25000) 0,018
0,025 [14](7,50000) 0,018
0,02 [15](7,75000) 0,018
0,015
0,01
0,005
0
[-16
[-13
[-10
[-7]
[-4]
[-1]
[2](
[5](
[8](
[11
[14
](6,
](7,
(
4,5
5,2
6,0
](0,
](0,
](1,
2,2
3,0
3,7
00 0
50 0
00 0
75 0
50 0
000
750
500
500
000
500
0)
0)
0)
00)
00)
00 )
00 )
00 )
0)
0)
0)
Eixo x
<Imag> Exponencial
exp(0-t) + 0 j
N = 32 [-16](0,00000) 0
0,06 [-15](0,25000) 0,002
0,055 [-14](0,50000) 0,003
0,05 [-13](0,75000) 0,005
0,045 [-12](1,00000) 0,006
0,04 [-11](1,25000) 0,008
0,035 [-10](1,50000) 0,01
0,03 [-9](1,75000) 0,012
0,025 [-8](2,00000) 0,015
0,02 [-7](2,25000) 0,018
0,015 [-6](2,50000) 0,022
0,01 [-5](2,75000) 0,027
0,005 [-4](3,00000) 0,034
Eixo y
0 [-3](3,25000) 0,043
-0,005 [-2](3,50000) 0,056
-0,01 [-1](3,75000) 0,06
-0,015 [0](4,00000) 0
-0,02 [1](4,25000) -0,06
-0,025 [2](4,50000) -0,056
-0,03 [3](4,75000) -0,043
-0,035 [4](5,00000) -0,034
-0,04 [5](5,25000) -0,027
-0,045 [6](5,50000) -0,022
-0,05 [7](5,75000) -0,018
-0,055 [8](6,00000) -0,015
-0,06 [9](6,25000) -0,012
[10](6,50000) -0,01
[-16
[-13
[-10
[-7]
[-4]
[-1]
[2](
[5](
[8](
[11
[14
[11](6,75000) -0,008
](6,
](7,
(
4,5
5,2
6,0
](0,
](0,
](1,
2,2
3,0
3,7
[12](7,00000) -0,006
00 0
50 0
00 0
75 0
50 0
000
750
500
500
000
500
[13](7,25000) -0,005
0)
0)
0)
00)
00)
00 )
00 )
00 )
0)
0)
0)
[14](7,50000) -0,003
Eixo x [15](7,75000) -0,002
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é .
<Real> Exponencial
exp(0-t) + 0 j
N = 32 [0](0,00000) 1
1 [1](0,25000) 0,779
0,95 [2](0,50000) 0,607
0,9 [3](0,75000) 0,472
[4](1,00000) 0,368
0,85
[5](1,25000) 0,287
0,8 [6](1,50000) 0,223
0,75 [7](1,75000) 0,174
0,7 [8](2,00000) 0,135
[9](2,25000) 0,105
0,65
[10](2,50000) 0,082
0,6 [11](2,75000) 0,064
0,55 [12](3,00000) 0,05
Eixo y
[3](
[6](
[9](
[12
[15
[18
[21
[24
[27
[30
[27](6,75000) 0,001
](3,
](3,
](4,
](5,
](6,
](6,
](7,
0,0
0,7
1,5
2,2
[28](7,00000) 0,001
00 0
50 0
00 0
50 0
00 0
75 0
50 0
25 0
00 0
75 0
50 0
[29](7,25000) 0,001
0)
0)
0)
0)
00)
00)
00)
00)
00)
00)
00)
[30](7,50000) 0,001
Eixo x [31](7,75000) 0,000
21
No DVD encontramos o vídeo “LabSinaisCos.wmv” mostrando esse exemplo. Consulte o
discreto a seguir:
(9.2)
descrito a seguir:
forma, escrevemos:
(9.3)
Comparando isso com a DTFS da Equação 5.10 (p.74) reescrita abaixo usando-se
(9.4)
, resulta em:
(9.5)
122
zero. Ainda, a magnitude (ou espectro) de é igual á magnitude de que vale 0,5
(9.6)
(9.7)
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.
Equação (9.2 que o período fundamental N vale 16 uma vez que . Portanto como
123
<Real> Cosseno
cos(t*(p/8)+p/4) + 0 j
N = 16 [0](0,00000) 0,707
1 [1](1,00000) 0,383
[2](2,00000) 0
0,8 [3](3,00000) -0,383
[4](4,00000) -0,707
0,6 [5](5,00000) -0,924
[6](6,00000) -1
0,4
[7](7,00000) -0,924
0,2 [8](8,00000) -0,707
[9](9,00000) -0,383
Eixo y
0 [10](10,00000) 0
[11](11,00000) 0,383
-0,2 [12](12,00000) 0,707
[13](13,00000) 0,924
-0,4
[14](14,00000) 1
-0,6 [15](15,00000) 0,924
-0,8
-1
[0](
[2](
[4](
[6](
[8](
[10
[12
[14
](10
](12
](14
0,0
2,0
4,0
6,0
8,0
00 0
00 0
00 0
00 0
00 0
,0 0
,0 0
,0 0
0)
0)
0)
0)
0)
000
000
000
)
)
Eixo x
<Espectro> Cosseno
cos(t*(p/8)+p/4) + 0 j [-8](0,00000) 0
N = 16 [-7](1,00000) 0
0,5 [-6](2,00000) 0
[-5](3,00000) 0
0,4
[-4](4,00000) 0
0,3 [-3](5,00000) 0
Eixo y
[-2](6,00000) 0
0,2 [-1](7,00000) 0,5
[0](8,00000) 0
0,1 [1](9,00000) 0,5
0 [2](10,00000) 0
[3](11,00000) 0
[-8]
[-6]
[-4]
[-2]
[0](
[2](
[4](
[6](
[4](12,00000) 0
(
8,0
10,
12,
14,
0,0
2,0
4,0
6,0
[5](13,00000) 0
00 0
00 0
00 0
00 0
000
000
000
000
[6](14,00000) 0
0)
00)
00)
00)
[7](15,00000) 0
0)
0)
0)
0)
Eixo x
Verifique que o resultado está de acordo com a resposta dada por Haykin e Veen.
22
Esse sinal pode ser encontrado no DVD sob o nome “ValidandoResultados_Cosseno.ini”.
valores de iguais a zero. Verifique isso na Figura 85 a seguir que apresenta um zoom da
Figura 84 anterior.
<Espectro> Cosseno
cos(t*(p/8)+p/4) + 0 j [-8](0,00000) 0
N = 16 [-7](1,00000) 0
0,55 [-6](2,00000) 0
[-5](3,00000) 0
0,5 [-4](4,00000) 0
[-3](5,00000) 0
Eixo y
0,45 [-2](6,00000) 0
[-1](7,00000) 0,5
0,4 [0](8,00000) 0
[1](9,00000) 0,5
[2](10,00000) 0
0,35
[3](11,00000) 0
[-1]
[0](
[1](
[4](12,00000) 0
(
8,0
9,0
7,0
[5](13,00000) 0
00 0
00 0
000
[6](14,00000) 0
0)
0)
[7](15,00000) 0
0)
Eixo x
do sinal está de acordo com aquela escolhida. Resolvemos colocar o eixo y na unidade de
<Fase> Cosseno
cos(t*(p/8)+p/4) + 0 j
[-8](0,00000) 0
N = 16
[-7](1,00000) 0
40 [-6](2,00000) 0
[-5](3,00000) 0
30 [-4](4,00000) 0
20 [-3](5,00000) 0
[-2](6,00000) 0
10
[-1](7,00000) -45
Eixo y
0 [0](8,00000) 0
-10 [1](9,00000) 45
[2](10,00000) 0
-20 [3](11,00000) 0
-30 [4](12,00000) 0
[5](13,00000) 0
-40
[6](14,00000) 0
[7](15,00000) 0
[-8]
[-6]
[-4]
[-2]
[0](
[2](
[4](
[6](
(
8,0
10,
12,
14,
0,0
2,0
4,0
6,0
00 0
00 0
00 0
00 0
000
000
000
000
0)
00)
00)
00)
0)
0)
0)
0)
Eixo x
<Fase> Cosseno
cos(t*(p/8)+p/4) + 0 j
[-8](0,00000) 0
N = 16
[-7](1,00000) 0
50
[-6](2,00000) 0
45 [-5](3,00000) 0
40 [-4](4,00000) 0
35 [-3](5,00000) 0
30 [-2](6,00000) 0
25 [-1](7,00000) -45
Eixo y
20 [0](8,00000) 0
15 [1](9,00000) 45
[2](10,00000) 0
10
[3](11,00000) 0
5
[4](12,00000) 0
0 [5](13,00000) 0
-5 [6](14,00000) 0
[7](15,00000) 0
[0](
[1](
[2](
8,0
9,0
10,
00 0
00 0
00 0
0)
0)
00)
Eixo x
(9.8)
(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”.
<Real> Validacao_Slides
3*cos(t*p/32) + sen(t*p/16) + 0 j
N = 64
3,5
3
2,5
2
1,5
1
0,5
Eixo y
0
-0,5
-1
-1,5
-2
-2,5
-3
-3,5
[-32
[-27
[-21
[-15
[-9](
[-4](
[1](
[6](
[11
[17
[22
[28
](43
](49
](54
](60
33,0
38,0
](0,0
](5,0
](11
](17
23,0
28,0
,0 0
,0 0
,0 0
,0 0
0 00
0 00
,00
,00
000
000
000
000
000
000
000
000
00 0
00 0
0)
0)
0)
0)
0)
0)
)
)
)
Eixo x
(9.10)
(9.11)
Então:
(9.12)
Onde,
(9.13)
(9.14)
(9.15)
Tentaremos reescrever o sinal de tal forma que seja possível compará-lo com
(9.16)
(9.17)
(9.18)
Note que estes coeficientes não são reais e assim o espectro de fase não será todo
(9.19)
(9.20)
<Espectro> Validacao_Slides
3*cos(t*p/32) + sen(t*p/16) + 0 j
N = 64
1,5
1,4
1,3
1,2
1,1
1
0,9
Eixo y
0,8
0,7
0,6
0,5
0,4
0,3
0,2
0,1
0
[-32
[-27
[-22
[-16
[-10
[-4](
[1](
[6](
[11
[16
[21
[26
[31
](43
](48
](53
](58
](63
33,0
38,0
](0,0
](5,0
](10
](16
](22
28,0
,0 0
,0 0
,0 0
,0 0
,0 0
0 00
0 00
,00
,00
,00
000
000
000
000
000
000
000
000
00 0
00 0
00 0
0)
0)
0)
0)
0)
)
)
Eixo x
(9.21)
24
O software usado para gerar esses gráficos alternativos foi o GeoGebra. Acesse o site:
<Fase> Validacao_Slides
3*cos(t*p/32) + sen(t*p/16) + 0 j
N = 64
90
80
70
60
50
40
30
20
10
Eixo y
0
-10
-20
-30
-40
-50
-60
-70
-80
-90
[-32
[-27
[-22
[-16
[-10
[-4](
[1](
[6](
[11
[16
[21
[26
[31
](43
](48
](53
](58
](63
33,0
38,0
](0,0
](5,0
](10
](16
](22
28,0
,0 0
,0 0
,0 0
,0 0
,0 0
0 00
0 00
,00
,00
,00
000
000
000
000
000
000
000
000
00 0
00 0
00 0
0)
0)
0)
0)
0)
)
)
Eixo x
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
(9.22)
Teremos,
25
O software usado para gerar esses gráficos alternativos foi o GeoGebra. Acesse o site:
(9.23)
(9.24)
(9.25)
Ou seja,
(9.26)
E então teremos:
132
(9.27)
(9.28)
(9.29)
Por fim,
(9.30)
(9.31)
133
Capítulo 10 Conclusão
10.1 Conclusões
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
(p.13).
multitemporais.
com a teoria.
Seguem-se três sugestões de trabalhos que podem ser desenvolvidos tomando esse
softwares que efetuam filtros processando-se a imagem no domínio do espaço, mas a idéia
aproximar um sinal para um somatório de funções de outras bases. Isso geraria muitos outros
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
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
Por fim a última sugestão complementaria bastante esse trabalho. Em suma, são três boas
Referências
#include <complex>
using std::complex;
#include <valarray>
using std::valarray;
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){
/*
* 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
Início do Algoritmo
void __fastcall TFRppSFLib::fourier(TXSinal *XSinal, int isign){
int nM,i;
TFSinal sReal;
TFSinal sImag;
//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
Descrição: Usado para ordenar o sinal complexo que está no domínio da freqüência em
ordem crescente de freqüência.
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();
//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++;
}
Processamento
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
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
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
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
bool pok;
//Final de Tudo
Synchronize(tempoStart);
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
//Final de Tudo
Synchronize(WaitBoxImagemProcessada);
}
Final do Algoritmo
150
APÊNDICE D - DVD
originais e filtradas; exemplos de sinais controlados e de sinais obtidos a partir das referidas
(p.102) e 8.6 – “Laboratório de Sinais” (p.112) em um arquivo PDF para servir de guia na
utilização do programa.
incluídos no DVD.
Caso isso não aconteça você pode executar Setup.exe ou FiltroTemporal.msi a partir do DVD.
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
um atalho para o programa. O outro é um atalho para o PDF citado. O terceiro é um atalho
exemplos utilizados.
programa.
principais janelas.
Filtros do programa.
pdf.
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
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
/*
* 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.
*/
//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.
FILTRO TEMPORAL
Brasília
2008