Sei sulla pagina 1di 123

PROCESAMIENTO AUDIOVISUAL

Programa de teora
1. Adquisicin y representacin de imgenes. 2. Procesamiento global de imgenes. 3. Filtros y transformaciones locales. 4. Transformaciones geomtricas. 5. Espacios de color y el dominio frecuencial. 6. Anlisis de imgenes. 7. Vdeo y sonido digital.
(c) Gins Garca Mateos, http://dis.um.es/profesores/ginesgm Dept. de Informtica y Sistemas, Universidad de Murcia

Procesamiento Audiovisual

Tema 4. Transformaciones geomtricas.


4.1. Interpolacin y transformaciones bsicas. 4.2. Transformaciones afines. 4.3. Transformaciones bilineal y perspectiva. 4.4. Transformaciones de mapeo. A.4. Transf. geomtricas OpenCV.

Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


90 92 45 39 67 87 83 69 75 78 80 115 78 82 130 154

Transf. global Transf. local Tr. geomtrica

62 102 83 69

68 89 90 92

78 76 80 69

81 85 111 121

Entrada

Salida

R(x,y):= A(f1(x,y), f2(x,y)) Transformacin geomtrica: el valor de un pxel depende de otro pxel (o varios) cuya posicin es calculada a travs de un par de funciones f1 y f2.

El tamao de la imagen de salida puede ser distinto del tamao de la imagen de entrada.
Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Ejemplo. Desplazamiento y recorte (trim): dada una imagen A, seleccionar un trozo rectangular, desde el punto (x0, y0) con tamao (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 hubiera antes en R. A
(x0,y0) tY tX

Normalmente esta transformacin no aparece de forma explcita, sino implcitamente, al trabajar con ROI

Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


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..m , 0..m ) Procesamiento Audiovisual
A 0 1 2 0 1

4.1. Interpolacin y transf. bsicas.


En general la transformacin 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: posicin en X del original para el pxel resultante (x,y) f2: posicin en Y del original para el pxel resultante (x,y)

Ejemplo. En la rotacin de 180 f1(x,y):= mX-x 0 1 2 f2(x,y):= mY-y


0 A 1 0 1 2 0 1

Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


... R Qu ocurre si el resultado es un nmero no entero? Por ejemplo, se puede conseguir un aumento de 2x con una transformacin del tipo: R(x,y):= A(x/2, y/2), con R: (0..2mX+1, 0..2mY+1)
0 1 2 0 1 2 0 R 1 2 3 ndices no definidos en el array. Qu hacer ah? 3 4 5

0 1

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)

Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Problema: las imgenes son seales discretas, pero la transformacin geomtrica las trata como si fueran continuas (definidas en todo el plano). A
0 Cunto vale la imagen ah? 1 Y 0 1 2 X

Solucin: aplicar una interpolacin. Tipos de interpolacin: vecino ms prximo, bilineal, bicbica, supermuestreo. Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Interpolacin: Vecino ms prximo Cualquier punto del espacio toma el valor del pxel ms cercano.
A 0 0 1 2 X

1 Y

Implementacin: 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)

Procesamiento Audiovisual

Ejemplo. Zoom de 10x con vecino ms prximo. R(x,y):= A(x/10 , y/10)

4.1. Interpolacin y transf. bsicas.

Imagen original 25x26

Imagen ampliada 250x260

Ventajas: Es muy sencilla y rpida de calcular. Inconvenientes: El efecto de cuadriculado es evidente, y da lugar imgenes de poca calidad. Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Interpolacin bilineal En una dimensin, una interpolacin lineal significa trazar una lnea recta entre cada par de puntos consecutivos.
Valores interpolados A(x) 0 1 a p 1-a 2 Media ponderada, de los valores de i y d segn la X distancia a

Clculo de la interpolacin 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 Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


En dos dimensiones, la interpolacin bilineal consiste en aplicar dos interpolaciones lineales:
1. Interpolar la funcin horizontalmente, en las filas existentes. 2. Interpolar la funcin verticalmente en todo el espacio (usando la anterior). A(x,y) 0 0 1 2 X 1 interpolar horizontalmt. 2 interpolar verticalmt.

1 Y

Cmo calcular el valor interpolado de un punto (px, py), A(px,py)? Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Sea p= (px, py), con i= px, d= i+1, s= py, r= s+1 con a= px-i, b= py-s
A(x,y) s (px,py) r i d b 1-b 1-a Media ponderada de los 4 pxeles circundantes X

Clculo de la interpolacin bilineal:

Esto recuerda a A(px, s) = (1-a)A(i, s) + aA(d, s) una convolucin, A(px, r) = (1-a)A(i, r) + aA(d, r) no? A(px, py) = (1-b)A(px, s) + bA(px, r) A(px, py) = (1-a)(1-b)A(i, s) + a(1-b)A(d, s) + (1-a)bA(i, r) + abA(d, r)

Procesamiento Audiovisual

Ejemplo. Zoom de 10x con interpolacin bilineal. R(x,y):= A(x/10, y/10)

4.1. Interpolacin y transf. bsicas.

Imagen original 25x26

Vecino ms prximo

Interpolacin bilineal

Indicacin: un zoom entero de K con interpolacin bilineal es parecido (= a veces) a un zoom de K con vecino ms prximo, seguido de un filtro de media de KxK. Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


La interpolacin bilineal mejora la de vecino ms prximo, pero produce un efecto de zonas rectangulares. Interpolacin bicbica: basada en dos interpolaciones cbicas. En una dimensin, la interpolacin cbica consiste en trazar una cbica entre los 4 puntos ms prximos (2 a la izquierda y 2 a la derecha). A(x) = c1x3 + c2x2 + c3x + c4
Valores interpolados

A(x) i-1 i p i+1 i+2 X

Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Clculo de la interpolacin cbica.
Sea p el punto que queremos interpolar. i= p Obtener las 4 ecuaciones: A(i-1)=A(i-1); A(i)=A(i); A(i+1)=A(i+1); A(i+2)=A(i+2) 4 ecuaciones, 4 incgnitas despejar y obtener c1, c2, c3, c4 Aplicar las constantes, obteniendo A(p)

Interpolacin bicbica. Igual que la bilineal, se basa en dos interpolaciones cbicas: 1. Interpolacin cbica horizontal, en las filas existentes (usando 4 puntos). 2. Interpolacin cbica vertical en todo el espacio usando 4 puntos (usando la anterior interpolacin). En la interpolacin bicbica de un punto (px, py) intervienen los 16 puntos circundantes. Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Clculo de la interpolacin bicbica. Igual que con la bilineal, el valor del punto se puede calcular como una media ponderada de los 4x4 pxeles circundantes.
i-1 j-1 j Y j+1 j+2 (px,py) a i i+1 i+2 X

A(px,py) = n=-1..2m=-1..2 A(i+n,j+m)P(n-a)P(b-m) Siendo: P(k) = 1/6(C(k+2)3-4C(k+1)3+6C(k)3-4C(k-1)3) C(k) = max(0, k) Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Ejemplo. Zoom de 10x con interpolacin bicbica.

Imagen original 25x26 Aumento de 10x con interpolacin bilineal Aumento de 10x con interpolacin bicbica

Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Comparacin. Detalle del zoom de 10x, con vecino ms prximo, interpolacin bilineal y bicbica. Se ha aplicado un perfilado en las 3, para destacar el efecto del zoom.

Vecino ms prximo

Interpolacin bilineal

Interpolacin bicbica

En todos los casos se nota la falta de detalle (obviamente), pero en la bilineal son ms evidentes los artificios horizontales y verticales que en la bicbica. Procesamiento Audiovisual

La interpolacin tambin es importante en las rotaciones no exactas (que veremos ms adelante) y, en general, en cualquier transformacin geomtrica.
Este artificio de escalonamiento abrupto es conocido como aliasing

