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 |