PDI em TerraLib
Time TerraLib
TerraLib

Biblioteca de software para
construção de SIGs:






Código fonte aberto ( GNU Lesser
General Public License )
Público alvo: desenvolvedores de
software com conteúdo geográfico
Escrita em C++
Multi-plataforma ( Linux, Windows)
Utiliza outras bibliotecas livres
Arquitetura integrada (uma única base
de dados)
SIG
atributos
SGBD
TePDI

Módulo TerraLib para processamento de imagens.

Objetivo: Repositório de algoritmos de PDI.
APLICATIVOS
( código aberto – segue a
mesma licença da TerraLib )
C++
TePDI
TerraLib Kernel
SGBD
Não
vinculado à bases de
dados.
TePDI

Documentação On-line


http://www.terralib.org
Documentação embutida no código ( Doxygen ).

http://www.stack.nl/~dimitri/doxygen/
TePDI

Obtendo o código em http://www.terralib.org

Em um arquivo ZIP
 Utilizando o repositório TerraLib (CVS)

Estrutura de diretórios

Raiz (zip ou CVS)
 src
 terralib
 image_processing
 terralibw
 terralib
 image_processing
 terralibx
 terralib
 image_processing
 exemplos
 image_processing
 Código Fonte
 Projetos para Windows
 Projetos para Linux
 Exemplos (somente por CVS)
TePDI

Compilação
Windows  Visual Studio .NET
 Linux  GCC


Raiz (zip ou CVS)
 src
 terralibw
 terralib
 terralib.vcproj
 image_processing
 terralibpdi.vcproj
 terralibx
 terralib
 Makefile
 image_processing
 Makefile
 Exemplos
 image_processing
 image_processing.sln
 Makefile
 Projetos para Windows
 Projetos para Linux
TeRaster (Terralib kernel)

Funções

Prover uma interface única para manipulação de dados matriciais em TerraLib.
 GTIFF, JPEG, SPRING, MRSID, etc.
 Transparência quanto à forma de armazenamento.
 Memória, disco ou banco de dados.
TeRasterParams
TeRaster
TeDecoder
TeDecoderTIFF
TeDecoderDatabase
?????
TeRaster (Terralib kernel)

Métodos mais utilizados:
init( TeRasterParams& )  Reinicializa a instância seguindo novos
parâmetros.
 getElement( int col, int line, double& value, int band )  Provem uma
cópia do valor do elemento existente na posição indicada.
 setElement( int col, int line, double value, int band )  Configura o valor
do elemento na posição indicada.
 params() – Retorna a referência para os parâmetros atuais da instância.

TeRaster (Terralib kernel)

Exemplo 1 – Criando uma instância vinculada a um arquivo de imagem em
disco (somente leitura):
#include <TeRaster.h>
TeRaster raster_instance1( “nome_arquivo.tif”, “r” );
TeRaster raster_instance2( “nome_arquivo.jpeg”, “r” );
TeRaster (Terralib kernel)

Exemplo 2 – Criando uma instância vinculada a uma nova imagem em
memória:
#include <TeRaster.h>
TeRasterParams params;
params.nBands( 1 );
params.nlines_ = l0;
params.ncols_ = 10;
params.mode_ = “c";
params.decoderIdentifier_ = "MEM";
TeRaster raster_instance;
raster_instance.init( params );
TeRaster (Terralib kernel)

Exemplo 3 – Criando uma instância vinculada a um novo arquivo de
imagem em disco:
#include <TeRaster.h>
TeRasterParams params;
params.nBands( 1 );
params.nlines_ = l0;
params.ncols_ = 10;
params.mode_ = “c";
params.fileName_ = “nome_arquivo.tif";
params.decoderIdentifier_ = “TIF";
TeRaster raster_instance;
raster_instance.init( params );
Iteradores (TeRaster::iterator - Terralib kernel)

Função: Prover uma interface para acessar elementos de imagem de
formas diferenciadas.

Exemplo: TeRaster::iterator_poly.
TePolygon
TeRaster::iterator
TeRaster::iterator_poly
?????
Iteradores (TeRaster::iterator - Terralib kernel)

Exemplo/Aplicação:

Iterador 2
Iterador 1
Mosaico + Blending
IMAGEM A
IMAGEM B
Projeção A
IMAGEM A
Projeção B
Imagem Resultante
Projeção A
Iterador 3
Iteradores (TeRaster::iterator - Terralib kernel)
Exemplo/Código:

#include <TeRaster.h>
#include <TeGeometry.h>
TePolygon polygon_instance;
TeRaster raster_instance;
TeRaster::iteratorPoly it =
raster_instance.begin( polygon_instance, TeBoxPixelIn, 0 );
TeRaster::iteratorPoly it_end =
raster_instance.end( polygon_instance, TeBoxPixelIn, 0 );
While( it != it_end ) {
double valor_pixel = *it( 0 );
++it;
};
TePDI - Estrutura

