es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de desplazar una imagen en el espacio de Fourier sin que la parte desplazada se deslice desde el otro lado? (python)

Funciones que desplazan en el espacio de Fourier, deslizan la imagen dentro de sí misma (como en https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.fourier_shift.html).

¿Existe alguna manera en el espacio de Fourier que desplace la imagen pero rellene los píxeles restantes después del desplazamiento, ya sea en negro o en blanco, en lugar de deslizar la imagen? (como en https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.shift.html pero debe estar en el espacio de Fourier)

Imagen desplazada:
imagen desplazada

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hasta donde yo sé, no hay una forma directa de desplazar una imagen en el espacio de Fourier y llenar los píxeles restantes con un color específico utilizando las funciones incorporadas de las bibliotecas mencionadas (opencv, fft, scikit-image). El propósito del espacio de Fourier es analizar las frecuencias de la imagen y esta propiedad de traducción se utiliza para analizar la rotación de la imagen y las características invariantes a la escala.

    Sin embargo, una forma de lograr el resultado requerido es manipular manualmente la transformada de Fourier de la imagen. Podemos desplazar la transformada de Fourier utilizando la función numpy.fft.fftshift y luego reemplazar las frecuencias desplazadas con el color requerido antes de realizar la transformada de Fourier inversa utilizando numpy.fft.ifft2.

    Aquí tienes un ejemplo de código de referencia:

    import numpy as np
    import cv2
    
    # Cargar imagen
    img = cv2.imread('ejemplo.jpg', 0)
    
    # Transformada de Fourier
    f = np.fft.fft2(img)
    fshift = np.fft.fftshift(f)
    
    # Definir cantidad de desplazamiento
    rows, cols = img.shape
    shift_rows, shift_cols = int(rows * 0.25), int(cols * -0.25)
    
    # Crear máscara para frecuencias desplazadas
    mask = np.zeros((rows, cols), np.uint8)
    mask[rows//2-shift_rows:rows//2+shift_rows, cols//2+shift_cols:cols//2-shift_cols] = 1
    
    # Reemplazar frecuencias desplazadas con el color deseado
    fshift[mask==1] = 255
    
    # Transformada de Fourier inversa
    f_ishift = np.fft.ifftshift(fshift)
    img_back = np.fft.ifft2(f_ishift)
    img_back = np.abs(img_back)
    
    # Mostrar resultado
    cv2.imshow('Imagen Desplazada con Relleno Blanco', img_back.astype(np.uint8))
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    Ten en cuenta que en este ejemplo, llenamos las frecuencias desplazadas con blanco (255), pero puedes modificar el código para llenarlas con cualquier otro color.

Comments are closed.