ES2266665T3 - Control del redondeo para la interpolacion multietapa. - Google Patents

Control del redondeo para la interpolacion multietapa. Download PDF

Info

Publication number
ES2266665T3
ES2266665T3 ES03007062T ES03007062T ES2266665T3 ES 2266665 T3 ES2266665 T3 ES 2266665T3 ES 03007062 T ES03007062 T ES 03007062T ES 03007062 T ES03007062 T ES 03007062T ES 2266665 T3 ES2266665 T3 ES 2266665T3
Authority
ES
Spain
Prior art keywords
pixel
image
rounding
value
values
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
ES03007062T
Other languages
English (en)
Inventor
Sridhar Srinivasan
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Application granted granted Critical
Publication of ES2266665T3 publication Critical patent/ES2266665T3/es
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G02OPTICS
    • G02CSPECTACLES; SUNGLASSES OR GOGGLES INSOFAR AS THEY HAVE THE SAME FEATURES AS SPECTACLES; CONTACT LENSES
    • G02C9/00Attaching auxiliary optical parts
    • G02C9/02Attaching auxiliary optical parts by hinging
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/523Motion estimation or motion compensation with sub-pixel accuracy
    • GPHYSICS
    • G02OPTICS
    • G02CSPECTACLES; SUNGLASSES OR GOGGLES INSOFAR AS THEY HAVE THE SAME FEATURES AS SPECTACLES; CONTACT LENSES
    • G02C5/00Constructions of non-optical parts
    • G02C5/02Bridges; Browbars; Intermediate bars
    • GPHYSICS
    • G02OPTICS
    • G02CSPECTACLES; SUNGLASSES OR GOGGLES INSOFAR AS THEY HAVE THE SAME FEATURES AS SPECTACLES; CONTACT LENSES
    • G02C2200/00Generic mechanical aspects applicable to one or more of the groups G02C1/00 - G02C5/00 and G02C9/00 - G02C13/00 and their subgroups
    • G02C2200/06Locking elements