Hierarquia de algoritmos  Uma interface única para algoritmos.
TePDI - Estrutura
Para executar um algoritmo:

Método Reset ( TePDIParameters )

Método CheckParameters (TePDIParameters )

Método Apply()

TePDI - Estrutura

Exemplo (contraste):
#include <TePDIContrast.hpp>
TeRaster inRaster;
TeRaster outRaster;
TePDIParameters params;
params.SetParameter( "contrast_type", TePDIContrast::TePDIContrastMinMax; );
params.SetParameter( "input_image", inRaster );
params.SetParameter( "output_image", outRaster );
params.SetParameter( "band", (int)0 );
TePDIContrast contra_instance;
contra_instance.Reset( params );
contra_instance.Apply();
TePDI - Estrutura
Como criar um novo algoritmo:

Método CheckParameters (TePDIParameters )

Método ResetState()

Método RunImplementation()

TePDIAlgorithm
TePDIMyAlgorithm
CheckParameters (TePDIParameters )
ResetState()
RunImplementation()
TePDI - Estrutura

Exemplo (contraste):
#include <TePDIAlgorithm.hpp>
class TePDIMyAlgorithm : public TePDIAlgorithm
{
public :
TePDIMyAlgorithm();
~TePDIMyAlgorithm();
bool CheckParameters( const TePDIParameters& parameters ) const;
protected :
void ResetState( const TePDIParameters& params );
bool RunImplementation();
};
TePDI - Estrutura

Fábricas de algoritmos (Padrão de Projeto Factory)

Prover maior modularização
Facilitar a manutenção de código diante de atualizações ou adição
de novos algoritmos.

TeFactory< T >
Gabarito
TePDIAlgorithm
TePDIAlgorithmFactory
Abstrata
TePDIMosaic
TePDIMosaicFactory
Concreta
TePDI - Estrutura

Fábricas de algoritmos (Padrão de Projeto Factory)

Exemplo sem utilização da fábrica de algoritmos:
#include <TePDIMosaic.hpp>
TePDIParameters params;
TePDIMosaic mosaic_instance;
mosaic_instance.Reset( params );
mosaic_instance.Apply();

Exemplo com utilização da fábrica de algoritmos:
#include <TeAlgorithmFactory.hpp>
TePDIParameters params;
TePDIAlgorithm::pointer mosaic_pointer( TePDIAlgorithmFactory::make(
"TePDIMosaic", params ) );
mosaic_pointer->Apply();
TePDI - Estrutura

Estratégias de algoritmos (Padrão de Projeto Strategy)

Prover maior modularização.
Facilitar a manutenção de código diante de atualizações ou adição
de novos algoritmos.


Estratégia ???
Porções de código com comportamento semelhante mas que
executam uma mesma tarefa de formas distintas.

TePDINoBlendingStrategy
TePDIMosaic
TePDIGeoMosaicStrategy
TePDIEuclidianBlendingStrategy
TePDITieMosaic
TePDINoBlendingStrategy
TePDIEuclidianBlendingStrategy
?????
TePDI - Estrutura

Estratégias de algoritmos (Padrão de Projeto Strategy)
TePDIStrategy
TePDITieMosaicStrategy
TePDIMosaic
TePDIGeoMosaicStrategy
????
TePDIStrategy
TePDIParameters params;
params.SetParameter( “mosaic_type”, “geo_mosaic” );
TePDIAlgorithm::pointer mosaic_pointer( TePDIAlgorithmFactory::make(
"TePDIMosaic", params ) );
TePDI - Estrutura

Fábricas de estratégias de algoritmos
TeFactory< T >
Gabarito
TePDIStrategy
TePDIStrategyFactory
Abstrata
TePDIGeoMosaicStrategy
TePDIGeoMosaicStrategyFactory
Concreta
TerraPixel

Função:

Prover uma base de funções e classes para permitir e facilitar a construção de
plugin’s para a manipulação de dados raster TerraLib.
 Prover mecanismos e facilidades para a integração daqueles plugin’s na forma de
código independente carregado dinamicamente.

Plugin’s ???

São mini-aplicativos que dependem de outro aplicativo para serem executados.
 Recebem dados/parâmetros do aplicativo ao qual são vinculados.
 Permitem interação com o aplicativo vinculado.
TerraPixel

Arquitetura
Usuário
Plugin
TerraPixel
TePDI
TerraLib
TerraPixel

Características





Escrito em linguagem C++.
Portabilidade ( Windows, Linux ).
Baseado em classes/funções TerraLib/TePDI ( TeRaster, TePDIAlgorithm, etc. ).
Utiliza classes/funções QT para prover a componente visual.
Utiliza classes/funções LibSPL para prover a funcionalidade de carregamento
dinâmico de código.
TerraPixel

Obtendo o código utilizando CVS:

cvs -d :pserver:[email protected]:/home/terralib co
aplicativos/terraPixel
 Raiz (CVS)
 aplicativos
 terraPixel
 terraPixel
 Plugins




