Transformada de Fourier para series de tiempo Sobre convolución de imágenes y SciPy

Transformada de Fourier para series de tiempo y convolución de imágenes con SciPy

La convolución de transformada de Fourier también se aplica a imágenes

Esta publicación es la segunda parte de la transformada de Fourier para series de tiempo, revisa la primera parte aquí:

Transformada de Fourier para series de tiempo: convolución rápida explicada con numpy

Convolución 10000 veces más rápida usando la transformada de Fourier

towardsdatascience.com

Revisión rápida de la publicación anterior

En la primera publicación, expliqué cómo se puede utilizar la transformada de Fourier para convolucionar señales de manera muy eficiente. Mostré que la convolución utilizando la transformada de Fourier en numpy es muchas órdenes de magnitud más rápida que el enfoque algebraico estándar, y que corresponde a un cierto tipo de convolución llamada convolución circular.

En esta publicación, quiero enfatizar lo que significa la convolución circular y cómo se aplica todo a las imágenes. Las imágenes también son una buena manera de extender la intuición de 1 dimensión a 2 dimensiones.

Todas las imágenes fueron creadas por el autor.

Convolución de imágenes con scipy

Si alguna vez has trabajado con imágenes para el procesamiento de imágenes, es muy probable que hayas encontrado funciones para aplicar convolución. La convolución de imágenes se utiliza en todas partes: mejora de imágenes, eliminación de ruido, segmentación, extracción de características, compresión, y es la base de las Redes Neuronales Convolucionales, el estándar de oro de los modelos de aprendizaje profundo para procesar datos visuales.

En Python, la convolución de imágenes se puede hacer de manera bastante sencilla utilizando scipy y su subpaquete ndimage. En este punto, recomiendo echar un vistazo rápido a la documentación de la función `convolve` y luego regresar aquí.

scipy.ndimage.convolve – Manual de SciPy v1.11.1

Convolución multidimensional. La matriz se convoluciona con el núcleo dado. Parámetros: La matriz de entrada. Matriz de…

docs.scipy.org

El uso es muy simple: puedes pasar dos imágenes para convolucionarlas juntas. Veamos un ejemplo:

Ten en cuenta que scipy propone varias formas de manejar los límites utilizando el parámetro ‘mode’: como veremos a continuación, el modo ‘wrap’ corresponde a la convolución circular y, por lo tanto, a la convolución utilizando un enfoque de transformada de Fourier. También existen otros enfoques, como ‘reflect’ que refleja las imágenes de adentro hacia afuera, o ‘constant’ que repite el valor más externo. Observa también cómo funciona ‘wrap’: repite toda la señal, como si fuera periódica.

Convolución de imágenes 2D

Comencemos a codificar para ver las diferencias entre los diferentes modos de convolución.

Primero, creamos una clase para representar imágenes periódicas 2D: recuerda de la publicación anterior que al utilizar la herramienta de transformada de Fourier, las señales se consideran periódicas. Esta clase es solo azúcar sintáctico para trazar esos arreglos periódicos 2D.

Mostramos la imagen “base” en el rectángulo [0, V, 0, H], así como sus 8 primeras réplicas alrededor. Como se mencionó en la publicación anterior, la señal se considera periódica, por lo tanto, con soporte infinito, pero solo necesitamos y usamos un solo período.

Ahora creemos una imagen de muestra para jugar: debe contener ruido aleatorio, un patrón sinusoidal, un patrón de pendiente y algunos puntos cuadrados. También creamos la versión periódica de esta imagen de muestra: representa la imagen periódica que la transformada de Fourier considera al aplicar sus operadores:

Imagen de entrada que vamos a convolucionar, representada como un arreglo periódico. La imagen “base” está en el centro, con sus réplicas alrededor.

Ahora creemos un núcleo para usar en la convolución: usaremos un núcleo constante simple, también llamado núcleo de promediado ya que la convolución con este núcleo solo da el promedio local de la imagen de entrada.

Luego comenzamos a jugar con la función de convolución de scipy y sus diferentes modos para manejar los límites, y envolvimos el resultado como una matriz periódica para facilitar la representación gráfica: observe cómo el centro de la imagen convolucionada siempre es el mismo sin importar el modo utilizado, pero los límites varían.

Resultados de 4 tipos diferentes de 'modo' para manejar los límites con la función de convolución de scipy. Cada imagen de resultado se muestra como una matriz periódica.

Ahora podemos utilizar un enfoque de transformada de Fourier para calcular la convolución: como se muestra en la publicación anterior, solo necesitamos tomar la transformada inversa de Fourier del producto de la transformada de Fourier de ambas señales, la imagen y el núcleo:

