Download Práctica 2: Transformación log-polar

Document related concepts
no text concepts found
Transcript
Curso de doctorado: Técnicas Avanzadas de Visión por Computador
Práctica 2: Transformación log-polar
Se plantean unos sencillos ejercicios para ilustrar algunos aspectos relacionados con la implementación por software de la transformación log-polar y con el procesamiento de estas imágenes.
1.
Transformación log-polar directa e inversa
Se proporciona la clase LogPolarMapper que construye la relación entre coordenadas cartesianas y log-polares.
Esta clase es independiente de qué estructura de datos se utilice para representar imágenes; únicamente requiere
información sobre la geometrı́a de las imágenes cartesianas y log-polar.
Para realizar la transformación log-polar sobre imágenes de la spToolkit se proporciona la clase Lp4Sp, que
extiende la clase LogPolarMapper.
1.
Define los métodos Lp4Sp::c2lp() y Lp4Sp::lp2c() para obtener una imagen log-polar a partir de una
cartesiana o al revés, respectivamente. Utiliza la clase Image para simplificar el trabajo con imágenes de
niveles de gris de la spToolkit.
Te interesa conozcer algunos datos miembro de LogPolarMapper (y que hereda Lp4Sp):
LPmap[i][j] contiene el pı́xel log-polar (u, v) asociado al pı́xel cartesiano (i, j).
LPinvMap[u][v] es una lista de los pı́xels cartesianos (i, j) correspondientes al campo receptivo
asociado al pixel log-polar (u, v).
2.
Comprueba el funcionamiento de ambos métodos, realizando la transformación log-polar (y log-polar
inversa) de alguna imagen. Prueba con diferentes valores de los parámetros R, S, ρmı́n y ρmáx , observando
el efecto sobre las imágenes cortical y retı́nica. ¿Cómo varı́an los otros parámetros a y q? El valor de estos
parámetros se pueden consultar, por ejemplo, con los métodos LogPolarMapper::getRFGrowthRatio()
y LogPolarMapper::getSectorsPerRadian(), respectivamente.
3.
Con la ayuda de la clase Time que se proporciona, observa los tiempos de:
Inicializar la transformación log-polar. Para unos mismos parámetros de las imágenes cartesianas y
log-polar, esta operación sólo es necesario realizarla una vez (off-line).
Realizar la conversión log-polar. Esta conversión se lleva a cabo cada vez que se quiere convertir una
imágen cartesiana a log-polar.
Realizar la conversión log-polar inversa. Esta transformación sólo es necesaria para visualizar de
forma más intuitiva el contenido de la imágen log-polar. Durante un proceso de tiempo crı́tico, por
ejemplo, podrı́a evitarse.
2.
Cálculo del centroide de una región
Se da la función computeCentroidC() para calcular el centroide (xc , yc ) de una región en una imágen cartesiana. Para simplificar, utilizaremos una imágen totalmente en negro sobre la que situaremos una imagen más
pequeña (en este caso de una cara). Podremos controlar en qué posición ponemos esta imágen con la función
pasteImgOnImg(), que permite “pegar” una imagen sobre otra en una cierta posición (x, y). Puesto que el
1
fondo es negro,
P se puede localizar la región de interés de la imagen I detectando los n pı́xels que no son negros:
(xc , yc ) = n1 I(x,y)>0 (x, y).
1.
Verifica el funcionamiento de computeCentroidC() comparando el centroide devuelto por esta función y
la posición en que hemos situado la imagen de la cara. ¿Coinciden?
2.
Realiza la transformación log-polar de la imagen cartesiana que contiene la cara. Cambia la posición de la
cara en la imagen cartesiana original y observa su localización en la imágen log-polar. Visualiza también
la imagen log-polar transformada al espacio cartesiano para apreciar cómo se visualiza la cara.
3.
Ahora aplica computeCentroidC() a estas imágenes log-polares ¿Se detecta bien el centroide? ¿Por qué?
4.
Escribe computeCentroidLP() para que funcione adecuadamente en imágenes log-polares. Pista: utiliza
el método LogPolarMapper::computeIJ().
5.
Compara los centroides que se obtienen localizando la cara en la imágen cartesiana y en la imagen logpolar. Realiza el análisis variando R y la excentricidad de la posición de la cara. ¿Qué puede deducirse?
6.
Compara también los tiempos de detección en el caso cartesiano y log-polar. ¿Hay alguna diferencia
significativa?
3.
Suavizado de una imagen
La función meanFilterC() realiza un suavizado de una imagen aplicando un simple promediado de los niveles
de gris en una vecindad m × m.
1.
Utiliza esta función para suavizar una imagen cartesiana y su correspondiente log-polar. ¿Funciona en
ambos casos?
2.
Escribe meanFilterLP() para aplicar este filtro media sobre imagenes log-polares y corregir el comportamiento observado.
3.
Compara las correspondientes imágenes suavizadas en los dominios cartesiano y log-polar. ¿Se obtiene
resultados equivalentes?
4.
Si L(I) representa la transformación log-polar de la imagen cartesiana I, y meanFilter(I) es la imagen resultante de aplicar el filtro media sobre una imagen I, ¿ocurrirá que L(meanFilter(I)) = meanFilter(L(I))?
5.
Analiza experimentalmente la ganancia temporal que se obtiene en este caso. ¿Es mayor, menor o igual
que en el ejercicio anterior (cálculo del centroide)?
4.
Rotaciones y escalados
1.
Realiza una rotación (ángulo θ) y un escalado (factor de cambio de escala α) de una imagen cartesiana y
obtén la imágen log-polar de las imágenes cartesianas antes y después de la transformación geométrica.
Utiliza los métodos Rotate() y Scale() de Image.
2.
Compara visualmente el efecto de estas operaciones geométricas en las imágenes cartesianas y log-polar.
¿Qué se observa?
3.
Puesto que los ángulos rotados y el factor de escala aplicados se relacionan con la traslación en cada uno
de los ejes del dominio log-polar, aplica la traslación (usa Image::Translation()) sobre la imágen logpolar anterior para “deshacer” la transformación (θ, α) y obtener la imagen cartesiana correspondiente.
¿Qué resultados se obtienen? ¿Cómo se podrı́an mejorar o corregir?
5.
Conclusiones
Sintetiza las observaciones realizadas y las principales conclusiones a las que hayas llegado.
2