You are on page 1of 84

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando

e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Processamento de Imagens em Java

Rafael Santos
Instituto Nacional de Pesquisas Espaciais www.lac.inpe.br/rafael.santos

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Tpicos
1 2 3 4 5 6 7

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Objetivos e Pr-Requisitos

Objetivos do Tutorial

Entender mais sobre processamento de imagens digitais. Entender melhor que tarefas de processamento de imagens podem ser feitas com Java. Entender um pouco da Java Advanced Imaging API. Ver cdigo que funciona!

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Objetivos e Pr-Requisitos

Assumimos que...

Todos tem ao menos uma idia do que uma imagem digital. Todos conhecem Java (J2SE), em especial:
Encapsulamento. Herana. Swing e Threads (desejvel).

Todos podem encontrar ou imaginar aplicaes de processamento de imagens!

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Por qu em Java? Vantagens e Desvantagens

Hello World

Por qu em Java?

Preciso comentar sobre popularidade e exibilidade de Java? Temos APIs para representao, visualizao e I/O simples de imagens como parte do J2SE. Temos a API Java Advanced Imaging para operaes muito mais complexas! E a questo da performance?
Melhor do que esperado! No estou preocupado com real time. Mais valor clareza e simplicidade de cdigo.
Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Por qu em Java?

Hello World

Vantagens e Desvantagens

Hello World
1 2 3 4 5 6 7 8

public static void main(String[] args) throws IOException { BufferedImage image = ImageIO.read(new File(args[0])); String imageInfo = "Dimensions: "+image.getWidth()+"x"+ image.getHeight()+" Bands: "+ image.getRaster().getNumBands(); ImageIcon icon = new ImageIcon(image); JLabel imageLabel = new JLabel(icon);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Por qu em Java?

Hello World

Vantagens e Desvantagens

Hello World
9 10 11 12 13 14 15 16 17 18 19 20

JFrame frame = new JFrame(); frame.setTitle("Display Image: "+args[0]); Container contentPane = frame.getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(new JScrollPane(imageLabel), BorderLayout.CENTER); contentPane.add(new JLabel(imageInfo), BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400,400); frame.setVisible(true); }

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Por qu em Java?

Hello World

Vantagens e Desvantagens

Hello World

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Hello World

Por qu em Java?

Vantagens e Desvantagens

Vantagens e Desvantagens

Vantagens Linguagem j conhecida. Baixo custo. Performance adequada. Elegncia e clareza de cdigo. API extensiva e exvel. J2SE e J2EE.
Rafael Santos

Desvantagens No exatamente WORA! Problemas potenciais para algumas aplicaes.

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Imagens Digitais Exemplos de Imagens Outros Conceitos Bsicos

O que uma imagem digital?

Imagem = Matriz de pixels. Pixel = medida ou conjunto de medidas ou ndice para tabela. Podemos ter metadados.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Imagens Digitais Exemplos de Imagens Outros Conceitos Bsicos

O que uma imagem digital?

No somos limitados a imagens como as de cmeras digitais e scanners! Pixels podem ter mais que trs valores associados a eles. Pixels podem ter valores fora do tradicional intervalo [0, 255]. Pixels no precisam representar valores inteiros ou positivos! Exemplos: Imagens multispectrais e hiperspectrais. Imagens de modelos de terreno, mdicas (Raio-X), etc.
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Imagens Digitais Exemplos de Imagens Outros Conceitos Bsicos

Exemplos de imagens digitais

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Imagens Digitais Exemplos de Imagens Outros Conceitos Bsicos

Exemplos de imagens digitais

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Imagens Digitais Exemplos de Imagens Outros Conceitos Bsicos

Modelos de cores
Direto: cada pixel corresponde a um array de valores.

cada pixel um valor inteiro que aponta para uma tabela:


Indexado:

Mais cores, mais espao.

9 9 1 3 4 6

0 2 2 2 2 6

9 5 9 8 4 7

6 6 6 4 7 5

9 2 5 5 2 10 8 7 6 7 2 6

Menos cores, mais compacto.

Index Red Green Blue 0 0 0 0 1 64 64 64 2 128 128 128 3 192 192 192 4 255 255 255 5 255 0 0 6 0 255 0 7 0 0 255 8 255 255 0 9 255 0 255 10 0 255 255

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Imagens Digitais Exemplos de Imagens Outros Conceitos Bsicos

Outros conceitos