4.1. Interpolacin y transf. bsicas.

Vecino ms prximo

Interpolacin bilineal

Interpolacin bicbica

La interpolacin bicbica siempre suele producir el mejor resultado, aunque es algo ms costosa. Merece la pena el aumento de tiempo respecto a la bilineal? Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


En las operaciones de reduccin tambin se aplican interpolaciones, pero... Observar estas estructuras R: mX/k extraas. x mY/k Reduccin de k: R(x, y):= A(kx, ky), con Ejemplo. Reduccin de 5x.
Esto tb. es aliasing

Imagen original 500x386

Reduccin de 5x con vecino ms prximo

Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


El problema no se soluciona con interpolacin bilineal o bicbica.

Imagen original 500x386

Reduccin de 5x con interpolacin bilineal

Reduccin de 5x con interpolac. bicbica

El problema se debe a que los detalles son ms pequeos que la resolucin de salida. Pero, adems, los mtodos de interpolacin no mejoran la situacin: cada pxel de salida es un muestreo ordenado de uno de entrada. Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Ejemplo. Reduccin de 3x. R(x,y) = A(3x, 3y)
0 1 2 3 4 5 Todos esos pxeles no influyen en el resultado 0 1

0 1 2 3

0 1

Solucin: cada pxel de salida debera ser la media de los 3x3 pxeles de entrada correspondientes. Interpolacin por supermuestreo (super sampling) Idea: considerar el pxel como un volumen con cierto rea. Aplicar varias veces la transformacin y tomar la media. Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Supermuestreo uniforme, en rejilla cuadrada.
0.5 0.75 1 1.25 1.5

R(x,y)
0.5 0.75 1 1.25 1.5

A(f1(1,0.5), f2(1,0.5)) A(f1(1.25,0.75), f2(1.25,0.75))

A(f1(1,1), f2(1,1))
A(f1(1.25,1.5), f2(1.25,1.5))

R(x,y):= media {A(f1(x-0.5,y-0.5), f2(x-0.5,y-0.5)), ... A(f1(x-0.5,y+0.5), f2(x-0.5,y+0.5)), ..., A(f1(x,y-0.5), f2(x,y0.5)), ..., A(f1(x,y+0.5), f2(x,y+0.5)), ..., A(f1(x+0.5,y-0.5), f2(x+0.5,y-0.5)), ..., A(f1(x+0.5,y+0.5), f2(x+0.5,y+0.5))}

Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Ejemplo. Reduccin de 5x, con supermuestreo.

Imagen original 500x386

Reduccin de 5x con interpolacin bilineal

Reduccin de 5x con supermuestreo

Resultado: el supermuestreo logra un resultado de mucha ms calidad. Evita el problema del aliasing. Sin embargo, el supermuestreo es mucho ms costoso, requiere ms clculos. Cuanto mayor reduccin, mayor es el efecto del aliasing. Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Una alternativa al supermuestreo es aplicar primero un filtro de suavizado (por ejemplo, de media) y despus un simple vecino ms prximo.

Imagen suavizada con media de 5x5

Reduccin de 5x con vecino ms prximo, de la suavizada

Reduccin de 5x con supermuestreo, de la original

Pero esto slo es aplicable en las transformaciones que impliquen una reduccin de resolucin. Procesamiento Audiovisual

4.1. Interpolacin y transf. bsicas.


Conclusiones
Transformacin geomtrica: cada pxel de salida depende de uno de entrada cuya posicin es calculada de acuerdo a un par de funciones. Como las posiciones pueden ser no enteras, es necesario aplicar interpolaciones: vec. ms prximo, bilineal, bicbica. En zoom, funciona mejor la bicbica. En reduccin, el supermuestreo. Pero son ms costosas que las otras. Las interpolaciones bilineal y bicbica (y otras ms La cara Marte avanzadas) dan la sensacin de mejorar lade resolucin de la imagen, pero cuidado... Cualquier detalle aparente de resolucin inferior a un pxel es una mera alucinacin. Procesamiento Audiovisual

Las transformaciones afines son cualquiera de los cuatro tipos siguientes, o combinaciones de las mismas. Escala Traslacin

4.2. Transformaciones afines.

Rotacin

Inclinacin

Procesamiento Audiovisual

Transformacin de traslacin (desplazamiento): R(x,y):= A(x+dx, y+dy) Ejemplos.


A Traslacin (1, 1) Traslacin (-1, -1) R1(x,y):= A(x+1,y+1) R2(x,y):= A(x-1,y-1)

4.2. Transformaciones afines.

Si las imgenes A y R tienen el mismo tamao, algunos pxeles caen fuera de la imagen A. Qu valor toman? Ms que una interpolacin sera una extrapolacin... Pero no tiene mucho sentido. Se puede usar mejor un valor constante predefinido. O no modificar el contenido previo. Procesamiento Audiovisual

4.2. Transformaciones afines.


A
(dx,dy) tY tX

Trasladar (dx, dy) y recortar (tx, ty) R

Aplicaciones:
Seleccionar y recortar una regin rectangular. Aunque, como ya hemos visto, no suele aparecer de forma explcita, sino al manejar ROI. Tambin suele aparecer en combinacin con las otras operaciones, para centrar la imagen resultante. Ejemplo. Recordar la operacin de rotacin de 180: R(x, y):= A(mX-x, mY-y) Procesamiento Audiovisual

4.2. Transformaciones afines.


Transformacin de escala: R(x,y):= A(exx, eyy)
ex = escala en el eje X ey = escala en el eje Y Normalmente ser igual en ambos ejes (ex=ey), aunque puede ser distinta.

Pero es ms intuitivo el concepto de aumento o zoom:


R(x,y):= A(x/ax, y/ay) ax = aumento en el eje X = 1/ex ay = aumento en el eje Y = 1/ey Si la imagen A es de tamao mX x mY, la imagen resultante R ser de mXax x mYay Procesamiento Audiovisual

4.2. Transformaciones afines.


ax, ay mayor que 1 Aumento o zoom de la imagen Aplicar interpolacin bilineal o bicbica. ax, ay menor que 1 Reduccin (decimate) de la imagen Aplicar supermuestreo o suavizado previo. Ejemplos. Transformaciones de escala. R1 R2 A ax= ay= 0,8 ax= 2 ay= 0,5

Reducir al 80% El aumento sirve para hacer zoom digital, pero recordar sus limitaciones.

Aumentar el doble en X y reducir a la mitad en Y

Procesamiento Audiovisual

Transformacin de rotacin:

4.2. Transformaciones afines.

Hemos visto las rotaciones exactas (90, 180, 270), pero cmo realizar una rotacin de un ngulo cualquiera (en sentido horario)? Punto en A
Punto en R (0,y) Y X (x,0) Punto en A Punto en R

El punto (x, 0) en R corresponde en A a (xcos , -xsen ) El punto (0, y) en R en A a (ysen , ycos ) (x, y) en R (xcos + ysen , -xsen + ycos ) en A Procesamiento Audiovisual

