Guia do IDL - Cap?tulo L:

Rotinas do ENVI

Neste capítulo serão apresentadas algumas rotinas do ENVI, que são executadas através do IDL.
Existem atualmente mais de 150 rotinas de processamento do ENVI disponíveis, que abrangem virtualmente todas as funcionalidades fornecidas no programa. O processamento de cada rotina é feita da mesma forma que nos procedimentos ou funções do IDL, e é usada da mesma forma que qualquer outra rotina do IDL.

 

Palavras-chave Comuns para Rotinas de Processamento do ENVI

Quando é adquirida maior experiência em processamentos de rotinas do ENVI poderá ser observado que há diversas palavras-chave que são comuns para cada rotina. Estas palavras-chave fazem o controle básico de entrada e saída do arquivo que será processado.

FID

O ID do arquivo (File ID) é um long integer. O FID é fornecido ao programador como uma variável nomeada por uma das diversas rotinas do ENVI que podem ser usados para usar para abrir ou selecionar um arquivo. Todo o processado de um arquivo usando uma rotina do ENVI é realizado consultando seu FID. Entretanto, se você estiver trabalhando com o arquivo diretamente no IDL, o FID não é equivalente a um número de unidade lógico.
Se houver algum problema para abrir ou acessar um arquivo, o FID irá receber -1. FDIs com valor -1 são inválidos e não podem mais serem processados. Um programador de IDL que utiliza as rotinas do ENVI, deve sempre checar a possibilidade do FID, R_FID, e M_FID serem inválidos. Quando um arquivo de ID inválido é encontrado, você geralmente retorna apenas para a atual rotina em processo.

R_FID e M_FID

As rotinas do ENVI que resultam em novas imagens terão um R_FID, ou a palavra-chave correspondente ao FID de retorno. Se os resultados forem somente salvos na memória, o único método para acessá-los será ativando a palavra-chave R_FID. Rotinas que permitem o uso de máscara devem ter um M_FID, ou uma palavra-chave equivalente ao M_FID para especificar que o arquivo use uma máscara de banda "mask band".

DIMS

A palavra-chave das dimensões (DIMS) é uma matriz ou vetor de inteiros longos (long integer array) com 5 elementos, que define um subconjunto (subset) regional (de um arquivo ou uma matriz ou vetor) que será usado no processamento. Quase sempre que você especificar um FID, você terá também que especificar qual subconjunto regional deste arquivo será usado (mesmo com um arquivo completo, sem um subconjunto regional, para ser processado).
Deve ser salientado que no IDL os índices são começados em zero, como comentado anteriormente neste guia.

DIMS[0] = um ponteiro para abrir uma região de interesse, usada apenas nos casos onde um subconjunto regional é definido pela região de interesse (ROI), caso contrário ele receberá -1.

DIMS [1] = o número que começa a coluna (X) (uma subscrição de uma matriz ou vetor na base zero do IDL).

DIMS [2] = o número que termina a coluna (X).

DIMS [3] = o número que começa a linha (Y).

DIMS [4] = o número que termina a linha (Y).

POS

A palavra-chave POS define a posição da(s) banda(s) a serem usada(s) para o processamento, é uma matriz de inteiros longos com o seu comprimento variável, com tantos elementos quanto bandas. Os arquivos que são processados pelo ENVI podem ter bandas múltiplas, um subconjunto espectral (spectral subset) das bandas que serão usados para o processamento específico, pelo vetor de POS. As bandas começam especificamente em zero (Band 1 = 0, Band 2 = 1, Band 3 = 2, etc.). Por exemplo, para processar apenas a 4º e a 5º Banda de um arquivo de bandas múltiplas (multiband), POS = [3,4]. Muitas rotinas do ENVI permitem apenas o processamento de uma banda (ENVI_GET_DATA), caso esteja usando uma destas rotinas você poderá utilizar laços de repetição (Loop), para processar diversas bandas.

 

Exemplos de Rotinas do ENVI para uso no IDL

