Salve a tutti! Sto provando a realizzare un software per l'elaborazione di immagini. Nulla di che in realtà, visto che mi serve per l'uni.
L'obiettivo è quello di applicare semplici filtri alle immagini (tipo sfocatura, messa a fuoco, etc.) utilizzando i metodi della classe BufferedImage.
Per realizzare l'effetto smoothing ad esempio (sfocatura) si fa così:
- si suddivide l'immagine in matrici 3x3 pixel
- per ogni matrice si prendono i valori del colore
- si fa la media (totale/9)
- si sostituisce il valore dei 9 pixel della matrice con il risultato appena ottenuto (ossia la media)
semplice, no? a dirsi... a farsi non tanto!! Oddio... l'algoritmo è semplice ma il risultato è sballato!!
Ho paura che il problema sia sui metodi getRGB e setRGB della classe BufferedImage che mi restituiscono un colore in chissà quale scala!
Io ho scritto questo codice e dovrebbe andare bene, ma ovviamente il risultato è tutt'altro che una sfocatura...
Qualcuno saprebbe aiutarmi o ha qualche idea in mente?codice:public static BufferedImage smoothingFilter(BufferedImage img){ int[] array = new int[9]; int i=0; int tempX = 1; int tempY = 1; for(tempY=1; tempY<=(img.getHeight()-3); tempY+=3){ //ripeto l'operazione per ogni riga for(tempX=1; tempX<=(img.getWidth()-3); tempX+=3){ //ripeto l'operazione per ogni colonna for(int x=tempX; x<tempX+3; x++){ for(int y=tempY; y<tempY+3; y++){ array[i] = img.getRGB(x,y); //memorizzo i valori in un array grande 9 i++; } } int somma = 0; for (i=0; i<array.length; i++){ somma += (array[i]/9); //faccio la media } for(int x=tempX; x<tempX+3; x++){ for(int y=tempY; y<tempY+3; y++){ img.setRGB(x,y,somma/9); //imposto il nuovo colore per i 9 pixel della matrice } } i=0; } } return img; }
Grazie mille!!!
ciaooo

Rispondi quotando