visor una poner manejo insertar imagenes imagen como codigo cargar java image-processing fft noise-reduction noise-generator

java - poner - ¿Cuál debería ser la entrada y la salida para una transformación de imagen FFT?



manejo de imagenes en java (1)

No proporcionó su código fuente ...

  1. su resultado parece árbol de resolución

    utilizado para escalamiento de información de resolución / frecuencia recursiva y extracción de características no FFT !!! Así que puede ser que su recursión sea incorrecta o superponga datos (para codificar la FFT in situ es casi una locura) debe comenzar con la transformación 1D y luego usarla para 2D y verificar visualmente cada etapa (también la transformación inversa para que coincida con los datos originales)

  2. ¡tu salida FFT debería tener una parte imaginaria no nula!

    mira aquí Cómo calcular la Transformada de Fourier Discreta y en todos los enlaces secundarios en esa respuesta mía

  3. ¿Es tu resolución de imagen el poder exacto de 2?

    si no es cero pad o la FFT no funcionaría correctamente

  4. tu ejemplo es incorrecto

    Así es como se ve en real:

    • A la izquierda está la imagen de entrada (copiada de su pregunta)
    • el medio es parte real
    • derecha es parte imaginaria

    puede combinarlos para alimentar el espectro =sqrt(Re*Re+Im*Im) la imagen Re e Im se amplifica para que se vea, de lo contrario solo serían visibles algunos puntos blancos en las esquinas. Aquí algunos ejemplos más:

    su resultado esperado parece desplazado a la mitad de la resolución de la imagen (por lo que el centro de simetría está en el centro de la imagen en lugar de en las esquinas)

[Edit1] poder y envolver

han agregado funciones de encendido y envoltura a la aplicación de la mina, así que aquí está el resultado:

primero, la potencia se calcula de modo que la intensity=sqrt(Re^2+Im^2) y luego se ajusta desplazando la imagen por la mitad del tamaño hacia la derecha y hacia abajo. ¿Qué es la superposición que viene desde el otro lado? Así que simplemente intercambie todos los puntos en todas las líneas swap((x,y),(x+xs/2,y)) y luego lo mismo para todas las columnas swap((x,y),(x,y+ys/2)) . Ahora el resultado coincide con el de OP, la aplicación está aquí

Intento obtener el espectro de una imagen en escala de grises utilizando el algoritmo FFT Cooley-Tukey en Java. No sé exactamente cómo formar la entrada para el algoritmo y qué valores de la salida usar para formar la imagen del espectro.

Actualmente, mi entrada es una matriz de números complejos, con Re = valor del píxel en el dominio de escala de grises de 8 bits e Im = 0; Después de ejecutar el algoritmo, obtengo otra matriz de números complejos con la parte real que tiene muchos valores fuera del rango [0,255] y la parte imaginaria 0. He intentado crear una imagen a partir del módulo de matriz de números reales 256.

Así es como debe verse el espectro:

Y esto es lo que tengo:

Obviamente estoy haciendo algo terriblemente mal pero no sé qué.