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 tomo Fx = rfft(x)
y obtengo la potencia comoabs(Fx)**2