Vous êtes sur la page 1sur 9

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
farliz@myway.com

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()