ES2278087T3 - Filtro bicubico aproximado. - Google Patents

Filtro bicubico aproximado. Download PDF

Info

Publication number
ES2278087T3
ES2278087T3 ES03007021T ES03007021T ES2278087T3 ES 2278087 T3 ES2278087 T3 ES 2278087T3 ES 03007021 T ES03007021 T ES 03007021T ES 03007021 T ES03007021 T ES 03007021T ES 2278087 T3 ES2278087 T3 ES 2278087T3
Authority
ES
Spain
Prior art keywords
filter
pixel
bicubic
values
phase
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
ES03007021T
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 ES2278087T3 publication Critical patent/ES2278087T3/es
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • BPERFORMING OPERATIONS; TRANSPORTING
    • B66HOISTING; LIFTING; HAULING
    • B66CCRANES; LOAD-ENGAGING ELEMENTS OR DEVICES FOR CRANES, CAPSTANS, WINCHES, OR TACKLES
    • B66C13/00Other constructional features or details
    • B66C13/04Auxiliary devices for controlling movements of suspended loads, or preventing cable slack
    • 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
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B66HOISTING; LIFTING; HAULING
    • B66CCRANES; LOAD-ENGAGING ELEMENTS OR DEVICES FOR CRANES, CAPSTANS, WINCHES, OR TACKLES
    • B66C1/00Load-engaging elements or devices attached to lifting or lowering gear of cranes or adapted for connection therewith for transmitting lifting forces to articles or groups of articles
    • B66C1/10Load-engaging elements or devices attached to lifting or lowering gear of cranes or adapted for connection therewith for transmitting lifting forces to articles or groups of articles by mechanical means
    • B66C1/12Slings comprising chains, wires, ropes, or bands; Nets
    • B66C1/16Slings with load-engaging platforms or frameworks
    • 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/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Mechanical Engineering (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Picture Signal Circuits (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Polarising Elements (AREA)
  • Networks Using Active Elements (AREA)
  • Control Of Motors That Do Not Use Commutators (AREA)
  • Filters And Equalizers (AREA)
  • Electric Double-Layer Capacitors Or The Like (AREA)

Abstract

Un procedimiento de interpolación bicúbica que comprende: para una primera fase (810, 1410) de interpolación bicúbica, filtrado (812, 1412) de muestras de una trama de vídeo de referencia (600) en una primera dimensión usando un filtro bicúbico aproximado que tiene coeficientes de filtro, incluyendo desplazamiento de bits (814, 1414) para compensar la expansión debida a los coeficientes de filtro en la primera fase, en el que al menos parte del desplazamiento de bits se difiere, y en el que el filtrado para la primera fase produce resultados intermedios (820, 1420); y para una segunda fase (830, 1430) de la interpolación bicúbica, filtrado (832, 1432) de los resultados intermedios en una segunda dimensión usando el filtro bicúbico aproximado, incluyendo desplazamiento de bits (834, 1434) para compensar el desplazamiento de bits diferido y para expansión debida a los coeficientes de filtro en la segunda fase, en el que el filtro bicúbico aproximado se aproxima a un filtro bicúbico puro que aplica un factor de normalización a una suma ponderada de productos de valores de coeficientes de filtro enteros y valores de muestra, en el que el filtro bicúbico aproximado aplica valores de coeficientes de filtro reducidos y un factor de normalización reducido, en el que el desplazamiento de bits diferido se define para usar completamente pero sin superar una profundidad de bits disponible de una arquitectura objeto en la segunda fase.

Description

Filtro bicúbico aproximado.
Campo técnico
Se describen las técnicas y herramientas para filtrado bicúbico aproximado. Por ejemplo, un codificador o descodificador de vídeo usa un filtro bicúbico aproximado cuando calcula valores de píxel en posiciones de cuarto de píxel en tramas de vídeo de referencia.
Antecedentes
El vídeo digital consume grandes cantidades de capacidad de almacenamiento y transmisión. Una secuencia típica de vídeo digital en bruto incluye 15 ó 30 tramas por segundo. Cada trama puede incluir decenas o centenares de miles de píxeles (también llamados pels). Cada píxel representa un minúsculo elemento de la imagen. En forma en bruto, un ordenador representa comúnmente un píxel con 24 bits. Por ejemplo, un píxel puede comprender un valor de luminancia (también llamado valor de luma) de 8 bits que define el componente de escala de grises del píxel y dos valores de crominancia (también llamados valores de croma) de 8 bits que definen el componente de color del píxel. Así, el número de bits por segundo, o tasa de bits, de una secuencia típica de vídeo digital en bruto puede ser de 5 millones de bits por segundo o más.
Muchos ordenadores y redes informáticas carecen de los recursos para procesar vídeo digital en bruto. Por esta razón, los ingenieros usan compresión (también llamada codificación o encriptación) para reducir la tasa de bits de vídeo digital. La compresión puede ser sin pérdidas, en la cual la calidad del vídeo no sufre, pero las reducciones en la tasa de bits están limitadas por la complejidad del vídeo. O bien, la compresión puede ser con pérdidas, en la cual la calidad del vídeo sufre, pero las reducciones en 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 intratrama y la compresión intertrama. Las técnicas de compresión intratrama comprimen tramas individuales, llamadas normalmente tramas I o tramas clave. Las técnicas de compresión intertrama comprimen tramas con referencia a las tramas precedente y/o siguiente, y se denominan normalmente tramas predichas, tramas P o tramas B.
Windows Media Video, Versión 8 ("WMV8"), de Microsoft Corporation, incluye un codificador de vídeo y un descodificador de vídeo. El codificador WMV8 usa compresión intratrama e intertrama, y el descodificador WMV8 usa la descompresión intratrama e intertrama. La compresión intertrama del codificador WMV8 usa una codificación de predicción por compensación del movimiento basada en bloques seguida por codificación de la transformación del error residual.
En el WMV8, una trama se representa 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 horizontal y verticalmente. Así, una trama 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 trama predicha en 8 x 8 bloques de píxeles. Un grupo de cuatro bloques de luminancia de 8 x 8 y dos bloques de crominancia cosituados de 8 x 8 (uno para el plano de crominancia U y otro para el plano de crominancia V) forman macrobloques de 16 x 16. Así, cada macrobloque de 16 x 16 incluye cuatro bloques de luminancia de 8 x 8 y dos bloques de crominancia de 8 x 8.
Para un macrobloque de una trama predicha, el codificador WMV8 realiza la estimación del movimiento. La estimación del movimiento aproxima el movimiento de un macrobloque de una trama predicha buscando y haciendo coincidir el macrobloque de la trama predicha con un macrobloque de una trama de referencia. En la fig. 1, por ejemplo, el codificador WMV8 calcula un vector de movimiento para un macrobloque (115) de la trama predicha (110). Para calcular el vector de movimiento, el codificador busca en un área de búsqueda (135) de una trama de referencia (130). Dentro del área de búsqueda (135), el codificador compara los valores de luminancia del macrobloque (115) de la trama predicha (110) con los valores de luminancia de los diversos bloques candidatos de la trama de referencia (130) para encontrar una buena coincidencia. El codificador WMV8 puede conmutar la precisión del vector de movimiento, y puede usar un intervalo de búsqueda y vectores de movimiento con resolución horizontal de uno, medio o un cuarto de píxel y 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 subpíxel.
Durante la compensación de movimiento, el codificador WMV8 usa los vectores de movimiento para macrobloques de la trama predicha para determinar los predictores para los macrobloques de la trama 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 trama predicha, el codificador WMV8 descomprime los residuos y los añade a los predictores para los macrobloques respectivos.
El descodificador WMV8 también usa los vectores de movimiento para los macrobloques de la trama predicha para determinar los predictores para los macrobloques de la trama de referencia. Para reconstruir los macrobloques con predicción de movimiento de la trama predicha, el descodificador WMV8 descomprime los residuos y los añade a los predictores 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 descodificador WMV8 debe determinar los valores de píxel en las posiciones subpíxel de la trama de referencia. El codificador o descodificador WMV8 genera valores para las posiciones subpíxel usando filtros de interpolación. La fig. 2 muestra unas posiciones subpíxel de muestra H_{0}, H_{1}, H_{2}, que tienen valores calculados por interpolación de los valores de píxel enteros a, b, c,..., p.
Cuando se opera con una precisión de medio píxel en los vectores de movimiento, los filtros de interpolación usados para los valores de luminancia de los píxeles en las tres posiciones distintas de medio píxel H_{0}, H_{1}, H_{2} son:
H_{0} = (f + g + R_{2}) >> 1
(1),
H_{1} = (f + j + R_{2}) >> 1
(2), y
H_{2} = (f + g + j + k + R_{1}) >> 2
(3),
en las que R_{1} y R_{2} son valores de control de redondeo que se controlan mediante un indicador de control de redondeo de un bit que indica el modo de redondeo para una trama particular. Si el indicador de control de redondeo se ajusta a 0, entonces R_{1} = 2 y R_{2} = 1. Si el indicador de control de redondeo se ajusta a 1, entonces R_{1} = R_{2} = 0. El valor del indicador de control de redondeo alterna entre 1 y 0 para cada trama P. En cada trama I, el valor del indicador de control de redondeo se reinicia a 0. Así, el control de redondeo funciona sobre una base trama a trama.
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 píxeles. El suavizado puede tener efectos deseables (como una perceptibilidad decreciente del ruido de cuantificación), pero también puede conducir a pérdida de información válida del píxel.
Para una resolución de un cuarto de píxel en el vector de movimiento, el codificador o descodificador WMV8 emplea primero filtros bicúbicos para interpolar los valores de luminancia de los píxeles en las posiciones de medio píxel. La interpolación bicúbica es más lenta que la interpolación bilineal, pero tiende a conservar los valores de borde y da como resultado una menor pérdida de información válida del píxel. Los filtros bicúbicos para las tres posiciones distintas de medio píxel H_{0}, H_{1}, H_{2} son:
H_{0} = (-e + 9f + 9g - h + 8) >> 4
(4),
H_{1} = (-b + 9f + 9j - n + 8) >> 4
(5), y
H_{2} = (-t_{0} + 9t_{1} + 9t_{2} - t_{3} + 8) >> 4
(6).
en las que t_{0}, t_{1}, t_{2}, t_{3} se calculan como sigue:
t_{0} = (-a + 9b + 9c - d + 8) >> 4
(7),
t_{1} = (-e + 9f + 9g - h + 8) >> 4
(8),
t_{2} = (-i + 9j + 9k - l + 8) >> 4
(9), y
t_{3} = (-m + 9n + 9o - p + 8) >> 4
(10).
Las ecuaciones (4) a (10) pueden dar como resultado una salida que quede fuera del intervalo de los valores de entrada. Por ejemplo, para una entrada de 8 bits (intervalo 0...255), la serie de valores 0 255 255 0 produce un valor de salida de 257 en cualquiera de las ecuaciones (4) a (10). Así, el codificador o descodificador WMV8 limita (o "recorta") el valor de salida de cualquiera de las ecuaciones (4) a (10) para que esté dentro del intervalo de validez. Por ejemplo, para valores de salida de 8 bits, los valores inferiores a 0 se cambian a 0, y los valores superiores a 255 se cambian a 255. La limitación soluciona el problema del intervalo, pero ralentiza el cálculo. Además, la limitación produce pérdida de precisión.
A continuación, en una fase de interpolación posterior, el codificador o descodificador WMV8 calcula los valores de píxel en ciertas posiciones de cuarto de píxel. Estas localizaciones de cuarto de píxel están situadas horizontalmente entre dos localizaciones de medio píxel o entre una localización de un píxel y una localización de medio píxel. Para estas localizaciones de cuarto de píxel, el codificador o descodificador WMV8 usa interpolación bilineal (es decir, (x + y + 1) >> 1) usando las dos localizaciones horizontalmente adyacentes de medio píxel y un píxel sin control de redondeo.
Una vez calculados los vectores de movimiento de luminancia, el codificador o descodificador WMV8 obtiene los vectores cosituados de movimiento de crominancia. Dado que en el WMV8 un plano de crominancia tiene la mitad de tamaño que un plano de luminancia tanto horizontal como verticalmente, los valores de movimiento de luminancia deben ajustarse a escala en valores apropiados de vectores de movimiento de crominancia. En el WMV8, este procedimiento de conversión incluye dividir por dos los vectores de movimiento de luminancia y redondear con una precisión de medio píxel los vectores de movimiento de crominancia resultantes. Así, los vectores de movimiento de luminancia que tienen precisión de medio píxel no se convierten en vectores de movimiento de crominancia que tienen precisión de cuarto de píxel. Por otra parte, el redondeo de 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 trama de referencia pueden mostrar en ciertas circunstancias un subdesbordamiento o un desbordamiento. Por ejemplo, el valor de luminancia de los píxeles en una posición de un cuarto de píxel puede ser 271 (que está fuera del intervalo de 0...255) si el valor de la posición adyacente de píxel entero es 255 y el valor de la posición adyacente 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 descodificador WMV8 limita, si es necesario, los valores reconstruidos para el macrobloque de manera que estén dentro del intervalo de 0...255.
Aparte del WMV8, existen varias normas internacionales relativas a la compresión y descompresión de vídeo. Entre estas normas se incluyen las normas Motion Picture Experts Group ["MPEG"] 1, 2 y 4, y las normas H.261, H.262 y H.263 de la Unión Internacional de Telecomunicaciones ["UIT"]. Al igual que el WMV8, estas normas usan una combinación de compresión intratrama e intertrama, aunque las normas difieren normalmente del WMV8 en los detalles de las técnicas de compresión usadas.
Varias normas (por ejemplo, MPEG 4 y H.263) proporcionan estimación y compensación del movimiento de medio píxel usando filtros bilineales y control de redondeo básico. Por otra parte, en la norma H.263, los vectores de movimiento de crominancia que tienen teóricamente una resolución de cuarto de píxel (es decir, la mitad de la resolución de los vectores de movimiento de luminancia de medio píxel) se redondean a una precisión de medio píxel o de un píxel entero, de manera que en el espacio de crominancia no se permiten valores de un cuarto de píxel. Para detalles adicionales de las normas sobre la estimación/compensación del movimiento, véanse las propias especificaciones de las normas.
La estimación y la compensación del movimiento son técnicas de compresión eficaces, pero las diversas técnicas anteriores de estimación/compensación (como el WMV8 y las normas expuestas anteriormente) tienen varios inconvenientes, que incluyen:
(1) Cuando se calculan valores de píxel en posiciones subpíxel en tramas de referencia, los codificadores y descodificadores pierden precisión innecesariamente en los valores intermedios. Por ejemplo, cuando en el WMV8 se calcula 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 se desplazan cuatro bits a la derecha, aunque pueda disponerse de una mayor profundidad de bits. Además, el codificador/descodificador WMV8 limita los valores intermedios durante la interpolación en dos fases 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 para 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 descodificadores no pueden tener en cuenta la acumulación de errores de redondeo que pudiera producirse en la interpolación multifase. El error de redondeo se produce, por ejemplo, cuando los valores de píxel se redondean repetidamente de una a otra trama 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 descodificador WMV8 interpola en múltiples fases un valor de píxel en una posición de un cuarto de píxel, no se usa el control de redondeo. Por el contrario, los resultados de cada fase se redondea de la misma forma en cada fase de interpolación (y sin control de redondeo); y
(4) El redondeo de crominancia no se realiza con una precisión de cuarto de píxel, y no se ofrece ningún control sobre las opciones de redondeo de los vectores de movimiento de crominancia. Por ejemplo, el codificador y descodificador WMV8 redondea todos los vectores de movimiento de 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 intensamente desarrollados. Sin embargo, con independencia de cuáles 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.
El documento GB-2.343.579-A describe un procedimiento y aparato de interpolación bicúbica lineal híbrida.
\newpage
El documento de EE.UU. 5,929.940 describe un procedimiento y dispositivo para estimar el movimiento entre imágenes, y un sistema para codificar imágenes segmentadas.
Resumen de la invención
El objeto es proporcionar un sistema y un procedimiento que mejore la eficacia de la predicción de movimiento.
Este objeto se resuelve mediante la invención según las reivindicaciones independientes.
Formas de realización preferidas se definen por las reivindicaciones dependientes.
En resumen, la descripción detallada se dirige a varias técnicas y herramientas para filtrado bicúbico aproximado. En aplicaciones de codificación y descodificación de vídeo, por ejemplo, un codificador o descodificador de vídeo usa uno o más filtros bicúbicos aproximados cuando calcula valores de píxel en posiciones subpíxel en tramas de vídeo de referencia. Esto mejora la eficacia de la predicción de movimiento usando los valores de píxel calculados. Al mismo tiempo, el filtrado bicúbico aproximado es relativamente eficaz computacionalmente.
Un componente como un codificador o descodificador de vídeo calcula un valor en una posición usando un filtro bicúbico aproximado. El filtro bicúbico aproximado actúa sustancialmente como un filtro bicúbico, lo que es deseable, pero tiene unos coeficientes de filtro diferentes y/o menor resolución para simplificar el cálculo. Por ejemplo, los coeficientes de filtro del filtro bicúbico aproximado tienen una suma de 64 (en vez de 128) para un filtro de baja resolución para posiciones de cuatro de muestra.
Un codificador o descodificador de vídeo puede calcular valores de píxel en varias posiciones subpíxel en tramas de vídeo de referencia usando un filtro bicúbico aproximado. Las posiciones subpíxel son, por ejemplo, posiciones desplazadas un cuarto de píxel (o tres cuartos de píxel) en una dimensión o dos dimensiones.
Las diversas técnicas y herramientas pueden usarse en combinación o independientemente. Se apreciarán características y ventajas adicionales a partir de la siguiente descripción detallada que hace referencia a los dibujos adjuntos.
Breve descripción de los dibujos
La fig. 1 es un diagrama que muestra la estimación del movimiento en un codificador de vídeo según la técnica anterior.
La fig. 2 es un gráfico que muestra las localizaciones subpíxel para interpolación en estimación y compensación del movimiento según la técnica anterior.
La fig. 3 es un diagrama de bloques de un entorno informático adecuado en el cual pueden implementarse varias formas de realización descritas.
La fig. 4 es un diagrama de bloques de un sistema generalizado de codificador de vídeo usado en varias formas de realización descritas.
La fig. 5 es un diagrama de bloques de un sistema generalizado de descodificador de vídeo usado en varias formas de realización descritas.
La fig. 6 es un gráfico que muestra las localizaciones para interpolación de los valores de píxel durante la estimación y compensación del movimiento subpíxel.
La fig. 7 es un gráfico que muestra las localizaciones de píxel entero que tienen valores de píxel usados para calcular valores de píxel interpolados en localizaciones subpíxel.
La fig. 8 es un diagrama que muestra una técnica de interpolación de dos fases para interpolar valores en posiciones subpíxel.
La fig. 9 es un gráfico que muestra una posición de muestra horizontal de medio píxel y vertical de medio píxel, y los valores intermedios en posiciones subpíxel usados para calcular el valor en la posición de muestra.
La fig. 10 es un gráfico que muestra una posición de muestra horizontal de un cuarto de píxel y vertical de medio píxel y una posición de muestra horizontal de medio píxel y vertical de cuarto de píxel vertical, y los valores intermedios en posiciones subpíxel usados para calcular los valores en las posiciones de muestra.
La fig. 11 es un gráfico que muestra una posición de muestra horizontal de cuarto de píxel y vertical de cuarto de píxel, y los valores intermedios en posiciones subpíxel usados para calcular el valor en la posición de muestra.
La fig. 12 es un diagrama que muestra una técnica de interpolación multifase con valores intermedios de intervalo dinámico (en bits) aumentado.
La fig. 13 es un diagrama que muestra una técnica de interpolación multifase con limitación omitida.
La fig. 14 es un diagrama que muestra una técnica de interpolación multifase con desplazamiento de bits diferido.
La fig. 15 es un diagrama que muestra una técnica de interpolación multifase que usa control de redondeo alternante por fases.
La fig. 16 es un diagrama de flujo que muestra una técnica para seleccionar entre múltiples modos de interpolación y redondeo de crominancia.
La fig. 17 es una tabla que muestra un primer modo de redondeo de crominancia.
La fig. 18 es una tabla que muestra un segundo modo de redondeo de crominancia.
Descripción detallada
Las formas de realización descritas se refieren a técnicas y herramientas para la interpolación subpíxel en estimación y compensación del movimiento. Varias formas de realización se refieren a técnicas y herramientas para mantener la precisión en la interpolación multifase difiriendo la limitación y/o el desplazamiento de bits (operaciones que pueden producir una pérdida de precisión) hasta las fases posteriores de la interpolación. Otras formas de realización se refieren a filtros u operaciones de redondeo eficaces para la interpolación multifase.
Un codificador o descodificador realiza la interpolación subpíxel en una trama de referencia o en una porción de una trama como uno o más bloques o macrobloques. El codificador/descodificador calcula los valores de píxel en localizaciones subpíxel con la trama de referencia. El codificador/descodificador puede realizar entonces la compensación del movimiento usando vectores de movimiento subpíxel precisos.
En algunas formas de realización, un codificador de vídeo o descodificador de vídeo realiza la interpolación subpíxel en una aplicación de codificación o descodificación de vídeo. Alternativamente, otro codificador o descodificador, u otro tipo de componente, realiza la interpolación subpíxel u otra técnica descrita más adelante en otro tipo de aplicación.
Como alternativa a realizar la interpolación subpíxel sobre tramas de referencia, en algunas formas de realización un codificador/descodificador realiza la interpolación subpíxel sobre campos, capas de objetos u otras imágenes.
En algunas formas de realización, la interpolación subpíxel se realiza calculando valores de píxel en los planos de luminancia y los planos de crominancia de una trama 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 usarse en combinación o independientemente. Diferentes formas de realización implementan una o más de las técnicas y herramientas descritas. Aunque, por motivos de presentación, las operaciones de estas técnicas se describen normalmente en un orden secuencial particular, debe entenderse que esta manera de descripción comprende 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 redistribuirse o realizarse concurrentemente. Además, por motivos de sencillez, los diagramas de flujo no presentan normalmente los diversos modos en que pueden usarse las técnicas particulares en conjunción con otras
técnicas.
En algunas formas de realización, un codificador y descodificador de vídeo usa diversos indicadores y señales en un flujo de bits. Aunque se describen indicadores y señales específicos, debe entenderse que este tipo de descripción comprende diferentes convenciones para los indicadores y señales (por ejemplo, ceros en lugar de unos).
I. Entorno informático
La fig. 3 ilustra un ejemplo generalizado de un entorno informático (300) adecuado en el que pueden implementarse varias de las formas de realización descritas. El entorno informático (300) no pretende sugerir ninguna limitación en cuanto al alcance de uso o de funcionalidad, ya que las técnicas y herramientas pueden implementarse en diversos entornos informáticos de propósito general o de propósito especial.
Con referencia a la fig. 3, el entorno informático (300) incluye al menos una unidad de procesamiento (310) y una memoria (320). En la fig. 3, esta configuración, la más básica (330), está incluida dentro de una línea discontinua. La unidad de procesamiento (310) ejecuta instrucciones ejecutables por ordenador y puede ser un procesador real o virtual. En un sistema multiproceso, múltiples unidades de procesamiento ejecutan instrucciones ejecutables por ordenador para aumentar la potencia de procesamiento. La memoria (320) puede ser memoria volátil (por ejemplo, de registros, caché, RAM), 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 descodificador, como un codificador y/o un descodificador de vídeo.
Un entorno informático puede tener características adicionales. Por ejemplo, el entorno informático (300) incluye 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 mostrado), como un bus, un controlador o una red, interconecta los componentes del entorno informático (300). Normalmente, el software del sistema operativo (no mostrado) proporciona un entorno operativo para otro software que se ejecuta 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 instrucciones para el software (380) que implementa técnicas de interpolación subpíxel.
El o los dispositivos de entrada (350) pueden ser un dispositivo de entrada táctil como un teclado, un ratón, un lápiz o una bola, un dispositivo de entrada de voz, un dispositivo de escáner u otro dispositivo que proporcione entradas al entorno informático (300). Para codificación de audio o vídeo, el o los dispositivos de entrada (350) pueden 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 una pantalla, una impre-
sora, un altavoz, un grabador de CD u otro dispositivo que proporcione una salida desde el 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 transporta información, como instrucciones ejecutables por ordenador, entradas o salidas de audio o 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 ajustadas o cambiadas de manera que se codifique información en la señal. A modo de ejemplo, y no de limitación, los medios de comunicación incluyen técnicas alámbricas o inalámbricas implementadas con una portadora eléctrica, óptica, de 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 en un entorno informático. A modo 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 cualquiera de los anteriores.
Las técnicas y herramientas pueden describirse en el contexto general de las instrucciones ejecutables por ordenador, como las incluidas en módulos de programa, que se ejecutan en un entorno informático sobre un procesador objeto real o virtual. Generalmente, los módulos de programa incluyen rutinas, programas, bibliotecas, objetos, clases, componentes, estructuras de datos, etc., que realizan tareas particulares o implementan tipos particulares de datos abstractos. En varias formas de realización, según se desee, la funcionalidad de los módulos de programa puede combinarse o dividirse entre los módulos de programa. Las instrucciones ejecutables por ordenador para los módulos de programa pueden ejecutarse en un entorno informático local o distribuido.
Por motivos de presentación, la descripción detallada usa términos como "determinar" y "seleccionar" para describir las operaciones de ordenador en un entorno informático. Estos términos son abstracciones de alto nivel para las operaciones realizadas 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 descodificador de vídeo generalizado
La fig. 4 es un diagrama de bloques de un codificador de vídeo generalizado (400) y la fig. 5 es un diagrama de bloques de un descodificador de vídeo generalizado (500).
La relación mostrada entre los módulos situados dentro del codificador y el descodificador indican el flujo principal de información en el codificador y el descodificador; las otras relaciones no se muestran por motivos de sencillez. En particular, las fig. 4 y 5 no muestran normalmente la información lateral que indica los ajustes, modos, tablas, etc., del codificador usados para una secuencia de vídeo, una trama, un macrobloque, un bloque, etc. Dicha información lateral se envía en el flujo de bits de salida, normalmente después de la codificación entrópica de la información lateral. El formato del flujo de bits de salida puede ser un formato de Windows Media Video u otro formato.
El codificador (400) y el descodificador (500) están basados en bloques y usan un formato de macrobloque 4:2:0, incluyendo cada macrobloque cuatro bloques de luminancia de 8 x 8 (tratados a veces como un macrobloque de 16 x 16) y dos bloques de crominancia de 8 x 8 (por ejemplo, un bloque U, un bloque V). Alternativamente, el codificador (400) y el descodificador (500) se basan en objetos, usan un formato diferente de macrobloque o de bloque o realizan operaciones sobre conjuntos de píxeles de tamaño o configuración diferentes a los bloques de 8 x 8 y a los macrobloques de 16 x 16.
Dependiendo de la implementación y del tipo de compresión deseado, los módulos del codificador o descodificador pueden añadirse, omitirse, dividirse en múltiples módulos, combinados con otros módulos, y/o sustituidos por módulos similares. En formas de realización alternativas, unos codificadores o descodificadores con diferentes módulos y/u otras configuraciones de módulos realizan una o más de las técnicas descritas.
A. Codificador de vídeo
La fig. 4 es un diagrama de bloques de un sistema general codificador de vídeo (400). El sistema codificador (400) recibe una secuencia de tramas de vídeo que incluye una trama actual (405) y produce información de vídeo comprimida (495) como salida. Las formas de realización particulares de codificadores de vídeo usan normalmente una variación o versión suplementada del codificador generalizado (400).
El sistema codificador (400) comprime tramas predichas y tramas clave. Por motivos de presentación, la fig. 4 muestra un camino para las tramas clave a través del sistema codificador (400) y un camino para las tramas predichas delanteras. Muchos de los componentes del sistema codificador (400) se usan para comprimir tanto las tramas clave como las tramas predichas. Las operaciones exactas realizadas por esos componentes pueden variar dependiendo del tipo de información que se esté comprimiendo.
Una trama predicha (también llamada trama p, trama b para la predicción bidireccional o trama intercodificada) se representa en términos de predicción (o diferencia) con respecto a otra u otras tramas. Un residuo de predicción es la diferencia entre lo que se predijo y la trama original. Por el contrario, una trama clave (también llamada trama i o trama intracodificada) se comprime sin referencia a otras tramas.
Si la trama actual (405) es una trama predicha delantera, un estimador de movimiento (410) estima el movimiento de los macrobloques u otros conjuntos de píxeles de la trama actual (405) con respecto a la trama de referencia, que es la trama anterior reconstruida (425) almacenada en el almacén de tramas (420). En formas de realización alternativas, la trama de referencia es una trama posterior, o la trama actual se predice bidireccionalmente. El estimador de movimiento (410) produce como información lateral información de movimiento (415), como vectores de movimiento. Un compensador de movimiento (430) aplica la información de movimiento (415) a la trama anterior reconstruida (425) para formar una trama actual compensada en movimiento (435). Sin embargo, la predicción es raramente perfecta, y la diferencia entre la trama actual compensada en movimiento (435) y la trama actual original (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 de frecuencia (es decir, espectral). Para tramas de vídeo basadas en bloques, el transformador de frecuencia (460) aplica una transformada discreta del coseno ["TDC"] o una variante de TDC a los bloques de datos del residuo de predicción del movimiento, produciendo bloques de coeficientes de TDC. Alternativamente, el transformador de frecuencia (460) aplica otra transformada convencional de frecuencia, como una transformada de Fourier, o usa el análisis de ondículas o de sub-banda. En algunas formas de realización, el transformador de frecuencia (460) aplica una transformada de la frecuencia a bloques de residuos de predicción espacial para tramas clave. El transformador de frecuencia (460) puede aplicar transformadas de frecuencia de 8 x 8, 8 x 4, 4 x 8 o de otro tamaño.
A continuación, un cuantificador (470) cuantifica 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 según una base entre trama y trama o de otro tipo. 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 usa transformaciones de frecuencia. Además de cuantificación adaptativa, el codificador (400) puede usar descarte de tramas, filtrado adaptativo u otras técnicas de control de la
tasa.
Cuando se necesita una trama actual reconstruida para la subsiguiente estimación/compensación de movimiento, un cuantificador inverso (476) realiza una cuantificación inversa sobre los coeficientes de los datos espectrales cuantificados. A continuación, un transformador de frecuencia inverso (466) realiza la inversa de las operaciones del transformador de frecuencia (460), produciendo un residuo de predicción reconstruido (para una trama predicha) o una trama clave reconstruida. Si la trama actual (405) era una trama clave, se toma la trama clave reconstruida como trama actual reconstruida (no mostrada). Si la trama actual (405) era una trama predicha, se añade el residuo de predicción reconstruido a la trama actual compensada en movimiento (435) para formar la trama actual reconstruida. El almacén de tramas (420) almacena la trama actual reconstruida para usarla en la predicción de la siguiente trama. En algunas formas de realización, el codificador aplica un filtro de desbloqueo a la trama reconstruida para suavizar adaptativamente las discontinuidades de los bloques de la trama.
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). 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, codificación LZ, codificación de tipo diccionario y combinaciones de las anteriores. El codificador entrópico (480) usa normalmente 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 la memoria intermedia (490). Se realimenta un indicador del nivel de la memoria intermedia hacia los módulos adaptativos de la tasa de bits. La información de vídeo comprimida (495) se extrae de la memoria intermedia (490) con una tasa de bits constante o relativamente constante y se almacena 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 de la memoria intermedia (490), la información de vídeo comprimida (495) puede someterse 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) datos de detección y corrección de errores.
B. Descodificador de vídeo
La fig. 5 es un diagrama de bloques de un sistema general descodificador de vídeo (500). El sistema descodificador (500) recibe información (595) de una secuencia comprimida de tramas de vídeo y produce una salida que incluye una trama reconstruida (505). Las formas de realización particulares de descodificadores de vídeo usan normalmente una variación o versión suplementada del descodificador generalizado (500).
El sistema descodificador (500) descomprime tramas predichas y tramas clave. Por motivos de presentación, la fig. 5 muestra un camino para las tramas clave a través del sistema descodificador (500) y un camino para las tramas predichas delanteras. Muchos de los componentes del sistema descodificador (500) se usan para descomprimir tanto las tramas clave como las tramas predichas. Las operaciones exactas realizadas por esos componentes pueden variar dependiendo del tipo de información que se esté comprimiendo.
Una memoria intermedia (590) recibe la información (595) para la secuencia de vídeo comprimida y deja disponible la información recibida para el codificador entrópico (580). La memoria intermedia (590) recibe normalmente la información a una velocidad que es bastante constante a lo largo del tiempo, e incluye una memoria intermedia con variación de retardo para suavizar las variaciones a corto plazo en el ancho de banda o la transmisión. La memoria intermedia (590) puede incluir también una memoria intermedia de reproducción y otras memorias tampón. Alternativamente, la memoria intermedia (590) recibe la información a una tasa variable. Antes o después de la memoria intermedia (590), la información de vídeo comprimida puede someterse a una descodificación de canal y procesarse para detección y corrección de errores.
El codificador entrópico (580) descodifica los datos cuantificados codificados en entropía, así como información lateral codificada en entropía (por ejemplo, información de movimiento (515), el intervalo de cuantificación), aplicando normalmente la inversa de la codificación entrópica realizada en el codificador. Las técnicas de descodificación entrópica incluyen descodificación aritmética, descodificación diferencial, descodificación Huffman, descodificación por longitud de serie, descodificación LZ, descodificación de tipo diccionario y combinaciones de las anteriores. El codificador entrópico (580) usa frecuentemente diferentes técnicas de descodificación para diferentes clases de información (por ejemplo, coeficientes CC, coeficientes CA, diferentes clases de información lateral) y puede elegir entre múltiples tablas de códigos dentro de una técnica de descodificación particular.
Si la trama reconstruida (505) que debe reconstruirse es una trama predicha delantera, un compensador de movimiento (530) aplica la información de movimiento (515) a una trama de referencia (525) para formar una predicción (535) de la trama reconstruida (505) que se esté reconstruyendo. Por ejemplo, el compensador de movimiento (530) usa un vector de movimiento de macrobloque para encontrar un macrobloque en la trama de referencia (525). Un almacén de tramas (520) almacena las tramas reconstruidas anteriores para usarlas como tramas 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 descodificador (500) reconstruye también los residuos de predicción.
Cuando el descodificador necesita una trama reconstruida para la subsiguiente compensación de movimiento, el almacén de tramas (520) almacena la trama reconstruida para usarla en la predicción de la siguiente trama. En algunas formas de realización, el codificador aplica un filtro de desbloqueo a la trama reconstruida para suavizar adaptativamente las discontinuidades de los bloques de la trama.
Un cuantificador inverso (570) cuantifica inversamente datos descodificados en entropía. En general, el cuantificador inverso aplica una cuantificación escalar uniforme e inversa a los datos descodificados en entropía con un intervalo que varía según una base entre trama y trama o de otro tipo. Alternativamente, el cuantificador inverso aplica a los datos otro tipo de cuantificación inversa, por ejemplo, una cuantificación no uniforme, vectorial o no adaptativa, o directamente cuantifica inversamente los datos del dominio espacial en un sistema descodificador que no usa transformaciones de frecuencia inversas.
Un transformador de frecuencia inverso (560) convierte los datos de dominio de frecuencia, cuantificados, en información de vídeo de dominio espacial. Para tramas de vídeo basadas en bloques, el transformador de frecuencia inverso (560) aplica una TDC inversa ["TDCI"] o una variante de TDCI sobre los bloques de coeficientes de TDC, produciendo datos del residuo de predicción del movimiento. Alternativamente, el transformador de frecuencia (560) aplica otra transformada de frecuencia inversa convencional, como una transformada de Fourier, o usa una síntesis de ondícula o de sub-banda. En algunas formas de realización, el transformador de frecuencia inverso (560) aplica una transformada de frecuencia inversa a bloques de residuos de predicción espacial en tramas clave. El transformador de frecuencia inverso (560) puede aplicar transformadas de frecuencia inversas de 8 x 8, 8 x 4, 4 x 8 u otro tamaño.
III. Estimación y compensación de movimiento
La codificación intertrama aprovecha las redundancias temporales entre tramas para obtener la compresión. Las reducciones de redundancia temporal usan tramas codificadas previamente como predictores cuando se codifica la trama actual. En las formas de realización descritas a continuación, un codificador de vídeo aprovecha las redundancias temporales en las secuencias de vídeo típicas para codificar la información usando un menor número de bits. El codificador de vídeo usa estimación del movimiento para parametrizar el movimiento de un bloque, un macrobloque u otro conjunto de píxeles de una trama predicha con relación a una trama de referencia (por ejemplo, una trama anterior previamente codificada). El codificador de vídeo (así como un descodificador correspondiente) usa la compensación del movimiento para reconstruir la trama predicha usando la información de movimiento y la trama de referencia.
La compensación de movimiento es el proceso de generar una predicción para una trama de vídeo (es decir, la trama predicha) desplazando la trama de referencia. Según se observó anteriormente, la predicción se hace para un bloque, un macrobloque u otro conjunto de datos de la trama de referencia. Además, normalmente el desplazamiento es rectilíneo y constante sobre la totalidad del mosaico que se está prediciendo. Dicho 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 el mosaico que se está prediciendo actualmente y la localización correspondiente en la trama 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 un mosaico de 8 x 8 píxeles, un macrobloque es un mosaico de 16 x 16 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 descodificador aplican una o más de las técnicas descritas a mosaicos de diferente tamaño o a mosaicos 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 habitualmente en términos de desplazamiento de píxeles, a menudo con una precisión de subpíxel. Los desplazamientos subpíxel se realizan filtrando la trama de referencia usando unos filtros de compensación del movimiento definidos adecuadamente. 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 fraccionaria 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 bloque de la trama 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 uno o más filtros correspondientes al desplazamiento subpíxel a las localizaciones de píxel entero de la trama de referencia. Por tanto, el filtro de compensación del movimiento está 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 píxel fraccionarias basándose en valores de referencia en localizaciones de píxel entero. En general, la calidad de la interpolación aumenta con el soporte del filtro. Algunas formas de realización usan filtros separables de 2 vías y 4 vías (en cada dirección), que corresponden a interpoladores bilineales y bicúbicos.
En algunas formas de realización, los filtros de compensación de movimiento usan aritmética de números enteros y división implementada como un desplazamiento de bit. El parámetro R de control de redondeo toma el valor 0 ó 1 y determina la dirección del redondeo para esas divisiones. Este parámetro de control de redondeo puede ajustarse a una constante, señalada externamente, o puede obtenerse implícitamente a partir de una información codificada anterior.
La fig. 6 muestra localizaciones de píxel entero y de subpíxel en una trama de referencia (600) usadas durante la estimación y compensación del movimiento subpíxel en algunas formas de realización. A intervalos de un cuarto de píxel en cada dirección, la trama de referencia (600) incluye unas localizaciones subpíxel para las cuales un codificador o descodificador puede interpolar valores de píxel para un desplazamiento particular. Las posiciones enteras a-p de la trama de referencia (600) se muestran como círculos sombreados en la fig. 6, mientras que las posiciones de un cuarto de píxel y de medio píxel interpuestas entre las localizaciones enteras se muestran mediante 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
1
La posición de tres cuartos de píxel ilustrada en P_{8} puede considerarse un caso especial de la posición de un cuarto de píxel; es un desplazamiento de un cuarto de píxel desde una localización de un píxel completo. Son posibles otras posiciones de tres cuartos de píxel, pero no se muestran. Las posiciones subpíxel P_{0} a P_{8} se citan en descripciones posteriores de filtros de interpolación. En formas de realización alternativas, el codificador y el descodificador interpolan valores en posiciones subpíxel adicionales o diferentes, por ejemplo, las situadas en un intervalo distinto a un cuarto de píxel en cada dirección.
A. Filtros de interpolación bicúbicos aproximados
Para la interpolación subpíxel en algunas formas de realización, un codificador y descodificador de vídeo usa filtros lineales/bilineales y/o filtros cúbicos/bicúbicos que se definen del modo siguiente.
Un interpolador lineal es un polinomio lineal, o de primer orden, en una dimensión que usa valores conocidos en los dos puntos de retícula 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 usa valores conocidos en los cuatro puntos de retícula 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 normalmente de modo indistinto 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 realizada en una dimensión se replica en la otra dimensión, y por tanto cada fase de filtrado se denomina filtrado bilineal. Los términos cúbico y bicúbico son igualmente indistintos.
En este documento, los términos lineal y bilineal se usan de modo indistinto para describir el filtrado en una, dos o más dimensiones. Análogamente, los términos cúbico y bicúbico se usan de modo indistinto 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 se refieren como filtros bicúbicos porque, en la aplicación común de interpolación en dos fases para las tramas de vídeo de referencia, los filtros se usan en operaciones replicadas para las dos dimensiones de la interpolación en dos fases. Más generalmente, la dimensionalidad del filtrado se conoce por el contexto.
En algunas formas de realización, un codificador y descodificador usa filtros bicúbicos aproximados para interpolar valores en localizaciones subpíxel. Por ejemplo, el codificador y descodificador 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 de desplazamiento de una trama de referencia como la mostrada en la fig. 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 introducida potencialmente 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. Esta operación da como resultado una simple división por 2 elevado a la potencia del número de bits desplazados (por ejemplo, un desplazamiento de 3 a la derecha da como resultado 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}:
(-7e + 105f + 35g - 5h) >> 7
(14)
Los valores de los coeficientes suman 128, y el producto del filtrado se desplaza 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 rendimiento, pero tienen una resolución más baja, según se muestra en la siguiente ecuación.
\quad
(-7e + 105f + 35g - 5h) >> 7
\quad
= (-3,5e + 52,5f + 17,5g - 2,5h) >> 6
\approx (-4e + 53f + 18g - 3h) >> 6
(15).
En muchos casos, el uso de un filtro bicúbico puro da como resultado una pérdida de bits de precisión en la interpolación multifase, por lo que el factor de normalización para el filtro bicúbico aproximado se reduce como mínimo a ½ (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) se basan en redondear el filtro bicúbico verdadero, después de haber tenido en cuenta el comportamiento del dominio de frecuencia (por ejemplo, para conservar la información de alta frecuencia) y el comportamiento empírico (por ejemplo, para alcanzar la menor distorsión dado una cierta tasa de bits). Específicamente, los filtros F_{2} y F_{3} incluyen todavía 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 de coeficientes del filtro se ajustan para que sumen 64, lo que facilita la implementación usando aritmética de 16 bits a la vez que se aproximan al filtro bicúbico de alta resolución. Pueden usarse otros valores de coeficientes del filtro que suman 64, a la vez que se aproximan todavía al filtro bicúbico. 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 tiene buena correlación (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 entre los vectores para los filtros (que deseablemente será lo más próximo posible a 1), 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 filtro del filtro bicúbico aproximado de 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 fig. 7 muestra generalmente las localizaciones de píxel entero con los valores de píxel que se usan para calcular píxeles interpolados para cada uno de los casos correspondientes a los filtros bicúbicos tratados en las ecuaciones (11) a (13). P denota 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 fig. 7 muestra una interpolación horizontal, pero las mismas operaciones y configuración de posiciones son aplicables a la interpolación vertical.
En formas de realización alternativas, un codificador y un descodificador usan filtros de interpolación distintos y/o adicionales. Por ejemplo, el codificador y el descodificador 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 fig. 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) a (3).
B. Interpolación unidimensional
En diversas posiciones subpíxel, el codificador y el descodificador de algunas formas de realización calculan un valor interpolado solamente en una dimensión. Según se ilustra en la fig. 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:
F_{1}: (-1I_{1} + 9I_{2} + 9I_{3} - 1I_{4} + 8 - r) >> 4
(16),
F_{2}: (-4I_{1} + 53I_{2} + 18I_{3} - 3I_{4} + 32 - r) >> 6
(17), y
F_{3}: (-3I_{1} + 18I_{2} + 53I_{3} - 4I_{4} + 32 - r) >> 6
(18).
en las que el valor r controla el redondeo. El valor r depende del parámetro binario R de control de redondeo a nivel de trama y de la dirección de interpolación, del modo siguiente:
100
Para ilustrar mejor la interpolación unidimensional, en la fig. 6, P_{1} y P_{5} muestran posiciones de medio píxel en la trama de referencia (600) que requieren interpolación en sólo una dimensión (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}:
P_{1} = (-1e + 9f + 9g - 1h + 8 - r) >> 4
(20), y
P_{5} = (-1b + 9f + 9j - 1n + 8 - r) >> 4
(21).
Análogamente, en la fig. 6, P_{0} y P_{2} representan posiciones de un cuarto de píxel en la trama de referencia (600) que requieren interpolación en una dimensión únicamente. 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}:
P_{0} = (-4e + 53f + 18g - 3h + 32 - r) >> 6
(22), y
P_{2} = (-4b + 53f + 18j - 3n + 32 - r) >> 6
(23).
El filtro bicúbico aproximado F_{2} de un cuarto de píxel también puede usarse, 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
Alternativamente, un codificador y un descodificador 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 descodificador usan filtros con más o menos coeficientes de filtro, diferentes coeficientes de filtro, diferente redondeo o sin redondeo.
C. Interpolación multidimensional
En algunas formas de realización se realiza la interpolación en posiciones subpíxel que están separadas en dos dimensiones. En la fig. 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 forma de realización, que corresponde al procedimiento de interpolación (800) mostrado en la fig. 8, dos localizaciones subpíxel bidimensionales se interpolan 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 realiza usando uno o más filtros F_{1}, F_{2} o F_{3} especificados anteriormente en las ecuaciones (16) a (18). En la forma de realización ilustrada en la fig. 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 permitida por la aritmética de 16 bits.
En la fig. 8, primero se realiza el filtrado vertical, seguido por el filtrado horizontal. En algunas arquitecturas se mejora el rendimiento empezando por el filtrado vertical. En otras formas de realización, el orden del filtrado es diferente. Por ejemplo, la interpolación se realiza en dirección horizontal antes que en dirección vertical. O bien 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 bits de 8 bits, y tienen un intervalo dinámico con 256 valores. Los valores intermedios (820) tienen una profundidad de bits de 16 bits, para un intervalo dinámico de 65.536 valores. En formas de realización alternativas, los valores de entrada, de salida e intermedios tienen diferente profundidad de bits (por ejemplo, superior).
\newpage
En una primera fase (810), se aplica un filtro vertical adecuado (F_{v}) (812) 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 se desplace 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 la que 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 sobre una base de trama a trama. Así, la regla del redondeo incluye redondear con un control de redondeo (813) alternante por fases y un desplazamiento de bits (814).
El desplazamiento a la derecha provoca potencialmente una pérdida de resolución, por lo que se difiere al menos una parte del desplazamiento hasta unas fases 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 filtro de la primera fase (por ejemplo, el desplazamiento para el filtro bicúbico aproximado es inferior a 6 bits), pero suficiente para garantizar que los resultados intermedios del filtrado subsiguiente se mantengan dentro del intervalo dinámico de los valores intermedios (por ejemplo, 65.536 valores posibles para las palabras de 16 bits). En comparación con el desplazamiento completo, este desplazamiento acortado mantiene la precisión de los valores de píxel intermedios (820) después de la primera fase (810) de interpolación. Los valores de píxel intermedios (820) tienen un intervalo dinámico de y bits, en el que y es mayor que 8 bits. La magnitud de desplazamiento realizado en la primera fase puede depender de la profundidad de bits disponible y de los coeficientes de los filtros de interpolación. Por ejemplo, en la implementación ilustrativa 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 fig. 6 y unos valores de entrada dentro del intervalo de 0...255 (8 bits). El intervalo 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 filtro. El filtrado horizontal subsiguiente, aplicando a los valores intermedios los coeficientes del filtro bicúbico aproximado (con expansión adicional), puede producir unos valores que estén fuera del intervalo dinámico de 16 bits, provocando un subdesbordamiento o un desbordamiento. Así, los valores intermedios se desplazan lo suficiente para garantizar que el filtrado horizontal subsiguiente produzca un valor que esté dentro del intervalo dinámico de 16 bits. Para P_{3}, el primer grado de desplazamiento es de cinco bits, y entonces el intervalo 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 intervalo 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 intervalo dinámico de menos de 16 bits. Así, el desplazamiento acortado se calcula de manera que se utilice totalmente el límite de la palabra de 16 bits, pero garantizando que éste no se supere durante la segunda fase (830) de
interpolación.
En la segunda fase (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 la que S es el resultado filtrado horizontalmente, y R es el valor de control de redondeo que alterna en una base de trama a trama. Al igual que la regla de redondeo de la primera fase, la regla de redondeo de la segunda fase incluye redondear con un control de redondeo (833) alternante por fases y un desplazamiento de bits (834). Teniendo en cuenta el desplazamiento diferido de la primera fase, la magnitud de desplazamiento de la segunda fase supera normalmente a la esperada normalmente para el filtro horizontal seleccionado, y se calcula para que el valor de salida tenga el intervalo 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 intervalo (por ejemplo, 255 para una salida de 8 bits). En estos casos, con valores de salida de 8 bits, el codificador y el descodificador recortan el valor de salida (836) para que quede dentro del intervalo aceptado. En particular, se fijan los subdesbordamientos a 0 y los desbordamientos a 255. Después de la limitación se produce un valor interpolado de 8 bits (838).
En la fig. 8, el desplazamiento de la segunda fase es de 7 bits. Así, un valor de salida filtrado que tenga 9 bits se conserva. Por ejemplo, siguiendo con el ejemplo anterior para P_{3}, el intervalo del valor de salida filtrado es de -81 a 316, que tiene un intervalo dinámico de aproximadamente 8,6 bits (que se redondea a 9 en la implementación). Aunque el intervalo válido de los datos interpolados es de sólo 8 bits, el bit adicional de encabezamiento proporciona la información de desbordamiento y subdesbordamiento. En otras palabras, si el bit más significativo (es decir, el bit de "signo") está activo, existe un subdesbordamiento o un desbordamiento. Para saber específicamente cuál de los dos se ha producido hay que mirar los 8 bits de "mantisa" restantes.
Las fig. 9 a 11 ilustran también la interpolación bidimensional descrita anteriormente e ilustrada en la fig. 8. La fig. 9 muestra la posición subpíxel P_{7} (medio píxel horizontal, medio píxel vertical) de la trama de referencia (600) de la fig. 6. Para interpolar el valor de P_{7} se usan dos filtros de interpolación bicúbicos de medio píxel. En la primera fase, se calculan los valores intermedios V_{1}-V_{4} a partir de posiciones próximas de píxel entero mediante un filtro bicúbico de medio píxel que tiene la forma general:
V_{inter} = (-1x_{1} + 9x_{2} + 9x_{3} - 1x_{4})
(27).
Así,
V_{1} = (-1a + 9e + 9i - 1m)
(28),
V_{2} = (-1b + 9f + 9j - 1n)
(29),
V_{3} = (-1c + 9g + 9k - 1o)
(30), y
V_{4} = (-1d + 9h + 9l - 1p)
(31).
Una vez añadido el valor de R_{v} apropiado, se desplazan los resultados un bit a la derecha. En la segunda fase, los valores intermedios V_{1}-V_{4} son usados por un filtro de medio píxel para calcular el valor de píxel en P_{7}. En particular, se usa un filtro de medio píxel que tiene la forma siguiente:
(32).P_{7} = (-1V_{1} + 9V_{2} + 9V_{3} - 1V_{4})
Según se expuso anteriormente, el resultado de la segunda fase se desplaza siete bits a la derecha para obtener un valor de 9 bits. El valor de 9 bits incluye ocho bits de mantisa y un bit de signo. Después se realiza toda limitación necesaria para compensar el desbordamiento o el subdesbordamiento, y se obtiene un valor final interpolado de 8 bits.
La fig. 10 muestra la posición subpíxel P_{4} (medio píxel horizontal, un cuarto de píxel vertical) de la trama de referencia (600) de la fig. 6. Para interpolar el valor de P_{4} se usa un filtro de interpolación bicúbico de un cuarto de píxel y un filtro de medio píxel. En la primera fase 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 trama de referencia (600) de la misma manera descrita anteriormente con respecto al cálculo de P_{7}. Después de añadir el valor de R_{v} apropiado, los resultados se desplazan tres bits a la derecha. En la segunda fase, los valores intermedios V_{1}-V_{4} son usados por un filtro de medio píxel para calcular el valor de píxel en P_{4}. En particular se usa 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 fase se desplaza siete bits a la derecha para obtener un valor de 9 bits, se realiza cualquier limitación necesaria y se extrae un valor interpolado final de 8 bits.
La fig. 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 usa 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 fase se usa un filtro bicúbico de medio píxel. Las localizaciones de píxel intermedias están representadas en la fig. 10 en V_{5}-V_{8}. Durante la segunda fase, un filtro bicúbico de un cuarto de píxel usa 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 forma siguiente:
(35).P_{6} = (-4V_{5} + 53V_{6} + 18V_{7} - 3V_{8})
La magnitud del desplazamiento en la primera y en la segunda fase es igual que en la técnica para calcular P_{4} (es decir, el desplazamiento en la primera fase es tres y el desplazamiento en la segunda fase es siete).
La fig. 11 muestra una posición subpíxel P_{3} (un cuarto de píxel horizontal, un cuarto de píxel vertical) de la trama de referencia (600) de la fig. 6. Para interpolar el valor de P_{3} se usan dos filtros de interpolación bicúbicos de un cuarto de píxel. En la primera fase se calculan los valores intermedios V_{1}-V_{4} a partir de unas posiciones próximas de píxel entero usando 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 trama de referencia (600) de la misma manera descrita anteriormente con respecto al cálculo de P_{4}. Después de añadir el valor de R_{v} apropiado, se desplazan los resultados cinco bits a la derecha. En la segunda fase, los valores intermedios V_{1}-V_{4} son usados por un filtro de medio píxel para calcular el valor de píxel en P_{3}. En particular, se usa 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 fase se desplaza siete bits a la derecha para obtener un valor de 9 bits, se realiza cualquier limitación necesaria y se produce un valor interpolado final de 8 bits.
Aunque no están representados en las fig. 9 a 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 procedimientos descritos anteriormente usando 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 formas de realización se usan filtros bilineales o combinaciones de filtros bilineales y bicúbicos para interpolar los valores en las posiciones subpíxel de muestra. El uso de filtros bilineales reduce generalmente la magnitud del desplazamiento realizado (después de la primera fase y en total) porque los coeficientes introducen menos expansión que con los filtros bicúbicos. En una implementación que usa filtros bilineales y valores intermedios de 16 bits, por ejemplo, no se realiza ningún desplazamiento en la primera fase, elevando así al máximo el uso del límite de la palabra de 16 bits, y se realiza un desplazamiento a la derecha de 4 bits después de la última fase. Análogamente, la limitación puede diferirse hasta la última fase.
Uno de los principios que subyacen en los procedimientos descritos anteriormente es el uso de la mayor precisión posible en cada fase de filtrado, mientras se mantiene dentro de un límite deseado W del "tamaño de palabra". Si el valor de salida tiene un intervalo dinámico de D bits, y se descartan L bits en la última fase, la salida de la última fase de filtrado puede llegar a D + L + 1 bits, en lo que el último bit se usa para señalar los subdesbordamientos y desbordamientos. Trabajando hacia atrás, si la última fase de filtrado da como resultado una expansión de k bits, entonces la entrada a la última fase debería estar dentro de D + L - k. Así, 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 fase deberá ser D + L - k = W - k - 1 bits.
La lógica anterior puede aplicarse recursivamente a la penúltima fase de filtrado, y así sucesivamente. De hecho, los límites pueden estrecharse usando bits fraccionarios para representar los intervalos distintos de 2^{k} y los factores de expansión.
Las fig. 12 a 15 son diagramas que ilustran las diversas técnicas que se han descrito antes combinadas, pero que también son aplicables por separado a interpolación multifase. Las fig. 12 a 15 no muestran las diversas maneras con que puede usarse la interpolación multifase (1200, 1300, 1400, 1500) respectiva en conjunción con otras técnicas de interpolación multifase.
Además, aunque cada una de las fig. 12 a 15 muestra dos fases, las técnicas de interpolación multifase (1200, 1300, 1400, 1500) ilustradas en las fig. 12 a 15 pueden incluir más fases. Más generalmente, las técnicas de interpolación multifase (1200, 1300, 1400, 1500) pueden implementarse con cualquier tipo de filtro separable en múltiples dimensiones, así como con filtros arbitrarios implementados según una estructura en cascada, escalera, o retícula.
Las fig. 12 a 15 muestran los valores de entrada, valores de salida y filtros generalizados que se usan en la interpolación multifase. La elección específica de la profundidad de bits para los valores de entrada de la primera fase, los valores de salida de la última fase y los valores intermedios puede extenderse arbitrariamente de acuerdo con las especificaciones técnicas de una arquitectura o aplicación objeto. Por ejemplo, los valores de entrada pueden ser valores de píxel de 8 bits en posiciones de píxel entero de tramas de referencia, los valores de salida pueden ser valores de píxel de 8 bits en posiciones subpíxel de tramas de referencia y los filtros pueden ser filtros bicúbicos regulares y aproximados (según se describió anteriormente con referencia a las fig. 6 a 8). Alternativamente, los valores de entrada y/o los valores de salida tienen intervalos dinámicos con diferente profundidad de bits, o se usan filtros
diferentes.
Un componente como el codificador o descodificador descrito con referencia a las fig. 4 y 5, respectivamente, puede realizar la interpolación multifase (1200, 1300, 1400, 1500). Alternativamente, otro codificador o descodificador, u otro tipo de componente, puede realizar la interpolación multifase (1200, 1300, 1400, 1500).
La fig. 12 muestra un diagrama de interpolación multifase (1200) con intervalo dinámico (en bits) mejorado para valores interpolados intermedios. En la primera fase (1210), el componente aplica (1212) un primer filtro F_{1} a uno o más valores de entrada (1211) con intervalo de x bits, produciendo uno o más valores intermedios (1220) con intervalo de y bits, en los que y es mayor que x. Por ejemplo, los valores intermedios de y bits son valores de píxel que tienen un intervalo dinámico de más de 8 bits, y los valores de entrada de x bits tienen un intervalo dinámico de 8 bits.
En cada una de las cero o más fases intermedias (1222), que no se muestran con detalle, el componente aplica un filtro a los valores intermedios (1220) con intervalo de y bits. La salida de las fases intermedias es uno o más valores intermedios (1229) con intervalo de z bits, en los que z es mayor que x. (En las fig. 12 a 15, si la última fase es la segunda fase, los valores intermedios que salen de la primera fase son los valores intermedios de entrada a la última fase).
En la última fase (1230), el componente aplica (1232) un último filtro F_{L} al uno o más valores intermedios (1229) con intervalo de z bits. La salida final es un valor de salida (1234) con intervalo de x bits. Para cada una de las técnicas de interpolación multifase (1200, 1300, 1400, 1500), si es necesario, el componente repite la interpolación multifase (1200, 1300, 1400, 1500) para valores de salida adicionales. En la interpolación repetida, el componente puede reutilizar ciertos valores intermedios calculados en interpolaciones anteriores.
La fig. 13 muestra un diagrama de interpolación multifase (1300) con limitación omitida. Al diferir la limitación, por ejemplo, se acelera el cálculo, dado que el componente deja de comparar cada valor intermedio con los extremos superior e inferior del intervalo. Al diferir la limitación también se conserva la precisión de los valores intermedios.
En la primera fase (1310), el componente aplica (1312) un primer filtro F_{1} a uno o más valores de entrada (1311) con intervalo de x bits. Después de la aplicación del primer filtro F_{1} no se realiza ninguna limitación. Así, el uno o más valores intermedios (1320) que salen del primer filtro F_{1} pueden tener un intervalo 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 intervalo 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 fases intermedias (1322), que no se muestran con detalle, el componente aplica un filtro al valor o valores intermedios (1320) no limitados. También puede omitirse la limitación en las cero o más fases intermedias (1322). Los valores intermedios (1329) que salen de las cero o más fases intermedias (1322) se introducen en una última fase (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 limita (1334) y se produce un valor (1336) con un intervalo de 8 bits.
La fig. 14 muestra un diagrama de interpolación multifase (1400) con desplazamiento de bits diferido. En la primera fase (1410), el componente aplica (1412) un primer filtro F_{1} a uno o más valores de entrada (1411) con intervalo de x bits. En conjunción con o después de la aplicación del primer filtro F_{1} se realiza un desplazamiento acortado (1414). El desplazamiento acortado (1414) es menor que el requerido para garantizar un valor de salida con un intervalo de x bits (en vista del factor de expansión de los coeficientes del primer filtro F_{1}) y, por tanto, menor que el asociado normalmente al primer filtro F_{1}. En consecuencia, el desplazamiento acortado (1414) produce uno o más valores intermedios que tienen un intervalo dinámico (de y bits) mayor que x bits. Por ejemplo, los valores de entrada tienen un intervalo dinámico de 8 bits, y los valores intermedios tienen un intervalo dinámico de más de 8 bits.
En cada una de las cero o más fases 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) que tienen un intervalo dinámico de z bits (mayor que x bits) salen de las cero o más fases intermedias (1422) y, en una última fase (1430), el componente aplica (1432) un último filtro F_{L} a los valores (1429). La salida final del último filtro F_{L} se desplaza con una magnitud superior a la asociada normalmente al último filtro F_{L}, contrayendo así el intervalo dinámico del valor de salida (1434) a una profundidad de bits especificada. Por ejemplo, el intervalo dinámico (en bits) del valor de salida (1434) es igual a x o x + 1. En una implementación, el desplazamiento de la primera fase y de cualquier fase intermedia se difiere lo más posible hasta la última fase. La magnitud con que se difiere el desplazamiento puede depender de la profundidad de bits disponible para los cálculos intermedios y de los factores de expansión de los filtros respectivos.
La fig. 15 muestra una técnica de interpolación multifase (1500) que usa un control de redondeo alternante por fases. Las múltiples fases 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 la acumulación de errores de redondeo entre trama y trama en ciertas secuencias de vídeo. 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 trama y trama, lo que puede provocar artefactos perceptibles. El control de redondeo alternante por fases 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 alternante por fases antes del desplazamiento de bits a la derecha. El desplazamiento de bits a la derecha produce esencialmente una división y un truncamiento del valor desplazado a la derecha. Añadir un valor de redondeo antes del desplazamiento hace que el valor desplazado se redondee hacia arriba o hacia abajo (al valor entero más cercano), en vez de redondearse siempre hacia abajo (truncamiento). 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 fases 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 número entero superior inmediato) de los valores que tengan un componente fraccionario igual a 0,5 o más (después de una división correspondiente al desplazamiento de bits). En caso contrario, dichos valores serían truncamientos (al número entero inferior inmediato) por el desplazamiento a la derecha. Con independencia de la suma, los valores que tengan un componente fraccionario inferior a 0,5 (después de una división correspondiente al desplazamiento de bits) siguen siendo truncamientos (al número entero inferior inmediato) por el desplazamiento a la derecha. A continuación, el control de redondeo cambia la dirección del redondeo para ciertos valores marginales. Por ejemplo, en cada una de las múltiples fases se vuelve a ajustar la salida del filtrado restando 0 ó 1 (el valor del control de redondeo alternante) 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 fraccionario de 0,5 (después de una división correspondiente al desplazamiento de bits). Cuando se resta 1, dichos valores marginales se redondean hacia abajo. En caso contrario, dichos valores marginales se redondean hacia arriba.
Cada una de las múltiples fases usa un valor de control de redondeo que alterna entre 0 y 1 antes de la interpolación multifase, de manera que las distintas fases se alternan en el modo en que se aplica el valor de control de redondeo. Alternativamente, la técnica de interpolación multifase (1500) usa un valor de control de redondeo que se alterna por sí mismo entre fase y fase.
En la primera fase (1510) de la fig. 15, el componente aplica (1512) un primer filtro F_{1} a uno o más valores de entrada (1511) con intervalo de x bits. En conjunción con o después de la aplicación del primer filtro F_{1} se realiza un redondeo (1514) sobre la salida del primer filtro F_{1}. El redondeo (1514) se ajusta por control de redondeo alternante por fases. Por ejemplo, en la primera fase (1510), el control de redondeo alternante por fases hace que el valor de salida se redondee hacia arriba al número entero más cercano si el valor de salida es un valor marginal (cuyo valor de salida, en caso contrario, se redondearía hacia abajo). De la primera fase salen uno o más valores intermedios redondeados (1520) que entran en una segunda fase (1530).
En la segunda fase (1530), el componente aplica (1532) un segundo filtro F_{2} al valor o valores intermedios (1520). Se realiza un redondeo (1534) sobre la salida del segundo filtro F_{2}. En conjunción con o después de la aplicación del segundo filtro F_{2}, se realiza un redondeo (1534) con control de redondeo alternante por fases, cuyo control de redondeo provoca el redondeo de los valores marginales en la dirección opuesta a la primera fase. Por ejemplo, en la segunda fase (1530), el control de redondeo alternante por fases hace que el valor de salida se redondee hacia abajo al número entero más cercano si el valor de salida es el valor marginal. De la segunda fase salen uno o más valores intermedios (1536) que pueden usarse en cero o más fases adicionales (1540). Las cero o más fases adicionales (1540) pueden incluir también control de redondeo alternante por fases.
El control de redondeo alternante por fases no se limita a su aplicación en fases consecutivas, sino que puede aplicarse en otras combinaciones diversas de fases. Además, la primera dirección puede depender de una serie de parámetros. Por ejemplo, en un codificador y descodificador de vídeo, la primera dirección puede depender del control de redondeo usado en la trama anterior, o del tipo de trama que esté siendo interpolada (por ejemplo, una trama I, una trama P o una trama B). En otras formas de realización, la primera dirección puede fijarse como una constante, obtenerse implícitamente de una información causal (por ejemplo, de información codificada/descodificada en el pasado), obtenerse usando un generador pseudoaleatorio o señalarse como parte del flujo de bits. El control de redondeo alternante por fases puede aplicarse en la interpolación multifase mediante el uso de cualquiera de una diversidad de filtros de interpolación, incluyendo filtros bilineales, bicúbicos y bicúbicos aproximados.
D. Vectores de movimiento de crominancia
Como los vectores de movimiento de crominancia (croma) se obtienen implícitamente de los vectores colocalizados de movimiento de 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 descodificador sin que la calidad percibida del vídeo codificado disminuya significativamente. Además, el codificador y descodificador puede conmutar entre diferentes modos de redondeo e interpolación para los vectores de movimiento de crominancia. Por ejemplo, un modo realza la calidad del vídeo codificado a expensas de una mayor complejidad de cálculo. Otro modo realza la sencillez del cálculo a expensas de cierta pérdida de calidad.
En una implementación, un codificador y descodificador de vídeo usa 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 crominancia. Así, el codificador y descodificador de vídeo opera selectivamente en uno o dos modos diferentes de redondeo de crominancia, un modo rápido y un modo básico.
La fig. 16 muestra una técnica (1600) para seleccionar entre múltiples modos de redondeo e interpolación de crominancia. Por ejemplo, un codificador o descodificador de vídeo como el descrito anteriormente con referencia a las fig. 4 y 5, respectivamente, realiza esta técnica.
El codificador o descodificador de vídeo determina (1610) si un indicador FASTUVMC de un bit indica el uso de un modo rápido de compensación de movimiento de crominancia (indicador = 1) o un modo básico de compensación de movimiento de crominancia (indicador = 0). Por ejemplo, el indicador es un campo de nivel de secuencia, correspondiente a un ajuste de usuario, que un codificador escribe en un flujo de bits de vídeo codificado y un descodificador lee en el flujo de bits. Alternativamente, el codificador y el descodificador usan más bits para señalizar un redondeo de 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 se señaliza en cualquier otro lugar del flujo de bits y/o se ajusta según unos criterios diferentes.
A continuación, el codificador o descodificador de vídeo realiza una compensación de movimiento de crominancia en modo básico (1620) o modo rápido (1630). Seguidamente 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 usada en la implementación de modo rápido (1630), descrita más adelante, a una ordenación diferente para obtener un nivel de rendimiento deseado con una arquitectura de hardware específica, o se cambia para trabajar con vectores de movimiento de precisiones diferentes. En lugar o además del modo básico (1620) y del modo rápido (1630), el codificador o descodificador puede usar otros modos para el redondeo e interpolación de vectores de movimiento de crominancia.
En una implementación, en modo rápido (por ejemplo, si el indicador de redondeo de crominancia = 1), los vectores de movimiento de 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) se redondean a las posiciones más cercanas de píxel completo, los vectores de movimiento de crominancia que se encuentran en desviaciones de medio píxel se desredondean a la izquierda, y se usa un filtrado bilineal para toda la interpolación de crominancia. En este modo, la velocidad del codificador y del descodificador 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 e 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 descodificación. Dado que esto se realiza sólo en la interpolación de crominancia, la pérdida de codificación y de calidad (especialmente la calidad visible) es insignificante.
En este modo rápido se hace el siguiente nivel de redondeo final sobre los vectores de movimiento de crominancia:
//RndTbl[-3] = -1, RndTbl[-2] = 0, RndTbl[-1] = +1, RndTbl[-2] = 0
\quad
//RndTbl[1] = -1, RndTbl[2] = 0, RndTbl[3] = +1
\quad
cmv_x = cmv_x + RndTbl[cmv_x % 4];
cmv_y = cmv_y + RndTbl[cmv_y % 4]
(39)
en los que cmv_x y cmv_y representan las coordenadas x e y del vector de movimiento de 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í, cuando cmv_x (o cmv_y) es divisible por 4, entonces el vector de movimiento de crominancia tiene una desviación entera. Cuando cmv_x % 4 = +/-2, entonces el vector de movimiento de crominancia tiene una desviación de medio píxel. Y cuando cmv_x % 4 = +/-1 o +/-3, entonces el vector de movimiento de crominancia tiene una desviación de un cuarto de píxel. Como puede verse por la operación de reordenación anterior, las posiciones de un cuarto de píxel se desautorizan mediante el redondeo del vector de movimiento de crominancia a la posición entera más cercana (las posiciones de medio píxel quedan inalteradas por la izquierda). Así, este modo reordena las coordenadas de crominancia a las posiciones de píxel entero y de medio píxel. Para obtener con este modo una aceleración de la velocidad, puede usarse un filtrado bilineal para todas las interpolaciones de 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 usarse independientemente (es decir, como único modo posible).
La fig. 17 es una tabla (1700) que ilustra este modo rápido de redondeo de crominancia. La primera fila (1710) muestra valores del vector de movimiento de luminancia con una precisión de un cuarto de píxel. Aunque los valores del vector de movimiento de luminancia se muestran en términos de su desviación fraccionaria con respecto a valores de píxeles enteros, podrían representarse como valores enteros en los cuales cada entero representara 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 valores del vector de movimiento de crominancia correspondientes de manera que tengan una precisión de un píxel entero y de medio píxel.
En el segundo modo, básico, de esta implementación (por ejemplo, si el indicador de redondeo de crominancia = 0), los vectores de movimiento de crominancia que tengan desviaciones de un cuarto de píxel sin ningún error de redondeo se mantienen con las desviaciones de un cuarto de píxel. Los vectores de movimiento de crominancia con otras desviaciones subpíxel se redondean a la posición de un píxel o de medio píxel más cercana. En este modo, la velocidad del descodificador puede ser menor que en otros modos, pero la precisión con la que se calculan los valores de píxel de crominancia es mayor. Así, 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 crominancia puede usarse el filtrado bicúbico o bilineal según se ha descrito anteriormente.
La fig. 18 es una tabla que ilustra este modo básico de redondeo de crominancia. La primera fila (1810) muestra valores del vector de movimiento de 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 valores correspondientes del vector de movimiento de 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 crominancia se redondea a otras resoluciones del espacio de crominancia.
Habiendo descrito e ilustrado los principios de la invención con referencia a diversas formas de realización, se apreciará que las diversas formas de realización pueden modificarse en su disposición y detalle sin apartarse de dichos principios. Por ejemplo, los principios y técnicas descritos anteriormente no están limitados a su uso en un codificador de vídeo y/o un descodificador de vídeo. En su lugar, pueden aplicarse a cualquier contexto de cálculo en el que se calcule un valor basándose en parte en uno o más valores intermedios o en el que se usen filtros separables en múltiples dimensiones.
Debe entenderse que los programas, procesos o procedimientos descritos en la presente memoria descriptiva no se refieren ni se limitan a ningún tipo particular de entorno de cálculo, a menos que se indique lo contrario. Pueden usarse diversos tipos de entornos de cálculo especializados o de propósito general para realizar las operaciones según las enseñanzas descritas en la presente memoria descriptiva. Elementos de formas de realización que se muestran en software pueden implementarse en hardware y a la inversa.
A la vista de las muchas formas de realización posibles a las que pueden aplicarse los principios de la presente invención, los autores reclaman la invención para todas estas formas de realización en cuanto puedan encuadrarse dentro del ámbito de las siguientes reivindicaciones y equivalentes de las mismas.