Ecuación base para calcular la convolución de 2 señales utilizando un enfoque de transformada de Fourier.
Resultado de la convolución utilizando un enfoque de transformada de Fourier, no scipy.

Comparando el resultado con el modo “wrap” de scipy, podemos ver que los resultados se parecen mucho, solo con un ligero desplazamiento:

Comparación entre la convolución de scipy con modo='wrap' y el enfoque de transformada de Fourier. Son casi idénticos. Utilizando la representación de matriz periódica, podemos ver que es solo una cuestión de desplazamiento.

Esto es solo una cuestión de indexación, y podemos obtener los mismos resultados utilizando un núcleo centrado desplazado:

Comparación entre la convolución con modo='wrap' de scipy (izquierda) y 2 enfoques de transformada de Fourier: con el núcleo acolchado en los lados (centro) y núcleo centrado (derecha). La imagen de la izquierda y la de la derecha son idénticas.

Utilizando un centrado adecuado, obtuvimos resultados idénticos entre la convolución de scipy con modo=’wrap’ y el enfoque de transformada de Fourier.

Por curiosidad, veamos qué enfoque es más rápido:

Comparación de tiempo entre scipy y transformada de Fourier para calcular la convolución entre nuestras 2 imágenes: la transformada de Fourier es aproximadamente 15 veces más rápida que scipy.

Nuevamente, el enfoque de transformada de Fourier fue más rápido, y en este caso más rápido que una función de scipy, lo cual es bueno.

Conclusiones

Hemos visto en esta publicación cómo la convolución circular se traduce en imágenes y cómo es equivalente a la función de convolución de scipy utilizando el modo=’wrap’.

En la próxima publicación, profundizaremos en el uso de funciones de ventana en el contexto de la transformada de Fourier para reducir la fuga espectral y mejorar el análisis espectral.

¡Suscríbete para recibir futuras publicaciones sobre la transformada de Fourier directamente en tu feed!

También, echa un vistazo a mis otras publicaciones y si te gusta alguna de ellas, por favor suscríbete, me ayuda mucho a alcanzar mi objetivo de 100 suscriptores:

Transformada de Fourier para series de tiempo: convolución rápida explicada con numpy

Convolución 10000 veces más rápida usando la transformada de Fourier

towardsdatascience.com

PCA/LDA/ICA: una comparación de algoritmos de análisis de componentes

Revisar los conceptos y diferencias entre estos famosos algoritmos.

towardsdatascience.com

PCA-whitening vs ZCA-whitening: una visualización en numpy de 2D

El proceso de blanqueamiento de datos consiste en una transformación tal que los datos transformados tienen una matriz de identidad como …

towardsdatascience.com

Resolución 300 veces más rápida del Método de Diferencias Finitas usando numpy

El método de diferencias finitas es una técnica poderosa para resolver problemas complejos, ¡y numpy lo hace rápido!

towardsdatascience.com

Representación interactiva del circuito RC bien conocido en Jupyter

Otro paso en ipywidgets y matplotlib

towardsdatascience.com

Envoltura de las matrices de numpy

El enfoque del contenedor.

towardsdatascience.com

Si esos artículos te parecen interesantes, recuerda seguirme, los nuevos artículos aparecerán en tu feed.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

La amenaza de la desinformación climática propagada por la tecnología de IA generativa

Explora cómo la IA generativa puede propagar información errónea sobre el clima y aprende estrategias efectivas para ...

Inteligencia Artificial

Cómo este investigador ganador del Premio Turing se convirtió en un legendario asesor académico

El científico teórico de la computación Manuel Blum ha guiado a generaciones de estudiantes de posgrado hacia carrera...

Inteligencia Artificial

Cómo el Aprendizaje Automático se convertirá en un cambio de juego para la industria de datos de ubicación

La industria de los datos de ubicación está en rápido crecimiento pero aún en su infancia técnica. La mayoría de los ...

Inteligencia Artificial

Impresora 3D permite entrega rápida y económica en la oficina de correos

Una nueva oficina de correos en Bengaluru, India, es la primera en el mundo en ser construida utilizando una impresor...

Inteligencia Artificial

El cucaracha cibernético puede navegar por un laberinto

Los investigadores han desarrollado un método para crear cucarachas ciborg para ser utilizadas en misiones de búsqued...

Inteligencia Artificial

Los agentes de IA personalizados ya están aquí. ¿Está el mundo listo para ellos?

La era de los asistentes de inteligencia artificial autónoma podría tener enormes implicaciones.