src
terralibw
terralibx
exemplos
 Código do aplicativo
 Código de plugin’s
TerraPixel

Arquitetura
Portabilidade
Limitações de
Memória Win32

Requisito:
 Permitir compartilhamento de objetos ( TeRaster, TePolygon, etc. ) entre plugin’s e
o aplicativo principal.

Problema:
 Código carregado dinamicamente não compartilha o mesmo HEAP do aplicativo.

Possível solução:
 Copiar o objeto de uma área para a outra
 Nem sempre é viável ( Ex: TeRaster ).
TerraPixel

Arquitetura

Exemplo:
 TerraPixel vinculado a Terralib.
 Plugin vinculado a Terralib.
 Plugin instância um TeRaster e passa a sua referência para o aplicativo.
TerraPixel
TeRaster *

Plugin
TeRaster
Problema:
 Objetos podem ser modificados somente na mesma área de código onde foram
criados.
 Objetos podem ser destruídos somente na mesma área de código onde foram
criados.
TerraPixel

Arquitetura

Possível solução – Cópia de objetos de uma área para outra:


Nem sempre é viável ( Ex: TeRaster ).
Resolução: Gerente de objetos
TerraPixel
Plugin
ObjectsManager
ObjectsManager
Lista Visual
Algoritmo
Visualização
TerraPixel

Arquitetura

Resolução: Gerente de objetos
 Gabarito em função do tipo de dado a ser armazenado.
 BTree indexada por strings.
 Armazena referências compartilhadas dos objetos ( TeSharedPtr ).
 2 modos de operação (master,slave) sincronizados (TeCommunicator).
ObjectsManager< T >
RastersManager
PolygonsManager
TerraPixel

Arquitetura

Resolução: Gerente de objetos
TerraPixel
Plugin
RastersManager(Master)
RastersManager(Slave)
TeSharedPtr< TeRaster >
TeSharedPtr< TeRaster >
TeRaster1 *
TeRaster1
TeCommunicator<string>
TeRaster2
TeSharedPtr< TeRaster >
TeRaster2 *
TeSharedPtr< TeRaster >
TerraPixel

Plugin’s – Desenvolvimento

Utilização de um projeto QT base que provém :
 Includes básicos necessários para plugins.
 Link com as bibliotecas necessárias.
 Definições de compilação necessárias.
Raiz (CVS)
aplicativos
terraPixel
terraPixel
plugins
source
base
base.pro
src
terralibw
terralibx
exemplos
TerraPixel

Plugins – Desenvolvimento

SPL_DEFINE_PLUGIN_INFO – Definição da interface informações sobre o
plugin.




Informações sobre a versão ( build, minor, major version).
Informações de identificação do Plugin (requisitadas pelo aplicativo).
Informações sobre o desenvolvedor.
Informação sobre a versão da interface esperada para receber dados do
aplicativo.
TerraPixel

Exemplo de código
SPL_DEFINE_PLUGIN_INFO(
1,
///< The build number.
1,
///< The major version (e.g. 1.xx).
0,
///< The minor version (e.g. 0.10).
true,
///< Plugins arguments to the public?
"Mosaic",
///< The plugin's name.
"INPE",
///< The plugin's vendor.
"TerraPixel Mosaic Plugin",
///< The plugin's general description.
PLUGINPARAMETERS_VERSION,
///< The expected plugin parameters version.
"http://www.dpi.inpe.br/terralib",
///< The plugin vendor's homepage.
"[email protected]",
///< The plugin vendor's email address.
"TerraPixelPlugin" );
///< The plugin's UUID.
TerraPixel

Plugins – Desenvolvimento

SPL_RUN_NAME_CODE - Definição do ponto de entrada do plugin.

Parâmetros passados pelo aplicativo:
 Apontadores para as instâncias de todos os gerentes de objetos.
 Interfaces de todas as instâncias de objetos que possibilitam interação
com o usuário (Navegadores visuais de raster, etc).
 Apontador para a classe que guarda parâmetros globais.
TerraPixel

Exemplo de código
SPL_PLUGIN_API bool SPL_RUN_NAME_CODE( slcPluginArgs* a_pPluginArgs )
{
void* arg_ptrs[ 1 ];
a_pPluginArgs->GetArg( 0, arg_ptrs );
PluginParameters* plug_pars_ptr = ( PluginParameters* ) arg_ptrs[ 0 ];
static RastersManager slave_rm_instance(
*(plug_pars_ptr->rasters_manager_ptr_) );
..........
Código do plugin
..........
return true;
}
TerraPixel

Plugins – Exemplo: Mosaico





C++
Utiliza QT para prover a componente gráfica.
Utiliza LibSPL para a interface de carregamento dinâmico de código.
Utiliza classes TerraLib para armazenar dados ( matriciais e vetoriais ).
Utiliza classes TerraLibPDI para processar dados.
Dúvidas ???
http://www.terralib.org
Download

processamento_de_imagens_em_terralib