El álgebra lineal y el procesamiento digital de imágenes. Parte III. Transformaciones afines.

El álgebra lineal y el procesamiento digital de imágenes. Parte III. Transformaciones afines.
21 Octubre 2016

En el artículo anterior presentamos algunos ejemplos sobre el uso del álgebra lineal en el procesamiento digital de imágenes, específicamente en el diseño de filtros. En este artículo vamos a mostrar más ejemplos, pero esta vez relacionados con las transformaciones que no alteran los píxeles, sino la posición de los mismos en la imagen.

La posición de cada pixel se puede determinar por la columna y la fila donde está, de tal forma que para cualquier imagen se puede construir una matriz donde cada entrada es un vector bidimensional (x, y) que describe la posición de cada píxel en la matriz.

En el procesamiento digital de imágenes existe un grupo de transformaciones que reciben las coordenadas de un píxel como entrada, y retornan las nuevas coordenadas donde el píxel debe ser colocado; de forma que, al computar estas trasformaciones para todos los píxeles de una imagen, se obtiene una nueva imagen.

Nos centraremos en un tipo de estas transformaciones, las transformaciones afines, las cuales preservan la colinealidad (puntos y líneas rectas, planos, etc.). Las transformaciones afines mapean puntos en nuevos puntos aplicando una combinación lineal de operaciones de traslación, rotación, escalado y transvección.

Revisaremos entonces todas estas operaciones básicas, pero antes de explicar cómo definirlas en términos matriciales, veamos como las imágenes pueden interpretarse geométricamente.

Las imágenes pueden ser vistas como un conjunto de puntos en el sistema de coordenadas cartesianas, donde las coordenadas de cada punto son determinadas por la columna y la fila donde se encuentra el píxel correspondiente dentro de la imagen.

(0,0) x y

En vez de utilizar un sistema de coordenadas cartesianas normal, donde la y aumenta cuando nos movemos hacia arriba, es común utilizar un sistema donde el eje y está invertido, debido al hecho que la esquina superior izquierda de la imagen se considera que se corresponde a las coordenadas (0, 0), y mientras nos movemos hacia la derecha o abajo, el valor de la x y de la y aumentan respectivamente.

(0,0) x y a b

Así que, geométricamente, un pixel se considera como un punto (a, b) en el plano xy.

Para representar las transformaciones afines matricialmente, podemos usar coordenadas proyectadas. Esto significa representar un vector de dos dimensiones (x, y) como un vector de tres dimensiones (x, y, 1) y de forma análoga para dimensiones superiores. Usando esta notación, cualquier transformación afín se puede expresar como una multiplicación de matrices:

 
x'
y'
1
    = T •   
x
y
1
 

Donde T es una matriz de orden 3x3.

Traslación

Cualquier traslación se puede descompones como dos movimientos simples: horizontal y vertical. En el primero movemos los puntos en la dirección del eje x, y en el segundo en la dirección del eje y.

Algebraicamente, mover un vector en el eje x es equivalente a adicionar una constante (la distancia a lo largo del eje x: positiva si se mueve hacia la derecha, negativa en caso contrario) a la primera componente. De la misma forma, mover un vector en el eje y es equivalente a adicionar una constante a la segunda componente; y mover un vector en cualquier dirección es equivalente a adicionar dos constantes, a y b, a la primera y segunda componente del vector, respectivamente. Utilizando la notación de tres componentes, se puede expresar como:

 
x'
y'
1
   =   
1 0 a
0 1 b
0 0 1
   •   
x
y
1
   =   
x + a
y + b
1
 

De manera que la matriz de la transformación es:

T =   
1 0 a
0 1 b
0 0 1
 
x y a b

Rotación

La matriz de la transformación es:

T =   
cosθ -senθ 0
senθ cosθ 0
0 0 1
 

Donde θ es el ángulo de la rotación. Note que cuando se rota una imagen, la misma es rotada alrededor del origen de coordenadas (0, 0).

x y

