Sunteți pe pagina 1din 9

BENEMRITA UNIVERSIDAD AUTNOMA DE PUEBLA

Facultad de Ciencias de la Computacin

Procesamiento Digital de Imagenes

Tarea No.5

FILTROS DE ACLARADO

Vctor Manuel Morales de Jess

Otoo 2012

DESARROLLO
Se realiz la implementacin de correccin de gamma los filtros de aclaramientos logartmico y senoidal . A continuacin se explicara detalladamente el desarrollo de cada mtodo.

a) Correccin Gamma
Para implementar este mtodo, se utiliz la siguiente formula:

Donde ingresando el valor gamma podremos alterar la iluminacin de la imagen asignando un nuevo valor a cada pixel de la imagen resultante. El cdigo que realiza esta tarea es el mtodo siguiente:
public BufferedImage gamma(double gamm){ double gamma=gamm; datos.clear(); conjuntoDatos.removeAllSeries(); imagenModificada = new BufferedImage(imagenOriginal.getWidth(), imagenOriginal.getHeight(), BufferedImage.TYPE_INT_RGB); for (int i = 0; i < imagenModificada.getWidth(); i++){ for (int j = 0 ; j < imagenModificada.getHeight() ; j++){ int color=imagenOriginal.getRGB(i,j); Color color_obtenido = new Color(color); int col_rojo= color_obtenido.getRed(); int rojoGamma =(int)( 255.0*Math.pow(col_rojo/255.0,gamma)); int col_verde= color_obtenido.getGreen(); int verdeGamma =(int)( 255.0*Math.pow(col_verde/255.0,gamma)); int col_azul= color_obtenido.getBlue(); int azulGamma =(int)( 255.0*Math.pow(col_azul/255.0,gamma)); int colorRGB=(rojoGamma << 16) | (verdeGamma << 8) | azulGamma; imagenModificada.setRGB(i, j, colorRGB); datos.add(col_rojo,rojoGamma); } } return imagenModificada; //retorno la imagen para pintarla }

En las lneas marcadas de color amarillo se realiza la implementacin de la formula para obtener el nuevo color de la imagen resultante, en la Figura 1 se muestra una imagen a la cual se le aplic la correccin gamma y a continuacin en se muestran los resultados obtenidos con diferentes valores de gamma as como la grfica de la funcin para cada caso.

Figura 1. Imagen a la que se le aplicara la correccin gamma

Valor de gamma establecido a 0.5

Se puede observar claramente que existe un aclaramiento en la imagen, la cual ahora se aproxima a los tonos ms claros.

Valor de gamma establecido a 1

En la imagen superior podemos observar que con un valor de gama igual a 1, la imagen resultante es exactamente igual a la imagen fuente, esto debido a que aplicando la formula, la variacion del color del pixel resultante no se ve afectado, eso lo podemos observar en la grafica de la funcion, donde obtenemos la funcion identidad.

Valor de gamma establecido a 2.5

En la imagen se puede observar que con un valor de gamma mayor a 1 la imagen tiende a oscurecerse y por lo consiguiente la grfica de la funcin muestra la tendencia de los colores de la imagen hacia los tonos oscuros. En el programa se ha decidido poder elegir un valor gamma mximo de 5, esto debido a que con valores superiores la imagen prcticamente quedara en negro como lo muestra la siguiente figura.

b) Funcin Logartmica
Para realizar el aclarado de la imagen utilizando la funcin logartmica utilizamos la siguiente formula:

En este caso necesitamos un valor de alfa, el cual pasaremos desde un JComboBox, el cdigo que realiza el aclarado logartmico es el siguiente:

public BufferedImage aclaradoLogaritmo (double alf){ double alfa=alf; int maxr=0, maxg=0, maxb=0; double tempr,tempg,tempb, ar, ag, ab; datos.clear(); conjuntoDatos.removeAllSeries(); imagenModificada = new BufferedImage(imagenOriginal.getWidth(), imagenOriginal.getHeight(), BufferedImage.TYPE_INT_RGB); for (int i = 0; i < imagenModificada.getWidth(); i++){ for (int j = 0 ; j < imagenModificada.getHeight() ; j++){ int color=imagenOriginal.getRGB(i,j); Color color_obtenido = new Color(color); int col_rojo= color_obtenido.getRed(); if(col_rojo>maxr) maxr=col_rojo; int col_verde= color_obtenido.getGreen(); if(col_verde>maxg) maxg=col_verde; int col_azul= color_obtenido.getBlue(); if(col_azul>maxb) maxb=col_azul; } } for(int i = 0;i <imagenModificada.getWidth();i++) for(int j=0; j<imagenModificada.getHeight();j++){ ar = (double) (maxr/Math.log((alfa*maxr) +1)); ag = (double) (maxg/Math.log((alfa*maxg) +1)); ab = (double) (maxb/Math.log((alfa*maxb) +1)); int color=imagenOriginal.getRGB(i,j); Color color_obtenido = new Color(color); int color_rojo= color_obtenido.getRed(); int color_verde= color_obtenido.getGreen(); int color_azul= color_obtenido.getBlue(); tempr = (double) ( ar * ( Math.log( (alfa * color_rojo) + 1 ) ) ); tempg = (double) ( ag * ( Math.log( (alfa * color_verde) + 1 ) ) ); tempb = (double) ( ab * ( Math.log( (alfa * color_azul) + 1 ) ) ); if(tempr<0) color_rojo=0; else if(tempr>255) color_rojo=255; else color_rojo = (int)tempr; if(tempg<0) color_verde=0; else if(tempg>255) color_verde=255; else color_verde = (int)tempg; if(tempb<0) color_azul=0; else if(tempb>255) color_azul=255; else color_azul= (int)tempb; int colorRGB=(color_rojo << 16) | (color_verde << 8) | color_azul; imagenModificada.setRGB(i, j, colorRGB); datos.add(color_rojo,); } return imagenModificada; }

