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

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

Disciplina: Paradigmas e Ferramentas de Desenvolvimento de Software

Apresentações semelhantes


Apresentação em tema: "Disciplina: Paradigmas e Ferramentas de Desenvolvimento de Software"— 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 dos algoritmos portados
Introduçã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ção dos algoritmos portados

4 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

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
_estrategiaFusao/Trans Fusao Estrategia AppFusao() MetodoFusao() _estrategiaFusao/Trans->MetodoFusao() Wavelet Transformação MetodoFusao() MetodoFusao() Ventura Garguet Método n RGB2IHS IHS2RGB Método n MetodoFusao() MetodoFusao() MetodoFusao() MetodoFusao() MetodoFusao() 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 { 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{ Garguet(int l,char* f):Strat_Fusao_Wave(l,f){}; void MetodoFusao( TeImaMult& ImageMult, char* name_exit, TeRaster& ImagePan ) { 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 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 IHS2RGB(int f):Strat_Fusao_Transf(f){}; 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 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_B CBERS_B CBERS_B4

17 spot5_pan

18 Composição CBERS RGB(342)

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 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 Ricardo Cartaxo M. Souza
(DPI - equipe TerraLib) Ricardo Cartaxo M. Souza (DPI) Leonardo Santanna Bins


Carregar ppt "Disciplina: Paradigmas e Ferramentas de Desenvolvimento de Software"

Apresentações semelhantes


Anúncios Google