Procesamiento Digital de Imagenes

Procesamiento Digital de Imágenes Departamento de Recursos Hídricos – Facultad de Ingeniería Agrícola -Udec Septiembre -

Views 164 Downloads 1 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Procesamiento Digital de Imágenes Departamento de Recursos Hídricos – Facultad de Ingeniería Agrícola -Udec Septiembre - 2007

Tarea 1 Operaciones Aritméticas y Transformaciones Geométricas *R.Lizardo [email protected] Introducción. El procesamiento digital de imágenes es el conjunto de técnicas que permiten mejorar la calidad o facilitar la búsqueda de información en una imagen (wikipedia 2007) dentro de las cuales están las operaciones aritméticas y transformaciones geométricas, que serán analizadas en este trabajo, para la realización de estas operaciones es necesario pensar en las imágenes como una matriz que contiene números digitales (ND) o píxeles representando un lugar en la escala de grises, se trabajará con imágenes de 8bits lo que significa que un píxel podrá tener un valor entre 0 y 255 , el 0 representa el tono mas oscuro (negro) y el 255 el tono mas claro( blanco), en las siguientes líneas se detallará conceptos básicos, las operaciones y se mostrará el efecto en la imagen. Histograma. El histograma de una imagen, es una herramienta visual de gran utilidad, permite con una simple mirada tener una idea aproximada de la distribución de los niveles de gris, el contraste que presenta y una pista del método mas adecuado para manipularla (TPI 2007). El histograma de una imagen digital con L niveles de gris en el rango [0, L-1] es una función discreta de la forma: h(rk) = nk / N Donde: rk es el k-eximo nivel de gris nk es el número de píxeles en la imagen con el nivel de gris rk N es el número total de píxel de la imagen k = 0, 1, 2, ..., L-1 niveles de gris

Fig1. der.Imagen fotógrafo original, izq. histograma

La figura uno muestra la imagen original (der.) y su respectivo histograma (izq.), analizando un poco la grafica decimos que la mayor cantidad de píxeles se encuentran entre los valores digitales 100 – 200, además la elevación de la curva en los valores cercanos a cero es producto de los píxeles mas oscuros en la imagen, en este caso correspondientes principalmente a la chaqueta del fotógrafo. Brillo de una Imagen. El brillo en una imagen nos indica la intensidad de los números digitales, el resultado de aplicar una operación para modificar el brillo, es una imagen más clara o más oscura dependiendo si hemos lo aumentado o disminuido, el brillo de una imagen esta en función de: g(x,y) = f(x,y) + brillo Donde brillo es constate para toda la imagen.

Fig2. der.Imagen fotógrafo aumentado 50% el Brillo , izq. histograma

En la figura dos se muestra la imagen con el brillo aumentado en un 50%, el resultado es una imagen mas clara, además el cambio se refleja también en el histograma teniendo una distribución de píxeles mas homogénea.

Contraste. El contraste es el que permite diferenciar visualmente objetos plasmados en una imagen, está relacionado con la diferencia de los niveles de gris claros y oscuros, la modificación del contraste consiste en variar el rango dinámico de la imagen. A continuación se muestra un ejemplo.

Fig3. Der.Imagen original, izq. Imagen con aumento de contraste.

El ajuste del contraste en la figura tres (izq.), permite diferenciar con mayor precisión el contenido del la imagen. Es posible realizar operaciones aritméticas con imágenes, como se aprecia por ejemplo al aumentar el brillo sumando a cada píxel un número o restándolo, de igual manera funciona el contraste básicamente en sumas y restas de números. Ruido en una imagen. El ruido corresponde a cada valor de píxel que no corresponda a la realidad, es principalmente causado por el equipo con se captura la imagen, las siguientes figuras muestran imágenes afectadas por ruido gausiano.

a)

b)

c)

La fig. (a) es la imagen original, la fig.(b) y (c) imágenes afectadas por ruido gausiano en distintos niveles. Una manera de eliminar el ruido, es el suavizado de la imagen que consiste en aplicar un filtro de

paso bajo, muy utilizado para eliminar el ruido gausiano. Cabe decir que este tipo de filtro afecta a Los bordes de la imagen remplazando los valores altos y bajos por los valores promedios, la fig. 4 muestra una imagen suavizada.

Fig.4 Imagen suavizada

Transformaciones Geométricas. Las transformaciones geométricas son operaciones que permiten manipular la posición de la imagen en el eje de coordenadas, asi como ajustar la escala y las distintas proyecciones de perspectiva, cuando se aplica una transformación geométrica, es decir el cambio de posición de un píxel a un nuevo lugar, tiende a distorsionarse la calidad visual de la imagen, y es necesario de contar con algoritmos para aminorar este problema, entre los mas comunes están NEAREST, BILINEAR, y BICUBICO, el primero conocido como el vecino mas próximo (en español ), asigna a la nueva casilla el valor mas cercano con relación a la posición original dejando intacto el valor del píxel, el segundo y tercero lo hacen realizando una interpolación bilinear y cúbica respectivamente, tomando en cuenta los valores de los píxeles vecinos. Uno de los métodos utilizados para el ajuste de la escala y posición de la imagen son las transformaciones afines. Las siguientes figuras muestran algunos ejemplos.