Abaixo pode ser visualizado um exemplo simples do uso de algumas rotinas do ENVI (que serão descritas após o exemplo), sendo utilizadas para processar uma operação máxima entre as bandas de uma imagem (no exemplo abaixo é utilizada a imagem can_tmr.img, que esta localizado por padrão no diretório RSI\IDL61\products\ENVI41\data\ ).

 

 

 

O exemplo acima executa uma operação com operadores de máximo entre três bandas de uma imagem, criando uma nova imagem e salvando-a no diretório raiz do IDL (por padrão RSI\IDL6X).

Na linha 10 do exemplo acima, é criado um arquivo chamado exemplo.txt no diretório raiz do IDL, este arquivo irá receber todas advertências e avisos de erros, que ocorrerem durante a execução do programa.

Na linha 13 é selecionado um arquivo de imagem, no qual desejamos que seja processado, este arquivo deve ser de um tipo reconhecido automaticamente pelo ENVI (TIF, JPEG, BMP, etc), caso contrário você terá que informar os parâmetros de entrada deste arquivo.

Na linha 17, temos uma instrução de condição (IF), verificando se realmente o arquivo foi aberto, se a imagem não foi aberta será perguntado se o IDL deve ser encerrado (linha 18), caso a resposta seja negativa ele irá executar o procedimento RETURN (linha 19).

Na linha 25 a rotina ENVI_FILE_QUERY através da palavra-chave FID, busca o número total de colunas (NS), e o número total de linhas (NL), que são passadas para uma variável dim (linha 27), a palavra-chave EXP da rotina MATH_DOIT receberá esta variável (linha 34).

Na linha 29 temos a variável exp recebendo uma operação de máximo, que será usada para atribuir valor a palavra-chave EXP da rotina MATH_DOIT (linha 34).

Para fazer o download deste exemplo acesse o link abaixo: http://www.sulsoft.com.br/idl/guiadireto/exemplos/exemplo_envi.pro

 

ENVI

Esta rotina é usada para restaurar a base de arquivos salvos do ENVI para o modo "batch" (restaura os arquivos do ENVI sem ativar o modo interativo), pode ser usada também para abrir o ENVI através do IDL. Para restaurar a base de arquivos, use a palavra-chave RESTORE_BASE_SAVE_FILES.

Sintaxe

ENVI [,/RESTORE_BASE_SAVE_FILES]

 

ENVI_BATCH_INIT

Use esta rotina para iniciar o ENVI em modo "batch", que é a modalidade sem a interface de menu do ENVI. Muitas das rotinas de processamento de imagens do ENVI que não requerem a interação do usuário foram projetados para rodar no modo "batch". Quando utilizamos a palavra-chave LOG_FILE, e atribuímos a um arquivo do tipo txt, todos os erros e avisos ocorridos durante a execução serão enviados para este arquivo.

Sintaxe

ENVI_BATCH_INIT [,PALAVRAS-CHAVE]

 

ENVI_SELECT

Este procedimento fornece a janela de diálogo padrão de seleção de arquivos do ENVI. Em seu formato padrão esta janela de diálogo permite a seleção de um arquivo ou uma banda com a opção para subconjunto regional e ou espectral. Entretanto, a janela de diálogo dispõe de diversas palavras-chave que permitem o controle preciso sobre todas opções durante a seleção dos dados.

Uma vez que a janela de diálogo esteja iniciada, o restante da sessão fica aguardando até que seja selecionado o botão OK ou CANCEL. Caso o botão selecionado seja o OK o valor retornado no FID é o id do dado selecionado. Mas se o botão selecionado for o CANCEL o valor retornado ao FID será -1. Este valor de FID é usado em diversas rotinas do ENVI e é um link com o arquivo selecionado.

Sintaxe

ENVI_SELECT [,PALAVRAS-CHAVE]

 

ENVI_BATCH_EXIT