Si queremos rotar la imagen alrededor de su centro, necesitamos primeramente trasladar la imagen de tal forma que su centro coincide con el origen de coordenadas, luego rotar la imagen, y finalmente trasladarla nuevamente a su posición original. La siguiente serie de figuras ilustra el proceso.

x y
x y
x y

Algebraicamente, estas transformaciones se pueden expresar como la multiplicación de tres matrices: la primera para trasladar la imagen, la segunda para rotarla, y la tercera para trasladarla nuevamente (las matrices se colocan en orden inverso).

 
x'
y'
1
   =   
1 0 w/2
0 1 h/2
0 0 1
   •   
cosθ -senθ 0
senθ cosθ 0
0 0 1
   •   
1 0 -w/2
0 1 -h/2
0 0 1
   •   
x
y
1
 

Multiplicando las tres matrices, obtenemos una única matriz para realizar toda la transformación:

 
x'
y'
1
   =   
cosθ -senθ -w/2•cosθ + h/2•senθ + w/2
senθ cosθ -w/2•senθ - h/2•cosθ + h/2
0 0 1
   •   
x
y
1
 

Aquí, w y h son el ancho y la altura de la imagen, respectivamente.

Escalado

Esta transformación agranda o achica una imagen. La matriz de la transformación es:

T =   
α 0 0
0 β 0
0 0 1
 

α y β son los factores de escala sobre el eje x y el eje y, respectivamente. Para factores de escala mayores que 1, la imagen será más grande a lo largo del eje correspondiente, y para factores de escala menores que 1, la imagen será más pequeña.

Note que cuando se escala una imagen, se escalará las dimensiones y también la posición en el plano, así que si se desea colocar la imagen resultante en correspondencia con el origen, tendrá que realizar una traslación después de la operación de escalado.

La siguiente figura muestra el resultado de una operación de escalado usando 1.4 como factor de escala sobre el eje x, y 0.8 sobre el eje y.

x y

Volteo

Esta transformación es útil cuando se desea cambiar la dirección de la imagen, y se puede hacer verticalmente u horizontalmente. Ambas pueden ser vistas como casos especiales de escalado o más intuitivamente como reflexiones sobre uno de los ejes (dependiendo del tipo de volteo). Para colocar la imagen resultante de forma que se superponga sobre la imagen original, es necesario realizar una traslación al final.

La matriz para el volteo vertical es:

T =   
1 0 0
0 -1 h
0 0 1
 

La matriz para el volteo horizontal es:

T =   
-1 0 w
0 1 0
0 0 1
 

Aquí, w y h son también el ancho y el alto de la imagen, respectivamente.

Transvección

Cuando se realiza en la dirección del eje x, esta transformación, también conocida como inclinación, desplazará cada punto horizontalmente en una cantidad proporcional a su coordenada y. Gráficamente, las líneas paralelas al eje x permanecen donde están, pero las líneas verticales se tornan oblicuas, dependiendo del factor de transvección, que es la cotangente del ángulo de inclinación de las líneas verticales.

Cuando se realiza en la dirección del eje y, ocurre lo contrario, las líneas paralelas al eje y permanecen donde están, pero las líneas horizontales se inclinan.

La siguiente figura muestra un ejemplo de transvección de 30 grados en el eje x.

x y

La matriz de transvección en la dirección del eje x es:

T =   
1 tanθ 0
0 1 0
0 0 1
 

Y la matriz de transvección en la dirección del eje y es:

T =   
1 0 0
tanθ 1 0
0 0 1
 

Note que cuando se inclina una imagen usando cualquier de las dos matrices de transvección, la operación se realiza alrededor del origen de coordenadas. Si se desea inclinar la imagen alrededor de su centro, se necesita realizar el mismo procedimiento explicado para la rotación.

En el próximo artículo mostraremos algunos ejemplos prácticos en Javascript sobre toda la teoría vista hasta ahora.

Entradas relacionadas

Aún no hay comentarios


Tu comentario

Nunca compartiremos su dirección de correo.
Los comentarios son moderados antes de hacerlos visible para todos. La foto de perfil se obtiene de Gravatar usando su correo electrónico.