Rotacin de una imagen A en un ngulo : R(x,y):= A(xcos + ysen , -xsen + ycos ) La rotacin se suele expresar matricialmente: cos sen x Lo que cae fuera ) R(x,y):= A( de la imagen no -sen cos y Ejemplos.
se modifica

4.2. Transformaciones afines.

Rotar 10

Rotar -10

Ojo: estas rotaciones son respecto al punto (0,0). Cmo hacerlas respecto a un centro arbitrario (cx,cy)? Procesamiento Audiovisual

4.2. Transformaciones afines.


Rotacin de A en un ngulo , respecto a un centro (cx,cy) Idea: es equivalente a una rotacin respecto a (0,0), seguida de un desplazamiento (dx, dy) adecuado. Cunto? El centro no se debe modificar: R(cx,cy):= A(cx,cy) R(cx,cy):= A(cxcos +cysen +dx, -cxsen +cycos +dy) Solucin: dx= cx - cxcos - cysen ; dy= cy + cxsen - cycos Matricialmente, la rotacin con centro (cx,cy) sera: R(x,y):= A( cos -sen sen cos cx - cxcos - cysen cy + cxsen - cycos x ) 1

Procesamiento Audiovisual

Ejemplos. Rotaciones respecto a un centro cualquiera. Imagen de entrada Rotar -10 Rotar 10

4.2. Transformaciones afines.

Se ha utilizado interpolacin bicbica. Recordar la importancia de la interpolacin.

Vecino ms prximo

Interpolacin bilineal

Procesamiento Audiovisual

Transformacin de inclinacin (shear):

4.2. Transformaciones afines.

La inclinacin transforma una regin rectangular en un rombo. Sirve para simular una perspectiva. Posibilidades: inclinacin en X, en Y o en ambos ejes.
Imagen de entrada Inclinacin en X de b/a Inclinacin en X de -b/a a a

b b Inclinacin en Y de b/a Inclinacin en Y de -b/a Inclinacin en X e Y b b a a

El valor de inclinacin es la tangente del ngulo. Procesamiento Audiovisual

4.2. Transformaciones afines.


Cmo obtener la transformacin de inclinacin? Ejemplo. Inclinacin en X de cantidad ix.
xa X Punto en A ya 1 Y (xa, ya) ix g (xr, yr) Punto en R

(xa, ya) = (xr-g, yr). Pero, cunto vale g? Por analoga de tringulos: g/yr = ix/1 g= ixyr Inclinacin en X en cantidad ix: R(x, y):= A(x - ixy, y)

Procesamiento Audiovisual

4.2. Transformaciones afines.


De manera similar... inclinacin en Y en cantidad iy: R(x, y):= A(x, y - iyx) Inclinacin X en ix, Y en iy: R(x, y):= A(x - ixy, y - iyx) Matricialmente: R(x,y):= A( Ejemplos. 1 -iy -ix 1 x y )
Inclinacin ix=0; iy=0,2

Inclinacin ix=-0,4; iy=0

Procesamiento Audiovisual

4.2. Transformaciones afines.


Parte de la imagen se sale. Solucin: igual que antes, aplicar un desplazamiento para centrar el resultado. De cunto? O bien, ampliar el tamao de la imagen resultado para que quepa toda la imagen. Cunto? En X: abs(ix)mY; en Y: abs(iy)mX Ejemplos.
Inclinacin ix=-0,4 Inclinacin iy=0,2 Inclinacin ix=0,1;iy=0,3

Procesamiento Audiovisual

4.2. Transformaciones afines.


Qu tienen en comn todas las transformaciones afines? Todas ellas se pueden expresar de forma matricial: R(x,y):= A( c11 c21 c12 c22 c13 c23 x y ) 1 Inclinacin
0 0

Traslacin 1 0 dx 0 1 dy

Escala ex 0 0 0 ey 0

Rotacin
cos sen -sen cos

1 -iy

-ix 1

0 0

Es ms, cualquier combinacin de transformaciones afines es una transformacin afn, y se puede expresar de forma matricial. Procesamiento Audiovisual

4.2. Transformaciones afines.


Podemos definir una transformacin afn genrica: R(x,y):= A( c11 c21 c12 c22 c13 c23 x y ) 1

La matriz ((c11,c12,c13),(c21,c22,c23)) son los parmetros de la transformacin. Puede implicar escalas, traslaciones, rotaciones, etc. Cmo calcular la tr. afn equivalente a dos tr. afines? Usar el producto matricial, aadiendo una fila con (0, 0, 1).
c11 c21 0 c12 c22 0 c13 c23 1 d11 d12 d22 0 d13 d23 1 r11 r12 r22 0 r13 r23 1

d21 0

r21 0

Procesamiento Audiovisual

4.2. Transformaciones afines.


Ejemplo. Sobre una imagen aplicamos 1) traslacin (a, b), 2) escala (c, d), 3) rotacin e, y 4) traslacin (f, g). Podemos calcular la matriz de transformacin equivalente: 1 0 0 0 1 0 f g 1
cos e 0 ccos e sen e 0 0 1

c 0 0

0 d 0

0 0 1

1 x 0 0

0 1 0

a b 1

x -sen e cos e 0 x

dsen e dcos e 0

accos e+f+bdsen e bdcos e+g-acsen e 1

-csen e 0

En lugar de aplicar 4 transformaciones sobre toda la imagen, basta con aplicar la transformacin equivalente. Procesamiento Audiovisual

Uso. Una transformacin afn permite mapear una regin rectangular cualquiera en un rombo cualquiera. O, en general, cualquier rombo en otro rombo (se supone que un rectngulo es tambin un rombo). Transformacin afn genrica

4.2. Transformaciones afines.

Cmo calcular los parmetros de esta transformacin? Problema: dado un rombo en la imagen original y otro rombo en la imagen de destino, calcular la transformacin afn que realiza ese mapeo. Procesamiento Audiovisual

Nota: un rombo queda completamente definido por 3 puntos.


Coordenadas en A X (x1a, y1a) (x2a, y2a) Transformacin afn genrica Coordenadas en R X (x1r, y1r) (x2r, y2r)

4.2. Transformaciones afines.

((c11,c12,c13), (c21,c22,c23))
Y

(x3a, y3a)

(x3r, y3r)

6 incgnitas (cij) Necesitamos 6 ecuaciones para resolverlas. Cules? xia c11 c12 c13 Cada punto produce xir yia = dos ecuaciones: c21 c22 c23 yir 1 Procesamiento Audiovisual

Ecuaciones a resolver: c11x1a + c12y1a + c13 = x1r c11x2a + c12y2a + c13 = x2r c11x3a + c12y3a + c13 = x2r

4.2. Transformaciones afines.


c21x1a + c22y1a + c23 = y1r c21x2a + c22y2a + c23 = y2r c21x3a + c22y3a + c23 = y3r

6 ecuaciones y 6 incgnitas Se resuelven las incgnitas (mtodo de Cramer) y despachados. Existir solucin si los 3 puntos de A no estn en la misma recta, y los 3 de R tampoco. Una vez resueltas las incgnitas, aplicamos la transformacin afn buscada: x c11 c12 c13 R(x,y):= A( y ) c21 c22 c23 1 Procesamiento Audiovisual

Ejemplo 1. La aplicacin ms inmediata y tpica de las transformaciones afines es extraer y redimensionar un rea de inters, dndole una forma predefinida de antemano. Esto es lo que se llama normalizacin. Por ejemplo, detectar una cara humana, seleccionar los ojos y la boca y mapearlos a un rectngulo predefinido. Cara Cara detectada Imagen de entrada normalizada Transf. afn

4.2. Transformaciones afines.

Procesamiento Audiovisual

4.2. Transformaciones afines.


Este proceso de normalizacin se puede aplicar sobre vdeo, para conseguir una estabilizacin de los objetos de inters.

Procesamiento Audiovisual

Ejemplo 2. La normalizacin es fundamental en muchas aplicaciones de reconocimiento de objetos, como los OCR (Optical Character Recognition). Se aplica: umbralizacin, segmentacin, normalizacin y comparacin. Rectificar: detectar Imagen de entrada Umbralizar orientacin y rotar

4.2. Transformaciones afines.

Sera conveniente una tcnica adaptativa

Procesamiento Audiovisual

4.2. Transformaciones afines.


Texto rectificado Detectar y separar las lneas

Segmentar los caracteres

Normalizar cada carcter a un tamao estndar

Aqu se usan integrales proyectivas Comparar con un conjunto de patrones (p.ej. diferencia)
a e i

Tomar el mximo