Claims (8)

1. Un procedimiento de interpolación bicúbica que comprende:
para una primera fase (810, 1410) de interpolación bicúbica, filtrado (812, 1412) de muestras de una trama de vídeo de referencia (600) en una primera dimensión usando un filtro bicúbico aproximado que tiene coeficientes de filtro, incluyendo desplazamiento de bits (814, 1414) para compensar la expansión debida a los coeficientes de filtro en la primera fase, en el que al menos parte del desplazamiento de bits se difiere, y en el que el filtrado para la primera fase produce resultados intermedios (820, 1420); y para una segunda fase (830, 1430) de la interpolación bicúbica, filtrado (832, 1432) de los resultados intermedios en una segunda dimensión usando el filtro bicúbico aproximado, incluyendo desplazamiento de bits (834, 1434) para compensar el desplazamiento de bits diferido y para expansión debida a los coeficientes de filtro en la segunda fase,
en el que el filtro bicúbico aproximado se aproxima a un filtro bicúbico puro que aplica un factor de normalización a una suma ponderada de productos de valores de coeficientes de filtro enteros y valores de muestra, en el que el filtro bicúbico aproximado aplica valores de coeficientes de filtro reducidos y un factor de normalización reducido, en el que el desplazamiento de bits diferido se define para usar completamente pero sin superar una profundidad de bits disponible de una arquitectura objeto en la segunda fase.
2. El procedimiento de la reivindicación 1 en el que los coeficientes de filtro del filtro bicúbico aproximado tienen una suma y un factor de expansión que están reducidos con respecto a la suma y el factor de expansión de los coeficientes de filtro de un filtro bicúbico puro, permitiendo así el desplazamiento de bits diferidos en aritmética de 16 bits para muestras de 8 bits de la trama de vídeo de referencia.
3. El procedimiento de la reivindicación 1 en el que los coeficientes de filtro del filtro bicúbico aproximado tienen una suma de 64.
4. El procedimiento de la reivindicación 1 en el que los coeficientes de filtro del filtro bicúbico aproximado son -4, 53, 18 y -3.
5. Un medio legible por ordenador que almacena instrucciones ejecutables por ordenador para hacer que un sistema informático realice el procedimiento de la reivindicación 1 durante codificación de vídeo.
6. Un medio legible por ordenador que almacena instrucciones ejecutables por ordenador para hacer que un sistema informático realice el procedimiento de la reivindicación 1 durante descodificación de vídeo.
7. Un sistema de codificación de vídeo que comprende medios para realizar el procedimiento de una cualquiera de las reivindicaciones 1 a 4.
8. Un sistema de descodificación de vídeo que comprende medios para realizar el procedimiento de una cualquiera de las reivindicaciones 1 a 4.
ES03007021T 2002-04-10 2003-03-27 Filtro bicubico aproximado. Expired - Lifetime ES2278087T3 (es)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US371860 1982-04-26
US37186002P 2002-04-10 2002-04-10
US10/379,606 US7110459B2 (en) 2002-04-10 2003-03-04 Approximate bicubic filter
US379606 2003-03-04

