fusão de imagens utilizando transformada wavelet e ihs no ambiente terralib disciplina: paradigmas...

Post on 17-Apr-2015

106 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Fusão de imagens utilizando transformada Wavelet e IHS no

ambiente TerraLib

Disciplina: Paradigmas e Ferramentas de Desenvolvimento de Software

Docentes:Dr. Gilberto Câmara

Lúbia Vinhas

Discentes:Paulo Honda Ota

Vantier Veronezi Bagli

Estrutura

Introdução- Motivação- Objetivo

Transformação IHS

Fusão por Transformada Wavelets

Padrão Adotado

Resultados

Conclusão

Motivação

Realizar fusão de imagens CBERS através de Transformação Wavelet e IHS no ambiente TerraLib utilizando padrões de projeto para

manipulaçãodos algoritmos portados

Introdução

Objetivos

Portar algoritmo de transformação RGB IHS do aplicativo

SPRING para o ambiente TerraLib

Implementar algoritmos de fusão por Transformadas Wavelets no ambiente TerraLib

Adotar padrões de projeto para manipulação desses algoritmos

Introdução

Transformação RGB IHS

Para descrever as propriedadesde cor de um objeto em umaimagem, normalmente o olhohumano não distingue aproporção de azul, verde e vermelho presentes, e sim, avalia a intensidade (I), a corou matiz (H) e a saturação (S).

Transformação RGB IHS

Fusão

Fusão por Transformada Wavelet

A fusão de imagens através da transformada wavelet,

em geral, é realizada pela troca da sub-banda de baixa

resolução em um determinado nível j, que é resultado da

decomposição de uma imagem pancromática de alta

resolução espacial, por uma imagem de baixa resolução que

contém a informação espectral.

Fusão por Wavelet (método Ventura)

Padrão Adotado

Strategy

Criar uma camada que encapsule os diversos algoritmos

de fusão de forma que possam ser alterados, inseridos ou

removidos independentemente dos clientes que os utilizam.

Padrão Adotado

Problema: Os métodos de fusão por wavelet e transformação IHS possuem comportamentos diferentes.

Fusão por wavelets: entrada: Banda PAN + Banda Multiespectral + Filtro + Nível de decomposição + nome de saída saída: 1 Banda da Imagem Fundida

Fusão por Transformação IHS: entrada: Banda PAN + 3 Bandas Multiespectrais + flag + nome de saída saída: 3 Bandas da Imagem Fundida

Transformação de cores: entrada: 3 Bandas Multiespectrais + flag + nome de saída saída: 3 Bandas da Imagem Transformada (RGB/IHS)

Padrão Adotado

Solução:

Criar classe Imagem Multiespectral (TeImaMult), para uniformizar os

parâmetros de entrada das imagens multiespectrais nos algoritmos de fusão por Wavelet e transformação de cores.

Uniformizar os outros parâmetros de entrada (flag, nível de decomposição, nome da imagem de saída e filtro)

Delegar a instanciação da estratégia escolhida por FACTORY.

Estratégia para fusão / transformação de cor

Fusao

AppFusao()

Estrategia

MetodoFusao()

Ventura

MetodoFusao()

Garguet Método n

_estrategiaFusao/Trans

_estrategiaFusao/Trans->MetodoFusao()

RGB2IHS

MetodoFusao()

IHS2RGB

MetodoFusao()

Método n

MetodoFusao() MetodoFusao() MetodoFusao()

Wavelet

MetodoFusao()

Transformação

MetodoFusao()

// Estratégia de Waveletclass Strat_Fusao_Wave: public Strat_Fusao {public:

Strat_Fusao_Wave(int l,char* f):filtro(f),level(l){};virtual void MetodoFusao(TeImaMult& ImageMult, char* name_exit, TeRaster& ImagePan ) = 0;char *filtro, *name_out;int level;string name, type;

};class Ventura: public Strat_Fusao_Wave {public:

Ventura(int l,char* f):Strat_Fusao_Wave(l,f){}void MetodoFusao( TeImaMult& ImageMult, char* name_exit, TeRaster& ImagePan ){

for (int i = 0 ; i < ImageMult.getsize() ; i++){name = TeGetName ( name_exit);type = TeGetExtension (name_exit);string temp = name+"_"+Te2String(i)+"."+type;name_out = (char*)temp.c_str();fusionVentura(ImagePan, ImageMult.getband(i), filtro, level, name_out);

}}

};class Garguet: public Strat_Fusao_Wave{public:

Garguet(int l,char* f):Strat_Fusao_Wave(l,f){};void MetodoFusao( TeImaMult& ImageMult, char* name_exit, TeRaster& ImagePan ) {

for (int i = 0 ; i < ImageMult.getsize() ; i++){name = TeGetName ( name_exit);type = TeGetExtension (name_exit);string temp = name+"_"+Te2String(i)+"."+type;name_out = (char*)temp.c_str();fusionGarguet(ImagePan, ImageMult.getband(i), filtro, level, name_out);

}}

};