Es una a!!

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Las transformaciones bilineal y perspectiva se pueden ver como generalizaciones de las afines:
Transformacin afn: cualquier rombo se mapea en un rombo. Transf. bilineal y perspectiva: cualquier cuadriltero se transforma en otro cuadriltero (ambos convexos). Transf. bilineal

Imagen original

Transf. afn

Transf. perspectiva

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Las transformaciones afines conservan el paralelismo de las lneas; bilineales y perspectivas no. La transf. perspectiva es la proyeccin perspectiva de un plano, colocado en un espacio 3D. La transf. bilineal se suele usar como una variante rpida de la transf. perspectiva, aunque no es exactamente igual. Es decir, se debera aplicar perspectiva, pero se usa bilineal por eficiencia.
Imagen original Transform. afn Transform. bilineal Transform. perspectiva

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Transformaciones afines: R(x,y):= A( c11 c21 c12 c22 c13 c23 x y ) 1 x c14 c24 y xy 1 Transformaciones perspectivas: x R(x,y):= A(x/z, y/z) c11 c12 )
Observar el nuevo factor que aparece

Transformaciones bilineales: R(x,y):= A( c11 c21 c12 c22 c13 c23

Pero, cuntos grados de libertad hay aqu?

c13

con: y = c21 c22 z c31 c32 Procesamiento Audiovisual

c23 y 1 c33

Recordar la proyeccin perspectiva en el proceso de formacin de imgenes. Distancia focal = 1 La proyeccin del X, Y punto P = (x, y, z) es P = (x/z, y/z) Punto
principal Centro de Proyeccin (0,0,0) P Plano de Proyeccin Eje ptico Z P = (x,y,z)

4.3. Transformacin bilineal y perspectiva.

La idea de la transf. perspectiva es: dado un plano (la imagen de entrada) colocarlo en una posicin cualquiera del espacio 3D y despus proyectarlo sobre el plano de imagen Z=1. Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Y X

Centro de Proyeccin

Z
de o n Pla eccin y Pro

Eje ptico

1) Colocar la imagen plana en el espacio 3D x c11 c12 c22 c32 c13 x y = c21 z c31 c23 y 1 c33

2) Proyeccin perspectiva de la imagen en el espacio

R(x,y):= A(x/z, y/z)

Procesamiento Audiovisual

La transf. bilineal es una simulacin de la perspectiva. Tambin mapea un rectngulo en un cuadriltero. Pero el resultado no es exactamente una perspectiva. La diferencia es mayor cuanto mayor efecto de perspectiva. Transformac. bilineales Transformac. perspectivas

4.3. Transformacin bilineal y perspectiva.

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Problema: dados 4 puntos en la imagen original y otros 4 en la imagen de destino, calcular las transformaciones bilineal y perspectiva que producen ese mapeo. Solucin: plantear los sistemas de ecuaciones correspondientes y resolver las incgnitas.
Coordenadas en A X (x1a, y1a) (x2a, y2a) Transformacin bilineal / perspectiva Coordenadas en R X (x1r, y1r) (x2r, y2r)

(x4a, y4a)

(x3a, y3a)

(x4r, y4r)

(x3r, y3r)

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Transformacin bilineal: 8 incgnitas. Cada par de puntos equivalentes produce 2 ecuaciones con 4 puntos es necesario y suficiente. x c11 c12 c13 c14 y ) R(x,y):= A( c21 c22 c23 c24 xy 1 Ecuaciones a resolver: c11x1a+c12y1a+c13x1ay1a+c14=x1r; c21x1a+c22y1a+c23x1ay1a+c24= y1r ......... ........ c11x4a+c12y4a+c13x4ay4a+c14=x4r; c21x4a+c22y4a+c23x4ay4a+c24= y4r Para que haya solucin, los cuadrilteros deben ser convexos y no deben haber tres puntos en la misma recta. Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Transformacin perspectiva: 9 incgnitas, 4 puntos... ? x c11 c12 c22 c32 c13 x R(x,y):= A(x/z, y/z) y = c21 z c31 c23 y 1 c33

Cada par de puntos (xia,yia), (xir,yir) produce dos ecuaciones: (c11xia+c12yia+c13)/(c31xia+c32yia+c33)= xir (c21xia+c22yia+c23)/(c31xia+c32yia+c33)= yir Sistema homogneo e indeterminado (8 ec., 9 inc.). Observar que aparece un factor de escala. Si multiplicamos todas las constantes por k el sistema no cambia. Se puede resolverlo fijando la incgnita c 33=1. Nos quedamos con 8 incgnitas, resolvemos y listos.

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Indicaciones:
Las transformaciones bilineales y perspectivas contienen a las afines: Transf. bilineal: ser equivalente a una afn si c13=c23=0 Transf. perspectiva: equivalente a una afn si c31=c32=0 Los tres tipos de transformaciones son invertibles: dada una transf. se puede definir la transf. inversa, de manera que se obtenga la imagen original (o casi).

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Transformaciones inversas:
Cmo obtener las transformaciones inversas? Si una transf. perspectiva est definida por una matriz A (3x3), la transf. perspectiva inversa usar la matriz A-1. En el caso de la transf. afn, se puede extender la matriz de (3x2) a una de (3x3) y obtener la inversa. c11 c21 c12 c22 c13 c23
c11 c21 0 c12 c22 0 c13 c23 1

Calcular la inversa de la matriz

Ejercicio. Calcular la inversa de una transf. bilineal dada por una matriz de coeficientes, de (4x2). Procesamiento Audiovisual

Ejemplo 1. La invertibilidad de la proyeccin perspectiva puede ser til en navegacin de robots. Idea: dada una imagen tomada con una cmara desde el robot, obtener una vista superior. De esta forma, el robot puede conocer las zonas por las que se puede mover. Inverse Perspective Mapping: transformacin inversa a la perspectiva producida por la cmara, respecto a cierto plano.
Imagen de entrada
Aqu se pueden tomar distancias y ngulos. En la original no

4.3. Transformacin bilineal y perspectiva.

I.P.M.

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


La tcnica de I.P.M. se ha aplicado en conduccin automtica de vehculos. I.P.M. de la imag.
Imag. capturada desde el coche capturada (vista TOP)

http://www.argo.ce.unipr.it/ARGO/ El proyecto es un poco antiguo, pero bueno...

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Ejemplo 2. Integracin de elementos visuales artificiales en un entorno. El objetivo es hacer que algo que no est parezca que realmente est. Problema: qu transformacin perspectiva se debe aplicar para que la integracin sea realista. Calibracin. Pasos:
1) Detectar el suelo (color verde). 2) Transformacin perspectiva del elemento. 3) Media ponderada entre el suelo y la imagen transformada.

Procesamiento Audiovisual

Cmo hacer la calibracin? Manualmente: seleccionar el cuadriltero en la imagen donde se proyectar el elemento.

4.3. Transformacin bilineal y perspectiva.

Automticamente. Ms complejo. P.ej. encontrando las lneas del campo, las blancas y las del corte del csped. Procesamiento Audiovisual

Una vez localizado el campo, colocar los elementos en unos sitios predefinidos

4.3. Transformacin bilineal y perspectiva.


Ejemplo 3. Engaando a la perspectiva. Usando mapeo inverso de perspectiva, se puede hacer que un dibujo (real) visto en perspectiva parezca tener otra perspectiva, y por tanto ocupe un espacio que realmente no ocupa. Este efecto visual slo funciona desde un punto de vista dado. Est diseado para ese punto. Idea: el dibujo real a poner es el I.P.M. del original, segn la transf. perspectiva observada en la escena. Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Pasos: 1) Poner el panel donde ir el dibujo en la escena, y capturar una imagen desde el punto deseado. 2) Calibrar: encontrar los 4 puntos del rectngulo del panel. 3) Aadir sobre la imagen tomada el dibujo que se quiere poner (con la escala y traslacin adecuadas). Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


