Frame Interpolation
La interpolación de fotogramas sintetiza fotogramas nuevos entre los existentes para aumentar la frecuencia de fotogramas o crear cámara lenta. Métodos basados en flujo, kernels y modelos generativos.
La interpolación de fotogramas, también llamada interpolación de fotogramas de vídeo (VFI), es la tarea de visión artificial que consiste en sintetizar nuevos fotogramas entre dos fotogramas existentes de un vídeo. Insertar un fotograma entre cada pareja duplica la frecuencia de fotogramas y convierte un vídeo de 30 FPS en uno de 60 FPS; insertar varios crea un efecto de cámara lenta a partir de un vídeo normal. Aumenta la resolución temporal de un vídeo, el equivalente temporal de la superresolución, y solo rellena los huecos entre fotogramas existentes, a diferencia de la predicción de vídeo, que extrapola fotogramas después del último.
Cómo funciona la interpolación de fotogramas#
Promediar dos fotogramas produce imágenes fantasma: una imagen doble de todo lo que se ha movido. En cambio, los métodos basados en flujo estiman el flujo óptico, es decir, el movimiento de cada píxel entre los dos fotogramas; desplazan cada fotograma parcialmente a lo largo de ese movimiento hasta el instante objetivo y combinan los dos resultados. Las oclusiones son la parte difícil: una región del fondo que queda al descubierto cuando pasa una persona solo existe en uno de los fotogramas, por lo que los modelos de aprendizaje profundo, como Super SloMo, también predicen mapas de visibilidad que determinan de qué fotograma procede cada píxel de salida.
El flujo óptico de Farneback de OpenCV basta para mostrar el efecto en un vídeo real. El fragmento reserva el fotograma central de una secuencia de tres, lo reconstruye a partir de sus vecinos y puntúa ambos métodos con la relación señal-ruido de pico (PSNR):
import cv2
import numpy as np
# Read three consecutive frames of people walking and hold out the middle one
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/decelera_portrait_min.mov")
f0, f1, f2 = (cap.read()[1] for _ in range(3))
g0, g2 = (cv2.cvtColor(f, cv2.COLOR_BGR2GRAY) for f in (f0, f2))
# Estimate dense optical flow in both directions between the outer frames
flow02 = cv2.calcOpticalFlowFarneback(g0, g2, None, 0.5, 3, 15, 3, 5, 1.2, 0)
flow20 = cv2.calcOpticalFlowFarneback(g2, g0, None, 0.5, 3, 15, 3, 5, 1.2, 0)
# Warp each outer frame halfway along its flow, then average the two warps
h, w = g0.shape
grid = np.dstack(np.meshgrid(np.arange(w), np.arange(h))).astype(np.float32)
warp0 = cv2.remap(f0, grid - 0.5 * flow02, None, cv2.INTER_LINEAR)
warp2 = cv2.remap(f2, grid - 0.5 * flow20, None, cv2.INTER_LINEAR)
middle = cv2.addWeighted(warp0, 0.5, warp2, 0.5, 0)
# Score both against the real middle frame: flow interpolation vs. plain blending
blend = cv2.addWeighted(f0, 0.5, f2, 0.5, 0)
print(f"Blend: {cv2.PSNR(blend, f1):.1f} dB, flow interpolation: {cv2.PSNR(middle, f1):.1f} dB")Imprime Blend: 22.3 dB, flow interpolation: 29.5 dB: desplazar cada fotograma hasta la mitad de su movimiento reconstruye el fotograma reservado con una precisión 7,2 dB mayor que el promedio. Los benchmarks puntúan los modelos del mismo modo: el conjunto de tríos Vimeo-90K contiene 73.171 clips de tres fotogramas cuyo fotograma central debe predecir el modelo; se mide con PSNR y SSIM.
Métodos de interpolación basados en aprendizaje#
- Redes basadas en flujo: Super SloMo (2018) predice el flujo y la visibilidad para cualquier instante entre dos fotogramas, y RIFE (2022) estima directamente el flujo en el instante intermedio; funciona entre 4 y 27 veces más rápido que Super SloMo y DAIN.
- Redes basadas en kernels: SepConv (2017) predice kernels de convolución separables para cada píxel de salida y los aplica a parches de los dos fotogramas de entrada, combinando la estimación del movimiento y la mezcla en un solo paso.
- Modelos de movimiento amplio: FILM de Google (2022) comparte los pesos entre las escalas de una pirámide de características, de modo que un movimiento amplio a escala fina se trata como los pequeños movimientos que aprende a escalas más gruesas; se entrena únicamente con tríos de fotogramas.
- Modelos generativos: Los interpoladores basados en difusión, como LDMVFI (2024), generan el fotograma central eliminando ruido de una representación latente condicionada por las dos entradas, en lugar de deformar sus píxeles.
- Interpolación basada en eventos: Time Lens (2021) incorpora los cambios de brillo que una cámara de eventos registra entre dos fotogramas, que revelan el movimiento real durante el intervalo.
Aplicaciones en el mundo real#
- Generación de fotogramas para videojuegos: NVIDIA DLSS Multi Frame Generation inserta hasta cinco fotogramas generados por cada fotograma renderizado en GPU GeForce RTX 50 Series; cada fotograma generado necesita el siguiente fotograma renderizado, lo que añade latencia.
- Edición de vídeo: Los editores crean cámara lenta a partir de vídeos normales y convierten vídeos de 24 o 30 FPS para pantallas de 60 Hz y 120 Hz, la misma interpolación de movimiento que los televisores aplican como suavizado de movimiento.
- Animación: Los modelos de interpolación generan dibujos intermedios para fotogramas clave dibujados a mano, y los generadores de vídeo pueden producir clips completos que empiezan y terminan en dos fotogramas determinados.
El seguimiento de objetos aplica la misma idea a las posiciones en lugar de a los píxeles. Cuando un objeto oculto durante varios fotogramas reaparece, el rastreador OC-SORT del modo de seguimiento de Ultralytics (tracker="ocsort.yaml") interpola linealmente cajas virtuales para los fotogramas perdidos y las vuelve a procesar con su filtro de Kalman, reparando la estimación de velocidad que utiliza para asociar el objeto con la siguiente detección de YOLO26.