Use esta rotina para sair do modo "batch" do ENVI, e para encerrar a sessão atual do ENVI.
Nas preferências do ENVI temos uma propriedade (Exit IDL on Exit from ENVI, localizado na guia Miscellaneous das preferências do ENVI) indicando que o IDL pode ser finalizado quando a sessão do ENVI é encerrada, por padrão esta propriedade esta marcada com yes (que significa que o IDL será encerrado junto ao ENVI), que pode ser alterada caso seja necessário. A rotina ENVI_BATCH_EXIT encerra a sessão que foi iniciado com ENVI_BATCH_INIT.

Sintaxe

ENVI_BATCH_EXIT [,PALAVRAS-CHAVE]

 

ENVI_FILE_QUERY

Esta rotina consulta as informações contidas no arquivo de cabeçalho da imagem. Caso a imagem não tenha um arquivo de cabeçalho (.hdr), será aberta a janela de edição de cabeçalho (Hearder Info).

Sintaxe

ENVI_FILE_QUERY [,PALAVRAS-CHAVE]

 

ENVI_DOIT

A rotina ENVI_DOIT é uma interface para todas as rotinas de processamento do ENVI (rotinas _DOIT). Cada _DOIT é apenas um argumento de texto do ENVI_DOIT com as palavras-chave após o _DOIT. Por exemplo, a chamada ENVI_CUBE_3D_DOIT é feita da seguinte forma: ENVI_DOIT, 'ENVI_CUBE_3D_DOIT'....... [palavras-chave do ENVI_CUBE_3D_DOIT].

Sintaxe

ENVI_DOIT, 'Nome da Rotina' [,PALAVRAS-CHAVE]

 

MATH_DOIT

Use esta rotina para executar operações matemáticas dos dados de uma imagem.
No momento em que se utiliza operadores aritméticos em uma imagem que contenha bandas do tipo bit, deve se ter o conhecimento de que, se for feita uma soma de bandas do tipo bit (sem que uma função de conversão seja utilizada, como exemplo FIX= integer, FLOAT= float, DOUBLE= double), poderá ocorrer um overflow fazendo com que a expressão retorne um resultado diferente do que seria esperado.

Sintaxe

ENVI_DOIT, 'MATH_DOIT' [,PALAVRAS-CHAVE]

 

Neste segundo exemplo temos outras rotinas do ENVI, criando uma janela de inserção de parâmetros e fazendo uma verificação se estes parâmetros são diferentes de 0 (zero).

 

 


Neste exemplo é utilizada algumas funções simples que trabalham com widgets, os valores retornados por estes widgets são sempre o widget ID do novo widget.

Na linha 7 do exemplo acima, a rotina WIDGET_AUTO_BASE cria o topo da janela de inserção de parâmetros.

Da linha 8 até a linha 11, é utilizado a rotina WIDGET_BASE para alterar o Layout da janela de inserção de parâmetros.

Na linha 12, temos a rotina WIDGET_LABEL que cria o texto que fica acima das caixas de entrada de parâmetros.

Na linha 13 e 14, é usada a rotina WIDGET_PARAM para exibir as caixas de texto onde serão inseridos os parâmetros.

Na linha 15, temos outro WIDGET_LABEL mas agora apenas alterando o Layout da janela, que será realmente chamada pela rotina AUTO_WID_MNG (linha 16), retornando para a variável result uma estrutura anônima.

Na linha 19, temos uma instrução de condição (IF), fazendo teste se o campo (accept) da estrutura (result) é igual a 1 (um), isto significa que os parâmetros foram digitados e foi clicado o botão OK.

Na linha 22, é feito um teste verificando se os campos (param_a, param_b), da estrutura (result) são diferentes de zero.

Caso esta condição seja verdadeira, será enviada uma mensagem (linhas 23 e 24) dizendo que os parâmetros são diferentes de zero e será encerrado o exemplo.

Na linha 29, assim como nas linhas 36 e 41 é testado se os parâmetros inseridos são iguais a zero, se eles forem iguais a zero então deverá ser digitado um novo número.

Para fazer o download deste exemplo acesse o link abaixo:
http://www.sulsoft.com.br/idl/guiadireto/exemplos/exemplo_2.pro

 

