IMPROVED CODING OF THE SCREEN CONTENT WITH IMPROVED METHODS OF PALETTE AND INDEX CARD CODING
УСОВЕРШЕНСТВОВАННОЕ КОДИРОВАНИЕ СОДЕРЖИМОГО ЭКРАНА С УЛУЧШЕННЫМИ СПОСОБАМИ КОДИРОВАНИЯ ТАБЛИЦЫ ПАЛИТРЫ И ИНДЕКСНОЙ КАРТЫ

ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
[0001] Настоящее изобретение относится в целом к кодированию содержимого экрана, а более конкретно, к усовершенствованному кодированию содержимого экрана с улучшенным кодированием таблицы цветов (палитры) и индексной карты.
УРОВЕНЬ ТЕХНИКИ
[0002] Кодирование содержимого экрана создает новые проблемы для сжатия видео из-за его особых характеристик сигнала по сравнению с обычными видеосигналами. Существует несколько существующих методов для усовершенствованного кодирования содержимого экрана, например, согласование псевдострок, кодирование цветовой палитры, и внутренняя компенсация движения или внутреннее блочное копирование. Среди этих методов, согласование псевдострок показывает самый высокий выигрыш для кодирования без потерь, но со значительными накладными расходами, связанными со сложностью, и трудностями в режиме кодирования с потерей данных. Кодирование цветовой палитры разработано для содержимого экрана при допущении, что не захваченное камерой содержимое (например, сгенерированное компьютером содержимое) обычно содержит ограниченное количество отдельных цветов, а не непрерывные или близкие к непрерывным цветовые тона, найденные во многих видеопоследовательностях. Несмотря на то, что способы согласования псевдострок и кодирования цветовой палитры показали большой потенциал, внутренняя компенсация движения или внутреннее блочное копирование были приняты в рабочий проект (WD) версии 4 и эталонное программное обеспечение продолжающегося расширения диапазона Высокоэффективного Видеокодирования (HEVC) для кодирования содержимого экрана. Однако производительность кодирования внутреннего блочного копирования ограничена из-за его фиксированной блочной декомпозиции. Выполнение блочного сравнения (подобно оценке движения во внутреннем изображении) также значительно увеличивает сложность кодера как при вычислении, так и при доступе к памяти.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0003] В соответствии с одним вариантом осуществления, предоставлен способ для кодирования содержимого экрана. Способ состоит в том, что получают цветовую индексную карту на основе текущей единицы кодирования (CU). Способ также состоит в том, что кодируют цветовую индексную карту, где по меньшей мере часть цветовой индексной карты кодируется с использованием первого метода кодирования, где первый индикатор указывает значительное расстояние первого метода кодирования. Способ дополнительно состоит в том, что объединяют закодированную цветовую индексную карту и первый индикатор для передачи в приемник.
[0004] В соответствии с другим вариантом осуществления, предоставлен способ для декодирования содержимого экрана. Способ состоит в том, что принимают битовый видеопоток, содержащий цветовую индексную карту. Способ также состоит в том, что принимают первый индикатор. Способ дополнительно состоит в том, что декодируют по меньшей мере часть цветовой индексной карты с использованием первого метода декодирования, где первый индикатор указывает значительное расстояние первого метода декодирования. Кроме того, способ состоит в том, что восстанавливают пиксели, связанные с текущей единицей кодирования (CU), на основе цветовой индексной карты.
[0005] Другие варианты осуществления включают в себя устройства, выполненные с возможностью выполнения этих способов.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0006] Для более полного понимания настоящего изобретения и его преимуществ, далее будет приведена ссылка на последующие описания, взятые в соединении с прилагаемыми чертежами, где схожие номера обозначают схожие объекты, и на которых:
[0007] ФИГУРА 1 иллюстрирует функциональную структурную схему примерного передатчика, который выполняет процесс кодирования содержимого экрана в соответствии с этим изобретением;
[0008] ФИГУРА 2 иллюстрирует функциональную структурную схему примерного приемника, который выполняет процесс декодирования содержимого экрана в соответствии с этим изобретением;
[0009] ФИГУРА 3 иллюстрирует пример различных модулей и потока обработки с использованием таблицы палитры и индексной карты, в соответствии с этим изобретением;
[0010] ФИГУРА 4 иллюстрирует примерную единицу кодирования (CU) с цветовыми компонентами, показанными отдельно и упакованными;
[0011] ФИГУРА 5A иллюстрирует опорную таблицу палитры и текущую таблицу палитры для использования в процессе кодирования содержимого экрана;
[0012] ФИГУРА 5B иллюстрирует пример предсказания таблицы палитры с использованием соседних восстановленных блоков;
[0013] ФИГУРА 6 иллюстрирует примерную цветовую индексную карту для CU 64×64, в которой может использоваться горизонтальное или вертикальное сканирование;
[0014] ФИГУРА 7 иллюстрирует часть одномерного (1D) цветового индексного вектора после 1D поиска с использованием горизонтального сканирования;
[0015] ФИГУРА 8 иллюстрирует пример базового блока обработки пикселей, называемого модулем U_PIXEL;
[0016] ФИГУРА 9 иллюстрирует пример модуля U_ROW;
[0017] ФИГУРА 10 иллюстрирует пример модуля U_CMP;
[0018] ФИГУРА 11 иллюстрирует пример модуля U_COL;
[0019] ФИГУРА 12 иллюстрирует пример модуля U_2D_BLOCK;
[0020] ФИГУРА 13 иллюстрирует примеры горизонтального и вертикального сканирования для обработки индексной карты.
[0021] ФИГУРЫ 14A и 14B иллюстрируют примеры форматов 4:2:0 и 4:4:4 выборки цветности;
[0022] ФИГУРА 15 иллюстрирует пример процесса интерполяции из 4:4:4 в 4:2:0 и наоборот;
[0023] ФИГУРА 16 иллюстрирует пример обработки цветовой индексной карты с использованием буфера строки верхнего индекса или буфера строки левого индекса;
[0024] ФИГУРА 17 иллюстрирует способ для кодирования содержимого экрана в соответствии с этим изобретением; и
[0025] ФИГУРА 18 иллюстрирует способ для декодирования содержимого экрана в соответствии с этим изобретением.
ПОДРОБНОЕ ОПИСАНИЕ
[0026] ФИГУРЫ с 1 по 18, обсужденные ниже, и различные варианты осуществления, используемые для описания принципов настоящего изобретения в этом патентном документе, приведены лишь в качестве иллюстрации и не должны быть истолкованы никоим образом как ограничение объема изобретения. Специалисты в данной области техники поймут, что принципы изобретения могут быть реализованы в любом типе подходящим образом организованного устройства или системы.
[0027] Следующие документы и описания стандартов настоящим включены в материалы настоящего изобретения как если бы это было полностью сформулировано здесь:
[0028] T. Lin, S. Wang, P. Zhang, K. Zhou, «AHG7: Полноцветный (YUV444) словарь+гибридное расширение HEVCс двумя кодерами», Документ JCT-VC, JCTVC-K0133, Шанхай, Китай, Октябрь 2012 (далее «ССЫЛКА1»);
[0029] W. Zhu, J. Xu, W. Ding, «RCE Test 2: Многоступенчатая Карта Базового Цвета и Индекса», Документ JCT-VC, JCTVC-N0287, Вена, Австрия, Июль 2013 (далее «ССЫЛКА2»);
[0030] L. Guo, M. Karczewicz, J. Sole, «RCE3: Результаты Теста 3.1 на Режиме Палитры для Кодирования Содержимого Экрана», Документ JCT-VC, JCTVC-N0247, Вена, Австрия, Июль 2013 (далее «ССЫЛКА3»);
[0031] L. Guo, M. Karczewicz, J. Sole, «Не-RCE3: Режим Измененной Палитры для Кодирования Содержимого Экрана», Документ JCT-VC, JCTVC-N0249, Вена, Австрия, Июль 2013 (далее «ССЫЛКА4»);
[0032] D.-K. Kwon, M. Budagavi, «RCE3: Результаты теста 3.3 на Внутренней компенсации движения», Документ JCT-VC, JCTVC-N0205, Вена, Австрия, Июль 2013 (далее «ССЫЛКА5»);
[0033] C. Pang, J. Sole, L. Guo, M. Karczewicz, R. Joshi, «Не-RCE3: Внутренняя Компенсация Движения с 2-D MV», Документ JCT-VC, JCTVC-N0256, Вена, Австрия, Июль 2013 (далее «ССЫЛКА6»);
[0034] C. Pang, J. Sole, L. Guo, M. Karczewicz, R. Joshi, «Не-RCE3: Дружественная для Конвейера Внутренняя Компенсация Движения», Документ JCT-VC, JCTVC-N0254, Вена, Австрия, Июль 2013 (далее «ССЫЛКА7»);
[0035] D. Flynn, J. Soel and T. Suzuki, «Проект 4 Расширения Диапазона», JCTVC-L1005, Август 2013 (далее «ССЫЛКА 8»); и
[0036] H. Yu, K. McCann, R. Cohen, and P. Amon, «Призыв для предложения для кодирования содержимого экрана и медицинского визуального содержимого», SO/IEC JTC1/SC29/WG11 N13829, Июль 2013 (далее ʺССЫЛКА9ʺ).
[0037] Варианты осуществления этого изобретения предоставляют усовершенствованный процесс кодирования содержимого экрана с улучшенным кодированием таблицы палитры и индексной карты. Раскрытые варианты осуществления значительно превосходят текущую версию Высокоэффективного Видеокодирования (HEVC версии 2). Раскрытые варианты осуществления включают в себя несколько алгоритмов, которые специально предназначены для кодирования содержимого экрана. Эти алгоритмы включают в себя представление пикселей с использованием таблицы палитры (или, эквивалентно, цветовой таблицы), сжатия таблицы палитры, сжатия цветовой индексной карты, сравнения строк и остаточного сжатия. Варианты осуществления, раскрытые в материалах настоящей заявки, разработаны, согласованы и интегрированы в Расширение Диапазона HEVC (RExt) как будущие расширения HEVC для поддержки эффективного кодирования содержимого экрана. Однако эти варианты осуществления могли бы дополнительно или альтернативно быть реализованы с помощью существующих видеостандартов или других подходящих видеостандартов. Для простоты объяснения, HEVC RExt используется в материалах настоящей заявки в качестве примера для описания различных вариантов осуществления. Подобным образом, программное обеспечение HEVC RExt используется для реализации различных вариантов осуществления, чтобы продемонстрировать эффективность сжатия.
[0038] ФИГУРА 1 иллюстрирует функциональную структурную схему примерного передатчика, который выполняет процесс кодирования содержимого экрана в соответствии с этим изобретением. ФИГУРА 2 иллюстрирует функциональную структурную схему примерного приемника, который выполняет процесс декодирования содержимого экрана в соответствии с этим изобретением. Варианты осуществления передатчика 100 и приемника 200 приведены лишь для иллюстрации. Другие варианты осуществления передатчика 100 и приемника 200 могли бы быть использованы, не выходя из объема этого изобретения.
[0039] Передатчик 100 выполнен с возможностью выполнения процесса высокоэффективного сжатия цветовой палитры (CPC), который может быть выполнен на каждой единице кодирования (CU) или единице дерева кодирования (CTU) в битовом потоке. Как показано на ФИГУРЕ 1, передатчик 100 начинает с CU 101 в битовом потоке. CU представляет собой базовую рабочую единицу в HEVC и HEVC RExt и представляет собой квадратный блок пикселей, который включает в себя три цветовых компонента (например, RGB, YUV, XYZ, или тому подобное, как известно в данной области техники). Примерная CU 101 показана на ФИГУРЕ 3. CU 101 представляет собой CU 8 пикселей x 8 пикселей, которая включает в себя явное цветовое значение (например, 47, 48, 49 и т.д.) для каждого пикселя. В других вариантах осуществления, размер CU 101 может быть отличным от 8×8 пикселей (например, 16×16 пикселей, 32×32 пикселей и т.д.). В некоторых вариантах осуществления, передатчик 100 может начинать с CTU 101 вместо CU 101. Для простоты объяснения, передатчик 100 будет описан с CU 101. Специалисты в данной области техники поймут, что передатчик 100 может выполнять по существу такой же процесс с CTU 101.
[0040] Блок 103 создания таблицы палитры использует CU 101 для получения или генерирования таблицы палитры (иногда называемой цветовой таблицей). Примерная цветовая таблица 303 показана на ФИГУРЕ 3. Чтобы получить таблицу 303 палитры, блок 103 создания таблицы палитры упорядочивает цветовые значения в соответствии с одним или более правилами упорядочения. Таблица 303 палитры может быть упорядочена в соответствии с частотой возникновения каждого цветового значения, фактической цветовой интенсивностью каждого пикселя CU 101, или любой другой метрики(метрик) упорядочения, чтобы повысить эффективность следующих операций кодирования.
[0041] На основе полученной таблицы 303 палитры, блок 105 классификатор цветов использует CU 101 для присвоения цветов или значений пикселей CU 101 в цветовую индексную карту 311 и одну или более остаточных карт 313 предсказаний. Блок 107 кодирования таблицы принимает таблицу 303 палитры и кодирует элементы в таблице 303 палитры. Блок 109 кодирования индексной карты кодирует цветовую индексную карту 311, созданную блоком 105 классификатором цветов. Эти операции описаны более подробно ниже.
[0042] Блок 111 остаточного кодирования кодирует каждую остаточную карту 313 предсказаний, созданную блоком 105 классификатором цветов. В некоторых вариантах осуществления, блок 111 остаточного кодирования выполняет адаптивную остаточную бинаризацию с фиксированной длиной или с переменной длиной, как указано на 321 на ФИГУРЕ 3. Затем блок 113 мультиплексирования (MUX) генерирует сжатый битовый поток с использованием сравнений 319 строк/блоков и закодированных остатков 321 предсказаний. В некоторых вариантах осуществления, способ 323 контекстно-ориентированного адаптивного бинарного арифметического кодирования (CABAC) может быть использован для объединения сравнений 319 строк/блоков и закодированных остатков 321 предсказаний, как показано на ФИГУРЕ 3.
[0043] Обращаясь к ФИГУРЕ 2, приемник 200 выполнен с возможностью выполнения процесса декодирования содержимого экрана аналогично процессу кодирования содержимого экрана, выполняемому передатчиком 100, как описано выше. Приемник 200 принимает сжатый битовый видеопоток, и затем, с использованием демультиплексора 201, разбирает битовый поток в закодированную таблицу палитры, цветовую индексную карту и закодированные остатки предсказаний. Блок 203 декодирования таблицы и блок 209 создания таблицы палитры выполняют процессы, обратные блоку 107 кодирования таблицы и блоку 103 создания таблицы палитры, чтобы восстановить, для каждой CU, полную таблицу палитры. Подобным образом, блок 205 декодирования индексной карты и блок 207 остаточного декодирования выполняют процессы, обратные блоку 109 кодирования индексной карты и блоку 111 остаточного кодирования, чтобы восстановить цветовую индексную карту. Блок 211 деклассификатор цветов получает значение пикселя в каждой позиции путем объединения цветовой индексной карты и таблицы палитры, тем самым восстанавливая CTU или CU 213.
[0044] Хотя ФИГУРЫ 1 и 2 иллюстрируют примеры передатчика 100 и приемника 200 для выполнения кодирования и декодирования содержимого экрана, различные изменения могут быть сделаны на ФИГУРАХ 1 и 2. Например, различные компоненты на ФИГУРАХ 1 и 2 могли бы быть объединены, дополнительно подразделены, или опущены, и дополнительные компоненты могли бы быть добавлены в зависимости от конкретных потребностей. В качестве конкретного примера, различные компоненты могли бы быть расположены вместе в одном корпусе или на одной печатной плате, или быть выполненным посредством одного процессора или блока обработки.
[0045] На основе полученной таблицы 303 палитры каждый пиксель в оригинальной CU 101 может быть преобразован в свой цветовой индекс в таблице 303 палитры. Варианты осуществления этого изобретения предоставляют способы для эффективного сжатия таблицы 303 палитры и цветовой индексной карты 311 (описанной ниже) для каждой CU 101 в поток. На стороне приемника, сжатый битовый поток может быть разобран, чтобы восстановить, для каждой CU 101, полную таблицу 303 палитры и цветовую индексную карту 311, и затем дополнительно получить значение пикселя в каждой позиции путем объединения цветовой индексной таблицы и таблицы палитры.
[0046] ФИГУРА 4 иллюстрирует другой пример CU 401 с цветовыми компонентами, показанными отдельно и упакованными. CU 401 может представлять CU 101. Как показано на ФИГУРЕ 4, CU 401 представляет собой CU 8 пикселей x 8 пикселей. Конечно, CU 401 могла бы быть NxN пикселей, где N=8, 16, 32, 64 для совместимости с HEVC. Каждый пиксель CU 401 включает в себя три цветовых компонента, при различных коэффициентах выборки (например, 4:4:4, 4:2:2, 4:2:0). То есть, CU 401 включает в себя отдельные красные (R) цветовые компоненты 402, зеленые (G) цветовые компоненты 403, и синие (B) цветовые компоненты 404. В других вариантах осуществления, цветовые компоненты могли бы быть Y, Cb, Cr, или X, Y, Z или другой подходящей комбинацией компонентов.
[0047] Для простоты, последовательности 4:4:4 используются в изобретении. Для видео 4:2:2 и 4:2:0, передискретизация цветности могла бы быть применена для получения последовательностей 4:4:4, или каждый компонент 402-404 цветности мог бы быть обработан независимо. В случае монохромных видео 4:0:0, они могут рассматриваться как отдельная плоскость 4:4:4 без двух других плоскостей. Все способы для 4:4:4 могут быть применены непосредственно.
[0048] Цветовые компоненты 402-404 могут чередоваться друг с другом в процессе упаковки, приводя к упакованной CU 401. В одном из вариантов осуществления, флаг, называемый enable_packed_component_flag, определен для каждой CU 101, чтобы указать, обрабатывается ли CU 101 с использованием упакованного режима (тем самым приводя к CU 401) или традиционного плоского режима (например, G, B, R или Y, U, V компоненты 402-404 обрабатываются независимо.)
[0049] Как упакованный режим, так и плоский режим могут иметь свои преимущества и недостатки. Например, плоский режим поддерживает параллельную обработку цветовых компонентов для G/B/R или Y/U/V. Однако плоский режим может приводить к низкой эффективности кодирования. Упакованный режим может совместно использовать информацию заголовка (такую как таблица 303 палитры и цветовая индексная карта 311) для CU 101 среди различных цветовых компонентов. Однако, упакованный режим может предотвратить, чтобы несколько цветовых компонентов обрабатывались одновременно или параллельным образом. Один простой способ, чтобы решить, должна ли текущая CU 101 быть закодирована в упакованном режиме, состоит в том, чтобы измерить стоимость случайного искажения (R-D).
[0050] enable_packed_component_flag используется для явной передачи режима кодирования в декодер. В дополнение к определению enable_packed_component_flag на уровне CU для низкоуровневой обработки, флаг может быть повторен в заголовке фрагмента или даже на уровне последовательности (например, Набор Параметров Последовательности или Набор Параметров Изображения), чтобы разрешить обработку на уровне фрагмента или уровне последовательности, в зависимости от требований конкретного применения.
[0051] ПОЛУЧЕНИЕ ТАБЛИЦЫ ПАЛИТРЫ И ИНДЕКСНОЙ КАРТЫ
[0052] Далее описаны операции в блоке 103 создания таблицы палитры и блоке 107 кодирования таблицы на ФИГУРЕ 1. Для каждой CU 101, пробегают по местоположениям пикселей, и получают таблицу 303 палитры и цветовую индексную карту 311 для последующей обработки. Каждый отдельный цвет упорядочивается в таблице 303 палитры, в зависимости либо от его гистограммы (например, частота возникновения), либо от его интенсивности, или любого произвольного способа с целью повышения эффективности процесса кодирования, который приведен ниже. Например, если процесс кодирования использует способ дифференциальной импульсно-кодовой модуляции (DPCM) для кодирования различия между смежными пикселями, оптимальный результат кодирования может быть получен, если смежным пикселям присваиваются смежные цветовые индексы в таблице 303 палитры.
[0053] Далее будет описано новое получение таблицы палитры на основе хэша, которое может быть использовано для эффективного определения основных цветов и уменьшения ошибки. Для каждой CU 101, блок 103 создания таблицы палитры проверяет цветовое значение каждого пикселя в CU 101 и создает цветовую гистограмму с помощью трех цветовых компонентов вместе, т.е. упакованных G, B, R или упакованных Y, Cb, Cr в соответствии с частотой возникновения каждого цвета в убывающем порядке. Для представления каждого 24-битного цвета, цветовые компоненты G и B (или цветовые компоненты Y и Cb) могут быть подвержены битовому сдвигу соответственно. То есть, каждый упакованный цвет может быть представлен в соответствии со значением (G<<16)+(B<<8)+(R) или (Y<<16)+(Cb<<8)+(Cr), где <<x представляет собой операцию левого битового сдвига. Гистограмма сортируется в соответствии с частотой возникновения цвета в убывающем порядке.
[0054] Для кодирования с потерей данных, блок 103 создания таблицы палитры затем применяет основанный на хэше процесс группировки соседних цветов на упорядоченных по гистограмме цветовых данных, чтобы получить более компактное представление таблицы палитры. Для каждого цветового компонента, наименее значащие X бит (в зависимости от параметра квантования (QP)) очищаются, и соответствующее представление хэша генерируется с использованием хэш-функции (G>>X<<(16+X))|(B>>X<<(8+X))|(R>>X<<X) или (Y>>X<<(16+X))|(Cb>>X<<(8+X))|(Cr>>X<<X), где >>x представляет собой операцию правого битового сдвига, и X определяется на основе QP. Хэщ-таблица или альтернативно структура данных дерева двоичного поиска (BST) используется для быстрого поиска цветов, имеющих одинаковое хэш-значение. Для любых двух хэш-значений, их расстояние определяется как максимальная абсолютная разница соответствующих цветовых компонентов.
[0055] Во время группировки соседних цветов блок 103 создания таблицы палитры обрабатывает упакованные цвета в убывающем порядке частоты возникновения до тех пор, пока не будут обработаны N цветов. Если количество цветов в текущей CU меньше, чем N, тогда все цвета в текущей CU обрабатываются. N ограничено предопределенным максимальным количеством цветов (max_num_of_colors). В некоторых вариантах осуществления, max_num_of_colors=128, т.е. N <= 128. После основанной на хэше группировки цветов, N выбранных цветов (или все цвета в том случае, если количество цветов в текущей CU меньше, чем N), затем переупорядочиваются путем сортировки цветов в возрастающем порядке на основе значения каждого упакованного цвета. Результат представляет собой таблицу палитры, такую как таблица 303 палитры, показанная на ФИГУРЕ 3. Таблица 303 палитры имеет размер четырех цветов (то есть N=4). Во многих варианта осуществления, N > 4. Однако, для простоты объяснения, N выбрано равным 4 на ФИГУРЕ 3.
[0056] Когда количество цветов, представленных в CU 101, больше, чем количество цветов N в таблице 303 палитры, менее часто возникающие цвета расположены как остатки за пределами таблицы 303 палитры. Например, цветовые значения 49, 53, 50, и 51 являются частью таблицы 303 палитры, тогда как цветовые значения 48, 52, 47, 54, 55, и 56 являются остаточными цветами 305 за пределами таблицы 303 палитры.
[0057] Получение таблицы 303 палитры, как выполнено блоком 103 создания таблицы палитры, может быть описано следующим псевдокодом.
(Псевдокод):
[0058] В псевдокоде выше, ComputeHash( C, QP ) применяет хэш-функцию (G>>X<<(16+X))|(B>>X<<(8+X))|(R>>X<<X) или (Y>>X<<(16+X))|(Cb>>X<<(8+X))|(Cr>>X<<X), чтобы сгенерировать хэш-значение, где X зависит от QP. Dist(хэш1, хэш2) получает максимальную абсолютную разницу соответствующих цветовых компонентов в хэше1 и хэше2. Здесь, структуры данных хэш-таблицы и дерева двоичного поиска используются для быстрого поиска цветов, удовлетворяющих определенному условию на основе его хэш-значения.
[0059] Как обсуждено выше, на основе полученной таблицы 303 палитры, блок 105 классификатор цветов использует CU 101 для присвоения цветов или значений пикселей CU 101 в цветовую индексную карту 311 и одну или более остаточных карт 313 предсказаний. То есть, блок 105 классификатор цветов присваивает каждый цвет в таблицы 303 палитры цветовому индексу в таблице 303 палитры. Например, как указано на 307 на ФИГУРЕ 3, цвету 49 присваивается цветовой индекс 0 (ColorIdx=0), цвету 53 присваивается цветовой индекс 1 (ColorIdx=1), цвету 50 присваивается цветовой индекс 2 (ColorIdx=2), и цвету 51 присваивается цветовой индекс 3 (ColorIdx=3). Как только цветам в таблице 303 палитры присвоен индекс, цветовая индексная карта 311 может быть сгенерирована из CU 101 с использованием индексов каждого цвета. Обработка цветовой индексной карты 311 описана более подробно ниже. Подобным образом, каждому остаточному цвету 305 за пределами таблицы 303 палитры присваивается остаточное значение предсказания, как указано в 309. Как только остаточным цветам 305 присвоено остаточное значение предсказания, остаточная карты 313 предсказаний может быть сгенерирована из CU 101.
[0060] Для плоской CU, каждый цветовой компонент может иметь свою собственную индивидуальную таблицу палитры, такую как colorTable_Y, colorTable_U, colorTable_V или colorTable_R, colorTable_G, colorTable_B. В некоторых вариантах осуществления, может быть получена таблица палитры для основного компонента, например, Y в YUV или G в GBR, и эта таблица может совместно использоваться для всех компонентов. Как правило, путем использования совместно используемой таблицы палитры Y или G, цветовые компоненты, отличные от Y или G, имели бы некоторые несоответствия, относящиеся к исходным цветам пикселей из находящихся в совместно используемой таблице палитры. Остаточный механизм (например, способы кодирования коэффициентов HEVC) могут затем быть применены для кодирования этих несогласованных остатков. В других вариантах осуществления, для упакованной CU, единственная таблица палитры может совместно использоваться всеми компонентами.
[0061] Следующий псевдокод иллюстрирует получение таблицы палитры и индексной карты.
(Псевдокод):
[0062] ОБРАБОТКА ТАБЛИЦЫ ПАЛИТРЫ
[0063] Для каждой CU 101, передатчик 100 может получить таблицу 303 палитры из текущей CU 101 (называемой явной кареткой таблицы палитры) или передатчик 100 может получить таблицу 303 палитры из левого или верхнего соседа текущей CU 101 (называемой неявной кареткой таблицы палитры). Блок 107 кодирования таблицы принимает таблицу 303 палитры и кодирует элементы в таблице 303 палитры.
[0064] Обработка таблицы палитры включает в себя кодирование размера таблицы 303 палитры (т.е. общее количество отдельных цветов) и самого каждого цвета. Большинство битов потребляются кодированием каждого цвета в таблице 303 палитры. Следовательно, основное внимание будет уделяться кодированию цвета (т.е. кодированию каждого элемента в таблице 303 палитры).
[0065] Самый простой способ для кодирования цветов в таблице палитры представляет собой использование алгоритма в стиле импульсно-кодовой модуляции (PCM), где каждый цвет кодируется независимо. Альтернативно, ближайшее предсказание для последующего цвета может быть применено, и затем дельта предсказания может быть закодирована вместо интенсивности цвета по умолчанию, что представляет собой так называемый стиль DPCM (дифференциальный PCM). Оба способа могут быть затем энтропийно закодированы с использованием модели равной вероятности или адаптивной контекстной модели, в зависимости от компромисса между затратами сложности и эффективностью кодирования.
[0066] Варианты осуществления этого изобретения предоставляют другую усовершенствованную схему, называемую Слияние Соседней Таблицы Палитры, где color_table_merge_flag определен для указания того, использует ли текущая CU (например, CU 101) таблицу палитры, связанную с ее левой соседней CU или ее верхней соседней CU. Если нет, текущая CU переносит сигналы таблицы палитры явно. Этот процесс также может называться как совместное использование соседней таблицы палитры. С помощью этого процесса слияния, флаг color_table_merge_direction указывает направление слияния, которое будет либо от верхней CU или от левой CU. Конечно, кандидаты направления слияния могли бы быть в направлениях, отличных от верхней CU или левой CU (например, верхняя-левая, верхняя-правая, и тому подобное). Однако, верхняя CU и левая CU используются в этом изобретении для демонстрации концепции. Каждый пиксель в текущей CU сравнивается с элементами в существующей таблице палитры, связанной с левой CU или верхней CU, и ему присваивается индекс, возвращающий наименьшую разницу предсказания (т.е. пиксель вычитает ближайший цвет в таблице палитры) через псевдокод deriveIdxMap(), показанный выше. Для случая, когда разница предсказания является ненулевой, все из остатков кодируются с использованием остаточного механизма Расширения Диапазона HEVC (RExt). Решение, использовать или нет процесс слияния таблиц, может быть определено посредством стоимости R-D.
[0067] Когда цветовая таблица переносится явно в битовом потоке, она может быть закодирована последовательно для каждого цветового компонента. Внутритабличное заполнение палитры или внутритабличный цветовой DPCM применяется, как описано ниже, для кодирования каждого элемента последовательно для всех трех цветовых компонентов.
[0068] ВНУТРИТАБЛИЧНОЕ ЗАПОЛНЕНИЕ ПАЛИТРЫ
[0069] Даже когда способ совместного использования таблицы палитры не используется, все еще могут существовать цвета, которые являются общими между таблицей 303 палитры и предсказателем палитры. Следовательно, применение метода внутритабличного заполнения палитры элемент-за-элементом может дополнительно улучшить эффективность кодирования. Здесь, предсказатель палитры получен из соседнего блока, такого как левая соседняя CU или верхняя соседняя CU. ФИГУРА 5A иллюстрирует предсказатель 551 палитры и текущую таблицу 553 палитры, которая может использоваться вместе с методом межтабличного заполнения палитры в соответствии с этим изобретением. Текущая таблица 553 палитры может представлять таблицу 303 палитры ФИГУРЫ 3. Предсказатель 551 палитры может быть построен из левой соседней CU текущей CU. На стороне декодера, палитра обновляется соответствующим образом в соответствии с предсказателем 551 палитры из опорных соседей. В некоторых вариантах осуществления, предсказатель палитры может быть выведен из восстановленной соседней CU или единицы дерева кодирования (CTU) или из глобальной таблицы на уровне фрагмента или последовательности. Как известно в области техники, фрагмент включает в себя несколько CU в изображении. Изображение может включать в себя один или более фрагментов. Последовательность включает в себя несколько фрагментов.
[0070] Пусть c(i) и r(j) представляют i-й элемент в текущей таблице 553 палитры и j-й элемент в предсказателе 551 палитры. Вновь следует отметить, что каждый элемент содержит три цветовых компонента (GBR, YCbCr, или тому подобное). Для каждого цветового элемента c(i), i<=N, в текущей таблице 553, блок 107 кодирования таблицы находит идентичное соответствие r(j) из предсказателя 551 палитры. Вместо передачи сигнала c(i), j кодируется предикативно. Предсказатель определяется как наименьший индекс k, который больше, чем ранее восстановленный j, и который удовлетворяет r(k)[0] >=c(i - 1)[0]. Разница (j - k) предсказания передается в сигнале в битовом потоке. Поскольку разница (j - k) неотрицательная, не требуется знакового бита.
[0071] Следует отметить, что либо контекстная адаптивная модель, либо обходная модель может использоваться для кодирования (j-k), как известно в области техники. Как правило, контекстная адаптивная модель используется в целях высокой эффективности, тогда как обходная модель используется для требования высокой пропускной способности и низкой сложности. В некоторых вариантах осуществления этого изобретения, две контекстные адаптивные модели могут использоваться для кодирования разницы (j-k) предсказания индекса с использованием динамической усеченной унарной схемы бинаризации.
[0072] ВНУТРИТАБЛИЧНАЯ ЦВЕТОВАЯ DPCM
[0073] Если не найдено соответствие в предсказателе 551 палитры для i-го элемента в текущей таблице 553 палитры, значение i-го элемента вычитается из предыдущего элемента ((i-1)-й элемент), и абсолютная разница (|d(i)|) кодируется с помощью цветовой DPCM для каждого компонента. В целом, меньшее число битов для абсолютной предсказывающей разницы и знаковый бит будут созданы и закодированы с использованием внутритабличной цветовой DPCM. Либо контекстная адаптивная модель, либо обходная модель могут использоваться для кодирования абсолютной предсказывающей разницы и связанного знакового бита, как известно в области техники. Кроме того, знаковый бит может быть скрыт или не закодирован для некоторых случаев. Например, при условии, что текущая таблица 553 палитры уже упорядочена в возрастающем порядке, разница компонента Y (или G) не требует битового знака вовсе. Подобным образом, разница компонента Cb (или B) не нуждается в знаковом бите, если соответствующая разница Y (or G) равна нулю. Кроме того, разница компонента Cr (или R) не нуждается в знаковом бите, если как разница Y (or G), так и разница Cb (or B) равны нулю. В качестве другого примера, знаковый бит может быть скрыт, если абсолютная разница равна нулю. В качестве еще одного примера, знаковый бит может быть скрыт, если удовлетворяется следующее граничное условие: c[i-1] -|d(i)| < 0 или c[i-1]+|d(i)| > 255.
[0074] Для первого элемента c(0) текущей таблицы 553, если способ межтабличного заполнения палитры не используется, каждый компонент c(0) может быть закодирован с использованием фиксированной 8-битной обходной контекстной модели. Дополнительно или альтернативно, он может быть закодирован с использованием адаптивной контекстной модели, чтобы дополнительно повысить производительность.
[0075] Чтобы лучше проиллюстрировать способы межтабличного заполнения палитры и внутритабличной цветовой DPCM, пример, использующий данные в текущей таблице 553 палитры, будет описан ниже.
[0076] Начиная с первого элемента c(0) текущей таблицы 553 палитры, т.е. (G, B, R)=(0, 0, 192), можно увидеть, что c(0) не имеет соответствия в предсказателе 551 палитры, следовательно, c(0) кодируется независимо. Второй элемент c(1) текущей таблицы 553 палитры, т.е. ((G, B, R)=(0, 0, 240), также не имеет соответствия в предсказателе 551 палитры. При условии, что первый элемент c(0) уже был закодирован, только разница предсказания между c(1) и c(0) должна быть перенесена в битовом потоке, т.е. (0, 0, 240) -(0, 0, 192)=(0, 0, 48). Для третьего элемента c(2) текущей таблицы 553, точное соответствие определено в предсказателе 551 палитры, где j=1. Предсказывающий индекс, использующий ранее закодированный цветовой элемент, равен 0, следовательно, только (1- 0)=1 должно быть закодировано. Эти способы кодирования применяются до тех пор, пока последний элемент текущей таблицы 553 (т.е. dx=12 на ФИГУРЕ 5A) не будет закодирован. Таблица 1 предоставляет пошаговую иллюстрацию того, как применить межтабличное совместное использование и внутритабличную DPCM на текущей таблице 553, используя доступный предсказатель 551 палитры.
Таблица 1: Способ кодирования для примерной таблицы на ФИГУРЕ 5A
i (текущий табличный индекс)
Способ кодирования
j (соответствующий индекс в ссылочной таблице (предсказатель палитры))
k (предсказанный соответствующий индекс)
Элемент кодирования
0
Внутритабличный
(0, 0, 192)
1
Внутритабличный
(0, 0, 48)
2
Межтабличный
1
0
1
3
Межтабличный
2
2
0
4
Межтабличный
3
3
0
5
Внутритабличный
(0, 0, 2)
6
Внутритабличный
(60, 10, -12)
7
Межтабличный
8
7
1
8
Внутритабличный
(0, 30, -30)
9
Внутритабличный
(20, -50, 0)
10
Межтабличный
9
9
0
11
Внутритабличный
(30, 0, 0)
12
Межтабличный
15
11
4
[0077] Явное кодирование цветовой таблицы суммируется в следующем псевдокоде, где N и M представляют собой количество элементов в текущей и ссылочной цветовой таблице, соответственно.
(Псевдокод):
[0078] Явное декодирование цветовой таблицы суммируется в следующем псевдокоде.
(Псевдокод):
[0079] Существует несколько способов для генерирования соседних таблиц палитры для использования в процессе слияния в кодировании текущей CU. В зависимости от реализации, один из способов (называемый Способом A для простоты объяснения) требует обновления как в кодере, так и в декодере. Другой способ (называемый Способом B) представляет собой процесс только на стороне кодера. Далее будут описаны оба способа.
[0080] Способ A: В этом способе, таблицы палитры соседних CU генерируются на доступных восстановленных пикселях, независимо от глубины, размера и т.д. CU. Для каждой CU, восстановления извлекаются для их соседних CU такого же размера и такой же глубины (предполагая, что цветовое сходство будет выше в этом случае).
[0081] ФИГУРА 5B иллюстрирует пример повторного восстановления таблицы палитры с использованием Способа A, в соответствии с этим изобретением. Как показано на ФИГУРЕ 5B, текущая CU 501 представляет собой блок 16×16 с глубиной 2. Соседние CU текущей CU 501 включают в себя верхнюю CU 502 и левую CU 503. Верхняя CU 502 представляет собой блок 32×32 с глубиной=1. Верхняя CU 502 включает в себя верхний блок 504 16×16. Левая CU 503 представляет собой блок 8×8 с глубиной=3, и является частью блока 505 16×16. Используя Способ A, независимо от разделения его соседних CU (например, левая CU 503 8×8 или верхняя CU 502 32×32), смещение пикселя (=16) будет расположено от начала текущей CU 501 к левому направлению, чтобы обработать левый блок 505 16×16, и к верхнему направлению, чтобы обработать верхний блок 504 16×16. Как кодер, так и декодер поддерживают это смещение.
[0082] Способ B: В этом способе, процесс слияния происходит, когда текущая CU совместно использует такой же размер и глубину, как ее верхняя соседняя CU и/или ее левая соседняя CU. Таблицы палитры доступных соседей используются для получения цветовой индексной карты текущей CU для последующих операций. Например, для текущей CU 16×16, если ее соседняя CU (т.е. либо ее верхний сосед, либо ее левый сосед) закодирована с использованием способа таблицы палитры и индекса, таблица палитры соседней CU используется для текущей CU, чтобы получить стоимость R-D. Стоимость слияния сравнивается со случаем, когда текущая CU получает свою таблицу палитры явно (а также с другими традиционными режимами, которые могут существовать в HEVC или HEVC RExt). Тот случай, который производит самую низкую стоимость R-D, выбирается в качестве режима, который должен быть записан в выходной битовый поток. В Способе B, только кодер необходим для имитации различных потенциальных режимов. В декодере, color_table_merge_flag и флаг color_table_merge_direction указывают решение слияния и направление слияния без необходимости дополнительной обработки декодером.
[0083] ПАЛИТРА ПРЕДСКАЗАТЕЛЯ
[0084] Чтобы дополнительно уменьшить сложность, палитра предсказателя используется для кэширования цветов, которые приходят из ранее закодированной таблицы палитры или другой палитры предсказателя, которая в конечном счете приходит из ранее закодированной таблицы палитры. В одном из вариантов осуществления, элементы в палитре предсказателя приходят из палитры предсказателя или закодированной таблицы палитры левой или верхней CU текущей CU. После того как CU закодирована с помощью цветовой палитры, палитра предсказателя обновляется, если размер этой CU больше либо равен размеру CU, связанной с палитрой предсказателя, и текущая палитра отличается от палитры предсказателя. Если текущая CU не закодирована с использованием режима палитры, палитра предсказателя не меняется. Это также упоминается как распространение палитры предсказателя. Эта палитра предсказателя может быть сброшена в начале каждого изображения или фрагмента каждой строки CU.
[0085] Ряд способов доступны для построения палитры предсказателя. В первом способе, для кодирования каждой CU, палитра предсказателя строится из палитры предсказателя ее левой CU или верхней CU. В этом способе, одна таблица палитры предсказателя сохраняется для каждой CU.
[0086] Второй способ отличается от первого способа тем, что таблица палитры, вместо таблицы палитры предсказателя, связанной с верхней CU, используется в процессе предсказания.
[0087] ОБРАБОТКА/КОДИРОВАНИЕ ЦВЕТОВОЙ ИНДЕКСНОЙ КАРТЫ
[0088] Блок 109 кодирования индексной карты кодирует цветовую индексную карту 311, созданную блоком 105 классификатором цветов. Чтобы закодировать цветовую индексную карту 311, блок 109 кодирования цветовой индексной карты выполняет по меньшей мере одну операцию сканирования (по горизонтали 315 или по вертикали 317), чтобы преобразовать двухмерную (2D) цветовую индексную карту 311 в одномерную (1D) строку. Затем блок 109 кодирования индексной карты выполняет алгоритм поиска строки (описанный ниже), чтобы сгенерировать множество соответствий. В некоторых вариантах осуществления, блок 109 кодирования цветовой индексной карты выполняет отдельные операции горизонтального и вертикального сканирования и выполняет алгоритм поиска строки, чтобы определить, что обеспечивает лучшие результаты. ФИГУРА 6 иллюстрирует пример операций горизонтального и вертикального сканирования. На ФИГУРЕ 6 показана примерная 2D цветовая индексная карта 601. Цветовая индексная карта 601 может представлять цветовую индексную карту 311 ФИГУРЫ 3. Цветовая индексная карта 601 представляет собой карту 64×64, но возможны другие размеры цветовой индексной карты. Как показано на ФИГУРЕ 6, горизонтальное сканирование (или поиск) 602 или вертикальное сканирование (или поиск) 603 может быть выполнено на цветовой индексной карте 601.
[0089] Варианты осуществления этого изобретения предоставляют способ согласования 1D строки и 2D вариацию, чтобы закодировать цветовую индексную карту 311. В каждой позиции, метод кодирования находит согласованную точку и записывает согласованное расстояние и длину для согласования 1D строки, или записывает ширину и высоту согласования для согласования 2D строки. Для несогласованной позиции, ее индексная интенсивность, или альтернативно, значение дельты между ее индексной интенсивностью и предсказанной индексной интенсивность, может быть закодировано непосредственно.
[0090] Прямой 1D способ поиска может быть выполнен по цветовой индексной карте 601. Например, ФИГУРА 7 иллюстрирует часть 1D цветового индексного вектора 700 после 1D поиска с использованием горизонтального сканирования из первой индексной позиции цветовой индексной карты 601. Поиск по строке затем применяется к 1D цветовому индексному вектору 700. Глядя на первую позицию 701 цветового индексного вектора 700 (который представляет собой ʹ14ʹ, как показано на ФИГУРЕ 7), поскольку еще нет буферизованной ссылки, первая позиция 701 рассматривается как «несогласованная пара». Несогласованной паре присваиваются значения -1 и 1 ее соответствующему расстоянию и длине, что обозначается как (dist, len)=(-1, 1). Вторая позиция 702 представляет собой другое ʹ14ʹ. Вторая позиция 702 представляет собой первый индекс, закодированный как ссылка. Следовательно, расстояние согласованной пары, dist=1. Поскольку есть еще одно ʹ14ʹ в третьей позиции 703, длина согласованной пары равна 2, т.е. len=2. Двигаясь вдоль четвертой позиции 704, встречается значение ʹ17ʹ, которого раньше не видели. Следовательно, четвертая позиция 704 кодируется как другая несогласованная пара, т.е. (dist, len)=(-1, 1). Для каждой несогласованной пары, согласованный/несогласованный флаг кодируется, чтобы сигнализировать о том, что для текущего индекса на найдено согласованного индекса, и этот флаг сопровождается действительным значением индекса (например, первое появление ʹ14ʹ, ʹ17ʹ, ʹ6ʹ, и т.д.). Для каждой согласованной пары, согласованный/несогласованный флаг кодируется, чтобы сигнализировать о том, что была найдена согласованная индексная строка, и этот флаг сопровождается длиной согласованной строки.
[0091] Ниже приведен результирующий набор для метода кодирования с использованием части 1D цветового индексного вектора 700, показанного на ФИГУРЕ 7.
dist=-1, len=1, idx=14 (несогласовано)
dist=1, len=2 (согласовано)
dist=-1, len=1, idx=17 (несогласовано)
dist=1, len=3 (согласовано)
dist=-1, len=1, idx= 6 (несогласовано)
dist=1, len=25 (согласовано)
dist=30, len=4 (согласовано) /*для «17», которое появилось ранее*/
….
[0092] Следующий псевдокод приведен для получения этой согласованной пары.
(Псевдокод):
[0093] УПРОЩЕННОЕ КОДИРОВАНИЕ ЦВЕТОВОЙ ИНДЕКСНОЙ КАРТЫ
[0094] В некоторых вариантах осуществления, следующие операции могут быть выполнены в качестве упрощенного способа для обработки цветовой индексной карты в стиле 1D. Как было описано выше, цветовая индексная карта 601 может быть представлена согласованными или несогласованными парами. Для согласованных пар, пары согласованного расстояния и длины индексов группы передаются в приемник.
[0095] Существует ряд весьма заметных сценариев, где единица кодирования включает в себя лишь несколько цветов. Это может привести к одной или более больших следующих друг за другом или смежных секций, которые имеют одинаковое значение индекса. В таких случаях, передача пары (расстояние, длина) может внести больше накладных расходов, чем это необходимо. Для решения этой проблемы, упрощенный способ обработки цветовой индексной карты, описанные ниже, уменьшает количество битов, потребляемых в кодировании цветовой индексной карты.
[0096] Как и в решении кодирования 1D индексной карты, концепция «расстояния» может быть разделена на две основные категории: значительное расстояние и нормальное расстояние. Нормальное расстояние кодируется с использованием контекстов. Затем, связанные длины кодируются последовательно.
[0097] Варианты осуществления этого способа используют значительное расстояние. Существует два типа значительного расстояния для этого способа. Одно представляет собой расстояние=blockWidth. Другое представляет собой расстояние=1. Эти два типа значительного расстояния отражают наблюдение, что расстояние=1 и расстояние=blockWidth связаны с наиболее значительным процентом общего распределения расстояния. Два типа значительного расстояния теперь будут описаны в качестве иллюстрации.
[0098] Способ кодирования, использующий расстояние=blockWidth, также упоминается как кодирование CopyAbove. Чтобы проиллюстрировать способ кодирования CopyAbove, снова рассматривается цветовая индексная карта 601 64×64 на ФИГУРЕ 6. Цветовая индексная карта 601 имеет blockWidth=64. В цветовой индексной карте 601 64×64 есть две строки 611-612 индексов, обозначенные пунктирной линией. Значения индекса в строке 612 идентичны соответствующим значениям индекса в строке 611 непосредственно выше. Из-за того, что значения индекса в строке 612 точно такие же, как значения индекса в строке 611, значения индекса в строке 612 могут быть закодированы с помощью ссылки на значения индекса в строке 611. Когда цветовая индексная карта 601 преобразуется в 1D цветовой индексный вектор с использованием горизонтального сканирования (такого, как показано в 1D цветовом индексном векторе 700 на ФИГУРЕ 7), «расстояние» вдоль 1D цветового индексного вектора между соответствующими значениями индекса в строках 611-612 равно 64, что представляет собой ширину блока цветовой индексной карты 601. Например, когда цветовая индексная карта 601 преобразуется в 1D цветовой индексный вектор, имеющий 64×64=4096 элементов, расстояние вдоль вектора между значением ʹ6ʹ индекса, которое является первым значением в строке 611, и значением ʹ6ʹ индекса, которое является первым значение в строке 612, равно 64. Длина согласованных строк 611-612 равна 27, потому что каждая строка 611-612 включает в себя 27 значений индекса. Таким образом, строка 612 может быть закодирована просто путем указания способа кодирования CopyAbove и длины 27 значений индекса.
[0099] Способ кодирования, использующий расстояние=1, также упоминается как кодирование IndexMode или кодирование CopyLeft. Чтобы проиллюстрировать кодирование IndexMode, рассмотрим строку 613 индексов в цветовой индексной карте 601. Строка 613 включает в себя первое значение ʹ14ʹ индекса, за которым следует 51 последующие значения ʹ14ʹ индекса. Из-за того, что каждое из значений индекса в строке 613 является одинаковым, 51 значения индекса строки 613, следующие за первым ʹ14ʹ, могут быть закодированы вместе с использованием расстояния=1 (что указывает, что значение индекса, которое является расстоянием одного до места слева от текущего значения индекса, имеет то же самое значение). Длина согласованной строки 613 равна 51. Таким образом, строка 613 может быть закодирована просто путем указания способа кодирования IndexMode и длины 51 значений индекса.
[00100] Как описано выше, для этого способа упрощенного кодирования цветовой индексной карты, расстояние, используемое для кодирования, может быть ограничено только значительными позициями; то есть, расстояние для этих вариантов осуществления может быть ограничено только 1 или blockWidth. Чтобы дополнительно уменьшить накладные расходы, длина согласованного индекса может также быть ограничена шириной единицы кодирования. Используя это определение, пара расстояния и длины может быть сигнализирована с использованием только двух двоичных флагов (т.е. двух бинов) без отправки накладных расходов длины и расстояния (она выводится как ширина блока). Например, первый флаг может указывать, использует ли кодирования значительное расстояние или не использует значительное расстояние. Если первый флаг указывает, что кодирование использует значительное расстояние, тогда второй флаг может указывать, является ли значительное расстояние 1 (т.е. IndexMode) или blockWidth (т.е. CopyAbove). Поскольку согласованная строка появляется линия за линией (или ряд за рядом) в единице кодирования, любые индексы в строке, которые не согласованы посредством расстояния=1 или расстояния=blockWidth, рассматриваются как несогласованные индексы. Такие несогласованные индексы кодируются один за другим по отдельности. Для этих несогласованных индексов, способы предсказания, описанные выше, могут использоваться для повышения эффективности.
[00101] Декодер может выполнять операции декодирования, аналогичные методам кодирования CopyAbove и кодирования IndexMode, описанным выше. Например, декодер может принимать второй флаг, и на основе значения второго флага, декодер знает, декодировать в соответствии с методом декодирования CopyAbove или IndexMode.
[00102] 2D вариация 1D метода согласования строки, описанная выше, также может использоваться. 2D метод согласования также включает в себя следующие шаги:
[00103] Этап 1: Местоположение текущего пикселя и опорного пикселя идентифицируют в качестве начальной точки.
[00104] Этап 2: Горизонтальный 1D поиск по строке применяют к правому направлению текущего пикселя и опорного пикселя. Максимальная длина поиска ограничена концом текущей горизонтальной строки. Максимальная длина поиска может быть записана как right_width.
[00105] Этап 3: Горизонтальный 1D поиск по строке применяют к левому направлению текущего пикселя и опорного пикселя. Максимальная длина строки ограничивается началом текущей горизонтальной строки, и может также быть ограничена right_width предшествующего 2D согласования. Максимальная длина поиска может быть записана как left_width.
[00106] Этап 4: Тот же самый 1D поиск по строке выполняется на следующей строке, с использованием пикселей ниже текущего пикселя и опорного пикселя в качестве нового текущего пикселя и опорного пикселя.
[00107] Этап 5: Прекращают, когда right_width == left_width == 0.
[00108] Этап 6: Для каждого height[n]={1, 2, 3…}, есть соответствующий массив из width[n] (например, {left_width[1], right_width[1]}, {left_width[2], right_width[2]}, {left_width[3], right_width[3]}…}.
[00109] Этап 7: Новый массив min_width определяется как {{lwidth[1], rwidth[1]}, {lwidth[2], rwidth[2]}, {lwidth[3], rwidth[3]}…} для каждого height[n], где lwidth[n]=min(left_width[1:n-1]), rwidth[n]=min(right_width[1:n-1]).
[00110] Этап 8: Массив array{size[1], size[2], size[3]…} размеров также определяется, где size[n]=height[n] x (lwidth[n]+hwidth[n]).
[00111] Этап 9: Предполагая, что size[n] хранит максимальное значение в массиве размеров, ширина и высота 2D согласования строки выбирается с помощью соответствующих {lwidth[n], rwidth[n], height[n]}.
[00112] Один из методов для оптимизации скорости 1D или 2D поиска заключается в том, чтобы использовать бегущий хэш. В некоторых вариантах осуществления, может использоваться 4-пиксельная структура бегущего хэша. Бегущий хэш вычисляется для каждого пикселя в горизонтальном направлении, чтобы сгенерировать горизонтальный хэш-массив running_hash_h[]. Другой бегущий хэш вычисляется вдобавок к running_hash_h[], чтобы сгенерировать 2D хэш-массив running_hash_hv[]. Каждое согласование значения в 2D хэш-массиве running_hash_hv[] представляет 4×4 согласование блока. Чтобы выполнить 2D согласование, 4×4 согласования блоков находят перед выполнением попиксельного сравнения со своими соседями. Поскольку попиксельное сравнение ограничено 1-3 пикселями, скорость поиска может быть резко увеличена.
[00113] Из приведенного выше описания, согласованные ширины каждой строки отличаются друг от друга, таким образом, каждая строка должна обрабатываться отдельно. Для достижения эффективности и низкой сложности, варианты осуществления настоящего изобретения предоставляют основанный на блоках алгоритм, который может использоваться как в аппаратных, так и программных реализациях. Подобный в некоторых отношениях стандартной оценке движения, этот алгоритм обрабатывает один прямоугольный блок за раз.
[00114] ФИГУРА 8 иллюстрирует пример базового блока обработки пикселей в этом алгоритме, которые называется модуль 800 U_PIXEL. Модуль 800 U_PIXEL принимает закодированный сигнал 801 и входной сигнал 802, и включает в себя множество логических элементов 803-806. Закодированный сигнал 801 представляет собой флаг, который указывает, был ли опорный пиксель уже закодирован из предыдущей операции согласования строки. Опционально, входной сигнал 802 (Cmp[n-1]) может быть принудительно установлен в «0», что позволяет удалить последний элемент 806 «ИЛИ» из модуля 800 U_PIXEL.
[00115] Возьмем блок 4×4 в качестве примера. Первый шаг состоит в том, чтобы обработать каждую строку параллельно. Каждый пиксель в одной строке прямоугольника присваивается одному модулю 800 U_PIXEL. Блок обработки для обработки каждой строки называется модулем U_ROW. ФИГУРА 9 иллюстрирует пример модуля 900 U_ROW. Модуль 900 U_ROW включает в себя множество модулей 800 U_PIXEL. Для случая блока 4×4, модуль 900 U_ROW включает в себя четыре модуля 800 U_PIXEL. Как показано на ФИГУРЕ 9, модуль 900 U_ROW обрабатывает первую строку, строку 0, как указано на 901.
[00116] Четыре модуля 900 U_ROW используются для обработки четырех строк блока 4×4. Четыре модуля 900 U_ROW могут быть расположены параллельно в модуле U_CMP. ФИГУРА 10 иллюстрирует пример модуля 1000 U_CMP, который включает в себя четыре модуля 900 U_ROW. Выходной сигнал модуля 1000 U_CMP представляет собой массив cmp[4][4].
[00117] Следующий шаг алгоритма заключается в том, чтобы обработать каждый столбец массива cmp параллельно. Каждое cmp в столбце массива cmp обрабатывается модулем U_COL. ФИГУРА 11 иллюстрирует пример модуля 1100 U_COL, который принимает четыре столбца 1101-1104 массива cmp. Четыре модуля 1100 U_COL могут использоваться для обработки четырех столбцов блока 4×4. Четыре модуля 1100 U_COL могут быть расположены параллельно в модуле U_2D_BLOCK. ФИГУРА 12 иллюстрирует пример модуля 1200 U_2D_BLOCK, который включает в себя четыре модуля 1100 U_COL. Выходной сигнал модуля 1200 U_2D_BLOCK представляет собой массив rw[4][4].
[00118] Количество нулей в каждой строке массива rw[n][0-3] затем подсчитывается, и четыре результата записываются в массив r_width[n]. Массив r_width[n] является таким же, как и массив rwidth[n] на шаге 7 2D метода согласования, описанного выше. Массив l_width[n] генерируется таким же образом. Массив min_width на шаге 7 может быть получен как {{l_width[1], r_width[1]}, { l_width[2], r_width[2]}, { l_width[3], r_width[3]}…}.
[00119] Алгоритм может быть реализован в аппаратных средствах или в комбинации аппаратных и программных средств, чтобы работать в инфраструктуре параллельной обработки любого современного ЦП (центрального процессора), ЦСП (цифрового сигнального процессора) или ГП (графического процессора). Упрощенный псевдокод для быстрой программной реализации приведен ниже.
(Псевдокод):
[00120] Как показано в псевдокоде выше, нет зависимости данных в каждом цикле FOR, поэтому типичные программные способы параллельной обработки, такие как развертывание цикла или MMX/SSE, могут быть применены для повышения скорости выполнения.
[00121] Этот алгоритм также может применяться к 1D поиску, если количество строк ограничено одним. Упрощенный псевдокод для быстрой программной реализации основанного на фиксированной длине 1D поиска приведен ниже.
(Псевдокод):
[00122] После того как оба из 1D поиска и 2D поиска завершены, максимальное значение из (1D длина, 2D размер (ширина x высота)) выбирается в качестве «победителя». Если lwidth (левая ширина) 2D согласования ненулевая, длина предшествующего 1D согласования (длина=длина - lwidth) может быть отрегулирована, чтобы избежать перекрытия между предшествующим 1D согласованием и текущим 2D согласованием. Если длина предшествующего 1D согласования становится равной нулю после регулировки, оно должно быть удалено из списка согласования.
[00123] Затем, начальное местоположение вычисляется с использованием текущее_местоположение+длина, если предшествующее согласование является 1D согласованием, или текущее_местоположение+(lwidth+rwidth), если предыдущее согласование является 2D согласованием. Когда выполняется 1D поиск, если любой пиксель, который должен быть согласован, попадает в любую предыдущую область 2D согласования, где его местоположение уже было покрыто 2D согласованием, следующий пиксель или пиксели сканируются до тех пор, пока не будет найден пиксель, который не был закодирован предыдущим согласованием.
[00124] После получения согласованных пар, механизм энтропии может быть применен, чтобы преобразовать эти элементы кодирования в двоичный поток. В некоторых вариантах осуществления, этот механизм энтропии может использовать модель равной вероятности. Усовершенствованная адаптивная контекстная модель также может быть применена для повышения эффективности сжатия. Следующий псевдокод представляет собой пример процедуры кодирования для каждой согласованной пары.
(Псевдокод):
[00125] Соответственно, процесс декодирования для согласованной пары предоставлен в следующем псевдокоде.
(Псевдокод):
[00126] Следует отметить, что только пиксели в несогласованных позициях будут закодированы в битовый поток. Чтобы иметь более точную статистическую модель, некоторые варианты осуществления могут использовать только эти пиксели и их соседей для получения таблицы палитры, вместо использования всех пикселей в CU.
[00127] Для режимов кодирования, которые определяют индекс или дельта-выход, результаты кодирования обычно содержат ограниченное количество уникальных значений. Варианты осуществления этого изобретения предоставляют вторую таблицу дельта-палитры, чтобы использовать это наблюдение. Эта таблица дельта-палитры может быть создана после того, как все литеральные данные получены в текущей CU. Таблица дельта-палитры может быть сигнализирована явно в битовом потоке. Альтернативно, она может быть создана адаптивно во время процесса кодирования, так что таблица не должна быть включена в битовый поток. delta_color_table_adaptive_flag предоставляется для этого выбора.
[00128] В некоторых вариантах осуществления, предоставляется другая усовершенствованная схема, называемая Слияние Соседней Дельта-Таблицы Палитры. Для генерирования адаптивной дельта-палитры, кодер может использовать дельта-палитру из верхней или левой CU в качестве начальной отправной точки. Для не-адаптивного генерирования палитры, кодер может также использовать дельта-палитру из верхней или левой CU, и затем сравнивать стоимость R-D между верхней, левой и текущей CU.
[00129] delta_color_table_merge_flag определен для указания того, использует ли текущая CU таблицу дельта-палитры из своей левой или верхней CU. Текущая CU переносит сигналы таблицы дельта-палитры явно только когда delta_color_table_adaptive_flag==0, и delta_color_table_merge_flag==0 в одно и то же время. Для процесса слияния, если delta_color_table_merge_flag утверждается, другой флаг, delta_color_table_merge_direction, определяется для указания, является ли кандидат слияния верхней CU или левой CU.
[00130] Если delta_color_table_adaptive_flag==1, ниже приводится пример процесса кодирования для генерирования адаптивной дельта-палитры. На стороне декодера, всякий раз, когда декодер принимает литеральные данные, декодер может затем восстановить дельта-палитру, используя обратные шаги.
[00131] Этап 1: Определяют массивы palette_table[] и palette_count[].
[00132] Этап 2: Массив palette_table[] инициализируется как palette_table(n)=n (n=0…255). Альтернативно, palette_table[] из верхней или левой CU может использоваться как начальное значение.
[00133] Этап 3: Массив palette_count[] инициализируется как palette_count(n)=0 (n=0…255). Альтернативно, palette_count[] из верхней или левой CU может использоваться как начальное значение.
[00134] Этап 4: Для любого дельта-значения cʹ, выполняются следующие операции:
[00135] a) Находят n, такое, что palette_table(n) == delta cʹ;
[00136] b) Используют n в качестве нового индекса дельта cʹ;
[00137] c) ++palette_count(n);
[00138] d) Сортируют palette_count[], так что он становится в порядке убывания; и
[00139] e) Сортируют palette_table[] соответственно.
[00140] Этап 5: Процесс возвращается на шаг 1 и процесс повторяется до тех пор, пока все дельта cʹ в текущей CU не будут обработаны.
[00141] Для любого блока, который включает в себя как текст, так и графику, флаг маски может использоваться для разделения текстовой секции и графической секции. Текстовая секция может быть сжата с использованием способа сжатия, описанного выше; графическая секция может быть сжата с помощью другого способа сжатия. Поскольку значение любого пикселя, покрытого флагом маски, было закодировано посредством текстового слоя без потерь, каждый пиксель в графической секции может рассматриваться как «безразличный-пиксель». Когда графическая секция сжата, любое произвольное значение может быть присвоено безразличному пикселю, чтобы получить оптимальную эффективность сжатия.
[00142] Индексная карта и остатки генерируются во время процесса получения таблицы палитры. Сжатие индексной карты без потерь позволяет выполнять эффективную обработку с использованием 1D или 2D поиска по строке. В некоторых вариантах осуществления, 1D или 2D поиск по строке ограничен внутри текущей CU; однако, окно поиска может быть расширено за пределы текущей CU. Согласованное расстояние может быть закодировано с использованием пары векторов движения в горизонтальном и вертикальном направлениях; например, (MVy=matched_distance/cuWidth, MVy=matched_distance-cuWidth*MVy).
[00143] Из-за того, что изображение может иметь различные пространственные текстурные ориентации в местных областях, 1D поиск может быть выполнен либо в горизонтальном, либо в вертикальном направлениях на основе значения индикатора color_idx_map_pred_direction. Оптимальное направление сканирования индекса может быть определено на основе стоимости R-D. ФИГУРА 13 иллюстрирует пример операций горизонтального и вертикального сканирования. На ФИГУРЕ 13 показана примерная 2D цветовая индексная карта 1301. Цветовая индексная карта 1301 может представлять цветовую индексную карту 311 ФИГУРЫ 3. Цветовая индексная карта 1301 представляет собой карту 8×8, но возможны другие размеры цветовой индексной карты. Как показано на ФИГУРЕ 13, горизонтальное сканирование 1302 или вертикальное сканирование 1303 может быть выполнено на цветовой индексной карте 1301. В некоторых вариантах осуществления, deriveMatchPairs() и связанные шаги энтропийного кодирования выполняются дважды как для горизонтального сканирования, так и для вертикального сканирования. Затем, финальное направление сканирования выбирается как направление с наименьшей стоимостью R-D.
[00144] УЛУЧШЕННАЯ БИНАРИЗАЦИЯ
[00145] Как показано выше, таблица палитры и пара согласованной информации для цветовой индексной карты могут быть закодированы с использованием бинаризации фиксированной длины. Альтернативно, может использоваться бинаризация переменной длины. Например, для кодирования таблицы палитры, таблица палитры может иметь 8 различных цветовых значений. Следовательно, соответствующая цветовая индексная карта может содержать только 8 различных индексов. Вместо использования фиксированных 3 бинов для кодирования каждого значения индекса одинаково, только один бин может использоваться для представления фонового пикселя. Например, фоновый пиксель может быть представлен как 0. Затем оставшиеся 7 значений пикселей могут быть представлены с помощью кодовых слов фиксированной длины, таких как 1000, 1001, 1010, 1011, 1100, 1101, и 1110, чтобы закодировать цветовой индекс. Это основано на том факте, что фоновый цвет может занимать наибольший процент изображения, и, следовательно, отдельное кодовое слово только одного бита для фонового цвета может сэкономить место в целом. Этот сценарий обычно возникает для содержимого экрана. В качестве примера, рассмотрим 16×16 CU. Используя фиксированную 3-биновую бинаризацию, цветовая индексная карта требует 3×16×16=768 бинов. Альтернативно, пусть фоновый цвет, который занимает 40% изображения, будет проиндексирован как 0, тогда как другие цвета равномерно распределены. В этом случае, цветовая индексная карта требует только 2.8×16×16<768 бинов.
[00146] Для кодирования согласованной пары, максимально возможное значение согласованного расстояния и длины может использоваться, чтобы ограничить его бинаризацию, с учетом текущих ограничений технологии в области текущей CU. Математически, согласованное расстояние и длина могут иметь длину 64×64=4K в каждом случае. Однако, это обычно не происходит одновременно. Для каждой согласованной позиции, согласованное расстояние ограничивается расстоянием между текущей позицией и самой первой позицией в опорном буфере (например, первой позицией в текущей CU), что может быть указано как L. Следовательно, максимум бинов для бинаризации расстояния составляет log2(L)+1 (вместо фиксированной длины), а максимум бинов для бинаризации длины составляет log2(cuSize-L)+1, где uSize=cuWidth*cuHeight.
[00147] В дополнение к таблице палитры и индексной карте, кодирование остаточного коэффициента могло бы быть значительно улучшено посредством различных способов бинаризации. Что касается версий HEVC RExt и HEVC, коэффициент преобразования бинаризуется с использованием переменной длины на основании наблюдения, что коэффициент, сформированный после предсказания, преобразования и квантования с использованием традиционных способов, обычно имеет близкую к нулю величину, а ненулевые значения обычно расположены в левом верхнем углу блока преобразования. Однако, после введения кодирующего инструмента пропуска преобразования в HEVC RExt, который позволяет обходить весь процесс преобразования, распределение остаточной величины изменилось. Особенно при включении пропуска преобразования на содержимом экрана с различными цветами, обычно существуют коэффициенты с большими значениями (т.е. не близкими к нулю значениями, такими как ʹ1ʹ, ʹ2ʹ, или ʹ0ʹ), и ненулевые значения могут возникнуть в произвольных местоположениях внутри блока преобразования. Если используется бинаризация текущего коэффициента HEVC, это может привести к очень длинному кодовому слову. Альтернативно, может использоваться бинаризация с фиксированной длиной, которая может сохранить длину кода для остаточных коэффициентов, сформированных посредством режима кодирования таблицы палитры и индекса.
[00148] НОВЫЙ ПРЕДСКАЗЫВАЮЩИЙ СПОСОБ ГЕНЕРИРОВАНИЯ ПИКСЕЛЕЙ
[00149] Как описано выше, 1D/2D поиск по строке выполняется при кодировании цветовой индексной карты. В любом местоположении в цветовой индексной карте, где был найден согласованный индекс, декодер берет пиксель в согласованном местоположении и вычитает его из исходного пикселя для генерирования остаточного пикселя. Эта процедура может быть выполнена либо путем использования соответствующего цвета в цветовой таблице палитры, представленной цветовым индексом в согласованном местоположении, или путем использования восстановленного пикселя в согласованном местоположении.
[00150] Существует два способа для генерирования предсказывающего значения на основе двух способов, описанных выше. В первом способе, для любого местоположения целевого пикселя, значение RGB получают из таблицы палитры посредством основного цветового индекса в согласованном местоположении, и это значение RGB используется в качестве предсказывающего значения целевого пикселя. Однако, этот способ заставляет декодер выполнять процедуру получения цветового индекса с пикселями, которые находятся за пределами текущей CU, что приводит к росту времени декодирования.
[00151] Чтобы избежать процедуры получения цветового индекса цвета в первом способе, второй способ применяется там, где для любого местоположения целевого пикселя значение восстановленного пикселя в согласованном местоположении используется в качестве предсказывающего значения. В этом способе, восстановленное значение не является действительным, когда предсказывающий пиксель находится в пределах текущей CU. В этом случае, однако, цветовой индекс доступен, и его соответствующий цвет в цветовой таблице палитры может использоваться в качестве предсказывающего пикселя.
[00152] Остаточное значение любого пикселя в текущей CU может быть получено путем вычитания его предсказывающего значения из исходного значения. Оно затем квантуется и кодируется в битовом потоке. Восстановленное значение любого пикселя в текущей CU может быть получено путем сложения его предсказывающего значения и квантованного остаточного значения.
[00153] РЕЖИМ ОДНОГО ЦВЕТА
[00154] CU одного цвета может быть либо CU с только одним цветов в каждом местоположении пикселя, либо CU, имеющей один цвет в ее палитре с однородной индексной картой с одним значением. Существует несколько способов для сжатия CU одного цвета в режиме палитры. В одном способе, т.е. Режиме Одного Цвета, информация палитры только этого одного цвета кодируется и включается в битовый поток. Вся секция цветовой индексной карты пропускается. Это в отличие от кодирования и передачи однородной индексной картой со всеми нулями. На стороне декодера, если в палитре есть только один цвет без индексной карты, местоположение каждого пикселя в текущей CU будет заполнено цветом в палитре.
[00155] КОПИРОВАНИЕ СТРОКИ ОБЛАСТИ ПИКСЕЛЯ
[00156] Как описано выше, 1D/2D копирование строки применяется к области цветовой индексной карты. 1D/2D копирование строки также может быть применено в области пикселя. По сравнению с 1D/2D копированием строки области индексной карты, 1D/2D копирование строки в области пикселя включает в себя ряд изменений. Изменения следующие:
[00157] 1. Процесс генерирования таблицы палитры и индексной карты является необязательным и может быть пропущен. В качестве альтернативы, генерирование всей таблицы палитры, генерирование индексной карты, и 1D/2D поиск по строке по области индекса все еще выполняются, но таблица палитры не записывается в битовый поток. Закодированная карта генерируется на основе длины 1D согласования строки или ширины и высоты 2D согласования строки. Закодированная карта указывает, покрыто ли местоположение пикселя предыдущим согласованием. Следующее начальное местоположение представляет собой первое местоположение, которое не покрыто предыдущим согласованием.
[00158] 2. При кодировании несогласованных данных, их значение RGB (вместо значения цветового индекса) записывается в битовый поток. При кодировании несогласованных данных, способ кодирования индекса пикселя может также быть применен, где однобитовый флаг добавляется перед этим значением RGB в синтаксической таблице. Если это значение RGB появляется в первый раз, флаг устанавливается в 1, и это значение RGB само кодируется в битовый поток. Значение RGB добавляется к таблице поиска после этого. Если это значение RGB появляется снова, флаг устанавливается в 0, и кодируется значение индекса таблицы поиска вместо этого значения RGB.
[00159] 3. Способ предсказывающего генерирования использует Опцию 2 режима одного цвета (значение восстановленного пикселя из местоположения предсказывающего пикселя используется в качестве предсказывающего значения).
[00160] 4. Для CU одного цвета, либо Опция 1, либо Опция 2 режима одного цвета может быть выбрана. Когда выбрана Опция 1, значение RGB основного цвета записывается в раздел таблицы палитры битового потока. Когда выбрана Опция 2, если не используется верхняя линия в 1D поиске, и не разрешена 2D опция для текущей CU, значение RGB основного цвета записывается в раздел таблицы палитры битового потока.
[00161] В целом, 2D копирование строки представляет собой гибкий алгоритм; он может выполнять операции с блоками различной ширины и высоты, чтобы найти согласованный блок. Когда 2D копирование строки ограничено шириной и высотой CU, 2D копирование строки становится копированием блока фиксированной ширины/высоты. Внутриблочное копирование (IBC) является, по существу, идентичным этому конкретному случаю 2D копирования строки, которое работает с блоком фиксированной ширины/высоты. В 2D копировании строки фиксированной ширины/высоты остаток также кодируется. Это также, по существу, идентично способу остаточного кодирования, используемому в IBC.
[00162] АДАПТИВНАЯ ВЫБОРКА ЦВЕТНОСТИ ДЛЯ СМЕШАННОГО СОДЕРЖИМОГО
[00163] Варианты осуществления, описанные выше, предоставляют различные методы для высокоэффективного кодирования содержимого экрана в рамках инфраструктуры HEVC/HEVC-RExt. На практике, в дополнение к чистому содержимому экрана (такому как текст, графика) или чистому натуральному видео, также есть контент, содержащий как сгенерированный компьютером экранный материал, так и снятое на камеру натуральное видео. Это называется смешанным содержимым. В настоящее время, смешанное содержимое обрабатывается с помощью выборки цветности 4:4:4. Однако для части встроенного снятого на камеру натурального видео в таком смешанном содержимом, выборки цветности 4:2:0 может быть достаточно для предоставления воспринимаемого без потерь качества. Это объясняется тем фактом, что человеческое зрение менее чувствительно к пространственным изменениям в компонентах цветности по сравнению с пространственными изменениями в компонентах яркости. Следовательно, подвыборка обычно выполняется на компонентах цветности (например, популярный видеоформат 4:2:0), чтобы достичь заметного снижения скорости передачи битов, при этом сохраняя такое же восстановленное визуальное качество.
[00164] Варианты осуществления этого изобретения представляют флаг enable_chroma_subsampling, который определен и передается в сигнале на уровне CU рекурсивно. Для каждой CU, кодер определяет, закодирована ли она с помощью 4:2:0 или 4:4:4 в соответствии со стоимостью случайного искажения. ФИГУРЫ 14A и 14B иллюстрируют примеры форматов 4:2:0 и 4:4:4 выборки цветности. ФИГУРА 14A показывает пример выборки 4:2:0, а ФИГУРА 14B показывает пример выборки 4:4:4.
[00165] На стороне кодера, для каждой CU, предполагая, что входной сигнал представляет собой источник 4:4:4, показанный на ФИГУРЕ 14B, стоимость случайного искажения получается непосредственно с использованием процедуры кодирования 4:4:4 с enable_chroma_subsampling=0 или ЛОЖЬ. Затем процесс осуществляет подвыборку образцов 4:4:4 в 4:2:0, чтобы получить их битовое потребление. Восстановленный формат 4:2:0 интерполируется обратно в формат 4:4:4 для измерения искажения (например, с использованием суммы квадрата ошибки (SSE) или суммы абсолютной разницы (SAD)). Вместе с битовым потреблением, стоимость случайного искажения получают, когда кодируют в пространстве 4:2:0, и сравнивают это со стоимостью, когда кодируют CU на 4:4:4. Тот результат, который приводит к более низкой стоимости случайного искажения, затем выбирается для финального кодирования.
[00166] ФИГУРА 15 иллюстрирует пример процесса интерполяции из 4:4:4 в 4:2:0 и наоборот. Как правило, процесс преобразования формата выборки цвета видео может потребовать большого количества фильтров интерполяции. Чтобы уменьшить сложность реализации, может быть использован фильтр интерполяции HEVC (т.е. DCT-IF). Как показано на ФИГУРЕ 15, квадратные блоки представляют исходные выборки 4:4:4. Из 4:4:4 в 4:2:0, пиксели половинных элементов изображения (представленные кругами) интерполируются с использованием DCT-IF вертикально для компонентов цветности. Также на ФИГУРЕ 15 показаны позиции четвертных элементов изображения, которые представлены ромбами. Закрашенные серым круги выбираются, чтобы сформировать выборки 4:2:0. Для интерполяции из 4:2:0 в 4:4:4, процесс начинается с серых кругов в компонентах цветности, позиции половинных элементов изображения интерполируются горизонтально, чтобы получить все круги, а затем квадратные блоки интерполируются с использованием DCT-IF вертикально. Все из интерполированных квадратных блоков выбираются для формирования восстановленного сигнала 4:4:4.
[00167] УПРАВЛЕНИЕ КОДЕРОМ
[00168] Как обсуждено выше, несколько флагов предоставляются для низкоуровневой обработки в кодере. Например, enable_packed_component_flag используется для указания, использует ли текущая CU свой упакованный формат или традиционный плоский формат для кодирования обработки. Решение, включать или нет упакованный формат, может зависеть от стоимости R-D, вычисленной в кодере. В некоторых реализациях кодера, решение с низкой сложностью может быть достигнуто путем анализа гистограммы CU и поиска наилучшего порога для решения.
[00169] Размер таблицы палитры имеет непосредственное влияние на сложность. Параметр maxColorNum вводится для управления компромиссом между сложностью и эффективностью кодирования. Самый простой способ состоит в том, чтобы выбрать вариант, который приводит к самой низкой стоимости R-D. Направление кодирования индексной карты может быть определено посредством оптимизации R-D, или путем использования местной пространственной ориентации (например, оценки направления края с использованием оператора Собеля).
[00170] Некоторые из вариантов осуществления, описанные выше, могут ограничивать обработку в каждой CTU или CU. На практике, это ограничение может быть ослаблено. Например, для обработки цветовой индексной карты, буфер строки из верхней CU или левой CU, может быть использован, как показано на ФИГУРЕ 16. ФИГУРА 16 иллюстрирует пример обработки цветовой индексной карты с использованием буфера строки верхнего индекса или буфера строки левого индекса. С помощью верхнего буфера и левого буфера, поиск может быть расширен, чтобы дополнительно улучшить эффективность кодирования. Учитывая, что верхний и левый буферы сформированы с использованием восстановленных пикселей из соседних CU, эти пиксели (а также их соответствующие индексы) доступны для ссылки перед обработкой текущей индексной карты CU. Например, как показано на ФИГУРЕ 16, после переупорядочивания, текущая индексная карта 1600 CU может быть 4, 14, 14, …. 1, 2, 1 (представлена как 1D строка). Без ссылки на буфер строки, первое «14» может быть закодировано как несогласованная пара. Однако, с соседним буфером строки, первое «14» согласуется с «14» либо в буфере строки верхнего индекса, либо буфере строки левого индекса. Таким образом, копирование строки может начаться с самого первого пикселя.
[00171] СИНТАКСИС ДЕКОДЕРА
[00172] Информация, предоставленная ниже, может использоваться для описания операций декодирования приемника 200, показанного на ФИГУРЕ 2. Синтаксис, показанный ниже, согласован с проектом стандарта HEVC RExt.
[00173] 7.3.5.8 Синтаксис единицы кодирования:
[00174] ФИГУРА 17 иллюстрирует способ для кодирования содержимого экрана в соответствии с этим изобретением. Способ 1700, показанный на ФИГУРЕ 17, основан на ключевых концепциях, описанных выше. Способ 1700 может быть выполнен передатчиком 100 ФИГУРЫ 1. Однако, способ 1700 может также использоваться вместе с любым другим подходящим устройством или системой.
[00175] В операции 1701, устройство получает цветовую индексную карту на основе текущей CU. В операции 1703, устройство кодирует цветовую индексную карту. Устройство кодирует по меньшей мере часть цветовой индексной карты, используя первый метод кодирования. Первый индикатор указывает значительное расстояние первого метода кодирования. Например, в некоторых осуществления, первое значение первого индикатора указывает метод кодирования IndexMode, который использует значительное расстояние, равное 1, а второе значение первого индикатора указывает метод кодирования CopyAbove, который использует значительное расстояние, равное ширине блока текущей CU.
[00176] Часть цветовой индексной карты, которую устройство кодирует с использованием первого метода кодирования, является либо первой строкой индексов, которая имеет согласованную вторую строку индексов непосредственно над первой строкой индексов в текущей CU, либо третьей строкой индексов, которые все имеют то же самое значение, что и значение опорного индекса непосредственно слева от первого индекса среди третьей строки индексов в текущей CU.
[00177] В операции 1705, устройство объединяет закодированную цветовую индексную карту и первый индикатор для передачи в приемник.
[00178] Хотя ФИГУРА 17 иллюстрирует один пример способа 1700 для кодирования содержимого экрана, различные изменения могут быть сделаны на ФИГУРЕ 17. Например, будучи показанными как последовательность шагов, различные шаги, показанные на ФИГУРЕ 17, могут перекрываться, происходить параллельно, происходить в другом порядке или происходить несколько раз. Кроме того, некоторые шаги могут быть объединены или удалены, и дополнительные шаги могут быть добавлены в соответствии с определенными потребностями.
[00179] ФИГУРА 18 иллюстрирует способ для декодирования содержимого экрана в соответствии с этим изобретением. Способ 1800, показанный на ФИГУРЕ 18, основан на ключевых концепциях, описанных выше. Способ 1800 может быть выполнен приемником 200 ФИГУРЫ 2. Однако, способ 1800 может также использоваться вместе с любым другим подходящим устройством или системой.
[00180] В операции 1801, устройство принимает сжатый битовый видеопоток из передатчика. Битовый видеопоток включает в себя закодированную цветовую индексную карту. Устройство также принимает первый индикатор. Первый индикатор указывает значительное расстояние первого метода декодирования. Например, в некоторых осуществления, первое значение первого индикатора указывает метод декодирования IndexMode, который использует значительное расстояние, равное 1, а второе значение первого индикатора указывает метод декодирования CopyAbove, который использует значительное расстояние, равное ширине блока текущей CU.
[00181] В операции 1803, устройство декодирует по меньшей мере часть цветовой индексной карты с использованием первого метода декодирования, где первый индикатор указывает значительное расстояние первого метода декодирования. Позже, в операции 1805, устройство восстанавливает пиксели, связанные с текущей CU, на основе цветовой индексной карты.
[00182] Хотя ФИГУРА 18 иллюстрирует один пример способа 1800 для декодирования содержимого экрана, различные изменения могут быть сделаны на ФИГУРЕ 18. Например, будучи показанными как последовательность шагов, различные шаги, показанные на ФИГУРЕ 18, могут перекрываться, происходить параллельно, происходить в другом порядке или происходить несколько раз. Кроме того, некоторые шаги могут быть объединены или удалены, и дополнительные шаги могут быть добавлены в соответствии с определенными потребностями.
[00183] В некоторых вариантах осуществления, некоторые или все из функций или процессов одного или более из устройств реализованы или поддерживаются компьютерной программой, которая сформирована из машинно-читаемого программного кода и которая воплощена на машинно-читаемом носителе. Фраза «машинно-читаемый программный код» включает в себя любой тип компьютерного кода, включая исходный код, объектный код и выполняемый код. Фраза «машинно-читаемый носитель» включает в себя любой тип носителя, к которому может быть осуществлен доступ компьютером, такой как постоянное запоминающее устройство (ПЗУ, ROM), оперативное запоминающее устройство (ОЗУ, RAM), жесткий диск, компакт-диск (CD), цифровой видеодиск (DVD) или любой другой тип памяти.
[00184] Может быть предпочтительным сформулировать определения некоторых слов и фраз, используемых на протяжении всего этого патентного документа. Термины «включать в себя» и «содержать», а также их производные, означают включение без ограничения. Термин «или» является включающим, означая и/или. Фразы «связанный с» и «связанный с этим», а также их производные, означают включать, быть включенным в, соединяться с, содержать, содержаться внутри, подключаться к или с, соединяться к или с, быть коммуникабельным с, взаимодействовать с, перемежаться, сопоставлять, быть близким к, быть привязанным к или с, иметь, иметь свойство или тому подобное.
[00185] В то время как это изобретение описало определенные варианты осуществления и в целом связанные способы, изменения и перестановки этих вариантов осуществления и способов будут очевидны специалистам в данной области техники. Соответственно, приведенное выше описание примерных вариантов осуществления не определяет или ограничивает настоящее изобретение. Другие изменения, замены и перемены также возможны, не выходя из сущности и объема настоящего изобретения, как определено следующей формулой изобретения.