5.24. Transformadas polares¶
Las coordenadas polares identifican cada píxel mediante un ángulo respecto a una dirección de referencia y una distancia desde un centro elegido, en lugar de los desplazamientos horizontal y vertical respecto al origen en la esquina superior izquierda. Esta representación resulta útil gracias a una identidad: la rotación en torno al centro elegido se convierte en una traslación a lo largo del eje angular, lo que permite que un algoritmo invariante a la rotación explore un espacio de parámetros mucho más sencillo que el de las rotaciones directas. linpolar() y logpolar() realizan la reproyección.
5.24.1. Los dos métodos¶
linpolar() realiza la reproyección de coordenadas cartesianas a polares con un eje de distancia lineal. Cada columna de salida corresponde a un ángulo fijo alrededor del centro; cada fila de salida corresponde a una distancia fija desde el centro.
img.linpolar()
logpolar() realiza la misma reproyección con un eje de distancia logarítmico. El tratamiento del ángulo es idéntico; lo que cambia es que las distancias crecen exponencialmente a lo largo de las filas de la salida en lugar de hacerlo linealmente. La diferencia es importante por la segunda identidad geométrica que revelan las coordenadas polares: el escalado de la fuente en torno al centro elegido se convierte en una traslación a lo largo del eje de distancia, pero solo cuando ese eje es logarítmico. Con un eje de distancia lineal, el escalado estira la imagen polar; con un eje de distancia logarítmico, el escalado la desplaza en una cantidad fija.
img.logpolar()
Ambos métodos aceptan las palabras clave x= e y= que fijan el centro de la reproyección polar en coordenadas de píxel de la fuente, con valores por defecto iguales a la mitad del ancho y la mitad del alto de la imagen, respectivamente. La elección del centro es importante: una transformada polar en torno al punto equivocado acaba con el contenido revuelto de formas que destruyen la identidad de rotación / traslación.
Una esfera de reloj reproyectada por linpolar() y logpolar(). Los círculos concéntricos de la fuente se convierten en líneas horizontales en la salida; las marcas de graduación angulares se convierten en líneas verticales uniformemente espaciadas a lo largo del eje angular. La variante log-polar comprime el espaciado radial.¶
5.24.2. Cuándo recurrir a cada uno¶
La elección entre linpolar() y logpolar() es la elección de qué invarianza necesita la aplicación. Para la invarianza a la rotación por sí sola – detectar que la misma escena aparece en dos fotogramas, el segundo rotado un ángulo desconocido – linpolar() es suficiente: la rotación se convierte en un desplazamiento horizontal en la imagen polar, y un emparejador basado únicamente en traslación como find_displacement() recupera el ángulo como la magnitud del desplazamiento. Cuando la invarianza a la escala también importa – el segundo fotograma está rotado y ampliado – logpolar() reduce ambas incógnitas a traslaciones: horizontal para la rotación, vertical para la escala.
Esa es la receta estándar para un rastreador robusto frente a cambios de rotación y escala: reproyectar el fotograma de referencia y cada fotograma en vivo a log-polar en torno al mismo centro, ejecutar find_displacement() sobre el par, y leer los campos rotation y scale del resultado.
5.24.3. Desenrollado de características circulares¶
Un uso aparte de las transformadas polares es el desenrollado de características que son naturalmente circulares en la imagen. La esfera de un reloj, la carátula de un manómetro, un objetivo de inspección que es circular por diseño – todos ellos se vuelven lineales en la proyección polar, que es la forma con la que la mayoría de los algoritmos trabajan más fácilmente.
La figura anterior lo muestra directamente: las doce marcas de graduación de la esfera de un reloj, uniformemente espaciadas alrededor de la circunferencia en coordenadas cartesianas, se convierten en doce líneas verticales uniformemente espaciadas en la imagen polar. Un rectángulo alrededor de cualquiera de las marcas en la imagen polar identifica la posición de esa marca independientemente de la orientación en que estuviera rotada la esfera del reloj al capturarla. Un emparejador de plantillas ejecutado a lo largo de la imagen polar encuentra todas las marcas de graduación en una sola pasada.
5.24.4. El mapeo inverso¶
reverse=True ejecuta la inversa de la proyección polar directa: dada una imagen polar, produce la imagen cartesiana cuya proyección polar es. La aplicación llama a la forma directa para ejecutar un algoritmo en coordenadas polares, y luego llama a la forma inversa para proyectar el resultado de vuelta a coordenadas cartesianas para cualquier etapa posterior que necesite verlo.
El uso más común es modificar una imagen polar y proyectarla de vuelta: un filtro aplicado a la imagen polar – un suavizado horizontal que, en términos polares, difumina a lo largo de los ángulos pero preserva la estructura radial – produce un resultado cartesiano que ha sido difuminado angularmente, algo que un filtro cartesiano no puede hacer directamente.