d)

e)

f)

En las fig. d), es la imagen original, la fig. e), muestra el cambio de escala y en la fig. f) cambia la escala y la posición. A continuación mas ejemplos de transformaciones geométricas.

Las imágenes presentadas son muestra de los efectos que se consiguen a través de las transformaciones afines. Se pueden conseguir otro tipo de transformaciones, pero esta vez se requiere del cambio del plano de proyección como cilíndrica, esférica y se puede generar una malla para que la imagen adopte una forma en particular.

Referencias. http://www.imageprocessingplace.com http://www.des.udc.es/%7Eadriana/TercerCiclo/CursoImagen/curso/web/Indice.html

Anexos. Código para transformaciones Cilíndrica y esférica (Matlab) " Image Processing Toolbox" • •

Cambiar el nombre de 'lena.bmp' por una imagen que tengan en su directorio con su respectiva extensión. generar dos archivos .m uno para cada función y ejecutar cualquiera.

function cilindro [x,y,z] = cylinder; I = imread('lena.bmp'); I = I(end:-1:1, :, :); warp(x,y,z,I); title('Proyeccion Cilindrica ','color','w','FontWeight','bold') set(gca, 'Color','k') set(gcf, 'Color','k','MenuBar', 'none',... 'Name','Proyecciones','Numbertitle','Off') uicontrol( ... 'style','push', ... 'units','normal', ... 'position',[0.85 0.02 0.1 0.05], ... 'FontSize',12, ... 'string','Next', ... 'callback','esfera'); function esfera I = imread('lena.bmp'); I = I(end:-1:1, :, :); [a, b, c] = sphere; warp(a,b,c,I) set(gca, 'Color','k') set(gcf, 'Color','k','MenuBar', 'none',... 'Name','Proyecciones','Numbertitle','Off') title('Proyeccion Esferica ','color','w','FontWeight','bold') uicontrol( ... 'style','push', ... 'units','normal', ... 'position',[0.1 0.02 0.1 0.05], ... 'FontSize',12, ... 'string','Back', ... 'callback','cilindro');

Ejemplos de transformaciones Geométricas en Pyhton_PIL >>> from Image import * >>> from ImageOps import mirror

>>> lena = open("C:\Python25\Work\lena.bmp") >>> lena.show() >>> lena.transform(lena.size, AFFINE, (2, 0, 0, 0, 2, 0)).show() >>> lena.transform(lena.size, AFFINE, (3, 0, 0, 0, 3, 0)).show() >>> lena.transform(lena.size, AFFINE, (4, 0, 0, 0, 4, 0)).show() >>> lena.transform(lena.size, AFFINE, (2, 0, 0, 0, 2, -512)).show() >>> lena.transform(lena.size, AFFINE, (2, 0, -512, 0, 2, -512)).show() >>> lena.transform(lena.size, AFFINE, (2, 0, -512, 0, 2, 0)).show() >>> lena.transform(lena.size, AFFINE, (2, 0, -255, 0, 2, -255)).show() >>> lena.transform(lena.size, AFFINE, (2, -0.5, 0, 0.5, 2, -255)).show() >>> lena.transform(lena.size, AFFINE, (2, -1, -80, 1, 2, -450)).show() >>> lena.transform(lena.size, AFFINE, (2, -1, -80, 0, 2, -255)).show() >>> lena.transform(lena.size, AFFINE, (2, 1, -500, 0, 2, -255)).show() >>> lena.transform(lena.size, AFFINE, (2, 0, -300, 1, 2, -500)).show() >>> lena.transform(lena.size, AFFINE, (2, 0, -300, -1, 2, -50)).show() >>> lena.transform(lena.size, AFFINE, (1, 0, 0, -1, 2, 0)).show() >>> lena.transform(lena.size, AFFINE, (1, 0, 0, 1, 2, -512)).show() >>> lena.transform(lena.size, AFFINE, (1, 0, 0, 0, 2, -255)).show() #transformacion EXTENT >>> lena.transform((200, 40), EXTENT, (200, 250, 400, 290)).show() >>> lena.transform((150, 70), EXTENT, (200, 320, 350, 390)).show() >>> lena.transform((700, 700), EXTENT, (0, 0, 512, 500)).show() # transformacion QUAD >>> lena = mirror(lena) >>> lena.transform(lena.size, QUAD, (0, 512, 0, 300, 300, 500, 300, 0 ),BICUBIC).show() >>> lena.transform(lena.size, QUAD, (400, 50, 300, 400, 50, 400, 100, 50 )).show() >>> lena.transform(lena.size, QUAD, (400, 150, 300, 400, 50, 400, 100, 150 )).show() >>> lena.transform(lena.size, QUAD, (200, 200, 250, 300, 50, 400, 100, 50 )).show() >>> lena.transform(lena.size, QUAD, (500, 300, 300, 300, 0, 500, 0, 1 )).show()