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.

¿Cómo reemplazar correctamente la parte real de la FFT?

Intento reproducir un método de aumento de datos que viene del artículo:

“Un marco de trabajo basado en Fourier para la generalización de dominio” (CVPR 2021) de Qinwei Xu, Ruipeng Zhang, Ya Zhang, Yanfeng Wang y Qi Tian.

En el artículo se menciona que ajustan la parte real a una constante (la constante en el artículo es 20000) para eliminar la amplitud y realizar la reconstrucción de la imagen solo basándose en la fase.

A continuación se presenta mi código:

img = process_img("./data/house.jpg", 128)
img_fft = torch.fft.fft2(img, dim=(-2, -1))
amp = torch.full(img_fft.shape, 200000)
img_fft.real = amp
img_ifft = torch.fft.ifft2(img_fft, dim=(-2, -1))

img_ifft = img_ifft.squeeze(0)
img_ifft = img_ifft.transpose(2, 0)

img_ifft = np.array(img_ifft)

cv2.imshow("", img_ifft.real)

Entre ellos, la función process_img solo se utiliza para convertir ndarray en tensor, como se muestra a continuación:

loader = transforms.Compose([transforms.ToTensor()])
def process_img(img_path, img_size):
img = cv2.imread(img_path)
img = cv2.resize(img, (img_size, img_size))
img = img.astype(np.float32) / 255.0
img = loader(img)
img = img.unsqueeze(0)
return img

El primero es la imagen original, el segundo es la imagen proporcionada por el artículo y el tercero es la imagen generada por mi código.

Se puede observar que las imágenes generadas por mi método son muy diferentes de las proporcionadas en el artículo y hay algunos artefactos. ¿Por qué se produce este resultado?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje AI, no puedo ejecutar su código ni ver las imágenes generadas por él. Sin embargo, podría haber varias razones por las que sus resultados difieren de los proporcionados en el artículo:

    1. El valor constante utilizado en su código es 200000, mientras que el artículo menciona 20000. Esta diferencia de valor podría provocar un cambio significativo en la imagen procesada.
    2. El artículo no proporciona el método exacto utilizado para normalizar la imagen de entrada. El método de normalización utilizado en su código podría ser diferente del utilizado en el artículo, lo que provoca diferentes resultados.

    3. El tamaño de la imagen utilizada en su código es 128, mientras que el artículo no menciona el tamaño de la imagen. La diferencia en el tamaño de la imagen también podría resultar en imágenes procesadas diferentes.

    4. Podría haber un error en su código, lo que produce resultados inesperados.

    Para identificar la razón exacta de la diferencia en los resultados, puede necesitar investigar más el documento y experimentar con diferentes valores de parámetros en su código.

Comments are closed.