4) Sobre la imagen del paso 3, aplicar una transformacin perspectiva, desde el cuadriltero del paso 2, hasta el rectngulo dado por el tamao del panel. 5) Imprimir el panel y colocarlo en el mismo sitio. 6) Y... Voil!!

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Ejemplo 4. Transformaciones de malla. Es una transformacin libre y que da mucho juego. Sobre la imagen original definimos una malla de puntos de control. Estos puntos se pueden mover, y la imagen resultande debe modificarse coherentemente con los puntos de control.
Imagen original Imagen transformada

Procesamiento Audiovisual

Cmo conseguir la transformacin de malla? La idea es muy sencilla:

4.3. Transformacin bilineal y perspectiva.


La malla define una serie de rectngulos de posiciones conocidas. Despus de mover los puntos de la malla, conocemos el cuadriltero al que se debe mapear cada rectngulo original. En este caso, suele ser ms conveniente aplicar una transformacin bilineal. Se repite el proceso para todos los rectngulos originales. Transformacin bilineal especfica para cada trozo

Procesamiento Audiovisual

4.3. Transformacin bilineal y perspectiva.


Conclusiones:
Las transformaciones afines, bilineales y perspectivas son esenciales en generacin, procesamiento, anlisis de imgenes, y en visin artificial.
Transformaciones afines: mapean un rombo en otro rombo. 3 puntos en la imagen origen y 3 en el destino. Transf. bilineales y perspectivas: mapean un cuadriltero convexo en otro cuadriltero convexo. 4 puntos en el origen y 4 en el destino.

Las transformaciones afines conservan el paralelismo de las rectas. Hay que conocer el significado de cada transformacin para saber cul conviene aplicar. Cmo se podra extender la idea a vdeo, considerando la escala temporal? Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Recordemos que una transformacin geomtrica es cualquier operacin del tipo: R(x, y):= A(f1(x,y), f2(x,y)) Siendo f1 y f2 dos funciones cualesquiera: f1, f2: N x N R
f1: posicin en X del original para el pxel resultante (x,y) f2: posicin en Y del original para el pxel resultante (x,y)

Las transformaciones vistas hasta ahora tienen formas particulares y son continuas. Un mapeo (mapping) es cualquier transformacin arbitraria, definida por un par de funciones f1 y f2, continuas o escalonadas.
Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


A f1(x,y) f2(x,y) R (x,y) (x,y) g1(x,y) g2(x,y) Mapeo inverso: el mapeo puede venir dado al revs: R(g1(x,y), g2(x,y)):= A(x,y) Significado: el pxel (x,y) en la imagen original se mueve a la posicin (g1(x,y), g2(x,y)). Normalmente trabajaremos con mapeo directo.
Existen infinitos mapeos. Cualquier par de funciones locas, (f 1, f2), es posible, pero cules son plausibles?

Procesamiento Audiovisual

Ejemplo 1. Difuminado aleatorio, de radio a: f1(x,y):= x+random(2a+1)-a f2(x,y):= y+random(2a+1)-a A R1 a=1 R2 a=5 R3 a = 20 Procesamiento Audiovisual

4.4. Transformaciones de mapeo.

4.4. Transformaciones de mapeo.


Ejemplo 2. Pixelado: f1(x,y):= x/8*8; f2(x,y):= y/8*8 A R
Aplicado slo en la ROI.

Ejemplo 3. Efecto de cristal a cuadros:


f1(x,y):= xx mod 30+y mod 30; f2(x,y):= yy mod 30+x mod 30

Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Los mapeos pueden servir para simular las deformaciones producidas por fenmenos fsicos naturales. Por ejemplo, cmo se deforma una imagen pegada a un cilindro (como una etiqueta de una botella)?

La coordenada Y no se modifica: f2(x, y):= y Qu pasa con la X? La X de R es el coseno del ngulo correspondiente en A. Procesamiento Audiovisual

R A

4.4. Transformaciones de mapeo.


= arcos (1-xR/(mx/2)) xA = mx/
0 1 0 0 mx/2 -1 mx mx

1-xR/(mx/2) xR xA

mx/2

Conclusin. Transformacin cilndrica en X: R(x,y):= A(arcos(1-x/(mx/2))mx/, y) Representacin de la funcin f(x):= arcos(1-x/(mx/2))mx/ con mx=10

Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Ejemplo. Aplicacin de la transformacin cilndrica. Imagen de entrada Tr. cilndrica en X Tr. cilndrica en Y

Interpretacin de la transformacin cilndrica

Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


0

El efecto se puede graduar, si en lugar de un semicrculo consideramos una semielipse, ms o menos ovalada. xR
mx 0 mx 0 mx

a 1

1 a

xA

Ahora tenemos que medir el ngulo en una elipse. Si tomamos x= 1-xR/(mx/2), ent.: f1(x, y):= atan(asqrt(1-x2)/x)mx/ siendo a el segundo radio de la elipse (en relacin al ancho de la imagen).

a=4 a=2 a=1 a=1/2 a=1/4

Procesamiento Audiovisual

Ejemplos. Transformaciones elpticas. a = 0,3 a = 1,2

4.4. Transformaciones de mapeo.


a=2

En X

En Y

Procesamiento Audiovisual

De forma parecida, podemos definir otros muchos tipos de transformaciones, basados en deformaciones producidas por fenmenos fsicos naturales (o no). Mtodo: estudiar la forma (matemtica) de la deformacin, y obtener el par de funciones f1(x,y), f2(x,y). Ejemplo. Transformaciones geomtricas genricas.

4.4. Transformaciones de mapeo.

Estirar: simula un panel abombado hacia afuera

Pinchar: simula apretar la superficie del panel

Ondulacin: simula una deformacin por ondas de agua

Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Cmo unificar todas estas deformaciones? Es decir, crear un marco comn a todas ellas. Idea: supongamos que sobre una imagen podemos colocar una capa de agua. Podemos poner gotas, hacer ondas, formar olas, etc. La deformacin de la imagen es el resultado de la refraccin de la luz, al pasar del aire al agua.
Imagen deformada

R
Esta es la idea, pero en 2D

Superficie de agua Imagen original

S A Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Ojo, la superficie deformante, S, no es ni ms ni menos que una imagen, donde el valor de un pxel S(x,y) indica la altura del agua en ese punto.
S1. Superficie de efecto pinchar/estirar S2. Superficie de efecto de ondas marinas

S(x,y):= e-((x-cx) +(y-cy) )/

S(x,y):= sen(fsqrt((x-cx)2+(y-cy)2))

Ahora slo hay que calcular los rayos incidentes, el ngulo de refraccin de cada uno, y el sitio donde choca con el fondo... Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Objetivo: dada una imagen A, una superficie deformante S (imagen de 1 solo canal) definir la transformacin geomtrica correspondiente: R(x,y):= A(f1(x,y,S), f2(x,y,S)) En una dimensin: en el caso de mayor refraccin, el rayo se desva perpendicularmente a la superficie del agua. x
Imagen deformada

Esto es lo que nos interesa! Cunto vale?

tx/S(x) = tan() Superficie deformante Imagen original

S(x)

Pero tan() es la pendiente de S en x tx = S(x)S(x)

tx Procesamiento Audiovisual

Ya est! R(x):= A( x + S(x)dS(x)/dx ) Y en dos dimensiones: R(x,y):= A( x + S(x,y)dS(x,y)/dx , y + S(x,y)dS(x,y)/dy ) Ale, todos a derivar! S(x,y)dS(s,y)/dx = e -2((x-cx)2+(y-cy)2)/2 2 = -2(x-cx)/ e ....
-((x-cx)2+(y-cy)2)/2

4.4. Transformaciones de mapeo.

d(e

-((x-cx)2+(y-cy)2)/2

)/dx =