uma cor ou regio da imagem pode ser renderizada como transparente (isto , no ser renderizada). Translucncia: cada pixel pode ter um percentual de transparncia.
Transparncia:

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Antes de comear...

Como imagens podem ser de vrios tipos e estruturas, precisamos entender sua representao.
Awt permite representao rpida de imagens simples (visuais). JAI permite representao de imagens complexas. Modelo de representao bastante similar.

Veremos awt primeiro. nfase em programao.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Modelo de representao -

BufferedImage

BufferedImage
ColorModel
ColorSpace

Raster
SampleModel DataBuffer

Mais simples, imagens padro do awt. Podem ser criadas com construtor de BufferedImage. Pixels podem ser acessados com BufferedImage.getRaster().
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Lendo imagens e obtendo pixels

Algoritmo bsico: Abrir imagem. Obter dimenses a partir da imagem. Obter raster a partir da imagem. Alocar memria para pixels. Obter pixels a partir do raster. Manipular pixels.
1 2 3 4 5 6

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Lendo imagens e obtendo pixels, mtodo 1


1 2 3 4 5 6 7 8 9

public static void main(String[] args) throws IOException { BufferedImage image = ImageIO.read(new File(args[0])); int width = image.getWidth(); int height = image.getHeight(); int nbands = image.getSampleModel().getNumBands(); Raster inputRaster = image.getData(); int[] pixels = new int[nbands*width*height]; inputRaster.getPixels(0,0,width,height,pixels);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Lendo imagens e obtendo pixels, mtodo 1


10 11 12 13 14 15 16 17 18

for(int h=0;h<height;h++) for(int w=0;w<width;w++) { int offset = h*width*nbands+w*nbands; System.out.print("at ("+w+","+h+"): "); for(int band=0;band<nbands;band++) System.out.print(pixels[offset+band]+" "); } }

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Vantagens e desvantagens deste mtodo

Acesso a todos os pixels de uma s vez.

Endereamento/mapeamento (x , y , d ) pixel/banda pouco intuitivo! Assume imagem no indexada!

Acesso pode ser randmico. Gasto de memria para grandes imagens (java.lang.OutOfMemoryError): No execute o cdigo como mostrado com grandes imagens. OK, podemos paginar manualmente.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Lendo imagens e obtendo pixels, mtodo 2


1 2 3 4 5 6 7 8 9

