Upload
internet
View
106
Download
1
Embed Size (px)
Citation preview
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)