Cachis... no habr una forma Y as para cualquier funcin... ms sencilla? Pero, qu vimos en el tema anterior? La derivada en X (o en Y) de una imagen se puede calcular con un filtro de convolucin adecuado: Sobel, Prewitt, Scharr, etc. Adems, de esta forma podemos usar cualquier superficie deformante arbitraria. Procesamiento Audiovisual

Algoritmo. Transformacin de una imagen A segn la superficie deformante S. Sx 1) Calcular Gx:= Sx S -1 0 1 siendo Sx una mscara de derivada en X -2 0 2 2) Calcular Gy:= Sy S -1 0 1 siendo Sy una mscara de derivada en Y Sy 3) Calcular MapaX(x,y):= x + aS(x,y)Gx(x,y) -1 -2 -1 4) Calcular MapaY(x,y):= y + aS(x,y)Gy(x,y) 0 0 0 5) Obtener la imagen resultante: 1 2 1 R(x,y):= A(MapaX(x,y), MapaY(x,y)) Notas: todas las imgenes (A, S, Gx, Gy, MapaX, MapaY, R) son del mismo tamao. El parmetro a indica el grado de la transformacin. Cuanto mayor, ms pronunciada. Procesamiento Audiovisual

4.4. Transformaciones de mapeo.

4.4. Transformaciones de mapeo.


Ejemplo. Aplicacin de la deformacin de ondas.
Im. de entrada, A Sup. deformante, S Superficie en 3D Im. de salida, R

Derivada X, Gx

Derivada Y, Gy

Mapa X, SGx

Mapa Y, SGy

Ojo: -1=Negro, +1=Blanco

Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Transformacin de ondas: S(x,y):= sen(fsqrt((x-cx)2+(y-cy)2)+p)
(cx, cy): centro de las ondas f: frecuencia; p: fase

Transformacin apretar/pinchar:

S(x,y):= e

-((x-cx)2+(y-cy)2)/2

(cx, cy): centro de la deformacin : anchura de la zona deformada a: fuerza de la deformacin; a<0 pinchar, a>0 estirar Variacin de frecuencia Variacin de fase Variacin de fuerza

Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Lo interesante de esta transformacin es que se puede usar cualquier imagen como superficie deformante.
A1 S1 A2 S2

R1

R2

Procesamiento Audiovisual

Las transformaciones geomtricas son esenciales en las composiciones panormicas. Idea: obtener la imagen que debera estar pegada a un cilindro que envuelve todo el campo visual del sujeto. Cuestin: cmo se proyectan las imgenes individuales en el cilindro?

4.4. Transformaciones de mapeo.

Imgenes de entrada

Procesamiento Audiovisual

Imagen resultado

Idea: la X en la panormica es el ngulo en el cilindro. La proyeccin de un punto (xa,ya) de la imagen viene dada por la interseccin de la recta que pasa por (xa,ya,1) y (0,0,0), y el cilindro con radio 1, a lo largo del eje Y.
YR

4.4. Transformaciones de mapeo.

Vista superior
XR

1
X

YA XA

(xa,ya)

Dnde toca la imagen con el cilindro? Centro: (xc,yc)

Procesamiento Audiovisual

Si todas las fotos se toman desde el centro, sin mover la cmara (slo girarla en Y), el punto (xc,yc) ser el centro de la imagen (mX/2, mY/2). Si hay giro arriba o abajo, s que se modifica yc. Y tambin puede haber giro a lo largo de Z. Otro parmetro es cuntos grados corresponden al ancho de una foto, es decir cunto es el campo visual. Lo podemos medir en el nmero de pxeles que representan 45, fp. Con estos parmetros, la transformacin ser: Ojo, esta fp no es ni xR:= arctan ((xA-xc)/fp) yR:= (yA-yc)/sqrt((xA-xc) + (yA-yc) + fp))
2 2

4.4. Transformaciones de mapeo.

xR estar entre -90 y 90, yR entre -mY/2 y mY/2.

ms ni menos que la distancia focal

Podr variar segn el valor del zoom

Procesamiento Audiovisual

Pero, cuidado, lo que necesitamos son las funciones f1(x,y) y f2(x,y) (de R(x,y):= A(f1(x,y), f2(x,y)) que vienen dadas por las inversas: f1(x,y):= xc + fptan x f2(x,y):= yc + ysqrt(1+tan2 x) En definitiva, tenemos una transformacin con 3 parmetros:
El centro de la imagen (cx, cy). La distancia focal, en pxeles, fp.

4.4. Transformaciones de mapeo.

Ejemplo. Variacin de df, con centro (mx/2, my/2), 480x360.

df = 20 pix.

df = 120 pix.

Procesamiento Audiovisual

df = 530 pix.

4.4. Transformaciones de mapeo.


La distancia focal no cambia, si no cambiamos el zoom entre una foto y otra. Se puede calibrar una vez y usarla en todas las fotos de la composicin. El centro en X se puede dejar en la mitad de la imagen, si no cambiamos el eje de rotacin. El centro en Y, cy, puede cambiar. El giro en el eje Z tambin. Se puede corregir con una rotacin afn a priori. Por ltimo, se debe encontrar el desplazamiento en X para ajustar las imgenes. Procesamiento Audiovisual Calibracin previa

Calibracin para cada grupo de imgenes

Proceso: 1) Buscar puntos anlogos (de forma manual o automtica) entre cada par de imgenes consecutivas. 2) Calcular los parmetros de la transformacin, usando los puntos definidos. 3) Transformar las imgenes individualmente. 4) Componer las imgenes resultantes. Procesamiento Audiovisual

4.4. Transformaciones de mapeo.

Versin simplificada (aunque inexacta): Normalmente la distancia focal ser grande y se puede sustituir la transf. anterior por una simple transf. afn. Parmetros de la transf. afn: desplazamiento (dx,dy), escala s (igual en ambos ejes) y rotacin r. No hay inclinac. Con dos puntos anlogos basta para resolver los 4 parmetros.

4.4. Transformaciones de mapeo.

Es mucho ms sencillo, pero peor. Observar la lnea quebrada del canal

Procesamiento Audiovisual

Correccin de la distorsin radial

4.4. Transformaciones de mapeo.

La distorsin radial es una deformacin introducida por las lentes de las cmaras, que da lugar a un curvado de las zonas perifricas de las imgenes.

Observar la curvatura de la puerta

La distorsin radial se modela como un desplazamiento radial, segn la distancia, r, al centro de la imagen de la forma: p(1 + k1r2 + k2r4) Procesamiento Audiovisual

Correccin de la distorsin radial: R(x,y):= A((x-cx)(1+k1r2+k2r4)+cx , (y-cy)(1+k1r2+k2r4)+cy) con r2 = (x-cx)2 + (y-cy)2 Para poder aplicarla, tenemos que encontrar valores adecuados de k1, k2, cx y cy. Calibracin. Posibilidades: hacer pruebas, o bien obtener 4 ecuaciones.
Imagen de entrada (384x288)
Imagen resultante con k1= -2,910-7, k2= -110-13

4.4. Transformaciones de mapeo.

Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Otro tipo de transformaciones geomtricas interesantes son las de morphing, muy usadas en efectos especiales. El morphing es un efecto de transicin suave y progresiva entre dos (o ms) imgenes. Est basado en algunas ideas ya estudiadas:
Una transformacin geomtrica, definida por un conjunto de puntos de origen, S, y otro de destino, D. El proceso es similar a la transformacin de malla, pero en lugar de rectngulos se usan segmentos equivalentes. La transf. geomtrica est graduada, entre las posiciones de origen y de destino. 0%: posiciones de origen, 100%: posiciones de destino, 50%: trmino medio entre ambos. El color de un pxel es una media ponderada, entre la imagen origen y destino, segn el grado de la transformacin.

Procesamiento Audiovisual

Morphing entre dos imgenes basado en lneas. Paso 1. Establecer B segmentos equivalentes A entre dos imgenes.

4.4. Transformaciones de mapeo.