public static void main(String[] args) throws IOException { BufferedImage image = ImageIO.read(new File(args[0])); int width = image.getWidth(); int height = image.getHeight(); int nbands = image.getSampleModel().getNumBands(); Raster inputRaster = image.getData(); int[] pixels = new int[nbands*width*height]; inputRaster.getPixels(0,0,width,height,pixels);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Lendo imagens e obtendo pixels, mtodo 2


10 11 12 13 14 15 16 17 18 19 20

for(int h=0;h<height;h++) for(int w=0;w<width;w++) { int rgb = image.getRGB(w,h); int r = (int)((rgb&0x00FF0000)>>>16); // Red level int g = (int)((rgb&0x0000FF00)>>>8); // Green level int b = (int) (rgb&0x000000FF); // Blue level System.out.print("at ("+w+","+h+"): "); System.out.println(r+","+g+","+b); } }

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Vantagens deste mtodo

Mapeamento (x , y ) pixel direto! Podemos usar alpha ou transparncia/translucncia. Funciona para imagens indexadas ou no. Ainda problemas/limitaes com memria.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Criando imagens na memria

Algoritmo bsico: Criar imagem. Obter raster a partir da imagem. Modicar amostras (samples) ou pixels da imagem. Gravar imagem em disco ou visualizar.
1 2 3 4

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Criando imagens na memria (nveis de cinza)


1 2 3 4 5 6 7 8 9 10 11 12 13

public static void main(String[] args) throws IOException { int width = 256; int height = 256; BufferedImage image = new BufferedImage(width,height, BufferedImage.TYPE_USHORT_GRAY); WritableRaster raster = image.getRaster(); for(int h=0;h<height;h++) for(int w=0;w<width;w++) raster.setSample(w,h,0,h*w); ImageIO.write(image,"PNG",new File("scale.png")); }
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Criando imagens na memria (nveis de cinza)

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Criando imagens na memria (cores/transparncia)


1 2 3 4 5 6 7 8 9

public static void main(String[] args) throws IOException { int width = 256; // Dimensions of the image int height = 256; int[] imageData = new int[4]; // ARGB! BufferedImage image = new BufferedImage(width,height, BufferedImage.TYPE_INT_ARGB); WritableRaster raster = image.getRaster();

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Criando imagens na memria (cores/transparncia)


10 11 12 13 14 15 16 17 18 19 20

for(int w=0;w<width;w++) for(int h=0;h<height;h++) { imageData[0] = 0; // R imageData[1] = w; // G imageData[2] = h; // B imageData[3] = 100; // A raster.setPixel(w,h,imageData); } ImageIO.write(image,"PNG",new File("argbpattern.png")); }

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Criando imagens na memria (cores/transparncia)

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo AWT para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens

Armazenando e visualizando imagens

Armazenando: Usar ImageIO.write(imagem,formato,File) com formato compatvel com a imagem. Visualizando: Criar ImageIcon com a imagem e JLabel com o ImageIcon. Modicar escala com getScaledInstance(novoW,novoH,hints).

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Antes de comear...
JAI tem suporte para imagens de grande porte (tiling). Flexibilidade complexidade.

Algoritmos de processamento so operaes. Podemos criar grafos de operaes. Execuo no-imediata.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Modelo de representao -

PlanarImage

PlanarImage
ColorModel
ColorSpace

Raster
SampleModel DataBuffer

Igual ao de BufferedImage. Classe PlanarImage pode ter layouts diferentes. Classe TiledImage representa tiles, herda de PlanarImage.
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Tiles e TiledImage

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Lendo imagens e obtendo pixels

Algoritmo bsico: Abrir imagem. Obter dimenses a partir da imagem. Obter um iterador a partir da imagem. Obter pixels a partir do iterador. Manipular pixels.
1 2 3 4 5

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Lendo imagens e obtendo pixels


1 2 3

Abrir imagem. Obter dimenses a partir da imagem. Obter um iterador a partir da imagem.

1 2 3 4 5 6 7 8 9 10

public static void main (String[] args) { PlanarImage pi = JAI.create("fileload", args[0]); int width = pi.getWidth(); int height = pi.getHeight(); SampleModel sm = pi.getSampleModel(); int nbands = sm.getNumBands(); int[] pixel = new int[nbands]; RandomIter iterator = RandomIterFactory.create(pi, null);
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Lendo imagens e obtendo pixels


4 5

Obter pixels a partir do iterador. Manipular pixels.

11 12 13 14 15 16 17 18 19 20

for(int h=0;h<height;h++) for(int w=0;w<width;w++) { iterator.getPixel(w,h,pixel); System.out.print("at ("+w+","+h+"): "); for(int band=0;band<nbands;band++) System.out.print(pixel[band]+","); System.out.println(); } }
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Vantagens deste mtodo

Mapeamento (x , y ) pixel direto! Qualquer nmero de bandas, qualquer tipo de pixel. Qualquer tamanho de imagem! No funciona para imagens indexadas. Podemos tambm usar RectIterator: Lemos pixel com RectIterator.getPixel(pixel); Avanamos leitor com RectIterator.nextPixel();

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Criando imagens na memria

Algoritmo bsico: Criar array (unidimensional) da imagem. Criar DataBuffer a partir do array. Criar SampleModel a partir do DataBuffer. Criar ColorModel a partir do DataBuffer. Criar Raster a partir do SampleModel e DataBuffer. Criar TiledImage a partir do SampleModel e ColorModel. Colocar Raster na TiledImage.
1 2 3 4 5 6 7 Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Criando imagens na memria


1

Criar array (unidimensional) da imagem.

1 2 3 4 5 6 7 8 9

public static void main(String[] args) throws IOException { int width = 256; // Dimensions of the image int height = 256; int[] imageDataSingleArray = new int[width*height]; int count = 0; for(int h=0;h<height;h++) for(int w=0;w<width;w++) imageDataSingleArray[count++] = h*w*4;

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Criando imagens na memria


2 3 4

Criar DataBuffer a partir do array. Criar SampleModel a partir do DataBuffer. Criar ColorModel a partir do DataBuffer.

10 11 12 13 14 15 16 17

DataBufferInt dbuffer = new DataBufferInt(imageDataSingleArray, width*height); SampleModel sampleModel = RasterFactory.createBandedSampleModel( DataBuffer.TYPE_INT,width,height,1); ColorModel colorModel = PlanarImage.createColorModel(sampleModel);
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Criando imagens na memria


5 6

Criar Raster a partir do SampleModel e DataBuffer. Criar TiledImage a partir do SampleModel e ColorModel. Colocar Raster na TiledImage.

18 19 20 21 22 23 24 25

Raster raster = RasterFactory.createWritableRaster(sampleModel,dbuffer, new Point(0,0)); TiledImage tiledImage = new TiledImage(0,0,width,height,0,0, sampleModel,colorModel); tiledImage.setData(raster); }
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Armazenando imagens

Usando operadores de JAI


PlanarImage image = JAI.create("fileload", "a.tif"); JAI.create("filestore",image,"a.tif","TIFF"); Suporte via JAI para BMP, GIF (leitura), FlashPix

(leitura), JPEG, PNG, PNM, TIFF, WBMP.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Visualizando imagens

Converter para BufferedImage, usar ImageIcon/JLabel e correr risco de excesso de uso de memria. Usar DisplayJAI.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

O Modelo JAI para Representao de Imagens Lendo Imagens e Obtendo Pixels Criando Imagens na Memria Armazenando e Visualizando Imagens Comentrios sobre JAI

Vantagens de usar

JAI

Flexibilidade total na estrutura das imagens. Suporte a tiling. Possibilidade de usar execuo no-imediata. Mais complicado! possvel misturar PlanarImage/TiledImage e BufferedImage:
PlanarImage.getAsBufferedImage() JAI.create("AWTImage",imagem)

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operadores de

JAI

Mtodo esttico JAI.create. J vimos trs exemplos:

JAI.create("fileload","a.tif") retorna uma PlanarImage. JAI.create("filestore",image,"a.tif","TIFF") grava uma PlanarImage. JAI.create("AWTImage",imagem) cria uma PlanarImage a partir de uma BufferedImage.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operadores de

JAI

Muitos outros operadores implementados. Muitos usam ParameterBlocks para informao de parmetros adicionais. Algoritmo bsico:
1 2 3 4 5

Criar uma instncia de PlanarImage. Criar uma instncia de ParameterBlock. Usar ParameterBlock.addSource(image). Usar ParameterBlock.add() para adicionar parmetros. Criar uma nova PlanarImage com JAI.create("operator",ParameterBlock).

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

invert

No precisa de parmetros alm da imagem original, no usa ParameterBlock.


1 2 3 4 5 6 7 8

PlanarImage input = JAI.create("fileload", args[0]); PlanarImage output = JAI.create("invert", input); JFrame frame = new JFrame(); frame.setTitle("Invert image "+args[0]); frame.getContentPane().add(new DisplayJAI(output)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

invert

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

binarize

Parmetros: imagem original, valor limiar.


1 2 3 4

ParameterBlock pb = new ParameterBlock(); pb.addSource(image); pb.add(1.0*threshold); PlanarImage thresholdedImage = JAI.create("binarize", pb);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

binarize

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

bandselect

Parmetros: image original, nmero da(s) banda(s) a ser extrada(s), pode ser usado sem ParameterBlock.
1 2 3 4 5

PlanarImage input = JAI.create("fileload", args[0]); int index = Integer.parseInt(args[1]); PlanarImage output = JAI.create("bandselect",input,new int[] {index}); JAI.create("filestore",output,args[2],"TIFF");

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

colorquantizer

Parmetros: imagem original, mtodo de quantizao, nmero de cores, limite, ROI ou rea de interesse/processamento, perodo de amostragem X e Y .
1 2 3 4 5 6 7 8 9

ParameterBlock pb = new ParameterBlock(); pb.addSource(image); pb.add(ColorQuantizerDescriptor.MEDIANCUT); pb.add(64); pb.add(32768); // para ColorQuantizerDescriptor.MEDIANCUT pb.add(null); // ROI pb.add(1); pb.add(1); PlanarImage quantizedImage = JAI.create("colorquantizer",pb);
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

colorquantizer

ColorQuantizerDescriptor.MEDIANCUT, ColorQuantizerDescriptor.NEUQUANT e ColorQuantizerDescriptor.OCTTREE.

Mtodos de quantizao

Para ColorQuantizerDescriptor.MEDIANCUT limite 32768. Para ColorQuantizerDescriptor.NEUQUANT limite 100. Para ColorQuantizerDescriptor.OCTTREE limite 65536.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

colorquantizer

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

scale

Parmetros: imagem original, escalas X e Y , translaes X e Y , mtodo de interpolao.


1 2 3 4 5 6 7

ParameterBlock pb = new ParameterBlock(); pb.addSource(image); pb.add(scale); pb.add(scale); pb.add(0.0F); pb.add(0.0F); pb.add(new InterpolationNearest()); PlanarImage scaledImage = JAI.create("scale", pb);

Mtodos de interpolao: InterpolationNearest(), InterpolationBicubic(), InterpolationBilinear(), etc.


Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

scale

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

rotate

Parmetros: imagem original, centros de rotao (X e Y ), translaes X e Y , mtodo de interpolao.


1 2 3 4 5 6 7

ParameterBlock pb = new ParameterBlock(); pb.addSource(image); pb.add(centerX); pb.add(centerY); pb.add(angle); pb.add(new InterpolationBilinear()); PlanarImage rotatedImage = JAI.create("rotate", pb);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

rotate

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

translate

Parmetros: imagem original, translaes X e Y .


1 2 3 4 5

pb = new ParameterBlock(); pb.addSource(input); pb.add(x); pb.add(y); output = JAI.create("translate",pb,null);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

crop

Parmetros: imagem original, origem (X e Y ), largura e altura do bloco a ser cortado.


1 2 3 4 5 6 7

ParameterBlock pb = new ParameterBlock(); pb.addSource(input); pb.add(x); pb.add(y); pb.add(width); pb.add(height); PlanarImage output = JAI.create("crop",pb,null);

Importante: crop modica origem da imagem! Usar translate para corrigir.


Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

shear

Parmetros: imagem original, tangente do ngulo de inclinao, direo, translaes X e Y , mtodo de interpolao.
1 2 3 4 5 6 7

ParameterBlock pb = new ParameterBlock(); pb.addSource(image); pb.add(shearing); pb.add(ShearDescriptor.SHEAR_VERTICAL); pb.add(0.0F); pb.add(0.0F); pb.add(new InterpolationNearest()); PlanarImage shearedImage = JAI.create("shear", pb);

Direo pode ser ShearDescriptor.SHEAR_VERTICAL ou ShearDescriptor.SHEAR_HORIZONTAL.


Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

shear

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

border

Parmetros: imagem original, largura da borda (esquerda, direita, superior e inferior), instncia de BorderExtender.
1 2 3 4 5 6 7

ParameterBlock pb = new ParameterBlock(); pb.addSource(image); pb.add(new Integer(left)); pb.add(new Integer(right)); pb.add(new Integer(top)); pb.add(new Integer(bottom)); pb.add(BorderExtender.createInstance( BorderExtender.BORDER_ZERO)); PlanarImage borderImage = JAI.create("border",pb);

Instncia de BorderExtender pode ser BorderExtenderConstant, BorderExtenderCopy, BorderExtenderReflect, BorderExtenderWrap, BorderExtenderZero.


Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

border

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

convolve

Convoluo usada para suavizar, achar bordas, achar elementos simples, etc. Usa um kernel ou mscara que ser aplicado sobre a imagem. Algoritmo bsico:
1 2 3 4

Criar um kernel ou mscara. Criar uma instncia de KernelJAI. Criar uma instncia de PlanarImage. Criar uma nova PlanarImage com JAI.create("convolve",imagem,kernel).

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Suavizao

Kernel com todos os valores constantes, de forma que a soma dos valores seja igual a 1.
1 2 3 4 5 6 7 8 9

int kernelSize = 5; // 5x5 float[] kernelMatrix = new float[kernelSize*kernelSize]; for(int k=0;k<kernelMatrix.length;k++) kernelMatrix[k] = 1.0f/(kernelSize*kernelSize); PlanarImage input = JAI.create("fileload", args[0]); KernelJAI kernel = new KernelJAI(kernelSize,kernelSize,kernelMatrix); PlanarImage output = JAI.create("convolve", input, kernel);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Suavizao

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Deteo de bordas

Kernel do operador de Sobel (horizontal).


1 2 3 4 5 6 7

float[] kernelMatrix = { -1, -2, -1, 0, 0, 0, 1, 2, 1 }; PlanarImage input = JAI.create("fileload", args[0]); KernelJAI kernel = new KernelJAI(3,3,kernelMatrix); PlanarImage output = JAI.create("convolve", input, kernel);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Deteco de bordas

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

extrema

Parmetros: somente imagem original. Cria como sada uma instncia de RenderedOp com vrias propriedades.
1 2 3 4 5 6 7 8

PlanarImage image = JAI.create("fileload", args[0]); ParameterBlock pbMaxMin = new ParameterBlock(); pbMaxMin.addSource(image); RenderedOp extremaOp = JAI.create("extrema", pbMaxMin); double[] allMins = (double[])extremaOp.getProperty("minimum"); double[] allMaxs = (double[])extremaOp.getProperty("maximum");

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

histogram

Parmetros: imagem original, ROI ou rea de interesse/processamento, perodo de amostragem X e Y , nmero de elementos no histograma, faixa de valores.
1 2 3 4 5 6 7 8 9

ParameterBlock pb1 = new ParameterBlock(); pb1.addSource(image); pb1.add(null); // ROI pb1.add(1); pb1.add(1); pb1.add(new int[]{256}); // Elementos do histograma pb1.add(new double[]{0}); pb1.add(new double[]{256}); PlanarImage histoOp = JAI.create("histogram", pb1); Histogram histo1 = (Histogram)histoOp.getProperty("histogram");
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Operador

histogram

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Visualizao em

JAI

Classe DisplayJAI (no parte ocial da API!) Pacote com.sun.media.jai.widget. Herda de JPanel, implementa MouseListener e MouseMotionListener. Suporta tiling visualizao de grandes imagens! Pode ser extendida!

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Visualizao em

JAI

O que pode ser feito?

Criar imagens substitutas no construtor visualizao de imagens de ponto utuante ou fora da faixa [0 255] ou com nmero de bandas > 3. Sobreescrever mtodo mouseMoved para obter informaes sobre pixels sob o ponteiro do mouse. Sobreescrever mtodo paint para desenhar informaes adicionais sobre a imagem. Criar imagens em outras escalas no construtor para visualizao de cones/thumbnails. Outras idias?
Rafael Santos Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Visualizao em

JAI

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Usando Operadores da API JAI Exemplo de Operadores: Operadores Espectrais Exemplo de Operadores: Operadores Geomtricos Exemplo de Operadores: Operador convolve Exemplo de Operadores: Operadores Estatsticos Repensando Visualizao em JAI

Visualizao em

JAI

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Concluses Mentirinhas Para saber mais...

Concluses

Processamento de imagens bsico: leitura de formatos comuns, acesso a pixels individuais, visualizao bsica, gravao de formatos comuns AWT/Swing. Processamento de imagens avanado: leitura de formatos menos comuns, imagens de grande porte, operaes complexas, acesso a pixels individuais, visualizaes complexas, gravao de formatos menos comuns JAI.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Concluses Mentirinhas Para saber mais...

ImageIO.read()/ImageIO.write()
Exceo javax.imageio.IIOException se arquivo no existir. Pior: java.lang.NullPointerException se arquivo no estiver em formato conhecido! Nem todas as distribuies tem todos os codecs! Nem todos os codecs esto presentes para leitura e gravao!

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Concluses Mentirinhas Para saber mais...

Codecs em ImageIO
1 2 3 4 5 6

String[] rtypes = ImageIO.getReaderMIMETypes(); for(String rtype:rtypes) System.out.println(rtype); String[] wtypes = ImageIO.getWriterMIMETypes(); for(String wtype:wtypes) System.out.println(wtype);

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Concluses Mentirinhas Para saber mais...

Codecs em ImageIO
JDK1.5.0_04, Linux: Codecs para leitura: image/png image/jpeg image/x-png image/vnd.wap.wbmp image/bmp image/gif

Codecs para gravao:

image/png image/jpeg image/x-png image/vnd.wap.wbmp image/bmp

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Concluses Mentirinhas Para saber mais...

Outros probleminhas

Valores (r , g , b) de pixels de imagens no formato jpeg podem ser ligeiramente diferentes dependendo do mtodo! Instalao de JAI ainda manual.

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Concluses Mentirinhas Para saber mais...

Para saber mais...

JAI:

http://java.sun.com/products/ java-media/jai/ www.lac.inpe.br/rafael.santos/ Java/JAI

JAI Stu:

Rafael Santos

Processamento de Imagens em Java

Introduo Processamento de Imagens em Java Conceitos Bsicos de Processamento de Imagens Criando, Armazenando e Visualizando Imagens (AWT) Criando, Armazenando e Visualizando Imagens (JAI) Operaes Simples com a API JAI Finalizando...

Concluses Mentirinhas Para saber mais...

Propaganda:

http://www.sjcjug.org

Rafael Santos

Processamento de Imagens em Java

You might also like