Landscapes

  • Physics & Mathematics (AREA)
  • Ophthalmology & Optometry (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Health & Medical Sciences (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Optics & Photonics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Complex Calculations (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Studio Devices (AREA)
  • Error Detection And Correction (AREA)

Abstract

Un procedimiento que comprende: calcular un valor en una posición de muestra de una única imagen de video de referencia (600) usando múltiples etapas (1510, 1530, 1540) de interpolación para determinar el valor, en el cual las múltiples etapas (1510, 1530, 1540) incluyen un control de redondeo por etapas alternadas.

Description

Control del redondeo para la interpolación multietapa.
Campo de la técnica
Se describen técnicas y herramientas para el control del redondeo en la interpolación multietapa. Por ejemplo, un codificador y decodificador de vídeo utiliza control de redondeo por etapas alternadas al calcular valores de píxel en imágenes de vídeo de referencia por interpolación multietapa.
Antecedentes
El vídeo digital necesita una gran capacidad de almacenamiento y de transmisión. Una secuencia en bruto típica de vídeo digital incluye 15 ó 30 imágenes por segundo. Cada imagen puede incluir decenas o centenas de píxeles (también llamados pels). Cada píxel representa un elemento diminuto de la fotografía. En forma bruta, un ordenador representa normalmente un píxel con 24 bits. Por ejemplo, un píxel puede comprender un valor de luminancia de 8 bits (también llamado valor de luma) que define el componente del píxel en la escala de grises y dos valores de crominancia de 8 bits (también llamados valores de croma) que definen el componente de color del píxel. Así pues, el número de bits por segundo, o tasa de bits, de una secuencia en bruto típica de vídeo digital puede ser igual o superior a 5 millones de bits por segundo.
Muchos ordenadores y redes de ordenadores carecen de recursos para procesar vídeo digital en bruto. Por esta razón, los ingenieros usan la compresión de vídeo (también llamada codificación) para reducir la tasa de bits del vídeo digital. La compresión puede ser sin pérdida, en la cual la calidad del vídeo no sufre, pero las reducciones de la tasa de bits están limitadas por la complejidad del vídeo. O bien, la compresión puede ser con pérdida, en la cual la calidad del vídeo sufre, pero las reducciones de la tasa de bits son más elevadas. La descompresión invierte la compresión.
En general, las técnicas de compresión de vídeo incluyen la compresión espacial (intraframe) y la compresión temporal (interframe). Las técnicas de compresión espacial comprimen las imágenes individuales, llamadas típicamente imágenes I o imágenes clave. Las técnicas de compresión temporal comprimen las imágenes con referencia a la imagen precedente y/o siguiente, y son denominadas típicamente imágenes predichas, imágenes P o imágenes B.
El Windows Media Vídeo, Versión 8 ("WMV8"), de Microsoft Corporation, incluye un codificador de vídeo y un decodificador de vídeo. El codificador WMV8 utiliza la compresión espacial y temporal, y el decodificador WMV8 utiliza la descompresión espacial y temporal. La compresión temporal del codificador WMV8 usa una codificación de predicción por compensación del movimiento, a base de bloques, seguida por una codificación de la transformación del error residual.
En el WMV8, una imagen está representada por tres planos de píxeles: un plano de luminancia (Y) de los valores de luminancia de los píxeles y dos planos de crominancia (U,V) de los valores de crominancia de los píxeles. La resolución del plano Y es el doble de la resolución de los planos U y V horizontalmente y verticalmente. Así pues, una imagen de 320 píxeles x 240 píxeles tiene un plano Y de 320 píxeles x 240 píxeles y unos planos U y V de 160 píxeles x 120 píxeles.
El codificador WMV8 divide una imagen predicha en 8x8 bloques de píxeles. Un grupo de cuatro bloques de luminancia de 8x8 y dos bloques de crominancia cosituados de 8x8 (uno para el plano de crominancia U, y otro para el plano de crominancia V) forman un macrobloque de 16x16. Por lo tanto, cada macrobloque de 16x16 incluye cuatro bloques de luminancia de 8x8 y dos bloques de crominancia de 8x8.
En un macrobloque de una imagen predicha, el codificador WMV8 realiza la estimación del movimiento. La estimación del movimiento aproxima el movimiento de un macrobloque de una imagen predicha buscando el macrobloque de la imagen predicha y haciéndolo coincidir con un macrobloque de una imagen de referencia. En la Figura 1, por ejemplo, el codificador WMV8 calcula un vector de movimiento para un macrobloque (115) de la imagen predicha (110). Para calcular el vector de movimiento, el codificador busca en un área de búsqueda (135) de una imagen de referencia (130). Dentro del área de búsqueda (135), el codificador compara los valores de luminancia del macrobloque (115) de la imagen predicha (110) con los valores de luminancia de los diversos bloques candidatos de la imagen de referencia (130) para encontrar una buena coincidencia. El codificador WMV8 puede conmutar la precisión del vector de movimiento, y puede usar un margen de búsqueda y unos vectores de movimiento con una resolución horizontal de uno, medio o cuarto de píxel y una resolución vertical de uno o medio píxel. Con vectores de movimiento de precisión subpíxel, el codificador WMV8 puede aproximar el movimiento de una secuencia de vídeo al nivel de subpíxel.
Durante la compensación de movimiento, el codificador WMV8 usa los vectores de movimiento para los macrobloques de la imagen predicha con objeto de determinar los predictores para los macrobloques procedentes de la imagen de referencia. Para cada uno de los macrobloques con predicción de movimiento, el codificador WMV8 calcula la diferencia (denominada residuo o error) entre el macrobloque original y su predictor. El codificador WMV8 divide el residuo en bloques y comprime con pérdidas los bloques residuales. Para reconstruir los macrobloques con predicción de movimiento de la imagen predicha, el codificador WMV8 descomprime los residuos y los suma a los predictores para los macrobloques.
El decodificador WMV8 también usa los vectores de movimiento en los macrobloques de la imagen predicha para determinar los predictores para los macrobloques a partir de la imagen de referencia. Para reconstruir los macrobloques, con movimiento predicho, de la imagen predicha, el decodificador WMV8 descomprime los residuales y los añade a los predoctores para los macrobloques.
Durante la estimación o compensación del movimiento, cuando un vector de movimiento tiene precisión subpíxel, (es decir, medio píxel o un cuarto de píxel), el codificador o decodificador WMV8 debe determinar los valores de píxel en las posiciones subpíxel de la imagen de referencia. El codificador o decodificador WMV8 genera valores para las posiciones subpíxel usando filtros de interpolación. La Figura 2 ilustra unas posiciones subpíxel de muestra H_{0}, H_{1}, H_{2}, cuyos valores están calculados por interpolación de los valores enteros a, b, c, …, p de los píxeles.
Cuando se opera con una precisión de medio píxel en los vectores de movimiento, los filtros de interpolación que se usan para los valores de luminancia del pixel en las tres diferentes posiciones de medio pixel H_{0}, H_{1}, H_{2} son:
(1),H_{0} = (f + g + R_{2}) >> 1
(2),H_{1} = (f + g + R_{2}) >> 1
y
(3),
\hskip1cm
H_{2} = (f + g + j + k + R_{1}) >> 2
en donde R_{1} y R_{2} son unos valores de control de redondeo que se controlan mediante una bandera de control de redondeo de un bit que indica el modo de redondeo para una imagen particular. Si la bandera de control de redondeo está puesta a 0, entonces R_{1} = 2 y R_{2} = 1. Si la bandera de control de redondeo está puesta a 1, entonces R_{1} = R_{2} = 0. El valor de la bandera de control de redondeo alterna entre 1 y 0 para cada imagen P. En cada imagen, el valor de la bandera de control de redondeo es repuesto a 0. Así pues, el control de redondeo funciona imagen a imagen.
Las ecuaciones 1, 2 y 3 son ejemplos de interpolación bilineal. La interpolación bilineal es rápida y tiende a suavizar los valores de los píxeles. El suavizado puede tener efectos deseables (tales como una disminución perceptible del ruido de cuantificación), pero también puede conducir a una pérdida de información válida de los píxeles.
Con una resolución de un cuarto de píxel en el vector de movimiento, el codificador o decodificador WMV8 emplea filtros bicúbicos para interpolar los valores de luminancia de píxel en las posiciones de medio píxel. La interpolación bicúbica es más lenta que la interpolación bilineal, pero tiende a preservar los valores de borde y resulta en una menor pérdida de información válida del píxel. Los filtros bicúbicos para las tres diferentes posiciones de medio píxel H_{0}, H_{1}, H_{2} son:
(4),H_{0} = (- e + 9f + 9g - h + 8) >> 4
(5),H_{1} = (- b + 9f + 9j - n + 8) >> 4
y
(6).H_{2} = (- t_{0} + 9t_{1} + 9t_{2} - t_{3} + 8) >> 4
en donde t_{0}, t_{1,} t_{2} y t_{3} se calculan como sigue:
(7),t_{0} = (- a + 9b + 9c - d + 8) >> 4
(8),t_{1} = (- e + 9f + 9g - h + 8) >> 4
(9),t_{2} = (- i + 9j + 9k - l + 8) >> 4
y
(10).t_{3} = (- m + 9n + 9o - p + 8) >> 4
Las ecuaciones (4)-(10) pueden dar como resultado una salida que quede fuera del margen de los valores de entrada. Por ejemplo, para una entrada de 8 bits (margen 0…255), la serie de valores 0 255 255 0 produce un valor de salida de 257 en cualquiera de las ecuaciones (4)-(10). Por ello, el codificador o decodificador WMV8 bloquea (o "limita") el valor de salida de todas las ecuaciones (4)-(10) para que esté dentro del margen de validez. Por ejemplo, para valores de 8 bits, los valores menores de 0 se cambian a 0, y los valores mayores de 255 se cambian a 255. El bloqueo soluciona el problema del margen, pero ralentiza el cálculo. Además, el bloqueo produce pérdida de precisión.
A continuación, en una siguiente etapa de interpolación, el codificador o decodificador WMV8 calcula los valores de píxel en ciertas posiciones de un cuarto de píxel. Estas localizaciones de un cuarto de píxel están situadas horizontalmente entre dos localizaciones cualesquiera de medio pixel o entre una localización de un píxel y una localización de medio píxel. Para estas localizaciones de un cuarto de píxel, el codificador o decodificador WMV8 utiliza interpolación bilineal (es decir, (x + y + 1) >> 1) usando las dos localizaciones horizontalmente vecinas de medio píxel y de un píxel sin control de redondeo.
Una vez calculados los vectores de movimiento de la luminancia, el codificador o decodificador WMV8 deriva los vectores cosituados de movimiento de la crominancia. Debido a que en el WMV8 un plano de crominancia es la mitad de grande que un plano de luminancia tanto horizontal como verticalmente, los valores de movimiento de la luminancia deben ser escalados a valores apropiados de vectores de movimiento de la crominancia. En el WMV8, este proceso de conversión incluye dividir por dos los vectores de movimiento de la luminancia y redondear con una precisión de medio píxel los vectores resultantes de movimiento de la crominancia. Es más, el redondeo de la crominancia en el WMV8 opera en un modo único que no puede ser modificado ni seleccionado por el usuario.
En el WMV8, los valores de píxel en posiciones subpíxel de una imagen de referencia pueden presentar en ciertas circunstancias un subflujo o un sobreflujo. Por ejemplo, el valor de luminancia del píxel en una posición de un cuarto de pixel puede ser 271 (que está fuera del margen de 0…255) si el valor de la posición vecina de píxel entero es 255 y el valor de la posición vecina de medio píxel es 287 (0 + 9*255 + 9*255 - 0 + 8 >> 4 = 287)(255 + 287 + 1 >> = 271). Para resolver este problema, después de sumar los bloques residuales al predictor para un macrobloque, el codificador y decodificador WMV8 limita en caso necesario los valores reconstruidos para el macrobloque de manera que queden dentro del margen de 0…255.
Aparte del WMV8, existen varias normas internacionales relativas a la compresión y descompresión de vídeo. Entre estas normas están las normas Motion Picture Experts Group ["MPEG"] 1, 2 y 4, y las normas H.261, H.262 y H.263 de la Internacional Telecommunication Union ["ITU"]. Al igual que el WMV8, estas normas usan una combinación de compresión espacial y temporal, aunque las normas difieren típicamente del WMV8 en los detalles de las técnicas de compresión utilizadas.
Varias normas (por ejemplo, MPEG 4 y H.263) proporcionan la estimación y compresión del movimiento de medio píxel utilizando filtros lineales y control de redondeo básico. Además, en la norma H.263, los vectores de movimiento de la crominancia que tienen teóricamente una resolución de un cuarto de píxel (es decir, la mitad de la resolución de medio píxel que tienen los vectores de movimiento de la luminancia) son redondeados a una precisión de medio píxel o de un píxel entero, por lo que en el espacio de la crominancia no se permiten valores de un cuarto de píxel. Para detalles adicionales de las normas sobre la estimación y compensación del movimiento, véase la descripción técnica de las propias normas.
La Solicitud de Patente Europea nº EP 0 884 912 A2 describe codificadores y decodificadores de vídeo que utilizan tanto imágenes P+ (que redondean valores de medio entero desde cero) como imágenes P- (que redondean valores de medio entero hacia cero) para cancelar los errores de redondeo y evitar la acumulación de errores de redondeo. La Patente Estadounidense Nº 6.282.243 describe una unidad de cálculo de predicción de imagen que redondea los valores interpolados de los píxeles a un entero según un algoritmo de redondeo especificado por un controlador de cálculo. La Patente Estadounidense Nº 5.659.365 describe unos vectores de movimiento de la crominancia calculados mediante una información de redondeo contenida en un bit suplementario de los vectores de movimiento de la luminancia de valor impar.
La estimación y la compensación del movimiento son unas técnicas de compresión eficaces, pero las diversas técnicas anteriores de estimación y compensación (como el WMV8 y las normas descritas anteriormente) tienen varios inconvenientes:
(1) Cuando se calculan valores de píxel en posiciones subpíxel de imágenes de referencia, los codificadores y decodificadores pierden precisión innecesariamente en los valores intermedios. Por ejemplo, cuando se calcula en el WMV8 el valor de píxel para una posición de un cuarto de píxel, los valores intermedios en las posiciones de un cuarto de píxel son desplazados cuatro bits a la derecha, aunque pueda disponerse de una mayor profundidad de bits. Además, el codificador y decodificador WMV8 limita los valores intermedios durante la interpolación en dos etapas de las posiciones de cuarto de píxel, lo cual ralentiza el cálculo y produce la pérdida innecesaria de precisión.
(2) La interpolación de valores de píxel en una estimación y compensación de movimiento de cuarto de píxel es ineficaz en muchos casos. Por ejemplo, en el WMV8, el cálculo de una posición unidimensional de un cuarto de píxel requiere el uso de un filtro para una posición de medio píxel seguido del uso de un filtro bilineal.
(3) Los codificadores y decodificadores no pueden tener en cuenta la acumulación de errores de redondeo que pudiera producirse en la interpolación multietapa. El error de redondeo tiene lugar, por ejemplo, cuando los valores de pixel son redondeados repetidamente de una a otra imagen en una secuencia de vídeo. Este error de redondeo puede provocar artefactos perceptibles en secuencias de vídeo de baja calidad y baja tasa de bits. Por ejemplo, cuando el codificador y decodificador WMV8 interpola en múltiples etapas un valor de píxel en una posición de un cuarto de píxel, no se utiliza el control de redondeo. Por el contrario, el resultado de cada etapa se redondea de la misma forma en cada etapa de interpolación (y sin control de redondeo); y
(4) El redondeo de la crominancia no se realiza con una precisión de un cuarto de píxel, y no se hace ningún control sobre las opciones de redondeo de los vectores de movimiento de la crominancia. Por ejemplo, el codificador y decodificador WMV8 redondea todos los vectores de movimiento de la crominancia a un valor de medio píxel y sólo opera en un modo único.
Dada la importancia crítica que tiene la estimación y compensación del movimiento en el vídeo digital, no es sorprendente que la estimación y compensación del movimiento sean campos fuertemente desarrollados. No obstante, sean cuales sean los beneficios de las técnicas anteriores de estimación y compensación del movimiento, no tienen las ventajas de las técnicas y herramientas siguientes.
Resumen
El objetivo de la presente invención es mejorar la calidad de presentación de las imágenes para la codificación o decodificación de vídeo.
Este objetivo es alcanzado por la invención según se define en las reivindicaciones independientes. Las realizaciones de la invención vienen dadas por las reivindicaciones dependientes.
En resumen, la descripción detallada está dirigida a diversas técnicas y herramientas para el control de redondeo en la interpolación multietapa. En aplicaciones de codificación y decodificación de vídeo, por ejemplo, utiliza el control de redondeo por etapas alternadas cuando calcula los valores de píxel en imágenes de vídeo de referencia mediante interpolación multietapa. El uso de control de redondeo por etapas alternadas reduce la acumulación del error de redondeo por interpolación multietapa entre una y otra imagen. Esto puede mejorar las prestaciones totales al reducir los artefactos perceptibles en ciertos tipos de secuencias de vídeo (por ejemplo, baja calidad, secuencias de vídeo de bajo bitrato arrastradas por Internet).
Un componente tal como un codificador u decodificador de vídeo calcula valores usando múltiples etapas de interpolación con control del redondeo por etapas alternadas. Por ejemplo, en una primera etapa, el componente redondea un primer valor marginal al entero más próximo en una primera dirección y, en una segunda etapa, el componente redondea un segundo valor marginal al entero más próximo en una segunda dirección opuesta a la primera dirección. En algunos casos, un parámetro de control de redondeo controla las direcciones primera y segunda. El propio parámetro de control de redondeo puede alternar (por ejemplo, entre 0 y 1) sobre una base de imagen a imagen o sobre otra base.
Las diversas técnicas y herramientas pueden usarse combinadas o independientemente. Se apreciarán características y ventajas adicionales gracias a la siguiente descripción detallada que hace referencia a los dibujos adjuntos.
Breve descripción de los dibujos
La Figura 1 es un esquema que representa la estimación del movimiento en un codificador de vídeo según la técnica anterior.
La Figura 2 es un gráfico que representa las localizaciones subpíxel para la interpolación en la estimación y compensación del movimiento según la técnica anterior.
La Figura 3 es un diagrama de bloques de un entorno informático adecuado en el cual pueden implementarse varias realizaciones descritas.
La Figura 4 es un diagrama de bloques de un sistema generalizado de codificación de vídeo utilizado en varias realizaciones descritas.
La Figura 5 es un diagrama de bloques de un sistema generalizado de decodificación de vídeo utilizado en varias realizaciones descritas.
La Figura 6 es un gráfico que representa las localizaciones para interpolación de los valores de píxel durante la estimación y compensación del movimiento subpíxel.
La Figura 7 es un gráfico que representa las localizaciones de píxel entero cuyos valores de píxel se usan para calcular valores de píxel interpolados para localizaciones subpíxel.
La Figura 8 es un diagrama que representa una técnica de interpolación de doble etapa para interpolar valores en posiciones subpíxel.
La Figura 9 es un gráfico que representa una posición muestreada de medio pixel horizontal y medio píxel vertical, y los valores intermedios en posiciones subpíxel utilizados para calcular el valor en la posición de muestra.
La Figura 10 es un gráfico que representa una posición muestreada de un cuarto de pixel horizontal y medio píxel vertical, y una posición muestreada de medio píxel horizontal y un cuarto de pixel vertical, y los valores intermedios en posiciones subpíxel utilizados para calcular los valores en las posiciones de muestra.
La Figura 11 es un gráfico que representa una posición muestreada de un cuarto de pixel horizontal y un cuarto de píxel vertical, y los valores intermedios en posiciones subpíxel utilizados para calcular el valor en la posición de muestra.
La Figura 12 es un diagrama que representa una técnica de interpolación multietapa con valores intermedios de margen dinámico (en bits) aumentado.
La Figura 13 es un diagrama que representa una técnica de interpolación multietapa con bloqueo omitido.
La Figura 14 es un diagrama que representa una técnica de interpolación multietapa con desplazamiento de bits aplazado.
La Figura 15 es un diagrama que representa una técnica de interpolación multietapa utilizando control de redondeo alternado por etapas.
La Figura 16 es un diagrama de flujo que representa una técnica para seleccionar entre múltiples modos de interpolación y redondeo de la crominancia.
La Figura 17 es una tabla que representa un primer modo de redondeo de la crominancia.
La Figura 18 es una tabla que representa un segundo modo de redondeo de la crominancia.
Descripción detallada
Las realizaciones descritas están relacionadas con técnicas y herramientas para la interpolación a nivel subpíxel en la estimación y compensación del movimiento. Varias realizaciones están relacionadas con técnicas y herramientas para mantener la precisión en la interpolación multietapa aplazando el bloqueo y/o el desplazamiento de bits (operaciones que pueden producir una pérdida de precisión) hasta las etapas más tardías de la interpolación. Otras realizaciones están relacionadas con filtros u operaciones de redondeo eficaces para la interpolación multietapa.
Un codificador o decodificador efectúa la interpolación subpíxel en una imagen de referencia o en una porción de una imagen tal como uno o más bloques o macrobloques. El codificador/decodificador puede efectuar entonces la compensación del movimiento usando vectores de movimiento subpíxel adecuados.
En algunas realizaciones, un codificador de vídeo o decodificador de vídeo efectúa la interpolación subpíxel en una aplicación de codificación o decodificación de vídeo. Alternativamente, otro codificador o decodificador, u otro tipo de componente, efectúa la interpolación subpíxel u otra técnica descrita más adelante en otro tipo de aplicación.
Como alternativa a efectuar la interpolación subpíxel sobre imágenes de referencia, en ciertas realizaciones un codificador/decodificador efectúa la interpolación subpíxel sobre campos, capas de objetos, u otras imágenes.
En ciertas realizaciones, la interpolación subpíxel se efectúa calculando valores de píxel en los planos de luminancia y crominancia de una imagen de referencia en el espacio de color YUV. Alternativamente, el espacio de color es diferente (por ejemplo, YIQ o RGB).
Las diversas técnicas y herramientas pueden utilizarse en combinación o independientemente. Diferentes realizaciones implementan una o más de las técnicas y herramientas descritas. Aunque, por motivos de presentación, las operaciones de estas técnicas están típicamente descritas en un orden secuencial particular, deberá entenderse que esta tipo de descripción abarca redistribuciones menores en el orden de las operaciones, a menos que se requiera un ordenamiento particular. Por ejemplo, en algunos casos, las operaciones descritas secuencialmente pueden ser redistribuidas o efectuadas concurrentemente. Además, para simplificar, los diagramas de flujo no presentan típicamente los diversos modos en que pueden usarse las técnicas particulares en conjunción con otras técnicas.
En ciertas realizaciones, un codificador y decodificador de vídeo usa diversas banderas y señales en una corriente de bits. Aunque se describen banderas y señales específicas, deberá entenderse que este tipo de descripción abarca diferentes convenciones para las banderas y señales (por ejemplo, ceros (0) en lugar de unos (1)).
I. Entorno informático
La Figura 3 ilustra un ejemplo generalizado de un entorno informático (300) adecuado en el cual pueden implementarse varias de las realizaciones descritas. El entorno informático (300) no pretende sugerir ninguna limitación en cuanto al alcance de utilización o de funcionalidad, ya que las técnicas y herramientas pueden ser implementadas en diversos entornos informáticos de propósito general o de propósito especial.
Con referencia a la Figura 3, el entorno informático (300) incluye al menos una unidad procesadora (310) y una memoria (320). En la Figura 3, esta configuración básica (330) está rodeada por una línea de trazos. La unidad procesadora (310) ejecuta instrucciones ejecutables por ordenador y puede ser un procesador real o virtual. En un sistema multiproceso, múltiples unidades procesadoras ejecutan instrucciones ejecutables por ordenador para aumentar la potencia de procesamiento. La memoria (320) puede ser una memoria volátil (por ejemplo, de registros, caché, RAM), una memoria no volátil (por ejemplo, ROM, EEPROM, memoria flash, etc.), o alguna combinación de las dos. La memoria (320) almacena un software (380) que implementa las técnicas de interpolación subpíxel en un codificador y/o un decodificador, tal como un codificador y/o un decodificador de vídeo.
Un entorno informático puede tener características adicionales. Por ejemplo, el entorno informático (300) incluye el almacenamiento (340), uno o más dispositivos de entrada (350), uno o más dispositivos de salida (360), y una o más conexiones de comunicación (370). Un mecanismo de interconexión (no representado), tal como un bus, un controlador o una red, interconecta los componentes del entorno informático (300). Típicamente, el software del sistema operativo (no representado) proporciona un entorno operativo para otro software que se ejecute en el entorno informático (300), y coordina las actividades de los componentes del entorno informático (300).
El almacenamiento (340) puede ser extraíble o no extraíble, e incluye discos magnéticos, cintas o casetes magnéticas, CD-ROM, DVD o cualquier otro medio que pueda usarse para almacenar información y al que pueda accederse desde dentro del entorno informático (300). El almacenamiento (340) almacena las instrucciones para el software (380) que implementa las técnicas de interpolación subpíxel.
El o los dispositivos de entrada (350) pueden ser un dispositivo de entrada táctil tal como un teclado, un ratón, un lápiz o una bola, un dispositivo de entrada de voz, un dispositivo escáner, u otro dispositivo que proporcione entradas al entorno informático (300). Para la codificación de audio o de vídeo, el o los dispositivos de entrada (350) puede ser una tarjeta de sonido, una tarjeta de vídeo, una tarjeta sintonizadora de TV, o un dispositivo similar que acepte una entrada de audio o de vídeo en forma analógica o digital, o un CD-ROM o CD-RW que lea muestras de audio o de vídeo y las introduzca en el entorno informático (300). El o los dispositivos de salida (360) pueden ser un indicador visual, una impresora, un altavoz, un grabador de CD, u otro dispositivo que proporcione una salida al entorno informático (300).
La o las conexiones de comunicación (370) permiten la comunicación sobre un medio de comunicación con otra entidad informática. El medio de comunicación envía información, tal como instrucciones ejecutables por ordenador, entradas o salidas de audio o de vídeo, u otros datos, en una señal de datos modulada. Una señal de datos modulada es una señal que tiene una o varias de sus características fijadas o cambiadas de tal manera que se codifique información en la señal. A título de ejemplo, y no de limitación, los medios de comunicación incluyen técnicas con cable o sin cable implementadas en una portadora eléctrica, óptica, RF, infrarroja, acústica, o de otro tipo.
Las técnicas y herramientas pueden describirse en el contexto general de los medios legibles por ordenador. Los medios legibles por ordenador son cualquier medio disponible al que pueda accederse desde un entorno informático. A título de ejemplo, y no de limitación, en el entorno informático (300), los medios legibles por ordenador incluyen la memoria (320), el almacenamiento (340), medios de comunicación, y combinaciones de cualesquiera de los
anteriores.
Las técnicas y herramientas pueden describirse en el contexto general de las instrucciones ejecutables por ordenador, tales como las incluidas en módulos de programa, que se ejecutan en un entorno informático sobre un procesador diana real o virtual. Generalmente, los módulos de programa incluyen rutinas, programas, librerías, objetos, clases, componentes, estructuras de datos, etc., que realizan tareas particulares o implementan tipos particulares de datos abstractos. En varias realizaciones, la funcionalidad de los módulos de programa puede combinarse o dividirse entre los módulos de programa que se desee. Las instrucciones ejecutables para los módulos de programa pueden ser ejecutadas en un entorno informático local o distribuido.
Por motivos de presentación, la descripción detallada emplea términos tales como "determinar" y "seleccionar" para describir las operaciones de ordenador en un entorno informático. Estos términos son abstracciones de nivel superior para las operaciones efectuadas por un ordenador y no deben confundirse con actos realizados por un ser humano. Las operaciones reales del ordenador correspondientes a estos términos pueden variar dependiendo de la implementación.
II. Codificador y decodificador de vídeo generalizado
La Figura 4 es un diagrama de bloques de un codificador (400) de vídeo generalizado y la Figura 5 es un diagrama de bloques de un decodificador (500) de vídeo generalizado.
La relación representada entre los módulos situados dentro del codificador y del decodificador indican el flujo principal de información en el codificador y el decodificador; las otras relaciones no se han representado por motivos de simplicidad. En particular, las Figuras 4 y 5 no muestran normalmente la información lateral que indica los ajustes, modos, tablas, etc. del codificador que se usan en una secuencia de vídeo, una imagen, un macrobloque, un bloque, etc. Esta información lateral es enviada en la corriente de bits de salida, típicamente después de la codificación entrópica de la información lateral. El formato de la corriente de bits de salida puede ser un formato de Windows Media Vídeo u otro formato.
El codificador (400) y el decodificador (500) están basados en bloques y usan un formato de macrobloque 4:2:0, incluyendo cada macrobloque cuatro bloques de luminancia de 8x8 (tratados a veces como un macrobloque de 16x16) y dos bloques de crominancia de 8x8 (por ejemplo, un bloque U, un bloque V). Alternativamente, el codificador (400) y el decodificador (500) se basan en objetos, usan un formato diferente de macrobloque o de bloque, o efectúan operaciones sobre conjuntos de píxeles de tamaño o configuración diferentes a los bloques de 8x8 y a los macrobloques de 16x16.
Dependiendo de la implementación y del tipo de compresión deseado, los módulos del codificador o decodificador pueden ser añadidos, omitidos, divididos en múltiples módulos, combinados con otros módulos, y/o sustituidos por módulos similares. En realizaciones alternativas, unos codificadores o decodificadores con diferentes módulos y/o otras configuraciones de módulos efectúan una o más de las técnicas descritas.
A. Codificador de vídeo
La Figura 4 es un diagrama de bloques de un sistema general codificador (400) de vídeo. El sistema codificador (400) recibe una secuencia de imágenes de vídeo que incluye una imagen actual (405) y produce información de vídeo comprimida (495) como salida. Las realizaciones particulares de codificadores de vídeo usan típicamente una variación o versión ampliada del codificador (400) generalizado.
El sistema codificador (400) comprime imágenes predichas e imágenes clave. Por motivos de presentación, la Figura 4 representa un camino para las imágenes clave a través del sistema codificador (400) y un camino para las imágenes predichas en adelanto. Muchos de los componentes del sistema codificador (400) se usan para comprimir tanto las imágenes clave como las imágenes predichas. Las operaciones exactas efectuadas por esos componentes pueden variar dependiendo del tipo de información que se esté comprimiendo.
Una imagen predicha (también llamada imagen p, imagen b para la predicción bidireccional, o imagen intercodificada) está representada en términos de predicción (o diferencia) con otra u otras imágenes. Un residuo de predicción es la diferencia entre lo que se predijo y la imagen original. Por el contrario, una imagen clave (también llamada imagen i, o imagen intracodificada) es comprimida sin referencia a otras imágenes.
Si la imagen actual (405) es una imagen predicha en adelanto, un estimador de movimiento (410) estima el movimiento de los macrobloques u otros conjuntos de píxeles de la imagen actual (405) con respecto a un plano de referencia, que es la imagen anterior reconstruida (425) almacenada en el almacén (420) de imágenes. En realizaciones alternativas, la imagen de referencia es una imagen posterior, o la imagen actual se predice bidireccionalmente. El estimador de movimiento (410) emite como información lateral una información de movimiento (415) tal como unos vectores de movimiento. Un compensador de movimiento (430) aplica la información de movimiento (415) a la imagen anterior reconstruida (425) para formar una imagen actual compensada en movimiento (435). No obstante, la predicción es raramente perfecta, y la diferencia entre la imagen actual compensada en movimiento (435) y la imagen actual (405) es el residuo de predicción (445). Alternativamente, un estimador de movimiento y un compensador de movimiento aplican otro tipo de estimación/compensación de movimiento.
Un transformador de frecuencia (460) convierte la información de vídeo de dominio espacial en datos de dominio frecuencial (es decir, espectral). Para imágenes de vídeo basadas en bloques, el transformador de frecuencia (460) aplica una transformada discreta del coseno ["DCT"] o una variante de DCT a los bloques de datos del residuo de predicción del movimiento, produciendo bloques de coeficientes de DCT. Alternativamente, el transformador de frecuencia (460) aplica otra transformada convencional de frecuencia, tal como una transformada de Fourier, o utiliza el análisis de Wavelet o de sub-banda. En algunas realizaciones, el transformador de frecuencia (460) aplica una transformada de la frecuencia a bloques de residuos de predicción espacial en imágenes clave. El transformador de frecuencia (460) puede aplicar transformadas de frecuencia de 8x8, 8x4, 4x8, o de otro tamaño.
Un cuantificador (470) cuantifica entonces los bloques de coeficientes de datos espectrales. El cuantificador aplica una cuantificación escalar uniforme a los datos espectrales con un intervalo que varía entre una y otra imagen, o según otro modo. Alternativamente, el cuantificador aplica otro tipo de cuantificación a los coeficientes de datos espectrales, por ejemplo, una cuantificación no uniforme, vectorial, o no adaptativa, o cuantifica directamente los datos del dominio espacial en un sistema codificador que no use transformaciones de frecuencia. Además de la cuantificación adaptativa, el codificador (400) puede utilizar el descarte de imágenes, el filtrado adaptativo, u otras técnicas de control de la tasa.
Cuando se necesita una imagen actual reconstruida para la subsiguiente estimación/compensación de movimiento, un cuantificador inverso (476) efectúa una cuantificación inversa sobre los coeficientes de los datos espectrales cuantificados. A continuación un transformador de frecuencia inverso (466) efectúa la inversa de las operaciones del transformador de frecuencia (460), produciendo un residuo de predicción reconstruido (para una imagen predicha) o una imagen clave reconstruida. Si la imagen actual (405) era una imagen clave, se toma la imagen clave reconstruida como imagen actual reconstruida (no representada). Si la imagen actual (405) era una imagen predicha, se añade el residuo de predicción reconstruido a la imagen actual compensada en movimiento (435) para formar la imagen actual reconstruida. El almacén (420) de imágenes almacena la imagen actual reconstruida para utilizarla en la predicción de la siguiente imagen. En algunas realizaciones, el codificador aplica un filtro de desbloqueo a la imagen reconstruida para suavizar adaptativamente las discontinuidades de los bloques de la imagen.
El codificador entrópico (480) comprime la salida del cuantificador (470) así como cierta información lateral (por ejemplo, la información de movimiento (415), el intervalo de cuantificación (step size)). Las técnicas típicas de codificación entrópica incluyen codificación aritmética, codificación diferencial, codificación Huffman, codificación por longitud de serie (Run Length Encoding), codificación LZ, codificación tipo diccionario, y combinaciones de las anteriores. El codificador entrópico (480) utiliza típicamente diferentes técnicas de codificación para diferentes clases de información (por ejemplo, coeficientes DC, coeficientes AC, diferentes clases de información lateral), y puede elegir entre múltiples tablas de códigos dentro de una técnica de codificación particular.
El codificador entrópico (480) pone la información de vídeo comprimida (495) en el búfer (490). Se realimenta un indicador del nivel del búfer hacia los módulos adaptativos de la tasa de bits. La información de vídeo comprimida (495) es extraída del búfer (490) con una tasa de bits constante o relativamente constante y almacenada para su posterior canalización con esa tasa de bits. Alternativamente, el sistema codificador (400) canaliza la información de vídeo comprimida inmediatamente después de la compresión.
Antes o después del búfer (490), la información de vídeo comprimida (495) puede ser sometida a una codificación de canal para su transmisión por la red. La codificación de canal puede aplicar sobre la información de vídeo comprimida (495) una detección de errores y unos datos de corrección.
B. Decodificador de vídeo
La Figura 5 es un diagrama de bloques de un sistema general decodificador (500) de vídeo. El sistema decodificador (500) recibe la información (595) de una secuencia comprimida de imágenes de vídeo y produce una salida que incluye una imagen reconstruida (505). Las realizaciones particulares de decodificadores de vídeo usan típicamente una variación o versión ampliada del decodificador (500) generalizado.
El sistema decodificador (500) descomprime imágenes predichas e imágenes clave. Por motivos de presentación, la Figura 5 representa un camino para las imágenes clave a través del sistema decodificador (500) y un camino para las imágenes predichas en adelanto. Muchos de los componentes del sistema decodificador (500) se usan para descomprimir tanto las imágenes clave como las imágenes predichas. Las operaciones exactas efectuadas por esos componentes pueden variar dependiendo del tipo de información que se esté comprimiendo.
Un búfer (590) recibe la información (595) de la secuencia de vídeo comprimida y deja disponible para el codificador entrópico (580) la información recibida. El búfer (590) recibe típicamente la información a una velocidad bastante constante a lo largo del tiempo, e incluye un búfer con variación de retardo (jitter buffer) para suavizar las variaciones a corto plazo en el ancho de banda o en la transmisión. El búfer (590) puede incluir también un búfer de reproducción y otros búfers. Alternativamente, el búfer (590) recibe la información a una velocidad variable. Antes o después del búfer (590), la información de vídeo comprimida puede ser sometida a una decodificación de canal y procesada para detectar y corregir errores.
El codificador entrópico (580) decodifica los datos cuantificados codificados en entropía así como cierta información lateral codificada en entropía (por ejemplo, la información de movimiento (515), el intervalo de cuantificación (step size)), típicamente aplicando la inversa de la codificación entrópica efectuada en el codificador. Las técnicas de decodificación entrópica incluyen decodificación aritmética, decodificación diferencial, decodificación Huffman, decodificación por longitud de serie (Run Length Decoding), decodificación LZ, decodificación tipo diccionario, y combinaciones de las anteriores. El codificador entrópico (580) utiliza frecuentemente diferentes técnicas de decodificación para diferentes clases de información (por ejemplo, coeficientes DC, coeficientes AC, diferentes clases de información lateral), y puede elegir entre múltiples tablas de códigos dentro de una técnica de decodificación
particular.
Si la imagen (505) que debe reconstruirse es una imagen predicha en adelanto, un compensador de movimiento (530) aplica la información de movimiento (515) a una imagen de referencia (525) para formar una predicción (535) de la imagen reconstruida (505) que se esté reconstruyendo. Por ejemplo, el compensador de movimiento (530) usa un vector de movimiento de macrobloque para hallar un macrobloque en la imagen de referencia (525). Un almacén (520) de imágenes almacena las imágenes reconstruidas anteriores para usarlas como imágenes de referencia. Alternativamente, un estimador de movimiento aplica otro tipo de compensación de movimiento. La predicción hecha por el compensador de movimiento es raramente perfecta, por lo que el decodificador (500) reconstruye también los residuos de predicción.
Cuando el decodificador necesita una imagen reconstruida para la subsiguiente compensación de movimiento, el almacén (520) almacena la imagen reconstruida para utilizarla en la predicción de la siguiente imagen. En algunas realizaciones, el codificador aplica un filtro de desbloqueo a la imagen reconstruida para suavizar adaptativamente las discontinuidades de los bloques de la imagen.
Un cuantificador inverso (570) cuantifica inversamente los datos decodificados en entropía. En general, el cuantificador inverso aplica una cuantificación escalar uniforme e inversa sobre los datos decodificados en entropía con un intervalo que varía entre una y otra imagen o de algún otro modo. Alternativamente, el cuantificador inverso aplica sobre los datos otro tipo de cuantificación inversa s, por ejemplo, una cuantificación no uniforme, vectorial, o no adaptativa, o directamente cuantifica inversamente los datos del dominio espacial en un sistema decodificador que no use transformaciones de frecuencia inversas.
Un transformador de frecuencia inverso (560) convierte los datos de dominio frecuencial, cuantificados, en información de vídeo de dominio espacial. Para imágenes de vídeo basadas en bloques, el transformador de frecuencia inverso (560) aplica una DCT inversa ["IDCT"] o una variante de IDCT sobre los bloques de coeficientes de DCT, produciendo datos del residuo de predicción del movimiento. Alternativamente, el transformador de frecuencia (560) aplica otra transformada de frecuencia inversa convencional, tal como una transformada de Fourier, o utiliza una síntesis de Wavelet o de sub-banda. En algunas realizaciones, el transformador de frecuencia inverso (560) aplica una transformada de frecuencia inversa sobre bloques de residuales de predicción espacial en imágenes clave. El transformador de frecuencia inverso (560) puede aplicar transformadas de frecuencia inversas de 8x8, 8x4, 4x8, o de otro tamaño.
III. Estimación y compensación de movimiento
La codificación temporal (inter-imagen) explota las redundancias temporales entre imágenes para realizar la compresión. Las reducciones de la redundancia temporal utilizan las imágenes codificadas previamente como predictores para codificar la imagen actual. En las realizaciones que se describen a continuación, un codificador de vídeo explota las redundancias temporales de las secuencias de vídeo típicas con objeto de codificar la información usando un menor número de bits. El codificador de vídeo usa la estimación del movimiento para parametrizar el movimiento de un bloque, un macrobloque, u otro conjunto de píxeles de una imagen predicha con relación a una imagen de referencia (por ejemplo, una imagen anterior previamente codificada). El codificador de vídeo (así como un correspondiente decodificador) usa la compensación del movimiento para reconstruir la imagen predicha utilizando la información de movimiento y la imagen de referencia.
La compensación de movimiento es el proceso de generar una predicción para una imagen de vídeo (es decir, la imagen predicha) desplazando la imagen de referencia. Según se indicó anteriormente, la predicción se hace para un bloque, un macrobloque, u otro conjunto de datos procedentes de la imagen de referencia. Además, el desplazamiento es típicamente rectilíneo y constante sobre la totalidad de la baldosa que se esté prediciendo. Tal desplazamiento está definido por un vector de movimiento con dos componentes correspondientes al desplazamiento en las direcciones X e Y. Los componentes X (horizontal) e Y (vertical) del vector de movimiento representan el desplazamiento entre la baldosa que se está prediciendo actualmente y la correspondiente localización en la imagen de referencia. Los valores positivos representan localizaciones que se encuentran por debajo y a la derecha de la localización actual. Los valores negativos representan localizaciones que se encuentran por encima y a la izquierda de la localización actual.
En una implementación, un bloque es una baldosa de 8x8 píxeles, un macrobloque es una baldosa de 16x16 píxeles, y los vectores de movimiento están definidos con una precisión de un cuarto de píxel. En otras implementaciones, el codificador y el decodificador aplican una o más de las técnicas descritas a baldosas de diferente tamaño o a baldosas de tamaño arbitrariamente variable, con diferente resolución o vectores de movimiento arbitrariamente variables, y/o usando una información de movimiento diferente a los vectores de movimiento.
Los componentes de los vectores de movimiento se especifican normalmente en términos de desplazamiento de píxeles, a menudo con una precisión a nivel de subpíxel. Los desplazamientos subpíxel se efectúan filtrando la imagen de referencia mediante unos filtros de compensación del movimiento adecuadamente definidos. En el caso de la compensación del movimiento subpíxel rectilíneo, los componentes X e Y se representan como números de coma fija. La parte entera de estos números se denomina desplazamiento de píxel completo, y la parte fraccional se denomina desplazamiento subpíxel. Cuando el desplazamiento subpíxel es nulo, el movimiento es un número entero de píxeles. La mayoría de las veces, esto se implementa como una copia de un bloque que se extrae de la imagen de referencia para generar el predictor (aunque, en teoría, podría aplicarse potencialmente alguna forma de filtrado). Por otra parte, cuando el desplazamiento subpíxel no es nulo, el predictor se genera aplicando sobre las localizaciones de píxel entero de la imagen de referencia uno o más filtros correspondientes al desplazamiento subpíxel. Por lo tanto, el filtro de compensación del movimiento viene determinado por el desplazamiento subpíxel.
Para implementar los desplazamientos subpíxel como operaciones de filtrado, los filtros de compensación de movimiento interpolan los puntos de datos en las localizaciones de fracciones de píxel en base a valores de referencia en localizaciones de píxel entero. En general, la calidad de la interpolación aumenta con la ayuda del filtro. Algunas realizaciones usan filtros separables de 2 vías y 4 vías (en cada dirección), que corresponden a interpolaciones bilineales y bicúbicas.
En algunas realizaciones, los filtros de compensación de movimiento utilizan aritmética entera y división implementada por desplazamiento de un bit. El parámetro R de control de redondeo toma el valor 0 ó 1 y determina la dirección del redondeo para esa división. Este parámetro de control de redondeo puede fijarse con una constante, señalada externamente, o puede derivarse implícitamente a partir de una información codificada anterior.
La Figura 6 representa unas localizaciones de píxel entero y de subpíxel en una imagen de referencia (600) usadas en ciertas realizaciones durante la estimación y compensación del movimiento subpíxel. A intervalos de un cuarto de píxel en cada dirección, la imagen de referencia (600) incluye unas localizaciones subpíxel en las cuales un codificador o decodificador puede interpolar valores de píxel para un desplazamiento particular. Las posiciones enteras a-p de la imagen de referencia (600) aparecen como círculos sombreados en la Figura 6, mientras que las posiciones de un cuarto de píxel y de medio píxel interpuestas entre las localizaciones enteras están representadas por círculos sin sombrear. Las localizaciones P_{0} a P_{8} muestran nueve posiciones subpíxel representativas, según se describe en la Tabla 1.
TABLA 1 Posiciones subpíxel representativas
Posición Descripción
P_{0} Un cuarto de píxel horizontal, un píxel vertical
P_{1} Medio píxel horizontal, un píxel vertical
P_{2} Un píxel horizontal, un cuarto de píxel vertical
P_{3} Un cuarto de píxel horizontal, un cuarto de píxel vertical
P_{4} Medio píxel horizontal, un cuarto de píxel vertical
P_{5} Un píxel horizontal, medio píxel vertical
P_{6} Un cuarto de píxel horizontal, medio píxel vertical
P_{7} Medio píxel horizontal, medio píxel vertical
P_{8} Un píxel horizontal, tres cuartos de píxel vertical
La posición de tres cuartos de píxel ejemplarizada en P_{8} puede considerarse un caso especial de la posición de un cuarto de píxel; se trata de un desplazamiento de un cuarto de píxel a partir de una localización de un píxel completo. Son posibles otras posiciones de tres cuartos de píxel, pero no se han representado. Las posiciones subpíxel P_{0} a P_{8} están citadas en descripciones posteriores de filtros de interpolación. En realizaciones alternativas, el codificador y el decodificador interpolan valores en posiciones subpíxel adicionales o diferentes, por ejemplo aquellas que estén situadas en un intervalo distinto a un cuarto de píxel en cada dirección.
A. Filtros de interpolación bicúbica aproximada
Para la interpolación subpíxel, en algunas realizaciones, un codificador y decodificador de vídeo utiliza filtros lineales/bilineales y/o filtros cúbicos/bicúbicos que se definen como sigue.
Un interpolador lineal es un polinomio lineal, o de primer orden, en una dimensión, que utiliza valores conocidos en los dos puntos de la celosía más próximos al punto que se esté interpolando. El valor de la función lineal en el punto que se esté interpolando es la interpolación lineal. Los multiplicadores del polinomio lineal se calculan resolviendo un sistema lineal de ecuaciones que determina los coeficientes del filtro lineal. Un filtro interpolador lineal está definido por dos vías de filtro. Un interpolador bilineal es un interpolador lineal separable en dos dimensiones.
Un interpolador cúbico es un polinomio cúbico, o de tercer orden, en una dimensión, que utiliza valores conocidos en los cuatro puntos de la celosía más próximos al punto que se esté interpolando. El valor de la función cúbica en el punto que se esté interpolando es la interpolación cúbica. Los multiplicadores del polinomio cúbico se calculan resolviendo un sistema de ecuaciones que determina los coeficientes del filtro cúbico. Un filtro interpolador cúbico está definido por cuatro vías de filtro. Un interpolador bicúbico es un interpolador cúbico separable en dos dimensiones.
Los términos lineal y bilineal se usan típicamente de modo intercambiable en los campos de la compresión y la descompresión de vídeo. En una interpolación bidimensional normal, una operación de interpolación efectuada en una dimensión es replicada en la otra dimensión, y por lo tanto cada etapa de filtrado es denominada filtrado bilineal. Los términos cúbico y bicúbico son igualmente intercambiables.
En este documento, los términos lineal y bilineal se usan de modo intercambiable para describir el filtrado en una, dos o más dimensiones. Similarmente, los términos cúbico y bicúbico se usan de modo intercambiable para describir el filtrado en una, dos o más dimensiones. Por ejemplo, las ecuaciones (11) a (13) definen tipos de filtros cúbicos, pero están referidos como filtros bicúbicos porque, en la aplicación común de interpolación en dos etapas para las imágenes de vídeo de referencia, los filtros se utilizan en operaciones replicadas para ambas dimensiones de la interpolación en dos etapas. Más generalmente, la dimensionalidad del filtrado es conocida por el contexto.
En algunas realizaciones, un codificador y decodificador utiliza filtros bicúbicos aproximados para interpolar valores en localizaciones subpíxel. Por ejemplo, el codificador y decodificador usa los siguientes filtros (de los cuales F_{1} es un filtro bicúbico, y F_{2} y F_{3} son filtros bicúbicos aproximados) en las posibles localizaciones desplazadas de una imagen de referencia tal como la representada en la Figura 6.
desplazamiento de medio píxel F_{1}: [-1 9 9 -1]
(11),
desplazamiento de un cuarto de píxel F_{2}: [-4 53 18 -3]
(12),
y
desplazamiento de tres cuartos de píxel F_{3}: [-3 18 53 -4]
(13).
En la práctica, los filtros también incluyen un desplazamiento a la derecha (por ejemplo, 4 bits para F_{1}, 6 bits para F_{2} y F_{3}) para compensar la expansión potencialmente introducida por los coeficientes del filtro. El operador >> es un operador de desplazamiento a la derecha. Una operación de desplazamiento a la derecha desplaza hacia la derecha los bits de un número binario, descartando el bit menos significativo y añadiendo un 0 como bit más significativo. La operación resulta en una simple división por 2 a la potencia del número de bits desplazados (por ejemplo, un desplazamiento de 3 a la derecha resulta en una división por 2^{3} = 8), descartándose el resto.
Los coeficientes de filtrado para F_{2} y F_{3} se basan aproximadamente en el verdadero interpolador bicúbico de un cuarto de píxel, que es un filtro de cuatro vías. La siguiente ecuación muestra el resultado de aplicar el verdadero filtro bicúbico de un cuarto de píxel para la localización P_{0} :
(14)(- 7e + 105f + 35g - 5h) >> 7
Los valores de los coeficientes suman 128, y el producto del filtrado es desplazado 7 bits a la derecha. Los filtros bicúbicos aproximados F_{2} y F_{3} se aproximan al filtro bicúbico puro en términos de prestaciones, pero tienen una resolución más baja, según se muestra en la siguiente ecuación.
(- 7e + 105f + 35g - 5h) >> 7
\hskip1.2cm
= (- 3,5e + 52,5f + 17,5g - 2,5h) >> 6
(15)\approx (- 4e + 53f + 18g - 3h) >> 6
En muchos casos, el uso de un filtro bicúbico puro resulta en una pérdida de bits de precisión en la interpolación multietapa, por lo que el factor de normalización para el filtro bicúbico aproximado se reduce como mínimo a la mitad (es decir, el desplazamiento a la derecha disminuye en 1 bit o más). Los coeficientes de filtro elegidos para el filtro bicúbico aproximado de la ecuación (15) están basados en redondear el filtro bicúbico verdadero, después de haber tenido en cuenta el comportamiento del dominio frecuencial (por ejemplo, para preservar la información de alta frecuencia) y el comportamiento empírico (por ejemplo, para alcanzar la menor distorsión dado un cierto bitrato). Específicamente, los filtros F_{2} y F_{3} incluyen aún cuatro coeficientes de filtrado. (En general, el uso de menos coeficientes de filtrado en un filtro acelera la implementación, pero deben usarse suficientes coeficientes de filtrado para solucionar el ruido de un píxel adyacente). Los valores del filtro se ajustan para que sumen 64, lo cual facilita la implementación usando aritmética de 16 bits y a la vez lo aproxima al filtro bicúbico de mayor resolución. Un filtro que funciona sustancialmente como un filtro bicúbico puro, pero tiene menos soporte y/o menor resolución, se denomina filtro bicúbico "aproximado". Un modo de medir objetivamente si el filtro funciona sustancialmente como un filtro bicúbico puro consiste en comprobar si el filtro bicúbico aproximado correlaciona bien (es decir, dentro de un umbral definido) con el filtro bicúbico puro. En una implementación, la correlación se mide por el coseno del ángulo formado por los vectores para los filtros (que deseablemente será lo más próximo a 1 que sea posible), y el umbral es 0,95. También pueden usarse otras medidas objetivas o subjetivas, otras medidas por correlación, y/u otros umbrales. Por ejemplo, pueden seleccionarse los coeficientes de filtrado del filtro bicúbico aproximado de tal modo que su suma tenga algún otro valor que facilite una transformación de Fourier eficiente u otra manipulación matemática.
Según se describe con mayor detalle a continuación, la Figura 7 representa generalmente las localizaciones de píxel entero con los valores de píxel que se utilizan para calcular píxeles interpolados en cada uno de los casos correspondientes a los filtros bicúbicos tratados en las ecuaciones (11)-(13). P representa la posición subpíxel para la cual se calcula un valor de píxel. I_{1}, I_{2}, I_{3} e I_{4} representan posiciones de píxel entero en la dimensión de la interpolación. La Figura 7 muestra una interpolación horizontal, pero las mismas operaciones y colocación de posiciones son aplicables a la interpolación vertical.
En realizaciones alternativas, un codificador y un decodificador usan filtros de interpolación distintos y/o adicionales. Por ejemplo, el codificador y el decodificador usan un filtro bilineal (es decir, de 2 vías) para interpolar el valor. Por ejemplo, con referencia a las posiciones subpíxel de la Figura 6, los filtros de interpolación usados para determinar los valores de P_{1}, P_{5} y P_{7} pueden ser los filtros ilustrados en las ecuaciones (1)-(3).
B. Interpolación unidimensional
En diversas posiciones subpíxel, el codificador y el decodificador de ciertas realizaciones calculan un valor interpolado solamente en una dimensión. Según se ilustra en la Figura 7, las siguientes ecuaciones muestran el funcionamiento de los filtros F_{1} (desplazamiento de medio píxel), F_{2} (desplazamiento de un cuarto de píxel), y F_{3} (desplazamiento de tres cuartos de píxel) cuando interpolan entre píxeles enteros:
(16),F_{1}:(- 1I_{1} + 9I_{2} + 9I_{3} - 1I_{4} + 8 - r) >> 4
(17),
\hskip0.4cm
F_{2}:(- 4I_{1} + 53I_{2} + 18I_{3} - 3I_{4} + 32 - r) >> 6
y
(18).
\hskip0.4cm
F_{3}:(- 3I_{1} + 18I_{2} + 53I_{3} - 4I_{4} + 32 - r) >> 6
en donde el valor r controla el redondeo. El valor r depende del parámetro binario R de control de redondeo a nivel de la imagen y de la dirección de interpolación, según sigue:
100
Para mejor ilustrar la interpolación unidimensional, en la Figura 6, P_{1} y P_{5} representan posiciones de medio píxel en la imagen de referencia (600) que requieren interpolación en una dimensión únicamente (es decir, la dirección horizontal para P_{1} y la dirección vertical para P_{5}). Las siguientes ecuaciones muestran el funcionamiento del filtro F_{1} (desplazamiento de medio píxel) cuando interpola entre píxeles enteros para P_{1} y P_{5}:
(20),P_{1} = (- 1e + 9f + 9g - 1h + 8 - r) >> 4
y
(21).P_{5} = (- 1b + 9f + 9j - 1n + 8 - r) >> 4
Similarmente, en la Figura 6, P_{0} y P_{2} representan posiciones de un cuarto de píxel en la imagen de referencia (600) que requieren interpolación en una dimensión únicamente (es decir, la dirección horizontal para P_{1} y la dirección vertical para P_{5}). Las siguientes ecuaciones muestran el funcionamiento del filtro F_{2} (desplazamiento de un cuarto de píxel) cuando interpola entre píxeles enteros para P_{0} y P_{2}:
(22),P_{0} = (- 4e + 53f + 18g - 3h + 32 - r) >> 6
y
(23).P_{2} = (- 4b + 53f + 18j - 3n + 32 - r) >> 6
El filtro bicúbico aproximado F_{2} de un cuarto de píxel también puede utilizarse, con una pequeña modificación, para calcular posiciones de tres cuartos de píxel. Por ejemplo, la siguiente ecuación muestra el funcionamiento del filtro F_{3} (desplazamiento de tres cuartos de píxel) cuando interpola entre píxeles enteros para P_{8}:
(24).P_{8} = (- 3b + 18f + 53j - 4n + 32 - r) >> 6
\newpage
Alternativamente, un codificador y un decodificador usan filtros distintos y/o adicionales para posiciones desplazadas medio píxel, un cuarto de píxel o tres cuartos de píxel en una dimensión. Por ejemplo, el codificador y el decodificador usan filtros con más o menos coeficientes de filtrado, diferentes coeficientes de filtrado, diferente redondeo, o sin redondeo.
C. Interpolación multidimensional
En algunas realizaciones se efectúa la interpolación en posiciones subpíxel que están separadas en dos dimensiones. En la Figura 6, por ejemplo, P_{3}, P_{4}, P_{6} y P_{7} son posiciones en las cuales la interpolación se produce en ambas dimensiones horizontal y vertical.
En una realización, que corresponde al procedimiento de interpolación (800) representado en la Figura 8, dos localizaciones subpíxel bidimensionales son interpoladas primero a lo largo de la dirección vertical y después a lo largo de la dirección horizontal. Según se describe con mayor detalle más adelante, la interpolación se efectúa usando uno o más filtros F_{1}, F_{2}, o F_{3} especificados anteriormente en las ecuaciones (16) a (18). En la realización ilustrada en la Figura 8, el redondeo se aplica después del filtrado vertical y del filtrado horizontal. El desplazamiento de bits en la regla del redondeo asegura el mantenimiento de la precisión de los resultados intermedios que permite la aritmética de 16 bits.
En la Figura 8, primero se efectúa el filtrado vertical, seguido por el filtrado horizontal. En algunas arquitecturas se mejoran las prestaciones si se empieza por el filtrado vertical. En otras arquitecturas el orden del filtrado es diferente. Por ejemplo, se efectúa la interpolación en dirección horizontal antes que en dirección vertical. O se usan otras combinaciones diversas de filtros de interpolación (por ejemplo, filtros horizontales múltiples y/o filtros verticales múltiples, etc.).
Los valores de píxel de entrada y de salida (811,838) tienen una profundidad de 8 bits, y un margen dinámico de 256 valores. Los valores intermedios (820) tienen una profundidad de 16 bits para un margen dinámico de 65.536 valores. En realizaciones alternativas, los valores de entrada, de salida e intermedios tienen diferente profundidad de bits.
En una primera etapa (810), se aplica (812) un filtro vertical adecuado (F_{v}) a un o unos valores de píxel de entrada de 8 bits (811). El filtro vertical aplicado dependerá de que la posición subpíxel seleccionada sea desplazada un cuarto de píxel, medio píxel o tres cuartos de píxel, y puede adoptar la forma de uno de los filtros bicúbicos descritos anteriormente.
La regla del redondeo después del filtrado vertical se define como:
(25),(S + R_{v}) >> desplazamientoV
en donde S es el resultado filtrado verticalmente y R_{v} = 2^{desplazamientoV-1} - 1 + R.
R es un valor de control de redondeo que alterna entre 0 y 1 entre una y otra imagen. Así pues, la regla del redondeo incluye redondear con un control de redondeo (813) alternado entre etapas y un desplazamiento de bits
(814).
El desplazamiento a la derecha provoca potencialmente una pérdida de resolución, por lo que se aplaza al menos una parte del desplazamiento hasta unas etapas de interpolación posteriores. El valor del desplazamiento a la derecha, desplazamientoV, depende de la posición subpíxel que se esté interpolando. Específicamente, desplazamientoV = {5,3,3,1} para P_{3}, P_{4}, P_{6} y P_{7}. La magnitud del desplazamiento es inferior a la requerida para compensar la expansión debida al valor de los coeficientes de filtrado de la primera etapa (por ejemplo, el desplazamiento para el filtro bicúbico aproximado es inferior a 6 bits), pero suficiente para garantizar que los resultados intermedios del subsiguiente filtrado se mantengan dentro del margen dinámico de los valores intermedios (por ejemplo, 65.536 valores para las palabras de 16 bits). Comparado con el desplazamiento completo, este desplazamiento acortado mantiene la precisión de los valores de píxel intermedios (820) después de la primera etapa (810) de interpolación. Los valores de píxel intermedios (820) tienen un margen dinámico de y bits, en donde y es mayor de 8 bits. El grado de desplazamiento efectuado en la primera etapa puede depender de la profundidad de bits disponible y de los coeficientes de los filtros de interpolación. Por ejemplo, en la implementación ejemplar que se describe, los valores intermedios están limitados a un límite de palabra de 16 bits.
Considérese el punto P_{3} de la Figura 6 y unos valores de entrada dentro del margen de 0…255 (8 bits). El margen de los valores intermedios procedentes de aplicar los coeficientes del filtro bicúbico aproximado [-4 53 18 -3] a los valores de entrada de 8 bits es de -1.785 a 18.105 (unos 14,3 bits, que en la implementación se redondean a 15 bits) debido al factor de expansión de los coeficientes de filtrado. El subsiguiente filtrado horizontal, aplicando a los valores intermedios los coeficientes del filtro bicúbico aproximado (con una expansión adicional), puede producir unos valores que estén fuera del margen dinámico de 16 bits, provocando un subflujo o un sobreflujo. Así pues, los valores intermedios son desplazados lo suficiente para garantizar que el filtrado horizontal subsiguiente produzca un valor que esté dentro del margen dinámico de 16 bits. Para P_{3}, el primer grado de desplazamiento es de cinco bits, y entonces el margen dinámico de los valores intermedios desplazados es de -55 a 565 (aproximadamente 9,3 bits, que en la implementación se redondean a 10 bits). El margen de la salida procedente de aplicar los coeficientes del filtro bicúbico aproximado a los valores intermedios desplazados es entonces de -7.860 a 40.500, que tiene un margen dinámico de menos de 16 bits. Así pues, el desplazamiento acortado se calcula de manera que se utilice totalmente el límite de la palabra de 16 bits, pero garantizando que este no sea excedido durante la segunda etapa (830) de interpolación.
En la segunda etapa (830), se aplica (832) un filtro horizontal adecuado (F_{H}) para interpolar el valor en la posición subpíxel bidimensional a partir de los valores (820) determinados por el filtro vertical. La regla del redondeo después del filtrado horizontal es:
(26).(S + 64 - R) >> 7
en donde S es el resultado filtrado horizontalmente, y R es el valor de control de redondeo que alterna de una a otra imagen. Al igual que la regla de redondeo de la primera etapa, la regla de redondeo de la segunda etapa incluye redondear con un control de redondeo (833) alternado entre etapas y un desplazamiento de bits (834). Considerando el desplazamiento aplazado de la primera etapa, el grado de desplazamiento de la segunda etapa excede típicamente del esperado normalmente para el filtro horizontal seleccionado, y se calcula para que el valor de salida tenga el margen dinámico deseado.
Todos los casos de filtrado bicúbico pueden producir potencialmente un píxel interpolado cuyo valor sea negativo, o cuyo valor sea superior al máximo del margen (por ejemplo, 255 para una salida de 8 bits). En estos casos, con valores de salida de 8 bits, el codificador y el decodificador limitan el valor de salida (836) para que quede dentro del margen aceptado. En particular, se fijan los subflujos a 0 y los sobreflujos a 255. Después del bloqueo se saca un valor interpolado de 8 bits (838).
En la Figura 8, el desplazamiento de la segunda etapa es de 7 bits. Así pues, un valor de salida filtrado que tenga 9 bits queda retenido. Por ejemplo, siguiendo con el ejemplo anterior para P_{3}, el margen del valor de salida filtrado es de -61 a 316, que tiene un margen dinámico de aproximadamente 8,6 bits (que se redondea a 9 en la implementación). Aunque el margen válido de los datos interpolados es de sólo 8 bits, el bit extra de cabecera proporciona la información de sobreflujo y subflujo. En otras palabras, si el bit más significativo (es decir, el bit de "signo") está puesto, existe un subflujo o un sobreflujo. Para saber específicamente cual de los dos se ha producido hay que mirar los 8 bits de "mantisa" restantes.
Las Figuras 9-11 ilustran también la interpolación bidimensional descrita anteriormente e ilustrada en la Figura 8. La Figura 9 muestra la posición subpíxel P_{7} (medio píxel horizontal, medio píxel vertical) de la imagen de referencia (600) de la Figura 6. Para interpolar el valor de P_{7} se utilizan dos filtros de interpolación bicúbicos de medio píxel. En la primera etapa, se calculan los valores intermedios V_{1}-V_{4} a partir de unas posiciones próximas de píxel entero mediante un filtro bicúbico de medio píxel que tiene la forma general:
(27),
\hskip0.7cm
V_{inter} = (- 1x_{1} + 9x_{2} + 9x_{3} - 1x_{4})
Así pues,
(28),V_{1} = (- 1a + 9e + 9i - 1m)
(29),V_{2} = (- 1b + 9f + 9j - 1n)
(30),V_{3} = (- 1c + 9g + 9k - 1o)
y
(31).V_{4} = (- 1d + 9h + 9l - 1p)
Una vez añadido el valor de R_{v} apropiado, se desplazan los resultados un bit a la derecha. En la segunda etapa, los valores intermedios V_{1}-V_{4} son utilizados por un filtro de medio píxel para calcular el valor de píxel en P_{7}. En particular se utiliza un filtro de medio píxel que tiene la forma siguiente:
(32).P_{7} = (- 1V_{1} + 9V_{2} + 9Vx_{3} - 1V_{4})
\newpage
Según se describió anteriormente, el resultado de la segunda etapa es desplazado siete bits a la derecha con el fin de obtener un valor de 9 bits. El valor de 9 bits incluye ocho bits de mantisa y un bit de signo. Después se efectúa cualquier bloqueo necesario para compensar el sobreflujo o el subflujo, y se saca un valor final interpolado de 8 bits.
La Figura 10 muestra la posición subpíxel P_{4} (medio píxel horizontal, un cuarto de píxel vertical) de la imagen de referencia (600) de la Figura 6. Para interpolar el valor de P_{4} se utiliza un filtro de interpolación bicúbico de un cuarto de píxel y un filtro de medio píxel. En la primera etapa se calculan los valores intermedios V_{1}-V_{4}, a partir de unas posiciones próximas de píxel entero, mediante un filtro bicúbico de un cuarto de píxel que tiene la forma general:
(33).V_{inter} = (- 4x_{1} + 53x_{2} + 18x_{3} - 3x_{4})
Este filtro se aplica a los valores de píxel entero de la imagen de referencia (600) de la misma manera descrita anteriormente con respecto al cálculo de P_{7}. Una vez añadido el valor de R_{v} apropiado, los resultados son desplazados tres bits a la derecha. En la segunda etapa, los valores intermedios V_{1}-V_{4} son utilizados por un filtro de medio píxel para calcular el valor de píxel en P_{4}. En particular se utiliza un filtro de medio píxel que tiene la forma siguiente:
(34).P_{4} = (- 1V_{1} + 9V_{2} + 9V_{3} - 1V_{4})
El resultado de la segunda etapa se desplaza siete bits a la derecha con el fin de obtener un valor de 9 bits, se efectúa cualquier bloqueo necesario, y se saca un valor interpolado final de 8 bits.
La Figura 10 muestra también una posición subpíxel P_{6} (un cuarto de píxel horizontal, medio píxel vertical). Para interpolar el valor de P_{6} se utiliza la técnica para interpolar P_{4} con sólo ligeras modificaciones. En la técnica modificada, para determinar los valores intermedios en la primera etapa se utiliza un filtro bicúbico de medio píxel. Las localizaciones de píxel intermedias están representadas en la Figura 10 en V_{5}-V_{8}. Durante la segunda etapa, un filtro bicúbico de un cuarto de píxel utiliza los valores intermedios para calcular el valor de P_{6}. En particular, se usa un filtro bicúbico de un cuarto de píxel que tiene la siguiente forma:
(35).P_{6} = (- 4V_{5} + 53V_{6} + 18V_{7} - 3V_{8})
La magnitud del desplazamiento en la primera y en la segunda etapa es igual que en la técnica para calcular P_{4} (es decir, el desplazamiento en la primera etapa es tres y el desplazamiento en la segunda etapa es siete).
La Figura 11 muestra una posición subpíxel P_{3} (un cuarto de píxel horizontal, un cuarto de píxel vertical) de la imagen de referencia (600) de la Figura 6. Para interpolar el valor de P_{3} se utilizan dos filtros de interpolación bicúbicos de un cuarto de píxel. En la primera etapa se calculan los valores intermedios V_{1}-V_{4} a partir de unas posiciones próximas de píxel entero mediante un filtro bicúbico de un cuarto de píxel que tiene la forma general:
(36).V_{inter} = (- 4x_{1} + 53x_{2} + 18x_{3} - 3x_{4})
Este filtro se aplica a los valores de píxel entero de la imagen de referencia (600) de la misma manera descrita anteriormente con respecto al cálculo de P_{4}. Una vez añadido el valor de R_{v} apropiado, se desplazan los resultados cinco bits a la derecha. En la segunda etapa, los valores intermedios V_{1}-V_{4} son utilizados por un filtro de medio píxel para calcular el valor de píxel en P_{3}. En particular se utiliza un filtro de un cuarto de píxel que tiene la forma
siguiente:
(37).P_{3} = (- 4V_{1} + 53V_{2} + 18V_{3} - 3V_{4})
El resultado de la segunda etapa se desplaza siete bits a la derecha con el fin de obtener un valor de 9 bits, se efectúa cualquier bloqueo necesario, y se saca un valor interpolado final de 8 bits.
Aunque no están representados en la Figura 9-11, también pueden calcularse los valores de las posiciones subpíxel que tengan un desplazamiento de tres cuartos de píxel en una o ambas dimensiones. Para calcular tales posiciones subpíxel, pueden modificarse los métodos descritos anteriormente utilizando los filtros bicúbicos adecuados de tres cuartos de píxel en lugar de los filtros bicúbicos de un cuarto de píxel.
En otras realizaciones se utilizan filtros bilineales o combinaciones de filtros bilineales y bicúbicos para interpolar los valores en las posiciones subpíxel muestreadas. El uso de filtros bilineales reduce generalmente la magnitud del desplazamiento efectuado (después del primer filtrado y en total) porque los coeficientes introducen menos expansión que con los filtros bicúbicos. En una implementación que utiliza filtros bilineales y valores intermedios de 16 bits, por ejemplo, no se efectúa ningún desplazamiento en la primera etapa, maximizando así el uso del límite de la palabra de 16 bits, y se efectúa un desplazamiento a la derecha de 4 bits después de la última etapa. Similarmente, el bloqueo puede ser aplazado hasta la última etapa.
Uno de los principios que subyacen en los métodos descritos anteriormente es el uso de la mayor precisión posible en cada etapa de filtrado, pero manteniéndose dentro de un límite deseado W del "tamaño de palabra". Si el valor de salida tiene un margen dinámico de D bits, y se descartan L bits en la última etapa, la salida de la última etapa de filtrado puede llegar a D+L+1 bits, en donde el último bit es utilizado para señalar los subflujos y sobreflujos. Trabajando hacia atrás, si la última etapa de filtrado resulta en una expansión de k bits, entonces la entrada a la última etapa debería estar dentro de D+L-k. Así pues, para mantener la máxima precisión con una representación de W bits, existe la siguiente relación:
(38).D + L + 1 = W
Además, la entrada a la última etapa deberá ser D + L - k = W - k - 1 bits.
Esta lógica puede ser aplicada recursivamente a la penúltima etapa de filtrado, y así sucesivamente. De hecho, los límites pueden estrecharse usando bits fraccionarios para representar los márgenes distintos de 2^{k} y los factores de expansión.
Las Figuras 12-15 son diagramas que ilustran las diversas técnicas que anteriormente se han descrito combinadas, pero que también son aplicables por separado a la interpolación multietapa. Las Figuras 12-15 no muestran las diversas maneras con que puede usarse la respectiva interpolación multietapa (1200, 1300, 1400, 1500) en conjunción con otras técnicas de interpolación multietapa.
Además, aunque cada una de las Figuras 12-15 muestra dos etapas, las técnicas de interpolación multietapa (1200, 1300, 1400, 1500) ilustradas en las Figuras 12-15 puede incluir más etapas. Más generalmente, las técnicas de interpolación multietapa (1200, 1300, 1400, 1500) pueden ser implementadas con cualquier tipo de filtro separable en múltiples dimensiones, así como con filtros arbitrarios implementados según una estructura en cascada, escalera, o celosía.
Las Figuras 12-15 muestran los valores de entrada, valores de salida y filtros generalizados que se utilizan en la interpolación multietapa. La elección específica de la profundidad de bits para los valores de entrada de la primera etapa, los valores de salida de la última etapa, y los valores intermedios, puede extenderse arbitrariamente de acuerdo con las especificaciones técnicas de una arquitectura o aplicación buscada. Por ejemplo, los valores de entrada pueden ser valores de píxel de 8 bits en posiciones de píxel entero de imágenes de referencia, los valores de salida pueden ser valores de píxel de 8 bits en posiciones subpíxel de imágenes de referencia, y los filtros pueden ser filtros bicúbicos regulares y aproximados (según se describió anteriormente con referencia a las Figuras 6-8). Alternativamente, los valores de entrada y/o los valores de salida tienen un margen dinámico con diferente profundidad de bits, o se utilizan filtros diferentes.
Un componente tal como el codificador o decodificador descrito con referencia a las Figuras 4 y 5, respectivamente, puede efectuar la interpolación multietapa (1200, 1300, 1400, 1500). Alternativamente, otro codificador o decodificador, u otro tipo de componente, puede efectuar la interpolación multietapa (1200, 1300, 1400, 1500).
La Figura 12 muestra un diagrama de interpolación multietapa (1200) con un margen dinámico (en bits) mejorado para los valores interpolados intermedios. En la primera etapa (1210), el componente aplica (1212) un primer filtro F_{1} a uno o más valores de entrada (1211) con margen de x bits, produciendo uno o más valores intermedios (1220) con margen de y bits, en donde y es mayor que x. Por ejemplo, los valores intermedios de y bits son valores de píxel que tienen un margen dinámico de más de 8 bits, y los valores de entrada de x bits tienen un margen dinámico de
8 bits.
En cada una de las cero o más etapas intermedias (1222), que no se muestran con detalle, el componente aplica un filtro a los valores intermedios (1220) con margen y. La salida de las etapas intermedias es uno o más valores intermedios (1229) con margen de z bits, en donde z es mayor que x. (En las Figuras 12-15, si la última etapa es la segunda etapa, los valores intermedios que salen de la primera etapa son los valores intermedios de entrada a la última etapa).
En la última etapa (1230), el componente aplica (1232) un último filtro F_{L} al valor o valores intermedios (1229) con margen de z bits. La salida final es un valor de salida (1234) con margen de x bits. En cada una de las técnicas de interpolación multietapa (1200, 1300, 1400, 1500), si es necesario, el componente repite la interpolación multietapa (1200, 1300, 1400, 1500) para valores de salida adicionales. En la interpolación repetida, el componente puede reutilizar ciertos valore intermedios calculados en las interpolaciones anteriores.
La Figura 13 muestra un diagrama de interpolación multietapa (1300) con bloqueo omitido. Al aplazar el bloqueo, por ejemplo, se acelera el cálculo, puesto que el componente ya no compara cada valor intermedio con los extremos superior e inferior del margen. Al aplazar el bloqueo también se protege la precisión de los valores intermedios.
En la primera etapa (1310), el componente aplica (1312) un primer filtro F_{1} a uno o más valores de entrada (1311) con margen de x bits. Después de la aplicación del primer filtro F_{1} no se efectúa ningún bloqueo. Así pues, el valor o valores intermedios (1320) que salen del primer filtro F_{1} pueden tener un margen dinámico mayor de x bits. Por ejemplo, los valores de entrada son valores de 8 bits, y la salida del primer filtro F_{1} tiene un margen dinámico de 9 o más bits debido al factor de expansión introducido por los coeficientes del primer filtro F_{1.}
En cada una de las cero o más etapas intermedias (1322), que no se muestran con detalle, el componente aplica un filtro al valor o valores intermedios (1320) no bloqueados. También puede omitirse el bloqueo en las cero o más etapas intermedias (1322). Los valores intermedios (1329) que salen de las cero o más etapas intermedias (1322) son introducidos en una última etapa (1330) en la cual el componente aplica (1332) un último filtro F_{L} a los valores (1329). La salida final del último filtro F_{L} se bloquea (1334) y se saca un valor (1336) con un margen de x bits.
La Figura 14 muestra un diagrama de interpolación multietapa (1400) con desplazamiento de bits aplazado. En la primera etapa (1410), el componente aplica (1412) un primer filtro F_{1} a uno o más valores de entrada (1411) con margen de x bits. Después de la aplicación del primer filtro F_{1}, o en conjunción con la misma, se efectúa un desplazamiento acortado (1414). El desplazamiento acortado (1414) es menor que el requerido para garantizar un valor de salida con un margen de 8 bits (en vista del factor de expansión de los coeficientes del primer filtro F_{1}) y por lo tanto menor que el asociado típicamente al primer filtro F_{1}. En consecuencia, el desplazamiento acortado (1414) produce uno o más valores intermedios que tienen un margen dinámico (de y bits) mayor de x bits. Por ejemplo, los valores de entrada tienen un margen dinámico de 8 bits, y los valores intermedios tienen un margen dinámico de más de 8 bits.
En cada una de las cero o más etapas intermedias (1422), que no se muestran con detalle, el componente aplica un filtro al valor o valores intermedios (1420). Uno o más valores intermedios (1429) con un margen dinámico de z bits (superior a x bits) salen de la cero o más etapas intermedias (1422) y, en una última etapa (1430), el componente aplica (1432) un último filtro F_{L} a los valores (1429). La salida final del último filtro F_{L} es desplazada con una magnitud superior a la asociada típicamente al último filtro F_{L}, contrayendo así el margen dinámico del valor de salida (1434) a una profundidad de bits especificada. Por ejemplo, el margen dinámico (en bits) del valor de salida (1434) es igual a x ó x+1. En una implementación, el desplazamiento de la primera etapa y de cualquier etapa intermedia es aplazado lo más posible hasta la última etapa. El grado con que se aplaza el desplazamiento puede depender de la profundidad de bits disponible para los cálculos intermedios y de los factores de expansión de los respectivos filtros.
La Figura 15 muestra una técnica de interpolación multietapa (1500) que utiliza un control de redondeo alternado entre etapas. Las múltiples etapas de la técnica de interpolación (1500) se alternan en el modo de aplicar el control de redondeo para ajustar el redondeo. Esto ayuda a evitar, en ciertas secuencias de vídeo, la acumulación de errores de redondeo de una imagen a otra. Por ejemplo, si una secuencia de vídeo de baja calidad incluye un movimiento gradual en una dimensión (panning) o en dos dimensiones (zooming), la acumulación de errores de redondeo puede resultar en un desvanecimiento gradual del color entre una y otra imagen, lo que puede provocar artefactos perceptibles. El control de redondeo alternado por etapas ayuda a evitar ese desvanecimiento del color.
Un ejemplo numérico puede ayudar a ilustrar el redondeo sobre el cual se aplica el control de redondeo alternado por etapas antes de hacer el desplazamiento de bits a la derecha. El desplazamiento de bits a la derecha produce esencialmente una división y un truncado del valor desplazado a la derecha. El añadir un valor de redondeo antes del desplazamiento hace que el valor desplazado sea redondeado hacia arriba o hacia abajo (al valor entero más cercano), en lugar de ser redondeado siempre hacia abajo (truncado). Al usar el control de redondeo se cambia la dirección del redondeo (hacia arriba o hacia abajo) para un valor marginal. Por ejemplo, supóngase que en cada una de las múltiples etapas se ajusta la salida del filtrado sumando ½ "divisor" de un desplazamiento a la derecha antes del desplazamiento a la derecha (por ejemplo, sumando 2^{4} = 16 antes de un desplazamiento de 5 bits a la derecha, sumando 2^{6} = 64 antes de un desplazamiento de 7 bits a la derecha). El efecto de esta suma es el redondeo hacia arriba (al entero superior inmediato) de los valores que tengan un componente fraccional igual o superior a 0,5 (después de una división correspondiente al desplazamiento de bits). De otro modo, esos valores serían truncados (al entero inferior inmediato) por el desplazamiento a la derecha. Independientemente de la suma, los valores que tengan un componente fraccional inferior a 0,5 (después de una división correspondiente al desplazamiento de bits) siguen siendo truncados (al entero inferior inmediato) por el desplazamiento a la derecha. A continuación el control de redondeo cambia la dirección del redondeo (hacia arriba o hacia abajo) para ciertos valores marginales. Por ejemplo, en cada una de las múltiples etapas se vuelve a ajustar la salida del filtrado restando 0 ó 1 (el valor del control de redondeo alternado) antes del desplazamiento a la derecha (por ejemplo, 2^{desplazamientoV-1} ó 2^{desplazamientoV-1} -1). El efecto de este ajuste del control de redondeo es cambiar la dirección del redondeo para los valores que tengan un componente fraccional de 0,5 (después de una división correspondiente al desplazamiento de bits). Cuando se resta un 1, tales valores marginales son redondeados hacia abajo. En caso contrario, tales valores marginales son redondeados hacia arriba.
Cada una de las múltiples etapas utiliza un valor de control de redondeo que alterna entre 0 y 1 antes de la interpolación multietapa, de manera que las distintas etapas se alternan en el modo de aplicar el valor de control de redondeo. Alternativamente, la técnica de interpolación multietapa (1500) utiliza un valor de control de redondeo que alterna por si mismo entre etapa y etapa.
En la primera etapa (1510) de la Figura 15, el componente aplica (1512) un primer filtro F_{1} a uno o más valores de entrada (1511) con margen de x bits. Después de la aplicación del primer filtro F_{1}, o en conjunción con la misma, se efectúa un redondeo (1514) sobre la salida del primer filtro F_{1}. El redondeo (1514) se ajusta alternando el control de redondeo entre las etapas. Por ejemplo, en la primera etapa (1510), el control de redondeo alternado por etapas hace que el valor de salida sea redondeado hacia arriba al entero más cercano si el valor de salida es un valor marginal (cuyo valor de salida, de no ser así, sería redondeado hacia abajo). De la primera etapa salen uno o más valores intermedios redondeados (1520) que entran en una segunda etapa (1530).
En la segunda etapa (1530), el componente aplica (1532) un segundo filtro F_{2} al valor o valores intermedios (1520). Se efectúa un redondeo (1534) sobre la salida del segundo filtro F_{2}. Después de la aplicación del segundo filtro F_{2}, o en conjunción con la misma, se efectúa un redondeo (1534) con control de redondeo alternado entre etapas, cuyo control de redondeo provoca el redondeo de los valores marginales en la dirección opuesta a la primera etapa. Por ejemplo, en la segunda etapa (1530), el control de redondeo alternado por etapas hace que el valor de salida sea redondeado hacia abajo al entero más cercano si el valor de salida es el valor marginal. De la segunda etapa salen uno o más valores intermedios (1536) que pueden usarse en cero o más etapas adicionales (1540). Las cero o más etapas adicionales (1540) pueden incluir también el control de redondeo alternado entre etapas.
El control de redondeo alternado entre etapas no se limita a su aplicación en etapas consecutivas, sino que puede aplicarse en otras diversas combinaciones de etapas. Además, la primera dirección puede depender de un número de parámetros. Por ejemplo, en un codificador y decodificador de vídeo, la primera dirección puede depender del control de redondeo usado en la imagen anterior, o del tipo de imagen que esté siendo interpolada (por ejemplo, una imagen I, una imagen P, o una imagen B). En otras realizaciones, la primera dirección puede fijarse como una constante, derivarse implícitamente de una información causal (por ejemplo, de una información codificada/decodificada en el pasado, derivarse mediante el uso de un generador pseudoaleatorio, o señalarse como parte de la corriente de bits. El control de redondeo alternado entre etapas puede aplicarse en la interpolación multietapa mediante el uso de cualquiera de diversos filtros de interpolación, incluyendo filtros bilineales, bicúbicos, y bicúbicos aproximados.
D. Vectores de movimiento de la crominancia
Puesto que los vectores de movimiento de la crominancia (croma) se derivan implícitamente de los vectores colocalizados de movimiento de la luminancia, su precisión es limitada y presenta posibilidades de simplificación. Esta simplificación puede reducir la complejidad del cálculo de la interpolación subpíxel para los valores de crominancia del codificador y decodificador sin que la calidad percibida del vídeo codificado disminuya significativamente. Además, el codificador y decodificador puede conmutar entre diferentes modos de redondeo e interpolación de los vectores de movimiento de la crominancia. Por ejemplo, un modo enfatiza la calidad del vídeo codificado a costa de una mayor complejidad de cálculo. Otro modo enfatiza la simplicidad del cálculo a costa de una cierta calidad.
En una implementación, un codificador y decodificador de vídeo utiliza un campo "FASTUVMC" de nivel de secuencia, de 1 bit, para controlar la interpolación subpíxel de los valores de crominancia y el redondeo de los vectores de movimiento de la crominancia. Así pues, el codificador y decodificador de vídeo opera selectivamente en uno o dos modos diferentes de redondeo de la crominancia, un modo rápido y un modo básico.
La Figura 16 muestra una técnica (1600) para seleccionar entre múltiples modos de redondeo e interpolación de la crominancia. Por ejemplo, un codificador o decodificador de vídeo tal como el descrito anteriormente con referencia a las Figuras 4 y 5, respectivamente, efectúa esta técnica.
El codificador o decodificador de vídeo determina (1610) si una bandera FASTUVMC de un bit indica que hay que usar un modo rápido de compensación de movimiento de la crominancia (bandera = 1) o un modo básico de compensación de movimiento de la crominancia (bandera = 0). Por ejemplo, la bandera es un campo de nivel de secuencia, correspondiente a un ajuste de usuario, que un codificador escribe en una corriente de bits de vídeo codificado y un decodificador lee en la corriente de bits. Alternativamente, el codificador y el decodificador utilizan más bits para señalizar un redondeo de la crominancia y/o un modo de interpolación mediante códigos de longitud fija o de longitud variable, por ejemplo, para seleccionar entre los más de dos modos disponibles. O bien, en lugar de ser un campo de nivel de secuencia correspondiente a un ajuste de usuario, la información sobre la conmutación es señalizada en cualquier otro lugar de la corriente de bits y/o ajustada de acuerdo con unos criterios diferentes.
Posteriormente el codificador o decodificador de vídeo efectúa una compensación de movimiento de la crominancia en modo básico (1620) o modo rápido (1630). A continuación se dan los detalles de redondeo e interpolación de vectores de movimiento en modo básico (1620) y modo rápido (1630) para una implementación. Alternativamente, estos modos tienen implementaciones diferentes. Por ejemplo, se cambia la tabla de consulta utilizada en la implementación de modo rápido (1630), descrita más adelante, a una ordenación diferente para obtener un nivel de prestaciones deseado con una arquitectura de hardware específica, o se cambia la tabla para trabajar con vectores de movimiento de diferentes precisiones. En lugar del modo básico (1620) y del modo rápido (1630), o adicionalmente a los mismos, el codificador o decodificador puede utilizar otros modos para el redondeo e interpolación de vectores de movimiento de la crominancia.
En una implementación, y en modo rápido (por ejemplo, si la bandera de redondeo de la crominancia = 1), los vectores de movimiento de la crominancia que se encuentran con desviaciones de cuartos de píxel (es decir, desviaciones de un cuarto de píxel y de tres cuartos de píxel) son redondeados a las posiciones más cercanas de píxel completo, los vectores de movimiento de la crominancia que se encuentran en desviaciones de medio píxel son desredondeados a la izquierda, y se usa un filtrado bilineal para toda la interpolación de la crominancia. En este modo la velocidad del codificador y del decodificador aumenta. El motivo de esta optimización es la diferencia significativa de complejidad para interpolar desviaciones de píxel que se encuentren en: (a) posiciones de píxel entero; (b) posiciones de medio píxel; (c) una posición de un cuarto de píxel al menos en una coordenada (x ó y); y (d) una posición de un cuarto de píxel en ambas coordenadas. La relación a:b:c:d es del orden de 1:4:4,7:6,6. Aplicando este modo rápido puede favorecerse (a) y (b), recortando así el tiempo de decodificación. Puesto que esto se realiza sólo en la interpolación de la crominancia, es despreciable la pérdida tanto de codificación como de calidad (especialmente la calidad visible).
\global\parskip0.900000\baselineskip
En este modo rápido se hace el siguiente nivel de redondeo final sobre los vectores de movimiento de la crominancia:
//RndTbl[-3] = -1, RndTbl[-2] = 0, RndTbl[-1] = +1, RndTbl[-2] = 0
//RndTbl[1] = -1, RndTbl[2] = 0, RndTbl[3] = +1
cmv_x = cmv_x + RndTbl[cmv_x % 4];
\hskip8cm
(39)
cmv_y = cmv_y + RndTbl[cmv_y % 4]
en donde cmv_x y cmv_y representan las coordenadas x e y del vector de movimiento de la crominancia en unidades de un cuarto de píxel y % representa la operación de módulo (o resto), que se define así: (x % a) = - (- x % a). (El módulo de un número negativo es igual al negativo del módulo del número positivo correspondiente). Así pues, cuando cmv_x (ó cmv_y) es divisible por 4, entonces el vector de movimiento de la crominancia tiene una desviación entera. Cuando cmv_x % 4 = +/-2, entonces el vector de movimiento de la crominancia tiene una desviación de medio píxel. Y cuando cmv_x % 4 = +/-1 ó +/-3, entonces el vector de movimiento de la crominancia tiene una desviación de un cuarto de píxel. Como puede apreciarse por la anterior operación de reordenación, las posiciones de un cuarto de píxel son desautorizadas mediante el redondeo del vector de movimiento de la crominancia a la posición entera más cercana (las posiciones de medio píxel quedan inalteradas por la izquierda). Así pues, este modo reordena las coordenadas de crominancia a las posiciones de píxel entero y de medio píxel. Para obtener con este modo un mayor aumento de velocidad, puede utilizarse un filtrado bilineal para todas las interpolaciones de la crominancia. Aunque se ha descrito esta implementación del modo rápido en combinación con una selección entre múltiples modos de redondeo, alternativamente la implementación del modo rápido puede utilizarse independientemente (es decir, como único modo posible).
La Figura 17 es una tabla (1700) que ilustra este modo rápido de redondeo de la crominancia. La primera fila (1710) muestra valores del vector de movimiento de la luminancia con una precisión de un cuarto de píxel. Aunque los valores del vector de movimiento de la luminancia se muestran en términos de su desviación fraccional respecto a valores de píxeles enteros, podrían ser representados como valores enteros en los cuales cada entero representase un incremento de un cuarto de píxel (es decir, 0, 1, 2, 3, 4 en lugar de 0, ¼, ½, ¾, 1). La segunda fila (1720) muestra cómo se redondean en el modo rápido los correspondientes valores del vector de movimiento de la crominancia de manera que tengan una precisión de un píxel entero y de medio píxel.
En el segundo modo, o modo básico, de esta implementación (por ejemplo, si la bandera de redondeo de la crominancia = 0), los vectores de movimiento de la crominancia que tengan desviaciones de un cuarto de píxel sin ningún error de redondeo permanecen con las desviaciones de un cuarto de píxel. Los vectores de movimiento de la crominancia con otras desviaciones subpíxel son redondeados a la posición de un píxel o de medio píxel más cercana. En este modo, la velocidad del decodificador puede ser menor que en otros modos, pero la precisión con la que se calculan los valores de píxel de la crominancia es mayor. Así pues, este modo básico reordena las coordenadas de crominancia en posiciones de píxel entero, medio píxel y un cuarto de píxel. Para la interpolación de la crominancia puede utilizarse el filtrado bicúbico o bilineal.
La Figura 18 es una tabla que ilustra este modo básico de redondeo de la crominancia. La primera fila (1810) muestra unos valores del vector de movimiento de la luminancia con una precisión de un cuarto de píxel. La tercera fila (1830) muestra cómo se redondean en el modo básico los correspondientes valores del vector de movimiento de la crominancia de manera que tengan una precisión de píxel entero, de medio píxel, y de un cuarto de píxel. En otras implementaciones, el espacio de la crominancia se redondea a otras resoluciones del espacio de la crominancia.
Habiendo descrito e ilustrado los principios de la invención con referencia a diversas realizaciones, se reconocerá que las diversas realizaciones pueden ser modificadas en su disposición sin apartarse de tales principios. Por ejemplo, los principios y técnicas descritos anteriormente no están limitados a su utilización en un codificador de vídeo y/o un decodificador de vídeo. Por el contrario, pueden aplicarse a cualquier contexto de cálculo en el cual se calcule un valor basándose parcialmente en uno o más valores intermedios o en el cual se utilicen filtros separables en múltiples dimensiones.
Deberá entenderse que los programas, procesos o métodos aquí descritos no se refieren ni se limitan a ningún tipo particular de entorno de cálculo, a menos que se indique lo contrario. Pueden utilizarse diversos tipos de entornos de cálculo, especializados o de propósito general, para efectuar las operaciones según las enseñanzas aquí descritas. Elementos de realizaciones que se muestran en software pueden ser implementados en hardware y viceversa.
En vista de las numerosas realizaciones posibles a las que se pueden aplicar los principios de nuestra invención, reivindicamos como nuestra invención todas aquellas realizaciones que puedan estar dentro del alcance de las siguientes reivindicaciones y equivalentes a las mismas.

Claims (18)

1. Un procedimiento que comprende:
calcular un valor en una posición de muestra de una única imagen de vídeo de referencia (600) usando múltiples etapas (1510, 1530, 1540) de interpolación para determinar el valor, en el cual las múltiples etapas (1510, 1530, 1540) incluyen un control de redondeo por etapas alternadas.
2. El procedimiento de la reivindicación 1, en el cual el cálculo incluye:
en una primera etapa de las múltiples etapas, redondear (1514) un primer valor marginal al entero más próximo en una primera dirección según el control de redondeo por etapas alternadas; y
en una segunda etapa de las múltiples etapas, redondear (1534) un segundo valor marginal al entero más próximo en una segunda dirección opuesta a la primera dirección según el control de redondeo por etapas alternadas.
3. El procedimiento de la reivindicación 2, en el cual un parámetro de control de redondeo controla la primera y la segunda dirección.
4. El procedimiento de la reivindicación 3, en el cual el parámetro de control de redondeo alterna sobre una base de imagen a imagen así como de etapa en etapa dentro de la imagen de vídeo de referencia (600).
5. El procedimiento de una de las reivindicaciones 1 a 4, en el cual el valor es para un píxel.
6. El procedimiento de la reivindicación 1, en el cual la imagen de vídeo de referencia (600) es una primera imagen de vídeo de referencia y en el cual el control de redondeo de etapas alternadas indica una primera dirección de redondeo para la primera imagen de vídeo de referencia, comprendiendo adicionalmente el procedimiento repetir el cálculo para un valor en una posición de muestra de una segunda imagen de vídeo de referencia e invertir la primera dirección de redondeo para la segunda imagen de vídeo de referencia en base a un parámetro de control de redondeo.
7. El procedimiento de la reivindicación 6, en el cual la primera imagen de vídeo de referencia es una imagen clave y la primera dirección de redondeo está predeterminada para la imagen clave.
8. El procedimiento de la reivindicación 1, en el cual la posición de muestra está en un campo de vídeo de referencia, y en el cual el valor es para un píxel.
9. El procedimiento de una cualquiera de las reivindicaciones 1 a 8, que comprende adicionalmente, en cada una de las otras posiciones plurales de muestra, repetir el cálculo para los valores de las otras posiciones de muestra.
10. El procedimiento de la reivindicación 1, en el cual el control de redondeo por etapas alternadas alterna la dirección de redondeo de los valores marginales entre una y otra etapa de las múltiples etapas (1510, 1530, 1540) de interpolación.
11. Un medio (320, 340) legible por ordenador que almacena instrucciones ejecutables por ordenador para hacer que el sistema informático efectúe el procedimiento de una de las reivindicaciones 1 a 10 durante la codificación de vídeo (400).
12. Un medio (320, 340) legible por ordenador que almacena instrucciones ejecutables por ordenador para hacer que el sistema informático efectúe el procedimiento de una de las reivindicaciones 1 a 10 durante la decodificación de vídeo (500).
13. Un sistema (300) configurado para efectuar el procedimiento de una de las reivindicaciones 1 a 10.
14. Un sistema (300) que comprende:
un medio para calcular un valor en una única imagen de vídeo de referencia (600) usando múltiples etapas (1510, 1530, 1540) de interpolación para determinar el valor, en el cual las múltiples etapas (1510, 1530, 1540) incluyen un control de redondeo por etapas alternadas.
15. El sistema de la reivindicación 14, en el cual el medio para calcular calcula otros múltiples valores en múltiples imágenes de vídeo de referencia usando dichas múltiples etapas de interpolación (1510, 1530, 1540), comprendiendo adicionalmente el sistema:
un medio para efectuar la compensación de movimiento con relación a las imágenes de vídeo de referencia (600).
16. El sistema de la reivindicación 14, en el cual, en una primera etapa de las múltiples etapas (1510, 1530, 1540), el medio para calcular redondea (1514) un primer valor marginal al entero más próximo en una primera dirección, y en el cual, en una segunda etapa de las múltiples etapas (1510, 1530, 1540), el medio para calcular redondea (1534) un segundo valor marginal al entero más próximo en una segunda dirección opuesta a la primera dirección.
17. El sistema de la reivindicación 16, en el cual un parámetro de control de redondeo controla la primera y la segunda dirección, y en el cual el parámetro de control de redondeo alterna entre 0 y 1 sobre una base de imagen a imagen.
18. El sistema de la reivindicación 14 o 17, en el cual el valor es para un píxel.
ES03007062T 2002-04-10 2003-03-27 Control del redondeo para la interpolacion multietapa. Expired - Lifetime ES2266665T3 (es)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US37186002P 2002-04-10 2002-04-10
US371860P 2002-04-10
US10/382,294 US7305034B2 (en) 2002-04-10 2003-03-04 Rounding control for multi-stage interpolation
US382294P 2003-03-04

Publications (1)

Publication Number Publication Date
ES2266665T3 true ES2266665T3 (es) 2007-03-01

Family

ID=28794438

Family Applications (1)

Application Number Title Priority Date Filing Date
ES03007062T Expired - Lifetime ES2266665T3 (es) 2002-04-10 2003-03-27 Control del redondeo para la interpolacion multietapa.

Country Status (9)

Country Link
US (1) US7305034B2 (es)
EP (1) EP1353513B1 (es)
JP (1) JP4077354B2 (es)
KR (1) KR100593344B1 (es)
CN (2) CN100362510C (es)
AT (1) ATE330430T1 (es)
DE (1) DE60306011T2 (es)
ES (1) ES2266665T3 (es)
HK (1) HK1059857A1 (es)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NO319629B1 (no) 2003-11-28 2005-09-05 Tandberg Telecom As Fremgangsmate for korrigering av interpolerte pikselverdier
EP1617672A1 (en) * 2004-07-13 2006-01-18 Matsushita Electric Industrial Co., Ltd. Motion estimator/compensator including a 16-bit 1/8 pel interpolation filter
JP2008536450A (ja) * 2005-04-13 2008-09-04 トムソン ライセンシング ビデオ復号化のための方法および装置
US20060285597A1 (en) * 2005-06-20 2006-12-21 Flextronics International Usa, Inc. Reusing interpolated values in advanced video encoders
EP1908295A2 (en) * 2005-07-28 2008-04-09 Thomson Licensing Method and apparatus for video motion process optimization using a hierarchical cache
US8265151B1 (en) 2005-12-14 2012-09-11 Ambarella Taiwan Ltd. Mode decision using approximate 1/2 pel interpolation
US8208553B2 (en) * 2006-05-04 2012-06-26 Altera Corporation Methods and apparatus for quarter-pel refinement in a SIMD array processor
JP4682384B2 (ja) * 2006-07-11 2011-05-11 株式会社メガチップス 1/4画素輝度用動き予測機構、組合せ輝度用動き予測機構、及び組合せ輝度・色差用動き予測機構
CN100551073C (zh) * 2006-12-05 2009-10-14 华为技术有限公司 编解码方法及装置、分像素插值处理方法及装置
US9332264B2 (en) * 2007-12-30 2016-05-03 Intel Corporation Configurable performance motion estimation for video encoding
US9077971B2 (en) * 2008-04-10 2015-07-07 Qualcomm Incorporated Interpolation-like filtering of integer-pixel positions in video coding
US8971412B2 (en) * 2008-04-10 2015-03-03 Qualcomm Incorporated Advanced interpolation techniques for motion compensation in video coding
US9967590B2 (en) 2008-04-10 2018-05-08 Qualcomm Incorporated Rate-distortion defined interpolation for video coding based on fixed filter or adaptive filter
US8804831B2 (en) * 2008-04-10 2014-08-12 Qualcomm Incorporated Offsets at sub-pixel resolution
US8462842B2 (en) * 2008-04-10 2013-06-11 Qualcomm, Incorporated Symmetry for interpolation filtering of sub-pixel positions in video coding
US8705622B2 (en) * 2008-04-10 2014-04-22 Qualcomm Incorporated Interpolation filter support for sub-pixel resolution in video coding
US8121434B2 (en) 2008-06-13 2012-02-21 Microsoft Corporation Multi-pass image resampling
JP2010161747A (ja) * 2009-01-09 2010-07-22 Toshiba Corp サブピクセル生成装置及び方法並びに動き補償装置
EP2222086A1 (de) * 2009-02-18 2010-08-25 EcoDisc Technology AG Verfahren und Vorrichtung zur Vermeidung von Rundungsfehlern nach Durchführung einer inversen diskreten orthogonalen Transformation
WO2010126783A2 (en) * 2009-04-30 2010-11-04 Roman Gitlin Method and apparatus for streamlined implementation of interpolation in multiple dimensions
US20110200108A1 (en) * 2010-02-18 2011-08-18 Qualcomm Incorporated Chrominance high precision motion filtering for motion interpolation
JP5390458B2 (ja) * 2010-04-08 2014-01-15 株式会社Nttドコモ 動画像予測符号化装置、動画像予測符号化方法、動画像予測符号化プログラム、動画像予測復号装置、動画像予測復号方法、及び動画像予測復号プログラム
US8406506B2 (en) 2010-05-18 2013-03-26 Honda Motor Co., Ltd. Fast sub-pixel optical flow estimation
TWI419570B (zh) * 2011-01-03 2013-12-11 Novatek Microelectronics Corp 多媒體裝置及其移動補償方法
CN102611887B (zh) 2011-01-21 2015-08-05 华为技术有限公司 非整像素位置运动矢量的坐标值取整方法和装置
AU2012272779B2 (en) * 2011-06-24 2016-09-08 Ntt Docomo, Inc. Method and apparatus for motion compensation prediction
KR20130050149A (ko) 2011-11-07 2013-05-15 오수미 인터 모드에서의 예측 블록 생성 방법
EP2777259A2 (en) * 2011-11-08 2014-09-17 Motorola Mobility LLC Devices and methods for sample adaptive offset coding and/or signaling
TWI618397B (zh) * 2012-12-21 2018-03-11 杜比實驗室特許公司 在高位元深度視訊的可適性編碼中,高精度升取樣
US9762920B2 (en) * 2013-06-07 2017-09-12 Qualcomm Incorporated Dynamic range control of intermediate data in resampling process
CN103686028A (zh) * 2013-11-29 2014-03-26 浙江大学 一种用于大屏幕多投影系统的视频像素交替插值方法
US9774881B2 (en) 2014-01-08 2017-09-26 Microsoft Technology Licensing, Llc Representing motion vectors in an encoded bitstream
US9749642B2 (en) 2014-01-08 2017-08-29 Microsoft Technology Licensing, Llc Selection of motion vector precision
KR102440941B1 (ko) 2015-03-03 2022-09-05 삼성전자주식회사 이미지 처리 정보에 따라 크기와 방향을 갖는 초기 위상을 계산할 수 있는 이미지 처리 장치들
CN106710514B (zh) * 2015-07-24 2018-10-26 西安诺瓦电子科技有限公司 可编程逻辑器件、接收卡和led显示屏控制系统
CN109308078B (zh) * 2017-07-27 2021-08-27 龙岩智康太阳能科技有限公司 定日镜控制方法、装置及计算机可读存储介质和终端设备
US20230215031A1 (en) * 2021-12-31 2023-07-06 Microsoft Technology Licensing, Llc Interpolating Image and/or Audio in Plural Passes that Use Different Configurations

Family Cites Families (81)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60158786A (ja) * 1984-01-30 1985-08-20 Kokusai Denshin Denwa Co Ltd <Kdd> 画像動き量検出方式
US4661849A (en) * 1985-06-03 1987-04-28 Pictel Corporation Method and apparatus for providing motion estimation signals for communicating image sequences
US4661853A (en) * 1985-11-01 1987-04-28 Rca Corporation Interfield image motion detector for video signals
DE3854337T2 (de) * 1987-06-09 1996-02-01 Sony Corp Bewegungskompensierte Interpolation von digitalen Fernsehbildern.
EP0294962B1 (en) * 1987-06-09 1995-07-19 Sony Corporation Motion vector estimation in television images
US5054103A (en) * 1987-09-24 1991-10-01 Matsushita Electric Works, Ltd. Picture encoding system
US5242779A (en) * 1989-06-21 1993-09-07 Hoechst Aktiengesellschaft Photosensitive mixture containing photocurable compound and polyurethane binder with grafted vinyl alcohol units, carboxylic acid vinyl ester units and vinyl acetal units
EP0713340B1 (en) * 1989-10-14 2001-08-22 Sony Corporation Video signal coding/decoding method and apparatus
JP2712645B2 (ja) 1989-10-14 1998-02-16 ソニー株式会社 動きベクトル伝送方法及びその装置並びに動きベクトル復号化方法及びその装置
US5103306A (en) * 1990-03-28 1992-04-07 Transitions Research Corporation Digital image compression employing a resolution gradient
US5175618A (en) * 1990-10-31 1992-12-29 Victor Company Of Japan, Ltd. Compression method for interlace moving image signals
JP3226539B2 (ja) * 1991-05-24 2001-11-05 ブリティッシュ・ブロードキャスティング・コーポレーション ビデオ画像処理
US5317397A (en) 1991-05-31 1994-05-31 Kabushiki Kaisha Toshiba Predictive coding using spatial-temporal filtering and plural motion vectors
US5467136A (en) * 1991-05-31 1995-11-14 Kabushiki Kaisha Toshiba Video decoder for determining a motion vector from a scaled vector and a difference vector
US5428396A (en) * 1991-08-03 1995-06-27 Sony Corporation Variable length coding/decoding method for motion vectors
JPH0541862A (ja) * 1991-08-03 1993-02-19 Sony Corp 動きベクトルの可変長符号化方式
ATE148607T1 (de) 1991-09-30 1997-02-15 Philips Electronics Nv Bewegungsvektorschätzung, bewegungsbildkodierung- und -speicherung
JP2962012B2 (ja) * 1991-11-08 1999-10-12 日本ビクター株式会社 動画像符号化装置及びその復号装置
GB2262854B (en) * 1991-12-24 1995-05-24 Sony Broadcast & Communication Image processing apparatus
US6441842B1 (en) * 1992-02-19 2002-08-27 8×8, Inc. Video compression/decompression processing and processors
US5594813A (en) * 1992-02-19 1997-01-14 Integrated Information Technology, Inc. Programmable architecture and methods for motion estimation
DE69322769T2 (de) * 1992-03-03 1999-07-22 Toshiba Kawasaki Kk Koder für zeitveränderliche bilder
US6226327B1 (en) * 1992-06-29 2001-05-01 Sony Corporation Video coding method and apparatus which select between frame-based and field-based predictive modes
ES2431289T3 (es) * 1993-03-24 2013-11-25 Sony Corporation Método de decodificación de señal de imagen y aparato asociado
US5442400A (en) * 1993-04-29 1995-08-15 Rca Thomson Licensing Corporation Error concealment apparatus for MPEG-like video data
JPH06343172A (ja) * 1993-06-01 1994-12-13 Matsushita Electric Ind Co Ltd 動きベクトル検出方法及び動きベクトル符号化方法
US5477272A (en) * 1993-07-22 1995-12-19 Gte Laboratories Incorporated Variable-block size multi-resolution motion estimation scheme for pyramid coding
TW283289B (es) * 1994-04-11 1996-08-11 Gen Instrument Corp
US5594504A (en) * 1994-07-06 1997-01-14 Lucent Technologies Inc. Predictive video coding using a motion vector updating routine
US5684538A (en) * 1994-08-18 1997-11-04 Hitachi, Ltd. System and method for performing video coding/decoding using motion compensation
US5623311A (en) * 1994-10-28 1997-04-22 Matsushita Electric Corporation Of America MPEG video decoder having a high bandwidth memory
EP0710033A3 (en) * 1994-10-28 1999-06-09 Matsushita Electric Industrial Co., Ltd. MPEG video decoder having a high bandwidth memory
JPH08256341A (ja) * 1995-03-17 1996-10-01 Sony Corp 画像信号符号化方法、画像信号符号化装置、画像信号記録媒体、及び画像信号復号化装置
DE19606584C2 (de) * 1995-04-19 1997-07-31 Porsche Ag Verfahren zur Zylinderabschaltung einer Brennkraftmaschine
GB2301971B (en) * 1995-06-06 1999-10-06 Sony Uk Ltd Video compression
GB2301972B (en) * 1995-06-06 1999-10-20 Sony Uk Ltd Video compression
US5959673A (en) 1995-10-05 1999-09-28 Microsoft Corporation Transform coding of dense motion vector fields for frame and object based video coding applications
US5929940A (en) * 1995-10-25 1999-07-27 U.S. Philips Corporation Method and device for estimating motion between images, system for encoding segmented images
US5991463A (en) * 1995-11-08 1999-11-23 Genesis Microchip Inc. Source data interpolation method and apparatus
JP2798035B2 (ja) * 1996-01-17 1998-09-17 日本電気株式会社 適応動きベクトル補間による動き補償フレーム間予測方法
US5799113A (en) * 1996-01-19 1998-08-25 Microsoft Corporation Method for expanding contracted video images
US5692063A (en) * 1996-01-19 1997-11-25 Microsoft Corporation Method and system for unrestricted motion estimation for video
US5787203A (en) 1996-01-19 1998-07-28 Microsoft Corporation Method and system for filtering compressed video images
US6957350B1 (en) * 1996-01-30 2005-10-18 Dolby Laboratories Licensing Corporation Encrypted and watermarked temporal and resolution layering in advanced television
US5982438A (en) * 1996-03-22 1999-11-09 Microsoft Corporation Overlapped motion compensation for object coding
US5847776A (en) * 1996-06-24 1998-12-08 Vdonet Corporation Ltd. Method for entropy constrained motion estimation and coding of motion vectors with increased search range
US6233017B1 (en) * 1996-09-16 2001-05-15 Microsoft Corporation Multimedia compression system with adaptive block sizes
US6130963A (en) * 1996-11-22 2000-10-10 C-Cube Semiconductor Ii, Inc. Memory efficient decoding of video frame chroma
US6377628B1 (en) * 1996-12-18 2002-04-23 Thomson Licensing S.A. System for maintaining datastream continuity in the presence of disrupted source data
US6201927B1 (en) * 1997-02-18 2001-03-13 Mary Lafuze Comer Trick play reproduction of MPEG encoded signals
US6005980A (en) 1997-03-07 1999-12-21 General Instrument Corporation Motion estimation and compensation of video object planes for interlaced digital video
US5844613A (en) * 1997-03-17 1998-12-01 Microsoft Corporation Global motion estimator for motion video signal encoding
US6404813B1 (en) * 1997-03-27 2002-06-11 At&T Corp. Bidirectionally predicted pictures or video object planes for efficient and flexible video coding
US5973755A (en) * 1997-04-04 1999-10-26 Microsoft Corporation Video encoder and decoder using bilinear motion compensation and lapped orthogonal transforms
US6067322A (en) * 1997-06-04 2000-05-23 Microsoft Corporation Half pixel motion estimation in motion video signal encoding
EP1237376B1 (en) * 1997-06-09 2015-08-05 Hitachi, Ltd. Image information recording medium
US6574371B2 (en) * 1997-06-09 2003-06-03 Hitachi, Ltd. Image decoding method
JPH1169345A (ja) * 1997-06-11 1999-03-09 Fujitsu Ltd フレーム間予測動画像符号化装置及び復号装置並びにフレーム間予測動画像符号化方法及び復号方法
JP2897763B2 (ja) * 1997-07-28 1999-05-31 日本ビクター株式会社 動き補償符号化装置、復号化装置、符号化方法及び復号化方法
FR2766946B1 (fr) * 1997-08-04 2000-08-11 Thomson Multimedia Sa Procede et dispositif de pretraitement pour estimation de mouvement
US6281942B1 (en) * 1997-08-11 2001-08-28 Microsoft Corporation Spatial and temporal filtering mechanism for digital motion video signals
US6339656B1 (en) * 1997-12-25 2002-01-15 Matsushita Electric Industrial Co., Ltd. Moving picture encoding decoding processing apparatus
US6122017A (en) * 1998-01-22 2000-09-19 Hewlett-Packard Company Method for providing motion-compensated multi-field enhancement of still images from video
JP3888597B2 (ja) * 1998-06-24 2007-03-07 日本ビクター株式会社 動き補償符号化装置、及び動き補償符号化復号化方法
JP4026238B2 (ja) * 1998-07-23 2007-12-26 ソニー株式会社 画像復号装置及び画像復号方法
US6219070B1 (en) * 1998-09-30 2001-04-17 Webtv Networks, Inc. System and method for adjusting pixel parameters by subpixel positioning
GB2343579A (en) 1998-11-07 2000-05-10 Ibm Hybrid-linear-bicubic interpolation method and apparatus
US6983018B1 (en) 1998-11-30 2006-01-03 Microsoft Corporation Efficient motion vector coding for video compression
US6418166B1 (en) * 1998-11-30 2002-07-09 Microsoft Corporation Motion estimation and block matching pattern
US6496608B1 (en) * 1999-01-15 2002-12-17 Picsurf, Inc. Image data interpolation system and method
US6320593B1 (en) * 1999-04-20 2001-11-20 Agilent Technologies, Inc. Method of fast bi-cubic interpolation of image information
US6968008B1 (en) * 1999-07-27 2005-11-22 Sharp Laboratories Of America, Inc. Methods for motion estimation with adaptive motion accuracy
US6647061B1 (en) * 2000-06-09 2003-11-11 General Instrument Corporation Video size conversion and transcoding from MPEG-2 to MPEG-4
US7206453B2 (en) * 2001-05-03 2007-04-17 Microsoft Corporation Dynamic filtering for lossy compression
US6950469B2 (en) * 2001-09-17 2005-09-27 Nokia Corporation Method for sub-pixel value interpolation
US20030095603A1 (en) * 2001-11-16 2003-05-22 Koninklijke Philips Electronics N.V. Reduced-complexity video decoding using larger pixel-grid motion compensation
CN101448162B (zh) * 2001-12-17 2013-01-02 微软公司 处理视频图像的方法
US7003035B2 (en) * 2002-01-25 2006-02-21 Microsoft Corporation Video coding methods and apparatuses
US7277587B2 (en) * 2002-04-26 2007-10-02 Sharp Laboratories Of America, Inc. System and method for lossless video coding
US20050013498A1 (en) * 2003-07-18 2005-01-20 Microsoft Corporation Coding of motion vector information
KR100586882B1 (ko) * 2004-04-13 2006-06-08 삼성전자주식회사 모션 스케일러빌리티를 지원하는 코딩 방법 및 장치

Also Published As

Publication number Publication date
CN100362510C (zh) 2008-01-16
KR20030081119A (ko) 2003-10-17
EP1353513A2 (en) 2003-10-15
CN1238799C (zh) 2006-01-25
HK1059857A1 (en) 2004-07-16
DE60306011D1 (de) 2006-07-27
EP1353513A3 (en) 2003-10-29
KR100593344B1 (ko) 2006-06-26
EP1353513B1 (en) 2006-06-14
US20030194011A1 (en) 2003-10-16
CN1455349A (zh) 2003-11-12
JP4077354B2 (ja) 2008-04-16
ATE330430T1 (de) 2006-07-15
US7305034B2 (en) 2007-12-04
JP2003339050A (ja) 2003-11-28
DE60306011T2 (de) 2006-10-05
CN1453725A (zh) 2003-11-05

Similar Documents

Publication Publication Date Title
ES2266665T3 (es) Control del redondeo para la interpolacion multietapa.
ES2254811T3 (es) Interpolacion subpixel en la estimacion y compesacion del movimiento.
ES2278087T3 (es) Filtro bicubico aproximado.
ES2269850T3 (es) Redondeos del vector de movimiento de crominancia.
KR101354741B1 (ko) 다중 해상도 비디오 코딩 및 디코딩을 위한 리샘플링 및 픽처 크기조정 동작
US10721481B2 (en) Method and apparatus for motion compensation prediction
ES2275037T3 (es) Procedimiento de codificacion de video con compensacion de fundido.
JP5323252B2 (ja) 動画像符号化方法、復号化方法、符号化装置および復号化装置
JP2013243743A (ja) 動画像符号化方法、復号化方法、符号化装置および復号化装置