Publications (1)

Publication Number Publication Date
ES2278087T3 true ES2278087T3 (es) 2007-08-01

Family

ID=28794436

Family Applications (1)

Application Number Title Priority Date Filing Date
ES03007021T Expired - Lifetime ES2278087T3 (es) 2002-04-10 2003-03-27 Filtro bicubico aproximado.

Country Status (9)

Country Link
US (1) US7110459B2 (es)
EP (1) EP1359763B1 (es)
JP (1) JP4625240B2 (es)
KR (1) KR100681972B1 (es)
CN (1) CN1238798C (es)
AT (1) ATE350860T1 (es)
DE (1) DE60310800T2 (es)
ES (1) ES2278087T3 (es)
HK (1) HK1060242A1 (es)

Families Citing this family (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7620109B2 (en) * 2002-04-10 2009-11-17 Microsoft Corporation Sub-pixel interpolation in motion estimation and compensation
JP4102973B2 (ja) * 2002-04-24 2008-06-18 日本電気株式会社 動画像の符号化方法および復号化方法、これを用いた装置とプログラム
US7336720B2 (en) * 2002-09-27 2008-02-26 Vanguard Software Solutions, Inc. Real-time video coding/decoding
US7869516B2 (en) * 2003-03-31 2011-01-11 Hewlett-Packard Development Company, L.P. Motion estimation using bit-wise block comparisons for video compresssion
US8824553B2 (en) * 2003-05-12 2014-09-02 Google Inc. Video compression method
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
US7512182B2 (en) * 2004-08-30 2009-03-31 General Instrument Corporation Method and apparatus for performing motion compensated temporal filtering in video encoding
FR2876860A1 (fr) * 2004-10-20 2006-04-21 Thomson Licensing Sa Procede de codage hierarchique d'images video
US20060285597A1 (en) * 2005-06-20 2006-12-21 Flextronics International Usa, Inc. Reusing interpolated values in advanced video encoders
EP2472507B1 (en) * 2005-10-14 2016-02-10 Samsung Display Co., Ltd. Improved gamut mapping and subpixel rendering systems and methods
CN1794821A (zh) * 2006-01-11 2006-06-28 浙江大学 可分级视频压缩中插值的方法与装置
WO2007116551A1 (ja) * 2006-03-30 2007-10-18 Kabushiki Kaisha Toshiba 画像符号化装置及び画像符号化方法並びに画像復号化装置及び画像復号化方法
WO2007114368A1 (ja) * 2006-03-30 2007-10-11 Kabushiki Kaisha Toshiba 画像符号化装置及び方法並びに画像復号化装置及び方法
US8208553B2 (en) * 2006-05-04 2012-06-26 Altera Corporation Methods and apparatus for quarter-pel refinement in a SIMD array processor
EP2092752A2 (en) * 2006-12-01 2009-08-26 France Telecom Adaptive interpolation method and system for motion compensated predictive video coding and decoding
US7529404B2 (en) * 2007-06-20 2009-05-05 Ahdoot Ned M Digital video filter and image processing
US8023562B2 (en) * 2007-09-07 2011-09-20 Vanguard Software Solutions, Inc. Real-time video coding/decoding
US8638852B2 (en) 2008-01-08 2014-01-28 Qualcomm Incorporated Video coding of filter coefficients based on horizontal and vertical symmetry
GB0800277D0 (en) * 2008-01-08 2008-02-13 Imagination Tech Ltd Video motion compensation
US20090201380A1 (en) * 2008-02-12 2009-08-13 Decisive Analytics Corporation Method and apparatus for streamlined wireless data transfer
US8326075B2 (en) 2008-09-11 2012-12-04 Google Inc. System and method for video encoding using adaptive loop filter
US8131056B2 (en) * 2008-09-30 2012-03-06 International Business Machines Corporation Constructing variability maps by correlating off-state leakage emission images to layout information
JP5697301B2 (ja) * 2008-10-01 2015-04-08 株式会社Nttドコモ 動画像符号化装置、動画像復号装置、動画像符号化方法、動画像復号方法、動画像符号化プログラム、動画像復号プログラム、及び動画像符号化・復号システム
US8315434B2 (en) * 2009-01-06 2012-11-20 Avago Technologies Ecbu Ip (Singapore) Pte. Ltd. Absolute tracking in a sub-pixel range
US20100235314A1 (en) * 2009-02-12 2010-09-16 Decisive Analytics Corporation Method and apparatus for analyzing and interrelating video data
US8458105B2 (en) * 2009-02-12 2013-06-04 Decisive Analytics Corporation Method and apparatus for analyzing and interrelating data
WO2010126783A2 (en) * 2009-04-30 2010-11-04 Roman Gitlin Method and apparatus for streamlined implementation of interpolation in multiple dimensions
WO2011100347A2 (en) 2010-02-09 2011-08-18 Vanguard Software Solutions, Inc. Video sequence encoding system and algorithms
KR101682147B1 (ko) * 2010-04-05 2016-12-05 삼성전자주식회사 변환 및 역변환에 기초한 보간 방법 및 장치
US9049454B2 (en) 2011-01-19 2015-06-02 Google Technology Holdings Llc. High efficiency low complexity interpolation filters
US20120224639A1 (en) * 2011-03-03 2012-09-06 General Instrument Corporation Method for interpolating half pixels and quarter pixels
US8437581B2 (en) 2011-03-04 2013-05-07 General Instrument Corporation Method and system for interpolating fractional video pixels
US20120230407A1 (en) 2011-03-11 2012-09-13 General Instrument Corporation Interpolation Filter Selection Using Prediction Index
US8780971B1 (en) 2011-04-07 2014-07-15 Google, Inc. System and method of encoding using selectable loop filters
US8780996B2 (en) 2011-04-07 2014-07-15 Google, Inc. System and method for encoding and decoding video data
US8781004B1 (en) 2011-04-07 2014-07-15 Google Inc. System and method for encoding video using variable loop filter
CN102811346B (zh) * 2011-05-31 2015-09-02 富士通株式会社 编码模式选择方法和系统
EP2724534A2 (en) 2011-06-24 2014-04-30 Motorola Mobility LLC Selection of phase offsets for interpolation filters for motion compensation
JP5727673B2 (ja) 2011-07-01 2015-06-03 モトローラ モビリティ エルエルシーMotorola Mobility Llc 時間予測のためのジョイントサブピクセル補間フィルタ
US8885706B2 (en) 2011-09-16 2014-11-11 Google Inc. Apparatus and methodology for a video codec system with noise reduction capability
JP2013098933A (ja) * 2011-11-04 2013-05-20 Sony Corp 画像処理装置および方法
US8693551B2 (en) 2011-11-16 2014-04-08 Vanguard Software Solutions, Inc. Optimal angular intra prediction for block-based video coding
US9131073B1 (en) 2012-03-02 2015-09-08 Google Inc. Motion estimation aided noise reduction
US9344729B1 (en) 2012-07-11 2016-05-17 Google Inc. Selective prediction signal filtering
US9185437B2 (en) 2012-11-01 2015-11-10 Microsoft Technology Licensing, Llc Video data
US20140119446A1 (en) * 2012-11-01 2014-05-01 Microsoft Corporation Preserving rounding errors in video coding
US9106922B2 (en) 2012-12-19 2015-08-11 Vanguard Software Solutions, Inc. Motion estimation engine for video encoding
KR20140123008A (ko) * 2013-04-05 2014-10-21 삼성전자주식회사 휘도차를 보상하기 위한 인터 레이어 비디오 부호화 방법 및 그 장치, 비디오 복호화 방법 및 그 장치
US9762920B2 (en) * 2013-06-07 2017-09-12 Qualcomm Incorporated Dynamic range control of intermediate data in resampling process
US10015515B2 (en) * 2013-06-21 2018-07-03 Qualcomm Incorporated Intra prediction from a predictive block
TWI602144B (zh) * 2013-10-02 2017-10-11 國立成功大學 包裝彩色圖框及原始景深圖框之方法、裝置及系統
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
US9942560B2 (en) 2014-01-08 2018-04-10 Microsoft Technology Licensing, Llc Encoding screen capture data
US9883197B2 (en) 2014-01-09 2018-01-30 Qualcomm Incorporated Intra prediction of chroma blocks using the same vector
US10863200B2 (en) * 2014-07-25 2020-12-08 Intel Corporation Techniques for performing a forward transformation by a video encoder using a forward transform matrix
US10102613B2 (en) 2014-09-25 2018-10-16 Google Llc Frequency-domain denoising
JP6473608B2 (ja) 2014-11-27 2019-02-20 三星ディスプレイ株式會社Samsung Display Co.,Ltd. 画像処理装置、画像処理方法、及びプログラム
WO2016147836A1 (ja) * 2015-03-13 2016-09-22 ソニー株式会社 画像処理装置および方法
US10009622B1 (en) 2015-12-15 2018-06-26 Google Llc Video coding with degradation of residuals
CN106127757B (zh) * 2016-06-21 2018-10-23 鲁东大学 基于改进遗传算法的夜晚安防监控视频分割方法及装置
FR3087309B1 (fr) * 2018-10-12 2021-08-06 Ateme Optimisation d'un sous-echantillonnage intervenant avant le codage d'images en compression
US11102487B2 (en) * 2019-08-30 2021-08-24 Adobe Inc. Image resampling for DCT based image encoding formats using memory efficient techniques

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0294958B1 (en) * 1987-06-09 1995-08-23 Sony Corporation Motion compensated interpolation of digital television images
US5103306A (en) * 1990-03-28 1992-04-07 Transitions Research Corporation Digital image compression employing a resolution gradient
US5594813A (en) * 1992-02-19 1997-01-14 Integrated Information Technology, Inc. Programmable architecture and methods for motion estimation
JPH06343172A (ja) * 1993-06-01 1994-12-13 Matsushita Electric Ind Co Ltd 動きベクトル検出方法及び動きベクトル符号化方法
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
GB2301972B (en) * 1995-06-06 1999-10-20 Sony Uk Ltd Video compression
US6026182A (en) * 1995-10-05 2000-02-15 Microsoft Corporation Feature segmentation
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
US5787203A (en) * 1996-01-19 1998-07-28 Microsoft Corporation Method and system for filtering compressed video images
US5692063A (en) * 1996-01-19 1997-11-25 Microsoft Corporation Method and system for unrestricted motion estimation for video
US5799113A (en) * 1996-01-19 1998-08-25 Microsoft Corporation Method for expanding contracted 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
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
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
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
ES2431802T3 (es) * 1997-06-09 2013-11-28 Hitachi, Ltd. Procedimiento de decodificación de imágenes y decodificador de imágenes
JPH1169345A (ja) * 1997-06-11 1999-03-09 Fujitsu Ltd フレーム間予測動画像符号化装置及び復号装置並びにフレーム間予測動画像符号化方法及び復号方法
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
US6122017A (en) * 1998-01-22 2000-09-19 Hewlett-Packard Company Method for providing motion-compensated multi-field enhancement of still images from video
JP4026238B2 (ja) * 1998-07-23 2007-12-26 ソニー株式会社 画像復号装置及び画像復号方法
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
US6320593B1 (en) * 1999-04-20 2001-11-20 Agilent Technologies, Inc. Method of fast bi-cubic interpolation of image information
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
CN101448162B (zh) 2001-12-17 2013-01-02 微软公司 处理视频图像的方法
US7277587B2 (en) * 2002-04-26 2007-10-02 Sharp Laboratories Of America, Inc. System and method for lossless video coding

Also Published As

Publication number Publication date
EP1359763B1 (en) 2007-01-03
HK1060242A1 (en) 2004-07-30
CN1456992A (zh) 2003-11-19
DE60310800T2 (de) 2007-04-26
EP1359763A3 (en) 2004-08-11
CN1238798C (zh) 2006-01-25
JP2003333603A (ja) 2003-11-21
US7110459B2 (en) 2006-09-19
US20030194009A1 (en) 2003-10-16
EP1359763A2 (en) 2003-11-05
ATE350860T1 (de) 2007-01-15
JP4625240B2 (ja) 2011-02-02
DE60310800D1 (de) 2007-02-15
KR20030081115A (ko) 2003-10-17
KR100681972B1 (ko) 2007-02-15

Similar Documents

Publication Publication Date Title
ES2278087T3 (es) Filtro bicubico aproximado.
ES2254811T3 (es) Interpolacion subpixel en la estimacion y compesacion del movimiento.
ES2266665T3 (es) Control del redondeo para la interpolacion multietapa.
ES2269850T3 (es) Redondeos del vector de movimiento de crominancia.
JP5590574B2 (ja) 多重解像度ビデオ符号化および復号化のための再サンプリングおよび画像サイズ変更の演算
RU2683591C1 (ru) Способ и устройство для компенсации движения с предсказанием
ES2275037T3 (es) Procedimiento de codificacion de video con compensacion de fundido.
JP2010045816A (ja) ビデオ符号化における中間画素高精度高速探索を実現する装置及び方法
NZ590990A (en) Content adaptive and art directable scalable video coding
JP5323252B2 (ja) 動画像符号化方法、復号化方法、符号化装置および復号化装置
JPH09502840A (ja) テレビ画像サブバンド両立式符号化用エンコーダ/デコーダ及びツリー構造による階層的運動符号化へのその応用
JP5612177B2 (ja) 動画像符号化方法、復号化方法、符号化装置および復号化装置