A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Fusão de imagens utilizando transformada Wavelet e IHS no ambiente TerraLib Disciplina: Paradigmas e Ferramentas de Desenvolvimento de Software Docentes:

Apresentações semelhantes


Apresentação em tema: "Fusão de imagens utilizando transformada Wavelet e IHS no ambiente TerraLib Disciplina: Paradigmas e Ferramentas de Desenvolvimento de Software Docentes:"— Transcrição da apresentação:

1 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

2 Estrutura Introdução - Motivação - Objetivo Transformação IHS Fusão por Transformada Wavelets Padrão Adotado Resultados Conclusão

3 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ção dos algoritmos portados Introdução

4 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

5 Transformação RGB IHS Para descrever as propriedades de cor de um objeto em uma imagem, normalmente o olho humano não distingue a proporção de azul, verde e vermelho presentes, e sim, avalia a intensidade (I), a cor ou matiz (H) e a saturação (S).

6 Transformação RGB IHS Fusão

7 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.

8 Fusão por Wavelet (método Ventura)

9 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.

10 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)

11 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.

12 Estratégia para fusão / transformação de cor Fusao AppFusao() Estrategia MetodoFusao() Ventura MetodoFusao() GarguetMétodo n _estrategiaFusao/Trans _estrategiaFusao/Trans->MetodoFusao() RGB2IHS MetodoFusao() IHS2RGB MetodoFusao() Método n MetodoFusao() Wavelet MetodoFusao() Transformação MetodoFusao()

13 // Estratégia de Wavelet class 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); } };

14 // 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); } };

15 // Factory da estratégia de processamento class 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); } };

16 Exemplo de aplicação CBERS_B2 CBERS_B3 CBERS_B4

17 spot5_pan

18 Composição CBERS RGB(342) CBERS_rgb342

19 Resultado Wavelet (Ventura) 4 níveis de decomposição TeImaMult ima3( imab3, imab4, imab2 ); // classe que suporta n bandas Strat_Fusao* strat = Strat_Factory::make("Ventura", level, filtro); Fusao fusao( strat ); fusao.AppFusao(ima3, nomesaida, imapan);

20 Resultado (Garguet - Duport) 4 níveis de decomposição TeImaMult ima3( imab3, imab4, imab2 ); // classe que suporta n bandas Strat_Fusao* strat = Strat_Factory::make(Garguet", level, filtro); Fusao fusao( strat ); fusao.AppFusao(ima3, nomesaida, imapan);

21 Resultado Fusão por Transformação IHS TeImaMult ima3( imab3, imab4, imab2 ); // classe que suporta n bandas Strat_Fusao* strat = Strat_Factory::make(FusionTrans"); Fusao fusao( strat ); fusao.AppFusao(ima3, nomesaida, imapan);

22 I H S Transformação RGB IHS TeImaMult ima3( imab3, imab4, imab2 ); // classe que suporta n bandas Strat_Fusao* strat = Strat_Factory::make(RGB2IHS", flag); Fusao fusao( strat ); fusao.AppFusao(ima3, nomesaida); IHS2RGB

23 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

24 Agradecimentos Lúbia Vinhas (DPI - equipe TerraLib) Ricardo Cartaxo M. Souza (DPI) Leonardo Santanna Bins (DPI)


Carregar ppt "Fusão de imagens utilizando transformada Wavelet e IHS no ambiente TerraLib Disciplina: Paradigmas e Ferramentas de Desenvolvimento de Software Docentes:"

Apresentações semelhantes


Anúncios Google