S= (s1, s2, ..., sn) D= (d1, d2, ..., dn)


Segmentos origen, S Segmentos destino, D

Paso 2. Repetir el proceso para g desde 0 hasta 1. En el paso g, los segmentos intermedios son: ik= (1-g)sk + gdk Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Morphing entre dos imgenes basado en lneas. 2.1. Transformar A, moviendo los puntos de S a I R1 2.2. Transformar B, moviendo los puntos de D a I R2 2.3. Media ponderada: R= (1g)R1 + gR2

Procesamiento Audiovisual

4.4. Transformaciones de mapeo.


Conclusiones:
Las transformaciones de mapeo son el caso general de las transformaciones geomtricas. Permiten modelar los efectos producidos por fenmenos fsicos naturales. Para simularlos (efecto de ondas, pinchar, estirar...). Para corregirlos (distorsin radial, aberraciones en las lentes...). Y tambin otras cosas no naturales: efectos especiales. La transformacin de mapeo est definida por un par de funciones f1, f2, (RxR R) o bien un par de imgenes mapax, mapay.

Procesamiento Audiovisual

4. Transformaciones geomtricas.
Conclusiones:
Existen muchos tipos de transformaciones geomtricas, desde las ms simples a las ms complejas: Afines, bilineales, perspectivas, basadas en superficies deformantes, morphing, mapeo arbitrario, etc. Pero todas ellas tienen el mismo formato: R(x, y):= A(f1(x,y), f2(x,y)) Y todas requieren usar interpolacin. La cuestin clave: cmo estn definidas las funciones f1 y f2 para el efecto que necesitamos? Ojo, en algn caso podemos tener lo contrario: R(g1(x,y), g2(x,y)):= A(x,y) En ese caso, habr que obtener las funciones inversas. Procesamiento Audiovisual

Transformaciones geomtricas en OpenCV.


Transformaciones afines predefinidas Transformaciones afines genricas Transformaciones perspectivas Transformaciones de mapeo arbitrario Ejercicios

Anexo A.4.

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Podemos clasificar las operaciones de transformacin geomtrica en los siguientes tipos: 1) Transformaciones afines predefinidas. 2) Transformaciones afines genricas. 3) Transformaciones perspectivas. 4) Transformaciones de mapeo arbitrario. Un parmetro de las operaciones es el tipo de interpolacin a aplicar. Se definen las constantes:
Interpolacin Vecino ms prximo Bilineal Bicbica Supermuestreo En OpenCV CV_INTER_NN CV_INTER_LINEAR CV_INTER_CUBIC CV_INTER_AREA

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Comportamiento de las operaciones de transformacin geomtrica en OpenCV:
Las operaciones permiten usar ROI. No se pueden usar mscaras (mask). Se permite el modo in-place, es decir, la salida se almacena en la misma imagen de entrada. Por defecto, los pxeles de salida no afectados se ponen a negro (ver flag CV_WARP_FILL_OUTLIERS). Pero se puede indicar que se rellenen con otro valor constante (parmetro fillval) o dejarlos sin modificar (si no se activa ese flag). La principal carencia de OpenCV son las transformaciones bilineales. No se pueden hacer... hay que programrselas uno mismo.

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Transformaciones afines predefinidas:
cvResize, cvFlip (cvMirror), cv2DRotationMatrix

Transformaciones afines genricas:


cvWarpAffine, cvGetAffineTransform

Transformaciones perspectivas:
cvWarpPerspective, cvGetPerspectiveTransform

Transformaciones de mapeo arbitrario:


cvRemap

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Redimensionar una imagen:
void cvResize (CvArr* src, CvArr* dst, int inter=CV_INTER_LINEAR) Redimensionar la imagen src al tamao de la imagen dst. Puede ser aumento o reduccin. El mtodo de interpolacin va en inter. Las dos imgenes deben ser de la misma profundidad y el mismo nmero de canales. Recordar: se permite ROI, tanto en src como en dst; y si dst tiene ROI, no se modifican los valores exteriores (esta funcin no admite FILL_OUTLIERS).

Ejemplo. Zoom 2x de una imagen img:


IplImage *res= cvCreateImage(cvSize(img->width*2,img->height*2), img->depth, img->nChannels); cvResize(img, res, CV_INTER_CUBIC); cvShowImage("Zoom", res);

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Espejo de una imagen:
void cvFlip (const CvArr* src, CvArr* dst=NULL, int flip_mode=0) (cvMirror es sinnimo de cvFlip) Calcula el espejo de la imagen src. Segn flip_mode: 1 espejo horizontal; 0 espejo vertical; -1 ambos. Permite modo in-place (que, adems, es el modo por defecto, cuando dst==NULL). Nota: estas operaciones son importantes si el origen de las imgenes (origin) es bottom-left, ya que OpenCV trabaja siempre con top-left. Al obtener las imgenes habr que hacer:
if (img->origin==1) { cvFlip(img); img->origin= 0; }

Ojo: esto puede ser necesario cuando trabajamos con vdeo en Windows

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Rotar una imagen. No existe una funcin nica para rotar una imagen, sino que hay que:
Calcular una matriz de rotacin (cv2DRotationMatrix). Aplicar dicha transformacin afn (cvWarpAffine).

Las matrices de transformacin afn son matrices CvMat de tamao 2x3 y tipo CV_64FC1 o CV_32FC1. CvMat *mafin= cvCreateMat(2, 3, CV_64FC1); Ejemplo. Rotar una imagen respecto al centro de la misma en un ngulo angulo.
CvMat *mafin= cvCreateMat(2, 3, CV_64FC1); CvPoint2D32f centro= cvPoint2D32f(img->width/2.0, img->height/2.0); cv2DRotationMatrix(centro, angulo, 1.0, mafin); cvWarpAffine(img, res, mafin); Si hay que usar otro desplazamiento,

se deben modificar las posiciones (0,2) y (1,2) de mafin: cvRealSet2D(mafin, 0, 2, dx); cvRealSet2D(mafin, 1, 2, dy);

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Transformaciones afines genricas
Aplicar una transformacin afn arbitraria en OpenCV :
void cvWarpAffine (const CvArr* src, CvArr* dst, const CvMat* c, int flags= ..., CvScalar fillval= cvScalarAll(0)) Aplicar una transformacin afn genrica, dada por la frmula:

dst(x,y):= src(

c[0][0] c[0][1] c[0][2] c[1][0] c[1][1] c[1][2]

x y ) 1

La matriz c, de tipo CV_64FC1 o CV_32FC1, indica los coeficientes de la transformacin. La matriz c se puede rellenar usando cvSetReal2D. flags indica el tipo de interpolacin (bilineal por defecto) y adems...

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Si flags = CV_WARP_INVERSE_MAP, la transformacin es inversa, es decir, se aplica:

dst(

c[0][0] c[0][1] c[0][2]

y ) := src(x,y) c[1][0] c[1][1] c[1][2] 1

Ejemplo. Inclinar (shear) la imagen img en X en angulo grados y desplazar en X para que se quede centrada.
sal= cvCreateImage(cvGetSize(img), img->depth, img->nChannels); cvZero(sal); double inc= tan(angulo*M_PI/180.0); CvMat *c= cvCreateMat(2, 3, CV_32FC1); cvSetReal2D(c, 0, 0, 1.0); cvSetReal2D(c, 0, 1, inc); cvSetReal2D(c, 0, 2, -inc*img->height/2.0); cvSetReal2D(c, 1, 0, 0.0); cvSetReal2D(c, 1, 1, 1.0); cvSetReal2D(c, 1, 2, 0.0); cvWarpAffine(img, sal, c, CV_INTER_LINEAR); cvReleaseMat(&c);

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Calcular los coeficientes de una transformacin afn:
CvMat* cvGetAffineTransform (const CvPoint2D32f* src, const CvPoint2D32f* dst, CvMat* mat); src es un array de 3 puntos, en la imagen de origen. dst es un array de 3 puntos, en la imagen de destino. Significado: calcular la transformacin afn necesaria para mapear src en los puntos dst, almacenando en resultado en la matriz mat (matriz de 2x3), que es la misma que se devuelve.

