Estoy haciendo un análisis post-hoc de un conjunto de datos que consiste en una serie de cuadros de película que están contaminados por un artefacto muy periódico. Me gustaría eliminar este artefacto de mis marcos.
Para facilitar el trazado, acabo de cambiar la forma de mi matriz M
de valores de píxeles [nframes, npixels]
, luego promedié todos los valores de píxeles para darme un vector 1D m
. Así es como se ve esta señal en el dominio del tiempo. Puede ver la oscilación con bastante claridad en el recuadro ampliado.
Luego hice un periodograma tomando Fm = rfft(m)
, y tracé abs(Fm)**2
contra la frecuencia. Veo un pico muy fuerte a ~ 1.5Hz:
Además de la periodicidad temporal, también parece haber un componente espacial más débil para este artefacto, ya que en el valor exacto de la frecuencia pico parece haber una variación suave en la fase a través del eje x de mis cuadros, de modo que los píxeles en el derecha tienden a retrasar píxeles a la izquierda:
Como enfoque de fuerza bruta, he intentado simplemente filtrar cada píxel en el dominio del tiempo usando un filtro de muesca centrado en 1.5Hz. Utilicé un filtro Butterworth de orden 4 con frecuencias críticas de 1.46 y 1.52Hz (no estoy muy versado en el diseño de filtros, así que estoy seguro de que puede haber opciones más apropiadas).
Así es como se ve la señal media de píxeles después del filtrado:
Y el periodograma correspondiente:
El filtro de muesca hace un trabajo razonablemente bueno para reducir el artefacto, pero dado que básicamente parece una sinusoide estacionaria pura, no puedo evitar pensar que podría hacerlo mejor que solo atenuar esa parte del espacio de frecuencia.
Mi idea inicial (muy ingenua) fue hacer algo como:
- Obtenga la frecuencia, fase y amplitud de la oscilación del espectro de Fourier para cada píxel de la película.
- Reconstruir la oscilación en el dominio del tiempo.
- Restarlo de los fotogramas de la película.
Me doy cuenta de que esto no es algo que la gente suele hacer, ya que la interferencia generalmente no es tan puramente espectral y temporalmente estacionaria, pero me pregunto si podría tener sentido en mi caso.
Datos
Pila TIFF completa de 16 bits (~ 2 GB sin comprimir)
Versión de 8 bits diezmada espacialmente (~ 35 MB sin comprimir)
x
, luego tomoFx = rfft(x)
y obtengo la potencia comoabs(Fx)**2
Respuestas:
Su solución propuesta (calcular una sinusoide en el dominio del tiempo basada en el pico en la FFT, luego restarla) debería funcionar, pero hay una manera más fácil de hacer esencialmente lo mismo: modificar ese valor pico en la FFT, luego tomar el inverso transformar.
Entonces, para su video rasterizado
M[nframes, npixels]
, encuentra el contenedor de frecuencia que contiene el artefacto, luego lo aplana sistemáticamente (por ejemplo, establece su magnitud al promedio de sus vecinos) para cada píxel:Esto debería funcionar si el artefacto es exactamente de amplitud y frecuencia constantes, y su frecuencia cae directamente en un submúltiplo de la longitud de la secuencia (es decir, los sinusoides representados por la FFT). En general, es posible que desee aplanar uno o dos contenedores a cada lado
badbin
para lidiar con un conjunto un poco más amplio de corrupciones de banda estrecha, por ejemploSi desea restringir el componente eliminado de cada píxel para que tenga la misma frecuencia y fase del artefacto detectado en la intensidad media, puede eliminar solo la proyección de la
badbin
magnitud en esa fase, por ejemploTenga en cuenta que el componente resultante en
badbin
ahora siempre será desplazado de fase 90 ° (ortogonal) del globalbadbinphase
en cada píxel: cualquier componente de señal exactamente a esa frecuencia y fase no puede separarse del artefacto.fuente