УЛУЧШЕННЫЙ ПРОЦЕСС КОДИРОВАНИЯ С ИСПОЛЬЗОВАНИЕМ РЕЖИМА ПАЛИТРЫ
IMPROVED ENCODING PROCESS USING PALETTE MODE

ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Настоящее изобретение относится к кодированию и декодированию видео. Более точно, настоящее изобретение относится к способам кодирования режима палитры. Режим палитры является способом кодирования, который был изначально представлен в объеме расширения диапазона HEVC и в настоящий момент рассматривается для расширения кодирования содержимого экрана HEVC. Этот способ кодирования эффективен для кодирования видео, направленного на видеопоследовательности "содержимого экрана".
УРОВЕНЬ ТЕХНИКИ
Изобретение применяется к режиму кодирования, где текущий блок пикселов кодируется с использованием блока индексов, причем последней строится из так называемой палитры.
Палитра в этом документе определена как таблица соответствия, имеющая записи, ассоциирующие индекс со значением пиксела. Обычно, но не обязательно, значение пиксела составляется значением каждого цветового компонента, ассоциированного с пикселом, в результате чего получается цветовая палитра. С другой стороны, значение пиксела может быть составлено из единственного компонента пиксела, в результате чего получается монохромная палитра.
Этот режим кодирования блока пикселов в общем случае называется режимом кодирования палитры. Предполагается задействование этого режима, например, в расширении диапазона международного стандарта высокоэффективного видеокодирования (HEVC: ISO/IEC 23008-2 MPEG-H, часть 2/ITU-T H.265). Этот режим в настоящий момент рассматривается в проекте спецификации расширения кодирования содержимого экрана (SCC) HEVC.
При кодировании изображения в видеопоследовательности изображение сначала разделяется на объекты кодирования из пикселов равного размера, называемых блоком кодового дерева (CTB). Размер блока кодового дерева обычно 64 на 64 пиксела. Затем каждый блок кодового дерева может быть разбит на иерархическое дерево из меньших блоков, размер которых может варьироваться и которые являются фактическими блоками пикселов для кодирования. Эти меньшие блоки для кодирования называются единицей кодирования (CU).
Кодирование конкретной единицы кодирования обычно является предсказательным. Это означает, что сначала определяется предсказательный блок. Далее вычисляется разница между предсказательным блоком и единицей кодирования. Эта разница называется остатком или остаточным блоком. Далее этот остаток сжимается. Фактическая закодированная информация единицы кодирования состоит из некоторой информации для указания способа определения предсказательного блока и сжатого остатка. Лучшие предсказательные блоки являются блоками, максимально подобными единице кодирования, для того чтобы получить маленький остаток, который может быть эффективно сжат.
Режим кодирования определен на основе способа, используемого для определения предсказательного блока для способа кодирования с предсказанием единицы кодирования.
Первый режим кодирования называется внутренним режимом. Согласно внутреннему режиму, предсказательный блок строится на основе значения пикселов, непосредственно окружающих единицу кодирования внутри текущего изображения. Следует отметить, что предсказательный блок является блоком не текущего изображения, а конструкции. Направление используется для определения, какие пикселы границы фактически используются для построения предсказательного блока и как они используются. Идея внутреннего режима в том, что ввиду общей связности естественных изображений пикселы, непосредственно окружающие единицу кодирования, с высокой вероятностью будут подобны пикселам текущей единицы кодирования. Таким образом, существует возможность получить хорошее предсказание значения пикселов единицы кодирования с использованием предсказательного блока на основе этих окружающих пикселов.
Второй режим кодирования называется промежуточным режимом. Согласно промежуточному режиму, предсказательный блок является блоком другого изображения. Идея промежуточного режима в том, что последовательные изображения в последовательности в общем случае очень подобны. Главное различие обычно возникает из движения между этими изображениями ввиду прокрутки камеры или ввиду перемещающихся объектов в сцене. Предсказательный блок определяется вектором, дающим свое местоположение в опорном изображении относительно местоположения единицы кодирования внутри текущего изображения. Этот вектор называется вектором движения. Согласно этому режиму, кодирование такой единицы кодирования с использованием этого режима содержит информацию движения, содержащую вектор движения и сжатый остаток.
В этом документе делается фокус на третьем режиме кодирования, называемом режимом палитры. Согласно прошлой версии режима палитры, предсказательный блок определяется для некоторой заданной единицы кодирования как блок индексов из палитры: для каждого местоположения пиксела в предсказательном блоке предсказательный блок содержит индекс, ассоциированный со значением пиксела в палитре, которое является ближайшим к значению пиксела, имеющего то же самое местоположение (т. е. расположенного там же) в единице кодирования. Предсказательный блок имеет, таким образом, тот же самый размер, что и единица кодирования. Остаток, представляющий разницу между предсказательным блоком (в области пикселов) и единицей кодирования, затем вычисляется. Остаток имеет также тот же самый размер, что и единица кодирования и предсказательный блок.
Индексы записей в палитре также известны как "уровни".
В последней версии режима палитры, рассматриваемой в SCC HEVC, никакого остатка не строится и не передается декодеру (как на фиг.7, описанной ниже). Только блок индексов, формируемый с использованием палитры, кодируется в битовом потоке, чтобы представлять текущий блок пикселов.
Некоторые пикселы могут быть плохо представлены лучшей записью палитры, что означает, что разница между пикселами и лучшей записью палитры высока. Может быть нецелесообразно использовать индекс для представления таких пикселов.
Режим палитры, таким образом, обеспечивает возможность определять такие пикселы и кодировать их явное значение пиксела вместо использования индекса приближения. Такой подход, в частности, важен, когда никакого остатка (представляющего приближение, сделанное записью палитры) не передается. Такие пикселы, значение пиксела которых явным образом кодируется, называются "переходными пикселами", и никакой соответствующий индекс не обеспечивается в блоке индексов, который ассоциирован со значением пиксела в палитре. В текущем осуществлении HEVC "переходные пикселы" сигнализируются в блоке индексов с использованием индекса записи палитры, который не ассоциирован со значением пиксела.
В таком осуществлении режима палитры блок значений переходных пикселов строится в качестве дополнения к блоку индексов и к палитре для сохранения значений переходных пикселов.
Предсказательный блок (т. е. блок индексов), блок значений переходных пикселов и, возможно, остаток и палитра кодируются для добавления в битовый поток, представляющий закодированную текущую единицу кодирования.
Для кодирования блока индексов для режима палитры используется множество наборов синтаксических элементов, причем каждый набор устанавливает операцию для генерирования соответствующей группы индексов, имеющих последовательные позиции блока в блоке индексов.
В текущем проекте спецификации расширения кодирования содержимого экрана HEVC предсказание "копировать сверху" и предсказание "левое значение" предлагаются для кодирования каждого индекса блока индексов со ссылками на индекс либо выше в блочной матрице, либо справа от него.
Один синтаксический элемент, называемый "предсказательным режимом", определяет операцию или режим предсказания, выбранный для соответствующей группы индексов в блоке индексов, т. е. для каждого текущего индекса блока, пока серия, определенная выше, не закончена. Опциональный (функция от "предсказательного режима") второй синтаксический элемент, называемый "уровнем", определяет новое значение индекса для соответствующей группы индексов только в режиме предсказания "левое значение". И третий и последний синтаксический элемент, называемый "серией", определяет, на скольких последовательных позициях блока применяется операция, определенная синтаксическим элементом "предсказательный режим". Иными словами, он определяет количество индексов (имеющих последовательные позиции блока) в соответствующей группе индексов.
Настоящие варианты осуществления изобретения улучшают эффективность кодирования режима палитры.
РАСКРЫТИЕ ИЗОБРЕТЕНИЯ
В первом аспекте настоящее изобретение обеспечивает способ декодирования текущего блока пикселов в изображении из битового потока, причем способ содержит этапы, на которых:
получают блок индексов, значения переходных пикселов и палитру, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и значения переходных пикселов содержат значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, которые ассоциированы со значением пиксела в палитре; и
формируют декодированный текущий блок пикселов из блока индексов, значений переходных пикселов и палитры;
причем получение блока индексов содержит этапы, на которых:
получают из битового потока синтаксические элементы для генерирования групп индексов, имеющих последовательные позиции блока в блоке индексов;
генерируют индексы блока индексов на основе синтаксических элементов,
причем полученные синтаксические элементы включают в себя синтаксический элемент, указанный кодовым словом "до конца", которое указывает, что индексы, формирующие одну из групп индексов, являются индексами во всех остальных позициях блока вплоть до конца блока индексов, независимо от количества остальных позиций блока.
Во втором аспекте настоящее изобретение обеспечивает способ кодирования текущего блока пикселов в изображении, причем способ содержит этапы, на которых:
генерируют блок индексов и значения переходных пикселов из текущего блока пикселов и палитры, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и значения переходных пикселов содержат значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, которые ассоциированы со значением пиксела в палитре; и
кодируют блок индексов и значения переходных пикселов;
причем кодирование блока индексов содержит этап, на котором:
генерируют синтаксические элементы для генерирования групп индексов, имеющих последовательные позиции блока в блоке индексов;
причем синтаксические элементы включают в себя синтаксический элемент, указанный кодовым словом "до конца", которое указывает, что индексы, формирующие одну из групп индексов, являются индексами во всех остальных позициях блока вплоть до конца блока индексов, независимо от количества остальных позиций блока.
В вариантах осуществления первого и второго аспектов кодовое слово "до конца" может содержать флаг. Значения переходных пикселов могут содержать блок таких значений переходных пикселов.
В вариантах осуществления синтаксические элементы используют предварительно определенное кодовое слово, ассоциированное с определенным количеством индексов и соответствующее группе индексов блока индексов, и синтаксический элемент, соответствующий последним позициям блока в блоке индексов, использует кодовое слово "до конца".
Предварительно определенные кодовые слова, ассоциированные с определенными количествами индексов, могут быть короткими кодовыми словами, и другие предварительно определенные кодовые слова, ассоциированные с другими определенными количествами индексов, могут быть составлены из общего префикса кодового слова и из переменного суффикса кодового слова; и кодовое слово "до конца" может включать в себя общий префикс кодового слова. Например, кодовое слово "до конца" может включать в себя однобитный суффикс в качестве дополнения к общему префиксу кодового слова.
В вариантах осуществления синтаксические элементы обеспечены в наборах, и генерирование группы индексов, соответствующих набору синтаксических элементов, зависит от первого синтаксического элемента набора, причем операция, используемая для генерирования индексов, является одним из этапов, на которых:
повторяют индекс, имеющий позицию блока непосредственно выше; и
повторяют индекс, закодированный во втором синтаксическом элементе набора.
В дополнительном аспекте обеспечен некратковременный машиночитаемый носитель, хранящий программу, которая, при исполнении микропроцессором или компьютерной системой в устройстве, предписывает устройству выполнять способ по любому из вышеупомянутых аспектов и вариантов осуществления.
В другом аспекте обеспечена компьютерная программа, которая при исполнении обеспечивает выполнение способа по любому предшествующему аспекту или варианту осуществления. Компьютерная программа может осуществляться на носителе, таком как машиночитаемый носитель.
В других аспектах обеспечен битовый поток, генерируемый с использованием второго аспекта или его вариантов осуществления, и носитель данных, на котором сохраняется упомянутый битовый поток. Такой носитель данных может принимать форму диска Blu-Ray, DVD, CD-ROM или другого носителя с возможностью чтения устройством, например.
В другом аспекте обеспечено устройство, содержащее средство, выполненное с возможностью осуществления способа по любому из вышеупомянутых аспектов или вариантов осуществления.
В дополнительном аспекте настоящего изобретения обеспечено устройство декодирования для декодирования текущего блока пикселов в изображении из битового потока, причем устройство декодирования содержит:
средство для получения блока индексов, значений переходных пикселов и палитры, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и значения переходных пикселов содержат значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, которые ассоциированы со значением пиксела в палитре; и
средство для формирования декодированного текущего блока пикселов из блока индексов, значений переходных пикселов и палитры;
причем получение блока индексов содержит этапы, на которых:
получают из битового потока синтаксические элементы для генерирования групп индексов, имеющих последовательные позиции блока в блоке индексов; и
генерируют индексы блока индексов на основе синтаксических элементов,
причем полученные синтаксические элементы включают в себя синтаксический элемент, указанный кодовым словом "до конца", которое указывает, что индексы, формирующие одну из групп индексов, являются индексами во всех остальных позициях блока вплоть до конца блока индексов, независимо от количества остальных позиций блока.
В еще одном аспекте настоящего изобретения обеспечено устройство кодирования для кодирования текущего блока пикселов в изображении, причем устройство кодирования содержит:
средство для генерирования блока индексов и значений переходных пикселов из текущего блока пикселов и палитры, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и значения переходных пикселов содержат значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, которые ассоциированы со значением пиксела в палитре; и
средство для кодирования блока индексов и значений переходных пикселов;
причем кодирование блока индексов содержит этап, на котором:
генерируют синтаксические элементы для генерирования групп индексов, имеющих последовательные позиции блока в блоке индексов;
причем синтаксические элементы включают в себя синтаксический элемент, указанный кодовым словом "до конца", которое указывает, что индексы, формирующие одну из соответствующих групп индексов, являются индексами во всех остальных позициях блока вплоть до конца блока индексов, независимо от количества остальных позиций блока.
В другом аспекте настоящее изобретение обеспечивает способ декодирования текущего блока пикселов в изображении из битового потока, причем способ содержит этапы, на которых:
получают блок индексов, значения переходных пикселов и палитру, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и значения переходных пикселов содержат значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, которые ассоциированы со значением пиксела в палитре; и
формируют декодированный текущий блок пикселов из блока индексов, значений переходных пикселов и палитры;
причем получение блока индексов содержит этапы, на которых:
получают из битового потока синтаксические элементы для генерирования групп индексов, имеющих последовательные позиции блока в блоке индексов, где количество последовательных позиций блока указывается серией;
генерируют индексы блока индексов на основе синтаксических элементов,
причем полученные синтаксические элементы включают в себя флаг в битовом потоке, который указывает, когда серия группы индексов является последней серией в блоке, который декодируется. В дополнительном аспекте обеспеченное устройство имеет средство, предназначенное для выполнения, или процессор, сконфигурированный для выполнения упомянутого способа декодирования, и компьютерную программу, которая при исполнении обеспечивает выполнение упомянутого способа декодирования.
Во втором аспекте настоящее изобретение обеспечивает способ кодирования текущего блока пикселов в изображении, причем способ содержит этапы, на которых:
генерируют блок индексов и значения переходных пикселов из текущего блока пикселов и палитры, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и значения переходных пикселов содержат значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, которые ассоциированы со значением пиксела в палитре; и
кодируют блок индексов и значения переходных пикселов;
причем кодирование блока индексов содержит этап, на котором:
генерируют синтаксические элементы для генерирования групп индексов, имеющих последовательные позиции блока в блоке индексов, причем количество последовательных позиций блока группы индексов указывается серией;
причем синтаксические элементы включают в себя флаг в битовом потоке, который указывает, когда серия группы индексов является последней серией в блоке, который кодируется. В дополнительном аспекте обеспеченное устройство имеет средство, предназначенное для, или процессор, сконфигурированный для выполнения упомянутого способа кодирования, и компьютерную программу, которая при исполнении обеспечивает выполнение упомянутого способа.
Последний набор синтаксических элементов (т. е. набор для последних пикселов в единице кодирования) часто применяется для большого количества пикселов (индексов), в частности для последней единицы кодирования изображения, поскольку конец изображения обычно монотонный. Использование такого значения или флага "до конца", таким образом, улучшает эффективность кодирования, поскольку оно может избегать использования большого количества бит для кодирования значения, представляющего большое количество индексов, которых касается последняя "серия".
Дополнительно, управление количеством индексов, которые обрабатываются для последнего набора синтаксических элементов (в частности в цикле декодирования) может избегаться. Это так, поскольку известно, благодаря значению или флагу "до конца", что все остальные индексы задействованы.
В одном аспекте изобретение обеспечивает способ декодирования текущего блока пикселов в изображении из битового потока, причем способ содержит этапы, на которых:
получают блок индексов, блок значений переходных пикселов и палитру, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и блок значений переходных пикселов содержит значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, который ассоциирован со значением пиксела в палитре; и
формируют декодированный текущий блок пикселов из блока индексов, блока значений переходных пикселов и палитры;
причем получение блока индексов содержит этапы, на которых:
получают из битового потока множество наборов синтаксических элементов, причем каждый набор устанавливает операцию для генерирования соответствующей группы индексов, имеющих последовательные позиции блока в блоке индексов;
генерируют индексы блока индексов на основе наборов синтаксических элементов,
причем синтаксический элемент (например, элемент "серия" в проекте спецификации кодирования содержимого экрана HEVC), обеспеченный в каждом наборе, использует кодовое слово, выбранное из по меньшей мере двух доступных кодовых слов, включающих в себя кодовое слово "до конца" для указания, что индексы, формирующие соответствующую группу индексов, являются индексами во всех остальных позициях блока вплоть до конца блока индексов, независимо от количества таких остальных позиций блока.
Использование кодового слова означает, что такое кодовое слово устанавливается в обеспеченном синтаксическом элементе.
Также обеспечен способ кодирования текущего блока пикселов в изображении, причем способ содержит этапы, на которых:
генерируют блок индексов и блок значений переходных пикселов из текущего блока пикселов и из палитры, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и блок значений переходных пикселов содержит значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, который ассоциирован со значением пиксела в палитре; и
кодируют блок индексов и блок значений переходных пикселов;
причем кодирование блока индексов содержит этап, на котором:
генерируют множество наборов синтаксических элементов, причем каждый набор устанавливает операцию для декодера для генерирования соответствующей группы индексов, имеющих последовательные позиции блока в блоке индексов;
причем синтаксический элемент, обеспеченный в каждом наборе, использует кодовое слово, выбранное из набора из по меньшей мере двух доступных кодовых слов, включающих в себя кодовое слово "до конца" для указания, что индексы, формирующие соответствующую группу индексов, являются индексами во всех остальных позициях блока вплоть до конца блока индексов, независимо от количества таких остальных позиций блока.
Соответственно, вышеупомянутые варианты осуществления изобретения обеспечивают устройство декодирования для декодирования текущего блока пикселов в изображении из битового потока, причем устройство декодирования содержит по меньшей мере один микропроцессор, сконфигурированный для осуществления этапов, на которых:
получают блок индексов, блок значений переходных пикселов и палитру, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и блок значений переходных пикселов содержит значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, который ассоциирован со значением пиксела в палитре; и
формируют декодированный текущий блок пикселов из блока индексов, блока значений переходных пикселов и палитры;
причем получение блока индексов содержит этапы, на которых:
получают из битового потока множество наборов синтаксических элементов, причем каждый набор устанавливает операцию для генерирования соответствующей группы индексов, имеющих последовательные позиции блока в блоке индексов;
генерируют индексы блока индексов на основе наборов синтаксических элементов,
причем синтаксический элемент, обеспеченный в каждом наборе, использует кодовое слово, выбранное из по меньшей мере двух доступных кодовых слов, включающих в себя кодовое слово "до конца" для указания, что индексы, формирующие соответствующую группу индексов, являются индексами во всех остальных позициях блока вплоть до конца блока индексов, независимо от количества таких остальных позиций блока.
Также обеспечено устройство кодирования для кодирования текущего блока пикселов в изображении, причем устройство кодирования содержит по меньшей мере один микропроцессор, сконфигурированный для осуществления этапов, на которых:
генерируют блок индексов и блок значений переходных пикселов из текущего блока пикселов и из палитры, причем палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, и блок значений переходных пикселов содержит значения пикселов для пикселов, не имеющих соответствующего индекса в блоке индексов, который ассоциирован со значением пиксела в палитре; и
кодируют блок индексов и блок значений переходных пикселов;
причем кодирование блока индексов содержит этап, на котором:
генерируют множество наборов синтаксических элементов, причем каждый набор устанавливает операцию для декодера для генерирования соответствующей группы индексов, имеющих последовательные позиции блока в блоке индексов;
причем синтаксический элемент, обеспеченный в каждом наборе, использует кодовое слово, выбранное из набора из по меньшей мере двух доступных кодовых слов, включающих в себя кодовое слово "до конца" для указания, что индексы, формирующие соответствующую группу индексов, являются индексами во всех остальных позициях блока вплоть до конца блока индексов, независимо от количества таких остальных позиций блока.
Опциональные признаки этих вариантов осуществления определяются в прилагаемой формуле изобретения. Некоторые из этих признаков объяснены здесь ниже со ссылками на способ и могут быть преобразованы в системные признаки, специализированные для устройства согласно вариантам осуществления изобретения.
В некоторых вариантах осуществления набор из по меньшей мере двух доступных кодовых слов для обеспеченного синтаксического элемента содержит предварительно определенные кодовые слова, ассоциированные с определенными количествами индексов, и причем обеспеченный синтаксический элемент использует одно из таких предварительно определенных кодовых слов для каждого набора, соответствующего группе индексов блока индексов, кроме набора, называемого последним набором, соответствующего последним позициям блока в блоке индексов, и обеспеченный синтаксический элемент последнего набора использует кодовое слово "до конца".
Это обеспечение сохраняет эффективность кодирования путем внесения дополнительного кодового слова (кодового слова "до конца") для известного синтаксического элемента.
Согласно конкретным вариантам осуществления, некоторые предварительно определенные кодовые слова, ассоциированные с определенными количествами индексов, являются короткими кодовыми словами, и другие предварительно определенные кодовые слова, ассоциированные с другими определенными количествами индексов, состоят из общего префикса кодового слова и из суффикса кодового слова, который отличается между одним предварительно определенным кодовым словом другим; и причем кодовое слово "до конца" включает в себя общий префикс кодового слова.
Короткие кодовые слова обычно короче или равны (в смысле битов) общему префиксу кодового слова.
Эта конфигурация обеспечивает эффективное кодирование. Это так, поскольку, ввиду того что кодовое слово "до конца" используется по большей мере единожды в единице кодирования (блоке пикселов), становится более эффективно поддерживать короткие кодовые слова для наиболее частых количеств индексов.
В конкретном варианте осуществления кодовое слово "до конца" включает в себя однобитный суффикс дополнительно к общему префиксу кодового слова. Иными словами, самое короткое кодовое слово, имеющее общий префикс кодового слова, используется для кодового слова "до конца". Это призвано для поддержки эффективности кодирования.
В одном варианте для использования кодового слова "до конца", составленного из общего префикса кодового слова и из суффикса, кодовое слово "до конца" может быть конкретным коротким кодовым словом (т. е. без общего префикса кодового слова).
В одном варианте осуществления операция для генерирования группы индексов, соответствующих набору синтаксических элементов, зависит от первого синтаксического элемента (например, элемента Предсказательный_режим) набора, причем операция, используемая для генерирования индексов, является одним из этапов, на которых:
повторяют индекс, имеющий позицию блока непосредственно выше. Это режим "копировать сверху" или "копировать верхний" HEVC; и
повторяют индекс, закодированный во втором синтаксическом элементе (например, элемент уровень) набора. Это режим, известный как "режим копирования слева", или "режим предсказания слева", или "режим индекса" в стандарте HEVC.
Другие варианты осуществления изобретения направлены на способ для кодирования текущего блока пикселов в изображении, содержащий этапы, на которых:
оценивают (или испытывают, т. е. приблизительно подсчитывают затраты кодирования для того, чтобы выбрать лучший из испытанных режимов кодирования) кодирование текущего блока пикселов для каждого из двух или более режимов кодирования, включающих в себя режим кодирования палитры, причем режим кодирования палитры использует текущую палитру, чтобы построить блок индексов (используемый для кодирования текущего блока пикселов в битовом потоке), причем текущая палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов:
выбирают режим кодирования из двух или более режимов кодирования, чтобы кодировать текущий блок пикселов, на основе оценок;
причем оценка кодирования текущего блока пикселов с использованием режима кодирования палитры содержит этапы, на которых: последовательно рассматривают пикселы текущего блока и для каждого рассматриваемого пиксела:
ищут в палитре запись палитры, имеющую соответствующее значение пиксела, достаточно близкое к рассматриваемому пикселу, с учетом порога расстояния;
кодируют рассматриваемый пиксел с использованием индекса записи, если в палитре найдена запись палитры, которая достаточно близка к рассматриваемому пикселу, с учетом порога расстояния;
кодируют кодом перехода рассматриваемый пиксел, если в палитре не найдено записи палитры, которая достаточно близка к рассматриваемому пикселу, с учетом порога расстояния, причем кодирование кодом перехода включает в себя явное кодирование значения рассматриваемого пиксела; и
причем оценка кодирования текущего блока пикселов с использованием режима кодирования палитры отменяется, если количество закодированных кодом перехода пикселов превосходит предварительно определенный порог для текущего блока пикселов.
Соответственно, устройство кодирования для кодирования текущего блока пикселов в изображении содержит по меньшей мере один микропроцессор, сконфигурированный для осуществления этапов, на которых:
оценивают кодирование текущего блока пикселов для каждого из двух или более режимов кодирования, включающих в себя режим кодирования палитры, причем режим кодирования палитры использует текущую палитру, чтобы построить блок индексов, причем текущая палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов:
выбирают режим кодирования из двух или более режимов кодирования, чтобы кодировать текущий блок пикселов, на основе оценок;
причем оценка кодирования текущего блока пикселов с использованием режима кодирования палитры содержит этапы, на которых: последовательно рассматривают пикселы текущего блока и для каждого рассматриваемого пиксела:
ищут в палитре запись палитры, имеющую соответствующее значение пиксела, достаточно близкое к рассматриваемому пикселу, с учетом порога расстояния;
кодируют рассматриваемый пиксел с использованием индекса записи, если в палитре найдена запись палитры, которая достаточно близка к рассматриваемому пикселу, с учетом порога расстояния;
кодируют кодом перехода рассматриваемый пиксел, если в палитре не найдено записи палитры, которая достаточно близка к рассматриваемому пикселу, с учетом порога расстояния, причем кодирование кодом перехода включает в себя явное кодирование значения рассматриваемого пиксела; и
причем оценка кодирования текущего блока пикселов с использованием режима кодирования палитры отменяется, если количество закодированных кодом перехода пикселов превосходит предварительно определенный порог для текущего блока пикселов.
Благодаря этому обеспечению, время обработки может сберегаться. Это так, поскольку большое количество закодированных кодом перехода пикселов делает режим кодирования палитры гораздо менее эффективным по сравнению с другими режимами кодирования. Как следствие, как только это большое количество известно, не стоит тратить время на обработку операций, которые бесполезны для кодирования текущей единицы кодирования.
Опциональные признаки этих вариантов осуществления определяются в прилагаемой формуле изобретения. Некоторые из этих признаков объяснены ниже со ссылками на способ, в то время как они могут быть преобразованы в системные признаки, специализированные для устройства согласно вариантам осуществления изобретения.
В вариантах осуществления предварительно определенный порог зависит от количества пикселов в текущем блоке пикселов, например 30%.
В других вариантах осуществления процесс дополнительно содержит приращение счетчика каждый раз, когда пиксел закодирован кодом перехода; причем оценка кодирования текущего блока пикселов с использованием режима кодирования палитры отменяется, как только счетчик достиг предварительно определенного порога. Этот подход оптимален для сбережения времени обработки.
В еще одних вариантах осуществления оценка кодирования текущего блока пикселов с использованием режима кодирования палитры дополнительно содержит этапы, на которых:
если в палитре не найдена запись палитры, которая достаточно близка к рассматриваемому пикселу, с учетом порога расстояния, добавляют рассматриваемый пиксел в качестве новой записи палитры в палитре;
когда все пикселы блока пикселов были рассмотрены, удаляют по меньшей мере одну запись палитры из палитры.
Это обеспечение обеспечивает возможность динамически выстраивать палитру, которая отражает пикселы текущей единицы кодирования и которая удовлетворяет требованиям памяти.
В конкретном варианте осуществления оценка кодирования текущего блока пикселов с использованием режима кодирования палитры дополнительно содержит этапы, на которых:
при нахождении записи палитры или добавлении новой записи палитры, приращивают счетчик событий, ассоциированный с найденной или новой записью палитры; и
сравнивают сумму счетчика событий удаленной палитры записей с предварительно определенным порогом для принятия решения, отменять или нет оценку.
Другие изобретательские (и независимые) варианты осуществления изобретения направлены на способ для кодирования текущего блока пикселов в изображении с использованием режима кодирования палитры, содержащий этапы, на которых:
строят блок индексов из текущего блока пикселов и текущей палитры, причем текущая палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов:
кодируют блок индексов;
причем построение блока индексов для текущего блока пикселов содержит, для каждого пиксела текущего блока пикселов, этапы, на которых ищут в палитре запись палитры, имеющую соответствующее значение пиксела, достаточно близкое к рассматриваемому пикселу, с учетом порога расстояния; добавляют индекс записи найденной записи палитры к блоку индексов; и сохраняют текущий пиксел и индекс записи найденной записи палитры в памяти;
причем, если значение текущего пиксела равно значению предшествующего пиксела в текущем блоке пикселов, извлекают индекс записи, сохраненный в памяти для предшествующего пиксела, и добавляют извлеченный индекс к предсказательному блоку индексов в качестве индекса записи для текущего пиксела.
Соответственно, устройство кодирования для кодирования текущего блока пикселов в изображении содержит по меньшей мере один микропроцессор, сконфигурированный для осуществления этапов, на которых:
строят блок индексов из текущего блока пикселов и текущей палитры, причем текущая палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов:
кодируют блок индексов;
причем построение блока индексов для текущего блока пикселов содержит, для каждого пиксела текущего блока пикселов, этапы, на которых ищут в палитре запись палитры, имеющую соответствующее значение пиксела, достаточно близкое к рассматриваемому пикселу, с учетом порога расстояния; добавляют индекс записи найденной записи палитры к блоку индексов; и сохраняют текущий пиксел и индекс записи найденной записи палитры в памяти;
причем, если значение текущего пиксела равно значению предшествующего пиксела в текущем блоке пикселов, извлекают индекс записи, сохраненный в памяти для предшествующего пиксела, и добавляют извлеченный индекс к блоку индексов в качестве индекса записи для текущего пиксела.
Эти изобретательские варианты осуществления обеспечивает возможность избежать выполнения исчерпывающего поиска индекса в палитре. В среднем, затраты на дополнительную обработку для проверки равенства между пикселами меньше, чем затраты на обработку, сберегаемые отсутствием выполнения исчерпывающего поиска, поскольку изображения (в частности, изображения содержимого экрана) часто имеют высокий уровень пиксельной избыточности.
Хотя "предшествующий пиксел" может быть любым из пикселов, уже обработанных в единице кодирования, может быть целесообразно ограничить количество возможных "предшествующих пикселов" для того, чтобы ограничить количество сравнений пикселов и ограничить память, необходимую для хранения предшествующих пикселов. В предпочтительном варианте осуществления предшествующий пиксел является пикселом, который непосредственно предшествует текущему пикселу в текущем блоке пикселов. Иными словами, последний индекс, найденный в палитре, удерживается в памяти, чтобы повторно использоваться для следующего пиксела, если он тот же самый, что и последний обработанный. В варианте два или более пиксела, которые немедленно предшествуют текущему пикселу, могут рассматриваться.
Следует заметить, что предпочтительно только один индекс записи и только один "предшествующий" пиксел хранится в памяти в любой момент времени. Это уменьшает потребности в памяти.
В одном варианте, чтобы рассматривать пиксел, непосредственно предшествующий текущему пикселу, предшествующий пиксел является последним пикселом текущего блока пикселов, для которого индекс записи палитры был добавлен к блоку индексов. Это обеспечение обеспечивает возможность рассматривать переходные пикселы, для которых никакой записи палитры нельзя найти, и, таким образом, никакой индекс записи не добавляется к блоку уровней.
В другом варианте предшествующий пиксел является пикселом, который располагается выше текущего пиксела в текущем блоке пикселов.
В некоторых вариантах осуществления способ дополнительно содержит этап, на котором сравнивают значение текущего пиксела со значением, сохраненным в памяти для предшествующего пиксела, для определения, равно или нет значение текущего пиксела значению предшествующего пиксела.
Следует заметить, что обычно ближайшая запись палитры (с учетом порога) выбирается для обеспечения соответствующего индекса записи в качестве индекса в блоке индексов для текущего пиксела.
Другие изобретательские (и независимые) варианты осуществления изобретения направлены на способ для кодирования текущего блока пикселов в изображении с использованием режима кодирования палитры, причем режим кодирования палитры использует текущую палитру, которая содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, причем способ содержит этап, на котором:
оценивают (или испытывают, т. е. приблизительно подсчитывают затраты на кодирование для того, чтобы выбрать лучший из испытанных режимов кодирования) кодирование текущего блока пикселов с использованием двух или более режимов предсказания палитры для предсказания текущей палитры, причем первый режим предсказания палитры использует предшествующую палитру предшествующего блока пикселов в изображении для кодирования текущего блока пикселов вместо текущей палитры;
причем способ дополнительно содержит этапы, на которых:
определяют количество записей палитры предшествующей палитры, которые используются повторно в текущей палитре; и
пропускают оценку кодирования текущего блока пикселов с использованием первого режима предсказания палитры, если определяется, что количество повторно используемых записей палитры ниже предварительно определенного порога.
Соответственно, устройство кодирования для кодирования текущего блока пикселов в изображении с использованием режима кодирования палитры, причем режим кодирования палитры использует текущую палитру, которая содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, содержит по меньшей мере один микропроцессор, сконфигурированный для осуществления этапов, на которых:
оценивают кодирование текущего блока пикселов с использованием двух или более режимов предсказания палитры для предсказания текущей палитры, причем первый режим предсказания палитры использует предшествующую палитру предшествующего блока пикселов в изображении для кодирования текущего блока пикселов вместо текущей палитры;
определяют количество записей палитры предшествующей палитры, которые используются повторно в текущей палитре; и
пропускают оценку кодирования текущего блока пикселов с использованием первого режима предсказания палитры, если определяется, что количество повторно используемых записей палитры ниже предварительно определенного порога.
Этот подход обеспечивает возможность рано обнаруживать случаи, когда оценка с совместным использованием палитры неэффективна, и, таким образом, пропускать ее как можно раньше.
Другой аспект изобретения относится к некратковременному машиночитаемому носителю, хранящему программу, которая, при исполнении микропроцессором или компьютерной системой в устройстве, предписывает устройству выполнять любой способ, определенный выше.
Некратковременный машиночитаемый носитель может иметь признаки и преимущества, которые аналогичны изложенным выше и ниже в отношении способа и устройства, в частности относящиеся к улучшению эффективности кодирования режима кодирования палитры.
Еще один аспект изобретения относится к устройству, содержащему средство, выполненное с возможностью осуществления каждого этапа любого способа, определенного выше.
Дополнительные аспекты изобретения относятся к способу кодирования или декодирования текущего блока пикселов в изображении, по существу как здесь описано со ссылками на, и как показано на, фиг.17, или 18, или 19, или 20, или 21 сопроводительных чертежей.
По меньшей мере части способов согласно изобретению могут быть компьютерно-реализованными. Соответственно, настоящее изобретение может принимать форму полностью аппаратного варианта осуществления, полностью программного варианта осуществления (включающего программно-аппаратные средства, резидентные программные средства, микрокод и т. д.) или варианта осуществления, комбинирующего программные и аппаратные аспекты, все из которых могут в общем называться здесь "цепью", "модулем" или "системой". Кроме того, настоящее изобретение может принимать форму компьютерного программного продукта, осуществленного на любом материальном носителе приложения, имеющего программный код с возможностью использования компьютером, осуществленный на носителе.
Поскольку настоящее изобретение может осуществляться в программных средствах, настоящее изобретение может осуществляться в качестве машиночитаемого кода для обеспечения программируемому устройству на любом подходящем носителе. Материальный носитель может содержать носитель данных, такой как гибкий диск, CD-ROM, накопитель на жестком диске, накопитель на магнитной ленте или твердотельное устройство памяти и т. п. Кратковременный носитель может включать в себя сигнал, такой как электрический сигнал, электронный сигнал, оптический сигнал, звуковой сигнал, магнитный сигнал или электромагнитный сигнал, например микроволновой или RF-сигнал.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Варианты осуществления изобретения будут описаны далее исключительно в качестве примера и со ссылками на следующие чертежи, на которых:
фиг.1 изображает архитектуру кодера HEVC;
фиг.2 изображает архитектуру декодера HEVC;
фиг.3 изображает концепцию причинной зоны;
фиг.4 изображает цветовые форматы, поддерживаемые расширениями диапазона и кодирования содержимого экрана HEVC;
фиг.5 изображает разбиение блока кодового дерева на единицы кодирования и декодирование порядка сканирования этих единиц кодирования;
фиг.6 изображает принцип режима кодирования палитры на стороне исследуемого декодера в расширении кодирования содержимого экрана HEVC;
фиг.7 изображает вариант режима кодирования палитры на стороне декодера, не включающий остатка;
фиг.8 иллюстрирует пример единицы кодирования с его соответствующим блоком уровней и ассоциированной палитрой;
фиг.9 изображает тот же самый блок уровней и набор синтаксических элементов, используемых для кодирования этого блока уровней;
фиг.10 изображает процесс декодирования синтаксических элементов, относящихся к режиму палитры;
фиг.11 изображает процесс восстановления для выстраивания блока уровней на стороне декодирования;
фиг.12 изображает примерный алгоритм определения палитры в кодере;
фиг.13 изображает выбор синтаксических элементов предсказательный режим, уровень и серия, а также режим кодирования кодом перехода в кодере для режима палитры;
фиг.14 изображает схематичную структурную схему вычислительного устройства для осуществления одного или нескольких вариантов осуществления изобретения;
фиг.15 изображает алгоритм для кодирования синтаксического элемента "серия";
фиг.16 изображает другой алгоритм для кодирования элемента "серия";
фиг.17 изображает улучшенный алгоритм для кодирования синтаксического элемента "серия" по сравнению с фиг.15;
фиг.18 изображает улучшенный алгоритм для кодирования синтаксического элемента "серия" по сравнению с фиг.16;
фиг.19 изображает улучшенный алгоритм для преобразования единицы кодирования в блок уровней с использованием режима кодирования палитры, включающий в себя сигнализацию закодированных кодом перехода пикселов;
фиг.20 изображает улучшенный алгоритм для построения палитры для режима кодирования палитры; и
фиг.21 изображает улучшенный алгоритм для оценки режимов кодирования палитры.
ПОДРОБНОЕ ОПИСАНИЕ
Фиг.1 изображает архитектуру кодера HEVC. В кодере видео исходная последовательность 101 разделяется на блоки пикселов 102. Режим кодирования затем применяется к каждому блоку. Существует два семейства режимов кодирования, обычно используемых в HEVC: режимы на основе пространственного предсказания (внутренние режимы) 103 и режимы на основе временного предсказания (промежуточные, двунаправленные, режимы пропуска) на основе оценки 104 движения и компенсации 105 движения. Расширение HEVC, проектируемое в текущий момент, известное как расширение кодирования содержимого экрана HEVC, добавляет дополнительный режим кодирования, а именно режим кодирования палитры, который соперничает с внутренними и промежуточными режимами кодирования для кодирования блоков пикселов. Этот режим кодирования палитры описан более подробно ниже, в частности со ссылками на фиг.6-13, 15 и 16.
Внутренняя единица кодирования в общем случае предсказывается из закодированных пикселов на ее причинной границе путем процесса, называемого внутренним предсказанием.
Временное предсказание режима промежуточного кодирования сначала состоит в поиске в предыдущем или будущем кадре, называемом опорным кадром 116, опорной зоны, которая является ближайшей к единице кодирования, на этапе 104 оценки движения. Эта опорная зона составляет предсказательный блок. Далее эта единица кодирования предсказывается с использованием предсказывающего блока для вычисления остатка на этапе 105 компенсации движения.
В обоих случаях пространственного и временного предсказания остаток вычисляется путем вычитания единицы кодирования из исходного предсказательного блока.
Во внутреннем предсказании направление предсказания кодируется. Во временном предсказании по меньшей мере один вектор движения кодируется. Однако для того чтобы дополнительно уменьшить затраты скорости передачи данных, относящиеся к кодированию вектора движения, вектор движения не кодируется непосредственно. Действительно, предполагая, что движение однородно, особый интерес представляет кодирование вектора движения в качестве разницы между этим вектором движения и вектором движения в его окружении. В стандарте кодирования H.264/AVC, например, вектора движения кодируются в отношении среднего вектора, вычисленного между тремя блоками, расположенными выше и левее текущего блока. Только разница, также называемая вектором невязки движения, вычисляемая между средним вектором и вектором движения текущего блока, кодируется в битовом потоке. Это обрабатывается в модуле 117 "предсказание и кодирование Mv". Значение каждого закодированного вектора сохраняется в векторном поле 118 движения. Соседние вектора движения, используемые для предсказания, извлекаются из векторного поля 118 движения.
Затем режим, оптимизирующий производительность искажения скорости, выбирается в модуле 106, например с использованием критерия на основе лямбда, такого как D+λ.R, где D является искажением, λ - множителем лямбда или Лагранжа, и R - скоростью). Для того чтобы дополнительно уменьшить избыточности, преобразование, обычно DCT, применяется к остаточному блоку в модуле 107, и квантование применяется к коэффициентам в модуле 108. Квантованный блок коэффициентов затем энтропийно кодируется в модуле 109, и результат вносится в битовый поток 110.
Кодер затем выполняет декодирование закодированного кадра для будущей оценки движения в модулях 111-116. Это является циклом декодирования в кодере. Эти этапы обеспечивают возможность кодеру и декодеру иметь одни и те же опорные кадры. Для реконструкции закодированного кадра остаток обратно квантуется в модуле 111 и обратно преобразовывается в модуле 112 для того, чтобы обеспечить "реконструированный" остаток в области пикселов. Согласно режиму кодирования (промежуточному или внутреннему), этот остаток добавляется к промежуточному предсказывающему параметру 114 или к внутреннему предсказывающему параметру 113.
Затем эта первая реконструкция фильтруется в модуле 115 одним или несколькими видами постфильтрации. Эти постфильтры интегрируются в цикл декодирования. Это означает, что они должны применяться к реконструированному кадру в кодере и декодере для того, чтобы использовать одни и те же опорные кадры в кодере и декодере. Цель этой постфильтрации состоит в удалении артефактов сжатия.
Например, H.264/AVC использует антиблочный фильтр. Этот фильтр может удалять артефакты блочности ввиду квантования DCT остатка и компенсации движения блока. В текущем стандарте HEVC два типа фильтра цикла используются: антиблочный фильтр, сэмплово-адаптивное смещение (SAO).
Принцип декодера 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). Кадр содержит несколько ненакладывающихся и квадратных блоков кодового дерева. Размер блока кодового дерева может быть от 64 пиксела×64 пиксела до 16×16. Этот размер определяется в уровне последовательности. Наиболее эффективным размером, в плане эффективности кодирования, является наибольший: 64×64. Следует заметить, что все блоки кодового дерева имеют один и тот же размер, кроме границы изображения, что значит, что они располагаются рядами. Размер граничных CTB адаптируется согласно количеству остальных пикселов.
Каждый блок кодового дерева содержит одну или несколько квадратных единиц кодирования (CU). Блок кодового дерева разбивается на основе квадратно-древовидной структуры на несколько единиц кодирования. Порядок обработки (кодирования или декодирования) каждой единицы кодирования в блоке кодового дерева следует квадратно-древовидной структуре на основе растрового порядка сканирования. Фиг.5 изображает пример порядка обработки единиц кодирования в одном блоке кодового дерева. На этом чертеже количество в каждой единице кодирования дает порядок обработки каждой соответствующей единицы кодирования этого блока кодового дерева.
Расширение диапазона HEVC, также обычно называемое RExt HEVC, является расширением нового стандарта кодирования видео HEVC для предусмотрения расширенных форматов видео.
Цель этого расширения состоит в обеспечении дополнительных инструментов для кодирования видеопоследовательностей с дополнительными цветовыми форматами и битовой глубиной и, возможно, без потерь. В частности, это расширение выполнено для поддержки цветового формата 4:2:2, а также видеоформата 4:4:4 дополнительно к видеоформату 4:2:0 (см. фиг.4). Цветное изображение в общем случае состоит из трех цветовых компонентов R, G и B. Эти компоненты в общем случае коррелируют, и очень распространенной в сжатии изображения и видео является декорреляция цветовых компонентов перед обработкой изображений. Наиболее распространенным форматом, который декоррелирует цветовые компоненты, является цветовой формат YUV. Сигналы YUV обычно создаются из RGB-представления изображений путем применения линейного преобразования к входным кадрам с тремя входными сигналами R, G и B. Y обычно называется компонентом яркости, U и V в общем случае называются компонентами цветности. Термин "YCbCr" также обычно используется вместо термина "YUV".
Является распространенным использование различных соотношений сэмплирования для трех цветовых компонентов. Схема подсэмплирования обычно выражается как соотношение из трех частей J:a:b (например, 4:2:2), которое описывает количество сэмплов яркости и цветности в концептуальной области, которая J пикселов в ширину и 2 пиксела в высоту. Частями являются (в их соответственном порядке):
J: ссылка горизонтального сэмплирования (ширина концептуальной области) (обычно 4).
a: количество сэмплов цветности (Cr, Cb) в первом ряду из J пикселов.
b: количество (дополнительных) сэмплов цветности (Cr, Cb) во втором ряду из J пикселов.
Фиг.4 изображает различные рассматриваемые форматы цветности в RExt HEVC. Эти форматы различаются ввиду разного размера картинки из трех цветовых компонентов и разного типа цветовых компонентов.
В формате цветности 4:2:0 YUV, если область компонента Y имеет ширину, равную W пикселов, и высоту, равную H пикселов, обе области компонентов U и V имеют ширину, равную W/2 пикселам, и высоту, равную H/2 пикселам.
В формате цветности 4:2:2 YUV, если область компонента Y имеет ширину, равную W пикселов, и высоту, равную H пикселов, обе области компонентов U и V имеют ширину, равную W/2 пикселов, и высоту, равную H пикселов.
В формате цветности 4:4:4 YUV или формате цветности RGB области для трех цветовых компонентов имеют одну и ту же ширину W и высоту H.
Когда картинка монохромная, ее формат называется 4:0:0.
В отношении битовой глубины, которая является количеством бит, используемых для кодирования каждого цветового компонента пиксела, если текущий стандарт HEVC имеет возможность работать с цветовым форматом 4:2:0 с битовой глубиной 8 и 10 бит (т. е. 256-1 024 возможных цветов), RExt HEVC будет выполнен с возможностью дополнительно поддерживать видеоформат 4:2:2 и 4:4:4 с расширенной битовой глубиной, имеющей диапазон от 8 бит вплоть до 16 бит (т. е. вплоть до 65 536 возможных цветов). Это особенно полезно, чтобы иметь больший динамический диапазон цветовых компонентов.
RExt HEVC также выполнен для обеспечения кодирования без потерь входных последовательностей; это делается для того, чтобы иметь декодированный выход 209, строго идентичный входу 101. Для достижения этого некоторое количество инструментов было модифицировано или добавлено по сравнению со стандартным кодеком HEVC с потерями. Неполный список примерных модификаций или добавлений для оперирования без потерь здесь обеспечен ниже:
- удаление этапа 108 квантования (203 в декодере);
- форсированная активация обходного преобразования, поскольку нормальные косинус/синус-преобразования 107 могут вносить ошибки (204 в декодере);
- удаление инструментов, конкретным образом предназначенных для компенсации шума квантования, таких как постфильтрация 115 (207 в декодере).
Дополнительные инструменты в текущий момент проектируются, чтобы эффективно кодировать видеопоследовательности "содержимого экрана" дополнительно к естественным последовательностям в новом расширении, называемом кодирование содержимого экрана (SCC) HEVC, которое рассматривается для стандартизации. Видеопоследовательностями "содержимого экрана" называются конкретные видеопоследовательности, которые имеют очень конкретное содержимое, соответствующее захваченному от персонального компьютера или любого другого устройства, содержащее, например текст, презентацию PowerPoint, графический интерфейс пользователя, таблицы (например, снимки экрана). Эти конкретные видеопоследовательности в общем случае в формате 4:4:4 имеют довольно различные статистические данные по сравнению с естественными видеопоследовательностями. В кодировании видео производительность стандартных инструментов кодирования видео, включающих в себя HEVC, иногда оказывается невыдающейся при обработке таких последовательностей "содержимого экрана".
Инструменты, в текущий момент рассматриваемые в SCC HEVC для обработки видеопоследовательностей "содержимого экрана", включают в себя режим внутренней копии блока и режим палитры. Прототипы для этих режимов продемонстрировали хорошую эффективность кодирования по сравнению со стандартным способом, направленным на естественные видеопоследовательности. В этом документе делается фокус на режиме кодирования палитры.
Осуществление режима палитры SCC HEVC основано на предсказании. Оно может безразличным образом применяться к любым другим способам кодирования без потерь или с потерями. Это означает, что способ палитры используется для построения предсказывающего параметра для кодирования некоторой заданной единицы кодирования подобно предсказанию, выполняемому предсказанием движения (промежуточный случай) или внутренним предсказанием. После генерирования предсказывающего параметра остаточная единица кодирования преобразуется, квантуется и кодируется. Иными словами, те же самые процессы, как описанные выше со ссылками на фиг.1 и 2, применяются.
В другом осуществлении, описанном ниже со ссылками на фиг.7, блок, построенный с режимом палитры, непосредственно кодируется в битовом потоке без содержания какого-либо остатка.
Палитра в общем случае представлена таблицей, содержащей конечный набор N-кортежей цветов, причем каждый цвет определен своими компонентами в некотором заданном цветовом пространстве (см., например, 803 на фиг.8 на основе цветового пространства YUV). Например, в типичном формате 4:4:4 RGB палитра состоит из списка P элементов N-кортежей (где N=3 для RGB). Более точно, каждый элемент соответствует фиксированному триплету цветовых компонентов в формате RGB. Разумеется это не ограничивается цветовым форматом RGB или YUV. Любой другой цветовой формат может быть представлен палитрой и может использовать меньшее или большее количество цветовых компонентов, что означает, что N может отличаться от 3.
На стороне кодера режим палитры, рассматриваемый в SCC, состоит в преобразовании значений пикселов некоторой заданной входной единицы кодирования в индексы, называемые уровнями, определяющие записи в ассоциированной палитре. После преобразования получающаяся в результате единица кодирования или блок индексов составляется из уровней и затем передается декодеру с ассоциированной палитрой, причем в общем случае таблица имеет конечное количество триплетов цветов, используемых для представления единицы кодирования. Поскольку палитра определяет конечное количество цветов, преобразование в блок индексов обычно является приближением для исходной входной единицы кодирования.
Для применения режима палитры на стороне кодера, примерный способ для преобразования единицы кодирования пикселов выполняется следующим образом:
- найти P триплетов, описывающих лучшим образом единицу кодирования пикселов для кодирования, например путем минимизации общего искажения;
- затем ассоциировать с каждым пикселом единицы кодирования ближайший цвет из P триплетов: значение для кодирования (или уровень) тогда является индексом, соответствующим записи ассоциированного ближайшего цвета;
- дополнительно, может быть целесообразно не использовать палитру, если значение пиксела, обрабатываемое в текущий момент, далеко от любой записи палитры. В такой ситуации SCC обеспечивает кодирование пиксела кодом перехода, что означает явное кодирование его значения пиксела (пиксел, закодированный кодом перехода) в битовом потоке после применения этапа квантования.
Для каждой единицы кодирования палитра (т. е. найденные P триплетов), блок индексов или уровней, закодированные кодом перехода пикселы (сохраненные в блоке "переходные пикселы") и опционально остаток, представляющий разницу между исходной единицей кодирования и блоком индексов в пространстве цветов (который является предсказывающим параметром блока), кодируются в битовом потоке 110 и посылаются декодеру.
В декодере режим палитры состоит в оперировании преобразованием обратным образом. Это означает, что каждый декодированный индекс, ассоциированный с каждым пикселом единицы кодирования, замещается соответствующим цветом палитры или значениями переходных пикселов (в зависимости от того, было ли применено кодирование кодом перехода), декодируется из битового потока для того, чтобы сгенерировать соответствующий цвет для каждого пиксела единицы кодирования. Это построение блока индексов в пространстве цветов в декодере.
Фиг.6 дополнительно иллюстрирует принцип первого осуществления режима кодирования палитры в декодере. Режим кодирования для текущей единицы кодирования извлекается на этапе 602 из битового потока 601. В текущий момент режим палитры идентифицирован флагом, расположенным перед флагом пропуска в битовом потоке (другие режимы кодирования были описаны выше со ссылками на фиг.1 и 2). Этот флаг кодируется методом CABAC с использованием единственного контекста. Если этот режим является режимом 603 палитры, то соответствующий синтаксис режима палитры 605, т. е. информация о палитре, блок уровней, блок переходных пикселов и опционально остаток, извлекается и декодируется 604 из битового потока 601.
Затем в течение этапа 606 два элемента строятся из декодированных данных: палитры 607 и блока 608 уровней. Из этого блока уровней и ассоциированной палитры предсказывающий параметр единицы кодирования в области 610 пикселов строится 609. Это означает, что для каждого уровня блока уровней цвет (RGB или YUV) ассоциирован с каждым пикселом.
Затем остаток единицы кодирования декодируется 611 из битового потока 601. В текущем осуществлении режима палитры остаток, ассоциированный с режимом палитры, кодируется с использованием общего способа промежуточного кодирования остатка HEVC, т. е. с использованием кодирования Голомба. Для получения остатка 612 единицы кодирования стандартное обратное квантование и обратное преобразование выполняются. Предсказывающий параметр 610 блока добавляется 613 к этому остатку 612 единицы кодирования для того, чтобы сформировать реконструированный блок 614 кодирования.
Вариант SCC HEVC предсказания режима палитры с фиг.6 теперь описывается со ссылками на фиг.7, где 701-708 в основном подобны 601-608.
В этом варианте нет остатка и предсказания как таковых, что означает, что только пикселы, которые могут быть надлежащим образом представлены палитрой, кодируются с использованием соответствующей записи режима палитры.
В этом конкретном контексте пикселы, которые не могут быть надлежащим образом представлены палитрой, кодируются иначе, без ссылки на цветовую запись палитры. Вместо использования записи палитры, квантованное значение пиксела явным образом передается. Такие пикселы известны как "значения перехода" или "закодированные кодом перехода пикселы", как упомянуто выше. Этот режим перехода обеспечивает эффективный способ обрабатывать очень редкие пикселы без использования какой-либо записи палитры для их сигнализирования и, таким образом, без траты записи палитры (палитра может быть ограниченной по размеру).
Когда пиксел кодируется в качестве значения перехода, флаг перехода, описанный ниже, устанавливается на предварительно определенное значение, чтобы обеспечить возможность для декодера определять, какие пикселы единицы кодирования закодированы кодом перехода и какие пикселы той же самой единицы кодирования кодируются с использованием записи палитры.
Пример сигнализации пикселов состоит в добавлении флага "перехода" перед элементом "предсказательный режим", указывающего, является ли пиксел закодированным в палитре (закодированным с использованием уровня из записи палитры) или закодированным кодом перехода (то есть с явным значением пиксела). За флагом "перехода" следует явное значение пиксела (никакие элементы "предсказательный режим", "уровень" и "серия" не обеспечиваются для этого пиксела).
В одном варианте информация "перехода" может использовать конкретное значение уровня (специализированное для "закодированных кодом перехода" пикселов) в блоке индексов, чтобы сигнализировать, какой пиксел является "закодированным кодом перехода" пикселом.
В любом варианте осуществления явные значения пикселов могут кодироваться предсказательным образом (например, в качестве разницы с соседним значением пиксела) или нет, с использованием кодирования переменной длины или нет и могут квантоваться или нет с возможными последствиями для энтропийного кодирования (по контексту и количеству бит и т. д.).
По сравнению с фиг.6 несколько этапов модифицировано.
Поскольку синтаксис немного изменен ввиду того, что никакой остаток не кодируется, этап 704 извлекает другой конкретный синтаксис 705 по сравнению с 605. Это так, поскольку в режиме палитры с фиг.7 значения пикселов кодируются с использованием режима палитры, только если они надлежащим образом представлены записью палитры. В противном случае, т. е. если значение пиксела не может быть закодировано с использованием режима палитры (например, поскольку он не может быть надлежащим образом представлен записью палитры или палитра достигла своего максимального размера и никакое новое значение не может быть добавлено), значение пиксела кодируется как значение перехода.
На этапе 706, подобно этапу 606 на фиг.6, три элемента строятся из декодированных данных: палитра 707, блок 708 уровней и блок значений переходных пикселов. На основе всех этих данных декодер имеет возможность генерировать 709 текущую единицу 714 кодирования, в частности путем повторного генерирования значений пикселов единицы кодирования с использованием палитры для непереходных пикселов и декодирования значений переходных пикселов из закодированного явного значения пиксела.
Фиг.8 изображает принцип режима палитры в кодере. Текущая единица 801 кодирования преобразуется в блок 802 того же самого размера, который содержит уровень для каждого пиксела вместо 3 цветовых значений (Y, U, V) или (R, G, B). Палитра 803, ассоциированная с этим блоком уровней, строится на основе минимизации общего искажения единицы кодирования и ассоциирует, с каждой записью, индекс записи или уровень, имеющий соответствующие цветовые значения пиксела. Следует заметить, что для монохромного приложения значение пиксела может содержать только один компонент.
Как упомянуто в отношении фиг.6 и 7, палитра (а также остаток только для фиг.6) кодируется и вносится в битовый поток для каждой единицы кодирования. Тем же самым образом, блок уровней или индексов кодируется и вносится в битовый поток, и пример его кодирования дается ниже со ссылками на фиг.9. В этом примере блок уровней обрабатывается в растровом порядке сканирования.
Блок уровней 91 в точности тот же самый, что и изображенный на фиг.8 с обозначением 802. Таблицы 92 и 93 описывают последовательные синтаксические элементы, используемые для кодирования блока уровней 91. Таблица 93 должна считываться в качестве продолжения таблицы 92. Синтаксические элементы в таблице соответствуют кодированию групп уровней, окруженных жирными линиями в блоке 91.
Блок уровней кодируется группой последовательных пикселов в растровом порядке сканирования. Каждая группа кодируется с использованием первого синтаксического элемента, дающего направление предсказания (т. е. режим предсказания или реконструкции, используемый для реконструкции индексов групп), опционального второго синтаксического элемента, дающего значение пиксела или пикселов, а именно уровня, третьего синтаксического элемента, дающего повторение. Повторение соответствует количеству пикселов в группе.
Эти две таблицы изображают текущий синтаксис, ассоциированный с режимом палитры. Эти синтаксические элементы соответствуют закодированной информации, ассоциированной в битовом потоке с блоком уровней 91. В этих таблицах три главных синтаксических элемента используются, чтобы полностью представить операции режима палитры, и используются следующим образом при последовательном рассмотрении уровней блока уровней 91.
Первый синтаксический элемент, называемый "предсказательным режимом", обеспечивает возможность различить два режима. В первом режиме, соответствующем флагу "предсказательного режима", равному "0", новый уровень используется для текущего пиксела. Уровень немедленно сигнализируется после этого флага в битовом потоке. Во втором режиме, соответствующем флагу "предсказательного режима", равному "1", используется режим "копировать сверху". Более конкретным образом, это означает, что текущий уровень пиксела соответствует уровню пиксела, расположенному в линии непосредственно выше, начиная от той же самой позиции, для растрового порядка сканирования. В таком случае флага "предсказательного режима", равного "1", нет необходимости сигнализировать уровень непосредственно после флага, поскольку значение уровня известно посредством ссылки на значение уровня пиксела непосредственно выше в блоке уровней 91.
Второй синтаксический элемент, называемый "уровень", указывает значение уровня палитры для текущего пиксела только в первом режиме "предсказательного режима".
Третий синтаксический элемент, называемый "серия", используется для кодирования значения повторения в обоих режимах "предсказательного режима". С учетом этого блок уровней 91 сканируется от верхнего левого угла к нижнему правому углу, ряд за рядом слева направо и сверху вниз, синтаксический элемент серия дает количество последовательных пикселов в блоке 91, имеющих одно и то же кодирование, т. е. количество индексов в группе индексов, к которым текущие синтаксические элементы применяются.
Этот синтаксический элемент "серия" имеет другое значение, которое зависит от флага "предсказательный режим". Когда предсказательный режим равен 0, элемент "серия" является количеством последовательных пикселов блока, имеющих одно и то же значение уровня. Например, если серия=8, это означает, что текущий "уровень" применяется к текущему пикселу и к следующим 8 пикселам, что соответствует 9 идентичным последовательным сэмплам в растровом порядке сканирования.
Когда предсказательный режим равен 1, элемент "серия" является количеством последовательных пикселов блока, имеющих значение уровня, соответствующее значению уровня их вышестоящего пиксела в блоке 91, т. е. где применяется режим "копировать сверху". Например, если серия=31, это означает, что уровень текущего пиксела копируется из пиксела с линии выше, а также следующие 31 пиксел, что соответствует 32 пикселам в целом.
В отношении таблиц 92 и 93, они представляют восемь этапов для кодирования блока 91 с использованием режима палитры. Каждый этап начинается с кодирования флага "предсказательный режим", за которым следует синтаксический элемент "уровень", когда флаг "предсказательный режим" равен "0", или синтаксический элемент "серия", когда флаг "предсказательный режим" равен "1". За синтаксическим элементом "уровень" всегда следует синтаксический элемент "серия".
Когда режим кодирования, декодируемый для текущего блока, является режимом палитры, декодер сначала декодирует синтаксис, относящийся к этому блоку, и затем применяет процесс восстановления для единицы кодирования.
Фиг.10 изображает процесс декодирования синтаксических элементов, относящихся к режиму палитры (этапы 605-606 или 705-706 выше). Сначала размер палитры извлекается и декодируется 1002 из битового потока 1001. Точный размер палитры (Размер_палитры) получается путем добавления 1 к этому значению размера, декодированному на этапе 1002. Действительно, размер кодируется посредством одноместного кода, для которого значение 0 имеет наименьшее количество бит (1 бит) и размер палитры не может быть равен 0, иначе никакое значение пиксела не может быть использовано для построения предсказывающего параметра блока.
Затем процесс, соответствующий декодированию значений палитры, начинается. Переменная i, соответствующая индексу палитры, устанавливается равной 0 на этапе 1004, затем испытание выполняется на этапе 1005 для проверки, равно ли i размеру палитры (Размер_палитры). Если это не так, один элемент палитры извлекается из битового потока 1001 и декодируется 1006 и затем добавляется к палитре с ассоциированным уровнем/индексом, равным i. Затем переменная i приращивается посредством этапа 1007. Если i равно размеру палитры 1005, палитра была полностью декодирована.
Далее процесс, соответствующий декодированию блока уровней 91, выполняется. Сначала переменная j, соответствующая счетчику пикселов, устанавливается равной 0, а также переменная синтаксис_i 1008. Затем проверка выполняется, чтобы узнать, соответствует ли счетчик пикселов количеству пикселов, содержащихся в блоке (известному, поскольку разбивка блока кодового дерева на единицы кодирования известна декодеру - см. фиг.5). Если получается ответ "да" на этапе 1009, процесс заканчивается на этапе 1017, иначе значение флага "предсказательный режим", соответствующее одному режиму предсказания, извлекается из битового потока 1001 и декодируется 1010.
Значение "предсказательного режима" добавляется к таблице по индексу синтаксис_i, содержащей все декодированные значения "предсказательного режима". Если значение этого "предсказательного режима" равно 0, синтаксический элемент, соответствующий "уровню", извлекается на этапе 1011 из битового потока 1001 и декодируется 1012. Эта переменная "уровень" добавляется к таблице по индексу синтаксис_i, содержащему все декодированные уровни. Переменная j, соответствующая счетчику пикселов, приращивается на один 1013.
Далее синтаксический элемент "серия" декодируется на этапе 1014. Если синтаксический элемент "предсказательный режим" равен 1, этап 1011, значение "серии" также декодируется на этапе 1014. Этот синтаксический элемент "серия" добавляется к таблице по индексу синтаксис_i, содержащей все декодированные серии.
Далее на этапе 1015 значение j приращивается на значение серии, декодированное на этапе 1014. Переменная синтаксис_i приращивается на один для рассмотрения следующего набора синтаксических элементов. Если счетчик j равен количеству пикселов в блоке (т. е. последний набор синтаксических элементов для текущей единицы кодирования был обработан), то синтаксис для построения блока уровней 91 закончен 1017. В конце этого процесса, относящегося к палитре, декодеру известна палитра и таблицы, содержащие список всех синтаксических элементов "предсказательный режим", "уровень" и "серия", ассоциированных с режимом палитры этой единицы кодирования. Декодер может затем переходить к процессу восстановления единицы кодирования, как описано посредством фиг.6 или 7.
Здесь следует напомнить, что конкретное значение индекса в блоке индексов (причем этот индекс соответствует записи палитры, не имеющей значения пиксела, ассоциированного с ней) может быть использовано для помечания флагом закодированных кодом перехода пикселов, и явные закодированные кодом перехода значения извлекаются из битового потока.
Исключительно в иллюстративных целях, кодовые слова, которые могут быть ассоциированы с каждым синтаксическим элементом, даны ниже. Разумеется, другие кодовые слова могут быть использованы для получения лучшей эффективности кодирования.
Каждый элемент палитры, составляемый тремя значениями (YUV или RGB) в вышеупомянутых примерах, в общем случае кодируется с использованием трех двоичных кодов (декодируемых на этапе 1016). Длина двоичных кодов соответствует битовой глубине каждого цветового компонента (8 бит для представления 256 значений).
Размер палитры, декодированный на этапе 1002, обычно кодируется с использованием одинарного кода.
Элемент "предсказательный режим" кодируется с использованием одного бита.
Элемент "Уровень" кодируется с использованием двоичного кода или усеченного двоичного кода.
В вариантах осуществления изобретения элемент "серия" кодируется с использованием кодов переменной длины. Например, некоторые значения для элемента серия кодируются с использованием коротких кодовых слов, а другие значения кодируются с использованием других кодовых слов, составленных из общего префикса кодового слова и суффикса кодового слова, который различается между одним кодовым словом и другим.
Таблица ниже обеспечивает пример кодовых слов для элемента серия.
Значения "серии"
Кодовое слово
0
'0'
1
'10'
2
'110'
>2
Префикс='111'и суффикс=усеченный код Райса, cПараметр Райса=3
Фиг.15 изображает алгоритм для кодирования элемента "серия" согласно этой таблице, в которой кодовое слово, используемое для кодирования значения "серии", зависит от упомянутого значения.
В этом примере три первых возможных значения для элемента серия, т. е. 0, 1 и 2, кодируются с использованием коротких кодовых слов (разумеется, большего или меньшего первых возможных значений могут касаться короткие значения кодирования), и другие (и последующие) возможные значения для элемента серия кодируются с использованием других кодовых слов, составленных из общего префикса кодового слова и из суффикса кодового слова, который различается между одним возможным кодовым словом и другим.
Это проектирование кодовых слов отдает приоритет трем первым значениям (0, 1 и 2) для элемента серия, которые обычно очень часты в режиме палитры. Как следствие, другие и высокое значения для элемента серия используют довольно длинные кодовые слова.
Как показано на чертеже, первая проверка выполняется на этапе 1501, где значение сравнивается с 0. Если значение равно 0, кодовое слово "0" генерируется на этапе 1502, и кодирование текущего элемента серия заканчивается на этапе 1509.
Если ответ на этапе 1501 отрицательный, второе испытание выполняется на этапе 1503, чтобы узнать, равно ли значение серии 1. Если ответ положительный, кодовое слово "10" генерируется на этапе 1504, и следующим этапом является 1509.
Если значение серии не равно 1, дополнительное испытание выполняется на этапе 1505, где значение серии сравнивается с 2. Если значение серии равно 2, кодовое слово "110" генерируется на этапе 1506, и следующим этапом является 1509.
Если ответ на этапе 1505 отрицательный, код префикса "111" генерируется, и значение серии кодируется с использованием усеченного кода Райса порядка 3 (где символ для кодирования является значением элемента серия минус 3) на этапе 1508. За этапом 1508 затем следует этап 1509, который завершает кодирование значения серии.
Можно отметить, что кодовые слова (либо короткие кодовые слова "0", "10", "110" и кодовые слова типа префикс+суффикс "111x...x") могут быть непосредственно внесены в битовый поток или могут быть закодированы посредством арифметического энтропийного кодера, такого как CABAC, для уменьшения окончательного размера информации по отношению к кодированию значений серии.
Фиг.16 изображает другой алгоритм для кодирования элемента "серия", который обеспечивает короткое кодовое слово только для значения серии "0" и, таким образом, включает в себя меньше этапов, чем фиг.15.
Процесс начинается на этапе 1601, в течение которого значение серии сравнивается с 0. Если ответ положительный, кодовое слово "0" генерируется на этапе 1602 и кодирование текущего элемента серия заканчивается на этапе 1605.
Если ответ на этапе 1601 отрицательный (значение серии отличается от 0), кодовое слово "1" генерируется на этапе 1603 для формирования кода префикса "1", общего для всех значений серии, отличных от "0". Далее значение серии кодируется, на этапе 1604, с использованием усеченного экспоненциального кода Голомба k-го порядка, где символом для кодирования является значение элемента серия минус 1, и порядок k вычисляется с учетом размера единицы кодирования и текущей позиции сканирования текущего элемента серия. Далее кодирование текущего элемента серия заканчивается на этапе 1605.
Фиг.11 изображает процесс восстановления для построения блока уровней 91 и затем соответствующего блока в пространстве цветов (который должен быть использован как предсказывающий параметр для первого осуществления режима палитры или который является декодированной текущей единицей кодирования для другого осуществления режима палитры). Входными данными этого процесса являются таблицы, полученные в процессе с фиг.10 выше и содержащие список "предсказательный режим", "уровень" и "серия". Дополнительными входными данными является размер единицы 801 кодирования (который тот же самый, что и размер блока уровней 802/91), известный из квадродерева (фиг.5), сигнализируемый в битовом потоке.
На первом этапе 1101 переменная i, представляющая счетчик пикселов, устанавливается равной 0, и переменная j для последовательного рассмотрения каждого набора синтаксических элементов также устанавливается равной 0. На этапе 1104 элемент Предсказательный_режим[j], извлеченный из таблицы "предсказательного режима" по индексу j, сравнивается с нулем 0.
Если он равен 0, новый уровень кодируется для текущего пиксела i. Как следствие, значение пиксела в позиции i устанавливается равным уровню по индексу j из таблицы уровней; Блок[i]=Уровень[j]. Это этап 1105. Переменная i приращивается на один на этапе 1106 для рассмотрения следующего пиксела, и переменная k, специализированная для подсчета пикселов, уже обработанных в текущей серии, устанавливается равной 0 на этапе 1107.
Проверка выполняется на этапе 1108 для определения, равно ли k элементу "серия" таблицы серий по индексу j: k=Серия[j]? Если не равно, уровень пиксела в позиции i устанавливается равным значению уровня пиксела в позиции i-1: Блок[i]=Блок[i-1]. Это этап 1109. Переменная i и переменная k затем приращиваются на один на соответственных этапах 1110 и 1111. Если k=Серия[j] на этапе 1108, распространение левого значения уровня заканчивается, и выполняется этап 1120 (описанный ниже).
Если Предсказательный_режим[j] отличен от 0 на этапе 1104, режим "копировать сверху" начинается с переменной k, устанавливаемой равной 0 на этапе 1112. Далее этап 1113 проверяет, верно или нет, что (k-1) равно элементу "серия" таблицы серий на индексе j: k=Серия[j]+1? Если не равно, значение уровня пиксела в позиции i устанавливается равным значению уровня пиксела в позиции i в линии выше: Блок[i]=Блок[i-ширина], где "ширина" является шириной блока уровней (того же самого, что и единица кодирования), выводимой из входного размера единицы кодирования. Это этап 1114. Далее каждая из переменной i и переменной k приращивается на один на соответственных этапах 1115 и 1116. Если k=Серия[j]+1 на этапе 1113, режим предсказания "копировать сверху" завершается, и процесс переходит к этапу 1120.
На этапе 1120 проверка выполняется для определения, равна ли переменная i количеству пикселов в блоке 91/CU 801. Если не равна, переменная j приращивается на один на этапе 1121 для рассмотрения следующего набора синтаксических элементов, и процесс возвращает цикл к этапу 1104, описанному выше.
Если все пикселы были обработаны на этапе 1120, последний блок уровней 91 получается на этапе 1122: это соответствует таблице Блок[]. Затем последний этап 1123 (соответствующий этапу 709, например) состоит в преобразовании каждого уровня в цветовые значения с использованием палитры 803, декодированной с использованием процесса с фиг.10. Этот последний этап влияет на значения пикселов (Y, U, V) или (R, G, B) в каждой позиции блока согласно уровню этой позиции в блоке и соответствующим записям в палитре.
Следует заметить, что именно в течение этапа 1123 переходные пикселы преобразуются в их точные значения пикселов. Режим перехода может сигнализироваться с использованием конкретного значения таблицы уровней. Например, если палитра содержит 32 элемента, последнее значение (31) может быть использовано, чтобы сигнализировать режим перехода, и никакая запись палитры не ассоциируется с этим конкретным значением, что значит, что переходный пиксел определен в блоке уровней с использованием значения (последнего значения), которое не ассоциировано со значением пиксела в палитре.
Таким образом, для определения переходных пикселов этап 1123 сравнивает Блок[j] с конкретным значением, назначенным, чтобы сигнализировать переходные пикселы. Для каждого из этих переходных пикселов этап 1123 извлекает соответствующее точное значение пиксела из единицы кодирования переходных пикселов 710.
В вариантах осуществления режим перехода может сигнализироваться с использованием конкретного значения уровня, причем за этим значением следуют значения трех цветовых компонентов, определяющие точное значение пиксела.
Дополнительно, если переходные пикселы квантуются в кодере, этап деквантования выполняется на этапе 1123.
Другие аспекты режима палитры, представленные в SCC HEVC, касаются определения кодером палитры, которая должна быть использована для кодирования текущей единицы кодирования (см. фиг.12 ниже), и выбора синтаксических элементов предсказательный режим, уровень и серия в кодере (см. фиг.13 ниже).
Фиг.12 изображает примерный алгоритм определения палитры в кодере. Входными данными этого процесса являются исходная единица кодирования пикселов и ее размер единицы кодирования. В этом примере строится палитра YUV, но другие осуществления могут давать в результате палитру RGB, построенную тем же самым образом.
На первом этапе 1201 переменная j, представляющая счетчик пикселов, устанавливается равной 0, переменная "размер_палитры" для следования росту палитры по мере того, как она строится, также устанавливается равной 0, и переменная "TH", представляющая порог, определяется, например устанавливается равной 9 для кодирования с потерями или 0 в случае кодирования без потерь. Действительно, в кодировании без потерь квантование пропускается полностью, и QP искусственно устанавливается равным, например, 0. Это свойство отсутствия потерь может быть определено в уровне CU (синтаксический элемент cu_трансквант_обход_флаг присутствует и устанавливается равным 1, если синтаксический элемент трансквант_обход_разрешен_флаг в уровне набора параметров картинки (PPS-уровне) устанавливается равным 1).
i
В любом случае, следует напомнить, что если единица кодирования CU кодируется без потерь, то предел погрешности устанавливается равным 0, поскольку целью здесь является гарантировать, что уровень представляет пиксел без какого-либо несовпадения. Затем на этапе 1203 пиксел p, т. е. имеющий индекс i согласно порядку сканирования, считывается из исходной единицы 1204 кодирования. Затем переменная j устанавливается равной 0 на 1205, и на этапе 1206 проверка выполняется для определения, равен ли размер палитры переменной "j" (что значит, что все элементы палитры рассматриваемой палитры были рассмотрены).
i
i
Если размер палитры равен j, палитра по индексу "j" устанавливается равной значению пиксела p на этапе 1209. Это означает, что текущий пиксел p становится новым элементом в палитре, с индексом j, ассоциированным с ним. Точнее, следующее присвоение выполняется:
Y
Yi
PAL[j]=()
U
i
PAL[j]=(U)
V
i
PAL[j]=(V)
Y,U,V
где PAL являются тремя таблицами для хранения цветовых значений.
Размер палитры (Размер_палитры) приращивается на один на этапе 1210, и счетчик таблицы событий устанавливается равным 1 для индекса "размер палитры" на этапе 1211. Затем переменная i приращивается на один на этапе 1213 для рассмотрения следующего пиксела "i" текущей единицы кодирования. Проверка затем выполняется на этапе 1214 для определения, были ли обработаны все пикселы текущей единицы кодирования. Если они все были обработаны, процесс завершается этапом 1215 упорядочивания, объясненным позже, иначе следующий пиксел рассматривается на этапе 1203, описанном выше.
Ветвь обработки, составленная из этапов 1203-1206 и 1209-1211, итерационно рассматривает каждый пиксел блока для добавления к палитре нового элемента, имеющего значение рассматриваемого пиксела, каждый раз, когда рассматриваемый пиксел слишком далек от всех элемента или элементов, уже находящихся в рассматриваемой палитре (испытание 1207).
i
Возвращаясь к этапу 1206, если j отлично от размер_палитры, этап 1207 выполняется, где абсолютное значение, для каждого цветового компонента, разницы между p и элементом палитры по индексу j вычисляется. Формулы показаны на чертеже. Если все абсолютные разницы строго меньше предварительно определенного порога TH, счетчик событий, касающийся элемента "j" в палитре, приращивается на один на этапе 1212. Этап 1207 создает класс для каждого рассматриваемого элемента палитры, причем такой класс охватывает цвета, соседние с цветом элемента, с учетом запаса TH. Таким образом, этап 1212 подсчитывает возникновения каждого класса. За этапом 1212 следует этап 1213, уже описанный.
Ветвь обработки, составленная из этапов 1203-1207 и 1212, итерационно рассматривает каждый пиксел блока для приращения счетчика, ассоциированного с элементом палитры, который достаточно близок к рассматриваемому пикселу.
Если условие этапа 1207 не удовлетворяется, переменная j приращивается на один на этапе 1208 для рассмотрения следующего элемента палитры в рассматриваемой палитре. Это предназначено для сравнения других цветовых элементов палитры с текущим пикселом посредством нового возникновения этапа 1207. Если никакой элемент в палитре не удовлетворяет критерию этапа 1207, новый элемент добавляется к палитре, как описано выше со ссылками на этапы 1209, 1210 и 1211.
Можно заметить, что модуль 1207 принятия решения может сравнивать каждый цветовой компонент для последовательностей 4:4:4 (YUV или RGB) и может сравнивать только либо цветовой компонент яркости, либо цветовые компоненты цветности для последовательностей 4:2:0.
В конце процесса с фиг.12 таблица "счетчик" содержит количество возникновений классов, определенных соответственными элементами палитры. Затем элементы палитры упорядочиваются на этапе 1215 согласно их возникновениям так, чтобы наиболее частый элемент находился в первой позиции (запись с самым низким индексом или "уровнем") в палитре.
Можно также заметить, что размер палитры может быть ограничен максимальным размером, например 24 записи. В таком случае, если размер палитры, возникшей в результате этапа 1215, превосходит 24, палитра уменьшается путем удаления элементов (записей) из 25-й позиции в упорядоченной палитре. В результате этого палитра оказывается построена.
Переходя теперь к выбору синтаксических элементов предсказательный режим, уровень и серия в кодере, входными данными процесса с фиг.13 являются исходная единица кодирования пикселов, палитра, построенная посредством процесса с фиг.12, и размер единицы кодирования. В частности, эта оценка выполняется при определении, какой режим кодирования между внутренним кодированием, промежуточным кодированием и кодированием палитры должен быть использован.
На первом этапе 1301 переменная "i", представляющая счетчик пикселов, устанавливается равной 0. Процесс, описанный ниже, стремится определить синтаксические элементы для пикселов, начиная с i. Два режима предсказания оцениваются независимо: "предсказательный режим"=0 в правой части чертежа и "предсказательный режим"=1 в левой части чертежа.
Однако если эти режимы предсказания терпят неудачу, режим перехода, представленный выше, используется, чтобы явным образом кодировать одно или несколько значений пикселов.
копия
копия
копия
копия
Для предсказания "копировать сверху" (соответствующего "предсказательный режим"=1) переменная "i", используемая для подсчета количества уровней в текущей серии, устанавливается равной 0 на этапе 1303. Затем на этапе 1304 текущий уровень в местоположении пиксела i+i: Блок[i+i] - сравнивается с уровнем пиксела, расположенного непосредственно выше в линии выше: Блок[i+i-ширина], где "ширина" соответствует ширине текущей единицы кодирования.
копия
копия
Следует заметить, что уровень Блок[i+i] каждого пиксела единицы кодирования определяется параллельно на этапе 1308. Этот этап заключается в ассоциировании с пикселом в позиции i+i ближайшего элемента палитры (на практике его индекса или уровня), как уже объяснялось выше. В варианте этот этап может заключаться в выборе первого элемента палитры, для которого расстояние с пикселом в позиции i ниже предварительно определенного порога. Этот этап использует позицию i, палитру 1306 и исходную единицу 1307 кодирования.
Однако если текущее значение пиксела "далеко" от какой-либо записи палитры, этап 1350 выполняется, чтобы сигнализировать, что режим перехода активирован для этого пиксела. Режим перехода используется, когда, например, разница между значением цветового компонента пиксела и ближайшей записью в палитре превосходит некоторый заданный порог. После этапа 1350 счетчик пикселов i приращивается на один на этапе 1351 перед переходом цикла к этапу 1319.
В немного другом варианте этап 1350 является внутренним по отношению к этапу 1308 для назначения вышеопределенного конкретного значения уровня переходному пикселу, и этап 1351 удаляется. Этот подход обеспечивает возможность использования режимов предсказания "копировать сверху" и "левое значение", чтобы эффективно кодировать возникновения конкретного значения, используемого для сигнализирования переходных пикселов.
копия
копия
копия
копия
копия
копия
копия
копия
Если Блок[i+i]=Блок[i+i-ширина] на этапе 1304, переменная "i" приращивается на один на этапе 1305 для рассмотрения следующего значения пиксела блока пикселов и для указания, что текущий уровень пиксела в позиции i+i может быть включен в текущую серию "копировать сверху". Если Блок[i+i] отличен от Блок[i+i-ширина] на этапе 1304, что значит, что текущая оценка серии "копировать сверху" закончена, переменная "i" передается модулю 1314 принятия решения. На этой стадии процесса переменная "i" соответствует количеству значений, скопированных с линии непосредственно выше.
слева
Начало
слева
Для предсказания левого значения (соответствующего "предсказательный режим"=0) цикл для определения значения серии (i) обрабатывается параллельно или последовательно. Сначала переменная "i", используемая для сохранения индекса i текущего пиксела, устанавливается равной "i", и переменная "j", используемая для последовательного рассмотрения уровней пикселов, следующих за индексом "i", также устанавливается равной "i", и переменная "i", используемая для подсчета текущей рассматриваемой серии, устанавливается равной 0. Это этап 1309. Далее этап 1310 заключается в определении, верно или нет, что j!=0, и "Предсказательный_режим[j-1]"=0, и Блок[j]=Блок[j-1]. Предсказательный_режим[] является таблицей, используемой кодером для хранения режима предсказания (либо 1, либо 0 для соответственного предсказания "копировать сверху" и предсказания левого значения). Она заполняется прогрессивным образом на этапе 1317, описанном ниже, по мере того как последовательные пикселы обрабатываются, и была инициирована с нулевыми значениями, например, на этапе 1301: Предсказательный_режим[k]=0 для любого k.
слева
Если условие на этапе 1310 удовлетворяется, переменная "i" приращивается на один на этапе 1311 для указания, что текущий уровень пиксела в позиции j может быть включен в текущую серию "левого значения", и переменная j приращивается на один на этапе 1312 для рассмотрения следующего значения пиксела блока пикселов.
Начало
Начало
Начало
слева
Если условие на этапе 1310 не удовлетворяется, переменная "j" сравнивается с "i" для определения, является ли это первым значением пиксела, которое должно быть исследовано для текущей серии "левого значения". Это является этапом 1313. Если "j" меньше или равно "i", что значит, что это первое значение пиксела, которое должно быть исследовано для текущей серии, то она начинает текущую серию, и следующее значение пиксела считается на этапе 1312, описанном выше. Если "j" строго больше "i", что значит, что первое значение пиксела, отличное от значения пиксела текущей серии "левого значения", было обнаружено, переменная "i", которая соответствует длине текущей серии "левого значения", передается модулю 1314 принятия решения. Следует заметить, что, как в цикле для предсказания "копировать сверху", уровень Блок[i] в индексе i определяется в том же самом цикле на этапе 1308.
слева
копия
копия
копия
слева
После вычисления максимальной серии для "предсказания левого значения" и режима "копировать сверху", переменные "i" и "i" сравниваются на этапе 1314. Это предназначено для определения, верно или нет, что "i"!=0 и "i"+2 выше "i". Это является примерным критерием для выбора либо режима копирования сверху, либо режима предсказания левого значения. В частности, параметр "2", используемый для компенсации затрат скорости уровня режима предсказания левого значения, может быть немного изменен. В частности, добавочный параметр (2 в этом примере) может ставиться в зависимость от размера палитры (Размер_палитры), поскольку последний непосредственно относится к затратам уровня. В одном варианте осуществления операция "+2" удаляется, чтобы сравнение этапа 1314 проверяло: "i_копия!=0 && i_копия>i_слева". Этот вариант осуществления улучшает эффективность кодирования.
копия
слева
слева
копия
слева
копия
Условие на этапе 1314 означает, что если "i" равно 0 или меньше либо равно i-2, режим "предсказание левого значения" выбирается на этапе 1315. В этом случае переменная "ПредсказательныйРежим" устанавливается равной 0, и переменная серия устанавливается равной "i" на том же самом этапе 1315. С другой стороны, если "i" отлична от 0 и строго больше "i-2", режим "копировать сверху" выбирается на этапе 1316. В этом случае переменная "ПредсказательныйРежим" устанавливается равной 1, а переменная серия - равной i-1 на этапе 1316.
Затем таблицы, содержащие "предсказательный_режим" и "серия", в кодере обновляются с текущим значением "предсказательный_режим" и "серия" на этапе 1317. Затем следующая позиция, которая должна быть рассмотрена в блоке пикселов, вычисляется на этапе 1318, которая соответствует текущей позиции i с приращением на значение "серия"+1. Затем проверка выполняется на этапе 1319 для определения, были ли обработаны последние пикселы единицы кодирования. Если так, процесс заканчивается на этапе 1320, иначе оценка двух режимов предсказания "предсказание левого" и "копировать сверху" оцениваются, начиная с этапов 1303 и 1309 для следующей позиции пиксела для получения нового набора синтаксических элементов.
В конце этого процесса кодеру известны уровни для каждого сэмпла или пиксела единицы кодирования, и он имеет возможность кодировать соответствующий синтаксис блока уровней на основе содержимого трех таблиц Предсказательный_режим[], Блок[] и Серия[].
Для определения предсказывающего параметра блока кодер затем преобразует определенный блок уровней с использованием палитры и также использует список пикселов, которые сигнализируются как переходные пикселы на 1350.
Фиг.17 и 18 иллюстрируют примерные алгоритмы в кодере для кодирования синтаксического элемента серия в режиме палитры с тем же самым представлением, что и на фиг.15 и 16 соответственно. То есть входные данные те же самые.
В этих примерах алгоритма флаг (например, посредством кодового слова "до конца" для элемента серия) используется для указания, что текущая "серия" последняя, и применяется ко всем остальным индексам вплоть до конца текущей единицы кодирования, независимо от количества таких остальных индексов, т. е. без определения количества этих остальных индексов, формирующих группу индексов, соответствующих текущему и последнему набору синтаксических элементов. Этот подход обеспечивает возможность сберечь несколько битов по сравнению с ситуацией, когда более длинные кодовые слова необходимы для кодирования точного количества индексов для последней группы (которая часто велика по меньшей мере для последних единиц кодирования изображения, поскольку низ изображения обычно монотонный).
Согласно этому подходу синтаксический элемент серия, обеспеченный в каждом наборе, использует кодовое слово, выбранное из по меньшей мере двух доступных кодовых слов, включающих в себя кодовое слово "до конца" для указания, что индексы, формирующие соответствующую группу индексов, являются индексами во всех остальных позициях блока вплоть до конца блока индексов, независимо от количества таких остальных позиций блока. Кодовое слово "до конца" может, таким образом, быть установлено для элемента серия в последнем наборе, составляющем единицу кодирования. Но это не обязательно; стандартный подход, описанный выше, может все еще осуществляться для некоторых единиц кодирования.
Следует заметить, что двоичный флаг "до конца", отдельный от стандартного элемента серия, может быть обеспечен, чтобы сигнализировать подход "до конца". Однако такой двоичный флаг, комбинированный с любым стандартным кодовым словом для элемента серия, формирует кодовое слово встроенного элемента серия. Поэтому настоящее описание фокусируется на возможных кодовых словах для элемента серия.
Фиг.17 и 18 отличаться друг от друга кодовыми словами, используемыми для кодирования значений серии. Как показано на этих чертежах, синтаксический элемент серия в последнем наборе для текущей единицы кодирования использует кодовое слово "до конца", чтобы сигнализировать обеспечение возможности варианта "до конца" для текущего набора синтаксических элементов.
В одном варианте осуществления с фиг.17 этапы 1701-1707 идентичны соответствующим этапам с фиг.15 (этапам 1501-1507) и, таким образом, не описываются снова.
После генерирования кодового слова "111" на этапе 1707 (в этом месте процесса значение серии, которое должно быть закодировано, превосходит 2) этап 1708 заключается в определении, является ли текущая серия последней для текущей единицы кодирования (т. е. является ли текущий набор синтаксических элементов последним). Последняя серия означает, что никакая другая операция ("копировать сверху" или "левое значение") не будет выполняться над текущей единицей кодирования после кодирования этой последней серии, поскольку процесс достигает самого последнего пиксела единицы кодирования (фактически, самого последнего индекса блока уровней).
Например, последняя серия может быть обнаружена в течение процесса с фиг.13, когда испытание 1319 положительно. В таком случае последняя серия, сохраненная в памяти на этапе 1317, является последней для текущей единицы кодирования.
Если текущая серия является последней, идея настоящего варианта осуществления заключается в избегании сигнализации значения серии (которое часто высокое и, таким образом, может приводить к довольно длинному кодовому слову) путем кодирования, на этапе 1710, флага "1" в битовом потоке для указания, что обрабатывается последняя серия.
Если ответ отрицательный на этапе 1708, следующим этапом является этап 1709, где флаг "0" кодируется в битовом потоке, говорящий, что текущая серия не последняя. Далее значение серии минус 3 кодируется на этапе 1711 подобно этапу 1508.
В этой конфигурации общий префикс кодового слова, используемый для высоких значений элемента серия ("111", возникший в результате этапа 1707, комбинированного с этапом 1709), используется для формирования кодового слова "до конца". Далее суффиксная часть кодового слова "до конца" уменьшается до минимума, т. е. до одного бита (этап 1710): кодовое слово "до конца" включает в себя общий префикс кодового слова и включает в себя однобитный суффикс дополнительно к общему префиксу кодового слова.
Следует заметить, что флаг "до конца", описанный на этапах 1709 и 1710, может также кодироваться посредством арифметического энтропийного кодера, такого как CABAC, для улучшения эффективности кодирования способа, описанного изобретением.
В одном варианте осуществления с фиг.18 кодовое слово "до конца" также включает в себя общий префикс кодового слова, используемый для кодирования "других" значений серии (т. е. тех, у которых нет короткого кодового слова), и включает в себя однобитный суффикс дополнительно к общему двоичному значению префикса. Этапы 1801-1803 идентичны соответствующим этапам с фиг.16 (этапам 1601-1607) и, таким образом, не описываются снова.
После генерирования кодового слова "1" на этапе 1803 (что значит, что текущее значение серии отлично от 0), этап 1804 состоит в определении, является ли текущая серия последней для текущей единицы кодирования (подобно этапу 1708).
Если текущая серия является последней, идея настоящего варианта осуществления заключается в том, чтобы избежать сигнализации значения длины серии (которое часто высокое и, таким образом, может приводить к довольно длинному кодовому слову) путем кодирования, на этапе 1805, флага "1" в битовом потоке для указания, что обрабатывается последняя серия.
Если ответ отрицательный на этапе 1804, следующим этапом является этап 1806, где флаг "0" кодируется в битовом потоке, говорящий, что текущая серия не последняя. Далее значение серии кодируется на этапе 1807 подобно этапу 1604.
Фиг.17 и 18 изображают процесс с точки зрения кодера. Специалист в данной области техники непосредственно сделает вывод о соответствующем процессе декодирования в декодере. Это подразумевает синтаксический анализ битов из битового потока для получения кодового слова для элемента серия, либо предварительно определенного кодового слова, ассоциированного с определенным количеством индексов, либо кодового слова "до конца" согласно изобретению. Например, когда кодовое слово "до конца" обнаруживается на этапе 1014 процесса декодирования, значением серии, которое должно быть принято в расчет, может быть Пикселы_в_блоке-j, чтобы перевести процесс к этапу 1017, заканчивая его.
Примеры этих двух чертежей хранят приоритет в отношении первых (и наиболее частых) возможных значений для элемента серия (т. е. 0, 1 и 2 для фиг.17, и 0 для фиг.18). Это подразумевает обеспечение кодового слова "до конца", чтобы сигнализировать последнюю серию после этапов 1707 и 1803, соответственно.
Другие варианты могут обеспечивать этап 1708 между этапами 1703 и 1705 (в случае чего кодовым словом "до конца" является "110", например), или между этапами 1701 и 1703 (в случае чего кодовым словом "до конца" является "10", например), или даже перед этапом 1701 (в случае чего кодовым словом "до конца" является "0", например). Подобным образом, другой вариант для фиг.18 может обеспечивать этап 1804 перед этапом 1801 (в случае чего кодовым словом "до конца" является "0", например). В этих вариантах кодовое слово "до конца", которое должно быть использовано для элемента серия, чтобы сигнализировать последнюю серию, является коротким кодовым словом.
Случаи, где этапы 1708 и 1804 находятся перед этапами 1701 и 1801, соответственно, могут рассматриваться как варианты осуществления, где флаг "до конца" является отдельным от элемента серия и помещается непосредственно перед элементом серия.
Другие изобретательские улучшения SCC HEVC не описываются, которые не зависят от вышеупомянутой идеи использования флага "до конца", чтобы сигнализировать последнюю серию, но могут комбинироваться с ней для улучшения эффективности кодирования с использованием режима палитры.
Выше было видно, что в случае, когда некоторые пикселы не могут быть надлежащим образом представлены какой-либо записью палитры, они кодируются другим образом, а именно "кодируются кодом перехода", и конкретная сигнализация обеспечивается для отличия пикселов, закодированных посредством палитры, от переходных пикселов в текущей единице кодирования.
Режим перехода кодирования довольно затратный, поскольку он требует кодирования явного значения пиксела, таким образом, требуя множества битов, которые должны быть использованы. Это может быть убыточным для эффективности кодирования.
Дополнительно, снова со ссылкой на фиг.13, оценка режима палитры кодером требует, чтобы индекс (уровень) был найден в палитре для каждого пиксела единицы кодирования. Это этап 1308. Затраты обработки этого этапа могут оказаться высокими.
Для ограничения таких недостатков первое изобретательское улучшение предлагается для отмены оценки режима палитры, когда количество переходных пикселов достигает предварительно определенного порога. Затраты обработки для такой оценки, таким образом, существенно уменьшаются, как только степень сжатия становится низкой (поскольку каждый переходный пиксел требует много битов в битовом потоке). Действительно, если большое количество переходных пикселов необходимо для кодирования текущей единицы кодирования с режимом палитры, существует высокая вероятность того, что одновременный режим кодирования (внутренний или промежуточный) для единицы кодирования будет иметь лучший компромисс между искажением и скоростью и будет затем выбран кодером.
Таким образом, процесс согласно первому изобретательскому улучшению включает в себя этапы, на которых:
оценивают кодирование текущего блока пикселов для каждого из двух или более режимов кодирования, включающих в себя режим кодирования палитры, причем режим кодирования палитры использует текущую палитру для построения блока индексов, причем текущая палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов:
выбирают режим кодирования из двух или более режимов кодирования для кодирования текущего блока пикселов на основе оценок;
причем оценка кодирования текущего блока пикселов с использованием режима кодирования палитры содержит этапы, на которых: последовательно рассматривают пикселы текущего блока и для каждого рассматриваемого пиксела:
ищут в палитре запись палитры, имеющую соответствующее значение пиксела, достаточно близкое к рассматриваемому пикселу, с учетом порога расстояния;
кодируют рассматриваемый пиксел с использованием индекса записи, если в палитре найдена запись палитры, которая достаточно близка к рассматриваемому пикселу, с учетом порога расстояния; и
кодируют кодом перехода рассматриваемый пиксел, если в палитре не найдена запись палитры, которая достаточно близка к рассматриваемому пикселу, с учетом порога расстояния, причем кодирование кодом перехода включает в себя явное кодирование значения рассматриваемого пиксела (т. е. без предсказания для этого пиксела);
причем оценка кодирования текущего блока пикселов с использованием режима кодирования палитры отменяется, если количество закодированных кодом перехода пикселов превосходит предварительно определенный порог для текущего блока пикселов.
Второе изобретательское улучшение предлагается для ускорения оценки палитры путем сохранения последнего обработанного пиксела и соответствующего уровня палитры, чтобы способствовать повторному использованию такой сохраненной информации при низких затратах избыточности между последовательными пикселами. Исчерпывающий поиск индекса для каждого пиксела может, таким образом, избегаться.
Таким образом, процесс согласно второму изобретательскому улучшению включает в себя этапы, на которых:
строят блок индексов из текущего блока пикселов и текущей палитры, причем текущая палитра содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов:
кодируют блок индексов;
причем построение блока индексов для текущего блока пикселов содержит этапы, на которых, для каждого пиксела текущего блока пикселов, ищут в палитре запись палитры, имеющую соответствующее значение пиксела, достаточно близкое к рассматриваемому пикселу, с учетом порога расстояния; добавляют индекс записи найденной записи палитры к блоку индексов; и сохраняют текущий пиксел и индекс записи найденной записи палитры в памяти;
причем если значение текущего пиксела равно значению предшествующего пиксела в текущем блоке пикселов, извлекают индекс записи, сохраненный в памяти для предшествующего пиксела, и добавляют извлеченный индекс к блоку индексов в качестве индекса записи для текущего пиксела.
Первое и второе изобретательские улучшения могут комбинироваться или использоваться отдельно при использовании режима кодирования палитры.
Фиг.19 изображает комбинацию двух изобретательских улучшений для режима кодирования палитры. Кодер, зная текущую палитру, определяет уровни (или индексы), соответствующие пикселам. Это, например, этап 1308, описанный выше.
Этапы 1909, 1910 и 1914 осуществляют первое изобретательское улучшение, заключающееся в отмене оценки режима кодирования палитры в случае, когда слишком много пикселов кодируются кодом перехода, чтобы не тратить время обработки. Только ограниченное количество переходных пикселов, таким образом, одобряется для режима кодирования палитры.
Этапы 1920, 1921 и 1922 осуществляют второе изобретательское улучшение, заключающееся в отслеживании по меньшей мере последнего найденного индекса. В примере с чертежа только последний найденный индекс хранится в памяти, но то же самое может применяться для предпоследнего найденного индекса и так далее.
На начальном этапе 1901 переменная "i", представляющая счетчик пикселов, чтобы последовательно рассматривать каждый пиксел в текущей единице кодирования, инициализируется со значением 0, а также переменная "счетчик", используемая для подсчета количества переходных пикселов в текущей единице кодирования. Дополнительно, переменная "TH", определяющая порог счетчика, устанавливается равной значению, в идеальном случае зависящему от параметра квантования QP, используемого на этапе 108 (фиг.1). В последнюю, но немаловажную очередь переменная значения пиксела "последний" и переменная индекса "LIDX" устанавливаются равными "неопределенному" значению в памяти.
Далее на этапе 1903 текущий пиксел Pi считывается из исходной единицы 1904 кодирования. Текущий пиксел Pi сравнивается с текущим значением "последний" на этапе 1920, чтобы узнать, если текущее значение пиксела равно последнему обработанному пикселу.
Если они идентичны, индекс для текущего пиксела устанавливается равным LIDX на этапе 1921, что значит, что текущий пиксел имеет тот же самый индекс, что и последний обработанный пиксел.
Иначе лучший индекс ищется в палитре на этапе 1906 с использованием стандартного алгоритма поиска. Например, поиск может основываться на нахождении индекса, несущего наименьшую ошибку по сравнению с Pi, на основе, например, абсолютной ошибки максимального компонента, суммы абсолютных ошибок, суммы квадратов ошибок и т. д.
Далее этап 1907 проверяет, достаточно ли запись палитры, соответствующая найденному индексу (полученному либо алгоритмом поиска, либо с использованием LIDX), репрезентативна для Pi. Эта проверка может основываться на пороге TH, определенном выше: вышеупомянутая ошибка (вычисленная в течение поиска 1906) может сравниваться с TH (что значит, что если LIDX используется, проверка 1907 всегда будет положительной). Если ошибка ниже TH, индекс записи палитры считается репрезентативным.
Если запись палитры, соответствующая найденному индексу, достаточно репрезентативна для Pi, найденный индекс может быть использован на этапе 1911 для Pi, т. е. добавлен к блоку уровней. Затем процесс продолжается этапом 1922.
Иначе текущий пиксел Pi кодируется кодом перехода на этапе 1908, как объяснено выше. Это означает, что пиксел Pi сигнализируется как "переходный", и его значение явным образом кодируется. Далее счетчик перехода "счетчик" приращивается на этапе 1909.
На следующем этапе 1909 кодер проверяет, достиг ли счетчик перехода "счетчик" слишком высокого значения. Чтобы это сделать, на этапе 1910 он сравнивает счетчик с порогом, выгодным образом зависящим от количества пикселов в текущей единице кодирования.
В одном варианте осуществления пороговое значение представляет процент количества пикселов в текущей единице кодирования, например 10%, 20%, 25% или 30%.
Если оно оказывается слишком высоким, оценка палитры отменяется на этапе 1912: любая дополнительная обработка палитры (палитризация, определение серии, оценка скорости кодирования и так далее) пропускается.
Если оно не оказывается слишком высоким, процесс продолжается этапом 1922.
Для того чтобы ускорить поиск индекса, следующий этап 1922 заключается в сохранении в памяти текущего значения пиксела Pi и соответствующего найденного индекса, соответственно в "последнем" и "LIDX".
Далее, на этапе 1913, переменная i приращивается для рассмотрения следующего пиксела "i" текущей единицы кодирования.
Далее проверка выполняется на этапе 1914, чтобы узнать, были ли все пикселы текущей единицы кодирования обработаны. Если были, полная единица кодирования была "палитризована", и процесс заканчивается на этапе 1915. Иначе следующий пиксел рассматривается на этапе 1903, уже описанном.
В одном варианте варианта осуществления с фиг.19 пиксел, который располагается выше текущего пиксела в текущем блоке пикселов, может быть использован для этапов 1920 и 1922 вместо "последнего" пиксела, как определено выше. Чтобы это сделать, ассоциации между пикселами и индексами могут сохраняться в памяти для целого ряда единицы кодирования (т. е. заполняться в течение этапа 1922). Затем этап 1920 может извлекать ассоциации, соответствующие пикселу выше текущего пиксела, если он существует.
Фиг.20 изображает другую комбинацию двух изобретательских улучшений для режима кодирования палитры, возникающих в течение алгоритма определения палитры.
Входными данными для кодера являются текущая единица кодирования и ее размер. В примере с чертежа создается палитра YUV. Разумеется, специалист в данной области техники легко адаптирует этот пример для построения палитры RGB.
Алгоритм очень подобен алгоритму с фиг.19. Этапы 2003, 2004, 2006, 2007, 2013, 2014, 2020, 2021 и 2022 подобны этапам 1903, 1904, 1906, 1907, 1913, 1914, 1920, 1921 и 1922, соответственно. Этап 2001 подобен этапу 1901 за исключением того, что переменная "Размер_палитры" инициализируется равной 0, в то время как переменной счетчик больше не существует.
Этапы 2016 и 2018 осуществляют первое изобретательское улучшение. Этапы 2020, 2021 и 2022 осуществляют второе изобретательское улучшение.
Чтобы ускорить поиск индекса, как делается на фиг.19, текущий пиксел сравнивается с текущим значением "последнего" на этапе 2020. Если они идентичны, индекс для текущего пиксела устанавливается равным LIDX на этапе 2021. Иначе лучший индекс ищется в палитре на этапе 2006.
Процесс с фиг.20 отличается от процесса с фиг.19 после этапа 2007, где кодер проверяет, является ли запись палитры, соответствующая найденному индексу, достаточно репрезентативной для Pi.
Поскольку палитра определяется (процесс с фиг.20 принадлежит к алгоритму определения палитры), если проверка с этапа 2007 отрицательна, текущий пиксел Pi добавляется к палитре в качестве новой записи палитры на этапе 2009.
Иными словами, если никакая запись палитры не найдена в палитре, которая достаточно близка к пикселу Pi, с учетом порога расстояния, рассматриваемый пиксел Pi добавляется в качестве новой записи палитры в палитре, и добавляется соответствующий индекс записи к блоку индексов для рассматриваемого пиксела. Это означает, что новый элемент палитры устанавливается равным значению пиксела Pi, и текущий пиксел Pi становится записью палитры. Точнее, выполняется следующее присвоение:
Yi
i
i
PALY[j]=(); PALU[j]=(U); PALV[j]=(V), где Yi, Ui, Vi представляют цветовой компонент YUV для Pi.
Далее количество возникновений этой новой записи палитры устанавливается равным 1 на этапе 2010: Счетчик[Размер_палитры]=1. Далее переменная Размер_палитры приращивается на один на этапе 2011 перед переходом к этапу 2022.
Если индекс репрезентативен для пиксела (проверка 2007 положительна), любая информация, необходимая для определения палитры, обновляется на этапе 2002. В частности, счетчик для записи, соответствующей индексу (Счетчик[индекс]), приращивается. Процесс продолжается этапом 2022.
На этапе 2022 ассоциация между значением пиксела и найденным индексом сохраняется в памяти путем обновления переменных "последний" и "LIDX".
Далее переменная i приращивается на этапе 2013 для рассмотрения следующего пиксела "i" текущей единицы кодирования. Проверка выполняется на этапе 2014, чтобы узнать, были ли все пикселы текущей единицы кодирования обработаны.
Если не были, процесс продолжается этапом 2003, уже описанным.
Если были, процесс продолжается этапом 2015 постобработки построенной палитры. В этом месте процесса таблица "счетчик" содержит возникновения каждого элемента палитры.
Постобработка может учитывать их возникновения и статистику.
Пример постобработки описан выше со ссылками на этап 1215: например, элементы палитры упорядочиваются согласно их возникновениям (Счетчик[]) так, чтобы наиболее частый элемент был в первой позиции (запись с самым низким индексом или "уровнем") в палитре.
Далее, N первых элементов палитры могут сохраняться, а другие элементы палитры могут стираться. Например, если размер палитры ограничен максимальным размером, например 24 записи, построенная палитра, имеющая более 24 записей, уменьшается путем удаления элементов (записей) от 25-й позиции в упорядоченной палитре.
После этапа 2015 этап 2016 состоит в определении оценки количества пикселов текущей единицы кодирования, которые будут закодированы с использованием палитры, или оценки количества пикселов, которые будут явным образом закодированы (кодируемые кодом перехода пикселы) в битовом потоке, поскольку их соответствующие записи палитры были удалены на этапе 2015. Эти оценки могут быть легко получены путем суммирования значений возникновения (в Счетчике[]) для соответствующих (сохраненных или удаленных) записей палитры.
Этап 2016 также состоит в сравнении полученной оценки для переходных пикселов с предварительным определенным порогом (например, процентом от количества пикселов в единице кодирования). В случае, когда полученная оценка превосходит порог, слишком много закодированных кодом перехода пикселов предполагаются, и оценка режима палитры отменяется на этапе 2018. Иначе оценка режима палитры заканчивается верным образом на этапе 2017.
Еще одно изобретательское улучшение SCC HEVC может также сохранять время обработки путем, опять же, отмены процесса оценки, если он не важен. Это другое изобретательское улучшение может осуществляться независимо от или в комбинации с одним или несколькими изобретательскими улучшениями, описанными выше.
Это улучшение возникает в контексте, где кодирование текущей палитры включает в себя предсказание такой палитры с использованием предсказывающего параметра палитры. Таким образом, оно относится к способу для обработки текущего блока пикселов изображения с использованием режима кодирования палитры, причем режим кодирования палитры использует текущую палитру, которая содержит набор записей, ассоциирующих соответственные индексы записей с соответствующими значениями пикселов, причем способ содержит этап, на котором предсказывают текущую палитру из по меньшей мере одного предсказывающего параметра палитры. Например, предсказывающим параметром палитры может быть одна палитра, ранее использованная для обработки блоков пикселов в изображении, пример чего описан в одновременно находящейся на рассмотрении заявке GB 1403823.6.
Обычно два или более режима предсказания палитры для предсказания текущей палитры оцениваются для определения наилучшего.
Режим предсказания палитры заключается в том, чтобы текущая палитра была предсказана из ранее использованной палитры (т. е. для последней единицы кодирования, закодированной с режимом кодирования палитры). Каждый элемент/запись палитры, который используется повторно из ранее используемой палитры, сигнализируется кодером в битовом потоке посредством набора флагов, указывающих, какие записи используются повторно. Этот режим предсказания палитры оценивается на стороне кодера и называется нормальной оценкой палитры.
Другой режим предсказания палитры заключается в том, чтобы полностью использовать предшествующую палитру предшествующего блока пикселов в изображении в качестве текущей палитры для кодирования текущего блока пикселов. Иными словами, палитра фактически повторно использует все записи ранее использованной палитры. В этом случае флаг может быть использован в уровне единицы кодирования для указания, что единица кодирования повторно использует всю ранее использованную палитру, в случае чего никакие явные элементы палитры не передаются: палитра является просто одной из ранее закодированных посредством палитры CU. Этот режим предсказания палитры также оценивается на стороне кодера и называется оценкой совместного использования палитры.
Использование двух или более режимов предсказания палитры последовательно на стороне кодера может приводить к очень затратной оценке. В основном желательно обнаружить случаи, когда оценка совместного использования палитры неэффективна, и пропустить ее как можно раньше.
Это является целью этого третьего изобретательского улучшения, пример которого иллюстрируется посредством фиг.21, с изобретательскими этапами 1802-1808. Согласно этому улучшению, до выполнения оценки совместного использования палитры количество записей палитры предшествующей палитры, которые используются повторно в текущей палитре, определяется. На основе этого определения, оценка совместного использования палитры может пропускаться, т. е. оценка кодирования текущего блока пикселов с использованием первого режима предсказания палитры пропускается, если определяется, что количество повторно используемых записей палитры ниже предварительно определенного порога.
Входными данными процесса с фиг.21 является текущая палитра, которая полностью известна. Это может быть текущая палитра, когда нормальная оценка палитры 2101 заканчивается.
Когда нормальная оценка палитры была выполнена (2101), ее элементы палитры известны. Является ли режим кодирования палитры лучшим режимом кодирования для текущей единицы кодирования, проверяется на этапе 2102.
Если нет, мала вероятность, что использование совместного использования палитры что-то улучшит. Следовательно, процесс оценки палитры заканчивается на этапе 2110.
Если да, количество элементов из предыдущей палитры, повторно используемых в текущей палитре, подсчитывается посредством повторения цикла этапов 2103-2106.
Цикл подсчета инициализируется путем установления обеих из переменной "i", представляющей текущий индекс записи, и переменной "счетчик", представляющей количество повторно использованных элементов палитры, равными 0 на этапе 2103. Далее этап 2104 заключается в проверке, используется ли i-й элемент палитры из предыдущей палитры повторно. Если это так, количество повторно используемых элементов приращивается на этапе 2105, и процесс переходит к этапу 2106. Иначе процесс переходит непосредственно к этапу 2106.
Этап 2106 заключается в проверке, является ли i-й элемент палитры последним элементом предыдущей палитры. Если не является, следующий элемент палитры выбирается путем приращения "i" на этапе 2107 перед возвращением цикла к этапу 2104.
Если это последний элемент палитры предыдущей палитры, этап 2108 заключается в оценке, может ли быть пропущена оценка совместного использования палитры.
Простая проверка может заключаться в сравнении счетчика с текущим размером палитры, чтобы обеспечить, что минимальное соотношение текущих элементов палитры повторно используется перед авторизацией оценки совместного использования палитры.
Если минимальное соотношение не достигается (слишком мало элементов используется повторно), оценка палитры заканчивается на этапе 2110 без выполнения оценки совместного использования палитры. Последняя, таким образом, пропускается.
В противном случае (минимальное соотношение достигается) оценка совместного использования палитры выполняется на этапе 2109 стандартным образом, прежде чем закончить процесс на этапе 2110.
Фиг.14 изображает схематичную структурную схему вычислительного устройства 1400 для осуществления одного или нескольких вариантов осуществления изобретения. Вычислительное устройство 1400 может быть устройством, таким как микрокомпьютер, рабочая станция или легкое портативное устройство. Вычислительное устройство 1400 содержит шину связи, соединенную с:
- центральным процессором 1401, таким как микропроцессор, обозначаемым как CPU;
- оперативной памятью 1402, обозначаемой как RAM, для сохранения исполняемого кода способа по вариантам осуществления изобретения, а также реестрами, выполненными с возможностью записи переменных и параметров, необходимых для осуществления способа согласно вариантам осуществления изобретения, их емкость памяти может быть расширена опциональной RAM, соединенной с портом расширения, например;
- постоянной памятью 1403, обозначаемой как ROM, для сохранения компьютерных программ для осуществления вариантов осуществления изобретения;
- сетевым интерфейсом 1404, который обычно соединяется с сетью связи, по которой цифровые данные, которые должны быть обработаны, передаются или принимаются. Сетевой интерфейс 1404 может быть единственным сетевым интерфейсом или состоять из набора различных сетевых интерфейсов (например, проводных и беспроводных интерфейсов или различных видов проводных или беспроводных интерфейсов). Пакеты данных пишутся сетевому интерфейсу для передачи или считываются от сетевого интерфейса для приема под управлением программного приложения, запущенного в CPU 1401;
- пользовательским интерфейсом 1405, который может быть использован для приема входных данных от пользователя или для отображения информации пользователю;
- жестким диском 1406, обозначаемым как HD, который может быть обеспечен в качестве устройства хранения большой емкости;
- I/O-модулем 1407, который может быть использован для приема/посылания данных от/к внешним устройствам, таким как источник видео или дисплей.
Исполняемый код может сохраняться либо в постоянной памяти 1403, либо на жестком диске 1406, либо на сменном цифровом носителе, таком как, например, диск. Согласно варианту, исполняемый код программ может приниматься посредством сети связи, посредством сетевого интерфейса 1404, для того чтобы сохраняться в одном из средств хранения устройства 1400 связи, таком как жесткий диск 1406, прежде чем исполняться.
Центральный процессор 1401 выполнен с возможностью управления и направления исполнения инструкций или частей программного кода программы или программ согласно вариантам осуществления изобретения, причем эти инструкции сохраняются в одном из вышеупомянутых средств хранения. После включения, CPU 1401 имеет возможность исполнять инструкции из основной RAM-памяти 1402, относящиеся к программному приложению, после того как эти инструкции были загружены от программного ROM 1403 или жесткого диска (HD) 1406, например. Такое программное приложение, при исполнении CPU 1401, обеспечивает выполнение этапов блок-схем, изображенных на фиг.17-21.
Любой этап алгоритмов, изображенных на фиг.17-21, может осуществляться в программных средствах путем исполнения набора инструкций или программы программируемой вычислительной машиной, такой как PC ("персональный компьютер"), DSP ("процессор цифровых сигналов") или микроконтроллер; или иначе осуществляться в аппаратных средствах машиной или специализированным компонентом, таким как FPGA ("программируемая пользователем вентильная матрица") или ASIC ("специализированная интегральная цепь").
Хотя настоящее изобретение было описано выше со ссылками на конкретные варианты осуществления, настоящее изобретение не ограничивается конкретными вариантами осуществления, и специалисту в данной области техники будут очевидны модификации, которые находятся внутри объема настоящего изобретения.
Множество дополнительных модификаций и вариаций придут в голову специалистам в данной области техники при ссылке на вышеупомянутые иллюстративные варианты осуществления, которые даны исключительно в качестве примера и которые не предназначены для ограничения объема изобретения, которое определяется исключительно прилагаемой формулой изобретения. В частности, различные признаки от различных вариантов осуществления могут взаимно заменяться, где это уместно.
В формуле изобретения слово "содержащий" не исключает других элементов или этапов, и упоминание элемента в единственном числе не исключает множества. Сам факт того, что различные признаки перечисляются во взаимно различных зависимых пунктах формулы изобретения, не указывает, что комбинация этих признаков не может быть использована выгодным образом.