2012-05-16 10 views
6

No soy competente de ninguna manera con la compresión de video, pero actualmente trabajo en un proyecto donde comprime imágenes residuales usando H.264encóder con compensación de movimiento de bloque: cómo lidiar con el ruido de bloque en el marco de referencia?

Mi pregunta es más de naturaleza general con respecto a los codificadores de video. Según tengo entendido (como Wikipedia lo explica), un codificador de movimiento compensado divide el fotograma actual en algunos bloques que no se solapan, para cada bloque comprueba en el fotograma de referencia de donde proviene el bloque actual, luego calcula la diferencia de el bloque deseado y el bloque compensado por movimiento, entonces codifica este residual de alguna manera.

Wikipedia dice: "La principal desventaja de la compensación del movimiento del bloque es que introduce discontinuidades en los bordes del bloque (artefactos de bloqueo) Estos artefactos aparecen en forma de bordes agudos horizontales y verticales que son fácilmente detectados por el ojo humano y producir efectos de llamada (grandes coeficientes en subbandas de alta frecuencia) en la transformada relacionada con Fourier utilizada para la codificación de transformación de las tramas residuales. "

Por lo tanto, dado que el marco de referencia ya contiene artefactos de bloque (porque estaba codificado), estos artefactos de bloque se cambian al bloque actual y se calcula el residual, entonces las altas frecuencias creadas por los artefactos de bloque en los bordes del bloque desplazado también aparecerá como discontinuidades en el residuo. Y las discontinuidades generalmente son malas para la compresión.

¿El encóder de bloque compensado por movimiento se ocupa de alguna manera de estos artefactos de bloque antes de comprimir el residuo? ya que sabe exactamente cómo se desplazó el bloque, sabe dónde se encuentran los bordes del bloque y podría hacer algo al respecto antes o mientras codifica el residuo, eliminando/ignorando las altas frecuencias innecesarias en este lugar. Si algo como esto se realiza en un códec como H.264, ¿alguien puede explicar el concepto principal de cómo el codificador hace esto, darle un poco de terminología y demás? ¿Cómo trata el codificador los artefactos de bloque en el marco de referencia?

+1

pregunta impresionante .. bien puesto! – Alex

Respuesta

0

@Mat: Esta es una buena pregunta, y muy probablemente un área abierta para la investigación en codificación de video. La respuesta corta es que, por lo que yo sé, los codificadores de video actuales no hacen explícitamente nada para lidiar con la influencia de los artefactos de bloque en la estimación de movimiento.

Es posible que en casos de movimiento rápido en áreas de poco detalle, si hay artefactos de bloque prominentes, los vectores de movimiento a veces pueden ser múltiplos del tamaño de bloque :) o en otras palabras, la estimación de movimiento encuentra los bloques en el cuadro anterior y no el detalle de la imagen original. Esto es probablemente bastante raro; requiere tanto un movimiento rápido, un área de la imagen bastante sin rasgos, y una tasa de bits claramente insuficiente. Probablemente pueda construir secuencias de video sintéticas que lo demuestren. No está claro si hay algún modo de que el conocimiento de los límites de los bloques pueda ayudar; si los bordes de los bloques introducen componentes de alta frecuencia en los residuos del siguiente cuadro, entonces tenemos que gastar bits para borrar/corregir los componentes introducidos artificialmente, ya sea que sepamos que provienen de un artefacto de bloque o no ... e incluso entonces gastar pedacitos en eso puede ser una mejor decisión que usar un área de referencia/tipo de movimiento/tipo de bloque diferente.

Sin embargo, los códecs modernos como H.264 y VP8 tienen un in-loop deblocking filter, es decir, el marco decodificado se desbloquea antes de usarse como referencia, lo que reduce el ruido del bloque y por lo tanto, minimiza el efecto del problema que tiene correctamente identificado.

+0

@Mat: ¿esto responde su pregunta? En caso afirmativo, recuerde aceptar la respuesta. Si no, avíseme si tiene algo específico que pueda aclarar. –

Cuestiones relacionadas