R(x,y):= A(f1(x,y), f2(x,y))
Transformación geométrica: el valor de un píxel depende de otro píxel (o varios) cuya posición es calculada a través de un par de funciones f1 y f2.
El tamaño de la imagen de salida puede ser distinto del tamaño de la imagen de entrada.
Transf. global
Transf. local
Entrada
Salida
Tr. geométrica
+
Ejemplo. Desplazamiento y recorte (trim): dada una imagen A, seleccionar un trozo rectangular, desde el punto (x0, y0) con tamaño (tX, tY).
R: imagen de (0..tX-1, 0..tY-1)
R(x,y):= A(x+x0, y+y0), ?(x,y)?R
¿Qué pasa si A(x+x0, y+y0)está fuera de rango?
Asignar alguna constante a R.
No modificar lo que hubieraantes en R.
(x0,y0)
tX
tY
A
R
Normalmente esta transformación no aparece de forma explícita, sino implícitamente, al trabajar con ROI
Reflejos y rotaciones exactas (s. horario)
Sea A la imagen de entrada, de (0..mX, 0..mY)
La esquina superior izquierda es (0, 0)
Espejo horizontal: R(x,y):= A(mX-x, y)
R: (0..mX, 0..mY)
Espejo vertical: R(x,y):= A(x, mY-y)
R: (0..mX, 0..mY)
Rotar 90º: R(x,y):= A(y, mY-x)
R: (0..mY, 0..mX)
Rotar 180º: R(x,y):= A(mX-x, mY-y)
R: (0..mX, 0..mY)
Rotar 270º: R(x,y):= A(mx-y, x)
R: (0..mY, 0..mX)
0
1
0
1
2
A
En general la transformación tendrá la forma:
R(x, y):= A(f1(x,y), f2(x,y))
Siendo f1 y f2 dos funciones cualesquiera del tipo:
f1, f2: N x N ? R
f1: posición en X del original para el píxel resultante (x,y)
f2: posición en Y del original para el píxel resultante (x,y)
Ejemplo. En la rotación de 180ºf1(x,y):= mX-x f2(x,y):= mY-y
0
1
0
1
2
0
1
0
1
2
A
R
+
… ? R ¿Qué ocurre si el resultado es un número no entero?
Por ejemplo, se puede conseguir un aumento de 2x con una transformación del tipo:
R(x,y):= A(x/2, y/2), con R: (0..2mX+1, 0..2mY+1)
A
0
1
0
1
2
0
1
0
1
2
3
4
5
2
3
R
R(0, 0):= A(0/2, 0/2) = A(0, 0) OK
R(1, 0):= A(1/2, 0/2) = A(0.5, 0)
R(1, 1):= A(1/2, 1/2) = A(0.5, 0.5)
Índices no definidos en el array. ¿Qué hacer ahí?
Problema: las imágenes son señales discretas, pero la transformación geométrica las trata como si fueran continuas (definidas en todo el plano).
0
1
0
1
2
X
Y
¿Cuánto vale la imagen ahí?
Solución: aplicar una interpolación.
Tipos de interpolación: vecino más próximo, bilineal, bicúbica, supermuestreo.
A
+
Interpolación: Vecino más próximoCualquier punto del espacio toma el valor del píxel más cercano.
0
1
0
1
2
X
Y
Implementación:
f1(x,y) ? ?f1(x,y) + 0,5?
f2(x,y) ? ?f2(x,y) + 0,5?
R(x,y)= A(?f1(x,y) + 0,5?, ?f2(x,y) + 0,5?)
A
Ejemplo. Zoom de 10x con vecino más próximo.R(x,y):= A(?x/10? , ?y/10?)
Ventajas:
Es muy sencilla y rápida de calcular.
Inconvenientes:
El efecto de cuadriculado es evidente, y da lugar imágenes de poca calidad.
Imagen original 25×26
Imagen ampliada 250×260
Interpolación bilineal
En una dimensión, una interpolación lineal significa trazar una línea recta entre cada par de puntos consecutivos.
Cálculo de la interpolación lineal. Sea p el punto que queremos interpolar.
Sup. que p se encuentra entre i y d, es decir: i= ?p?, d= i+1
El valor interpolado en p será: A’(p):= (1-a)A(i) + aA(d)
siendo a= p-i
A(x)
0
1
2
X
Valores interpolados
p
Media ponderada, de los valores de i y d según la distancia a
a
1-a
En dos dimensiones, la interpolación bilineal consiste en aplicar dos interpolaciones lineales:
1. Interpolar la función horizontalmente, en las filas existentes.
2. Interpolar la función verticalmente en todo el espacio (usando la anterior).
1º interpolar horizontalmt.
2º interpolar verticalmt.
0
1
0
1
2
X
Y
A(x,y)
¿Cómo calcular el valor interpolado de un punto (px, py), A’(px,py)?
Página siguiente |