Академический Документы
Профессиональный Документы
Культура Документы
Guillermo Ambrosio.-2008-18890
20 de mayo de 2010
Resumen
El procesamiento de imágenes digitales consiste en la transformación de cada uno de los puntos (o pixeles)
en una imagen digital mediante un algoritmo. Las imágenes digitales que actualmente son planas y representadas
en formato bidimensional; esto es, son un arreglo rectangular de datos; tienen una dimensión de altura y una
dimensión de ancho y por lo tanto pueden ser representadas como un lugar geométrico rectangular en un plano.
Algunas transformaciones simples pueden implementarse en la práctica como aplicaciones lineales que transforman
un vector de R2 en otro vector R2 , es decir; de una imagen a otra imagen, ambas bidimensionales. Éstas son
llamadas transformaciones geométricas (que no necesariamente se refieren al mismo concepto que aplicaciones
geométricas). Además existen otros tipos de transformaciones lineales llamadas point-wise; esto significa que no
transforman las coordenadas de los pixeles de la imagen sino que modifican los valores de cada uno de los pixeles;
ya sea para balancear el brillo, el contraste o el color, por ejemplo. En las transformaciones point-wise se usa la
convolución y los histogramas.
Introducción
Las imágenes digitales son procesadas digitalmente vistas como mapas de bits de dos dimensiones, y por lo tanto
pueden representarse como el espacio vectorial del plano, también pueden ser vistas como matrices, para realizar
técnicas como la de convolución.
En este artı́culo se presenta brevemente la teorı́a matemática tras las operaciones necesarias para transformaciones
básicas de imágenes digitales y el aspecto práctico para implementarlas en un programa de computadora; desarrollo
algunos temas sobre álgebra lineal, suficiente para poder desarrollar los algoritmos de procesamiento en la práctica.
Estos conceptos matemáticos, como por ejemplo las aplicaciones lineales, facilitan y dan formalidad a las técnicas de
procesamiento.
1. Marco Teórico
1.1. Espacios Vectoriales
Los espacios vectoriales son conjuntos cuyos elementos cumplen con la cerradura de la suma, es decir que la suma
de dos de sus elementos dé un elemento que esté dentro del conjunto; y la multiplicación de un elemento por una
cantidad también resulta en un elemento contenido en el conjunto. Además de esto, sus elementos deben cumplir las
siguientes condiciones:
1. ~x + ~y = ~y + ~x.
1
2. (~x + ~y ) + ~z = ~x + (~y + ~z).
3. La existencia del vector origen 0 tal que ~x + 0 = ~x.
4. La existencia del vector inverso −~x, para el vector ~x tal que ~x + (−~x) = 0.
5. Si c es un número,entonces c(~x + ~y ) = c~x + c~y .
F : R2 → R2
Toda aplicación lineal tiene una matriz asociada tal que F : R2 → R2 puede expresarse ası́ F (X) = M · X para
cada vector columna X del espacio R2 , es decir para todo par de coordenadas, y donde M es la matriz asociada a F.
2
1.3.1. Convolución
La convolución es un operador matemático que transforma funciones f y g en una tercera función, las funciones
son superpuestas y g es invertida y trasladada por un parámetro, que en las aplicaciones de señales en el tiempo, como
el audio por ejemplo, suele ser el tiempo.
Z
f (t) ∗ g(t) = f (τ )g(t − τ )
Está definida para funciones; es una aplicación lineal del espacio de las funciones en el espacio de las funciones.
En el caso de señales digitales, hablamos de señales discretas, como lo son las imágenes digitales o las señales de
audio digital. Las señales digitales no son continuas; son discretas y por esto no se puede usar la definición anterior
dado que los datos están dispuestos de manera no continua, y estan disponibles en instantes del tiempo y es por eso
necesaria una definición numérica como la siguiente:
X
h[m] = f [m] ∗ g[m] = f [n]g[m − n]
n
En este caso h, f y g son vectores; g es el vector de convolución, o también llamado en ocasiones matriz de
convolución. También puede representarse f y g como sumatorias de productos entre los valores discretos y la función
de impulso unitario desplazada a lo largo de la señal, que es lo que lleva a formular la definición anterior de convolución.
Para definir una señal discreta matemáticamente usando la función de impulso unitario δ
1 x=0
δ(x) =
0 x 6= 0
∞
X
f [x] = f [k]δ[x − k]
k=−∞
Convolución en forma de producto matricial. Donde h[n] es un sistema discreto lineal de n elementos, x[n] es
una señal discreta. La respuesta a la operación y[m] = x[n] ∗ h[n] se expresa de la siguiente manera:
T
x[0] h[0] h[1] h[2] ... h[n] 0k ... 02 ∗ n − 1 y[0]
x[1] 0
h[0] h[1] h[2] ... h[n] 0k ... 02 ∗ n − 2
y[1]
x[2] 0
0 h[0] h[1] h[2] ... h[n] 0 k ... 0 2 ∗ n − 3
y[2]
. . = .
. . .
. . .
x[n] 0 0 ... h[0] h[1] h[2] ... h[n] y[2 ∗ n − 1]
Ejemplo
Supongamos la matriz x = 7 8 9 8 5 4 y la matriz de convolución h = 1 2 1 .
Luego
1 2 1 0 0 0 0 0
0 1 2 1 0 0 0 0
0 0 1 2 1 0 0 0
x· 0 0
= 7 22 32 34 30 22 13 4
0 1 2 1 0 0
0 0 0 0 1 2 1 0
0 0 0 0 0 1 2 1
3
Esta operación matricial de convolución es clasificada como un sistema discreto lineal.
La convolución también tiene ciertas propiedades matemáticas, entre las fundamentales están la conmutatividad,
asociatividad, distributividad y asociatividad con multiplicación escalar.
Reflejar en x
Esta aplicación refleja la imagen en el eje x. Como puede verse el primer vector columna que es (1 0) mantiene
igual la base unitaria del eje x, en cambio, al ver el segundo vector columna transpuesto (0 -1) se puede observar que
la segunda coordenada está negada; con lo cual la imagen se refleja verticalmente, esto es: en el eje x.
1 0
A=
0 −1
Reflejar en y
−1 0
A=
0 1
Torcer
ab + 1 a
A=
b 1
4
Ésta transformación rota los ejes x e y sin que queden necesariamente perpendiculares. Las coordenadas transfor-
madas quedan de esta manera:
x0 = x + ay
y 0 = y + bx
Los ejes quedan inclinados por un factor b y a para x y y respectivamente.
Escalar
s1 0
A=
0 s2
s1 es el factor de escala horizontal y s2 el factor de escala vertical
Traslación
Para trasladar una imagen en el plano, desde un punto de vista matemático, se puede sumar una matriz con los
desplazamientos ası́: (x, y) + (a, b) = (x + a, y + b). Otro método consiste en usar coordenadas homogéneas.
Donde A · B = C. Si bien este logaritmo realiza una multiplicación de matrices completa y general para cualquier
tamaño de matrices, necesita los valores definidos dentro de los arrays (el tipo de dato usado para representar a
las matrices en el caso de C/C++) A y B; ya que los lenguajes de programación comunes no pueden manejar
variables simbólicas como lo son x e y en el vector (x, y)T ; sino sólo variables con valores conocidos. Además para
implementar transformaciones geométricas en el plano R2 , necesitamos solamente matrices de 3x3 o 2x2 y el algoritmo
anterior podrı́a resumirse en un algoritmo donde no se haga uso de ciclos y saltos condicionales, y que por lo tanto
consumirá menos recursos. Tomar en cuenta también que esta multiplicación de matrices es para todos y cada uno
de los puntos en una imagen ası́ mientras más cargado sea operar cada punto, esta carga se multiplica por el número
de puntos en la imagen. Por esto las transformaciones geométricas se implementan con un algoritmo especı́fico para
cada tipo de transformación. Por ejemplo, la rotación puede implementarse ası́:
5
x2 = x1*cos_theta - x1*sen_theta;
y2 = x2*sen_theta + x1*cos_theta;
Donde x1 e y1 son las coordenadas originales, x2 e y2 son las coordenadas rotadas y los valores cos(θ) y sen(θ)
ya han sido calculados y están almacenados en las variables sen theta y cos theta.
En el caso de escalar una imagen, la transformación matemática parece simple pero en la práctica es necesario
definir un método para deducir los pixeles de la nueva imagen, ya sea por replicación o interpolación. Por replicación
me refiero a copiar un pixel determinado de la imagen original a la imagen nueva y por interpolación a calcular el valor
del pixel de acuerdo a los pixeles que estén alrededor. Los métodos de interpolación tienen resultados mejores pero
consumen más recursos.
Hace falta también un factor que normalice el resultado, lo que dejarı́a la fórmula ası́:
1 X
P f [n]g[m − n]
n f [n] n
6
• Poner el pizel en el mapa de bits de salida.
#define gauss_ancho 7
sumr=0;
sumg=0;
sumb=0;
for(i=1;i<entrada->w-1;i++){
for(j=1;j<entrada->h-1;j++){
sumr=0;
sumg=0;
sumb=0;
for(k=0;k<gauss_ancho;k++){
color=getpixel(entrada,i-((gauss_ancho-1)>>1)+k,j);
r=getr32(color);
g=getg32(color);
b=getb32(color);
sumr+=r*gauss_factores[k];
sumg+=g*gauss_factores[k];
sumb+=b*gauss_factores[k];
}
putpixel(intermedio,i,j,makecol(sumr/gauss_sum,sumg/gauss_sum,
sumb/gauss_sum));
}
}
for(i=1;i<entrada->w-1;i++){
for(j=1;j<entrada->h-1;j++){
sumr=0;
sumg=0;
sumb=0;
for(k=0;k<gauss_ancho;k++){
color=getpixel(intermedio,i,j-((gauss_ancho-1)>>1)+k);
r=getr32(color);
g=getg32(color);
b=getb32(color);
sumr+=r*gauss_factores[k];
sumg+=g*gauss_factores[k];
sumb+=b*gauss_factores[k];
}
7
sumr/=gauss_sum;
sumg/=gauss_sum;
sumb/=gauss_sum;
putpixel(salida,i,j,makecol(sumr,sumg,sumb));
}
}
Las aplicaciones para la técnica de convolución en imágenes digitales son muy importantes y amplias, ya que a
partir de éstas se realizan también análisis para detección de bordes, detección de movimiento en varias imágenes,
reconocimiento de forma, y filtros diversos.
Conclusiones
Los mapas de bits, de las imágenes digitales, pueden ser manipulados como espacios vectoriales de dos dimen-
siones. Gracias a esto pueden ser transformados usando conceptos matemáticos del álgebra lineal.
El procesamiento de imágenes digitales por computadora tiene limitaciones y no es capaz de entender un lenguaje
matemático formal; es por esto que es necesario idear algoritmos eficientes, además de idear técnicas que eviten
ciertos efectos indeseados (como, por ejemplo, al agrandar una imagen sin usar alguna técnica de suavizado, ésta
se verá con pixeles grandes y de esquinas remarcadas, o al hacerla pequeña, ésta puede ver efectos de aliasing).
Referencias
[1] Serge Lang, Álgebra Lineal
[2] Frederic Patin, artı́culo en lı́nea http://www.gamedev.net/reference/articles/article2007.asp
[3] Enciclopedia en lı́nea libre Wikipedia.