Кодирование и декодирование видео
Изобретение относится к технологиям обработки видеоданных. Техническим результатом является сокращение объема памяти за счет отображения векторов движения на один дополнительный опорный кадр. Предложен способ сохранения векторов движения первого опорного кадра, которым разрешено указывать на множество дополнительных опорных кадров. Способ содержит этап, на котором выбирают один из упомянутых дополнительных опорных кадров. Далее согласно способу отображают в выбранный дополнительный опорный кадр каждый вектор движения упомянутого первого опорного кадра, который указывает на один из упомянутых дополнительных опорных кадров, отличных от выбранного дополнительного опорного кадра, так что после отображения все векторы движения первого опорного кадра указывают на выбранный дополнительный опорный кадр. Сохраняют векторы движения, подвергнутые упомянутому отображению. 7 н. и 13 з.п. ф-лы, 16 ил., 4 табл.
ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Изобретение относится к способу и устройству для кодирования последовательности цифровых изображений и способу и устройству для декодирования соответствующего битового потока.
Изобретение относится к области цифровой обработки сигнала, и в частности к области сжатия видео с использованием компенсации движения для сокращения пространственной и временной избыточностей в потоках видео.
УРОВЕНЬ ТЕХНИКИ
Во многих форматах сжатия видео, например H.263, H.264, MPEG-1, MPEG-2, MPEG-4, SVC, используется поблочное дискретное косинусное преобразование (DCT) и компенсация движения для исключения пространственной и временной избыточностей. Эти форматы можно назвать форматами видео с прогнозированием. Каждый кадр или изображение видеосигнала разделяют на секции (срезы), которые кодируются и могут быть декодированы по отдельности. Секция обычно представляет собой прямоугольный участок кадра, или более обобщенно участок кадра или весь кадр. Далее каждую секцию делят на макроблоки (MB), и каждый макроблок далее разделяют на блоки, обычно на блоки 8х8 пикселей. В более новой технологии высокоэффективного видеокодирования (HEVC), которая в настоящее время находится в процессе стандартизации, каждую секцию разделяют на неперекрывающиеся наибольшие единицы кодирования (LCU), в общем случае представляющие собой блоки размером 64х64 пикселей. Каждая LCU может быть, в свою очередь, итерационно разделена на меньшие единицы кодирования (CU) переменного размера с использованием разложения квадродерева. Каждая CU может быть далее разбит на максимум 2 симметричных прямоугольных единицы разделения. Кодируемые кадры имеют два типа: прогнозируемые во времени кадры (либо прогнозируемые из одного опорного кадра, называемые P-кадрами, либо прогнозируемые из двух опорных кадров, называемые В-кадрами) и прогнозируемые не во времени кадры (называемые Intra кадрами (кадрами с внутрикадровым прогнозированием) или I-кадрами).
Прогнозирование во времени состоит в нахождении в опорном кадре, то есть либо в предшествующем, либо в будущем кадре последовательности видео, участка изображения или опорной области, которая является ближайшей к подлежащему кодированию блоку. Этот этап известен как оценка движения. Далее, разность между блоком, подлежащим кодированию, и опорным участком кодируют (компенсация движения) вместе с элементом информации движения относительно вектора движения, который указывает опорную область, которую следует использовать для компенсации движения.
Для дополнительного уменьшения издержек на кодирование информации движения предложено кодирование вектора движения посредством разности по отношению к предиктору вектора движения, обычно вычисляемой на основании векторов движения блоков, окружающих блок, подлежащий кодированию.
В H.264 векторы движения кодируют по отношению к медианному предиктору, вычисляемому на основании векторов движения, расположенных в каузальном соседстве с блоком, подлежащим кодированию, например на основании блоков, расположенных выше и слева от блока, подлежащего кодированию. Кодируют только разность, также называемую остаточным вектором движения, между медианным предиктором и вектором движения текущего блока.
Кодирование с использованием остаточных векторов движения в некоторой степени экономит скорость передачи битов, но делает необходимым выполнение декодером того же вычисления предиктора вектора движения для декодирования значения вектора движения блока, подлежащего декодированию.
Недавно были предложены дальнейшие усовершенствования, такие как использование множества кандидатов-предикторов векторов движения. Данный способ, называемый конкуренцией векторов движения, состоит в определении из нескольких предикторов векторов движения или кандидатов, того предиктора вектора движения, который минимизирует издержки кодирования, обычно издержки скорость передачи - искажение, остаточной информации движения. Остаточная информация движения содержит остаточный вектор движения, то есть разность между фактическим вектором движения блока, подлежащего кодированию, и выбранным предиктором вектора движения, и элемент информации, указывающей выбранный предиктор вектора движения, такой как, например, кодированное значение индекса выбранного предиктора вектора движения.
В высокоэффективном видеокодировании (HEVC), которое в настоящее время находится в процессе стандартизации, было предложено выбирать первый пространственный предиктор вектора движения из предварительно определенной группы блоков над текущим блоком, подлежащим кодированию, и второй пространственный предиктор вектора движения из другой предварительно определенной группы блоков слева от текущего блока, и временной предиктор вектора движения из соотнесенного (совместно размещенного) блока в опорном кадре. Соотнесенный блок представляет собой блок, расположенный в том же положении, что и блок, подлежащий кодированию, но в другом изображении. Эта схема выбора предиктора вектора движения называется усовершенствованным прогнозированием вектора движения (AMVP).
В результате выбора предиктора вектора движения получают смешанный набор кандидатов-предикторов вектора движения из пространственных предикторов и временных предикторов, причем набор состоит из 0, 1, 2 или 3 кандидатов в зависимости от доступности различных пространственных и временных предикторов вектора движения. Для уменьшения непроизводительных затрат на сигнализацию предиктора вектора движения в битовом потоке уменьшают набор предикторов вектора движения путем применения процесса сокращения, исключающего дублируемые векторы движения, т.е. векторы движения, которые имеют одинаковое значение. Например, если первый и второй пространственные предикторы вектора движения, упомянутые выше, равны, только один из них, а также временной предиктор вектора движения, должны быть сохранены в качестве кандидатов-предикторов вектора движения. В таком случае для указания декодеру индекса предиктора вектора движения необходим только один бит.
Кандидаты-предикторы вектора движения также могут быть упорядочены таким образом, чтобы расположить наиболее вероятный предиктор вектора движения в первом положении, поскольку минимальные непроизводительные затраты имеют место, если первый кандидат выбран в качестве наилучшего предиктора.
Достаточное уменьшение набора предикторов приводит к выигрышу по непроизводительным затратам сигнализации, поскольку указание выбранного предиктора вектора движения может быть кодировано с использованием меньшего числа битов. В крайнем случае набор кандидатов может быть уменьшен до 1, например если все предикторы векторов движения равны, и таким образом нет необходимости вставки какой-либо информации, относящейся к выбранному предиктору вектора движения, в битовый поток.
Как описано выше, в предлагаемой в настоящее время схеме HEVC векторы движения кодируют путем кодирования с прогнозированием, используя множество предикторов вектора движения, которые могут быть пространственными или временными предикторами. Таким образом, для каждого кадра, который используется в качестве опорного кадра для извлечения соотнесенного предиктора вектора движения, необходимо сохранение его связанных векторов движения на сторонах кодера и декодера. По общему правилу, размер памяти векторов движения является значительным, учитывая, во-первых, дробность представления движения (в настоящей схеме HEVC минимальный размер Inter блока (блока с межкадровым прогнозированием) составляет 4х4) и, во-вторых то, что имеются вплоть до двух векторов на блок движения для B_SLICE. По оценкам, для графических изображений с разрешением 4Кх2К и с использованием дробности в один набор векторов движения на один блок из 4х4 пикселей требуется 26 Мбит на кадр.
В Yeping Su и Andrew Segall, “On motion vector competition”, JCTVC-C257, Гуанчжоу, Китай, 7-15 октября 2010 г., и в Yeping Su и Andrew Segall, “CE9: Reduced resolution storage of motion vector data”, JCTVC-D072, Дэгу, Корея, 20-28 января 2011 г., предлагается уменьшение размера памяти векторов движения, необходимой на стороне декодера для хранения соотнесенных во времени векторов и индексов опоры. Предложенное решение состоит в простом поблочном уплотнении векторов движения, как показано на Фиг. 1. В существующей в настоящее время реализации HEVC один вектор движения из 16 сохраняют в каждом квадрате из 64х64 пикселей, и рассматривают вектор движения верхнего левого блока 4х4. Это сокращает требования к памяти в 16 раз. Такая кратность уменьшения сигнализируется в наборе параметров последовательности. Процесс сжатия памяти векторов движения выполняется после процесса обработки адаптивным контурным фильтром и до того, как декодированное графическое изображение помещают в буфер декодированных графических изображений (DPB).
Это решение обеспечивает возможность значительного уменьшения памяти векторов движения в ущерб эффективности кодирования. Однако это решение не учитывает разнообразие предикторов в наборе для уплотнения блоков при сжатии памяти MV. Кроме того, были проверены несколько критериев, но без учета разнообразия. К тому же данное решение не является ни адаптивным, ни гибким. Кроме того, когда требуется большее сжатие, необходимо большее соотношение уменьшения при удалении векторов движения, что может привести к значительной потере эффективности кодирования.
В WO 2004/012459 A описано другое предложенное решение для ограничения числа сохраняемых векторов движения. Информацию ограничения кодируют в виде информации заголовка (возможно на глобальном уровне, таком как SPS, на уровне графического изображения, таком как PPS, или на уровне секции, таком как заголовок секции). Эта информация ограничения указывает число графических изображений или число макроблоков, для которых сохраняют векторы движения. Если кодируемый блок относится к вектору движения, который сохранен, то используют этот вектор движения, в противном случае используют нулевой вектор движения (обе компоненты (которого) равны 0). Однако это решение не принимает во внимание уплотнение блоков.
Кроме предложений, направленных на снижение требований к хранению векторов движения, другие предшествующие предложения были направлены на усовершенствования предикторов для AMVP.
Например, в Jung, G. Clare, (Orange Labs), “Temporal MV predictor modification for MV-Comp, Skip, Direct and Merge schemes”, JCTVC-D164, Дэгу, Корея, 20-28 января 2011 г., предложено использование центрированного временного предиктора, см. также WO 2011/001077 A. В этом предложении соотнесенный блок находят путем отображения центра блока в соотнесенный опорный кадр вместо начала (сверху слева) блока (как в предыдущей версии HEVC). Центральный и верхний левый векторы движения имеют одинаковое значение, если соотнесенный блок имеет тот же размер или больший размер по сравнению с текущим блоком. На Фиг. 2 показан соотнесенный блок, подразделенный на 64 блока 4х4, каждый из которых имеет свой собственный вектор движения. Этот соотнесенный блок используется для текущего блока 32х32, подлежащего кодированию, и выбранный временной предиктор является вектором движения для заштрихованного блока 4х4 в центре соотнесенного блока.
Цель выбора центра разделения вместо верхней левой части состоит в нахождении лучшего представления движения для соотнесенного блока. Теоретически центр блока представляет собой лучшее представление блока, поскольку он является барицентром блока. Но временной предиктор из соотнесенного блока не является единственным предиктором в наборе предикторов AMVP.
Jian-Liang Lin, Yu-Pao Tsai, Yu-Wen Huang, Shawmin Lei (MediaTek Inc.) “Improved Advanced Motion Vector Prediction”, JCTVC-D125, Дэгу, Корея, 20-28 января 2011 г., предлагают добавить несколько временных блоков, как показано на Фиг. 3. Предложены 4 предиктора - временной соотнесенный сверху слева (T) и три других угла (снизу слева (I), снизу справа (H), сверху справа (E)). Таким образом добавляют предикторы к набору предикторов, и они соревнуются друг с другом по критерию скорость передачи-искажение.
Ни одно из двух вышеприведенных предложений для улучшения набора предикторов векторов движения не использует сжатие памяти векторов движения.
Существует потребность в устранении одного или более упомянутых недостатков уровня техники.
Также желательно снизить требования к памяти векторов движения. Предпочтительно это снижение должно быть достигнуто без значительного дополнительного ущерба эффективности кодирования или вовсе без него.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Согласно первому аспекту настоящего изобретения предложен способ хранения векторов движения первого опорного кадра, которым разрешено указывать на множество дополнительных опорных кадров, причем способ состоит в том, что: когда блок упомянутого первого опорного кадра изначально имеет два вектора движения, выбирают один из упомянутых двух векторов движения, причем невыбранный вектор движения не сохраняют.
Согласно второму аспекту настоящего изобретения предложен способ кодирования последовательности цифровых изображений в битовый поток, причем по меньшей мере один участок изображения кодируют посредством компенсации движения по отношению к участку опорного изображения, содержащий способ хранения векторов движения, реализующий вышеупомянутый первый аспект настоящего изобретения.
Согласно третьему аспекту настоящего изобретения предложен способ декодирования битового потока, содержащего кодированную последовательность цифровых изображений, причем по меньшей мере один участок изображения кодирован посредством компенсации движения по отношению к опорному изображению, содержащий способ хранения векторов движения, реализующий вышеупомянутый первый аспект настоящего изобретения
Согласно четвертому аспекту настоящего изобретения предложено устройство для хранения векторов движения первого опорного кадра, которым разрешено указывать на множество дополнительных опорных кадров, причем устройство содержит: средство, выполненное с возможностью выбора одного из двух векторов движения, когда блок из упомянутого первого опорного кадра имеет два вектора движения, причем невыбранный вектор движения не сохраняют.
Согласно пятому аспекту настоящего изобретения предложено устройство для кодирования последовательности цифровых изображений в битовый поток, причем по меньшей мере один участок изображения кодируют посредством компенсации движения по отношению к участку опорного изображения, содержащее устройство для хранения векторов движения, реализующее вышеупомянутый четвертый аспект настоящего изобретения.
Согласно шестому аспекту настоящего изобретения предложено устройство для декодирования битового потока, содержащего кодированную последовательность цифровых изображений, причем по меньшей мере один участок изображения кодирован посредством компенсации движения по отношению к опорному изображению, содержащее устройство для хранения векторов движения, реализующее вышеупомянутый четвертый аспект настоящего изобретения.
Согласно седьмому аспекту настоящего изобретения предложена программа, которая при выполнении компьютером или процессором побуждает компьютер или процессор выполнять способ, реализующий любой из первого, второго и третьего аспектов настоящего изобретения.
Согласно первому дополнительному аспекту настоящего изобретения предложен способ хранения векторов движения первого опорного кадра, которым разрешено указывать на множество дополнительных опорных кадров, причем способ состоит в том, что:
выбирают один из упомянутых дополнительных опорных кадров;
отображают в выбранный опорный кадр каждый вектор движения упомянутого первого опорного кадра, который указывает на один из упомянутых дополнительных опорных кадров, отличный от выбранного дополнительного опорного кадра, таким образом, что после отображения все векторы движения первого опорного кадра указывают на выбранный опорный кадр; и
сохраняют векторы движения, подвергнутые упомянутому отображению.
Такой способ исключает необходимость сохранения индекса опорного кадра для каждого вектора движения и таким образом уменьшает размер памяти векторов движения.
Например, в одном варианте выполнения векторы движения сохраняют без сохранения какой-либо информации, идентифицирующей отдельные опорные кадры для векторов движения.
Дополнительный опорный кадр может быть выбран несколькими способами.
Во-первых, выбранный дополнительный опорный кадр может быть тем из упомянутых дополнительных опорных кадров, который является ближайшим во времени к первому опорному кадру. В общем случае этот ближайший кадр будет тем кадром, на который указывает наибольшее число векторов движения в первом опорном кадре, что может снизить затраты на обработку, вызванные отображением.
Во-вторых, выбор дополнительного опорного кадра может зависеть от порядка, в котором кадры будут декодированы декодером. Это может быть полезно, когда порядок декодирования кадров отличен от порядка отображения кадров. Например, выбранный дополнительный опорный кадр может быть тем из упомянутых дополнительных опорных кадров, который имеет минимальную разность по счетчику порядка графического изображения (POC) по отношению к первому опорному кадру.
В-третьих, выбранный дополнительный опорный кадр может быть тем из упомянутых дополнительных опорных кадров, на который указывает наибольшее число векторов движения в первом опорном кадре. Это снижает затраты на обработку, вызванные отображением, поскольку в итоге отображается наименьшее число векторов движения.
В-четвертых, выбранный дополнительный опорный кадр может быть тем из упомянутых дополнительных опорных кадров, который имеет самое высокое качество графического изображения. Это должно повысить качество изображения после декодирования.
В одном варианте выполнения отображение содержит масштабирование каждого вектора движения упомянутого первого опорного кадра, который указывает на один из упомянутых дополнительных опорных кадров, отличный от выбранного дополнительного опорного кадра. Например, масштабирование может зависеть от временного соотношения между первым опорным кадром, выбранным опорным кадром и дополнительным опорным кадром, отличным от упомянутого выбранного дополнительного опорного кадра.
В другом варианте выполнения дополнительные опорные кадры содержат опорные кадры в будущем и в прошлом, и когда выбранный опорный кадр находится в будущем и дополнительный опорный кадр, отличный от выбранного опорного кадра, находится в прошлом, или когда выбранный опорный кадр находится в прошлом и дополнительный опорный кадр, отличный от выбранного опорного кадра, находится в будущем, отображение содержит изменение знака вектора движения.
Такой вариант выполнения подходит для использования в случае иерархической структуры B-графических изображений с опорными кадрами, относящимися как к прошлому, так и к будущему.
В другом варианте выполнения, который полезен, когда блок упомянутого первого опорного кадра исходно имеет два вектора движения, отображение также содержит выбор одного из упомянутых двух векторов движения, невыбранный вектор движения не сохраняют. Это может дополнительно уменьшить размер памяти векторов движения, поскольку не требуется сохранения ни одного бита для сигнализации того, какой вектор движения используется.
В другом варианте выполнения для упомянутого или каждого Intra-кодированного блока в упомянутом первом опорном кадре генерируют псевдовектор движения, который указывает на выбранный опорный кадр таким образом, что все блоки первого опорного кадра являются Inter-кодированными, посредством чего не требуется бита на блок для сигнализации Inter/Intra кодирования. Это может дополнительно уменьшить размер памяти векторов движения, поскольку не требуется сохранения ни одного бита для сигнализации того, используется ли Intra или Inter кодирование.
В другом варианте выполнения выбирают репрезентативные векторы движения первого опорного изображения, и сохраняют репрезентативные векторы движения, но не другие векторы движения первого изображения. Это может дополнительно уменьшить размер памяти векторов движения, поскольку ненужные векторы движения не сохраняют.
Согласно второму дополнительному аспекту настоящего изобретения предложен способ сохранения векторов движения первого опорного кадра, которым разрешено указывать на множество дополнительных опорных кадров, причем способ состоит в том, что:
генерируют для упомянутого или каждого Intra-кодированного блока в упомянутом первом опорном кадре псевдовектор движения, указывающий на выбранный опорный кадр таким образом, что все рассматриваемые блоки первого опорного кадра являются Inter-кодированными, посредством чего не требуется ни одного бита на блок для сигнализации Inter/Intra кодирования.
Это может уменьшить разъем памяти векторов движения, поскольку не требуется сохранения ни одного бита для сигнализации того, используется ли Intra или Inter кодирование. В таком способе нет необходимости в выполнении этапов выбора и отображения согласно первому аспекту изобретения.
Согласно третьему дополнительному аспекту настоящего изобретения предложен способ кодирования последовательности цифровых изображений в битовый поток, причем по меньшей мере один участок изображения кодируют посредством компенсации движения по отношению к участку опорного изображения, содержащий способ сохранения векторов движения согласно первому дополнительному или второму дополнительному аспекту настоящего изобретения.
Согласно четвертому дополнительному аспекту настоящего изобретения предложен способ декодирования битового потока, содержащего кодированную последовательность цифровых изображений, причем по меньшей мере один участок изображения кодирован посредством компенсации движения по отношению к опорному изображению, содержащий способ сохранения векторов движения согласно первому дополнительному или второму дополнительному аспекту настоящего изобретения.
Согласно пятому дополнительному аспекту настоящего изобретения предложено устройство для хранения векторов движения первого опорного кадра, которым разрешено указывать на множество дополнительных опорных кадров, причем устройство содержит:
средство для выбора одного из упомянутых дополнительных опорных кадров;
средство для отображения в выбранный опорный кадр каждого вектора движения упомянутого первого опорного кадра, который указывает на один из упомянутых дополнительных опорных кадров, отличный от выбранного дополнительного опорного кадра таким образом, что после отображения все векторы движения первого опорного кадра указывают на выбранный опорный кадр; и
средство для хранения векторов движения, подвергнутых упомянутому отображению.
Согласно шестому дополнительному аспекту настоящего изобретения предложено устройство для хранения векторов движения первого опорного кадра, которым разрешено указывать на множество дополнительных опорных кадров, причем устройство содержит:
средство для генерирования для упомянутого или каждого Intra-кодированного блока в упомянутом первом опорном кадре псевдовектора движения, указывающего на выбранный опорный кадр таким образом, что все рассматриваемые блоки первого опорного кадра являются Inter-кодированными, посредством чего не требуется ни одного бита на блок для сигнализации Inter/Intra кодирования.
Согласно седьмому дополнительному аспекту настоящего изобретения предложено устройство для кодирования последовательности цифровых изображений в битовый поток, причем по меньшей мере один участок изображения кодируют посредством компенсации движения по отношению к участку опорного изображения, содержащее устройство для хранения векторов движения согласно пятому дополнительному или шестому дополнительному аспекту настоящего изобретения.
Согласно восьмому дополнительному аспекту настоящего изобретения предложено устройство для декодирования битового потока, содержащего кодированную последовательность цифровых изображений, причем по меньшей мере один участок изображения кодирован посредством компенсации движения по отношению к опорному изображению, содержащее устройство для хранения векторов движения согласно пятому дополнительному или шестому дополнительному аспекту настоящего изобретения.
Настоящее изобретение также распространяется на программы, которые при выполнении компьютером или процессором побуждают компьютер или процессор выполнять любой из способов, описанных выше, или которые при загрузке в программируемое устройство побуждают это устройство становиться любым из устройств, описанных выше. Программа может быть предусмотрена сама по себе или находиться на носителе информации. Носитель информации может быть запоминающим носителем или средой записи, или может быть передаваемым носителем, таким как сигнал. Программа, реализующая настоящее изобретение, может быть временной или постоянной.
Таким образом, как описано выше, возможно сжатие информации, относящейся к векторам движения временных предикторов учитывая индекса кадра опорного кадра.
В частности, возможно исключение кодирования индексов опоры, например путем масштабирования векторов движения временного предиктора таким образом, что используется только один индекс опоры, и следовательно нет необходимости сигнализации индекса опоры.
Это позволяет уменьшить размер памяти векторов движения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Теперь в качестве примера обратимся к сопровождающим чертежам, на которых:
- Фиг. 1, описанная ранее, представляет собой принципиальную схему для использования при пояснении известного предложения по сокращению требования памяти векторов движения;
- Фиг. 2, также описанная ранее, представляет собой принципиальную схему для использования при пояснении известного предложения по улучшению набора предикторов векторов движения;
- Фиг. 3, также описанная выше по тексту, является принципиальной схемой для использования при пояснении другого известного предложения по улучшению набора предикторов векторов движения;
- на Фиг. 4 показаны части устройства, подходящего для реализации кодера или декодера согласно варианту выполнения настоящего изобретения;
- на Фиг. 5 показана блок-схема частей кодера согласно варианту выполнения настоящего изобретения;
- на Фиг. 6 показана последовательность изображений, обрабатываемых кодером по Фиг. 5;
- на Фиг. 7 показана блок-схема частей декодера согласно варианту выполнения изобретения;
- на Фиг. 8 показана принципиальная схема для использования при пояснении способа определения набора предикторов векторов движения, которые могут быть использованы кодером по Фиг. 5 и декодером по Фиг. 7;
- на Фиг. 9 показана блок-схема этапов, выполняемых кодером по Фиг. 5, когда используется способ по Фиг. 8;
- Фиг. 10 представляет собой блок-схему этапов, выполняемых декодером по Фиг. 7, когда используется способ по Фиг. 8;
- Фиг. 11 представляет собой схематичный вид векторов движения;
- Фиг. 12 представляет собой схематичный вид векторов движения для использования при пояснении того, как векторы движения по Фиг. 11 отображаются в первом варианте выполнения настоящего изобретения;
- Фиг. 13 представляет собой другой схематичный вид векторов движения;
- Фиг. 14 представляет собой схематичный вид векторов движения для использования при пояснении того, как отображаются векторы движения по Фиг. 13 в пятом варианте выполнения настоящего изобретения;
- Фиг. 15 представляет собой еще один схематичный вид векторов движения; и
- Фиг. 16 представляет собой схематичный вид векторов движения для использования при пояснении того, как отображаются векторы движения по Фиг. 15 в шестом варианте выполнения настоящего изобретения.
ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ
На Фиг. 4 показана схема устройства 1000, выполненного с возможностью реализации кодера согласно варианту выполнения настоящего изобретения или реализации декодера согласно варианту выполнения настоящего изобретения. В качестве примера, устройство 1000 представляет собой микрокомпьютер, рабочую станцию или легкое портативное устройство.
Устройство 1000 содержит шину 1113 связи, с которой предпочтительно соединены:
- центральный процессор 1111, такой как микропроцессор, обозначенный как CPU;
- постоянное запоминающее устройство (ROM) 1107, на котором сохранены одна или более компьютерных программ для реализации изобретения;
- оперативное запоминающее устройство (RAM) 1112, на котором сохранен исполняемый код способа согласно изобретению, и которое обеспечивает регистры, выполненные с возможностью записи переменных и параметров, необходимых для реализации способа кодирования последовательности цифровых изображений и/или способа декодирования битового потока; и
- интерфейс 1102 связи, соединенный с сетью 1103 связи, по которой передают цифровые данные, которые должны быть обработаны.
Память 1112a векторов движения (MVM) составляет часть RAM 1112 и используется для сохранения векторов движения опорных кадров.
При необходимости устройство 1000 также может содержать следующие компоненты:
- средство 1104 хранения данных, такое как жесткий диск, способное содержать программы, реализующие изобретение, и данные, используемые или формируемые во время реализации изобретения;
- привод 1105 диска для диска 1106, причем привод диска выполнен с возможностью считывания данных с диска 1106 или записи данных на упомянутый диск;
- экран 1109 для отображения данных и/или выполнения функции графического интерфейса для пользователя посредством клавиатуры 1110 или любых других средств указания. Устройство 1000 может быть соединено с различными периферийными устройствами, такими как цифровая камера 1100 или микрофон 1108, каждый из которых соединен с картой ввода/вывода (не показана) таким образом, чтобы поставлять данные мультимедиа в устройство 1000.
Шина связи обеспечивает связь и взаимодействие между различными элементами, включенными в устройство 1000 или соединенными с ним. Упоминание шины не является ограничением, и, в частности, центральный процессор способен передавать инструкции в любой элемент устройства 1000 непосредственно или посредством другого элемента устройства 1000.
Диск 1106 может быть заменен любым носителем информации, таким как, например, компакт-диск (CD-ROM), перезаписываемый или не перезаписываемый, ZIP-диск или карта памяти, и в общем любым запоминающим носителем информации, который может быть считан микрокомпьютером или микропроцессором, встроенным или не встроенным в устройство, возможно съемным и выполненным с возможностью хранения одной или более программ, выполнение которых позволяет реализовать способ кодирования последовательности цифровых изображений и/или способ декодирования битового потока согласно изобретению.
Исполняемый код может быть сохранен либо в постоянном запоминающем устройстве 1107, на жестком диске 1104, либо на съемном цифровом носителе, таком как, например, вышеописанный диск 1106. В соответствии с вариантом исполняемый код программ может быть принят посредством сети 1103 связи через интерфейс 1102 для сохранения перед исполнением в одном из запоминающих средств устройства 1000, таком как жесткий диск 1104.
Центральный процессор 1111 выполнен с возможностью управления и руководства исполнением инструкций или участков программного кода программы или программ согласно изобретению, то есть инструкций, которые сохранены в одном из вышеупомянутых запоминающих средств. При включении питания программа или программы, сохраняемые в энергонезависимой памяти, например на жестком диске 1104 или в постоянном запоминающем устройстве 1107, передают в оперативное запоминающее устройство 1112, которое при этом содержит исполняемый код программы или программ, а также регистры для хранения переменных и параметров, необходимых для реализации изобретения.
В данном варианте выполнения устройство представляет собой программируемое устройство, которое использует программное обеспечение для реализации изобретения. Однако в качестве альтернативы настоящее изобретение может быть реализовано в аппаратном обеспечении (например, в форме специализированной интегральной схемы или ASIC).
На Фиг. 5 приведена блок-схема кодера 30 согласно варианту выполнения изобретения. Кодер представлен соединенными модулями, причем каждый модуль выполнен с возможностью реализации, например в виде программных инструкций, которые должны быть выполнены посредством CPU 1111 устройства 1000, соответствующего этапа способа, реализующего вариант выполнения изобретения.
Кодер 30 принимает в качестве ввода исходную последовательность цифровых изображений i0-in 301. Каждое цифровое изображение представлено набором экземпляров, известных как пиксели.
Кодер 30 выводит битовый поток 310.
Битовый поток 310 содержит множество единиц кодирования или секций, причем каждая секция содержит заголовок секции для кодирования значений параметров кодирования, используемых для кодирования секции, и тело секции, содержащее кодированные видеоданные. В HEVC эти секции разделяют на неперекрывающиеся наибольшие единицы кодирования (LCU), в общем случае представляющие собой блоки размером 64 пикселя х 64 пикселя. Каждая LCU может, в свою очередь, быть итеративно разделена на меньшие единицы кодирования (CU) переменного размера с использованием разложения квадродерева. Каждый CU может быть дополнительно разделен на максимум 2 симметричных прямоугольных единицы разделения (PU).
На Фиг. 6 показана последовательность 301 цифровых изображений i, секции 103, LCU 104, CU 105, PU 106 и TU 107. TU (единица преобразования) определяют отдельно от PU для преобразования и квантования в CU.
Следует отметить, что в нижеследующем описании нами используется понятие «блок» вместо конкретной терминологии CU и PU, используемой в HEVC. CU или PU представляет собой блок пикселей.
Возвращаясь к Фиг. 5, входные цифровые изображения i разделяют на блоки посредством модуля 302. Эти блоки представляют собой участки изображения и могут иметь переменные размеры (например, 4х4, 8х8, 16х16, 32х32, 64х64).
Модель 306 выбирает режим кодирования для каждого входного блока. Модуль 306 будет описан ниже по тексту.
Существует два семейства режимов кодирования - кодирование с пространственным прогнозированием или Intra-кодирование и кодирование с прогнозированием во времени или Inter-кодирование. Возможные режимы кодирования испытываются.
Модуль 303 реализует Intra-прогнозирование, при котором определенный блок, подлежащий кодированию, прогнозируют посредством «Intra-»предиктора, блока пикселей, построенного из уже кодированной информации, например вычисленного из пикселей по соседству с упомянутым блоком, подлежащим кодированию. Указание выбранного Intra-предиктора и разность между определенным блоком и его предиктором кодируют, если модуль 306 выбирает Intra-кодирование.
Прогнозирование во времени реализуется модулями 304 и 305. Сначала выбирают опорное изображение из набора опорных изображений 316, и участок опорного изображения, также называемый опорной областью, который представляет собой ближайшую область к определенному блоку, подлежащему кодированию, выбирается модулем 304 оценки движения. В общем случае модуль 304 оценки движения использует алгоритм сопоставления блоков (BMA).
По отношению к «Inter» кодированию возможны два вида прогнозирования. Моно-прогнозирование (тип P) состоит из прогнозирования блока путем обращения к одной опорной области из одного опорного изображения. Би-прогнозирование (тип B) состоит из прогнозирования блока путем обращения к двум опорным областям из одного или двух опорных изображений. В модуле 304 выполняется оценка движения между текущим блоком и опорными изображениями 316, чтобы идентифицировать в одном или нескольких из этих опорных изображений один (тип P) или несколько (тип B) блоков пикселей для использования в качестве предикторов для этого текущего блока. В случае, когда используются несколько предикторов блоков (тип B), они сливаются для генерирования одного блока прогнозирования. Используемые опорные изображения представляют собой изображения в последовательности видео, которые уже закодированы и затем восстановлены (путем декодирования).
Разность между выбранной опорной областью и определенным блоком, также называемую остаточным блоком, вычисляют посредством модуля 305 компенсации движения. Выбранная опорная область указывается вектором движения.
Информацию, относящуюся к вектору движения и к остаточному блоку, кодируют, если модуль 306 выбирает Inter-прогнозирование. Для дополнительного уменьшения скорости передачи данных вектор движения кодируют посредством разности по отношению к предиктору вектора движения. Набор предикторов векторов движения, также называемых предикторами информации движения, получают из поля 318 векторов движения посредством модуля 317 кодирования и прогнозирования векторов движения. Работа модуля 317 будет подробно описана далее в отношении Фиг. 8 и 9.
Модуль 306 выбора режима кодирования использует критерий издержек кодирования, такой как критерий скорость передачи-искажение, для определения того, какой режим среди режимов Intra и Inter прогнозирования является наилучшим. К остаточному блоку применяют преобразование 307, затем полученные преобразованные данные квантуют посредством модуля 308 и подвергают энтропийному кодированию посредством модуля 309. Преобразование применяют к вышеупомянутой единице преобразования (TU), которая включена в блок. TU может быть далее разбита на меньшие TU с использованием так называемого разложения остаточного квадродерева (RQT), как показано на Фиг. 6. В HEVC в общем случае используют 2 или 3 уровня разложений и разрешенные размеры преобразования составляют от 32х32, 16х16, 8х8 и до 4х4. Базис преобразования извлекают из дискретного косинусного преобразования (DCT).
Наконец, кодированный остаточный блок текущего блока, подлежащего кодированию, вставляют в битовый поток 310 вместе с информацией, относящейся к используемому предиктору. Для блоков, кодируемых в режиме “SKIP”, в битовом потоке кодируется только указание на предиктор без какого-либо остаточного блока.
Для вычисления «Intra» предикторов или для выполнения оценки движения для «Inter» предикторов кодер выполняет декодирование блоков, уже кодированных посредством так называемого «декодирующего» цикла 311-315. Этот декодирующий цикл обеспечивает возможность восстановления блоков и изображений из квантованных преобразованных остатков.
Квантованный преобразованный остаток подвергают деквантованию в модуле 311 путем применения обратного квантования по отношению к квантованию, обеспечиваемому модулем 308, и восстанавливают в модуле 312 путем подвергания обратному преобразованию по отношению к преобразованию, выполняемому модулем 307.
Если остаток является результатом «Intra» кодирования, то в модуле 313 добавляют используемый «Intra» предиктор к этому остатку, чтобы получить восстановленный блок, соответствующий исходному блоку, измененному потерями в результате преобразования с потерями, в данном случае операций квантования.
С другой стороны, если остаток является результатом «Inter» кодирования блоки, на которые указывают текущие векторы движения (эти блоки принадлежат опорным изображениям 316, на которые указывают индексы текущего изображения) сливаются и затем добавляются к этому декодированному остатку в модуле 314. Таким образом получают исходный блок, измененный потерями в результате операций квантования.
Конечный контурный фильтр 315 применяют к восстановленному сигналу, чтобы уменьшить эффекты, вызванные сильным квантованием полученных остатков, и чтобы повысить качество сигнала. Контурный фильтр содержит два этапа - «деблокирующий» фильтр и линейную фильтрацию. Деблокирующая фильтрация сглаживает границы между блоками, чтобы визуально ослабить эти высокие частоты, созданные кодированием. Линейная фильтрация дополнительно улучшает сигнал, используя коэффициенты фильтра, адаптивно определяемые в кодере. Таким образом, фильтрацию посредством модуля 315 применяют к изображению, когда декодированы все блоки пикселей данного изображения.
Фильтрованные изображения, также называемые восстановленными изображениями, затем сохраняют в качестве опорных изображений 316, чтобы обеспечить возможность последующих «Inter» прогнозирований, которые происходят при сжатии следующих изображений текущей последовательности видео.
В контексте HEVC возможно использование нескольких опорных изображений 316 для оценки и компенсации движения текущего изображения. Другими словами, оценку движения выполняют в отношении N изображений. Таким образом в некоторых из множества опорных изображений выбирают лучшие «Inter» предикторы текущего блока для компенсации движения. Соответственно, два смежных блока могут иметь два блока предикторов, которые получены из двух различных опорных изображений. Это является, в частности, причиной того, что в сжатом битовом потоке указывается индекс опорного изображения (в дополнение к вектору движения), используемый для блока предикторов.
Использование множества опорных изображений является как инструментом для противодействия ошибкам, так и инструментом для повышения эффективности сжатия. Группа VCEG рекомендует ограничивать число опорных изображений четырьмя.
На Фиг. 7 приведена блок-схема декодера 40 согласно варианту выполнения изобретения. Декодер представлен соединенными модулями, причем каждый модуль выполнен с возможностью реализации, например в форме инструкций программирования, которые должны быть выполнены посредством CPU 1111 устройства 1000, соответствующего этапа способа, реализующего вариант выполнения изобретения.
Декодер 40 принимает битовый поток 401, содержащий единицы кодирования, каждая из которых состоит из заголовка, содержащего информацию о параметрах кодирования, и тела, содержащего кодированные видеоданные. Как пояснено выше по тексту в отношении Фиг. 5, кодированные видеоданные подвергаются энтропийному кодированию, а индексы предикторов векторов движения для определенного блока кодируются в предварительно определенное число битов. Принимаемые кодированные видеоданные подвергаются энтропийному декодированию посредством модуля 402, подвергаются деквантованию посредством модуля 403, и затем модуль 404 применяет к ним обратное преобразование.
В частности, когда принимаемые кодированные видеоданные соответствуют остаточному блоку текущего блока, подлежащего декодированию, декодер также декодирует из битового потока информацию прогнозирования движения для нахождения опорной области, используемой кодером.
Модуль 410 применяет декодирование вектора движения для каждого текущего блока, кодированного посредством прогнозирования движения. Аналогично модулю 317 кодера по Фиг. 5, модуль 410 декодирования вектора движения использует информацию (поле 411 векторов движения, которое аналогично полю 318 векторов движения по Фиг. 5), относящуюся к векторам движения из текущего кадра и из опорных кадров для генерирования набора предикторов векторов движения. Работа модуля 410 будет подробно описана далее в отношении Фиг. 10. Если битовый поток принят без потерь, декодер генерирует в точности такой же набор предикторов векторов движения, что и кодер. Как только получен индекс предиктора вектора движения для текущего блока, если не произошло потерь, фактическое значение вектора движения, ассоциированное с текущим блоком, может быть декодировано и подано в модуль 406, который применяет обратную компенсацию движения. Опорную область, указанную декодированным вектором движения, извлекают из опорного изображения среди сохраненных опорных изображений 408 и также подают в модуль 406, позволяя ему применить обратную компенсацию движения.
В случае, если применялось Intra прогнозирование, модуль 405 применяет обратное Intra прогнозирование.
В результате декодирования в соответствии с Inter- или Intra- режимом получают декодированный блок. Модуль 407 применяет деблокирующий фильтр, аналогичный деблокирующему фильтру 315, применяемому в кодере. В конечном итоге декодер 40 обеспечивает декодированный видеосигнал 409.
На Фиг. 8 приведена принципиальная схема для использования при пояснении генерирования набора предикторов векторов движения или кандидатов векторов движения в текущей реализации HEVC.
В текущей схеме HEVC векторы движения кодируют посредством кодирования с прогнозированием, используя множество векторов движения. Этот способ называется усовершенствованным прогнозированием векторов движения (AMVP), и он был адаптирован с учетом нового контекста HEVC со структурой больших блоков. Эта схема применяется для режимов Skip, Inter и Merge.
Данный способ позволяет выбрать лучший предиктор из определенного набора, причем набор состоит из пространственных векторов движения и временных векторов движения. Оптимальное число пространственных и временных предикторов по-прежнему оценивается в процессе стандартизации HEVC. Однако на дату подачи настоящей заявки текущая реализация включает в себя 2 пространственных предиктора и один временной соотнесенный предиктор для режимов Skip и Inter, и 4 пространственных предиктора и один временной предиктор для режима Merge. Настоящее изобретение не ограничивается применением в текущей реализации AMVP. Реализация AMVP может изменяться по отношению к текущей, описанной ниже по тексту, но предполагается, что варианты выполнения настоящего изобретения, которые будут описаны ниже по тексту, обеспечат те же полезные эффекты и результаты с другими реализациями, которые могут быть приняты.
Кроме того, в источнике JCTVC-D072, ссылка на который приведена во вступительной части настоящей заявки, было предложено применение большего числа временных предикторов вместо использования одного в текущей версии. Изобретение также может быть применено с таким изменением.
В наборе предикторов, представленном на Фиг. 8, выбирают два пространственных вектора движения из числа относящихся к блокам сверху и слева, в том числе угловые блоки сверху и угловой блок слева.
Предиктор слева выбирают из числа блоков I, H, G, F. Предиктор вектора движения считается доступным, если вектор существует и если индекс опорного кадра является тем же, что и индекс опорного кадра текущего блока (что означает, что вектор движения, используемый в качестве предиктора, указывает на тот же опорный кадр, что и вектор движения текущего блока). Выбор выполняют путем поиска снизу (I) вверх (F). Первый предиктор, который соответствует вышеприведенным критериям доступности, выбирают в качестве предиктора слева (только один предиктор слева добавляют в набор предикторов). Если ни один предиктор не удовлетворяет критериям, предиктор слева считают недоступным.
Inter-блок может относиться к моно-прогнозированию (тип P) или к би-прогнозированию (тип B). В P-кадре присутствуют только inter-блоки типа P. В B-кадре inter-блоки имеют тип P или B. В inter-блоке типа P используется список L0 опорных кадров. Его вектор движения относится к одному опорному кадру из этого списка. Индекс опоры, таким образом, ассоциирован с вектором движения. В inter-блоке типа B используются два списка L0 и L1 опорных кадров. Один из двух его векторов движения относится к одному опорному кадру из списка L0, и другой из двух его векторов движения относится к одному опорному кадру из списка L1. Таким образом, индекс опоры ассоциирован с каждым из упомянутых двух векторов движения.
Отсутствие вектора движения означает, что соответствующий блок был Intra-кодирован или что в списке не существует вектора движения, с которым ассоциирован кодируемый вектор движения. Например, для блока в B-кадре, если соседний блок имеет только один вектор движения в списке “L1” и текущий вектор движения находится в “L0”, соседний вектор движения считают отсутствующим для прогнозирования текущего вектора движения.
Предиктор сверху выбирают из блоков E, D, C, B, A, опять же в результате поиска, в данном случае справа налево. Первый вектор движения справа налево, который соответствует определенным выше критериям доступности (если предиктор имеется и имеет такой же опорный кадр, что и текущий вектор движения), выбирают в качестве предиктора сверху. Если ни один предиктор не удовлетворяет критериям, предиктор сверху считают недоступным.
Временной предиктор вектора движения получают из ближайшего опорного кадра, когда кадры не имеют различный порядок для кодирования и для отображения (они успешно кодированы без переупорядочивания). Эта конфигурация соответствует конфигурации с малой задержкой (отсутствует задержка между процессом декодирования и процессом отображения). В случае B-кадров для соотнесенного блока рассматривают 2 вектора движения. Один из них находится в первом списке “L0” опорных изображений и один из них находится во втором списке “L1” опорных изображений. Если имеются оба вектора движения, выбирают движение, которое имеет наименьшую временную протяженность. Если оба предиктора имеют одинаковую временную протяженность, выбирают движение из “L0”. Затем выбранный соотнесенный вектор движения масштабируют, при необходимости в соответствии с удаленностью по времени между опорным изображением и изображением, содержащим блок, подлежащий кодированию. Если соотнесенного вектора не существует, предиктор считают недоступным.
Для иерархического кодирования B-кадров, которое включает в себя переупорядочивание кадров и поэтому связано с более длительной задержкой декодирования, могут быть рассмотрены 2 соотнесенных вектора движения. Оба вектора получают из будущего опорного кадра. Выбирают вектор движения, который пересекает текущий кадр. Если оба предиктора пересекают текущий кадр, выбирают блок, содержащий вектор движения, который имеет наименьшую временную протяженность. Если оба вектора имеют одинаковую временную протяженность, то выбирают вектор движения из первого списка “L0”. Затем масштабируют соотнесенный вектор движения, выбранный в качестве временного предиктора вектора движения, при необходимости в соответствии с удаленностью по времени между опорным изображением и изображением, содержащим блок, подлежащий кодированию. Если соотнесенного вектора не существуют, предиктор считают недоступным.
Как для случаев с малой задержкой, так и для случаев иерархического кодирования, когда соотнесенный блок разделен на множество разделов (соотнесенный блок потенциально может содержать множество векторов движения), выбираемый вектор движения получают из центрального раздела, как указано во вводной части настоящего описания, см. Jung, G. Clare, (Orange Labs), “Temporal MV predictor modification for MV-Comp, Skip, Direct and Merge schemes”, JCTVC-D164, Дэгу, Корея, 20-28 января 2011 г., где предлагается использовать центрированный временной предиктор, а также WO 2011/001077 A.
В результате этого способа генерирования предикторов вектора движения сгенерированный набор предикторов может содержать 0, 1, 2 или 3 предиктора. Если ни один предиктор не был включен в набор, вектор движения не прогнозируют. Как вертикальная, так и горизонтальная компонента кодируются без прогнозирования (это соответствует прогнозированию посредством предиктора, равного нулевому значению). В текущей реализации HEVC индекс предиктора равен 0.
Режим Merge (Слияния) является частным случаем Inter-кодирования, подобным обычному режиму Skip (Пропуска), хорошо известному специалистам в данной области техники. Главное отличие по сравнению с обычным режимом Skip состоит в том, что режим Merge распространяет значение индекса опорного кадра, направления (двунаправленный или однонаправленный) и список (с «однонаправленным» направлением) предикторов вектора движения на прогнозируемый блок. Режим Merge использует предиктор вектора движения и его индекс опорного кадра, если предиктор не является временным предиктором, для которого рассматриваемый опорный кадр всегда является ближайшим предыдущим опорным кадром, также называемым Ref0 (и всегда имеет место би-прогнозирование для B-кадров). Таким образом, предикторы блоков (скопированные блоки) получают из опорных кадров, на которые указывают предикторы векторов движения.
Упорядочивание кандидатов в наборе является важным для уменьшения непроизводительных затрат на сигнализацию наилучшего предиктора движения в наборе предикторов. Упорядочивание набора адаптируется в зависимости от текущего режима прогнозирования с целью размещения наиболее вероятного предиктора движения в первом положении, поскольку наименьшие непроизводительные затраты имеют место, если первый кандидат выбран в качестве наилучшего предиктора. В текущей реализации HEVC временной предиктор занимает первое положение.
Эти непроизводительные затраты на сигнализацию индекса наилучшего предиктора могут быть дополнительно сокращены путем минимизации числа кандидатов в наборе. Дублируемые векторы движения просто удаляют из набора.
Для частного случая режима Merge в процессе сокращения учитываются значения вектора движения и его опорный кадр. Соответственно, для определения, являются ли два предиктора дублируемыми предикторами, сравнивают две компоненты вектора движения и его индекс опоры для двух предикторов и только если эти три значения равны, один предиктор удаляют из набора. Для B-кадра этот критерий равенства распространяют на направление и на списки. Так, два предиктора считаются дублируемыми предикторами, если они оба используют одно и то же направление, одни и те же списки (L0, L1 или L0 и L1), индексы опорных кадров, и имеют одинаковые значения векторов движения (MV_L0 и MV_L1 для би- прогнозирования).
В AMVP сигнализация индекса зависит от результата процесса сокращения предикторов векторов движения, описанного выше по тексту. Действительно, число битов, выделенных на сигнализацию, зависит от числа векторов движения, остающихся после сокращения. Например, если в конце процесса сокращения остается только один вектор движения, не требуется непроизводительных затрат для сигнализации индекса предиктора вектора движения, поскольку индекс может быть легко получен декодером. Нижеприведенная таблица 1 показывает кодовое слово для кодирования каждого индекса в соответствии с числом предикторов после процесса сокращения.
Таблица 1 | |||||
Кодовое слово согласно числу N предикторов в наборе | |||||
Индекс | N=1 | N=2 | N=3 | N=4 | N=5 |
0 | (выводимое) | 0 | 0 | 0 | 0 |
1 | 1 | 10 | 10 | 10 | |
2 | 11 | 110 | 110 | ||
3 | 111 | 1110 | |||
4 | 1111 |
На Фиг. 9 показана блок-схема для использования при пояснении работы схемы AMVP на стороне кодера. Операции на Фиг. 9 выполняются модулем 317 по Фиг. 5, кроме тех, для которых указано иное, и можно считать, что этот модуль 317 содержит модули 603, 605, 607, 610 и 615 по Фиг. 9. Поле 601 векторов движения по Фиг. 9 соответствует полю 318 векторов движения по Фиг. 5. Модуль 612 энтропийного кодера по Фиг. 9 соответствует модулю 309 энтропийного кодера по Фиг. 5. Все операции по Фиг. 9 могут быть реализованы в программном обеспечении и исполнены центральным процессором 1111 устройства 1000.
Модуль 603 генерирования предикторов векторов движения принимает индекс 613 опорного кадра текущего вектора движения, подлежащего кодированию, и также принимает поле 601 векторов движения. Модуль 603 генерирует набор 604 предикторов векторов движения, описанный выше по тексту в отношении Фиг. 8, принимая во внимание индекс 613 опорного кадра. Затем модуль 605 применяет процесс сокращения, как было также описано выше в отношении Фиг. 8. Модуль 605 формирует сокращенный набор 606 предикторов векторов движения. Также выводится число предикторов 616 векторов движения в сокращенном наборе 606. Модуль 607 принимает вектор движения, который должен быть кодирован 602, и применяет выбор по скорости передачи-искажению (RD) наилучшего предиктора из сокращенного набора 606 предикторов векторов движения. Если наилучший предиктор выбран, модуль 607 выводит индекс 608 предиктора вектора движения и выбранный предиктор 609 вектора движения. Затем модуль 610 формирует разность между вектором движения, который должен быть кодирован 602, и выбранным предиктором 609 вектора движения. Эта разность представляет собой остаток 611 вектора движения. Этот остаток вектора движения затем подвергают энтропийному кодированию в модуле 612. Модуль 614 преобразует индекс 608 предиктора вектора движения в кодовое слово 615 в соответствии с числом предикторов 616 в сокращенном наборе 606 предикторов векторов движения, как описано выше в отношении таблицы 1. Как описано выше по тексту, если этот набор содержит только один предиктор, на сторону декодера не передается ни один индекс, и не генерируется ни одного кодового слова. Если набор содержит один или более предикторов, кодовое слово генерируется в модуле 614 и затем подвергается энтропийному кодированию в модуле 612.
Фиг. 10 представляет собой блок-схему для использования при пояснении работы схемы AMVP на стороне декодера. Операции по Фиг. 10 выполняются модулем 410 по Фиг. 7, кроме тех, для которых указано иное, и можно считать, что этот модуль 410 содержит модули 702, 704, 711 и 715 по Фиг. 10. Поле 701 векторов движения по Фиг. 10 соответствует полю 411 векторов движения по Фиг. 7. Модуль 706 энтропийного декодера по Фиг. 10 соответствует модулю 402 энтропийного декодера по Фиг. 7. Все операции по Фиг. 10 могут быть реализованы в программном обеспечении и исполнены центральным процессором 1111 устройства 1000.
Модуль 702 принимает поле 701 векторов движения текущего кадра и предыдущих декодированных кадров. Модуль 702 также принимает индекс 713 опорного кадра текущего вектора движения, который должен быть декодирован. Модуль 702 генерирует набор 703 предикторов движения на основании поля 701 векторов движения и индекса 713 опорного кадра. Эта обработка является такой же, как и обработка, описанная в отношении модуля 603 на стороне кодера. Затем модуль 704 применяет процесс сокращения. Эта обработка является такой же, как и обработка, описанная в отношении модуля 605 на стороне кодера. Модуль 704 формирует сокращенный набор 708 предикторов векторов движения. Также выводится число предикторов 716 векторов движения в сокращенном наборе 708.
Модуль 706 энтропийного декодера извлекает остаток 707 вектора движения из битового потока 705 и декодирует его. Затем число предикторов 716 в сокращенном наборе 708 используется модулем 706 для извлечения (при необходимости) кодового слова 714 предиктора вектора движения. Это кодовое слово (если оно существует) конвертируется (преобразовывается) модулем 715 в значение 709 индекса предиктора согласно числу предикторов 716 в сокращенном наборе, с использованием вышеприведенной таблицы 1 для конвертации. Предиктор 710 вектора движения затем извлекают из сокращенного набора 708 в соответствии со значением 709 индекса предиктора. Модуль 711 прибавляет предиктор вектора движения к остатку 707 движения для получения декодированного вектора 712 движения.
Из вышеприведенного ясно, что для каждого кадра, используемого в качестве опорного кадра для извлечения соотнесенного предиктора вектора движения необходимо сохранение его соответствующих векторов движения на сторонах кодера и декодера. Это приводит к тому, что размер памяти векторов движения становится значительным, учитывая, во-первых, дробность представления движения (в настоящей схеме HEVC минимальный размер блока в Inter-режиме составляет 4х4) и, во-вторых, наличие двух векторов на блок движения для B_SLICE. По оценкам, для графических изображений разрешением 4Кх2К и с использованием дробности в один набор векторов движения на один блок 4х4 требуется 26 Мбит на кадр. Это высокое требование основано на следующем расчете: 4096х2048/4х4 (минимальный размер блока)×2 (направления)×2 компоненты (Mvx, Mvy)×12 битов.
Кроме того, помимо самих векторов движения также необходимо хранить в памяти другую информацию, относящуюся к предикторам векторов движения.
Соотнесенный блок может относиться к режиму INTRA: это означает, что соотнесенный вектор движения не существует. Эта информация составляет 1 бит на блок.
○ (4096*2048)/(4*4)*2 направления *1 бит=1 Мбит/кадр
Каждый предиктор вектора движения относится к одному из 4 возможных индексов опоры. Это составляет 2 бита сигнализации на вектор.
○ (4096*2048)/(4*4)*2 направления *2 бита=2 Мбита/кадр
Каждый вектор движения относится к двум различным спискам, которые также должны быть сигнализированы. Здесь нужен один дополнительный бит.
○ (4096*2048)/(4*4)*2 направления *1 бит=1 Мбит/кадр
Память векторов движения должна быть быстрой памятью и обычно является частью RAM, например RAM 1112 по Фиг. 4. Это затратно, особенно для портативных устройств.
ПЕРВЫЙ ВАРИАНТ ВЫПОЛНЕНИЯ
Теперь будет описан первый вариант выполнения настоящего изобретения.
В первом варианте выполнения в кодере и в декодере применяется в общем одинаковая обработка. Это имеет смысл, поскольку некоторые операции требуют того, чтобы кодер и декодер выполняли в точности те же задачи и получали в итоге те же самые результаты, чтобы не передавать какую-либо побочную информацию, но при этом производить декодируемый битовый поток.
В первом варианте выполнения осуществляется сжатие информации, относящейся к векторам движения временных предикторов с учетом индекса кадра опорного кадра.
Необходимость кодирования индексов опоры исключается путем масштабирования векторов движения временного предиктора таким образом, что используется только один индекс опоры и соответственно нет необходимости в сигнализации индекса опоры.
Фиг. 11 представляет собой иллюстрацию, изображающую соотнесенные векторы движения в текущей спецификации HEVC для структуры IPPP, где текущий кадр кодируют с использованием опорного кадра в прошлом.
На данном чертеже мы представили несколько блоков U1-U6, которые должны быть кодированы в текущем кадре и соотнесенные блоки C1-C6 в опорном кадре RefC. Векторы движения для соотнесенных блоков в опорном кадре RefC сами могут быть кодированы с опорой на блоки в одном или более дополнительных опорных кадрах. В данном примере эти дополнительные опорные кадры являются опорными кадрами Ref0, Ref1, Ref2 и Ref3.
Другими словами, прогнозирование движения текущего кадра использует временные предикторы движения, относящиеся к предыдущему кадру RefC. Это означает, что для прогнозирования вектора движения текущего блока текущего кадра может быть использован временной предиктор предыдущего кадра RefC.
Соотнесенные векторы движения, соответствующие векторам движения предыдущего кадра RefC, представлены на Фиг. 11 соответствующими стрелками. Стрелки в данном примере указывают на четыре дополнительных опорных кадра Ref0, Ref1, Ref2 и Ref3. Как показано на этом чертеже, с каждым блоком может быть ассоциировано до двух векторов движения. В данном случае на Фиг. 11 показаны четыре дополнительных опорных кадра Ref0 - Ref3, но это число может быть легко увеличено до более четырех опорных кадров. В данной связи комитет JCT-VC в настоящее время рекомендует иметь 4 опорных кадра в качестве условий испытаний для будущего стандарта HEVC.
Как будет очевидно из Фиг. 11, в дополнение к представлению соотнесенных векторов движения по величинам их компонент необходимо указать опорный кадр, на который указывают векторы движения, и некоторую дополнительную информацию, относящуюся к этим векторам движения. В следующей таблице представлена вся информация, относящаяся к векторам движения.
Информация на блок | Число битов |
2 компоненты вектора х 2 вектора (например: V1A, V1B) | 12 битов ×2×2=48 битов |
4 возможных опорных кадра для 2 векторов (V1A, V1B) | 2 бита ×2=4 бита |
Режим сигнализации (2 бита) 0: INTRA 1: INTER, используемый вектор: V1A 2: INTER, используемый вектор: V1B 3: INTER, используемый вектор: V1A и V1B |
2 бита |
Итого | 54 бита |
Обычно во время процессов кодирования и декодирования и для осуществления доступа к соотнесенным векторам движения текущего кадра необходимо сохранять в памяти все векторы движения предыдущего кадра RefC, представленного на Фиг. 11. Эти соотнесенные векторы движения V1A, V1B, V2A, V2B, V3A, V4A, V4B и V6A предыдущего кадра характеризуются своими горизонтальными и вертикальными компонентами, а также опорным кадром (индексом опорного кадра), на который указывает вектор движения.
Фиг. 12 представляет собой схематичный вид для пояснения того, как первый вариант выполнения исключает необходимость сохранения индекса опоры для каждого соотнесенного вектора движения. На этом чертеже векторы движения в RefC были масштабированы до ближайшего дополнительного опорного изображения Ref0. Здесь «ближайшее» означает ближайшее по времени. В настоящем примере горизонтальные и вертикальные компоненты соотнесенных векторов движения V1A, V3A и V4B, указывающих на Ref1, разделены на два, компоненты соотнесенного вектора движения V2A, указывающего на Ref2, разделены на три, и компоненты соотнесенного вектора движения V4A, указывающего на Ref3, разделены на четыре. В общем случае в зависимости от конфигурации опорных кадров масштабирование выполняют в соответствии с удаленностью кадра от рассматриваемых опорных кадров.
Таким образом, в примере по Фиг. 12 размеры компонент всех векторов, которые исходно указывали на опорные кадры Ref1-Ref3, отличные от выбранного опорного кадра Ref0, были изменены таким образом, чтобы они указывали на выбранное опорное изображение Ref0. Соответственно, поскольку в конечном итоге для всех доступных векторов движения теперь будет один и тот же опорный кадр Ref0, нет необходимости передавать индекс опорного кадра, поскольку индекс опоры уникален.
Следует понимать, что для блоков, изначально имеющих два вектора движения, один из этих двух векторов движения выбирают как часть отображения. Например, в случае блока C2 изначально имеются два вектора движения V2A и V2B, но после отображения имеется V2S, который является масштабированной версией V2B. Это обеспечивает возможность дальнейшего сжатия информации, относящейся к векторам движения. Наличие только одного вектора позволяет нам сократить число битов, относящихся к «режиму сигнализации», который использовал 2 бита вместо 1 бита после выбора.
Учитывая все эти изменения, относящиеся к векторам движения, информация движения, относящаяся к соотнесенным блокам, может быть значительно сокращена как охарактеризовано в следующей таблице.
Информация на блок | Число битов |
2 компоненты вектора х 1 вектор (например: V2S) | 12 битов ×2=24 бита |
1 единственный опорный кадр | Нет необходимости сигнализировать это |
Режим сигнализации (2 бита) 0: INTRA 1: INTER, используемый вектор: например V2S |
1 бит |
Итого | 25 битов |
Нет безусловной необходимости выбирать один вектор движения как часть отображения, и в качестве альтернативы могут быть сохранены 2 вектора для каждого блока.
ВТОРОЙ ВАРИАНТ ВЫПОЛНЕНИЯ
В первом варианте выполнения опорный кадр Ref0 выбирают в качестве опорного кадра, в который следует отображать векторы движения в RefC, которые исходно указывают на Ref1, это ближайший опорный кадр по отношению к соотнесенному кадру.
Во втором варианте выполнения выбор уникального опорного кадра осуществляют в соответствии с минимальной разностью по счетчику порядка графического изображения (POC) между выбранным опорным кадром и кадром соотнесенных предикторов векторов движения (RefC). Параметр POC указывает реальный порядок выполнения процесса декодирования графических изображений в декодере. Порядок декодирования может отличаться от порядка отображения, в особенности когда используется иерархическая структура B графических изображений.
ТРЕТИЙ ВАРИАНТ ВЫПОЛНЕНИЯ
В третьем варианте выполнения опорный кадр, который больше всего используется в качестве опорного для соотнесенных векторов движения, выбирают в качестве опорного кадра, в который следует отображать соотнесенные векторы движения. Например, сравнивают количество блоков в RefC, которые указывают на Ref0, Ref1, Ref2 и Ref3, соответственно, и выбирают опорный кадр среди Ref0, Ref1, Ref 2 или Ref3, для которого упомянутое количество является наибольшим. Если количества равны, один опорный кадр может быть выбран в соответствии с предварительно определенным правилом, например может быть выбран кадр, ближайший к RefC.
В данном варианте выполнения могут быть снижены издержки обработки, поскольку он приведет к наименьшему числу операций масштабирования.
ЧЕТВЕРТЫЙ ВАРИАНТ ВЫПОЛНЕНИЯ
В четвертом варианте выполнения опорный кадр, который имеет наименьшее значение QP (наивысшее качество) выбирают в качестве опорного кадра, в который следует отображать соотнесенные векторы движения.
ПЯТЫЙ ВАРИАНТ ВЫПОЛНЕНИЯ
Настоящее изобретение также применимо к иерархической структуре B графических изображений с движением в «будущем».
Как показано на Фиг. 13, соотнесенные векторы движения ассоциированы с блоками C1-C6 опорного кадра RefC.
На данном чертеже представлено кодирование кадров для иерархической структуры B графических изображений, в которой опорные кадры относятся как к прошлому (Ref2, Ref0), так и к будущему (Ref1, Ref3). Как описано в отношении структуры IPPP по Фиг. 11, в пятом варианте выполнения масштабируют векторы движения для каждого блока C1 - C6 таким образом, что в конечном итоге они будут относиться к одному опорному кадру, чтобы исключить какую-либо передачу индекса опорного кадра.
В пятом варианте выполнения один опорный кадр Ref1 произвольно выбирают из опорных кадров Ref1 и Ref3 в «будущем», как показано на Фиг. 14.
В данном случае для блока C1 мы будем использовать вектор движения X1B, а не X1A, поскольку Ref0 ближе к кадру RefC, чем Ref3. Этот вектор X1B затем инвертируют (инвертируя знак каждой компоненты вектора) для получения соответствующего ему вектора X1S в Ref1. Поскольку расстояние от RefC до Ref1 является тем же, что и расстояние от RefC до Ref0, нет необходимости масштабирования этого вектора.
Для блока C2 два вектора движения X2A и X2B имеют одинаковую удаленность по времени. В данном случае мы предпочитаем использовать вектор движения, направленный в будущее. Поэтому будет изменен размер вектора X2B, чтобы в конечном итоге он указывал на Ref1.
Для блока C3 имеется один вектор движения X3A, уже указывающий на Ref1. Нет необходимости изменять или масштабировать его.
Для блока C4 есть один вектор движения X4B, уже отображающийся в Ref1. Мы выберем этот вектор вместо масштабирования другого вектора движения X4A.
Для блока C5 ни один вектор движения недоступен, поскольку он считается Intra-кодированным.
Для блока C6 имеется один доступный вектор движения, но он не указывает на Ref1. Как и в случае с вектором X1S блока C1, вектор движения X6A инвертируют, получая X6S.
В результате этих изменений каждый блок имеет вектор движения, в конечном итоге указывающий на “Ref1”.
ШЕСТОЙ ВАРИАНТ ВЫПОЛНЕНИЯ
На Фиг. 15 представлен шестой вариант выполнения, который также является пригодным для иерархической структуры B графических изображений. В то время как в пятом варианте выполнения один опорный кадр выбирали из «будущего» опорного кадра, в шестом варианте выполнения один выбранный опорный кадр является “Ref0” и его произвольно выбирают из «прошлого».
На Фиг. 16 применяются те же правила для получения соответствующего вектора, указывающего на Ref0, для каждого блока C1-C4 и C6 (но не для C5, который является Intra-кодированным).
В данном примере для блока C1 Z1B уже указывает на Ref0, и не применяется какое-либо изменение или масштабирование. Для блока C2 изменяют масштаб Z2A в Ref0, получая Z2S. Для блоков C3 и C4 инвертируют векторы движения, чтобы они в конечном итоге указывали на Ref0, но не выполняют какого-либо масштабирования.
Наконец, для блока C6, поскольку Z6A уже указывает на Ref0, не выполняются какие-либо изменения.
Опять же, как показано на Фиг. 16, в конечном итоге для каждого блока получают вектор движения, указывающий на Ref0.
СЕДЬМОЙ ВАРИАНТ ВЫПОЛНЕНИЯ
В седьмом варианте выполнения определяют вектор движения (псевдовектор движения) для конкретного блока C5, который изначально был кодирован в (режиме) INTRA. Этот вектор движения может быть определен путем копирования вектора движения одного соседнего блока в RefC или путем применения операции усреднения в отношении соответствующих значений двух или более соседних векторов.
Кроме того, если текущий блок C5 имеет лишь соседние блоки, которые сами являются Intra-кодированными блоками, нет возможности простого получения вектора движения. В таком случае псевдовектор движения, ассоциированный с блоком С5, устанавливают в (0,0). Это обеспечивает возможность исключить передачу режима сигнализации, поскольку теперь для сжатия векторов движения все блоки могут считаться Inter-кодированными.
При этом сжатие может выполняться с учетом лишь информации векторов движения, например 24 битов вместо 25, как охарактеризовано в следующей таблице.
Информация на блок | Число битов |
2 компоненты вектора х 1 вектор (например: V2S) | 12 битов ×2=24 бита |
1 единственный опорный кадр | Нет необходимости сигнализировать это |
Режим сигнализации Всегда режим INTER, используемый вектор: например V2S |
Нет необходимости сигнализировать это |
Итого | 24 бита |
ВОСЬМОЙ ВАРИАНТ ВЫПОЛНЕНИЯ
В седьмом варианте выполнения используют псевдовектор движения в сочетании с отображением в один опорный кадр. Однако в этом нет безусловной необходимости.
В восьмом варианте выполнения настоящего изобретения псевдовектор движения применяют к каждому блоку в RefC, который изначально является Intra-кодированным, чтобы обеспечить возможность обработки всех блоков как Inter-кодированных. Отображение не выполняется.
ДЕВЯТЫЙ ВАРИАНТ ВЫПОЛНЕНИЯ
Как отмечено в описании первого варианта выполнения, обычно сохраняют все векторы движения в каждом опорном кадре. Однако, как в предложениях JCTVC-C257 и JCTVC-D072, упомянутых во вступительной части и показанных на Фиг. 1, возможно использовать положение одного блока для уплотнения блоков буфера векторов движения NxN. Один вектор движения в этом положении блока сохраняют в качестве репрезентативного вектора движения для всего блока NxN.
В девятом варианте выполнения настоящее изобретение используют в сочетании с этим уплотнением блоков. При этом необходимо сохранять лишь репрезентативные векторы движения, и в соответствии с настоящим изобретением эти репрезентативные векторы отображают в выбранный опорный кадр, чтобы избежать сохранения индексов опорных блоков для репрезентативных векторов движения.
ДЕСЯТЫЙ ВАРИАНТ ВЫПОЛНЕНИЯ
В десятом варианте выполнения, используя другое положение блока в соотнесенном блоке, или даже используя положение блока в другом блоке, соседнем с соотнесенным блоком, может быть обеспечена более высокая степень разнообразия между временным предиктором (соотнесенный вектор движения) и пространственными предикторами (векторами движения для соседних блоков в текущем кадре). Результат этого состоит в том, что при достижении такого же снижения требования к памяти для векторов движения, как и в девятом варианте выполнения, настоящий вариант выполнения не приводит к каким-либо потерям в эффективности или приводит к незначительным потерям по сравнению с системой, в которой сохраняют все векторы движения и не используется уплотнение блоков.
Варианты выполнения, описанные выше, основаны на разделении входных изображений на блоки, но в более общем случае может быть рассмотрен любой вид участков изображения, подлежащего кодированию или декодированию, в частности прямоугольные участки или, в более общем виде, геометрические участки.
В более общем смысле, любое изменение или улучшение вышеописанных вариантов выполнения, которые могут быть с легкостью предусмотрены специалистом в данной области техники, следует считать входящим в объем настоящего изобретения.
1. Способ сохранения векторов движения первого опорного кадра, которым разрешено указывать на множество дополнительных опорных кадров, причем способ состоит в том, что:
выбирают один из упомянутых дополнительных опорных кадров;
отображают в выбранный дополнительный опорный кадр каждый вектор движения упомянутого первого опорного кадра, который указывает на один из упомянутых дополнительных опорных кадров, отличных от выбранного дополнительного опорного кадра, так что после отображения все векторы движения первого опорного кадра указывают на выбранный дополнительный опорный кадр; и
сохраняют векторы движения, подвергнутые упомянутому отображению.
2. Способ по п. 1, дополнительно состоящий в том, что: когда блок упомянутого первого опорного кадра исходно имеет два вектора движения, выбирают один из упомянутых двух векторов движения, причем невыбранный вектор движения не сохраняют.
3. Способ по п. 1, в котором векторы движения сохраняют без сохранения какой-либо информации, идентифицирующей отдельные опорные кадры для векторов движения.
4. Способ по п. 1, в котором выбранный дополнительный опорный кадр является тем из упомянутых дополнительных опорных кадров, который является ближайшим во времени к первому опорному кадру.
5. Способ по п. 1, в котором выбор дополнительного опорного кадра зависит от порядка, в котором кадры будут декодированы декодером.
6. Способ по п. 5, в котором выбранный дополнительный опорный кадр является тем из упомянутых дополнительных опорных кадров, который имеет минимальную разность по счетчику порядка изображения (РОС) относительно первого опорного кадра.
7. Способ по п. 1, в котором выбранный дополнительный опорный кадр является тем из упомянутых дополнительных опорных кадров, на который указывает наибольшее число векторов движения в первом опорном кадре.
8. Способ по п. 1, в котором выбранный дополнительный опорный кадр является тем из упомянутых дополнительных опорных кадров, который имеет самое высокое качество изображения.
9. Способ по п. 1, в котором отображение содержит масштабирование каждого вектора движения упомянутого первого опорного кадра, который указывает на один из упомянутых дополнительных опорных кадров, отличных от выбранного дополнительного опорного кадра.
10. Способ по п. 9, в котором масштабирование зависит от временного соотношения между первым опорным кадром, выбранным опорным кадром и дополнительным опорным кадром, отличным от упомянутого выбранного дополнительного опорного кадра.
11. Способ по п. 1, в котором дополнительные опорные кадры содержат опорные кадры, которые следуют за первым опорным кадром и которые предшествуют первому опорному кадру, и когда выбранный дополнительный опорный кадр следует за первым опорным кадром и дополнительный опорный кадр, отличный от выбранного опорного кадра, предшествует первому опорному кадру, или когда выбранный дополнительный опорный кадр следует за первым опорным кадром и дополнительный опорный кадр, отличный от выбранного опорного кадра, следует за первым опорным кадром, отображение содержит изменение знака вектора движения.
12. Способ по п. 2, дополнительно содержащий генерирование для упомянутого или каждого интра-кодированного блока в упомянутом первом опорном кадре псевдовектора движения, указывающего на выбранный опорный кадр, так что все блоки упомянутого первого опорного кадра являются интер-кодированными, посредством чего не требуется бит для каждого блока для сигнализации интер/интра кодирования.
13. Способ по п. 2, дополнительно состоящий в том, что выбирают репрезентативные векторы движения первого опорного кадра и сохраняют репрезентативные векторы движения, но не сохраняют другие векторы движения первого опорного кадра.
14. Способ кодирования последовательности цифровых изображений в битовый поток, причем по меньшей мере одна часть изображения кодируется посредством компенсации движения по отношению к опорному изображению, содержащий сохранение векторов движения опорного изображения согласно способу по п. 1, при этом сохраненные векторы движения могут быть использованы для кодирования вектора движения для кодирования упомянутой части изображения, кодируемой по отношению к опорному изображению.
15. Способ декодирования битового потока, содержащего закодированную последовательность цифровых изображений, при этом по меньшей мере одна часть изображения закодирована посредством компенсации движения по отношению к опорному изображению, содержащий сохранение векторов движения опорного изображения согласно способу по п. 1, при этом сохраненные векторы движения могут быть использованы для декодирования вектора движения для декодирования упомянутой части изображения, декодируемой по отношению к опорному изображению.
16. Устройство для сохранения векторов движения первого опорного кадра, которым разрешено указывать на множество дополнительных опорных кадров, причем устройство содержит:
средство для выбора одного из упомянутых дополнительных опорных кадров;
средство для отображения в выбранный дополнительный опорный кадр каждого вектора движения упомянутого первого опорного кадра, который указывает на один из упомянутых дополнительных опорных кадров, отличных от выбранного дополнительного опорного кадра, так что после отображения все векторы движения первого опорного кадра указывают на выбранный дополнительный опорный кадр; и
средство для сохранения векторов движения, подвергнутых упомянутому отображению.
17. Устройство по п. 16, дополнительно содержащее: средство, выполненное с возможностью выбора одного из двух векторов движения, когда блок из упомянутого первого опорного кадра имеет упомянутые два вектора движения, причем невыбранный вектор движения не сохраняют.
18. Устройство для кодирования последовательности цифровых изображений в битовый поток, причем по меньшей мере одна часть изображения кодируется посредством компенсации движения по отношению к части опорного изображения, содержащее устройство для сохранения векторов движения по п. 16.
19. Устройство для декодирования битового потока, содержащего закодированную последовательность цифровых изображений, причем по меньшей мере одна часть изображения кодируется посредством компенсации движения по отношению к опорному изображению, содержащее устройство для сохранения векторов движения по п. 16.
20. Считываемый компьютером носитель информации, хранящий программу, которая при исполнении на компьютере или процессоре побуждает компьютер или процессор выполнять способ по п. 1.