Esta operacin resuelve el sistema de ecuaciones de las pginas 44-45, para mapear un rombo dado en otro rombo. Tambin se podran resolver de forma explcita usando la funcin cvSolve para resolver sistemas de ecuaciones en general. Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Ejemplo. Aplicar una transformacin afn a una imagen img, suponiendo que tenemos 3 puntos en img y los 3 puntos correspondientes en destino. CvMat *mat= cvCreateMat(2, 3, CV_64FC1); CvPoint2D32f src[3]; CvPoint2D32f dst[3]; src[0]= cvPoint2D32f(x, y); ... cvGetAffineTransform(src, dst, mat); cvWarpAffine(img, destino, mat, CV_INTER_CUBIC); cvReleaseMat(&mat);

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Transformaciones perspectivas
Para las transformaciones perspectivas, las operaciones disponibles en OpenCV son similares a las afines.
Aplicar una transformacin: cvWarpAffine cvWarpPerspective Calcular los coeficientes: cvGetAffineTransform cvGetPerspectiveTransform

En este caso la matriz que define la transformacin es un CvMat de 3x3 de tipo CV_64FC1 o CV_32FC1. OpenCV no tiene las transformaciones bilineales.

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Aplicar una transformacin perspectiva:
void cvWarpPerspective (const CvArr* src, CvArr* dst, const CvMat* c, int flags= ..., CvScalar fillval= cvScalarAll(0)) Aplica una transf. perspectiva de la imagen src en dst. La matriz de coeficientes c es de 3x3.

c[0][0] c[0][1] c[0][2]

y = c[1][0] c[1][1] c[1][2] y c[2][0] c[2][1] c[2][2] 1 z


flags indica el tipo de interpolacin (por defecto bilineal). Y si vale CV_WARP_INVERSE_MAP, se usa la inversa de la matriz c. Si flags vale CV_WARP_FILL_OUTLIERS significa que lo que caiga fuera en dst, se rellene de color fillval.

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Calcular los coeficientes de una transformacin afn:
CvMat* cvGetPerspectiveTransform (const CvPoint2D32f* src, const CvPoint2D32f* dst, CvMat* mat); src es un array de 4 puntos, en la imagen de origen. dst es un array de 4 puntos, en la imagen de destino. Significado: calcular la transformacin perspectiva necesaria para mapear los puntos src en los puntos dst, almacenando en resultado en la matriz mat (matriz de 3x3), que es la misma que se devuelve.

Esta operacin resuelve el sistema de ecuaciones de la pgina 59, para mapear un cuadriltero dado en otro. Los cuadrilteros deben ser conexos (no cncavos). Tambin se podran resolver con cvSolve. Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Algunas propiedades interesantes de la matriz c:
Si ambos cuadrilteros son rombos, la transformacin anterior ser afn, por lo que c[2][0]= 0, c[2][1]= 0, c[2][2]= 1. La inversa de una transformacin perspectiva asociada a c, se obtiene usando la matriz inversa de c, es decir, c-1. Ver cvInvert para invertir matrices. El modo CV_WARP_INVERSE_MAP consiste simplemente en usar la matriz c-1. La aplicacin sucesiva de dos transformaciones perspectivas c1 y luego c2, equivale a la transf. asociada al producto matricial de c2 por c1. Ver cvMatMulAdd.

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Ejemplo. Transformacin perspectiva de una imagen, img, para producir un efecto similar al de la pgina 56.
IplImage *sal= cvCloneImage(img); cvSet(sal, cvScalarAll(255)); CvMat *c= cvCreateMat(3, 3, CV_32FC1); int w= img->width-1; int h= img->height-1; CvPoint2D32f src[4]= // Cuatro puntos en el origen {{0,0}, {w,0}, {w,h}, {0,h}}; CvPoint2D32f dst[4]= // Cuatro puntos en el destino {{w*0.4,0}, {w*0.55,0}, {w,h}, {0,h}}; cvGetPerspectiveTransform(src, dst, c); cvWarpPerspective(img, sal, c, CV_INTER_CUBIC); cvReleaseMat(&c);

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Transformaciones de mapeo arbitrario:
Consisten en definir el par de funciones f1(x,y) y f2(x,y) de la transformacin geomtrica genrica: R(x,y):= A(f1(x,y), f2(x,y)) f1 y f2 indican para cada pxel de salida, cul es el pxel correspondiente de entrada. Recordar que f1 y f2 se pueden ver, a su vez, como imgenes, que tendrn un solo canal. Cuando el valor de las funciones no sea entero, se aplicar algn mtodo de interpolacin. Si el valor asociado a un pxel cae fuera de la imagen origen, el contenido de la imagen no se modifica o se pone a un valor constante. La nica funcin necesaria es cvRemap. Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Aplicar un mapeo arbitrario:
void cvRemap (const CvArr* src, CvArr* dst, const CvArr* xMap, const CvArr* yMap, int interpol, CvScalar fillval) Aplica la transformacin de mapeo: dst(x,y):= src(xMap(x,y), yMap(x,y)) Es decir, f1 est dada en xMap, y f2 en yMap. xMap e yMap deben ser imgenes 1 solo canal, de profundidad float (IPL_DEPTH_32F) y del mismo tamao que dst. La profundidad de las imgenes src y dst debe ser la misma. Recordar: cvRemap admite modo in-place. Lo realmente importante de esta funcin es cmo calcular las imgenes xMap e yMap para conseguir el efecto deseado.

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.


Ejemplo 1. Transf. aleatoria de una imagen img, con un radio m:
IplImage* imgx= cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1); IplImage* imgy= cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1); CvScalar sx, sy; for (int y= 0; y<img->height; y++) for (int x= 0; x<img->width; x++) { sx.val[0]= x + rand()%(2*m+1) - m; // m indica el radio de la sy.val[0]= y + rand()%(2*m+1) - m; // transformacin aleatoria cvSet2D(imgx, y, x, sx); cvSet2D(imgy, y, x, sy); } cvRemap(img, res, imgx, imgy, CV_INTER_CUBIC); cvReleaseImage(&imgx); cvReleaseImage(&imgy);

Ejemplo 2. Tr. de acristalado. Sustituir las lneas comentadas por:


sx.val[0]= x - x%m + y%m; sy.val[0]= y - y%m + x%m;

Procesamiento Audiovisual

A.4. Transformaciones geomtricas OpenCV.

IplImage* res= cvCloneImage(img); IplImage* imgx= cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1); IplImage* imgy= cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1); for (int yy= 0; yy<img->height; yy++) for (int xx= 0; xx<img->width; xx++) cvSetReal2D(imgy, yy, xx, yy); double x2, vx, a; for (int kk= 0; kk<200; kk++) { // OJO: esto es para hacer una animacin a= 1.0/(5.05-kk/40.0); // a es el segundo radio de la elipse for (int yy= 0; yy<img->height; yy++) for (int xx= 0; xx<img->width; xx++) { x2= 1.0-2.0*xx/img->width; vx= x2?atan2(a*sqrt(1-x2*x2),x2)*img->width/M_PI:img->width/2.0; cvSetReal2D(imgx, yy, xx, vx); } cvRemap(img, res, imgx, imgy, CV_INTER_CUBIC); cvNamedWindow("Remap", 0); cvShowImage("Remap", res); cvWaitKey(20); } cvReleaseImage(&imgx); cvReleaseImage(&imgy);

Ejemplo 3. Aplicacin de varias transformaciones cilndricas a la imagen img, con distintos grados de transformacin.

Procesamiento Audiovisual

Potrebbero piacerti anche