Eai galera do GUJ, blz ?
É o seguinte: uma vez havia utilizado o JAI em um trabalho de processamento digital de imagens … e nao tive nenhum problema com essa API …
agora estou utilizando-a no programa do meu TCC … e coloquei exatamente o que fiz no meu programa de PDI … mas nao funciona … nao entendo … pela minha logica, parece certo …
eh o seguinte: na classe segmentacao, ira receber os parametros img1, img2 e img3 que sao os caminhos das 3 imagens. apos isso, ira ser executado o metodo criaMatriz para gerar a matriz de pixels em cada caminho recebido atraves do JAI … apos gerar a matriz de pixels, igualei os valores gerados para serem utilizados posteriormente (h1 = height) … o problema é que qdo eu imprimo a matriz de pixels, ele imprime com os valores dos pixels zerados … eu comentei no codigo abaixo … vejam …
public class Segmentacao {
private int w, h;
private RandomIter iterator, it1;
private WritableRaster raster, rast1;
private int[] pixel, pix;
private BufferedImage image, image1;
private int height, width, h1, w1, h2, w2, h3, w3;
private int[][] mat1, mat2, mat3;
private PlanarImage pi;
private int nbands;
public Segmentacao(String img1, String img2, String img3) {
criaMatriz(img1);
h1 = height;
w1 = width;
it1 = iterator;
rast1 = raster;
image1 = image;
criaMatriz(img2);
h2 = height;
w2 = width;
criaMatriz(img3);
h3 = height;
w3 = width;
segUrbana();
}
public void criaMatriz(String img) {
pi = JAI.create("fileload", img);
SampleModel sm = pi.getSampleModel();
nbands = sm.getNumBands();
height = pi.getHeight();
width = pi.getWidth();
pixel = new int[nbands];
iterator = RandomIterFactory.create(pi, null);
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
raster = image.getRaster();
}
public void segUrbana() {
mat1 = new int[h1][w1];
mat2 = new int[h2][w2];
mat3 = new int[h3][w3];
for(h=0; h<h1; h++) {
for(w=0; w<w1; w++) {
System.out.println(mat1[h][w]); //fiz um teste para saber se existe valores nos pixels da matriz. E na saida, apareceu todos os pixels igualados a zero! pq sera ?
}
}
pix = new int[3];
for(h = 0; h < h1; h++) {
for(w = 0; w < w1; w++) {
it1.getPixel(w, h, pix);
mat1[h][w] = pix[0];
mat2[h][w] = pix[1];
mat3[h][w] = pix[2];
if(mat1[h][w] > 35 && mat1[h][w] < 110 && mat2[h][w] > 40 && mat2[h][w] < 150 && mat3[h][w] > 0 && mat3[h][w] < 30) {
pix[0] = 255;
pix[1] = 0;
pix[2] = 0;
}
else {
pix[0] = 0;
pix[1] = 0;
pix[2] = 0;
}
rast1.getPixel(w, h, pix);
}
}
try {
File file = new File("./TempImage/urbana1.jpg");
if(file.exists()) {
ImageIO.write(image1, "JPG", new File("./TempImage/urbana2.jpg"));
} else {
ImageIO.write(image1, "JPG", new File("./TempImage/urbana1.jpg"));
}
} catch(IOException e) {
JOptionPane.showMessageDialog(null, "Erro de gravação na imagem temporária");
}
}
}
aguardo respostas … t+