WIDGET_AUTO_BASE

Normalmente quando se programa com widgets no IDL, todos as bases widget, incluindo a base de nível superior (ou TLB(Top Level Base)), são criados usando a função WIDGET_BASE. Entretanto, na programação com o ENVI, se você quiser criar hierarquias de widgets cujos eventos são automaticamente controlados pelo ENVI, você deve usar uma rotina especial do ENVI chamada WIDGET_AUTO_BASE para criar a TBL. Todas outras bases usadas na construção do GUI (interface gráfica ao usuário), deverão utilizar a função WIDGET_BASE.

As TBLs criadas usando o WIDGET_AUTO_BASE são automaticamente baseadas em colunas, centralizado, e modal (isto é, bloqueado). Ao contrário do WIDGET_BASE, que pode aceitar dezenas de palavras-chave diferentes que irão controlar a aparência da base, o WIDGET_AUTO_BASE aceita somente quatro palavras-chave: GROUP, TITLE, XBIG, YBIG. Estas palavras-chave permitem que o GUI possa ser prezo a um widget existente.

Sintaxe

resultado = WIDGET_AUTO_BASE([,PALAVRAS-CHAVE])

 

WIDGET_BASE

A função WIDGET_BASE é usada para criar uma base de widget. Estas bases de widget servem como recipientes para outros widgets. Pode ser usado também com o objetivo de ser TLB, neste caso não devera ser acrescentado o argumento base(uma variável contendo o valor do widget ID da base "pai") na rotina.

As bases de widgets (criados com a rotina WIDGET_BASE) tem um papel especialmente importante na criação de aplicações de IDL baseadas em widgets, porque controlam seu comportamento e a maneira com que as aplicações e seus componentes são criados, processados, e destruídos.

Sintaxe

resultado = WIDGET_BASE(base[,PALAVRAS-CHAVE])

 

WIDGET_LABEL

A função WIDGET_LABEL é usado para criar uma única linha de texto estático definido no momento em que a função é chamada. Se a palavra-chave VALUE não for inserida o texto exibido pela função será Label.

Sintaxe

resultado = WIDGET_LABEL(base[,PALAVRAS-CHAVE])

 

WIDGET_PARAM

A função WIDGET_PARAM é um widget usado para criar uma caixa de texto de entrada de parâmetros numéricos, como na imagem abaixo.

Se você estiver utilizando a função AUTO_WID_MNG no seu programa, você poderá utilizar a palavra-chave AUTO_MANAGE, para que você não precise criar um evento para controlar seu widget.

Sintaxe

resultado = WIDGET_PARAM(base[,PALAVRAS-CHAVE])

 

AUTO_WID_MNG

Use esta função para controlar automaticamente a manipulação de eventos compostos de widgets do ENVI, sem a necessidade de escrever um procedimento que faça esta manipulação. A função retorna uma estrutura anônima cujos nomes dos campos (tags) foram definidos pelo valor do usuário (uvalue) dos widgets que estão sendo controlados. A função AUTO_WID_MNG cria automaticamente os botões de OK e Cancel no widget a menos que a palavra-chave NO_BUTTONS seja "setada". Em todos os casos, se o botão OK for selecionado, o campo resul.accept (onde result é o nome da estrutura retornada pela função AUTO_WID_MNG) irá receber 1 (um). Por outro lado, se o botão Cancel for selecionado então result.accept receberá 0 (zero).

Sintaxe

resultado = AUTO_WID_MNG (Base[,PALAVRAS-CHAVE])

Para maiores informações sobre essas e outras rotinas do ENVI, você deve acessar os guias de programação do ENVI (refguide.pdf / progguide.pdf) que estão por padrão no diretório: \RSI\IDL6X\products\ENVI4X\help.

 

 
Contato: Rua Felipe Neri, 444 - Porto Alegre/RS - Brasil | Fone: (51) 3333-1581 / (51) 3026-3920 | Todos direitos reservados.