// Estratégia de Transformação

class Strat_Fusao_Transf: public Strat_Fusao{public:

Strat_Fusao_Transf(int f):flag(f){}virtual void MetodoFusao( TeImaMult& ImageMult, char* name_exit, TeRaster& ImagePan ) = 0;int flag;

};

class RGB2IHS: public Strat_Fusao_Transf{public:

RGB2IHS(int f):Strat_Fusao_Transf(f){};void MetodoFusao( TeImaMult& ImageMult, char* name_exit, TeRaster& ImagePan ){ ihs_RGB2IHS(ImageMult.getband(0), ImageMult.getband(1) , ImageMult.getband(2), flag, name_exit, ImagePan);}

};

class IHS2RGB: public Strat_Fusao_Transf{public:

IHS2RGB(int f):Strat_Fusao_Transf(f){};void MetodoFusao( TeImaMult& ImageMult, char* name_exit, TeRaster& ImagePan ){ ihs_IHS2RGB(ImageMult.getband(0), ImageMult.getband(1) , ImageMult.getband(2), flag, name_exit, ImagePan);}

};

// Factory da estratégia de processamentoclass Strat_Factory{public:

static Strat_Fusao* make(const string &method,int n = 0, char* f = 0){

if ( method == "Ventura" ) return ( new Ventura(n,f) );else if ( method == "Garguet" ) return ( new Garguet(n,f) );else if ( method == "RGB2IHS" || method == "FusionTrans" ) return ( new RGB2IHS(n) );else if ( method == "IHS2RGB" ) return ( new IHS2RGB(n) );

}};

class Fusao{public:

Strat_Fusao* proc;

Fusao(Strat_Fusao* st):proc(st){}

void AppFusao( TeImaMult& ImageMult, char* name_exit, TeRaster& ImagePan = TeRaster() ){

proc->MetodoFusao (ImageMult, name_exit, ImagePan);}

};

Exemplo de aplicação

CBERS_B2 CBERS_B3 CBERS_B4

spot5_pan

Composição CBERS RGB(342)

CBERS_rgb342

Resultado Wavelet (Ventura) 4 níveis de decomposição

TeImaMult ima3( imab3, imab4 , imab2 ); // classe que suporta n bandasStrat_Fusao* strat = Strat_Factory::make("Ventura", level, filtro);Fusao fusao( strat );fusao.AppFusao(ima3, nomesaida, imapan);

Resultado (Garguet - Duport) 4 níveis de decomposição

TeImaMult ima3( imab3, imab4 , imab2 ); // classe que suporta n bandasStrat_Fusao* strat = Strat_Factory::make(“Garguet", level, filtro);Fusao fusao( strat );fusao.AppFusao(ima3, nomesaida, imapan);

Resultado Fusão por Transformação IHS

TeImaMult ima3( imab3, imab4 , imab2 ); // classe que suporta n bandasStrat_Fusao* strat = Strat_Factory::make(“FusionTrans");Fusao fusao( strat );fusao.AppFusao(ima3, nomesaida, imapan);

I H S

Transformação RGB IHS

TeImaMult ima3( imab3, imab4 , imab2 ); // classe que suporta n bandasStrat_Fusao* strat = Strat_Factory::make(“RGB2IHS", flag);Fusao fusao( strat );fusao.AppFusao(ima3, nomesaida);

IHS2RGB

Conclusões

A utilização de padrões de projeto se mostrou muito eficiente, pois pode-se tratar diferentes algoritmos de mesma forma

A implementação da abstração de imagem multiespectral (classe TeImaMult) se mostrou necessária e eficiente para a uniformização dos métodos utilizados

Agradecimentos

Lúbia Vinhas (DPI - equipe TerraLib)

Ricardo Cartaxo M. Souza(DPI)

Leonardo Santanna Bins(DPI)

top related