2011-07-06 20 views
5

He estado tratando de entender cómo funciona la codificación de video para codificadores modernos, en particular H264. Se menciona muy a menudo en la documentación que los marcos residuales se crean a partir de las diferencias entre el actual p-frame y el último i-frame (suponiendo que los siguientes cuadros no se usan en la predicción). Entiendo que se usa un espacio de color YUV (tal vez YV12), y que una imagen se "resta" de la otra y luego se forma el residuo. Lo que no entiendo es cómo funciona exactamente esta substracción. No creo que sea un valor absoluto de la diferencia porque sería ambiguo. ¿Cuál es la fórmula por píxel para obtener esta diferencia?¿Cómo calcula H.264 o los codificadores de video en general la imagen residual de dos cuadros?

Respuesta

5

Resta es solo un pequeño paso en la codificación de video; el principio central detrás de la codificación de video más moderna es motion estimation, seguido de motion compensation. Básicamente, el proceso de estimación de movimiento genera vectores que muestran desplazamientos entre macrobloques en cuadros sucesivos. Sin embargo, siempre hay un poco de error en estos vectores.

Entonces, lo que sucede es que el codificador generará las dos compensaciones vectoriales, y lo "restante" es lo que queda. El residual no es simplemente la diferencia entre dos cuadros; es la diferencia entre los dos cuadros después de se tiene en cuenta la estimación del movimiento. Vea la imagen "Diferencia compensada por movimiento" en el artículo de la wikipedia sobre la compensación para obtener una ilustración clara de esto: tenga en cuenta que la diferencia compensada por el movimiento es drásticamente más pequeña que el residuo "tonto".

Here's a decent PDF that goes over some of the basics.

A otras pocas notas:

  • Sí, YUV se utiliza siempre, y por lo general la mayoría de los codificadores funcionan en YV12 o algún otro croma subsampled formato
  • Resta tendrá que pasar en la Y, U y V fotogramas por separado (piense en ellos como tres canales separados, todos los cuales necesitan ser codificados, entonces queda bastante claro cómo tiene que suceder la resta). La estimación del movimiento puede ocurrir o no en los planos Y, U y V; a veces los codificadores solo lo hacen en los valores Y (la luminancia) para ahorrar un poco de CPU a expensas de la calidad.
+0

Sí, sé que ocurre la compensación de movimiento, lo que no sabía era cómo el marco de compensación de movimiento se restaba del i-frame. Si entendí correctamente, significa que se hace de la siguiente manera: Yresidual = Yi - Yi-1, Cbresidual = Cbi - Cbi-1, Crresidual = Cri - Cri-1. ¿Está bien? – cloudraven

+4

Falta el PDF 404. –

+0

Nuevo enlace para el PDF: [Enlace PDF] (http://classes.engr.oregonstate.edu/eecs/spring2013/ece477/slides/4.Video_Compression.pdf) –

Cuestiones relacionadas