СПОСОБ И УСТРОЙСТВО ДЛЯ КОДИРОВАНИЯ ИЛИ ДЕКОДИРОВАНИЯ БЛОКА ПИКСЕЛОВ
METHOD AND APPARATUS FOR ENCODING OR DECODING A PIXEL UNIT

Область техники, к которой относится изобретение
Настоящее изобретение относится к способу и устройству для обработки, например, кодирования или декодирования, текущего блока пикселов изображения с использованием режима палитрового прогнозирования. Оно, в частности, относится к кодированию в палитровом режиме, введенному в расширении HEVC-диапазона.
Уровень техники
Более конкретно, оно применяется к режиму кодирования, в котором текущий блок пикселов прогнозирующе кодируется на основе блока предиктора, кодированного с помощью или скомпонованного из так называемой палитры.
Палитра в этом документе задается как таблица поиска, имеющая записи или "элементы", ассоциирующие индекс со значением пиксела. Типично, но необязательно, значение пиксела состоит из значения каждого цветового компонента, ассоциированного с пикселом, что приводит к цветовой палитре. Тем не менее, значение пиксела может состоять из одного пиксельного компонента, что приводит к монохромной палитре.
Этот режим кодирования блока пиксела, в общем, упоминается в качестве режима палитрового кодирования. Предполагается приспосабливать этот режим, например, в расширении диапазона международного стандарта высокоэффективного кодирования видео (HEVC: ISO/IEC 23008-2 MPEG-H Part 2 ITU-T H.265).
При кодировании изображения в видеопоследовательности, изображение сначала разделяется на объекты кодирования пикселов равного размера, называемые "блоками дерева кодирования (CTB)". Размер блока дерева кодирования типично составляет 64х64 пикселов. Каждый блок дерева кодирования затем может разбиваться на иерархическое дерево меньших блоков, размер которых может варьироваться, и которые представляют собой фактические блоки пикселов для кодирования. Эти меньшие блоки для кодирования упоминаются в качестве единицы кодирования (CU).
Кодирование конкретной единицы кодирования типично является прогнозирующим. Это означает то, что сначала определяется блок предиктора. Затем, вычисляется разность между блоком предиктора и единицей кодирования. Эта разность называется "остатком". Затем, этот остаток сжимается. Фактическая кодированная информация единицы кодирования формируется из некоторой информации для того, чтобы указывать способ определения блока предиктора и сжатого остатка. Наилучшие блоки предикторов представляют собой блоки, максимально возможно аналогичные единице кодирования, с тем чтобы получать небольшой остаток, который может эффективно сжиматься.
Режим кодирования задается на основе способа, используемого для того, чтобы определять блок предиктора для способа прогнозирующего кодирования единицы кодирования.
Первый режим кодирования упоминается в качестве внутреннего режима. Согласно внутреннему режиму, блок предиктора компонуется на основе значения пикселов, непосредственно окружающих единицу кодирования в текущем изображении. Необходимо отметить, что блок предиктора представляет собой блок не текущего изображения, а его восстановления. Направление используется для того, чтобы определять то, какие пикселы, соседние с границей блока, фактически используются для того, чтобы компоновать блок предиктора, и то, как они используются. Идея в основе внутреннего режима состоит в том, что вследствие общей когерентности натуральных изображений, пикселы, непосредственно окружающие единицу кодирования, с большой вероятностью являются аналогичными пикселам текущей единицы кодирования. Следовательно, можно получать хорошее прогнозирование значения пикселов единицы кодирования с использованием блока предиктора на основе этих окружающих пикселов.
Второй режим кодирования упоминается в качестве взаимного режима. Согласно взаимному режиму, блок предиктора представляет собой блок другого изображения. Идея в основе взаимного режима состоит в том, что последовательные изображения в последовательности являются, в общем, почти идентичными. Основное различие типично обусловлено движением между этими изображениями вследствие прокрутки камеры или вследствие движущихся объектов в сцене. Блок предиктора определяется посредством вектора, представляющего его местоположение в опорном изображении относительно местоположения единицы кодирования в текущем изображении. Этот вектор упоминается в качестве вектора движения. Согласно этому режиму, кодирование такой единицы кодирования с использованием этого режима содержит информацию движения, содержащую вектор движения и сжатый остаток.
Этот документ акцентирует внимание на третьем режиме кодирования, называемом "палитровым режимом". Согласно палитровому режиму, можно задавать блок предиктора для данной единицы кодирования в качестве блока индексов из палитры: для каждого пиксельного местоположения в блоке предиктора, блок предиктора содержит индекс, ассоциированный с пиксельным значением в палитре, которое является ближайшим к значению пиксела, имеющего идентичное местоположение (т.е. совместно размещенного) в единице кодирования. Таким образом, режим палитрового кодирования использует текущую палитру для того, чтобы компоновать блок предиктора индексов, чтобы прогнозировать текущую единицу кодирования или блок пикселов. Остаток, представляющий разность между блоком предиктора и единицей кодирования, затем вычисляется и кодируется. Индексы записей в палитре также известны как "уровни".
При использовании палитрового режима, палитра и блок предиктора индексов или "уровней" должны передаваться при кодировании изображения потока битов. Это представляет высокие затраты на передачу служебных сигналов, поскольку палитра, которая может содержать десятки записей, должна передаваться для каждой единицы кодирования.
Сущность изобретения
Настоящее изобретение разработано для того, чтобы улучшать кодирование с использованием палитрового режима, в частности, существенно снижать затраты на передачу служебных сигналов.
Оно обеспечивает улучшение кодирования палитрового режима посредством прогнозирования палитры, используемой при кодировании блока пикселов. Это приводит к необходимости передачи меньшего объема информации относительно палитры из кодера в декодер: затраты на передачу служебных сигналов существенно уменьшаются.
Согласно первому аспекту настоящего изобретения, предусмотрен способ для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру, которая содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, при этом способ содержит этап прогнозирования текущей палитры из записей двух или более палитр, причем две или более палитр представляют собой палитры, ранее используемые для того, чтобы обрабатывать блоки пикселов, при этом прогнозирование текущей палитры содержит выбор записи из данной палитры из двух или более палитр, причем упомянутый выбор записи основан на битовой карте флагов, причем каждый флаг задает то, выбирается или нет соответствующая запись в данной палитре в качестве записи для того, чтобы формировать запись в другой палитре, при этом выбранная запись включает в себя запись данной палитры, соответствующую флагу битовой карты, который задает отсутствие выбора записи для того, чтобы формировать другую палитру. Таким образом, записи данной палитры, которые отменены при прогнозировании другой палитры, в силу этого могут быть извлечены, чтобы расширять текущую палитру или ее предиктор палитры.
В варианте осуществления, другая палитра представляет собой другую из двух или более палитр.
В варианте осуществления, упомянутый другая палитра представляет собой палитру, используемую для того, чтобы обрабатывать блок пикселов, непосредственно предшествующий текущему блоку пикселов в изображении.
В варианте осуществления, данная палитра представляет собой палитру, используемую для того, чтобы обрабатывать блок пикселов в изображении, непосредственно предшествующий блоку пикселов, непосредственно предшествующему текущему блоку пикселов в изображении.
В варианте осуществления, битовая карта флагов включает в себя, по меньшей мере, один элемент в предварительно заданной позиции в битовой карте для передачи в служебных сигналах того, включает или нет битовая карта в себя, после предварительно заданной позиции, по меньшей мере, один дополнительный флаг, который задает выбор записи данной палитры для того, чтобы формировать другую палитру.
В варианте осуществления, текущая палитра формируется из предиктора палитры, который компонуется из двух или более палитр.
В варианте осуществления, компоновка предиктора палитры содержит выбор всех записей из палитры, используемой в прошлый раз для того, чтобы обрабатывать блок пикселов, который непосредственно предшествует текущему блоку пикселов в изображении, и выбор, по меньшей мере, одной записи из другой палитры, используемой для того, чтобы обрабатывать другой блок пикселов в изображении. Эта конфигурация позволяет дополнять традиционные предикторы палитр (обычно палитру, используемую в прошлый раз) с дополнительными записями, которые могут иметь высокую релевантность, в частности, выбранными так, как описано выше.
В варианте осуществления, текущая палитра формируется из предиктора палитры с использованием битовой карты флагов, каждый флаг которой задает то, выбирается или нет соответствующая запись в предикторе палитры в качестве записи для того, чтобы формировать запись в текущей палитре.
В варианте осуществления, запись двух или более палитр добавляется в компонуемый предиктор палитры, если еще нет аналогичной записи в компонуемом предикторе палитры.
Согласно второму аспекту настоящего изобретения, предусмотрен способ кодирования последовательности цифровых изображений в поток битов, причем, по меньшей мере, один блок изображения кодируется с использованием режима палитрового кодирования, содержащий способ обработки текущего блока пикселов согласно первому аспекту.
Согласно третьему аспекту настоящего изобретения, предусмотрен способ декодирования потока битов, содержащего кодированную последовательность цифровых изображений, причем, по меньшей мере, один блок изображения кодирован с использованием режима палитрового кодирования, содержащий способ обработки текущего блока пикселов согласно первому аспекту.
Согласно четвертому аспекту настоящего изобретения, предусмотрено устройство для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру, которая содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, причем устройство содержит модуль прогнозирования, выполненный с возможностью прогнозировать текущую палитру из записей двух или более палитр, причем две или более палитр представляют собой палитры, ранее используемые для того, чтобы обрабатывать блоки пикселов, при этом прогнозирование текущей палитры содержит выбор записи из данной палитры из двух или более палитр, причем упомянутый выбор записи основан на битовой карте флагов, причем каждый флаг задает то, выбирается или нет соответствующая запись в данной палитре в качестве записи для того, чтобы формировать запись в другой палитре, при этом выбранная запись включает в себя запись данной палитры, соответствующую флагу битовой карты, который задает отсутствие выбора записи для того, чтобы формировать другую палитру.
Согласно пятому аспекту настоящего изобретения, предусмотрено устройство для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру, которая содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, причем устройство выполнено с возможностью реализовывать способ обработки первого аспекта, описанного выше.
Согласно шестому аспекту настоящего изобретения, предусмотрено устройство для кодирования последовательности цифровых изображений в поток битов, содержащее средство для осуществления способа согласно второму аспекту.
Согласно седьмому аспекту настоящего изобретения, предусмотрено устройство для декодирования потока битов, содержащего последовательность цифровых изображений, содержащее средство для осуществления способа согласно третьему аспекту.
Согласно восьмому аспекту настоящего изобретения, предусмотрен энергонезависимый машиночитаемый носитель, хранящий программу, которая, при выполнении посредством микропроцессора или компьютерной системы в устройстве для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру, которая содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, инструктирует устройству выполнять этап прогнозирования текущей палитры из записей двух или более палитр, причем две или более палитр представляют собой палитры, ранее используемые для того, чтобы обрабатывать блоки пикселов, при этом прогнозирование текущей палитры содержит выбор записи из данной палитры из двух или более палитр, причем упомянутый выбор записи основан на битовой карте флагов, причем каждый флаг задает то, выбирается или нет соответствующая запись в данной палитре в качестве записи для того, чтобы формировать запись в другой палитре, при этом выбранная запись включает в себя запись данной палитры, соответствующую флагу битовой карты, который задает отсутствие выбора записи для того, чтобы формировать другую палитру.
Согласно девятому аспекту, предусмотрена компьютерная программа, содержащая инструкции, которые при выполнении посредством компьютера инструктируют компьютеру осуществлять способ по любому из первого, второго или третьего аспектов.
Согласно дополнительному аспекту изобретения, предусмотрен способ для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру, которая содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями.
Способ содержит этап прогнозирования текущей палитры из записей двух или более палитр, причем две или более палитр представляют собой палитры, ранее используемые для того, чтобы обрабатывать блоки пикселов.
Соответственно, как упомянуто выше, меньший объем информации относительно текущей палитры передается в декодер, за счет этого сокращая объем передачи служебных сигналов в потоке битов. Как пояснено ниже в этом документе, предиктор палитры может формироваться из двух или более палитр, и все или часть текущей палитры могут прогнозироваться с использованием предиктора палитры. Таким образом, изобретение должно также не допускать наличия плохой палитры, когда оказывается, что один предиктор палитры для того, чтобы формировать палитру, имеет очень небольшое число элементов. Это может происходить, когда такой предиктор палитры налагается.
В разновидности, режим палитрового кодирования использует текущую палитру для того, чтобы компоновать блок предиктора индексов, чтобы прогнозировать текущий блок пикселов, и способ содержит этап прогнозирования текущей палитры с использованием предиктора палитры.
Соответственно, согласно другим аспектам изобретения, предусмотрено устройство для обработки, т.е. кодер или декодер в зависимости от случая, текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру, которая содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями.
Устройство содержит модуль прогнозирования, выполненный с возможностью прогнозировать текущую палитру из записей двух или более палитр, причем две или более палитр представляют собой палитры, ранее используемые для того, чтобы обрабатывать блоки пикселов.
В разновидности, режим палитрового кодирования использует текущую палитру для того, чтобы компоновать блок предиктора индексов, чтобы прогнозировать текущий блок пикселов, и модуль прогнозирования выполнен с возможностью прогнозировать текущую палитру с использованием предиктора палитры.
Необязательные признаки вариантов осуществления изобретения задаются в прилагаемой формуле изобретения. Некоторые из этих признаков поясняются ниже в отношении способа, при этом как они могут преобразовываться в характеристики системы, выделенные для устройства согласно вариантам осуществления изобретения.
В некоторых вариантах осуществления изобретения, прогнозирование текущей палитры содержит выбор записи из данной палитры из двух или более палитр, причем упомянутый выбор записи основан на битовой карте флагов, причем каждый флаг задает то, выбирается или нет соответствующая запись в данной палитре в качестве записи для того, чтобы формировать другую палитру. Это обусловлено тем, что битовая карта флагов позволяет знать то, какие элементы/записи уже многократно использованы для некоторых палитр, а какие отменены. Благодаря этой информации, можно расширять предиктор палитры или текущую палитру с некоторыми отмененными элементами, которые, может оказываться, являются релевантными для текущего обрабатываемого блока пикселов.
В частности, это имеет место, когда выбранная запись включает в себя запись данной палитры, соответствующую флагу битовой карты, который задает отсутствие выбора записи для того, чтобы формировать другую палитру. Такой флаг означает, что запись ранее отменена.
Согласно некоторым признакам, другая палитра представляет собой другую из двух или более палитр. Это означает то, что две палитры, которые тесно связаны вследствие прогнозирования одной на основе другой, используются для того, чтобы прогнозировать текущую палитру. Эта конфигурация может возникать, например, при использовании используемых в прошлый раз палитр для того, чтобы прогнозировать новую палитру.
Записи данной палитры, которые отменены при прогнозировании другой палитры, в силу этого могут быть извлечены, чтобы расширять текущую палитру или ее предиктор палитры.
В частности, другая палитра может представлять собой палитру, используемую в прошлый раз для того, чтобы обрабатывать блок пикселов, который непосредственно (т.е. сразу) предшествует (согласно порядку кодирования/декодирования) текущему блоку пикселов в изображении. Помимо этого, данная палитра и другая палитра могут представлять собой две палитры, используемые для того, чтобы обрабатывать последние два блока пикселов, которые непосредственно предшествуют (согласно идентичному порядку кодирования/декодирования) текущему блоку пикселов в изображении. В частности, данная палитра может представлять собой палитру, используемую для того, чтобы обрабатывать блок пикселов в изображении, непосредственно предшествующий блоку пикселов, непосредственно предшествующему текущему блоку пикселов в изображении. Эти конфигурации используют преимущество избыточности между последовательными и близкими блоками пикселов, чтобы получать эффективное кодирование.
Согласно другим признакам, битовая карта флагов включает в себя, по меньшей мере, один элемент в предварительно заданной позиции в битовой карте для передачи в служебных сигналах того, включает или нет битовая карта в себя, после предварительно заданной позиции, по меньшей мере, один дополнительный флаг, который задает выбор записи данной палитры для того, чтобы формировать другую палитру. Это служит для того, чтобы уменьшать размер битовой карты и за счет этого сокращать затраты на передачу служебных сигналов. Это обусловлено тем, что, в зависимости от того, как компонуются палитры, последние записи данной палитры, более вероятно, являются старыми и неэффективными элементами. Следовательно, вероятно, что все последние флаги битовых карт заданы равными 0, задавая отсутствие выбора соответствующей записи из данной палитры.
В некоторых вариантах осуществления, как представлено выше, текущая палитра формируется из предиктора палитры, который компонуется из двух или более палитр.
В некоторых конкретных вариантах осуществления, компоновка предиктора палитры содержит выбор всех записей из палитры, используемой в прошлый раз для того, чтобы обрабатывать блок пикселов, который непосредственно предшествует текущему блоку пикселов в изображении, и выбор, по меньшей мере, одной записи из другой палитры, используемой для того, чтобы обрабатывать другой блок пикселов в изображении. Эта конфигурация позволяет дополнять традиционные предикторы палитр (обычно палитру, используемую в прошлый раз) с дополнительными записями, которые могут иметь высокую релевантность, в частности, выбранными так, как описано выше.
В других конкретных вариантах осуществления, текущая палитра формируется из предиктора палитры с использованием битовой карты флагов, каждый флаг которой задает то, выбирается или нет соответствующая запись в предикторе палитры в качестве записи для того, чтобы формировать запись в текущей палитре.
В некоторых вариантах осуществления, запись двух или более палитр добавляется в компонуемый предиктор палитры, если еще нет аналогичной записи в компонуемом предикторе палитры. Это служит для того, чтобы не допускать избыточности.
В некоторых вариантах осуществления, блоки пикселов изображения обрабатываются согласно предварительно заданному порядку сканирования; и предиктор палитры для текущего блока пикселов выбирается из набора палитр, используемых для того, чтобы прогнозировать блоки пикселов, ранее обработанных согласно режиму палитрового кодирования. Это соответствует взаимному прогнозированию текущей палитры, поскольку оно основано на предыдущих палитрах. Эта конфигурация имеет потенциал для того, чтобы сокращать большой объем затрат на передачу служебных сигналов, поскольку предыдущие палитры с большим объемом информации уже доступны на обеих сторонах (в кодере и декодере) при обработке текущего блока пикселов. В силу этого может осуществляться эффективное палитровое прогнозирование.
В конкретных вариантах осуществления, предиктор палитры для текущего блока пикселов представляет собой палитру, используемую для последнего блока пикселов, обработанных согласно режиму палитрового кодирования. Другими словами, он представляет собой используемую в прошлый раз (например, декодированную) палитру, которая выбирается в качестве предиктора палитры. Эта мера использует преимущество высокой пиксельной избыточности между блоком пикселов, которые обрабатываются последовательно, поскольку они зачастую являются пространственно близкими. Она также уменьшает затраты по запоминающему устройству на сохранение ранее используемых палитр, поскольку должна сохраняться только последняя из них. Помимо этого, она может сокращать число битов в кодированном потоке битов, поскольку нет необходимости обозначать то, какая ранее использованная палитра используется в качестве предиктора палитры для текущего блока пикселов.
В других конкретных вариантах осуществления, предиктор палитры для текущего блока пикселов выбирается из набора палитр, используемых для блоков пикселов, ранее обработанных согласно режиму палитрового кодирования, и смежных с текущим блоком пикселов.
На практике, они, в общем, представляют собой блоки пикселов, которые располагаются выше или слева относительно текущего пиксельного блока. Эта мера также использует преимущество высокой пиксельной избыточности между смежными блоками пикселов.
В еще одних других конкретных вариантах осуществления, набор палитр, используемых для ранее обработанных блоков пикселов, сбрасывается, когда текущий блок пикселов начинает новый объект кодирования, состоящий из блоков пикселов, таких как серия последовательных макроблоков или независимый мозаичный фрагмент, или начинает новую линию объектов кодирования, каждый из которых состоит из блоков пикселов. В разновидности, сброс может возникать в каждом новом изображении или кадре. Эта мера позволяет ускорять обработку (кодирование или декодирование) изображения, поскольку объекты кодирования или линии объектов кодирования (например, блоки дерева кодирования в HEVC) могут обрабатываться параллельно. Кроме того, оказывается, что сброс в каждой новой линии объектов кодирования обеспечивает более эффективное кодирование пиксельных блоков, чем сброс в каждом объекте кодирования.
Независимый мозаичный фрагмент, как задано в HEVC-стандарте, содержит, по меньшей мере, одну серию последовательных макроблоков и является пространственно независимым от других мозаичных фрагментов.
Согласно характерному признаку, набор палитр сбрасывается на пустой набор.
В разновидности, набор сброса палитр содержит палитру по умолчанию. Таким образом, эта конфигурация может предоставлять палитровое прогнозирование даже в случае сброса, т.е. когда обрабатывается новый объект кодирования. Это также позволяет сокращать затраты на передачу служебных сигналов для первой единицы кодирования в новом объекте кодирования.
В этой разновидности, палитра по умолчанию может содержать набор предварительно определенных записей, соответствующих пиксельным значениям, равномерно распределенным по цветовому пространству. Например, для пикселов, представленных в цветовом YUV-пространстве (то же применимо для цветового RGB-пространства), пиксельные значения могут иметь равномерное распределение по Y-компоненту, в то время как значения U- и V-компонентов могут быть фиксированно равными половине максимального возможного значения MAX с учетом битовой глубины, используемой для того, чтобы кодировать каждый цветовой компонент (т.е. U и V принимает среднее значение соответствующих компонентов в цветовом пространстве), например, 1<<(bitdepth-1) или (MAX+1)/2.
В других вариантах осуществления изобретения, опорные предикторы палитр ассоциированы с соответствующими объектами кодирования блоков пикселов, которые формируют изображение, и предиктор палитры для текущего блока пикселов представляет собой опорный предиктор палитры, ассоциированный с объектом кодирования, который включает в себя текущий блок пикселов. Эти варианты осуществления изобретения позволяют задавать очень эффективные предикторы палитр на уровне объектов кодирования (например, CTB). В качестве примера, один опорный предиктор палитры может задаваться для одной линии объектов кодирования идентично вышеприведенному сбросу. Это служит для того, чтобы сокращать затраты на передачу в служебных сигналах опорных предикторов палитр в декодер.
В конкретных вариантах осуществления, опорный предиктор палитры, ассоциированный с объектом кодирования, используется в качестве предиктора палитры для каждого блока пикселов, составляющих объект кодирования. Благодаря этой мере, ограниченный объем информации, а именно, опорный предиктор палитры, требуется для всего объекта кодирования. Это направлено на существенное сокращение затрат на передачу служебных сигналов по сравнению с традиционным палитровым режимом.
Предпочтительно, опорные предикторы палитр вставляются при кодировании изображения потока битов. Это позволяет декодеру иметь эти опорные предикторы палитр для того, чтобы эффективно выполнять палитровое прогнозирование для каждого блока пикселов в объекте кодирования, т.е. без потребности в сложном механизме, чтобы определять эти предикторы.
В конкретных вариантах осуществления относительно кодера, способ дополнительно может содержать выбор, в качестве опорного предиктора палитры для объекта кодирования, палитры, которая минимизирует критерий искажения в зависимости от скорости передачи, из палитр, используемых для того, чтобы прогнозировать все блоки пикселов объекта кодирования. Затем кодер должен передавать в служебных сигналах выбранный опорный предиктор палитры в потоке битов в декодер. Это предоставляет выбор оптимальной палитры для всех палитр объекта кодирования.
В разновидности относительно кодера, способ дополнительно может содержать выбор, в качестве опорного предиктора палитры для объекта кодирования, палитры, используемой для того, чтобы прогнозировать наибольший блок пикселов объекта кодирования. Затем кодер должен передавать в служебных сигналах выбранный опорный предиктор палитры в потоке битов в декодер. Реализация этого выбора опорного предиктора палитры является очень простой, и эта реализация имеет низкую сложность.
В еще одних других вариантах осуществления изобретения, предиктор палитры для текущего блока пикселов включает в себя записи, соответствующие значениям пикселов, соседних с текущим блоком пикселов. Это служит для того, чтобы использовать преимущество высоких пиксельных избыточностей между пространственно близкими пикселами.
В конкретных вариантах осуществления, пикселы, соседние с текущим блоком пикселов, выбираются из пикселов, смежных с верхней и левой сторонами текущего блока пикселов. Эта мера увеличивает вышеуказанное преимущество при поддержании зависимости от пикселов, которые всегда доступны в кодере и в декодере, с учетом причинно-следственной связи поблочного HEVC-кодирования. Фактически, традиционные порядки сканирования означают, что блоки, смежные с верхней и левой сторонами текущих пиксельных блоков, уже восстановлены.
Согласно характерному признаку, пикселы, соседние с текущим блоком пикселов, включают в себя пикселы, которые являются, относительно смежного текущего блока пикселов, левым верхним, правым верхним и левым нижним. Конечно, эти три конкретных пиксела могут формировать выбранные соседние пикселы. Эти пикселы представляют собой пикселы, используемые для традиционного режима внутреннего прогнозирования. Они предоставляют релевантную информацию относительно пикселов текущего пиксельного блока с небольшим объемом информации.
В других конкретных вариантах осуществления, предварительно заданное число пикселов выбирается из предварительно определенного набора пикселов, соседних с текущим блоком пикселов, в качестве записей предиктора палитры, причем выбранные пикселы представляют собой пикселы, которые имеют наибольшие пространственные расстояния между собой в пределах предварительно определенного набора пикселов. Это создает разнесение и не допускает дублированных пикселов.
В еще одних других конкретных вариантах осуществления, пиксельный класс ассоциирован с каждым соседним пикселом, и соседние пикселы упорядочиваются согласно числу вхождений их ассоциированного класса в пределах предварительно определенного набора пикселов, соседних с текущим блоком пикселов, чтобы задавать более низкие индексы записей предиктора палитры для соседних пикселов, имеющих более частые пиксельные классы. Это служит для того, чтобы сокращать затраты при кодировании предиктора палитры в надлежащих случаях. Следует отметить, что классы, ассоциированные с данным пикселом, могут задаваться посредством пиксельных значений, окружающих значение данного пиксела, например, с учетом предварительно заданного допустимого запаса.
В еще одних других вариантах осуществления изобретения, текущая палитра имеет упорядоченные записи, и прогнозирование текущей палитры с использованием предиктора палитры содержит прогнозирование записи текущей палитры из предыдущей записи идентичной текущей палитры. Другими словами, предиктор палитры при обработке данной записи палитры состоит (включает в себя) из записей, которые находятся до данной записи в цветовой палитре. Это напоминает внутреннее прогнозирование цветовой палитры.
В конкретных вариантах осуществления, данная запись текущей палитры прогнозируется из записи, непосредственно предшествующей данной записи в идентичной текущей палитре. Эта мера уменьшает объем передачи служебных сигналов в потоке битов (и в силу этого сокращает затраты на кодирование), поскольку более необязательно отправлять (в декодер) информацию относительно того, что предыдущая запись используется для того, чтобы прогнозировать текущую запись.
Аналогичным образом, все записи текущей палитры, кроме первой, могут прогнозироваться из записи, непосредственно предшествующей им в идентичной текущей палитре. Это также уменьшает объем передачи служебных сигналов в потоке битов. Это обусловлено тем, что все записи прогнозируются, и в силу этого более необязательно идентифицировать то, какие записи прогнозируются, а какие не прогнозируются.
Вышеописанные различные варианты осуществления для того, чтобы получать предиктор палитры, могут комбинироваться полностью или частично. С учетом такой комбинации, предиктор палитры, используемый для того, чтобы прогнозировать текущую палитр, в силу этого образом комбинирует два или более из следующего:
- палитру, используемую для того, чтобы прогнозировать ранее обработанный блок пикселов;
- опорный предиктор палитры, ассоциированный с объектом кодирования, который включает в себя текущий блок пикселов;
- записи, соответствующие значениям пикселов, соседних с текущим блоком пикселов; и
- по меньшей мере, одну запись текущей палитры, которая предшествует текущей записи, которая должна прогнозироваться в текущей палитре.
Возвращаясь теперь к прогнозированию текущей палитры из предиктора палитры, могут быть рассмотрены несколько реализаций.
В вариантах осуществления изобретения, прогнозирование текущей палитры с использованием предиктора палитры содержит получение битовой карты флагов, каждый из которых задает то, выбирается или нет соответствующая запись в предикторе палитры в качестве записи текущей палитры. Эта конфигурация имеет низкие затраты (по запоминающему устройству и на кодирование), чтобы задавать фактическое прогнозирование из предиктора палитры. Затраты ограничены битовой картой.
В конкретных вариантах осуществления, битовая карта флагов содержит число битов, идентичное числу записей в предикторе палитры, и каждый бит в позиции в битовой карте задает то, выбирается или нет запись, имеющая соответствующую позицию в предикторе палитры, в качестве записи текущей палитры. Эта конфигурация повышает эффективность кодирования. Разновидность, которая дополнительно может уменьшать размер битовой карты, может рассматривать прекращение битовой карты на последней записи, которая выбирается в качестве записи текущей палитры. Это является, в частности, преимущественным, поскольку, как предложено выше, записи в предикторе палитры упорядочиваются согласно их вхождениям. В некоторых вариантах осуществления, это приводит к статистически нечастом использовании последних записей предиктора палитры для текущей палитры.
В других конкретных вариантах осуществления, способ дополнительно может содержать добавление дополнительных записей в конце текущей палитры, имеющей выбранные записи из предиктора палитры. Эти дополнительные записи могут представлять собой записи для дополнительных декодированных пикселов (как в декодере, так и в кодере с использованием контура декодирования) и записи из предварительно определенной палитры, которая, например, компонуется посредством кодера и передается (в потоке битов) в декодер (аналогично традиционному режиму палитрового кодирования). Эта мера должна повышать эффективность кодирования текущей палитры.
В других вариантах осуществления изобретения, прогнозирование текущей палитры с использованием предиктора палитры содержит получение, по меньшей мере, одного (возможно двух или более) остатка записи, соответствующего разности, по меньшей мере, между одной соответствующей записью текущей палитры и записью предиктора палитры. Это означает то, что остатки из палитрового прогнозирования должны отправляться в декодер. Эта конфигурация позволяет получать более точную палитру по сравнению с предыдущими вариантами осуществления (на основе копии записей из предиктора в текущую палитру).
В конкретных вариантах осуществления, текущая палитра и предиктор палитры имеют соответствующие упорядоченные записи, и каждый остаток записи соответствует разности между записью текущей палитры и записью предиктора палитры, которые имеют идентичный индекс записи. Эта мера уменьшает объем передачи служебных сигналов в потоке битов (и за счет этого сокращает затраты на кодирование), поскольку более необязательно отправлять (в декодер) информацию относительно того, какая запись предиктора используется для того, чтобы прогнозировать текущую запись.
Аналогичным образом, остаток может получаться для каждой записи текущей палитры, которая имеет соответствующую запись с идентичным индексом записи в предикторе палитры. Это также уменьшает объем передачи служебных сигналов в потоке битов, поскольку дополнительно исключает дальнейшую необходимость идентифицировать то, каким записям требуется прогнозирование, а каким не требуется прогнозирование.
Следует отметить, что оба прогнозирования на основе копии записей или на основе остатков могут использоваться с предикторами палитр, полученными с использованием любого из способов, описанных выше. Исключение делается для случая, в котором текущая палитра внутренне прогнозируется, и в этом случае может использоваться только остаточный подход (в противном случае, две записи должны быть идентичными в палитре).
В некоторых вариантах осуществления, пиксельные значения записей текущей палитры имеют цветовые компоненты, и только подчасть цветовых компонентов прогнозируется с использованием предиктора палитры. На практике, могут прогнозироваться один или два цветовых компонента из трех. Эта мера уменьшает объем обработки и передачи служебных сигналов в потоке битов.
Другой аспект изобретения относится к устройству для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру, которая содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, причем устройство выполнено с возможностью реализовывать любой вариант осуществления способа обработки, как задано выше.
Другой аспект изобретения относится к энергонезависимому машиночитаемому носителю, сохраняющему программу, которая, при выполнении посредством микропроцессора или компьютерной системы в устройстве для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру, которая содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, инструктирует устройству выполнять этап прогнозирования текущей палитры из записей двух или более палитр, причем две или более палитр представляют собой палитры, ранее используемые для того, чтобы обрабатывать блоки пикселов.
Энергонезависимый машиночитаемый носитель может иметь признаки и преимущества, которые являются аналогичными признакам и преимуществам, изложенным выше и ниже относительно способа и устройства, в частности, признак повышения эффективности кодирования режима палитрового прогнозирования.
Другой аспект изобретения относится к способу для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру для того, чтобы компоновать блок предиктора индексов, чтобы прогнозировать текущий блок пикселов, при этом текущая палитра содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, фактически как описано в данном документе в отношении и как показано на фиг. 13 или 14 или 15 или 17 или 19 или 21 или 22 из прилагаемых чертежей.
В еще одном другом аспекте настоящего изобретения, предусмотрен способ для кодирования или декодирования текущего блока пикселов изображения согласно палитровому режиму, причем палитровый режим использует цветовую палитру, содержащую набор значений, чтобы представлять, по меньшей мере, один компонент пикселов текущего блока, при этом способ содержит получение предиктора цветовой палитры и прогнозирование цветовой палитры текущего блока с использованием предиктора цветовой палитры.
Предпочтительно, блоки упомянутого изображения упорядочиваются согласно предварительно заданному порядку сканирования, и предиктор цветовой палитры определяется из цветовой палитры последнего блока, кодированного согласно палитровому режиму в данной причинно-следственной области изображения.
В варианте осуществления, значения текущей цветовой палитры прогнозируются из значений, содержащихся в предикторе цветовой палитры. Значения цветовых палитр могут упорядочиваться, и значение текущей цветовой палитры ассоциировано с флагом, указывающим то, прогнозируется или нет упомянутое значение из значения, имеющего идентичный порядок в предикторе цветовой палитры. В варианте осуществления, данная причинно-следственная область представляет собой часть, уже восстановленную из объекта кодирования, содержащего текущий блок пикселов.
В варианте осуществления, значения цветовых палитр упорядочиваются, и значение текущей палитры ассоциировано с флагом, указывающим то, прогнозируется или нет упомянутое значение из значения, имеющего данный порядок в предикторе цветовой палитры.
В вариантах осуществления, предиктор цветовой палитры ассоциирован с каждым объектом кодирования изображения. Предиктор цветовой палитры может получаться из пикселов, соседних с текущим блоком.
В одном дополнительном аспекте настоящего изобретения, предусмотрен способ для кодирования или декодирования текущего блока пикселов изображения согласно палитровому режиму, причем палитровый режим использует цветовую палитру, содержащую набор значений, чтобы представлять, по меньшей мере, один компонент пикселов текущего блока, при этом способ содержит получение предиктора цветовой палитры и прогнозирование цветовой палитры текущего блока с использованием предиктора цветовой палитры, при этом прогнозирование цветовой палитры текущего блока с использованием предиктора цветовой палитры содержит получение битовой карты флагов, каждый из которых задает то, выбирается или нет соответствующая запись в предикторе цветовой палитры в качестве записи цветовой палитры текущего блока.
Битовая карта флагов может содержать число битов, идентичное числу записей в предикторе цветовой палитры, и каждый бит в позиции в битовой карте задает то, выбирается или нет запись, имеющая соответствующую позицию в предикторе цветовой палитры, в качестве записи цветовой палитры текущего блока.
В варианте осуществления, способ дополнительно содержит добавление дополнительных записей в конце цветовой палитры текущего блока, имеющего выбранные записи из предиктора цветовой палитры.
В еще одном другом аспекте настоящего изобретения, предусмотрен способ для кодирования или декодирования текущего блока пикселов изображения согласно палитровому режиму, причем палитровый режим использует цветовую палитру, содержащую набор значений, чтобы представлять, по меньшей мере, один компонент пикселов текущего блока, при этом способ содержит получение предиктора цветовой палитры и прогнозирование цветовой палитры текущего блока с использованием предиктора цветовой палитры, при этом блоки пикселов изображения обрабатываются согласно порядку сканирования; и предиктор палитры для текущего блока пикселов выбирается из набора палитр, используемых для того, чтобы прогнозировать блоки пикселов, ранее обработанных согласно режиму палитрового кодирования, и при этом упомянутый набор палитр, используемых для ранее обработанных блоков пикселов, сбрасывается, когда текущий блок пикселов начинает новую линию объектов кодирования, содержащих блок пикселов. Предпочтительно, набор палитр сбрасывается на палитру по умолчанию.
Согласно изобретению, дополнительно предусмотрен способ для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру для того, чтобы компоновать блок предиктора индексов, чтобы прогнозировать текущий блок пикселов, при этом текущая палитра содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, при этом способ содержит этап прогнозирования текущей палитры с использованием предиктора палитры.
В варианте осуществления, блоки пикселов изображения обрабатываются согласно предварительно заданному порядку сканирования; и предиктор палитры для текущего блока пикселов выбирается из набора палитр, используемых для того, чтобы прогнозировать блоки пикселов, ранее обработанных согласно режиму палитрового кодирования. Предпочтительно, предиктор палитры для текущего блока пикселов представляет собой палитру, используемую для последнего блока пикселов, обработанных с использованием режима палитрового кодирования. Предиктор палитры для текущего блока пикселов может выбираться из набора палитр, используемых для блоков пикселов, ранее обработанных согласно режиму палитрового кодирования, и смежных с текущим блоком пикселов.
Набор палитр, используемых для ранее обработанных блоков пикселов, предпочтительно сбрасывается, когда текущий блок пикселов начинает новый объект кодирования, состоящий из блоков пикселов, или начинает новую линию объектов кодирования, каждый из которых состоит из блоков пикселов. Набор палитр может сбрасываться на пустое множество или на палитру по умолчанию. Палитра по умолчанию содержит набор предварительно определенных записей, соответствующих пиксельным значениям, равномерно распределенным по цветовому пространству.
В варианте осуществления, опорные предикторы палитр ассоциированы с соответствующими объектами кодирования блоков пикселов, которые формируют изображение, и предиктор палитры для текущего блока пикселов представляет собой опорный предиктор палитры, ассоциированный с объектом кодирования, который включает в себя текущий блок пикселов. Опорный предиктор палитры, ассоциированный с объектом кодирования, используется в качестве предиктора палитры для каждого блока пикселов, составляющих объект кодирования. Опорные предикторы палитр предпочтительно вставляются в поток битов, кодирующий изображение. Способ дополнительно может содержать выбор, в качестве опорного предиктора палитры для объекта кодирования, палитры, используемой для того, чтобы прогнозировать наибольший блок пикселов объекта кодирования. В варианте осуществления, способ дополнительно содержит выбор, в качестве опорного предиктора палитры для объекта кодирования, палитры, которая минимизирует критерий искажения в зависимости от скорости передачи, из палитр, используемых для того, чтобы прогнозировать все блоки пикселов объекта кодирования.
В варианте осуществления, предиктор палитры для текущего блока пикселов включает в себя записи, соответствующие значениям пикселов, соседних с текущим блоком пикселов. Пикселы, соседние с текущим блоком пикселов, могут выбираться из пикселов, смежных с верхней и левой сторонами текущего блока пикселов. Пикселы, соседние с текущим блоком пикселов, могут включать в себя пикселы, которые являются, относительно смежного текущего блока пикселов, левым верхним, правым верхним и левым нижним. В варианте осуществления, пиксельный класс ассоциирован с каждым соседним пикселом, и соседние пикселы упорядочиваются согласно числу вхождений их ассоциированного класса в пределах предварительно определенного набора пикселов, соседних с текущим блоком пикселов, чтобы задавать более низкие индексы записей предиктора палитры для соседних пикселов, имеющих более частые пиксельные классы. Предпочтительно, предварительно заданное число пикселов выбирается из предварительно определенного набора пикселов, соседних с текущим блоком пикселов, в качестве записей предиктора палитры, причем выбранные пикселы представляют собой пикселы, которые имеют наибольшие пространственные расстояния между собой в пределах предварительно определенного набора пикселов.
В варианте осуществления, текущая палитра имеет упорядоченные записи, и прогнозирование текущей палитры с использованием предиктора палитры содержит прогнозирование записи текущей палитры из предыдущей записи идентичной текущей палитры. Данная запись текущей палитры может прогнозироваться из записи, непосредственно предшествующей данной записи в идентичной текущей палитре. Все записи текущей палитры, кроме первой, могут прогнозироваться из записи, непосредственно предшествующей им в идентичной текущей палитре.
В варианте осуществления, предиктор палитры, используемый для того, чтобы прогнозировать текущую палитру, комбинирует два или более из следующего: палитру, используемую для того, чтобы прогнозировать ранее обработанный блок пикселов; опорный предиктор палитры, ассоциированный с объектом кодирования, который включает в себя текущий блок пикселов; записи, соответствующие значениям пикселов, соседних с текущим блоком пикселов; и, по меньшей мере, одну запись текущей палитры, которая предшествует текущей записи, которая должна прогнозироваться в текущей палитре.
В варианте осуществления, прогнозирование текущей палитры с использованием предиктора палитры содержит получение битовой карты флагов, каждый из которых задает то, выбирается или нет соответствующая запись в предикторе палитры в качестве записи текущей палитры. Битовая карта флагов может содержать число битов, идентичное числу записей в предикторе палитры, и каждый бит в позиции в битовой карте задает то, выбирается или нет запись, имеющая соответствующую позицию в предикторе палитры, в качестве записи текущей палитры. В дополнительном варианте осуществления, способ содержит добавление дополнительных записей в конце текущей палитры, имеющей выбранные записи из предиктора палитры.
В варианте осуществления, прогнозирование текущей палитры с использованием предиктора палитры содержит получение, по меньшей мере, одного остатка записи, соответствующего разности, по меньшей мере, между одной соответствующей записью текущей палитры и записью предиктора палитры. Текущая палитра и предиктор палитры могут иметь соответствующие упорядоченные записи, и каждый остаток записи соответствует разности между записью текущей палитры и записью предиктора палитры, которые имеют идентичный индекс записи. Остаток предпочтительно получается для каждой записи текущей палитры, которая имеет соответствующую запись с идентичным индексом записи в предикторе палитры.
В варианте осуществления, пиксельные значения записей текущей палитры имеют цветовые компоненты, и только подчасть цветовых компонентов прогнозируется с использованием предиктора палитры.
В еще одном аспекте настоящего изобретения, предусмотрено устройство для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру для того, чтобы компоновать блок предиктора индексов, чтобы прогнозировать текущий блок пикселов, при этом текущая палитра содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, причем устройство содержит модуль прогнозирования, выполненный с возможностью прогнозирования текущей палитры с использованием предиктора палитры.
В дополнительном аспекте настоящего изобретения, предусмотрено устройство для обработки текущего блока пикселов изображения с использованием режима палитрового кодирования, причем режим палитрового кодирования использует текущую палитру для того, чтобы компоновать блок предиктора индексов, чтобы прогнозировать текущий блок пикселов, при этом текущая палитра содержит набор записей, ассоциирующих соответствующие индексы записей с соответствующими пиксельными значениями, причем устройство выполнено с возможностью реализовывать способ обработки согласно дополнительно предоставленному способу и любому из вариантов осуществления, описанных выше.
По меньшей мере, части способов согласно изобретению могут быть машинореализованными. Соответственно, настоящее изобретение может принимать форму полностью аппаратного варианта осуществления, полностью программного варианта осуществления (включающего в себя микропрограммное обеспечение, резидентное программное обеспечение, микрокод и т.д.) или варианта осуществления, комбинирующего программные и аппаратные аспекты, которые могут совместно, в общем, упоминаться в данном документе как "схема", "модуль" или "система". Кроме того, настоящее изобретение может принимать форму компьютерного программного продукта, осуществленного в любом материальном носителе, в представлении, имеющем машиноприменимый программный код, осуществленный на носителе.
Поскольку настоящее изобретение может быть реализовано в программном обеспечении, настоящее изобретение может быть осуществлено в качестве машиночитаемого кода для предоставления в программируемое устройство на любом подходящем носителе. Материальный носитель может содержать носитель хранения данных, такой как гибкий диск, CD-ROM, жесткий диск, устройство на магнитных лентах или полупроводниковое запоминающее устройство и т.п. Переходная несущая среда может включать в себя такой сигнал, как электрический сигнал, электронный сигнал, оптический сигнал, акустический сигнал, магнитный сигнал либо электромагнитный сигнал, например, микроволновый или RF-сигнал.
Краткое описание чертежей
Далее описываются варианты осуществления изобретения, только в качестве примера и со ссылкой на прилагаемые чертежи, на которых:
Фиг. 1 иллюстрирует архитектуру HEVC-кодера;
Фиг. 2 иллюстрирует архитектуру HEVC-декодера;
Фиг. 3 иллюстрирует принцип причинно-следственной области;
Фиг. 4 иллюстрирует форматы сигнала цветности, поддерживаемые посредством HEVC RExt;
Фиг. 5 иллюстрирует разбиение блока дерева кодирования на единицы кодирования и декодирование в порядке сканирования этих единиц кодирования;
Фиг. 6 иллюстрирует двоичное кодирование Голомба элемента синтаксиса в HEVC;
Фиг. 7 иллюстрирует принцип прогнозирования в палитровом режиме на стороне декодера, исследуемый в расширении диапазона HEVC;
Фиг. 8 иллюстрирует пример единицы кодирования с ее соответствующим блоком уровней и ассоциированной палитрой;
Фиг. 9 иллюстрирует идентичный блок уровней и набор элементов синтаксиса, используемых для кодирования этого блока уровней;
Фиг. 10 иллюстрирует процесс декодирования элементов синтаксиса, связанных с палитровым режимом;
Фиг. 11 иллюстрирует процесс восстановления, чтобы компоновать блок уровней на стороне декодирования;
Фиг. 12 иллюстрирует примерный алгоритм определения палитры в кодере;
Фиг. 13 иллюстрирует выбор элементов Pred mode, Level и Run синтаксиса в кодере для палитрового режима;
Фиг. 14 иллюстрирует принцип использования палитрового прогнозирования;
Фиг. 14a показывает кадр с несколькими CTB, размещаемыми в строках;
Фиг. 15 иллюстрирует процесс декодирования на основе опорных предикторов палитр, передаваемых в потоке битов согласно вариантам осуществления изобретения;
Фиг. 16 иллюстрирует текущую единицу кодирования с соседними пикселами, используемыми в качестве предикторов в вариантах осуществления изобретения;
Фиг. 17 иллюстрирует формирование предиктора палитры для текущей единицы кодирования, на основе соседних пикселов согласно вариантам осуществления изобретения;
Фиг. 18 показывает пример компоновки предиктора палитры согласно вариантам осуществления изобретения;
Фиг. 19 иллюстрирует декодирование синтаксиса палитр на основе битовой карты флагов согласно вариантам осуществления изобретения;
Фиг. 20 иллюстрирует процесс по фиг. 19 в одном примере;
Фиг. 21 иллюстрирует процесс декодирования на основе наличия остатков между элементами палитры и предикторами элементов согласно вариантам осуществления изобретения;
Фиг. 22 иллюстрирует внутреннее прогнозирование палитры согласно вариантам осуществления изобретения;
Фиг. 23 является принципиальной блок-схемой вычислительного устройства для реализации одного или более вариантов осуществления изобретения;
Фиг. 24 является блок-схемой последовательности операций способа, иллюстрирующей общие этапы для компоновки предиктора палитры из двух или более палитр, уже существующих, согласно некоторым вариантам осуществления изобретения;
Фиг. 25 иллюстрирует примерную реализацию подхода по фиг. 24;
Фиг. 26 иллюстрирует реализацию процесса по фиг. 24; и
Фиг. 27 иллюстрирует модифицированный синтаксис для битовых карт флагов, задающих то, как палитра может прогнозироваться из предиктора палитры, и содержит блок-схему последовательности операций способа, иллюстрирующую этапы для декодирования модифицированного синтаксиса битовой карты.
Подробное описание вариантов осуществления изобретения
Фиг. 1 иллюстрирует архитектуру HEVC-кодера. В видеокодере, исходная последовательность 101 разделена на блоки пикселов 102. Режим кодирования затем назначается каждому блоку. Предусмотрено два семейства режимов кодирования, типично используемых в HEVC: режимы на основе пространственного прогнозирования или внутренние режимы 103 и режимы на основе временного прогнозирования или взаимные режимы на основе оценки 104 движения и компенсации 105 движения. В данный момент проектируемое расширение HEVC, известное как HEVC RExt, добавляет дополнительный режим кодирования, а именно, режим палитрового кодирования, который конкурирует с режимами внутреннего и взаимного кодирования, чтобы кодировать блоки пикселов. Этот режим палитрового кодирования подробнее описан ниже, в частности, со ссылкой на фиг. 7-13.
Внутренняя единица кодирования, в общем, прогнозируется из кодированных пикселов на причинно-следственной границе посредством процесса, называемого "внутренним прогнозированием".
Временное прогнозирование режима взаимного кодирования сначала состоит в нахождении предыдущего или будущего кадра, называемого "опорным кадром 116", опорная область которого является ближайшей к единице кодирования, на этапе 104 оценки движения. Эта опорная область составляет блок предиктора. Затем эта единица кодирования прогнозируется с использованием блока предиктора, чтобы вычислять остаток на этапе 105 компенсации движения.
В обоих случаях, пространственное и временное прогнозирование, остаток вычисляется посредством вычитания единицы кодирования из исходного блока предиктора.
При внутреннем прогнозировании, кодируется направление прогнозирования. При временном прогнозировании, кодируется, по меньшей мере, один вектор движения. Тем не менее, чтобы дополнительно уменьшать затраты с точки зрения скорости передачи битов, связанные с кодированием на основе векторов движения, вектор движения непосредственно не кодируется. Фактически, при условии, что движение является гомогенным, в частности, преимущественно кодировать вектор движения в качестве разности между этим вектором движения и вектором движения в его среде. Например, в стандарте кодирования H.264/AVC, векторы движения кодируются относительно среднего вектора, вычисленного между 3 блоками, расположенными выше и слева от текущего блока. Только разность, также называемая "остаточным вектором движения", вычисленная между средним вектором и вектором движения текущего блока, кодируется в потоке битов. Это обрабатывается в модуле 117 Mv-прогнозирование и кодирования. Значение каждого кодированного вектора сохраняется в поле 118 векторов движения. Соседние векторы движения, используемые для прогнозирования, извлекаются из поля 118 векторов движения.
Затем, режим, оптимизирующий производительность искажения в зависимости от скорости передачи, выбирается в модуле 106. Чтобы дополнительно уменьшать избыточность, преобразование, типично DCT, применяется к остаточному блоку в модуле 107, и квантование применяется к коэффициентам в модуле 108. Квантованный блок коэффициентов затем энтропийно кодируется в модуле 109, и результат вставляется в поток 110 битов.
Кодер затем выполняет декодирование кодированного кадра для будущей оценки движения в модулях 111-116. Это представляет собой контур декодирования в кодере. Эти этапы обеспечивают возможность кодеру и декодеру иметь идентичные опорные кадры. Чтобы восстанавливать кодированный кадр, остаток обратно квантуется в модуле 111 и обратно преобразуется в модуле 112, чтобы предоставлять "восстановленный" остаток в пиксельной области. Согласно режиму кодирования (взаимному или внутреннему), этот остаток суммируется со взаимным предиктором 114 или с внутренним предиктором 113.
Затем, это первое восстановление фильтруется в модуле 115 посредством одного или нескольких видов постфильтрации. Эти постфильтры интегрированы в контур декодирования. Это означает то, что они должны применяться к восстановленному кадру в кодере и декодере, чтобы использовать идентичные опорные кадры в кодере и декодере. Цель этой постфильтрации состоит в том, чтобы удалять артефакты сжатия.
Принцип HEVC-декодера представлен на фиг. 2. Видеопоток 201 сначала энтропийно декодируется в модуле 202. Остаточные данные затем обратно квантуются в модуле 203 и обратно преобразуются в модуле 204, чтобы получать пиксельные значения. Данные режима также энтропийно декодируются, и в зависимости от режима выполняется внутреннее декодирование или взаимное декодирование. В случае внутреннего режима, направление внутреннего прогнозирования декодируется из потока битов. Направление прогнозирования затем используется для того, чтобы находить опорную область 205. Если режим является взаимным, информация движения декодируется из потока 202 битов. Она состоит из индекса опорного кадра и остатка вектора движения. Предиктор вектора движения суммируется с остатком вектора движения, чтобы получать вектор 210 движения. Вектор движения затем используется для того, чтобы находить опорную область в опорном кадре 206. Следует отметить, что данные 211 поля векторов движения обновляются с декодированным вектором движения, с тем чтобы использоваться для прогнозирования следующих декодированных векторов движения. Это первое восстановление декодированного кадра далее подвергается постфильтрации 207 с помощью постфильтра, полностью идентичного постфильтру, используемому на стороне кодера. Вывод декодера представляет собой распакованное несжатое видео (209).
Фиг. 3 иллюстрирует причинно-следственный принцип, получающийся в результате поблочного кодирования, аналогично HEVC.
На высоком уровне, изображение разделено на единицы кодирования, которые кодируются в порядке растрового сканирования. Таким образом, при кодировании блока 3.1, все блоки области 3.3 уже кодированы и могут считаться доступными в кодере. Аналогично, при декодировании блока 3.1 в декодере, все блоки области 3.3 уже декодированы и в силу этого восстановлены и могут считаться доступными в декодере. Область 3.3 называется "причинно-следственной областью" единицы 3.1 кодирования. После того, как единица 3.1 кодирования кодируется, она должна принадлежать причинно-следственной области для следующей единицы кодирования. Эта следующая единица кодирования, а также все следующие, принадлежит области 3.4, проиллюстрированной в качестве точечной области, и не может использоваться для кодирования текущей единицы 3.1 кодирования. Необходимо отметить, что причинно-следственная область состоит из восстановленных блоков. Информация, используемая для того, чтобы кодировать данную единицу кодирования, не представляет собой исходные блоки изображения по причине того, что эта информация недоступна при декодировании. Единственная информация, доступная при декодировании, представляет собой восстановленную версию блоков пикселов в причинно-следственной области, а именно, декодированную версию этих блоков. По этой причине, при кодировании, ранее кодированные блоки причинно-следственной области декодируются, чтобы предоставлять эту восстановленную версию этих блоков.
Можно использовать информацию из блока 3.2 в причинно-следственной области при кодировании блока 3.1. В спецификациях проекта расширения HEVC-диапазона, вектор 3.5 смещения, который может передаваться в потоке битов, может указывать этот блок 3.2.
Фиг. 5 иллюстрирует разбиение блока дерева кодирования на единицы кодирования и примерный порядок сканирования, чтобы последовательно обрабатывать эти единицы кодирования. В HEVC-стандарте, блочная структура организована посредством блоков дерева кодирования (CTB). Кадр содержит несколько неперекрывающихся и квадратных блоков дерева кодирования. Размер блока дерева кодирования может варьироваться по размеру от 64x64 до 16x16. Этот размер определяется на уровне последовательности. Самый эффективный размер, с точки зрения эффективности кодирования, является наибольшим: 64x64. Следует отметить, что все блоки дерева кодирования имеют идентичный размер за исключением цвета границы изображения, что означает то, что они размещаются в строках. Размер граничных CTB адаптирован согласно числу оставшихся пикселов.
Каждый блок дерева кодирования содержит одну или более квадратных единиц кодирования (CU). Блок дерева кодирования разбивается на основе структуры в виде дерева квадрантов на несколько единиц кодирования. Порядок обработки (кодирования или декодирования) каждой единицы кодирования в блоке дерева кодирования соответствует структуре в виде дерева квадрантов на основе порядка растрового сканирования. Фиг. 5 показывает пример порядка обработки декодирования единиц кодирования. На этом чертеже, число в каждой единице кодирования задает порядок обработки каждой соответствующей единицы кодирования этого блока дерева кодирования.
В HEVC, несколько способов используются для того, чтобы кодировать различные элементы синтаксиса, например, блочные остатки, информацию относительно блоков предикторов (векторов движения, направлений внутреннего прогнозирования и т.д.). HEVC использует несколько типов энтропийного кодирования, таких как контекстно-адаптивное двоичное арифметическое кодирование (CABAC), код Голомба-Райса или простое двоичное представление, называемое "кодированием фиксированной длины". Большую часть времени процесс двоичного кодирования выполняется для того, чтобы представлять различные элементы синтаксиса. Этот процесс двоичного кодирования преобразования в двоичную форму также является очень специфичным и зависит от различного элемента синтаксиса.
Например, элемент синтаксиса, называемый "coeff_abs_level_remaining", содержит абсолютное значение или часть абсолютного значения остатка коэффициентов. Идея этого процесса двоичного кодирования состоит в том, чтобы использовать код Голомба-Райса для первых значений и экспоненциальный код Голомба для более высоких значений. Более конкретно, в зависимости от данного параметра, называемого "порядком Голомба", это означает то, что для представления первых значений, например, значений 0-3, используется код Голомба-Райса, а затем для более высоких значений, например, значений от 4 и выше, используется экспоненциальный код Голомба. Порядок Голомба является параметром, используемым посредством как кода Голомба-Райса, так и экспоненциального кода Голомба.
Фиг. 6 иллюстрирует этот принцип на стороне декодирования. Входные данные процесса декодирования представляют собой поток 601 битов и Order, который известен как параметр Райса-Голомба или порядок Голомба. Вывод этого процесса представляет собой декодированный символ 612.
Значение префикса задается равным 1 на этапе 602, затем 1 бит извлекается из потока битов на этапе 601, и переменный флаг задается равным декодированному значению 603. Если этот флаг равен 0 на этапе 604, значение префикса постепенно увеличивается 605, и другой бит извлекается из потока 603 битов. Когда значение флага равно 1, решающий модуль 606 проверяет то, ниже или нет префикс значения строго 3. Если это является истинным, N=Order битов извлекаются 608 из потока 601 битов и задаются равными переменной codeword. Это соответствует представлению Голомба-Райса. Значение символа 612 задается равным ((prefix<<Order)+codeword), как представлено на этапе 609. При этом "<<" является оператором сдвига влево.
Если префикс выше или равен 3 на этапе 606, следующий этап представляет собой 610, на котором N=(prefix-3+Order) битов извлекаются из потока битов и задаются в качестве переменной 610 codeword. Значение 611 символа задается равным ((1<<(prefix-3))+2)<<Order)+codeword. Это соответствует экспоненциальному представлению Голомба.
Далее, этот процесс декодирования и, симметрично, соответствующий процесс кодирования, называются "Golomb_H" с входным параметром, соответствующим порядку Голомба. Его можно записывать просто как Golomb_H(Order).
В HEVC, для некоторых элементов синтаксиса, к таких как примеру, остатки, порядок Голомба обновляется с возможностью адаптировать энтропийное кодирование к сигналу, который должен быть кодирован. Формула обновления пытается уменьшать размер кода Голомба посредством увеличения порядка Голомба, когда коэффициенты имеют большие значения. В HEVC-стандарте, обновление задается посредством следующей формулы:
Order=Min( cLastRiceOrder+( cLastAbsLevel>(3*(1<< cLastRiceOrder ) ) ? 1=0 ), 4 )
Если cLastRiceOrder cLastRiceParam является последним используемым Order, cLastAbsLevel является последним декодированным coeff_abs_level_remaining. Следует обратить внимание на то, что для первого параметра, который должен кодироваться или декодироваться, cLastRiceOrder cLastRiceParam и cLastAbsLevel задаются равными 0. Кроме того, следует обратить внимание на то, что параметр Order rParam не может превышать значение 4 в этой формуле. При этом выражение (C? A: B) имеет значение A, если условие C является истинным, и B, если условие C является ложным.
Расширение HEVC-диапазона, также обычно называемое "HEVC RExt", представляет собой расширение, которое в данный момент проектируется для нового стандарта кодирования видео (HEVC).
Цель этого расширения состоит в том, чтобы предоставлять дополнительные инструментальные средства для того, чтобы кодировать видеопоследовательности с дополнительными цветовыми форматами и битовой глубиной и, возможно, без потерь. В частности, это расширение спроектировано с возможностью цветовой формат 4:2:2, а также видеоформат 4:4:4 в дополнение к видеоформату 4:2:0 (см. фиг. 4). Цветное изображение, в общем, формируется из 3 цветовых компонентов R, G и B. Эти компоненты, в общем, коррелируются, и в сжатии изображений и видео очень распространена декорреляция цветовых компонентов до обработки изображений. Наиболее распространенный формат, который декоррелирует цветовые компоненты, представляет собой цветовой YUV-формат. YUV-сигналы типично создаются из RGB-представления изображений посредством применения линейного преобразования к трем вводам в виде входных R-, G- и B-кадров. Y обычно называется "компонентом сигнала яркости", U и V, в общем, называются "компонентами сигнала цветности". Термин "YCbCr" также обычно используется вместо термина "YUV".
Относительно битовой глубины, которая является числом битов, используемых для того, чтобы кодировать каждый цветовой компонент пиксела, хотя текущий HEVC-стандарт имеет возможность решать проблемы, связанные с цветовым форматом 4:2:0 с битовой глубиной в 8 и 10 битов (т.е. 256-1024 возможных цветов), HEVC RExt должен быть спроектирован с возможностью дополнительно поддерживать видеоформат 4:2:2 и 4:4:4 с расширенной битовой глубиной в пределах от 8 битов до 16 битов (т.е. до 65536 возможных цветов). Это является, в частности, полезным для большей динамики цветовых компонентов.
HEVC RExt также спроектирован с возможностью предоставлять кодирование без потерь входных последовательностей; это служит для того, чтобы иметь декодированный вывод 209, строго идентичный вводу 101. Чтобы достигать этого, ряд инструментальных средств модифицирован или добавлен, по сравнению с традиционным HEVC-кодеком с потерями. Неполный список примерных модификаций или добавлений для того, чтобы реализовывать без потерь, предоставляется ниже:
- удаление этапа 108 квантования (203 в декодере);
- принудительная активация обходного преобразования, поскольку нормальные косинусные/синусные преобразования 107 могут вводить ошибки (204 в декодере);
- удаление инструментальных средств, специально адаптированных для компенсации шума квантования, таких как постфильтрация 115 (207 в декодере).
Для HEVC RExt, формула обновления порядка Голомба дополнительно модифицирована таким образом, чтобы адаптироваться к возможности решать проблемы, связанные с более высокой битовой глубиной и учитывать очень высокое качество, требуемое посредством приложения, решающего проблемы, связанные со сжатием видео расширенного формата (4:2:2 и 4:4:4), включающие в себя кодирование без потерь. Для HEVC RExt, формула обновления изменена следующим образом:
Order=Min(cLastRiceOrder+(cLastAbsLevel>>(2+cLastRiceOrder) ), 7 )
В этой формуле, максимальное значение Order равно 7. Кроме того, для первого кодирования coeff_abs_level_remaining для субблока блока преобразования, порядок параметр Голомба задается равным:
Order=Max(0, cRiceOrder-(transform_skip_flag||cu_transquant_bypass_flag ? 1: 2))
где:
- переменная transform_skip_flag задается равной 1, если преобразование (например, DCT 107 или 204) пропускается для текущей единицы кодирования, и 0, если преобразование используется,
- переменная cu_transquant_bypass_flag задается равной 1, если единица кодирования без потерь кодируется, и 0 в противном случае,
- переменная cRiceOrder задается равной используемому в прошлый раз Order из другого субблока блока преобразования, и в противном случае задается равной 0.
Дополнительные инструментальные средства для HEVC RExt в данный момент проектируются с возможностью эффективно кодировать видеопоследовательности "экранного контента" в дополнение к естественным последовательностям. Видеопоследовательности "экранного контента" означают конкретные видеопоследовательности, которые имеют очень специфичный контент, соответствующий контенту, захваченному из персонального компьютера любого другого устройства, содержащему, например, текст, презентацию PowerPoint, графический пользовательский интерфейс, таблицы (например, снимки экрана). Эти конкретные видеопоследовательности имеют очень отличающуюся статистику по сравнению с естественными видеопоследовательностями. При кодировании видео, производительность традиционных инструментальных средств кодирования видео, включающих в себя HEVC, иногда оказывается недостаточной при обработке такого "экранного контента".
Текущие инструментальные средства, в данный момент обсуждаемые в HEVC RExt для того, чтобы обрабатывать видеопоследовательности "экранного контента", включают в себя режим внутреннего блочного копирования и палитровый режим. Прототипы для этих режимов демонстрируют хорошую эффективность кодирования по сравнению с традиционным способом, нацеленным на естественные видеопоследовательности. Настоящая заявка акцентирует внимание на режиме палитрового кодирования.
Палитровый режим HEVC RExt представляет собой режим прогнозирования. Это означает то, что палитровый способ используется для того, чтобы компоновать предиктор для кодирования данной единицы кодирования, аналогично прогнозированию, выполняемому посредством прогнозирования движения (взаимный случай) или посредством внутреннего прогнозирования. После формирования прогнозирования, остаточная единица кодирования преобразуется, квантуется и кодируется. Другими словами, применяются идентичные процессы, как описано выше со ссылкой на фиг. 1 и 2.
Палитра, в общем, представляется посредством таблицы, содержащей конечный набор кортежа из N элементов цветов, причем каждый цвет задается посредством своих компонентов в данном цветовом пространстве (см., например, 803 на фиг. 8 на основе цветового YUV-пространства). Например, в типичном RGB-формате, палитра состоит из списка из P элементов кортежа из N элементов (где N=3 для RGB). Более точно, каждый элемент соответствует фиксированному триплету цветовых компонентов в RGB-формате. Конечно, он не ограничен цветовым RGB- или YUV-форматом. Любой другой цветовой формат может быть представлен посредством палитры и может использовать меньшее или большее число цветовых компонентов, что означает то, что N может отличаться от 3.
На стороне кодера, палитровый режим, рассматриваемый в RExt, состоит в преобразовании пиксельных значений данной входной единицы кодирования в индексы, называемые "уровнями", идентифицирующие записи в ассоциированной палитре. После преобразования, результирующая единица кодирования или блок составляется из уровней и затем передается в декодер с ассоциированной палитрой, в общем, таблицей, имеющей конечное число триплетов цветов, используемых для того, чтобы представлять единицу кодирования. Поскольку палитра задает конечное число цветов, преобразование в блок индексов обычно аппроксимирует исходную входную единицу кодирования.
Чтобы применять палитровый режим на стороне кодера, примерный способ преобразовывать единицу кодирования пикселов выполняется следующим образом:
- нахождение P триплетов, лучше всего описывающих единицу кодирования пикселов, которые следует кодировать, например, посредством минимизации полного искажения;
- затем ассоциирование каждого пиксела единицы кодирования с ближайшим цветом из P триплетов: значение для кодирования (или уровень) (которое в силу этого является частью блока индексов) в таком случае представляет собой индекс, соответствующий записи ассоциированного ближайшего цвета. Таким образом, блок предиктора индексов получается из палитры посредством сравнения записей палитры с каждым пикселом единицы кодирования, чтобы идентифицировать, для каждого пиксела, запись, которая задает ближайший цвет.
Для каждой единицы кодирования, палитра (т.е. найденные P триплетов), блок индексов или уровней и остаток, представляющий разность между исходной единицей кодирования и блоком индексов в цветовом пространстве (который является предиктором блока), кодируются в потоке 110 битов и отправляются в декодер.
В декодере, палитровый режим состоит в выполнении преобразования обратным способом. Это означает то, что каждый декодированный индекс, ассоциированный с каждым пикселом единицы кодирования, заменен посредством соответствующего цвета в палитре, декодированной из потока битов, чтобы восстанавливать соответствующий цвет для каждого пиксела единицы кодирования. Это представляет собой восстановление блока индексов в цветовом пространстве (т.е. предиктора единицы кодирования). Поскольку палитровый режим представляет собой режим прогнозирования, ассоциированный остаток декодируется из потока битов и затем суммируется с восстановленным предиктором единицы кодирования, чтобы компоновать конечную восстановленную единицу кодирования.
Фиг. 7 дополнительно иллюстрирует принцип палитрового режима в декодере. Режим прогнозирования для текущей единицы кодирования извлекается на этапе 702 из потока 701 битов. В настоящее время, палитровый режим идентифицируется посредством флага, расположенного перед флагом пропуска в потоке битов (другие режимы кодирования описаны выше со ссылкой на фиг. 1 и 2). Этот флаг CABAC-кодируется с использованием одного контекста. Если этот режим представляет собой палитровый режим 703, то связанный синтаксис палитрового режима 705, т.е. информация относительно палитры, блока уровней и остатка, извлекается и декодируется 704 из потока 701 битов.
Затем, во время этапа 706, два элемента компонуются из декодированных данных: палитра 707 и блок уровней 708. Из этого блока уровней и ассоциированной палитры, предиктор единицы кодирования в пиксельной области 710 компонуется 709. Это означает то, что для каждого уровня блока уровней, цвет (RGB или YUV) ассоциирован с каждым пикселом.
Затем остаток единицы кодирования декодируется 711 из потока 701 битов. В текущей реализации палитрового режима, остаток, ассоциированный с палитровым режимом, кодируется с использованием общего способа взаимного остаточного HEVC-кодирования, т.е. с использованием кодирования кодом Голомба. Чтобы получать остаток единицы кодирования, выполняется традиционное обратное квантование и обратное преобразование. Предиктор 710 блока суммируется 713 с этим остатком 712 единицы кодирования, чтобы формировать восстановленную единицу 714 кодирования.
Фиг. 8 иллюстрирует принцип палитрового режима в кодере. Текущая единица 801 кодирования преобразуется в блок 802 идентичного размера, который содержит уровень для каждого пиксела вместо 3 значений цвета (Y, U, V) или (R, G, B). Палитра 803, ассоциированная с этим блоком уровней, компонуется на основе минимизации полного искажения единицы кодирования и ассоциирует в каждой записи, индекс или уровень записи с соответствующими значениями пиксельного цвета. Следует отметить, что для монохромного варианта применения, пиксельное значение может содержать только один компонент.
Как упомянуто относительно фиг. 7, палитра (а также остаток) кодируется и вставляется в поток битов для каждой единицы кодирования. Аналогичным образом, блок уровней (соответствующий предиктору единицы кодирования) кодируется и вставляется в поток битов, и пример кодирования приведен ниже со ссылкой на фиг. 9. В этом примере, блок уровней сканируется в горизонтальном порядке.
Блок 91 уровней является точно идентичным блоку уровней, проиллюстрированному на фиг. 8 в соответствии со ссылкой 802. Таблицы 92 и 93 описывают последовательные элементы синтаксиса, используемые для того, чтобы кодировать блок 91 уровней. Таблица 93 должна читаться как продолжение таблицы 92. Элементы синтаксиса в таблице соответствуют кодированию групп уровней, обведенных посредством полужирных линий в блоке 91.
Блок уровней кодируется посредством группы последовательных пикселов в порядке сканирования. Каждая группа кодируется с использованием первого элемента синтаксиса, предоставляющего направление прогнозирования, второго элемента, предоставляющего повторение, и необязательного третьего элемента, предоставляющего значение пиксела, а именно, уровень. Повторение соответствует числу пикселов в группе.
Две таблицы иллюстрируют текущий синтаксис, ассоциированный с палитровым режимом. Эти элементы синтаксиса соответствуют кодированной информации, ассоциированной в потоке битов для блока 91 уровней. В этих таблицах, три основных элемента синтаксиса используются для того, чтобы полностью представлять операции палитрового режима, и используются следующим образом при последовательном рассмотрении уровней блока 91 уровней.
Первый элемент синтаксиса, называемый "Pred mode", позволяет отличать между двумя режимами кодирования. В первом режиме, соответствующем флагу "режима прогнозирования", равному 0, новый уровень используется для текущего пиксела. Уровень немедленно передается в служебных сигналах после этого флага в потоке битов. Во втором режиме, соответствующем флагу "режима прогнозирования", равному 1, используется режим "с копированием вверх". Более конкретно, это означает то, что текущий пиксельный уровень соответствует пиксельному уровню, расположенному в линии непосредственно выше, начинающейся в идентичной позиции для порядка растрового сканирования. В этом случае флага "режима прогнозирования", равного 1, нет необходимости немедленно передавать в служебных сигналах уровень после флага, поскольку значение уровня известно в отношении значения уровня пиксела сразу выше в блоке 91 уровней.
Второй элемент синтаксиса, называемый "Level", указывает значение уровня палитры для текущего пиксела только в первом режиме Pred mode.
Третий элемент синтаксиса, называемый "Run", используется для того, чтобы кодировать повторяющееся значение в обоих режимах Pred mode. С учетом того, что блок 91 уровней сканируется из левого верхнего угла в правый нижний угол, построчно слева направо и сверху вниз, элемент Run синтаксиса задает число последовательных пикселов в блоке 91, имеющих идентичное кодирование.
Этот элемент Run синтаксиса имеет различный смысл, который зависит от флага "режима прогнозирования". Когда режим прогнозирования равен 0, элемент Run является числом последовательных пикселов блока предиктора, имеющих идентичное значение уровня. Например, если Run=8, это означает то, что текущий "уровень" применяется к текущему пикселу и к следующим 8 пикселам, что соответствует 9 идентичным последовательным выборкам в порядке растрового сканирования.
Когда режим прогнозирования равен 1, элемент Run является числом последовательных пикселов блока предиктора, имеющих значение уровня, соответствующее значению уровня их верхнего пиксела в блоке 91, т.е. если применяется режим "с копированием вверх". Например, если Run=31, это означает то, что уровень текущего пиксела копируется из пиксела линии выше, а также из следующих 31 пикселов, что соответствует 32 пикселам всего.
Таблицы 92 и 93 представляют восемь этапов, чтобы представлять блок 91 посредством использования палитрового режима. Каждый этап начинается с кодирования флага "режима прогнозирования", после чего кодируется элемент Level синтаксиса, когда флаг "режима прогнозирования" равен 0, или элемент Run синтаксиса, когда флаг "режима прогнозирования" равен 1. После элемента Level синтаксиса всегда следует элемент Run синтаксиса.
Когда режим прогнозирования, декодированный для текущего блока, представляет собой палитровый режим, декодер сначала декодирует синтаксис, связанный с этим блоком, и затем применяет процесс восстановления для единицы восстановления.
Фиг. 10 иллюстрирует процесс декодирования элементов синтаксиса, связанных с палитровым режимом. Во-первых, размер палитры извлекается и декодируется 1002 из потока 1001 битов. Точный размер палитры (Palette_size) получается посредством суммирования 1 с этим значением размера, декодированным на этапе 1002. Фактически, размер кодируется посредством использования унарного кода, для которого значение 0 имеет наименьшее число битов (1 бит), и размер палитры не может быть равен 0, в противном случае, пиксельное значение не может использоваться для того, чтобы компоновать предиктор блока.
Далее начинается процесс, соответствующий декодированию значений палитры. Переменная i, соответствующая индексу палитры, задается равной 0 на этапе 1004, после этого на этапе 1005 выполняется тест, чтобы проверять то, равна или нет i размеру (Palette_size) палитры. Если она отличается от размера палитры на этапе 1005, один элемент палитры извлекается из потока 1001 битов и декодируется на этапе 1006 и затем добавляется в палитру с ассоциированным уровнем/индексом, равным i. Затем переменная i постепенно увеличивается посредством этапа 1007. Если i равна размеру палитры на этапе 1005, палитра полностью декодирована.
Далее выполняется процесс, соответствующий декодированию блока 91 уровней. Во-первых, переменная j, соответствующая счетчику пикселов, задается равной 0, как и переменная syntaxj 1008. Затем выполняется проверка для того, чтобы знать то, соответствует или нет счетчик пикселов числу пикселов, содержащихся в блоке. Если ответ представляет собой "Да" на этапе 1009, процесс завершается на этапе 1017, в противном случае значение флага "режима прогнозирования", соответствующего одному режиму прогнозирования, извлекается из потока 1001 битов и декодируется 1010.
Значение "режима прогнозирования" добавляется в таблицу в индексе syntaxj, содержащем все декодированные значения "режима прогнозирования". Если значение этого "режима прогнозирования" равно 0, этап 1011, элемент синтаксиса, соответствующий Level, извлекается из потока 1001 битов и декодируется 1012. Эта переменная Level добавляется в таблицу в индексе syntaxj, содержащую все декодированные уровни. Переменная j, соответствующая счетчику пикселов, постепенно увеличивается на единицу 1013.
Затем элемент Run синтаксиса декодируется на этапе 1014. Если элемент Pred Mode синтаксиса равен 1, этап 1011, значение Run также декодируется на этапе 1014. Этот элемент Run синтаксиса добавляется в таблицу в индексе syntaxj, содержащую все декодированные серии.
Затем на этапе 1015, значение j постепенно увеличивается на значение серии, декодированной на этапе 1014. Переменная syntaxj постепенно увеличивается на единицу, чтобы рассматривать следующий набор элементов синтаксиса. Если счетчик j равен числу пикселов в блоке, то синтаксис для того, чтобы компоновать блок 91 уровней, завершается 1017. В конце этого процесса, связанного с палитрой, декодер знает палитру и таблицы, содержащие список всех элементов Pred mode, Level и Run синтаксиса, ассоциированных с палитровым режимом этой единицы кодирования. Декодер затем может продолжать процесс восстановления единицы кодирования, как описано через фиг. 7.
В небольшой разновидности этого варианта осуществления по фиг. 10, элемент Pred mode не предоставляется для первой линии пикселов в начале блока 91 уровней. Это обусловлено тем, что поскольку для этих пикселов отсутствуют уровни в линии выше, режим "с копированием вверх" не может выполняться. Следовательно, при условии, что j меньше ширины блока на этапе 1009, элемент Pred mode не предоставляется, и этапы 1010-1011 сокращены, в силу этого непосредственно выполняя этап 1012. Следует отметить, что эта небольшая разновидность снижает размер кодированного блока уровней.
В варианте осуществления, который может комбинироваться либо с вышеописанным вариантом осуществления по фиг. 10, либо с его небольшой разновидностью, несколько блоков уровней могут формироваться вместо только одного. Это означает то, что несколько уровней используются для всех или частей пикселов. Например, первый блок уровней может компоноваться для первого цветового компонента (например, Y), в то время как другой блок уровней может компоноваться, по меньшей мере, для одного оставшегося компонента (например, U и V). Конечно, могут предполагаться три блока уровней для трех цветовых компонентов. Вариант наличия нескольких блоков уровня и их соответствия цветовым компонентам может быть передан в служебных сигналах в потоке битов с использованием конкретных флагов. В разновидности, это может подразумеваться посредством цветового формата изображения.
Процесс по фиг. 10 описан выше в отношении процесса прогнозирования в палитровом режиме по фиг. 7, в котором остаток кодируется и в силу этого извлекается и декодируется на этапах 711 и 712 перед суммированием с предиктором единицы кодирования.
В разновидности процесса прогнозирования в палитровом режиме, как описано на фиг. 7, остаток не может предоставляться (т.е. кодироваться на стороне кодирования). Это приводит к тому, что на фиг. 7, на котором отсутствуют этапы 711, 712 и 713, восстановленная единица 714 кодирования является идентичной предиктору 710 единицы кодирования.
Тем не менее, при этом могут быть пикселы единицы кодирования, которые неправильно описаны посредством уровней палитры, что означает то, что соответствующие релевантные уровни не обнаружены в палитре. Эти пикселы упоминаются в качестве пикселов с управляющим кодом, поскольку соответствующее значение не задается в блоке уровней.
Элементы синтаксиса, скомпонованные в ходе процесса по фиг. 10 для блока уровней, за счет этого могут дополняться, для этих пикселов с управляющим кодом, с явными пиксельными значениями из исходной единицы кодирования. Явные пиксельные значения могут быть переданы в служебных сигналах и переданы в потоке битов.
Пример передачи в служебных сигналах пикселов заключается в том, чтобы добавлять перед элементом Pred mode (т.е. перед этапом 1010) флаг управляющего кода, указывающий то, кодируется пиксел в палитровом режиме (в силу этого подлежит этапу 1010) или кодируется управляющим кодом (в силу этого с явным пиксельным значением). После флага управляющего кода следует явное пиксельное значение (элементы Pred mode, Level и Run не предоставляются для этого пиксела).
В разновидности для флага управляющего кода, конкретное значение уровня (выделенное пикселам с управляющим кодом и полученное на этапе 1012) может использоваться для того, чтобы передавать в служебных сигналах пиксел с управляющим кодом. В этом случае, элемент Run должен быть явным пиксельным значением. Это конкретное значение может возникать только тогда, когда компонуемая палитра достигает своего максимального размера, за счет этого сокращая затраты на передачу в служебных сигналах значений управляющего кода для каждого размера палитры.
В любом варианте осуществления, явные пиксельные значения могут кодироваться прогнозирующе (например, в качестве разности со значением соседнего пиксела) или нет и могут квантоваться или нет, с возможными последствиями для энтропийного кодирования (контекстными и по числу битов и т.д.).
b
Возвращаясь к палитре, каждый элемент палитры, состоящий из трех значений в вышеприведенных примерах, в общем, кодируется с использованием трех двоичных кодов. Длина двоичных кодов соответствует битовой глубине каждого цветового компонента. Размер палитры типично кодируется с использованием унарного кода. Элемент Pred mode кодируется с использованием одного бита (а также флага управляющего кода, если таковые имеются). Элемент Level кодируется с использованием двоичного кода с длиной двоичного кода, равной b, где 2 является наименьшим целым числом, равным или выше размера палитры. Кроме того, элемент Run кодируется с использованием Golomb_H(Order=3), как пояснено выше относительно фиг. 6.
Фиг. 11 иллюстрирует процесс восстановления, чтобы компоновать блок 91 уровней и затем предиктор блока в цветовом пространстве, который должен использоваться в качестве предиктора. Входные данные этого процесса представляют собой таблицы, полученные с использованием вышеописанного процесса по фиг. 10 и содержащие список Pred mode, Level и Run. Следует отметить, что специалист в данной области техники имеет возможность адаптировать нижеприведенные идеи к вариантам осуществления на основе присутствия пикселов с управляющим кодом.
Дополнительный элемент входных данных в элементы Pred mode, Level и Run представляет собой размер единицы 801 кодирования (который является идентичным размеру блока 802/91 уровней), известный из дерева квадрантов (фиг. 5), передаваемого в служебных сигналах в потоке битов.
На первом этапе 1101, переменная i, представляющая счетчик пикселов, задается равной 0, и переменная j для последовательного рассмотрения каждого набора элементов синтаксиса, также задается равной 0. На этапе 1104, элемент Pred_mode[j], извлеченный из таблицы "режима прогнозирования" в индексе j, сверяется с 0.
Если он равен 0, новый уровень кодируется для текущего пиксела i. Как следствие, значение пиксела в позиции i задается равным уровню в индексе j из таблицы уровней; Block[i]=Level[j]. Это представляет собой этап 1105. Переменная i постепенно увеличивается на единицу на этапе 1106, чтобы рассматривать следующий пиксел, и переменная k, выделенная, чтобы подсчитывать пикселы, уже обработанные в текущей серии, задается равной 0 на этапе 1107.
На этапе 1108 выполняется проверка, чтобы определять то, равен или нет k элементу Run таблицы серий в индексе j: k=Run[j]?. Если не равен, уровень пиксела в позиции i задается равным значению уровня пиксела в позиции i-1: Block[i]=Block[i-1]. Это представляет собой этап 1109. Переменная i и переменная k затем постепенно увеличиваются на единицу, соответственно, на этапах 1110 и 1111. Если k=Run[j] на этапе 1108, распространение значения левого уровня закончено, и выполняется этап 1120 (описан ниже).
Если Pred_mode[j] отличается от 0 на этапе 1104, режим "с копированием вверх" начинается с переменной k, заданной равной 0 на этапе 1112. Затем, этап 1113 проверяет то, равен или нет (k-1) элементу Run таблицы серий в индексе j: k=Run[j]+1?. Если не равен, значение уровня пиксела в позиции i задается равным значению уровня пиксела в позиции i верхней линии: Block[i]=Block[i-width], где width является шириной блока уровней (идентичного единице кодирования), выведенной из входного размера единицы кодирования. Это представляет собой этап 1114. Затем, переменная i и переменная k постепенно увеличиваются на единицу, соответственно, на этапах 1115 и 1116. Если k=Run[j]+1 на этапе 1113, режим прогнозирования "с копированием вверх" завершается, и процесс продолжается на этапе 1120.
На этапе 1120, выполняется проверка для того, чтобы определять то, равна или нет переменная i числу пикселов в блоке 91/CU 801. Если не равна, переменная j постепенно увеличивается на единицу на этапе 1121, чтобы рассматривать следующий набор элементов синтаксиса, и процесс циклически возвращается к этапу 1104, описанному выше.
Если все пикселы обработаны на этапе 1120, конечный блок 91 уровней получается на этапе 1122: это соответствует таблице Block[]. Затем конечный этап 1123 состоит в преобразовании каждого уровня в цветовые значения с использованием палитры 803, декодированной с использованием процесса по фиг. 10 (за исключением пикселов с управляющим кодом, которые непосредственно имеют свои пиксельные значения). Этот конечный этап влияет на пиксельные значения (Y, U, V) или (R, G, B) в каждой позиции блока согласно уровню этой позиции в блоке и соответствующим записям в палитре.
Другие аспекты палитрового режима, введенного в HEVC RExt, относятся к определению посредством кодера палитры, которая должна использоваться для того, чтобы кодировать текущую единицу кодирования (см. фиг. 12 ниже), и выбору элементов Pred mode, Level и Run синтаксиса в кодере (см. фиг. 13 ниже).
Фиг. 12 иллюстрирует примерный алгоритм определения палитры в кодере. Входные данные этого процесса представляют собой исходную единицу кодирования пикселов и размер единицы кодирования. В этом примере, компонуется YUV-палитра, но другие реализации могут приводить к компоновке RGB-палитры аналогичным образом.
На первом этапе 1201, переменная j, представляющая счетчик пикселов, задается равной 0, переменная Palette_size, которая соответствует росту палитры по мере ее компоновки, также задается равной 0, и переменная TH, представляющая пороговое значение, задается равной 9. Затем на этапе 1203, пиксел Pi, т.е. имеющий индекс i согласно порядку сканирования, считывается на этапе 1203 из исходной единицы 1204 кодирования. Затем переменная j задается равной 0 на 1205, и на этапе 1206 выполняется проверка для того, чтобы определять то, равен или нет размер палитры переменной j (что означает то, что рассмотрены все элементы палитры для составляемой палитры).
i
i
Если размер палитры равен j, палитра в индексе j задается равной пиксельному значению p на этапе 1209. Это означает то, что текущий пиксел p становится новым элементом в палитре с индексом j, ассоциированным с ним. Более точно, выполняется следующее назначение:
Y
PAL[j]=(Yi)
U
PAL[j]=(Ui)
V
PAL[j]=(Vi)
Y,U,V
где PAL являются тремя таблицами, чтобы сохранять значения цвета.
Размер (Palette_size) палитры постепенно увеличивается на единицу на этапе 1210, и счетчик таблицы вхождений задается равным 1 для индекса Palette size на этапе 1211. Затем переменная i постепенно увеличивается на единицу на этапе 1213, чтобы рассматривать следующий пиксел i текущей единицы кодирования. Затем на этапе 1214выполняется проверка, чтобы определять то, обработаны или нет все пикселы текущей единицы кодирования. Если все они обработаны, процесс завершается посредством этапа 1215 упорядочения, поясненного ниже, в противном случае следующий пиксел рассматривается на этапе 1203, описанном выше.
i
Возвращаясь к этапу 1206, если j отличается от palette_size, выполняется этап 1207, на котором вычисляется абсолютное значение для каждого цветового компонента между p и элементом палитры в индексе j. Формулы показаны на чертеже. Если все абсолютные разности строго меньше предварительно заданного порогового значения TH, счетчик вхождений относительно элемента j в палитре постепенно увеличивается на единицу на этапе 1212. Этап 1207 создает класс для каждого элемента составляемой палитры, такого как класс, охватывающий цвета, соседние с цветом элемента, с учетом допустимого запаса TH. Таким образом, этап 1212 подсчитывает вхождения каждого класса. После этапа 1212 выполняется этап 1213, уже описанный.
Если условие этапа 1207 не удовлетворяется, переменная j постепенно увеличивается на единицу на этапе 1208, чтобы рассматривать следующий элемент палитры в палитре. Это служит для того, чтобы сравнивать другие элементы цвета палитры с текущим пикселом посредством нового осуществления этапа 1207. Если элементы в палитре не соответствуют критерию этапа 1207, новый элемент добавляется в палитру, как описано выше в отношении этапов 1209, 1210 и 1211.
Можно отметить, что решающий модуль 1207 может сравнивать каждый цветовой элемент для (YUV- или RGB-) последовательностей 4:4:4 и может сравнивать цветовой компонент сигнала яркости только для последовательностей 4:2:0.
В конце процесса по фиг. 12, таблица Counter содержит число вхождений классов, заданных посредством соответствующих элементов палитры. Затем элементы палитры упорядочиваются на этапе 1215 согласно их вхождениям, так что самый частый элемент находится в первой позиции (запись с наименьшим индексом или "уровнем") в палитре.
Также можно отметить, что размер палитры может быть ограничен максимальным размером, например, 24 записями. В таком случае, если размер палитры, получающейся в результате этапа 1215, превышает 24, палитра уменьшается посредством удаления элементов (записей) из 25-й позиции в упорядоченной палитре. Это приводит к компоновке палитры.
Возвращаясь теперь к выбору элементов Pred mode, Level и Run синтаксиса в кодере, входные данные процесса по фиг. 13 представляют собой исходную единицу кодирования пикселов, палитру, скомпонованную посредством процесса по фиг. 12, и размер единицы кодирования. В частности, эта оценка выполняется при определении того, какой режим кодирования между внутренним кодированием, взаимным кодированием и палитровым кодированием должен использоваться.
На первом этапе 1301, переменная i, представляющая счетчик пикселов, задается равной 0. Процесс, описанный ниже, направлен на определение элементов синтаксиса для пикселов, начинающихся с i. Два режима прогнозирования оцениваются независимо: Pred mode=0 в правой части чертежа и Pred mode=1 в левой части чертежа.
copy
copy
copy
copy
Для прогнозирования "с копированием вверх" (соответствующего Pred mode=1), переменная i, используемая для того, чтобы подсчитывать число уровней в текущей серии, задается равной 0 на этапе 1303. Затем на этапе 1304 текущий уровень в пиксельном местоположении i: Block[i+i], сравнивается с уровнем пиксела, расположенного сразу выше в верхней линии: Block[i+i-width], где width соответствует ширине текущей единицы кодирования. Следует отметить, что уровень Block[i+i] каждого пиксела единицы кодирования определяется параллельно на этапе 1308. Этот этап состоит в ассоциировании с пикселом, в позиции i, ближайшего элемента палитры (на практике его индексом или уровнем), как уже пояснено выше. Этот этап использует позицию i, палитру 1306 и исходную единицу 1307 кодирования.
copy
copy
copy
copy
copy
copy
copy
copy
Если Block[i+i]=Block[i+i-width] на этапе 1304, переменная i постепенно увеличивается на единицу на этапе 1305, чтобы рассматривать следующее пиксельное значение блока пикселов и указывать то, что текущий пиксельный уровень в позиции i+i может быть включен в текущую серию "с копированием вверх". Если Block[i+i] отличается от Block[i+i-width] на этапе 1304, что означает то, текущая оценка серии "с копированием вверх" завершена, переменная i передается в решающий модуль 1314. На этой стадии процесса, переменная i соответствует числу значений, скопированных из линии сразу выше.
left
start
left
Для прогнозирования на основе левых значений (соответствующего Pred mode=0), контур для того, чтобы определять значение серии (i), обрабатывается параллельно или последовательно. Сначала переменная i, используемая для того, чтобы сохранять индекс i текущего пиксела, задается равной i, и переменная j, используемая для того, чтобы рассматривать последовательно пиксельные уровни после индекса i, также задается равной i, и переменная i, используемая для того, чтобы подсчитывать составляемую текущую серию, задается равной 0. Это представляет собой этап 1309. Затем, этап 1310 состоит в определении того, выполняется или нет следующее: j!=0 и "Pred_mode[j-1]"=0, и Block[j]=Block[j-1]. Pred_mode[] является таблицей, используемой посредством кодера для того, чтобы сохранять режим прогнозирования (1 или 0, соответственно, для прогнозирования "с копированием вверх" и прогнозирования на основе левых значений). Она заполняется прогрессивно на этапе 1317, описанном ниже, по мере того, как обрабатываются последовательные пикселы, и инициализируется с нулевыми значениями, например, на этапе 1301: Pred_mode[k]=0 для любого k.
left
Если условие на этапе 1310 удовлетворяется, переменная i постепенно увеличивается на единицу на этапе 1311, чтобы указывать то, что текущий пиксельный уровень в позиции j может быть включен в текущую серию "левых значений", и переменная j постепенно увеличивается на единицу на этапе 1312, чтобы рассматривать следующее пиксельное значение блока пикселов.
start
start
start
left
Если условие на этапе 1310 не удовлетворяется, переменная j сравнивается с i, чтобы определять то, является она или нет первым пиксельным значением, которое должно анализироваться для текущей серии "левых значений". Это представляет собой этап 1313. Если j равна или меньше i, что означает то, что она является первым пиксельным значением, которое должно анализироваться для текущей серии, то она начинает текущую серию, и следующее пиксельное значение рассматривается на этапе 1312, описанном выше. Если j строго выше i, что означает то, что первое пиксельное значение, отличающееся от пиксельного значения текущей серии "левых значений", обнаружено, переменная i, которая соответствует длине текущей серии "левых значений", передается в решающий модуль 1314. Следует отметить, что в качестве контура для прогнозирования "с копированием вверх", уровень Block[i] в индексе i определяется в идентичном контуре на этапе 1308.
left
copy
copy
copy
left
После вычисления максимальной серии для режима "прогнозирования на основе левых значений" и режима "с копированием вверх", переменные i и i сравниваются на этапе 1314. Это служит для того, чтобы определять, выполняется или нет следующее: i!=0 и i+2 выше i. Он представляет собой примерный критерий, чтобы выбирать либо режим с копированием вверх, либо режим прогнозирования на основе левых значений. В частности, параметр "2" может быть немного изменен.
copy
left
left
copy
left
copy
Условие на этапе 1314 означает то, что, если i равна 0 либо меньше или равна i-2, режим прогнозирования на основе левых значений выбирается на этапе 1315. В этом случае, переменная PredMode задается равной 0, и переменная Run задается равной i на идентичном этапе 1315. С другой стороны, если i отличается от 0 и строго выше i-2, режим "с копированием вверх" выбирается на этапе 1316. В этом случае, переменная PredMode задается равной 1, а переменная Run равной i-1 на этапе 1316.
Затем таблицы, содержащие Pred_mode и Run в кодере, обновляются с текущим значением Predmode и Run, на этапе 1317. Затем следующая позиция для рассмотрения в блоке пикселов вычисляется на этапе 1318, которая соответствует текущей позиции i, постепенно увеличенной на "значение Run+1". Затем на этапе 1319 выполняется проверка, чтобы определять то, обработаны или нет последние пикселы единицы кодирования. Если это имеет место, процесс завершается на этапе 1320, в противном случае оценка двух режимов прогнозирования "с прогнозированием влево" и "с копированием вверх" оценивается с началом на этапах 1303 и 1309 для следующей пиксельной позиции, чтобы получать новый набор элементов синтаксиса.
В конце этого процесса, кодер знает уровни для каждой выборки единицы кодирования и имеет возможность кодировать соответствующий синтаксис блока уровней на основе контента трех таблиц Pred_mode[], Block[] и Run[].
Как описано выше, палитровый режим, спроектированный в настоящее время в HEVC RExt, требует передачи палитры для каждой единицы кодирования. Это представляет большой объем данных в потоке битов и в силу этого затраты на кодирование. Авторы изобретения предусматривают улучшение палитрового режима, чтобы повышать его эффективность кодирования.
Согласно одному аспекту изобретения, текущая палитра для текущей единицы кодирования прогнозируется с использованием предиктора палитры. В разновидности относительно изобретения, текущая палитра прогнозируется из записей двух или более палитр, причем две или более палитр представляют собой палитры, ранее используемые для того, чтобы обрабатывать блоки пикселов, например, с использованием предиктора палитры, скомпонованного из двух или более палитр. Это позволяет уменьшать объем информации, которая должна передаваться, для каждой палитры, ассоциированной с единицей кодирования. Ниже описываются различные варианты осуществления.
Поскольку подход изобретения основан на прогнозировании, получение предиктора для текущей единицы кодирования сначала описано со ссылкой на фиг. 14-18, 22 и 24-26, и затем элементы синтаксиса, чтобы фактически описывать прогнозирование в декодер, описываются со ссылкой на фиг. 19-22 и 27.
Общие этапы реализации изобретения процесса декодирования показаны на фиг 14, который основан на фиг. 7, описанном выше. Специалисты в данной области техники должны непосредственно понимать соответствующие операции в кодере, чтобы надлежащим образом компоновать поток битов. Блоки 14xx на фиг. 14 являются аналогичными блокам 7xx на фиг. 7. Как показано на чертеже, основная идея изобретения реализуется на этапе 1406, на котором палитра, по меньшей мере, частично прогнозируется из предиктора 1416 палитры вместо полного декодирования из потока битов. Ниже описываются несколько способов получения 1415 предиктора палитры, включающие в себя получение:
- палитры, используемой для того, чтобы прогнозировать ранее обработанный блок пикселов или единицы кодирования;
- опорного предиктора палитры, ассоциированного с объектом кодирования, который включает в себя текущую единицу кодирования;
- записей, соответствующих значениям пикселов, соседних с текущей единицей кодирования; и
- по меньшей мере, одной записи текущей палитры, которая предшествует текущей записи, которая должна прогнозироваться в текущей палитре.
Согласно первым вариантам осуществления, чтобы получать предиктор палитры, блоки пикселов изображения обрабатываются согласно предварительно заданному порядку сканирования, как описано выше со ссылкой на фиг. 5, на котором CU CTB кодируются/декодируются согласно порядку сканирования. Предиктор палитры для текущего блока пикселов затем выбирается из набора палитр, используемых для того, чтобы прогнозировать ранее обработанные блоки пикселов. Предпочтительно, предиктор палитры для текущего блока пикселов представляет собой палитру, используемую для обработанного в прошлый раз блока пикселов. Это может реализовываться посредством сохранения используемой в прошлый раз палитры декодирования (для последней обработанной единицы кодирования) в запоминающем устройстве. Конечно, другая палитра из числа уже используемых палитр может выбираться в качестве предиктора палитры, в этом случае идентификатор такой выбранной палитры должен предоставляться в декодер.
Согласно используемому порядку сканирования, в общем, следует отметить, что используемая в прошлый раз палитра, и в силу этого предиктор палитры, представляет собой одну из палитр, используемых для ранее обработанных единиц кодирования, которые являются смежными с текущей единицей кодирования. Это обеспечивает то, что высокая избыточность между единицами кодирования учитывается для того, чтобы получать эффективное кодирование. Например, на основе фиг. 5, предиктор палитры может быть одной из палитр, используемых для того, чтобы обрабатывать левые или верхние единицы 15, 17, 12 и 13 кодирования.
Чтобы не допускать плохого палитрового прогнозирования вследствие предиктора палитры, который имеет контент, далекий от фактического контента текущей единицы кодирования, конкретные варианты осуществления предоставляют сброс используемой в прошлый раз палитры (или набора ранее используемых палитр). Такой сброс может возникать в каждом новом CTB, т.е. когда текущая единица кодирования начинает новый объект кодирования, состоящий из блоков пикселов, либо в каждой новой линии или строке CTB, как представлено выше, либо даже в каждом новом кадре.
Такой сброс также позволяет кодеру или декодеру оценивать палитровый режим для каждого CTB (или строка CTB или кадра) параллельно. Тем не менее, поскольку некоторые корреляции зачастую существуют между единицами кодирования 2 CTB, сброс предпочтительно выполняется для каждой новой строки CTB. Это проиллюстрировано с использованием фиг. 14a, который показывает кадр с несколькими CTB (представленными посредством квадрата). CTB в левой части жирными линиями представляют собой CTB, для которых используемая в прошлый раз палитра сбрасывается, поскольку каждый из них начинает новую линию CTB.
Сброс в первом CTB линии является более эффективным подходом, чем сброс на уровне кадра. Это обусловлено тем, что CTB кодируются в горизонтальном порядке растрового сканирования, и в силу этого для первого CTB из линии CTB, используемая в прошлый раз палитра потенциально прогнозируется из пространственно далекого CTB (последнего из CTB-линии сразу выше). С учетом пространственного расстояния между CTB, корреляция между ними является очень низкой, и в силу этого зависимость (прогнозирование) между их соответствующими палитрами нецелесообразна.
Сброс используемой в прошлый раз палитры может означать, что палитра недоступна в качестве предиктора палитры для того, чтобы возможно прогнозировать текущую палитру. В этом случае, текущая палитра, например, палитра самой первой единицы кодирования, обработанной в первом CTB линии, не может прогнозироваться. Этот сброс может выполняться посредством задания переменной Previous_Palette_size (сохраняющей размер используемой в прошлый раз палитры) равной 0.
Помимо этого, сброс используемой в прошлый раз палитры также существенно увеличивает глобальные затраты на кодирование палитрового режима, поскольку значение не может прогнозироваться, за счет этого смещаясь к меньшим размерам палитр и, следовательно, к меньшим и менее эффективным предикторам палитр. Это обусловлено тем, что новые элементы в блоке могут быть многократно использованы посредством других блоков, следовательно, фактически обобщая биты, расходуемые для первого блока. Стандартное решение должно заключаться в использовании алгоритмов динамического программирования, таких как Витерби, в которых решение по кодированию для блока выбирается только после того, как несколько блоков декодированы. Тем не менее, это является слишком сложным, и предпочитаются простые решения.
Таим образом, это повышение затрат на кодирование может заставлять модуль выбора режима кодирования (см. этап 106) выбирать его более редко и не сразу после сброса (в силу этого с задержкой). Тем не менее, стоит выбирать палитровый режим для кодирования единиц кодирования. С этой целью, варианты осуществления обеспечивают повышение вероятности того, что палитровый режим выбирается посредством манипуляций по битовым затратам на кодирование первого кодирования единицы кодирования после того, как возникает сброс (т.е. с пустым предиктором или предиктором палитры по умолчанию). Это служит для того, чтобы иметь битовые затраты на кодирование ниже, чем требуется, за счет этого повышая вероятность того, что палитровый режим выбирается.
Ложная информация относительно битов, используемых для кодирования, может предоставляться, чтобы искусственно получать это снижение битовых затрат на кодирование. Эта ложь или информация по манипуляции, или "бонус" для цветового компонента может зависеть от рабочей точки кодека (т.е. того, какое улучшение по искажению должен обеспечивать бит), от формата сигнала цветности, по меньшей мере, от одного связанного цветового компонента и/или числа элементов в палитре для текущей единицы кодирования.
Например, может рассматриваться случай палитры RGB- или YUV-элементов, причем каждый компонент R/G/B/Y/U/V имеет, например, 8-битовые компоненты. Следовательно, битовые затраты, получающиеся в результате кодирования одной записи палитры, используемой для первой единицы кодирования после сброса палитры, нормально составляют 3x8=24 бита. Тем не менее, в вариантах осуществления, поясненных здесь, бонус может применяться, чтобы корректировать эти битовые затраты, например, посредством искусственного снижения их только до 8 битов. Таким образом, палитровый режим с большей вероятностью должен выбираться на этапе 106.
В конкретных вариантах осуществления, в которых два или более уровней необходимы для того, чтобы представлять пиксел (например, один уровень для компонента Y и один уровень для пары компонентов U и V), две или более палитр фактически используются для того, чтобы кодировать блок пикселов. Бонус может применяться к каждой из двух или более палитр. Например, если предоставляются две палитры, одна для компонента Y и другая для компонента U+V, бонус может состоять в модификации битовых затрат одного Y-элемента с 8 битов до 4 битов и битовых затрат одного U+V-элемента с 16 битов до 6 битов.
Поскольку может иметь смысл прогнозирование палитры для единицы кодирования, обработанной первой, разновидность включает в себя замену используемой в прошлый раз палитры посредством палитры по умолчанию, так что палитра по умолчанию используется в качестве предиктора палитры для первой единицы кодирования линии CTB. Различные способы формировать палитру по умолчанию (кодер и декодер работают аналогичным образом) могут рассматриваться. В качестве примера, палитра по умолчанию может включать в себя набор предварительно определенных записей, соответствующих значениям цвета, равномерно распределенным по цветовому пространству. Равнораспределение может относиться к трем цветовым компонентам. Тем не менее, в предпочтительном варианте осуществления, значения цвета могут иметь равномерное распределение по Y-компоненту. Кроме того, значения U- и V-компонентов являются фиксированными, например, равными среднему значению U- или V-компонентов в цветовом пространстве. U- и V-значения могут быть непосредственно вычислены из битовой глубины компонентов посредством назначения значения bit-depth/2 или bit-depth>>1, при этом ">>" является оператором сдвига вправо. Пример распределения вдоль Y-компонента представляет собой следующую формулу:
YLevel=(Level*bit-depth)/Previous_Palette_size,
где Level соответствует индексу записи таблицы по умолчанию, как пояснено выше (и в силу этого постепенно увеличивается на единицу в каждом новом значении Y), bit-depth является битовой глубиной Y-компонента. Следует отметить, что Previous_Palette_size может быть равен используемой в прошлый раз палитре или среднему Palette_size, вычисленному из последнего декодированного CTB либо линии CTB или кадра, или предварительно заданному числу, к примеру, 4.
Согласно другим вариантам осуществления, чтобы получать предиктор палитры, опорные предикторы палитр ассоциированы с соответствующими объектами кодирования единиц кодирования, которые формируют изображение, такими как CTB, линии CTB, серий последовательных макроблоков, сегмент серии последовательных макроблоков, мозаичный фрагмент, кадр или последовательность. Кроме того, предиктор палитры для текущего блока пикселов представляет собой опорный предиктор палитры, ассоциированный с объектом кодирования, который включает в себя текущий блок пикселов. Эти варианты осуществления могут требовать передачи опорного предиктора палитры в потоке битов для каждого объекта кодирования.
Фиг. 15 иллюстрирует процесс декодирования на основе опорных предикторов палитр, передаваемых в потоке битов. Этот чертеж основан на фиг. 14, и в силу этого блоки 1501-1514 являются аналогичными блокам 1401-1414, за исключением того, что модуль 1506 компонует палитру с использованием опорного предиктора 1516 палитры, декодированного из потока битов. Конечно, соответствующий процесс выполняется в кодере, чтобы включать опорный предиктор палитры в поток битов.
В начале декодирования CTB (либо декодирования CTB-линии, серии последовательных макроблоков, кадра и т.д.), опорный предиктор 1516 палитры извлекается из потока битов на этапе 1515. Следует отметить, что использование опорного предиктора палитры может приводить к отсутствию предоставления палитры в потоке битов для любой единицы кодирования текущего CTB объекта кодирования. В этом случае, один флаг может предоставляться в потоке битов и за счет этого извлекаться из него, чтобы передавать в служебных сигналах не декодировать любую палитру для единиц кодирования. В разновидности, этот флаг может быть заменен посредством использования значения 0 для Palette_size, чтобы указывать декодеру то, что палитра не должна декодироваться для текущей единицы кодирования. Эта разновидность требует, чтобы Palette_size был равен decodedSize вместо decodedSize+1 на вышеприведенном этапе 1003. Чтобы сокращать число битов, используемых для передачи в служебных сигналах использования опорного предиктора палитры, опорный предиктор палитры может передаваться в конце CTB, если, по меньшей мере, одна CU текущего CTB кодируется с использованием режима палитрового кодирования.
В любом случае, опорный предиктор палитры извлекается и декодируется при необходимости декодировать одну из единиц кодирования текущего CTB. Модуль 1502 извлекает режим прогнозирования. Если он не представляет собой не палитровый режим (тест 1503), декодер декодирует CU с соответствующим режимом 1517. В противном случае (палитровый режим), палитра для текущей единицы кодирования декодируется, как показано на фиг 7. Тем не менее, компоновка 1506 палитры 1507 в этом варианте осуществления зависит от опорного предиктора 1516 палитры. Ниже описываются примеры этой зависимости и соответствующих элементов 1505 синтаксиса.
Когда единица кодирования декодируется (1517, 1520), как описано выше для фиг. 7 и 13, декодер проверяет то, является она или нет последней единицей кодирования CTB, на этапе 1518. Следует отметить, что этот чертеж не содержит декодирование полного синтаксиса CTB, который может заключать в себе другие элементы синтаксиса. Если она не является последней единицей кодирования, режим прогнозирования для следующей CU извлекается на этапе 1502. Если она является последней единицей кодирования, выполняются оставшиеся процессы, чтобы полностью декодировать CTB (не показаны), и декодер проверяет то, является этот CTB или нет последним CTB кадра, на этапе 1519. Если он не является последним CTB, опорный предиктор палитры для следующего CTB извлекается из потока битов на этапе 1515, описанном выше. Конечно, этот чертеж не является полным, и несколько этапов декодирования, которые не относятся к настоящему изобретению, опущены.
Как описано выше, передаваемый опорный предиктор палитры используется в качестве предиктора палитры, используемой для каждой единицы CU кодирования в текущем CTB. Как описано ниже, опорный предиктор палитры может использоваться для того, чтобы прогнозировать элементы палитры, или, в разновидности, опорный предиктор палитры может использоваться в качестве палитры для текущей единицы кодирования. В этом случае, опорный предиктор 1516 палитры непосредственно передается в модуль 1509, в силу этого приводя к тому, что модуль 1507 более не требуется.
Выбор опорного предиктора палитры в кодере может способствовать эффективности кодирования. Несколько алгоритмов могут использоваться для того, чтобы определять "наилучший" опорный предиктор палитры. Например, палитра, используемая для того, чтобы прогнозировать наибольшую единицу кодирования в текущем CTB, может выбираться в качестве опорного предиктора палитры для CTB. В другом примере, палитра, которая минимизирует критерий искажения в зависимости от скорости передачи, из палитр, используемых для того, чтобы прогнозировать все единицы кодирования, составляющие текущий CTB, может определяться и использоваться в качестве опорного предиктора палитры для CTB. Конечно, могут использоваться другие критерии выбора.
Согласно еще одному другому варианту осуществления, чтобы получать предиктор палитры, предиктор палитры для текущей единицы кодирования включает в себя записи, соответствующие значениям пикселов, соседних с текущей единицей кодирования. В этих вариантах осуществления, предиктор палитры для текущей CU извлекается из соседних пикселов, как показано в качестве примера на фиг. 16.
В этом примере, выбранные пикселы представляют собой пикселы, смежные с верхней и левой сторонами текущего блока пикселов, поскольку они принадлежат причинно-следственной области, как задано выше со ссылкой на фиг. 3. Эти смежные пикселы показаны серым цветом на чертеже. В частности, выбранные пикселы составляют фиксированное число, например, три пиксела (темно-серые пикселы 1601-1603 на чертеже), идентичные пикселам, используемым для режима внутреннего прогнозирования, а именно, пикселы, которые являются, относительно смежной текущей единицы кодирования, левым верхним, правым верхним и левым нижним. Конечно, может рассматриваться другое число пикселов. Предпочтительно, релевантные пикселы для выбора известны посредством как кодера, так и декодера, так что дополнительная служебная информация не требуется. Тем не менее, некоторые варианты осуществления могут предполагать выбор конкретных пикселов в кодере и затем передачу в служебных сигналах, в потоке битов, числа выбранных пикселов и самих выбранных пикселов.
В одном варианте осуществления, рассматривается ограниченный набор соседних пикселов. Например, этот набор пикселов выбирается, чтобы пикселы имели наибольшее пространственное расстояние. Это создает разнесение и не допускает дублированных пикселов.
Фиг. 17 иллюстрирует формирование предиктора палитры для текущей единицы кодирования, на основе соседних пикселов. Как отмечено выше, порядок элементов в предикторе палитры является важным. Это требует определения классов для элементов палитры (здесь соседних пикселов). Этот процесс определения может выполняться как в кодере, так и в декодере.
В одном варианте осуществления, соседние пикселы 1701 классифицируются 1702. Следует отметить, что соседние пикселы могут включать в себя пикселы, которые не являются непосредственно смежными с текущей единицей кодирования. Каждый соседний пиксел рассматриваемого набора соседних пикселов ассоциирован с классом (так с индексом записи) в зависимости от его цветного расстояния от уже существующих записей в предикторе палитры, например, с использованием критериев этапа 1207 на фиг. 12. В варианте осуществления, классы задаются посредством трех пикселов 1601-1603, показанных на фиг. 16. Это приводит к неупорядоченному предиктору 1703 палитры. Помимо этого, во время классификации 1702, вхождения 1704 каждого класса подсчитываются.
На основе неупорядоченного предиктора 1703 палитры и вхождений 1704, предиктор палитры 1706 с упорядоченными записями компонуется на этапе 1705, например, при наличии сначала самых частых записей. Следует отметить, что записи, имеющие незначительные вхождения (например, ниже порогового значения), могут отбрасываться из предиктора палитры.
В варианте осуществления, два пиксела идентичного класса имеют совершенно идентичное пиксельное значение (критерий, используемый для классификации, в силу этого не заключает в себе абсолютное значение и требует порогового значения TH, заданного равным нулю). Следует отметить, что в изображениях, рассматриваемых посредством HEVC RExt (и в силу этого посредством палитрового режима), которые включают в себя текст или снимки экрана, в смежных единицах кодирования существует небольшое число различных значений. Таким образом, классификация пикселов на основе идентификатора пиксельных значений является релевантной.
Фиг. 18 иллюстрирует пример классификации. 1801 показывает текущую единицу кодирования со смежными пикселами, которые имеют любое из первого пиксельного значения (представленного посредством класса 1) или второго пиксельного значения (представленного посредством класса 2), или третьего пиксельного значения (представленного посредством класса 3). Набор соседних пикселов представлен со своими связанными классами в таблице 1802. Таблица 1802 представляет вхождения, ассоциированные с каждым классом. Предиктор палитры, который компонуется из таблицы 1802, показан в таблице 1803, посредством упорядочения классов согласно их вхождениям и удаления незначимых записей предиктора (здесь записи, соответствующей классу T вследствие низкого числа вхождений, а именно, 2 в примере). Чтобы удалять запись предиктора, алгоритм может принимать во внимание число соседних пикселов, число классов и/или вхождения наиболее вероятных соседних пикселов.
Согласно еще одному другому варианту осуществления, чтобы получать предиктор палитры, текущая палитра имеет упорядоченные записи, и прогнозирование текущей палитры с использованием предиктора палитры содержит прогнозирование записи текущей палитры из предыдущей записи идентичной текущей палитры. Другими словами, предиктор палитры при обработке данной записи палитры состоит (включает в себя) из записей, которые находятся до данной записи в текущей компонуемой цветовой палитре. Таким образом, текущая палитра внутренне прогнозируется.
Это проиллюстрировано посредством фиг. 22, который показывает процесс декодирования, чтобы получать прогнозную палитру на основе передачи служебных сигналов в потоке битов в надлежащих случаях. Фиг. 22 воспроизводит только часть, соответствующую левой верхней части по фиг. 10, т.е. формирование прогнозной палитры. Оставшаяся часть по фиг. 10 в силу этого должна выполняться, чтобы получать элементы синтаксиса, задающие предиктор 91 блока.
Как показано, Palette_size декодируется и вычисляется на этапах 2201 и 2202. Затем, первый элемент палитры декодируется. Поскольку палитра внутренне прогнозируется, первый элемент палитры не прогнозируется и в силу этого непосредственно декодируется из потока битов. Затем переменная i, предоставленная для того, чтобы последовательно рассматривать каждую запись палитры, задается равной 1 на этапе 2204. Другие элементы палитры декодируются посредством следующих этапов. В частности, для каждого элемента палитры, флаг, а именно, Use_Pred, декодируется на этапе 2206, чтобы определять то, использует или нет (тест 2207) элемент палитры в индексе i внутреннее прогнозирование. Если он не использует внутреннее прогнозирование, элемент палитры декодируется непосредственно из потока битов на этапе 2208. В противном случае, индекс j, соответствующий индексу предиктора элемента палитры в текущей палитре, декодируется из потока битов на этапе 2210. Следует отметить, что кодер может кодировать индекс j относительно индекса i, чтобы сокращать число битов, и в этом случае декодер работает обратным способом. Затем остаток декодируется на этапе 2211, и элемент Pal[i] палитры задается равным Res[i]+Pal[i] и добавляется в палитру на этапе 2212. Затем индекс i постепенно увеличивается на единицу на этапе 2209, чтобы рассматривать следующий элемент палитры. После того, как все элементы палитры декодированы (тест 2205), процесс продолжается на этапе 1008 по фиг. 10.
В одном варианте осуществления, предиктор элемента для элемента i палитры представляет собой элемент палитры i-1, т.е. запись палитры, непосредственно предшествующую текущему элементу палитры в текущей палитре. В таком случае, модуль 2210 может опускаться, и элемент Pal[i] палитры задается равным Res[i]+Pal [i-1], когда он прогнозируется. В одном варианте осуществления, все записи палитры, кроме первой, прогнозируются из элемента палитры, непосредственно предшествующего им в текущей палитре. В таком случае, флаг Use_pred может опускаться, поскольку декодер знает то, как получать/декодировать элементы палитры с использованием внутреннего прогнозирования. Это означает то, что модули 2206 и 2208 могут опускаться.
Чтобы повышать эффективность кодирования внутреннего прогнозирования элемента палитры, элемент палитры может упорядочиваться согласно их значениям, а не вхождениям в кодере.
Согласно еще одному другому варианту осуществления, текущая палитра прогнозируется из записей двух или более палитр. Это означает то, что предиктор палитры может компоноваться из двух или более палитр. В частности, две или более палитр могут быть частично или полностью объединены, чтобы формировать новый предиктор палитры для текущей палитры.
Это обусловлено тем, что механизмы прогнозирования, как представлено выше, могут основываться на одной выбранной палитре, в качестве предиктора палитры, например, из набора палитр, используемых для того, чтобы прогнозировать ранее обработанные блоки пикселов. Это может оказывать влияние на качество предиктора палитры. Например, если из числа последовательных блоков B1, B2 и B3 пикселов, блоки B1 и B3 состоят из большого числа различных пикселов, но B2 состоит из небольшого числа различных пикселов, факт использования непосредственно предыдущей палитры в качестве предиктора палитры для следующей палитры приводит к использованию палитры B2 (которая имеет небольшое число элементов палитры) в качестве предиктора палитры для B3. Но это должно радикально уменьшать элементов в предикторе палитры для B3 и в силу этого способность эффективно прогнозировать палитру для B3.
Авторы изобретения выявили, что стоит комбинировать две или более палитр для того, чтобы компоновать новую палитру для того, чтобы обрабатывать новый блок пикселов.
Фиг. 24 является блок-схемой последовательности операций способа, иллюстрирующей общие этапы для компоновки предиктора палитры из двух или более уже существующих палитр. Существующие палитры могут включать в себя всю или часть текущей палитры, последние предикторы палитр (включающие в себя опорные предикторы палитр), пространственно или временно соседние палитры и палитру по умолчанию (например, содержащую элементы палитры по умолчанию, такие как элементы, компоненты которых равны 0).
0
P-1
MAX
k
k
0
P-1
i
В процессе по фиг. 24, P представляет число уже существующих принимаемых во внимание палитр; pal,,..., pal являются соответствующими палитрами; pred является предиктором палитры, сформированным посредством процесса, причем N является максимальным числом элементов палитры; J, k[0; P], является числом элементов в палитре pal; i является переменной, представляющей счетчик палитр для того, чтобы последовательно рассматривать каждую из P палитр pal,,..., pal; n является переменной, представляющей текущее число элементов палитры в компонуемом предикторе pred палитры; и j является переменной, представляющей счетчик элементов палитры для того, чтобы последовательно рассматривать каждый элемент палитры для текущей палитры pal.
0
P-1
Палитры pal,,..., pal могут упорядочиваться, например, таким образом, чтобы сначала обрабатывать последние палитры, например, с низкими индексами. Это служит для того, чтобы добавлять более свежие элементы максимально близко к началу в предикторе палитры.
i
Процесс начинается на этапе 2400 посредством инициализации первой палитры для рассмотрения (i=0) и текущий элемент предиктора в предикторе pred палитры, который должен компоноваться (n=0). Процесс затем переходит к контурам для того, чтобы последовательно рассматривать каждую палитру pal.
i
На этапе 2401, счетчик j элементов палитры инициализируется равным 0, чтобы рассматривать первый элемент палитры для текущей палитры pal.
i
i
На этапе 2402, проверяется то, удовлетворяет или нет текущий элемент pal[j] палитры для текущей палитры pal конкретному критерию для того, чтобы инициировать или нет добавление этого элемента палитры в предиктор pred палитры.
i
i
i
i
Критерий инициирования может просто основываться на сравнении pal[j] с элементами, уже добавленными в предиктор pred палитры (т.е. pred[0,..., pred[n-1]), чтобы решать выполнять добавление текущего элемента палитры в pred, если pal[j] отличается от pred[0],..., pred[n-1], и решать не добавлять текущий элемент палитры в pred, если pal[j] является идентичным одному элементу pred. Следует отметить, что сравнение между двумя элементами pal[j] и pred[k] может быть строгим сравнением или строгим подобием (строгим равенством между их компонентами) либо нестрогим сравнением/подобием (разности между соответствующими компонентами элементов ниже соответствующих пороговых значений). В разновидности, только конкретное число n элементов pred[k] может вовлекаться в сравнение, причем точное количество зависит от значения n. Это обусловлено тем, что число сравнений может быстро увеличиваться. Это, с использованием, например, n/2 или самое большее 4 элементов, вовлекаемых в сравнение, может быть хорошим компромиссом между эффективностью и сложностью кодирования.
Тем не менее, могут вовлекаться другие критерии инициирования, такие как битовая карта флагов Use_pred, как описано ниже со ссылкой на фиг. 19-21. Эти флаги Use_pred формируются посредством кодера для того, чтобы передавать в служебных сигналах то, какие значения могут быть многократно использованы в качестве значения в текущей палитре, например, посредством сравнения по одной каждой из записей палитры с записями предиктора палитры. В частности, этот подход преимущественно позволяет не передавать явно или не дублировать элементы палитры. Число флагов зависит от размеров предиктора палитры и того, как элементы передаются в служебных сигналах.
i
Результат этапа 2402 заключается в том, что принимается решение в отношении того, следует или нет добавлять текущий элемент pal[j] палитры в предиктор pred палитры.
Если принято решение не добавлять его, процесс переходит к этапу 2405.
i
Если принято решение добавлять его, процесс переходит к этапу 2403, на котором текущий элемент pred[n] предиктора задается равным текущему элементу pal[j] палитры. Следующий элемент предиктора в pred затем выбирается посредством постепенного увеличения n.
Затем, этап 2404 состоит в проверке того, определено или нет максимальное число элементов предиктора pred. Если оно не определено, процесс переходит к этапу 2405. В противном случае, предиктор pred палитры полностью определяется, и процесс завершается на этапе 2409.
i
На этапе 2405, следующий элемент в текущей палитре pal выбирается посредством постепенного увеличения счетчика j элементов палитры.
i
i
i
i
0
P-1
На этапе 2406, проверяется то, рассмотрены и обработаны или нет все элементы палитры для текущей палитры pal: j<J. Если нет, процесс циклически возвращается к этапу 2402, чтобы обрабатывать следующий элемент pal[j] палитры. Если все текущая палитра pal обработана, процесс переходит к этапу 2407, на котором счетчик i палитр постепенно увеличивается, чтобы рассматривать следующую палитру, если все палитры pal,,..., pal еще не обработаны (проверка на этапе 2408).
0
P-1
Если все палитры pal,,..., pal обработаны, процесс завершается на этапе 2409.
Следует отметить, что вышеописанные различные варианты осуществления для того, чтобы получать предиктор палитры, могут быть частично или полностью комбинированы, чтобы предоставлять несколько базисов для прогнозирования всех или некоторых элементов палитры.
Обращаясь теперь к элементам синтаксиса, чтобы фактически описывать палитровое прогнозирование для декодера, теперь следует обратиться фиг. 19-21, хотя фиг. 22, описанный выше, уже вводит механизм, чтобы задавать палитровое прогнозирование. Предиктор палитры считается извлеченным, и его размер (Predictor_of_palette_size) известен.
Согласно вариантам осуществления относительно элементов синтаксиса, прогнозирование текущей палитры с использованием предиктора палитры содержит получение битовой карты флагов, каждый из которых задает то, выбирается или нет соответствующая запись в предикторе палитры в качестве записи текущей палитры. Как результат, в дополнение к информации, позволяющей декодеру извлекать надлежащий предиктор палитры, только битовая карта должна отправляться в декодер. Эта битовая карта может отправляться при замене палитры, как задано в HEVC RExt, для текущей единицы кодирования.
Синтаксис битовой карты содержит M флагов, причем M равно числу элементов в предикторе палитры. I-ый декодированный флаг задает то, используется или нет элемент i из предиктора палитры для того, чтобы заполнять (прогнозировать) текущую палитру для текущей единицы кодирования. В разновидности, битовая карта может ограничиваться меньшим числом флагов из флага, соответствующего первому элементу в предикторе палитры, до флагу, соответствующему последнему элементу, который должен использоваться в качестве предиктора элемента. Размер битовой карты указывается в потоке битов аналогично способу, в котором размер палитры указывается в потоке HEVC RExt-битов.
Например, элементы предиктора палитры, которые ассоциированы с флагом (бит), равный 1, копируются в текущей палитре в первой доступной позиции, сохраняя свой порядок.
В другом варианте осуществления, дополнительные записи добавляются в конце текущей палитры, имеющей выбранные записи из предиктора палитры. Например, сначала битовая карта декодируется из потока битов, и соответствующие записи предиктора палитры копируются в текущую палитру, затем дополнительные пикселы могут добавляться в конце текущей палитры аналогично традиционной передаче палитры.
В одном варианте осуществления, направленном на предоставление прогнозного элемента палитры в качестве дополнительного элемента палитры, определение Palette_size выполнено с возможностью увеличиваться посредством числа прогнозных элементов палитры: для этого, Palette_size задается равным "декодированный размер+число флагов", заданном равным 1 в битовой карте (Palette_pred_enable_size). Если Palette_pred_enabled_size равен 0, Palette_size задается равным "декодированный размер+1", как описано на этапе 1003.
Фиг. 19 иллюстрирует декодирование синтаксиса палитр этих вариантов осуществления на основе битовой карты флагов. Что касается фиг. 22, фиг. 19 основан на фиг. 10, но показана только часть, связанная с декодированием палитры.
Во-первых, предиктор палитры 1902 получается на этапе 1901 согласно любому из вариантов осуществления, описанных выше. Помимо этого, также получается Predictor_of_palette_size 1903. Модуль 1905 декодирует N флагов из потока 1904 битов, где N=Predictor_of_palette_size.
Для каждого флага, равного 1, соответствующий элемент из предиктора палитры добавляется в текущую палитру 1907 в первом доступном индексе, во время этапа 1906. Palette_pred_enabled_size 1908, представляющий число флагов, равных 1 в битовой карте, передается в решающий модуль 1910. Размер остатка палитры также декодируется из потока 1909 битов. Решающий модуль 1910 определяет то, равен или нет Palette_pred_enabled_size 0. Если равен 0, что означает то, что отсутствует прогнозный элемент палитры в текущей палитре, Palette_size задается равным "декодированному размеру+1" на этапе 1911, и переменная i, используемая для того, чтобы последовательно рассматривать каждую запись текущей палитры, задается равной 0 на этапе 1912. Если Palette_pred_enabled_size отличается от 0, что означает то, что существует, по меньшей мере, один прогнозный элемент палитры в текущей палитре, Palette_size задается равным "декодированному размеру+Palette_pred_enabled_size" на этапе 1913, и переменная i задается равной Palette_pred_enabled_size. Затем, контур декодирования элементов палитры выполняется через этапы 1915, 1916 и 1917, соответствующие этапам 1005, 1006 и 1007 по фиг. 10. Этот контур прекращается, когда переменная i равна Palette_size. Декодированные элементы 1916 палитры добавляются в конце текущей палитры 1907, т.е. после прогнозных элементов палитры. В одном варианте осуществления, Palette_size всегда задается равной "декодированному размеру+Palette_pred_enabled_size" на этапе 1913, чтобы упрощать реализацию, так что модули 1910, 1911 и 1912 могут опускаться.
Следует отметить, что значения 0 и 1 для флагов могут инвертироваться, что означает то, что flag=1 используется, когда соответствующий элемент в предикторе палитры не используется для того, чтобы прогнозировать составляемый элемент палитры (обратное для flag=0).
Это инверсия смысла значений флагов является полезной, чтобы предотвращать явление, называемое "эмуляцией начального кода": если последовательность байтов совпадает с тем, что называется начальным кодом, последовательность должна быть преобразована таким образом, чтобы задавать ее более не совпадающей с начальным кодом, и иметь уникальный начальный код посредством процесса расширения, увеличивающего размер потока битов. Посредством использования 1 вместо 0, не допускается это увеличение размера.
Фиг. 20 иллюстрирует процесс по фиг. 19 с помощью примера. Предиктор палитры, полученный с использованием любого из вариантов осуществления, описанных выше со ссылкой на фиг. 14-18, является таблицей 2001, который содержит пять элементов, ассоциирующих индекс или уровень со значениями цвета. Декодированные флаги битовой карты представлены в таблице 2002. В этом примере, два флага задаются равными 1: один для уровня 0 и один для уровня 2 предиктора палитры. Соответствующие элементы палитры в силу этого добавляются в текущую палитру 2003 с доступным первым уровнем, соответственно, уровнем 0 и уровнем 1. Затем новые записи палитры могут декодироваться из потока битов, как предложено в HEVC RExt, и добавляться в позицию 2 и 3.
Можно отметить, что, когда предиктор палитры передается, требуются только флаги (битовая карта), соответствующие предикторам палитр. Чтобы уменьшать объем передачи служебных сигналов, идентичная битовая карта может использоваться для всех единиц кодирования, принадлежащих идентичному CTB, серии последовательных макроблоков, мозаичному фрагменту, сегменту серий последовательных макроблоков, кадру или последовательности, для которой передается один опорный предиктор палитры.
i
Битовая карта флагов Use_pred задана в вышеприведенном описании со ссылкой на фиг. 19 и 20. Теперь следует снова обратиться к фиг. 24, а более конкретно, к этапу 2402, на котором используется критерий инициирования, чтобы авторизовать добавление текущего элемента pal[j] палитры в составляемый предиктор pred палитры. Как представлено выше, этот критерий инициирования может заключать в себе битовую карту флагов Use_pred.
В некоторых вариантах осуществления, составляемой предиктор палитры включает в себя записи из первой палитры, которая спрогнозирована на основе второй палитры (используемой в качестве предиктора) с использованием битовой карты флагов, как описано выше, причем каждый флаг задает то, выбирается или нет соответствующая запись во второй палитре в качестве записи для того, чтобы прогнозировать запись в первой палитре. Конкретным для этого варианта осуществления является то, что предиктор палитры компонуется посредством также включения записей второй палитры, соответствующих флагу битовой карты, который задает отсутствие выбора записи для того, чтобы прогнозировать первую палитру.
Фиг. 25 иллюстрирует примерную реализацию такого подхода.
Показаны три единицы кодирования, CU1-CU3, которые могут представлять собой последовательные единицы кодирования, обрабатываемые в текущем изображении.
Ссылка 2500 представляет палитру, используемую для того, чтобы обрабатывать (кодировать или декодировать) CU1. Эта палитра, возможно, кодирована в потоке битов (и в силу этого извлечена посредством декодера) или прогнозирована с использованием любого механизма, описанного в настоящей заявке.
С использованием механизма формирования предиктора на основе используемой в прошлый раз палитры, как описано выше, эта палитра 2500 используется в качестве предиктора палитры для компоновки палитры 2501, чтобы обрабатывать CU2. Прогнозирование палитры 2501 основано на битовой карте 2506 флагов Use_pred, как описано выше. Следует напомнить, что флаги принимают значение 1 или 0 в зависимости от использования или нет, надлежащим образом соответствующего элемента для прогнозирования палитры следующей CU. В разновидности, flag=1 может означать невыбор соответствующего элемента, в то время как flag=0 может означать выбор элемента для прогнозирования палитры следующей CU.
Как результат, в настоящем примере, первый, третий, четвертый и пятый элементы предиктора 2500 палитры копируются в палитру 2501, как задано в битовой карте 2506. Второй элемент 2502 не используется многократно (flag=0 в битовой карте 2506). Следует отметить, что дополнительный элемент 2503 палитры, возможно, добавлен в конец компонуемой палитры 2501 на основе механизмов, описанных выше (например, явно передан в потоке битов).
Кроме того, палитра 2501 используется в качестве предиктора палитры для того, чтобы компоновать палитру для того, чтобы обрабатывать CU3. В примере на чертеже, все элементы палитры 2501 копируются (этап 2504) в палитру для CU3. В разновидности этого примера, битовая карта (не показана) может предоставляться, чтобы идентифицировать то, какие элементы палитры 2501 должны копироваться в палитру для CU3, аналогично битовой карте 2506, задающей элементы, которые должны копироваться в палитру 2501.
Конкретно для этого варианта осуществления изобретения, предиктор 2500 палитры также используется в качестве предиктора для компоновки палитры для того, чтобы обрабатывать CU3.
Чтобы достигать такой компоновки, предиктор 2505 палитры компонуется из палитр 2500 и 2501. Как упомянуто выше, все элементы палитры 2501 копируются (этап 2504) в предиктор 2505 палитры. В этом примере, записи предиктора 2500 палитры, соответствующие флагу битовой карты, который задает отсутствие выбора записи для того, чтобы прогнозировать палитру 2501 (т.е. обычно с flag=0, например, элемент 2502), добавляются (этап 2508) в предиктор 2505 палитры. Это обусловлено тем, что другие записи предиктора 2500 палитры уже находятся в предикторе 2505 палитры благодаря этапу 2504 копирования. Этот выбор элемента 2502 может выполняться очень быстро благодаря флагам в битовой карте 2506.
Битовая карта может предоставляться для того, чтобы прогнозировать, на основе предиктора 2505 палитры, палитру для того, чтобы обрабатывать CU3.
Конечно, предиктор 2505 палитры также может представлять собой непосредственно палитру для того, чтобы обрабатывать CU3. Тем не менее, предиктор 2505 палитры непрерывно растет, поскольку он включает в себя все элементы, заданные в предыдущих палитрах. Он растет вплоть до предела, с которого элементы предиктора палитры, более не подходящие для него, не добавляются в предиктор, несмотря на значение их флага Use_pred.
Добавление элемента 2502 предпочтительно выполняется в конце предиктора 2505 палитры. Можно непосредственно наблюдать, что результирующий предиктор палитры расширен по сравнению со случаями, описанными выше.
Одно конкретное преимущество добавления неиспользуемых элементов в конце предиктора палитры состоит в том, что элементы приблизительно упорядочиваются посредством их срока использования и уровня использования. Это приводит к наличию последних элементов в предикторе палитры, которые являются наименее полезными и с наибольшей вероятностью должны удаляться. Таким образом, может быть принято решение в отношении того, чтобы удалять некоторые элементы из составляемого предиктора палитры, например, на основе числа использований этого элемента при обработке для последних M (M является целым числом, которое должно быть задано) блоков пикселов с использованием соответствующих палитр, которые включают в себя этот элемент.
Конечно, этот процесс может быть адаптирован таким образом, чтобы помещать неиспользуемые элементы первыми в предиктор палитры или даже перемежать с некоторыми элементами из палитры 2401.
Следует отметить, что выбор неиспользуемых элементов из предыдущей палитры гарантирует то, что элементы являются уникальными, и, следовательно, флаги Use_pred не являются избыточными. За счет этого максимизируется эффективность предиктора палитры.
Вышеописанный подход изобретения, заключающий в себе компоновку предиктора палитры из двух или более палитр, оказывает влияние только на этап 1901 компоновки предиктора палитры по фиг. 19.
Фиг. 26 иллюстрирует вариант осуществления этапа 1901, чтобы компоновать предиктор палитры, к примеру, предиктор 2505, с помощью вышеописанного подхода, причем этот вариант осуществления является более конкретным, чем общие этапы, описанные выше со ссылкой на фиг. 24. Такой предиктор 2505 палитры используется для того, чтобы компоновать палитру для того, чтобы обрабатывать CU3, на основе флагов Use_pred соответствующей битовой карты (не показана).
Если обобщать этот процесс в отношении примера по фиг. 25, он состоит в копировании элементов палитры 2501 CU2, представленной посредством матрицы pal в матрицу элементов pred предиктора (этап 2504). Pred является временным буфером, используемым для того, чтобы копировать элементы из матрицы pal палитры. В конце процесса, pred является предиктором палитры.
Помимо этого, возможные элементы заполнения (к примеру, 2502) добавляются в pred, дополнительно в уже скопированные элементы.
MAX
MAX
MAX
Структура pred содержит максимум N элементов. N в идеале может быть больше максимального числа элементов в палитре. Хороший компромисс между эффективностью кодирования и запоминающим устройством обнаруживается при N=64, т.е. при значении, в два раза превышающем максимальный размер палитры в примере.
cur
Pal является структурой, содержащей N элементов, выделенные сохранению последней используемой палитры, т.е. палитра 2501 в примере по фиг. 25.
last
Last является структурой, содержащей N элементов, выделенные сохранению предыдущей палитры или предиктора, например, предиктора палитры используемой в прошлый раз палитры, т.е. предиктора 2500 палитры в примере по фиг. 25. Соответствующие флаги Use_pred также сохранены в запоминающем устройстве, например, в так называемой матрице Use_pred.
Следует отметить, что pal является последней используемой палитрой, в то время как last является предиктором палитры для этой последней используемой палитры.
Этап 2600 инициализирует копию pal в pred: первый элемент каждой структуры выбирается посредством задания счетчика i контуров равным 0. Затем контур копии начинается на этапе 2601: текущий элемент pred задается равным этому из pred. Затем этап 2602 позволяет выбирать следующий элемент pal посредством постепенного увеличения счетчика i контуров.
MAX
cur
Этап 2603 затем проверяет то, достигнут или нет последний элемент либо составляемого предиктора палитры pred, либо палитры pal (при условии Nдля pred и N для pal).
Если последний элемент не достигнут, процесс циклически возвращается к этапу 2601, чтобы копировать следующий элемент. В противном случае, процесс переходит к этапу 2604.
Доля другой палитры, здесь предыдущей палитры 2500, в компоновке предиктора 2505 палитры согласно этому варианту осуществления изобретения получается в результате следующих этапов 2604-2608.
Эти этапы обеспечивают операцию заполнения, указанную ссылкой с номером 2508 на фиг. 25. Они предоставляют дополнительные элементы в pred в дополнение к элементам, получающимся в результате копии предшествующей палитры pal.
Этап 2604 выбирает первый элемент предыдущей палитры last посредством инициализации счетчика j контуров равным 0.
Затем осуществляется этап 2605, на котором проверяется то, достигнут или нет последний элемент pred или last.
Если нет, процесс продолжается на этапе 2606. В противном случае, процесс завершается на этапе 2609.
Этап 2606 состоит в проверке того, уже многократно использован или нет текущий элемент j в last. Аналогично вышеприведенному этапу 2402, он может состоять в проверке того, задается флаг Use_pred, ассоциированный с этим элементом в матрице Use_pred, равным 0 (не используется многократно) или 1 (используется многократно). В разновидности, он может состоять в верификации того, существует или нет уже текущий элемент в компонуемом pred.
Если не используется многократно, осуществляется этап 2607, на котором текущий элемент j добавляется из last в pred (в конце pred). Таким образом, следующий элемент pred выбирается посредством постепенного увеличения i.
В любом случае, следующий элемент в last выбирается посредством постепенного увеличения j на этапе 2608.
Когда все элементы last или pred обработаны, процесс завершается на этапе 2609.
Следует отметить, что для следующей итерации процесса по фиг. 26, структура last может обновляться, чтобы сохранять предиктор палитры для палитры, используемой для CU3 (который должна представлять собой используемую в прошлый раз палитру), т.е. посредством приема копии pred, которая сохраняет предиктор 2505 палитры для CU3. Следует отметить, что используемая в прошлый раз палитра для следующей итерации (при обработке новой единицы кодирования CU4) представляет собой палитру, скомпонованную для CU3 из предиктора 2505 палитры. Следовательно, она представляет собой палитру, скомпонованную для CU3, который должен сохраняться в pal для следующей итерации.
MAX
MAX
Как упомянуто выше, этот вариант осуществления предоставляет способ компоновать каждый новый предиктор палитры таким образом, что размер предиктора палитры имеет тенденцию непрерывно увеличиваться. Конечно, число N предоставляет предел на максимальный размер предиктора палитры. Тем не менее, N обычно выбирается довольно большим, зачастую превышающим максимальный размер палитр.
MAX
Следует напомнить, что битовая карта флагов Use_pred должна предоставляться в клиентское устройство, чтобы выполнять прогнозирование новой палитры из нового составленного предиктора палитры. Чем больше значение N, тем больше число излишних флагов Use_pred в битовой карте. Это приводит к затратам в передаче, поскольку на каждый флаг затрачивается, по меньшей мере, один бит.
MAX
cur
last
MAX
last
Способ сокращения этих излишних затрат, без дополнительных технологий, состоит в том, чтобы вычислять N в качестве комбинации N и N. Например, N может задаваться как fact*N, причем fact может зависеть от цветового формата и затрагиваемого компонента(ов). Например, fact=6 для цветового формата 4:4:4, тогда как fact=1 для сигнала яркости, и fact=2 для сигнала цветности в других форматах.
MAX
Тем не менее, обнаружено, что этот подход не является оптимальным решением, в частности, в случае варианта осуществления по фиг. 26, в котором оптимальный N определен как составляющий приблизительно 64.
Вариант осуществления, как предложено на фиг. 27 ниже, предоставляет модифицированный синтаксис для битовых карт, чтобы снижать их размер. В частности, битовая карта флагов включает в себя, по меньшей мере, один элемент в предварительно заданной позиции в битовой карте для передачи в служебных сигналах того, включает или нет битовая карта в себя, после предварительно заданной позиции, по меньшей мере, один дополнительный флаг, который задает выбор записи предиктор палитры для того, чтобы прогнозировать другую палитру.
Фиг. 27 иллюстрирует модифицированный синтаксис для флагов Use_pred, ассоциированных с предиктором палитры (например, предиктором 2505), чтобы прогнозировать палитру (например, палитру для того, чтобы обрабатывать CU3). Следует отметить, что модифицированный синтаксис может использоваться для любой битовой карты.
Битовая карта, как описано выше (т.е. без модифицированного синтаксиса), показана наверху фиг. 27. Она обычно включает в себя две части:
- часть со ссылкой с номером 2700, которая смешивает флаги, равные 0, и флаги, равные 1. Часть 2700 завершается последним флагом, заданным равным 1. Эта часть задает все элементы предиктора палитры, которые используются в прогнозной палитре; и
- часть со ссылкой с номером 2701, которая является оставшейся частью битовой карты, состоящей исключительно из флагов, заданных равными 0 и в силу этого соответствующих элементам, не используемым многократно. Следует отметить, что обычная практика заключается в том, что последняя часть битовой карты состоит исключительно из нулей, поскольку соответствующие элементы обычно являются старыми и менее используемыми.
Следует отметить, что это разбиение на две части предоставляется здесь только в качестве иллюстрации. Битовая карта 2700+2701 предоставляется, если модифицированный синтаксис согласно изобретению не реализован.
Ниже этой битовой карты показана битовая карта с модифицированным синтаксисом. Можно отметить, что ее размер радикально уменьшен.
Модифицированный синтаксис приспосабливает существование последовательных флагов 2702 в 0 посредством вставки дополнительных элементов или битов в конкретных местоположениях в последовательности флагов Use_pred.
В качестве иллюстрации, биты 2703 и 2704 добавлены, чтобы указывать то, существуют или нет другие флаги Use_pred, заданные равными 1, далее в битовой карте.
Этим дополнительным битам назначены флаги end-of-prediction, и они не предоставляют индикатор касательно того, выбирается или нет соответствующая запись в предикторе палитры в качестве записи для того, чтобы прогнозировать запись в текущей составляемой палитре. Наоборот, эти дополнительные флаги сдвигают флаги Use_pred вправо.
В качестве примера, флаги end-of-prediction могут принимать значение 0, чтобы указывать то, что существуют другие флаги, равные 1, в оставшейся части битовой карты, в то время как они могут принимать значение 1, когда отсутствует другие флаги, равные 1, в оставшейся части битовой карты.
Относительно примера 2703 и 2704, значение 0 флага 2703 указывает то, что остаются элементы для прогнозирования с использованием битовой карты, как указано посредством задания флагов равными 1 в подчасти 2705, тогда как флаг 2704 задается равным 1, поскольку больше нет прогнозированных элементов (все другие флаги Use_pred задаются равными 0).
Как следствие, тогда как флаги 2703 и 2704 добавлены, подчасть 2701 может быть полностью пропущена, хотя только подчасть 2702 пропускается в примере, за счет этого сокращая затраты на передачу.
Местоположения для дополнительных флагов end-of-prediction предпочтительно предварительно заданы в зависимости от свойств палитрового режима. Тем не менее, они должны выбираться с учетом того, что приводится ниже:
- целесообразно наличие флага end-of-prediction а ранней стадии, чтобы не допускать отправки слишком большого числа флагов Use_pred для небольших палитр; и
- целесообразно наличие флагов end-of-prediction с периодическими интервалами, в идеале со степенью 2, чтобы легко синтаксически анализировать битовую карту.
С учетом этого, вариант осуществления предоставляет предварительно заданные позиции для флагов end-of-prediction после местоположения 4-го флага Use_pred, и затем каждых восьми флагов Use_pred, начинающихся после 16-го флага Use_pred, затем после 24-го флага Use_pred и т.д.
Нижняя часть по фиг. 27 является блок-схемой последовательности операций способа, иллюстрирующей этапы для декодирования модифицированного синтаксиса битовой карты.
Этапы 2715-2717 процесса являются конкретными для модифицированного синтаксиса.
Этап 2710 инициализирует контур декодирования посредством задания счетчика i контуров равным 0 и числа j прогнозных элементов – равным 0.
MAX
Этап 2711 затем проверяет то, остались или нет элементы в предикторе палитры (i<N), поскольку может возникать такая ситуация, что предиктор является пустым (N=0), и что не осталось для флагов декодирования (палитра, имеющая максимальное число N элементов).
Если отсутствуют дополнительные элементы для обработки, процесс завершается на этапе 2718.
В противном случае, флаг Use_pred декодируется для элемента i предиктора палитры на этапе 2712.
На этапе 2713, определяется то, используется или нет элемент i для прогнозирования составляемой палитры. Например, флаг, равный 1, означает то, что используется соответствующий элемент i предиктора палитры.
В утвердительном случае, число j используемых элементов постепенно увеличивается на этапе 2714.
В любом случае, процесс продолжается на этапе 2715, вместо перехода непосредственно к этапу 2719, что должно происходить без модифицированного синтаксиса.
Этап 2715 проверяет то, присутствует или нет флаг end-of-prediction (например, 2703 или 2704) рядом с текущим i-ым флагом Use_pred. Например, проверка может быть основана на значении i (например, составляет оно 4, 16, 24,..., как предложено выше).
Если следующий флаг не является флагом end-of-prediction, нормальный процесс возобновляется посредством перехода к этапу 2719.
В противном случае, флаг end-of-prediction декодируется на этапе 2716. После того, как он декодирован, этап 2717 определяет то, указывает или нет флаг end-of-prediction конец прогнозирования, т.е. задается он или нет равным 1.
Если флаг end-of-prediction не указывает конец прогнозирования, декодирование флагов Use_pred продолжается на этапе 2719 посредством выбора следующего флага Use_pred посредством постепенного увеличения счетчика i контуров.
Если флаг end-of-prediction указывает конец прогнозирования, процесс завершается на 2718.
Результат этого процесса заключается в том, что все релевантные флаги Use_pred получены, чтобы определять то, какой элемент предиктора палитры должен использоваться для прогнозирования составляемой палитры. Следует отметить, что элементы, для которых не получен флаг Use_pred, должны считаться неиспользуемыми.
Согласно другим вариантам осуществления относительно элементов синтаксиса, прогнозирование текущей палитры с использованием предиктора палитры содержит получение, по меньшей мере, одного (возможно двух или более) остатка записи, соответствующего разности, по меньшей мере, между одной соответствующей записью текущей палитры и записью предиктора палитры. В этих вариантах осуществления, остаток между текущим элементом палитры и предиктором палитры передается в потоке битов. Остаток Res[i] равен Pal[i]-Pal_Pred[j], где Res[i] является остатком для уровня i, Pal[i] является текущим элементом палитры для уровня i, и Pal_Pred[j] является предиктором элемента, идентифицированным посредством уровня j. Следует отметить, что предиктор j палитры обычно должен передаваться, если известен посредством декодера (например, поскольку j является фиксированным относительно i, например, j=i).
Декодирование остатка для трех цветовых компонентов отличается от декодирования элемента палитры. Фактически, как упомянуто в предшествующем уровне техники, элемент палитры кодируется с фиксированной длиной в N битов, где N=3*bit-depth. Для остатка и для того, чтобы сокращать число битов, остаток каждого цветового компонента может кодироваться с помощью адаптивного кода, такого как код Голомба (аналогично коэффициентам блочного остатка).
Фиг. 21 иллюстрирует процесс декодирования на основе наличия таких остатков между элементами палитры и предикторами элементов. С другой стороны, эти данные показывают только часть, связанную с декодированием палитры. Помимо этого, чтобы упрощать чертеж, поток битов не представлен.
Декодированный размер палитры извлекается из потока битов на этапе 2101, и Palette_size задается равным "декодированному размеру+1" на этапе 2102. Переменная i, используемая для того, чтобы последовательно рассматривать каждую запись палитры, задается равной 0 на этапе 2103. Затем контур для того, чтобы декодировать палитру, начинается с теста 2104, чтобы определять то, обработаны или нет все записи палитры. Для элемента i палитры флаг, Use_pred, декодируется из потока битов на этапе 2105, чтобы определять (тест 2106) то, использует элемент i палитры прогнозирование или нет. Если элемент i палитры не использует прогнозирование, он декодируется на этапе 2107 с использованием традиционных механизмов и добавляется в палитру на уровне, равном i. Затем переменная i постепенно увеличивается на единицу на этапе 2108, чтобы рассматривать следующий элемент палитры. Если элемент i палитры использует прогнозирование, индекс j предиктора декодируется из потока битов на этапе 2112. Следует отметить, что в целях эффективности кодирования, длина кода, используемого для того, чтобы кодировать индекс j предиктора, зависит от Predictor_of_Palette_size 2110. Таким образом, параллельно, предиктор палитры 2110 получается так, как описано выше, и также получается Predictor_of_Palette_size 2011.
После того, как индекс j предиктора известен, остаток Res[i] элемента палитры также декодируется из потока битов на этапе 2113. Затем элемент Pal[i] палитры вычисляется из формулы Res[i]+Pal_Pred[j] на этапе 2114 с использованием предиктора Pal_Pred 2111 палитры. Элемент Pal[i] палитры затем добавляется в текущую палитру. Далее переменная i постепенно увеличивается на единицу на этапе 2108, чтобы рассматривать следующий элемент палитры. В конце этого процесса, текущая палитра декодирована.
В одном варианте осуществления, индекс j задается равным i, в этом случае индекс j предиктора более не должен передаваться в декодер. Следовательно, модуль 2112 может опускаться. Помимо этого, остаток может получаться для каждого элемента текущей палитры, которая имеет соответствующую запись с идентичным индексом/уровнем записи в предикторе палитры. В том случае, если i выше или равен Predictor_of_Palette_size, остаток не декодируется. Кроме того, флаг Use_pred более не требуется, поскольку декодер знает то, какие элементы палитры следует прогнозировать, на основе Predictor_of_Palette_size. Следовательно, модули 2105 и 2106 могут опускаться. Эти подходы уменьшают число служебных битов, требуемых для палитрового прогнозирования посредством удаления передачи в служебных сигналах предикторов. Это является полезным, когда элементы палитры упорядочиваются согласно их вхождениям.
В вариантах осуществления, прогнозируются только один или два цветовых компонента из трех (или более).
Выше описано несколько способов получения предиктора палитры (фиг. 14-18, 22 и 24-26) и несколько способов задания и передачи в служебных сигналах прогнозирования палитры из предиктора палитры (фиг. 19-22 и 27). Эти варианты осуществления могут комбинироваться за исключением того, что когда текущая палитра внутренне прогнозируется, может использоваться только остаточный подход (в противном случае, две записи должны быть идентичными в палитре). В предпочтительном варианте осуществления, предиктор палитры представляет собой последнюю декодированную CU со сбросом в каждой линии CTB или в каждом CTB; и предиктор палитры передается в служебных сигналах с битовой картой флага, указывающей то, должны или нет элементы предиктора палитры копироваться в текущей компонуемой палитре.
Фиг. 23 является принципиальной блок-схемой вычислительного устройства 2300 для реализации одного или более вариантов осуществления изобретения. Вычислительное устройство 2300 может представлять собой такое устройство, как микрокомпьютер, рабочая станция или легкое портативное устройство. Вычислительное устройство 2300 содержит шину связи, соединенную со следующим:
- центральный процессор 2301, такой как микропроцессор, обозначаемый CPU;
- оперативное запоминающее устройство 2302, обозначаемое как RAM, для сохранения исполняемого кода способа вариантов осуществления изобретения, а также регистров, адаптированных с возможностью записывать переменные и параметры, необходимые для реализации способа для кодирования или декодирования, по меньшей мере, части изображения согласно вариантам осуществления изобретения, причем емкость запоминающего устройства может расширяться, например, посредством необязательного RAM, подключаемого к порту расширения;
- постоянное запоминающее устройство 2303, обозначаемое как ROM, для сохранения компьютерных программ для реализации изобретения;
- сетевой интерфейс 2304 типично соединяется с сетью связи, по которой передаются или принимаются цифровые данные, которые должны обрабатываться. Сетевой интерфейс 2304 может представлять собой единственный сетевой интерфейс либо состоять из набора различных сетевых интерфейсов (например, проводных и беспроводных интерфейсов либо различных видов проводных или беспроводных интерфейсов). Пакеты данных записываются в сетевой интерфейс для передачи или считываются из сетевого интерфейса для приема под управлением приложения, выполняющегося в CPU 2301;
- пользовательский интерфейс 2305 может использоваться для приема вводов от пользователя или отображения информации пользователю;
- жесткий диск 2306, обозначаемый как HD, может предоставляться в качестве устройства хранения данных большой емкости;
- модуль 2307 ввода-вывода может использоваться для приема/отправки данных из внешних устройств, таких как видеоисточник или дисплей.
Исполняемый код может сохраняться в постоянном запоминающем устройстве 2303, на жестком диске 2306 или на съемном цифровом носителе, таком как, например, диск. Согласно разновидности, исполняемый код программ может приниматься посредством сети связи, через сетевой интерфейс 2304, чтобы сохраняться на одном из средств хранения устройства 2300 связи, таком как жесткий диск 2306, перед выполнением.
Центральный процессор 2301 выполнен с возможностью управлять и направлять выполнение инструкций или частей программного кода программы или программ согласно варианту осуществления изобретения, причем эти инструкции сохраняются на одном из вышеуказанных средств хранения. После включения питания, CPU 2301 допускает выполнение инструкций из основного оперативного запоминающего устройства 2302, связанных с приложением, после того, как эти инструкции загружены, например, из ROM 2303 для программ или с жесткого диска 2306 (HD). Такое приложение, при выполнении посредством CPU 2301, инструктирует выполнение этапов блок-схем последовательности операций способа, показанных на фиг. 14, 15, 17, 19, 21, 22 и 24-27.
Любой этап алгоритмов, показанных на фиг. 14, 15, 17, 19, 21, 22 и 24-27, может реализоваться в программном обеспечении посредством выполнения набора инструкций или программы посредством программируемой вычислительной машины, такой как PC (персональный компьютер), DSP (процессор цифровых сигналов) или микроконтроллер; либо иным образом реализовываться в аппаратных средствах посредством машины или выделенного компонента, такого как FPGA (программируемая пользователем вентильная матрица) или ASIC (специализированная интегральная схема).
Хотя настоящее изобретение описано выше в отношении конкретных вариантов осуществления, настоящее изобретение не ограничено конкретными вариантами осуществления, и для специалистов в данной области техники должны быть очевидными модификации, которые находятся в пределах объема настоящего изобретения.
Множество дополнительных модификаций и изменений предполагаются специалистами в данной области техники после прочтения вышеприведенных иллюстративных вариантов осуществления, которые приводятся только в качестве примера и которые не имеют намерение ограничивать объем изобретения, который определяется исключительно посредством прилагаемой формулы изобретения. В частности, при необходимости различные признаки из различных вариантов осуществления могут меняться местами.
В формуле изобретения, слово "содержащий" не исключает другие элементы или этапы, и неопределенный артикль "a" или "an" не исключает множество. Простой факт того, что различные признаки упомянуты во взаимно различных зависимых пунктах формулы изобретения, не означает того, что комбинация этих признаков не может быть преимущественно использована.