En las lneas marcadas de amarillo se encuentran las operaciones establecidas en la frmula para obtener el aclarado de la imagen aplicando la funcin logartmica, los ifs los empleo nicamente para verificar que los valores obtenidos de las operaciones se encuentren en un rango de 0 a 255, ya que si excediera de esos rangos existiran problemas al pintar el pixel de la imagen. En las imgenes siguientes se muestran distintas pruebas realizadas con diferentes valores para el valor de alfa, mostrando distintos niveles de aclaramiento segn el valor de alfa.

Valor Alfa establecido a .20

En la imagen superior se muestra el resultado de aplicar el filtro logaritmico con un valor alfa igual a 20, se puede observar que el resultado es bueno, ya que presenta una aclarado uniforme de la imagen.

Valor Alfa establecido a 1

En la imagen superior se muestra el resultado de aplicar el filtro logaritmico con un valor alfa igual a 1, que es el mayor valor alfa que puede establecerse, se puede observar claramente la diferencia con la imagen anterior.

b) Funcin Seno
Para implementar el aclarado por medio de la funcin Seno, partimos de la formula siguiente:

El cdigo que realiza el filtro utilizando la funcin seno es el siguiente:


public BufferedImage aclaradoSeno(){ datos.clear(); conjuntoDatos.removeAllSeries(); int maxr=0, maxg=0, maxb=0; double tempr,tempg,tempb, ar, ag, ab; imagenModificada = new BufferedImage(imagenOriginal.getWidth(), imagenOriginal.getHeight(), BufferedImage.TYPE_INT_RGB); for (int i = 0; i < imagenModificada.getWidth(); i++){ for (int j = 0 ; j < imagenModificada.getHeight() ; j++){ int color=imagenOriginal.getRGB(i,j); Color color_obtenido = new Color(color); int col_rojo= color_obtenido.getRed(); if(col_rojo>maxr) maxr=col_rojo; int col_verde= color_obtenido.getGreen(); if(col_verde>maxg) maxg=col_verde; int col_azul= color_obtenido.getBlue(); if(col_azul>maxb) maxb=col_azul; } } for(int i = 0;i <imagenModificada.getWidth();i++) for(int j=0; j<imagenModificada.getHeight();j++){ int color=imagenOriginal.getRGB(i,j); Color color_obtenido = new Color(color); int col_rojo= color_obtenido.getRed(); int col_verde= color_obtenido.getGreen(); int col_azul= color_obtenido.getBlue(); ar = Math.PI * col_rojo/(2*maxr); ag = Math.PI * col_verde/(2*maxg); ab = Math.PI * col_azul/(2*maxb); tempr = (double)(maxr * Math.sin(ar)); tempg = (double)(maxg * Math.sin(ag)); tempb = (double)(maxb * Math.sin(ab)); if(tempr<0) col_rojo=0; else if(tempr>255) col_rojo=255; else col_rojo = (int)tempr; if(tempg<0) col_verde=0; else if(tempg>255) col_verde=255; else col_verde = (int)tempg; if(tempb<0) col_azul=0; else if(tempb>255) col_azul=255; else col_azul= (int)tempb; int colorRGB=(col_rojo << 16) | (col_verde << 8) | col_azul; imagenModificada.setRGB(i, j, colorRGB); } return imagenModificada; }

En el texto marcado se muestra la implementacin de la frmula para obtener el filtro, donde se realizan las operaciones. El resultado de aplicar el filtro de la funcin seno es el que se muestra en la siguiente imagen:

CONCLUSIONES
Podemos concluir aunque existen distintos tipos de filtros de aclarado de imgenes como lo son Correccin Gamma, Filtro de Funcin Logaritmo, Filtro de Funcin Seno, cada uno de estos filtros permiten obtener resultados muy especficos, aunque a simple vista el resultado es aparenta ser muy similar, cada filtro brinda la posibilidad de obtener el aclarado de una imagen segn se requiera. Una ventaja de los filtros elaborados es que son muy simples de implementar y de igual forma no son costosos en recursos para su implementacin. Por ultimo puedo concluir que debido a la posibilidad de poder usar los distintos filtros, es posible un mejor procesamiento de las imgenes digitales, ya que cada uno de ellos puede obtener mejores resultados en imgenes con caractersticas distintas.

S-ar putea să vă placă și