técnicas de pdi com java - ercemapi 2009
DESCRIPTION
Minicurso ministrado na ERCEMAPI 2009 com a apresentação das principais APIs Java para Processamento Digital de Imagens.TRANSCRIPT
![Page 1: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/1.jpg)
ERCEMAPI 2009ERCEMAPI 200929 de OutubroParnaíba-PI
ééMC 5: Técnicas de Processamento MC 5: Técnicas de Processamento Digital de Imagens com JavaDigital de Imagens com JavaDigital de Imagens com JavaDigital de Imagens com JavaIális Cavalcante – Engenharia da ComputaçãoUFC / Campus de Sobral
![Page 2: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/2.jpg)
ObjetivosObjetivos
• Apresentar técnicas básicas que envolvem Processamento Digital de Imagens (PDI);Processamento Digital de Imagens (PDI);
• Apresentar APIs Java voltada para PDI;
• Desenvolver uma pequena aplicação em p q p çJava para descrição de regiões.
![Page 3: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/3.jpg)
E quem é o apresentador?E quem é o apresentador?
![Page 4: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/4.jpg)
AgendaAgenda
1. Introdução
2 API J I2. APIs Java para Imagem
3 Técnicas de Processamento Digital de3. Técnicas de Processamento Digital de Imagens (PDI)
4. Proposta de um Aplicativo de PDI
5. Considerações Finais
![Page 5: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/5.jpg)
Vi ã G l b PDI• Visão Geral sobre PDI• Aplicações Reais
1. INTRODUÇÃO
![Page 6: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/6.jpg)
IntroduçãoIntrodução
• PDI possui alguns conceitos em comum com Visão Computacional e Computação Gráfica
á(caso de Análise de Imagens - FootScanAge).
• Pixels formam uma imagem – função f(x,y)
• Primeiros registros de estudo – NASA (Guerra Fria)Fria)
• Aplicações Multidisciplinares
![Page 7: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/7.jpg)
Comparativo
Processamento de ImagensImagem Imagem
Dado
C t ã G áfi
Dado
Computação Gráfica Visão Computacional
![Page 8: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/8.jpg)
Definição de Imagem
![Page 9: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/9.jpg)
Histórico
1921
1922
Anos 20 – Sistema BartlaneTransmissão de Imagens via cabo submarino
1922
gUma semana para três horas – Londres para Nova York
![Page 10: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/10.jpg)
Histórico
Anos 20 (1925) – Sistema BartlaneAumento para cinco níveis de brilhoAumento para cinco níveis de brilho
![Page 11: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/11.jpg)
Histórico
Primeira imagem da Lua.Obtida pela nave espacial americana Ranger 7Obtida pela nave espacial americana Ranger 7.31 de julho de 1964, 9:09 (17 minutos antes do impacto).
![Page 12: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/12.jpg)
Aplicações em Saúde90
0 4
0.6
0.8
1
30
60
90
120
150
0.2
0.4
180 0
210 330
240
270
300
![Page 13: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/13.jpg)
Aplicações em Saúde
![Page 14: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/14.jpg)
Aplicações na Indústria Petrolífera
![Page 15: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/15.jpg)
Aplicações na Agropecuária
![Page 16: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/16.jpg)
Aplicações na Biologiap ç g
![Page 17: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/17.jpg)
Aplicações em Imagens SAR
![Page 18: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/18.jpg)
• API JAIAPI I J• API ImageJ
2. APIS JAVA PARA IMAGEM
![Page 19: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/19.jpg)
Formatos de ImagensFormatos de Imagens
• TIFF, GIF, PNG, JPEG, BMP, PBM, PGM, PMN
P d i d 80 90• Padronizados nos anos 80 e 90.
• Suportados pela maioria das APIs e ling agens de p og amaçãolinguagens de programação.
![Page 20: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/20.jpg)
Uso da linguagem Java
i
WhyWhy Java?Java?
• Atrativos:– Livre;– Portável (“write once, run anywhere”);– Sintaxe similar à linguagem C;– Possui facilidade de internacionalização dos caracteres;– Vasta documentação;– Coletor de lixo (para desalocação automática de memória);
– Facilidade de criação de programação distribuída e concorrente;P di O i t d Obj t– Paradigma Orientado a Objetos.
![Page 21: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/21.jpg)
Java Advanced Imaging (JAI) APIg g ( )
PlanarImage
ColorModel Raster
ColorSpace SampleModel
DataBuffer
Estrutura da classe de suporte a imagem na API JAI. Adaptado de Santos (2004).
![Page 22: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/22.jpg)
Java Advanced Imaging (JAI) API• Leitura/Escrita de Imagens
g g ( )
public class EScomJAI {public static void main(String[] args) {
// leitura da imagemPl I i JAI t ("fil l d" "L ")PlanarImage image = JAI.create("fileload", "Lenna.png");double[][] bandCombine = {{0.21f,0.71f,0.08f,0.0f}};// conversão do modelo de cores// conversão do modelo de coresimage = JAI.create("BandCombine", image, bandCombine);// escrita do arquivo// escrita do arquivoJAI.create("filestore",image,"lennagl.png","PNG");
}}}
![Page 23: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/23.jpg)
ImageJ APIImageJ APIPlugin Plugin Plugin PluginPlugin
ImageJ
AWT
Java
Estrutura geral da API ImageJ. Adaptado de Burger & Burge (2009).
![Page 24: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/24.jpg)
ImageJ API SoftwareImageJ API Software
• Uso de plugins expande a comunidade de desenvolvedores;;
Di ibili ft ã• Disponibiliza um software com a execução de todas as funcionalidades implementadas;
![Page 25: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/25.jpg)
Listagem: ExibeImagem.javapublic class ExibeImagem extends JFrame {
public ExibeImagem() throws IOException { // início do construtorBufferedImage imagem = ImageIO.read(new File(“Lenna.png”));String infoImagem = “Dimensões: ”+imagem.getWidth()+“x”+imagem.getHeight()+“ Bandas: ”+ imagem.getRaster().getNumBands();ImageIcon icone = new ImageIcon(imagem);JLabel labImagem = new JLabel(icone);(…) // adiciona labImagem e infoImage à interfacethis.setVisible(true);
} // fim do construtor// Método principalpublic static void main(String args[]){p ( g g []){
try{ // tratamento de exceção de E/SExibeImagem appExibeImg = new ExibeImagem();
}catch(IOException exc){} ( p ){System.out.println(“Erro de leitura! ”+exc.getMessage());
}} // fim do método principal} // fim do método principal
} // fim da classe
![Page 26: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/26.jpg)
Resultado: ExibeImagem.java
Imagem Original. Fonte: Imagemadaptada de http://www.lenna.org/.p p // g/
Imagem exibida pela classe.
![Page 27: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/27.jpg)
• Tipos de Imagens• Tipos de Imagens• Realce• Segmentação• Morfologia MatemáticaMorfologia Matemática
3. TÉCNICAS DE PROCESSAMENTOPROCESSAMENTODIGITAL DE IMAGENS
![Page 28: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/28.jpg)
Técnicas de Base para AplicativoTécnicas de Base para Aplicativo
• Realce – Negativo e Filtragem (Passa-Baixa e Passa-Alta )
• Segmentação – Limiarização e WatershedSegmentação Limiarização e Watershed
Morfologia Matemática Erosão Dilatação• Morfologia Matemática – Erosão, Dilatação, Abertura e Fechamento
![Page 29: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/29.jpg)
Tipos de ImagensTipos de Imagens
Imagem Binária Imagem em Imagem Coloridag gNíveis de Cinza
g
![Page 30: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/30.jpg)
CMYKCMYK
RGB
HSV
![Page 31: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/31.jpg)
double[][] bandCombine = { {R, G, B, 0.0f} };image = JAI.create("BandCombine", image, bandCombine);
R = 1.0fG = 0.0f
R = 0.0fG = 1.0f
R = 0.0fG = 0.0f
B = 0.0f B = 0.0f B = 1.0f
![Page 32: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/32.jpg)
Negativo de uma Imagem• Negativo de uma Imagem
– Realce com processamento ponto-a-ponto
g g
Realce com processamento ponto a ponto– Aplicações em imagens médicas– Reverter a ordem do preto para o branco
• Intensidade da imagem de saída diminui• Intensidade da entrada aumenta
s L 1 r• s = L – 1 – r
![Page 33: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/33.jpg)
Negativo de uma Imagemg gs = T(r)
T(r)
Claro
T(r)
ro
Imagem OriginalEscur
Função de Transformação
rEscuro Claro
ç ç
Imagem Processada
![Page 34: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/34.jpg)
Presença de Ruído em ImagensPresença de Ruído em Imagens
õ f• Distorções em uma imagem afetam a percepção da sua real informação;
• Uma distorção crítica é a presença de ruído;• Uma distorção crítica é a presença de ruído;– Implica em nova informação na imagem;
• Normalmente os ruídos são definidos por puma distribuição estatística:– modelo gaussiano, speckle, poisson, etc.g , p , p ,
![Page 35: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/35.jpg)
Efeito do RuídoEfeito do Ruído
Imagem Original
Mudanças de Perspectivasç p
![Page 36: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/36.jpg)
Efeito do RuídoEfeito do Ruído
Imagem Ruidosa“Sal e Pimenta”
Mudanças de Perspectivasç p
![Page 37: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/37.jpg)
Efeito do RuídoEfeito do Ruído
Imagem RuidosaSpeckle
Mudanças de Perspectivasç p
![Page 38: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/38.jpg)
Efeito do RuídoEfeito do Ruído
Presença de ruído Poisson.
Imagem Original
Presença de ruído Speckle.Presença de ruído“Sal e pimenta”.
![Page 39: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/39.jpg)
Realce com Processamento por Máscara
(1) (2)
(3) (4)
![Page 40: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/40.jpg)
Realce com Processamento por Máscara
Exemplo de Máscara (3x3)
• g(x,y) = T[f(x,y)] (T opera em uma vizinhança de g( ,y) [ ( ,y)] ( p çpixels)
• z5’ = R = w1z1 + w2z1+ ... + w9z9 (Filtro Linear)5 1 1 2 1 9 9 ( )– z5’: soma ponderada de pixels na vizinhança de z5
• z5 = max(zk, k = 1, 2, ... 9) (Filtro Não-Linear)z5 max(zk, k 1, 2, ... 9) (Filtro Não Linear)– Não satisfaz a condição de um filtro linear
![Page 41: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/41.jpg)
Tipos de Filtragemp g
• A distribuição de valores na máscara define o tipo de filtragem:p g– Passa-alta
• Aguçamento das bordas;• Aguçamento das bordas;
– Passa-baixaS ã d íd b t d i• Supressão de ruído, borramento da imagem;
– Passa-banda• Restauração da imagem.
![Page 42: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/42.jpg)
Detectores de Bordas (Gradiente – Passa-Alta)
Imagem Original Filtro de Prewitt
Filtro de Sobel Filtro de Roberts
![Page 43: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/43.jpg)
Definição de GradienteDefinição de Gradiente
s = [1 2 1; 0 0 0; -1 -2 -1];A = zeros(10);
(a) (b)
Fig a (a) Imagem o iginal (b) Imagem( );
A(3:7,3:7) = ones(5);H = conv2(A,s);mesh(H)
Figura – (a) Imagem original; (b) Imagemapós aplicação do filtro de Sobel.
![Page 44: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/44.jpg)
Filtro de Suavização (passa-baixa)• São úteis para redução de ruído e borramento de
imagensimagens– Detalhes são perdidos
• O tamanho da máscara (ou seja vizinhança) determina o grau• O tamanho da máscara (ou seja, vizinhança) determina o grau de suavização e perda de detalhes.
– Os elementos da máscara devem ser números positivosp– Exemplo: Média Local
– R = 1/9 (1z1 + 1z2 + ... +1z9) normalizado: dividido por 9
![Page 45: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/45.jpg)
Filtro por mediana (não-linear)• Substitua f(x,y) pela mediana [f(x’,y’)] onde (x’,y’) pertence a
vizinhançaç• Muito efetivo na remoção do ruído com componentes do
tipo espigada (“spike”, ocorrências aleatórias de valores brancos e pretos)
• Preserva melhor as bordas• Exemplo:
10 20 20
20 15 20Ordenar
(10,15,20,20,20,20,20,25,100)
25 20 100
– Mediana = 20, então substitua (15) por (20)
![Page 46: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/46.jpg)
Filtragem da Mediana
Imagem Ruidosa Filtragem com Janela 3x3Imagem Ruidosa“Sal e Pimenta”
Filtragem com Janela 3x3
Filtragem com Janela 5x5 Filtragem com Janela 7x7
![Page 47: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/47.jpg)
Limiarização
í
ç
• Comprime a faixa de nível de cinza de pouco interesse– Inclinação da linha entre [0,1]
• Alargamento da faixa de nível de cinza de maior interesse
– Inclinação da linha monotonicamente crescente
– r1 = r2
– s1 = 0 e s2 = L – 1
![Page 48: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/48.jpg)
Limiarizaçãoçs = T(r)
Claro
T(r)
ro
Imagem OriginalEscur
Função de Transformação
rEscuro Claro
Imagem Processada
![Page 49: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/49.jpg)
Limiarizaçãoç
Imagem Original Limiar de 130
Limiar de 140 Limiar de 150
![Page 50: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/50.jpg)
Watershed
Conside ando ma imagem em tom de cin a como• Considerando uma imagem em tom de cinza como uma superfície topográfica:– Todos os vales foram perfurados na sua área maisTodos os vales foram perfurados na sua área mais
funda da superfície;– Toda a superfície é lentamente preenchida por água,
este irá progressivamente inundar todas as bacias daeste irá progressivamente inundar todas as bacias da imagem;
• Represas podem ser aumentadas onde a água vem de dois pontos distintos podendo se unir;pontos distintos, podendo se unir;
– Ao fim da inundação, cada bacia é cercada por cumes (represas) representando seu limite.
– Este processo define a divisão das regiões presentes na imagem.
![Page 51: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/51.jpg)
Watershed
Imagem Original Imagem em Níveis de Cinza
Imagem com Marcadores Imagem Final
![Page 52: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/52.jpg)
Watershed
Animação sobre Watershed. Fonte: http://cmm.ensmp.fr/~beucher/wtshed.html.
![Page 53: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/53.jpg)
Watershed
O bj t d i ã d fi id• Os objetos das imagens são definidos como as regiões de muitos valores de escala de i t tcinza constantes.
• O operador gradiente irá realçar os limites dos objetos (fim da inundação).j ( ç )
• Os marcadores indicam de forma brutaOs marcadores indicam, de forma bruta, onde os objetos estão localizados na imagem (ponto de partida da inundação).(ponto de partida da inundação).
![Page 54: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/54.jpg)
Morfologia Matemática• Elemento Estruturante (EE):
Morfologia Matemática
– Structuring Element (SE)– Pequeno conjunto usado para reconhecer a
f l d b dmorfologia do objeto de interesse em uma imagem.– Forma e tamanho devem ser adaptados para as
i d d ét i d i dpropriedades geométricas da imagem processada.
0 50.5
1
1.5
2
2.5
1
2
3
1
2
3
3
3.5
4
4.5
5
4
5
6
7
4
5
6
7
0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.55.5 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5
7
1 2 3 4 5 6 7
![Page 55: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/55.jpg)
Morfologia MatemáticaMorfologia Matemática
• Erosão e Dilatação• A partir destes: Abertura e Fechamentop
![Page 56: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/56.jpg)
Morfologia MatemáticaMorfologia Matemática
• Erosão não é o inverso da dilatação!– Uma erosão seguida de uma dilatação nemUma erosão seguida de uma dilatação nem
sempre retorna a imagem original.
• B quadrado 3x3
![Page 57: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/57.jpg)
Morfologia MatemáticaMorfologia Matemática
Imagem Original Resultado da Erosão
Elemento Estruturante
R
Resultado da DilataçãoRaio = 11
![Page 58: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/58.jpg)
Morfologia Matemática• Abertura
Morfologia Matemática
– Resultado da erosão seguida da dilatação;• Usando o mesmo elemento estruturante.
• γB(X) = δB(εB(X))
– Propriedades:• Idempotente;Idempotente;• Crescente;• Anti-extensiva; ?
Figura–Abertura com EE circular: (a) imagem originale (b) sobreposição do resultado.
(a) (b)
Resultado da abertura é sempre menor ou igual àimagem original.
( ) p ç
![Page 59: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/59.jpg)
Morfologia Matemática• Fechamento
Morfologia Matemática
– Dual da Abertura;– Resultado da dilatação seguida da erosão
• Usando o mesmo elemento estruturante.• φB(X) = εB(δB(X))
– Propriedades:• Idempotente;Idempotente;• Crescente;• Extensiva; ?
Resultado da abertura éi i l à Figura – Fechamento com EE circular:
(a) (b)
sempre maior ou igual àimagem original.
Figura Fechamento com EE circular:(a) imagem original e (b) sobreposição do resultado.
![Page 60: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/60.jpg)
Morfologia MatemáticaMorfologia Matemática
Imagem Original Resultado da Abertura
Elemento Estruturante
R
Resultado do FechamentoRaio = 11
![Page 61: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/61.jpg)
Morfologia MatemáticaMorfologia Matemática
Imagem Original Resultado da Erosão Resultado da Dilatação
Resultado da Abertura Resultado do Fechamento
![Page 62: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/62.jpg)
• Definição do aplicativoDefinição do aplicativo• Uso da API ImageJ• Desenvolvimento
4. PROPOSTA DE UM APLICATIVO DE PDI
![Page 63: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/63.jpg)
Fluxograma Imagem Ruidosau og a a Ruidosa
FiltragemFiltragem(eliminação do ruído)
Segmentação(separação de regiões)(separação de regiões)
Pós‐ProcessamentoObjeto está
bem identificado?
Não
Imagem
Sim
Imagem Processada
![Page 64: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/64.jpg)
Aplicando Filtro da Mediana// objeto “imagem"” da classe java.awt.Image instanciado// com a imagem originalByteProcessor processador = new ByteProcessor(imagem);ByteProcessor processador = new ByteProcessor(imagem);processador.medianFilter();// resultado do filtro é passado ao objeto “imagem”// p j gimagem = processador.createImage();
Imagem Ruidosa Imagem Filtrada
![Page 65: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/65.jpg)
Aplicando Segmentação// objeto “imagem” da classe java.awt.Image instanciado// com a imagem filtradaByteProcessor processador = new ByteProcessor(imagem);ByteProcessor processador = new ByteProcessor(imagem);// “valorLimiar” é inteiro e que indica o limiar da segmentaçãoprocessador.threshold(valorLimiar);p ( );// resultado da limiarização é passado ao objeto “imagem”imagem = processador.createImage();
Imagem Filtrada Imagem Segmentada
![Page 66: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/66.jpg)
Aplicando Fechamento// objeto “imagem” da classe Image instanciado com a imagem segmentadaByteProcessor processador = new ByteProcessor(imagem);// etapa de dilatação - 1o passo do fechamento// etapa de dilatação 1 passo do fechamentoprocessador.dilate(1,0);imagem = processador.createImage();
d B P (i )processador = new ByteProcessor(imagem);// etapa de erosão - 2o passo do fechamentoprocessador.erode(1,0);p ( , );imagem = processador.createImage();
Imagem Segmentada
Imagem Final
![Page 67: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/67.jpg)
Melhor uso de memória
E i ú l d iá i á i• Evitar o acúmulo de variáveis estáticas no método principal– Para auxiliar o desempenho do coletor de lixo
da máquina virtual Java.• O uso de variáveis estáticas deve ser
evitado– Ocupam muito recurso de memória– São as últimas instâncias a serem eliminadasSão as últimas instâncias a serem eliminadas
pelo garbage collector
![Page 68: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/68.jpg)
Melhor uso de memória
E ã d b ll• Execução do garbage collector:– System.gc() ou
– Runtime rt = Runtime.getRuntime();g ();rt.gc();long mem = rt freeMemory();long mem = rt.freeMemory();
E ã f t d () d lt• Execução frequente de gc() pode resultarna degradação do desempenho.
![Page 69: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/69.jpg)
Listagem: SegRdI.java (visão geral)bli l S RdI t d JF {public class SegRdI extends JFrame {
// atributosJPanel painelPrinc, painelBotoes;
b b b b bJButton btnAbrir, btnProc, btnLimpar, btnSair;File fileName; ImagePlus imagemIJ;// inicialização dos componentes gráficospublic void iniciaComponentes() { ... }// método da ação ao clicar o botão Abrirprivate void abrirActionPerformed(ActionEvent evt) { … }// método da ação ao clicar o botão Processarprivate void processarActionPerformed(ActionEvent evt) { … }// método da ação ao clicar o botão Limparprivate void limparActionPerformed(ActionEvent evt) { … }// método da ação ao clicar o botão Sairprivate void sairActionPerformed(ActionEvent evt) { System.exit(0); }// construtor padrãopublic SegRdI() { this.iniciaComponentes(); }// método principalp ppublic static void main(String[] args) { SegRdI aplicacao = new SegRdI(); }} // fim da classe
![Page 70: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/70.jpg)
Listagem: SegRdI.java (inicia interface gráfica)public void iniciaComponentes(){
this.setLayout(new BorderLayout()); painelPrinc = new JPanel();painelPrinc.setLayout(new BorderLayout()); this.add(painelPrinc, BorderLayout.CENTER);
i lB t JP l() i lB t tL t( Fl L t())painelBotoes = new JPanel(); painelBotoes.setLayout(new FlowLayout());this.add(painelBotoes, BorderLayout.SOUTH);
// adicionando botões// adicionando botõesbtnAbrir = new JButton(); painelBotoes.add(btnAbrir); btnAbrir.setText(“ Abrir ... ”);btnProc = new JButton(); painelBotoes.add(btnProc); btnProc.setText(“Processar”);// -> faz-se o mesmo para os botões “btnLimpar” e “btnSair”// -> faz-se o mesmo para os botões btnLimpar e btnSair
// configurar ações dos botõesbtnAbrir addActionListener(new ActionListener() {btnAbrir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) { abrirActionPerformed(evt); } } );btnProc.addActionListener( ... ); // relacionar com o método processarActionPerformedbtnLimpar.addActionListener( ... ); // relacionar com o método limparActionPerformedp ( ); // pbtnSair.addActionListener( ... ); // relacionar com o método sairActionPerformed
this.setVisible(true); this.setSize(450,350);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
} // fim do método initComponents
![Page 71: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/71.jpg)
Listagem: SegRdI.java (limpar interface)
private void limparActionPerformed(ActionEvent evt) {ImagePlus imp = new ImagePlus();ImageCanvas ic = new ImageCanvas(imp);g g ( p)painelPrinc.removeAll();painelPrinc.add(ic,BorderLayout.CENTER);p ( , y );
} // fim do método limparActionPerformed
![Page 72: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/72.jpg)
Listagem: SegRdI.java (abrir imagem)private void abrirActionPerformed(ActionEvent evt) {
// exibe caixa de diálogo para abrir arquivo de imagemJFileChooser dialogo = new JFileChooser();JFileChooser dialogo = new JFileChooser();dialogo.setFileSelectionMode(JFileChooser.FILES_ONLY);int result = dialogo.showOpenDialog(this);if (result == JFileChooser CANCEL OPTION) return;if (result == JFileChooser.CANCEL_OPTION) return;// recupera arquivo selecionadofileName = dialogo.getSelectedFile();// exibe erro se inválido// exibe erro se inválidoif (fileName == null || fileName.getName().equals(“”)) {
JOptionPane.showMessageDialog(this, “Nome de Arquivo Inválido”,“Nome de Arquivo Inválido” JOptionPane ERROR MESSAGE); return; }“Nome de Arquivo Inválido”, JOptionPane.ERROR_MESSAGE); return; }
imagemIJ = new ImagePlus(fileName.toString());JScrollPane sp = new JScrollPane( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JS llP HORIZONTAL SCROLLBAR AS NEEDED)JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);ImageCanvas ic = new ImageCanvas(imagemIJ); sp.add(ic);sp.setSize(imagemIJ.getWidth(), imagemIJ.getHeight());
l dd( d C )painelPrinc.add(sp,BorderLayout.CENTER);} // fim do método abrirActionPerformed
![Page 73: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/73.jpg)
Listagem: SegRdI.java (processamento da imagem - I)
private void processarActionPerformed(ActionEvent evt) {Image image = imagemIJ.getImage();B t P b t P B t P (i )ByteProcessor byteProc = new ByteProcessor(image);byteProc.medianFilter();image = byteProc.createImage();I Pl i Filt I Pl (“filt ” i )ImagePlus imFilt = new ImagePlus(“filtragem”,image);// descobrindo maior valor de nível de cinzaint max = -1;for(int lin = 0; lin < imFilt.getHeight(); lin++)
for(int col = 0; col < imFilt.getWidth(); col++){int[] pixels = imFilt.getPixel(col, lin);if (pixels[0]>max) max = pixels[0]; }
image = imFilt.getImage(); byteProc = new ByteProcessor(image);// aplicando a segmentação através de limiarizaçãobyteProc.threshold(max-1);image = byteProc.createImage();ImagePlus imSeg = new ImagePlus(“segmentacao”,image);image = imSeg.getImage(); byteProc = new ByteProcessor(image);
![Page 74: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/74.jpg)
Listagem: SegRdI.java (processamento da imagem - II)
// inicialmente aplica-se a dilataçãobyteProc.dilate(1,0);i b t P t I ()image = byteProc.createImage();ImagePlus imDil = new ImagePlus(“dilatacao”,image);image = imDil.getImage(); byteProc = new ByteProcessor(image);// posteriormente aplica-se a erosãobyteProc.erode(1,0);image = byteProc createImage();image = byteProc.createImage();ImagePlus imErosao = new ImagePlus(“erosao”,image);JScrollPane sp = new JScrollPane(
JS llP VERTICAL SCROLLBAR AS NEEDEDJScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
ImageCanvas ic = new ImageCanvas(imErosao); sp.add(ic);g gsp.setSize(imErosao.getWidth(), imErosao.getHeight());painelPrinc.removeAll();painelPrinc add(sp BorderLayout CENTER);painelPrinc.add(sp,BorderLayout.CENTER);
} // fim do método processarActionPerformed
![Page 75: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/75.jpg)
Listagem: SegRdI.java (acrescentando escrita)
// adotando a API Java 2D (alternativa para ImageJ)BufferedImage bi = new BufferedImage(imErosao getWidth()BufferedImage bi = new BufferedImage(imErosao.getWidth(),
imErosao.getHeight(), BufferedImage.TYPE_BYTE_BINARY);Graphics2D g2 = bi.createGraphics();p g p ();g2.drawImage(image, 0, 0, null);g2.dispose();try { ImageIO.write(bi, "png", new File("imagemFinal.png")); }catch(IOException ioe) { System.out.println( ioe.getMessage() ); }
// ou ainda, misturando com a API JAIPlanarImage imagemFinal = JAI.create("awtimage", image);g g ( g , g );JAI.create("filestore",imagemFinal,"imagemFinal.png","PNG");
![Page 76: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/76.jpg)
AplicativoAplicativo
![Page 77: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/77.jpg)
P tPra encerrar o assunto...
5. CONSIDERAÇÕES FINAIS
![Page 78: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/78.jpg)
Conclusões e Considerações Finaisç
• Algumas noções de PDI foram expostas• Algumas noções de PDI foram expostas para o desenvolvimento de um aplicativo específico;específico;
• Nas APIs Java:– a JAI apresenta melhor tratamento de
entrada/saída;á– ImageJ traz mais implementações básicas em
sua versão padrão;í í– As duas são bem flexíveis e extensíveis;
– Pode-se criar um aplicativo combinando as duas APIs.
![Page 79: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/79.jpg)
Dú id ?Dúvidas?
![Page 80: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/80.jpg)
Se gostou então podemos conversarSe gostou, então podemos conversar ...
encontre me aqui:... encontre-me aqui:
http://engcomp.sobral.ufc.br/professores/ialis/
http://www.linkedin.com/pub/ialis-cavalcante/13/b35/46
http://osum.sun.com/profile/IalisJunior
http://www.slideshare.net/ialis [email protected]
![Page 81: Técnicas de PDI com Java - Ercemapi 2009](https://reader031.vdocuments.site/reader031/viewer/2022020101/559e7b441a28abd8318b4744/html5/thumbnails/81.jpg)
Obrigado, ...... e vamos para o almoço!... e vamos para o almoço!