КОДИРОВАНИЕ ВИДЕО, СОДЕРЖАЩЕЕ РАВНОМЕРНОЕ МОЗАИЧНОЕ РАЗДЕЛЕНИЕ С ОСТАТКОМ
VIDEO ENCODING CONTAINING UNIFORM MOSAIC SEPARATION WITH REMAINDER

Область техники
[001] Настоящее раскрытие относится к кодированию видео с высокой эффективностью (HEVC) и универсальному кодированию видео (VVC).
уровень техники
[002] HEVC и кодирование видео следующего поколения
[003] Кодирование видео с высокой эффективностью (HEVC), также известное как H.265, представляет собой кодек видео на основе блоков, стандартизированный ITU-T и MPEG, который использует как временное, так и пространственное предсказание. Пространственное предсказание достигается с использованием интра- (I) предсказания из текущей картинки. Временное предсказание достигается с использованием интер- (P) или двунаправленного интер- (B) предсказания на уровне блока из ранее декодированных опорных картинок. Разность между исходными пиксельными данными и предсказанными пиксельными данными, упоминаемая как остаток, преобразуется в частотную область, квантуется и затем энтропийно кодируется перед тем, как передаваться вместе с необходимыми параметрами предсказания, такими как режим предсказания и векторы движения, также энтропийно закодированными. Путем квантования преобразованных остатков, можно контролировать компромисс между битовой скоростью и качеством видео. Уровень квантования определяется параметром квантования (QP). Декодер выполняет энтропийное декодирование, обратное квантование и обратное преобразование для получения остатка. Декодер затем суммирует остаток с интра-предсказанием или интер-предсказанием для восстановления картинки.
[004] MPEG и ITU-T работает на последующей версии HEVC в Объединенной группе исследования видео (JVET). Наименованием этого разрабатываемого кодека видео является VCC.
[005] Вырезки
[006] Принцип вырезок в HEVC делит картинку на независимо закодированные вырезки, где каждая вырезка считывается в порядке растрового сканирования в единицах единиц дерева кодирования (CTU). Разные типы кодирования могут использоваться для вырезок одной и той же картинки, т.е. вырезка может представлять собой I-вырезку или P-вырезку или B-вырезку. Главным назначением вырезок является обеспечение возможности повторной синхронизации в случае потери данных.
[007] Мозаичные элементы
[008] Стандарт кодирования видео HEVC включает в себя инструмент, называемый мозаичными элементами, который делит картинку на прямоугольные пространственно независимые области. С использованием мозаичных элементов, картинка в HEVC может разбиваться на строки и столбцы выборок, где мозаичный элемент является пересечением строки и столбца. Мозаичные элементы в HEVC всего выровнены по границам CTU.
[009] Фиг. 1 показывает пример разбиения на мозаичные элементы с использованием 4 строк мозаичных элементов и 5 столбцов мозаичных элементов, что в целом дает 20 мозаичных элементов для картинки.
[0010] Мозаичная структура сигнализируется в наборе параметров картинки (PPS) путем специфицирования толщин строк и ширин столбцов. Отдельные строки и столбцы могут иметь разные размеры, но разбиение всегда охватывает всю картинку, слева направо и сверху вниз соответственно. Отсутствует зависимость кодирования между мозаичными элементами одной и той же картинки. Это включает в себя интра-предсказание, контекстный выбор для энтропийного кодирования и предсказания вектора движения. Единственное исключение состоит в том, что зависимости контурной фильтрации в общем случае разрешены между мозаичными элементами.
[0011] Синтаксис PPS, используемый для специфицирования мозаичной структуры в HEVC, перечислен в Таблице 1 ниже. Флаг, например, tiles_enabled_flag, указывает, используются ли мозаичные элементы или нет. Если флаг установлен, то специфицируется количество столбцов и строк мозаичных элементов. uniform_spacing_flag является флагом, специфицирующим, сигнализируются ли явным образом ширины столбцов и высоты строк, или должен ли использоваться предопределенный способ для равного разнесения границ мозаичных элементов. Если указана явная сигнализация, ширины столбцов сигнализируются одна за одной, за ними следуют высоты строк. Такие ширины столбцов и высоты строк сигнализируются в единицах CTU. Флаг loop_filter_across_tiles_enabled_flag специфицирует, включены или выключены контурные фильтры по границам мозаичных элементов для всех границ мозаичных элементов на картинке.
Таблица 1. Примерный синтаксис мозаичного элемента в HEVC
[0012] Семантика для специфицирования мозаичной структуры в HEVC объясняется более подробно ниже:
tiles_enabled_flag,
[0013]  равный 1, специфицирует, что существует более одного мозаичного элемента в каждой картинке, ссылающейся на PPS. tiles_enabled_flag, равный 0, специфицирует, что существует только один мозаичный элемент в каждой картинке, ссылающийся на PPS.
num_tile_columns_minus1
[0014]  плюс 1 специфицирует количество столбцов мозаичных элементов, разбивающих картинку. num_tile_columns_minus1 должно находиться в диапазоне от 0 до PicWidthInCtbsY - 1, включительно. Если не присутствует, значение num_tile_columns_minus1 предполагается равным 0.
num_tile_rows_minus1
[0015]  плюс 1 специфицирует количество строк мозаичных элементов, разбивающих картинку. num_tile_rows_minus1 должно находиться в диапазоне от 0 до PicHeightinCtbsY - 1, включительно. Если не присутствует, значение num_tile_rows_minus1 предполагается равным 0.
[0016] Когда tiles_enabled_flag равен 1, num_tile_columns_minus1 и num_tile_rows_minus1 не должны быть оба равны 0.
uniform_spacing_flag,
[0017]  равный 1, специфицирует, что границы столбцов мозаичных элементов и аналогично границы строк мозаичных элементов распределены равномерно по картинке. uniform_spacing_flag, равный 0, специфицирует, что границы столбцов мозаичных элементов и аналогично границы строк мозаичных элементов не распределены равномерно по картинке, а явно сигнализируются с использованием синтаксических элементов column_width_minus1[i] и row_height_minus1[i]. Если не присутствует, значение uniform_spacing_flag предполагается равным 1.
column_width_minus1
[0018] [i] плюс 1 специфицирует ширину i-го столбца мозаичных элементов в единицах CTB.
row_height_minus1
[0019] [i] плюс 1 специфицирует высоту i-ой строки мозаичных элементов в единицах CTB.
loop_filter_across_tiles_enabled_flag
[0020] , равный 1, специфицирует, что операции контурной фильтрации могут выполняться по границам мозаичных элементов в картинках, относящихся к PPS. loop_filter_across_tiles_enabled_flag, равный 0, специфицирует, что операции контурной фильтрации не выполняются по границам мозаичных элементов на картинках, относящихся к PPS. Операции контурной фильтрации включают в себя операции фильтрации устранения блочности и фильтрации со смещением, адаптивным к выборке. Если не присутствует, значение loop_filter_across_tiles_enabled_flag предполагается равным 1.
[0021] Ожидается, что VVC не будет использовать традиционные вырезки как в HEVC. Вместо этого, ожидается, что мозаичные элементы будут играть большую роль в VVC вследствие повышенной потребности в пространственном произвольном доступе от видео услуг, включая стриминг VR.
[0022] Концепция групп мозаичных элементов была согласована для включения в текущий проект VVC на последней встрече JVET. Группа мозаичных элементов используется, чтобы группировать множество мозаичных элементов для уменьшения непроизводительных издержек для каждого мозаичного элемента.
[0023] Группа мозаичных элементов в текущем проекте VVC может быть прямоугольной и состоит из M×N мозаичных элементов, где M представляет собой количество мозаичных элементов по вертикали и N - количество мозаичных элементов по горизонтали.
[0024] Равномерное мозаичное разбиение в HEVC
[0025] Мозаичное разбиение HEVC требует, чтобы все границы мозаичных элементов были выровнены по сетке CTU. Это означает, что все мозаичные элементы состоят из полных CTU, и единственные неполные CTU, разрешенные в мозаичных элементах, являются теми, которые расположены на правом или нижнем краю картинки. В HEVC, синтаксический элемент uniform_spacing_flag, равный 1, специфицирует, что границы столбцов мозаичных элементов и аналогично границы строк мозаичных элементов распределены равномерно по картинке. Однако эта равномерность ограничена гранулярностью CTU. В HEVC, список colWidth[i] для i в диапазоне от 0 до num_tile_columns_minus1, включительно, специфицирует ширину i-го столбца мозаичных элементов в единицах блоков дерева кодирования (CTB) и выводится как следующее уравнение (A):
[0026] Аналогичное уравнение (B) используется для определения высот строк мозаичных элементов (rowHeight[i]):
[0027] Гибкое мозаичное разделение
[0028] Гибкое мозаичное разделение, введенное в JVET-K0155, которому следует JVET-L0359, обеспечивает функциональность для разделения картинки на мозаичные элементы разбиения, где ширина или высота каждого мозаичного элемента кратна размеру единицы, меньшей, чем размер CTU. Гибкое мозаичное разделение позволяет использовать неполные CTU на правом и нижнем краю каждого мозаичного элемента (а не только на правом и нижнем краю картинки). Фиг. 2A-2B обеспечивают примеры мозаичной сегментации 2×2 с использованием гибкого мозаичного разделения как в JVET-L0359, где размер единицы мозаичного элемента составляет четверть размера CTU.
[0029] На фиг. 2A-2B, мозаичные элементы показаны толстыми черными линиями и CTU показаны тонкими черными линиями. Фиг. 2A показывает способ HEVC с 20 CTU в картинке. Фиг. 2B показывает предложенный способ в JVET-L0359, с 24 CTU в картинке и размером мозаичной единицы, равным четверти размера CTU, показанной пунктирными серыми линиями.
[0030] Гибкое мозаичное разделение может быть полезным для применений, таких как балансирование нагрузки и 360°-видео, где желательные размеры грани не кратны размеру CTU.
[0031] Синтаксис и семантика из JVET-L0359, релевантные для текущего раскрытия, перечислены ниже, где части курсивом представляют собой добавленный текст, предложенный в L0359.
tile_unit_size_idc специфицирует размер блока мозаичных единиц в выборках яркости. Переменные TileUnitSizeY, PicWidthInTileUnitsY и PicHeightinTileUnitsY выводятся следующим образом:
[0032]
на единицы блоков мозаичных единиц
PicWidthInTileUnitsY
[0033] num_tile_columns_minus1 плюс 1 специфицирует количество столбцов мозаичных элементов, разбивающих картинку . num_tile_columns_minus1 должно находиться в диапазоне от 0 до  - 1, включительно. Если не присутствует, значение num_tile_columns_minus1 предполагается равным 0.
на единицы блоков мозаичных единиц
PicHeightinTileUnitsY
[0034] num_tile_rows_minus1 плюс 1 специфицирует количество строк мозаичных элементов, разбивающих картинку . num_tile_rows_minus1 должно находиться в диапазоне от 0 до  - 1, включительно. Если не присутствует, значение num_tile_rows_minus1 предполагается равным 0.
Переменная NumTilesInPic выводится следующим образом:
[0035]
в единицах блоков мозаичных единиц
[0036] Список colWidth[i] для i в диапазоне от 0 до num_tile_columns_minus1, включительно, специфицирующий ширину i-го столбца мозаичных элементов , выводится следующим образом:
Список rowHeight[j] для j в диапазоне от 0 до num_tile_rows_minus1, включительно, специфицирующий высоту j-ой строки мозаичных элементов в единицах блоков мозаичных единиц, выводится следующим образом:
[0037]
[0038] Список TileColX[i] для i в диапазоне от 0 до num_tile_columns_minus1+1, включительно, специфицирующий местоположение X верхней левой выборки яркости i-го столбца мозаичных элементов в единицах выборок яркости, выводится следующим образом:
[0039] Список TileRowY[j] для j в диапазоне от 0 до num_tile_rows_minus1+1, включительно, специфицирующий местоположение Y верхней левой выборки яркости j-ой строки мозаичных элементов в единицах выборок яркости, выводится следующим образом:
[0040] Группы сегментов, сегменты и единицы
[0041] Теперь будут описаны группы сегментов, сегменты и единицы. Термин сегмент используется как более общий термин, чем мозаичные элементы, поскольку решения в настоящем раскрытии могут применяться к разным видам схем разбиения картинки и не только к разбиениям на мозаичные элементы, известным из HEVC и проекта VVC. В настоящем раскрытии, мозаичный элемент представляет собой один вариант осуществления сегмента, но могут также существовать другие варианты осуществления сегментов.
[0042] Фиг. 3 показывает картинку (10) потока видео и примерное разбиение картинки на единицы (8), сегменты (11) и группы сегментов (12). Фиг. 3(a) показывает картинку (10), которая состоит из 64 единиц (8). Фиг. 3(b) показывает структуру (13) разбиения сегмента той же самой картинки (10), состоящей из 16 сегментов (11). Структура (13) разбиения показана пунктирными линиями. Каждый сегмент (11) состоит из некоторого количества единиц. Сегмент может состоять либо из целого количества полных единиц, либо из комбинации полных и частичных единиц. Некоторое количество сегментов образуют группу сегментов. Фиг. 3(c) показывает разбиение группы сегментов той же самой картинки (10), которая состоит из 8 групп сегментов. Группа сегментов может состоять из сегментов в порядке растрового сканирования. Альтернативно, группа сегментов может состоять из любой группы сегментов, которые вместе образуют прямоугольник. Альтернативно, группа сегментов может состоять из любого поднабора сегментов.
[0043] Фиг. 4 показывает картинку (10), где пунктирные линии показывают структуру разбиения, делящую картинку на четыре сегмента. Фиг. 4 также показывает три единицы (16, 17, 18). Как показано на чертеже, две единицы (16, 17) принадлежат одному текущему сегменту (15) и одна единица (18) принадлежит другому, соседнему сегменту (14). Сегменты независимы от других сегментов, что значит, что границы сегментов обрабатываются аналогично границам картинки при декодировании единиц. Это влияет на процесс выведения элементов во время декодирования, такой как, например, выведение режимов интра-предсказания и выведение значений параметров квантования.
[0044] Интра-режимы хорошо известны в уровне техники и используются и сигнализируются для единиц, которые используют только предсказание из ранее декодированных выборок текущей картинки для предсказания выборки. Часто выведение режима интра-предсказания в текущей единице (16) зависит от ранее выведенных режимов интра-предсказания в других, соседних единицах (17). Так как сегменты независимы, выведение режима интра-предсказания в текущей единице (16) может зависеть только от ранее выведенных режимов интра-предсказания в единицах (17), которые принадлежат текущему сегменту (15), и не может зависеть от какого-либо режима интра-предсказания в любой единице (18), которая принадлежит другому сегменту (14).
[0045] Это означает, что структура разбиения на фиг. 4 делает режимы интра-предсказания в единицах (18) в другом сегменте (14) недоступными для выведения режима интра-предсказания для единиц (16) в текущем сегменте (15). Отметим, что режим в некоторых единицах (18) в другом сегменте мог быть хорошо использован для выведения режима интра-предсказания в единице (16) в текущем сегменте (15), если эти единицы принадлежали бы одному и тому же сегменту. Вместо этого, граница сегмента может иметь тот же самый эффект на выведение интра-режима, что и граница картинки для единиц (16) в текущем сегменте (15).
[0046] В контексте настоящего раскрытия, сегмент может представлять собой мозаичный элемент или вырезку, и группа сегментов может представлять собой группу мозаичных элементов. В текущем раскрытии, термины “мозаичный элемент” и “сегмент” могут использоваться взаимозаменяемо. В некоторых вариантах осуществления, единица может быть эквивалентна CTU.
Краткое описание сущности изобретения
[0047] В соответствии с уравнения (A) и (B) HEVC, ширины столбцов мозаичных элементов (и высоты строк) вычисляются путем вычитания двухвыраженийдруг из друга в виде  -  , где i является неотрицательным целым и k является рациональным числом с числителем, равным PicWidthInCtbsY, и знаменателем, равным num_tile_columns_minus1+1. Результат такого вычисления, когда k не является целым, может быть равен  или  в зависимости от значений k и i. Это присущее свойство вызывает вариации порядка CTU в размерах ширины столбцов мозаичных элементов и высоты строк мозаичных элементов. В контексте настоящего раскрытия, такие вариации называются колебанием размера мозаичные элементы (см. Таблицу 2 ниже для некоторых примеров). Шаблон для этого колебания не является постоянным и зависит от ширины картинки в CTU и количества столбцов и строк мозаичных элементов, которые дают значение k, и позиционирования мозаичного элемента на сетке мозаичных элементов, определяемой посредством i. Некоторые примеры колебаний в ширине столбцов мозаичных элементов с использованием мозаичного разбиения HEVC с uniform_spacing_flag, равным 1, проиллюстрированы в Таблице 2. Те же самые примеры могут применяться также к высотам строк мозаичных элементов.
Таблица 2
<i>PicWidthInCtbsY</i>
<i>num_tile_columns_</i><i>minus1</i>
<i>k</i>
<i>colWidth[ i ], </i><i>i=0, 1, … , num_tile_columns_minus1</i>
<i>8</i>
<i>2</i>
<i>8/3</i>
<i>2, 3, 3 (меньший мозаичный элемент начинает сетку)</i><img file="00000015.jpg" he="20" wi="58" img-content="undefined" img-format="jpg" />
<i>10</i>
<i>3</i>
<i>10/4</i>
<i>2, 3, 2, 3 (смешанные размеры мозаичных элементов)</i><img file="00000016.jpg" he="21" wi="71" img-content="undefined" img-format="jpg" />
<i>100</i>
<i>30</i>
<i>100/31</i>
<i>3, 3, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 4</i><i>(нерегулярная смесь размеров мозаичных элементов)</i>
[0048] Таблица 2 показывает ширину столбцов мозаичных элементов, вычисленную с использованием разбиения на мозаичные элементы HEVC с uniform_spacing_flag, равным 1, и заданных значений для PicWidthInCtbsY и num_tile_columns_minus1. Видны колебания в значениях colWidth[i].
[0049] Эта несогласованность в конечных размерах мозаичных элементов нежелательна вследствие необходимости исследовать детали входных значений и кода для предсказания конечных значений размеров мозаичных элементов. Проблема колебания может возникать как в горизонтальном, так и в вертикальном направлениях. Это делает более сложным определение корректных горизонтальных и вертикальных размеров конкретного мозаичного элемента в сетке мозаичных элементов без исследования деталей.
[0050] Другая проблема состоит в том, что в текущей реализации HEVC для равномерного разнесения мозаичных элементов, если некоторые строки или столбцы мозаичных элементов в картинке удаляются, границы мозаичных элементов внутри оставшейся части картинки могут перемещаться в соответствии с новым шаблоном колебания. Это потребует повторного вычисления размера мозаичных элементов и адресов в процессе извлечения мозаичных элементов. Пример, проиллюстрированный на фиг. 5 как Таблица 500, показывает то, как границы столбцов мозаичных элементов и поэтому размеры мозаичных элементов могут изменяться при равномерном разнесении мозаичных элементов HEVC, если некоторые мозаичные элементы извлекаются из исходной картинки, когда uniform_spacing_flag равен 1. Границы мозаичных элементов, которые изменяются в случае удаления некоторого столбца(ов) мозаичных элементов по сравнению с границами мозаичных элементов в исходной картинке, показаны жирными линиями.
[0051] Таблица 500 на фиг. 5 иллюстрирует границы мозаичных элементов с использованием равномерного разнесения мозаичных элементов HEVC. Внутренние границы мозаичных элементов изменяются между исходной картинкой и после удаления некоторых мозаичных элементов из исходной картинки. Параметры для исходной картинки установлены следующим образом: uniform_spacing_flag=1, PicWidthInCtbsY=10, num_tile_columns_minus1=3, num_tile_rows_minus1=1.
[0052] JVET-L0359 предлагает гибкое мозаичное разделение, которое обеспечивает возможность более мелкой гранулярности размера мозаичной единицы путем обеспечения возможности использовать неполные CT на правом и нижнем краю каждого мозаичного элемента (а не только правом и нижнем краю картинки). Фиг. 2 обеспечивает пример для мозаичной сегментации 2×2 с использованием гибкого мозаичного разделения как в JVET-L0359, где размер мозаичной единицы составляет четверть размера CTU и uniform_spacing_flag равен 1.
[0053] Как предложено в JVET-L0359, если uniform_spacing_flag равен 1, ширины столбцов мозаичных элементов определяются с использованием следующего уравнения:
[0054] Аналогичное уравнение используется для определения высот строк мозаичных элементов (rowHeight[i]).
[0055] Реализация выше показывает, что проблема колебания также существует для предложения JVET-L0359. Представленная возможность для определения размера мозаичного элемента с гранулярностью более мелкой, чем гранулярность CTU, вводит еще один артефакт несогласованных размеров мозаичных элементов, как описано здесь. С использованием алгоритма, предложенного в L0359, мозаичное разбиение не остается согласованным для некоторых значений ширины картинки и размера мозаичной единицы, когда размер мозаичной единицы изменяется, например, на половину или четверть. Причина состоит в том, что предложенное уравнение для равномерного мозаичного разделения в L0359 допускает разные размеры мозаичной единицы, в то время как оно не упорядочивает компоновку несколько больших или меньших мозаичных элементов в мозаичной сетке. Таблица 3 ниже показывает некоторые примеры для случаев, когда размер картинки фиксирован, а размер мозаичной единицы изменяется, например, делится на половину или четверть с использованием гибкого мозаичного разделения, предложенного в L0359. Конечные ширины столбцов мозаичных элементов в результате изменения в размере мозаичной единицы переключаются таким образом, что иногда большая ширина мозаичного элемента находится на левой стороне, а иногда на правой стороне картинки. Эта непредсказуемость нежелательна.
Таблица 3
<i>Ширина картинки</i><i> (в выборках</i><i>яркости)</i>
<i>Размер </i><i>мозаичной</i><i>единицы</i>
<i>PicWidthIn</i><i>TileUnitsY</i>
<i>num_tile_</i><i>columns_minus1</i>
<i>k</i>
<i>colWidth[i], </i><i>i=0, 1, …, num_tile_columns_minus1</i><i>(в размере мозаичной единицы)</i>
<i>colWidth[i], </i><i>i=0, 1, …, num_tile_columns_minus1 </i><i>(в выборках яркости)</i>
<i>2160</i>
<i>32</i>
<i>Ceil(67,5) = 68</i>
<i>1</i>
<i>68/2</i>
<i>34, 34</i>
<i>1072, 1088</i><i>Меньший</i><i>мозаичный</i><i>элемент</i><i>начинает сетку</i>
<i>16</i>
<i>135</i>
<i>1</i>
<i>135/2</i>
<i>67, 68</i>
<i>1088, 1072</i><i>Больший</i><i>мозаичный</i><i>элемент</i><i>начинает сетку </i>
<i>1080</i>
<i>16</i>
<i>Ceil(67,5) = 68</i>
<i>1</i>
<i>68/2</i>
<i>34, 34</i>
<i>544, 536</i><i>Больший</i><i>мозаичный</i><i>элемент</i><i>начинает сетку </i>
<i>8</i>
<i>135</i>
<i>1</i>
<i>135/2</i>
<i>67,68</i>
<i>536, 544</i><i>Меньший</i><i>мозаичный</i><i>элемент</i><i>начинает сетку </i>
<i>480</i>
<i>128</i>
<i>Ceil(3,75) = 4</i>
<i>1</i>
<i>4/2</i>
<i>2, 2</i>
<i>256, 224</i><i>Больший</i><i>мозаичный</i><i>элемент</i><i>начинает сетку </i>
<i>32</i>
<i>15</i>
<i>1</i>
<i>15/2</i>
<i>7, 8</i>
<i>224, 256</i><i>Меньший</i><i>мозаичный</i><i>элемент</i><i>начинает сетку </i>
[0056] Таблица 3 показывает ширину столбца мозаичных элементов, вычисленную с использованием гибкого мозаичного разделения, как в L0359, когда uniform_spacing_flag установлен в 1.
[0057] Можно заключить, что правило для организации несогласованности эффекта округления на размерах мозаичных элементов упростит определение конечных размеров мозаичных элементов без необходимости подробного исследования кода и входных значений. Систематический подход для упорядочивания колебаний размеров мозаичных элементов также даст согласованные результаты мозаичного разбиения для исходной картинки и поднабора мозаичных элементов из исходной картинки.
[0058] Отдельная проблема состоит в том, что мозаичные элементы, полученные в результате равномерного мозаичного разделения, могут значительно варьироваться в размере. В Таблице 600, показанной на фиг. 6, например, мозаичные элементы в исходной картинке для равномерного мозаичного разнесения HEVC имеют 4 разных размера, причем наименьший равен 2×3 CTU, а наибольший равен 3×4 CTU.
[0059] Здесь предлагается решение, которое упорядочивает колебания по размеру сегментов в предпочтительном порядке, когда размеры сегментов не могут быть точными в соответствии с ограниченной гранулярностью разделения. В предложенном решении, мозаичные элементы с несколько меньшими или большими размерами в соответствии с эффектом округления имеют предпочтительную компоновку. В одном варианте осуществления, ширины мозаичных элементов в направлении сканирования слева направо будут только оставаться теми же самыми или уменьшаться. Предложенное решение, раскрытое здесь, может применяться к ширине столбцов мозаичных элементов и/или высоте строк мозаичных элементов в мозаичной сетке или к ширине и высоте отдельных мозаичных элементов. В одном варианте осуществления, мозаичные элементы с несколько большими размерами (вследствие заданной гранулярности и эффекта округления) располагаются в верхней левой части картинки, и мозаичные элементы с несколько меньшими размерами располагаются в нижней правой части картинки.
[0060] В альтернативных решениях, здесь предложены способы для равномерных мозаичных элементов, в которых получаемые в результате размеры мозаичных элементов являются равными, насколько это возможно.
[0061] Соответственно, в одном аспекте обеспечен способ для декодирования картинки. Способ включает в себя декодирование информации, что картинка разбита на более чем один сегмент, на основе одного или нескольких синтаксических элементов в битовом потоке. Способ также включает в себя декодирование информации, что пространственная сегментация является равномерной, на основе одного или нескольких синтаксических элементов в битовом потоке. Способ также включает в себя определение размера единицы сегмента на основе одного или нескольких синтаксических элементов или на основе предопределенного размера единицы сегмента. Способ также включает в себя декодирование первого значения, указывающего ширину сегмента, из одного или нескольких кодовых слов в битовом потоке. Способ также включает в себя декодирование второго значения, указывающего высоту сегмента, из одного или нескольких кодовых слов в битовом потоке. Способ также включает в себя выведение ширин столбцов сегментов на основе ширины картинки в количестве единиц сегмента и первого значения. Способ также включает в себя выведение высот строк сегментов на основе высоты картинки в количестве единиц сегмента и второго значения. Способ также включает в себя выведение пространственного местоположения для текущего блока на основе выведенных ширин столбцов сегментов и выведенных высот строк сегментов. Способ также включает в себя декодирование текущего блока на основе выведенного пространственного местоположения.
[0062] Предложенное решение сохраняет ширину текущего мозаичного элемента независимой от предшествующих мозаичных элементов, но зависимой только от оставшегося количества единиц (в столбце или строке), которые будут разбиты на оставшееся количество мозаичных элементов. В результате, предложенное решение для равномерного разнесения мозаичных элементов сохраняет мозаичное разбиение целым для извлеченных и оставшихся мозаичных элементов, если мозаичные элементы извлекаются. Это устраняет необходимость повторного вычисления размеров мозаичных элементов в случае разделения картинки или извлечения мозаичных элементов. В текущей реализации HEVC для равномерного разнесения мозаичных элементов, если некоторые строки или столбцы мозаичных элементов в картинке удаляются, шаблон колебания может измениться, и границы мозаичных элементов внутри оставшейся части картинки могут перемещаться в соответствии с новым шаблоном колебания.
[0063] Согласованность является другим преимуществом предложенного решения. Предложенное решение для равномерного разнесения мозаичных элементов организует размеры мозаичных элементов (например, ширину столбцов мозаичных элементов и высоту строк мозаичных элементов) и обеспечивает правило для конечной компоновки размеров мозаичных элементов без какого-либо детального исследования входных параметров или кода. Например, в одном варианте осуществления предложенного решения, когда ширину/высоту картинки в мозаичной единице невозможно разделить на количество столбцов/строк мозаичных элементов, то все мозаичные элементы, округленные до больших размеров, находятся на левой/верхней части картинки. Предложенное решение также регулирует колебания размеров мозаичных элементов в равномерном мозаичном разнесении в случае изменений размеров мозаичной единицы.
[0064] Предложенный способ также уменьшает сложность по сравнению с HEVC и гибким мозаичным разделением, предложенным в JVET-L0359. Предложенный способ не использует умножения и использует только 1 деление на итерацию для определения ширин столбцов мозаичных элементов и высот строк мозаичных элементов, в то время как способ HEVC использует 2 умножения и 2 деления на итерацию.
[0065] В альтернативных решениях, результирующие размеры мозаичных элементов являются равномерными, насколько это возможно.
Краткое описание чертежей
[0066] Прилагаемые чертежи, которые включены в настоящий документ и образуют часть спецификации, иллюстрируют различные варианты осуществления.
[0067] Фиг. 1 показывает пример мозаичного разбиения в соответствии с одним вариантом осуществления.
[0068] Фиг. 2A показывает мозаичную сегментацию с использованием мозаичного разбиения HEVC.
[0069] Фиг. 2B показывает мозаичную сегментацию с использованием гибкого мозаичного разделения.
[0070] Фиг. 3 показывает картинку потока видео и примерное разбиение.
[0071] Фиг. 4 показывает картинку в соответствии с некоторыми вариантами осуществления.
[0072] Фиг. 5 показывает таблицу в соответствии с некоторыми вариантами осуществления.
[0073] Фиг. 6 показывает таблицу в соответствии с некоторыми вариантами осуществления.
[0074] Фиг. 7 представляет собой блок-схему последовательности операций, иллюстрирующую процесс в соответствии с вариантом осуществления.
[0075] Фиг. 8 представляет собой блок-схему последовательности операций, иллюстрирующую процесс в соответствии с вариантом осуществления.
[0076] Фиг. 9 представляет собой блок-схему, показывающую функциональные модули декодера в соответствии с одним вариантом осуществления.
[0077] Фиг. 10 представляет собой блок-схему, показывающую функциональные модули кодера в соответствии с одним вариантом осуществления.
[0078] Фиг. 11 представляет собой блок-схему узла в соответствии с некоторыми вариантами осуществления.
[0079] Фиг. 12 показывает картинку в соответствии с одним вариантом осуществления.
[0080] Фиг. 13 показывает равномерную мозаичную структуру в соответствии с одним вариантом осуществления.
[0081] Фиг. 14 показывает мозаичную структуру в соответствии с одним вариантом осуществления.
[0082] Фиг. 15 представляет собой блок-схему последовательности операций, иллюстрирующую процесс в соответствии с вариантом осуществления.
[0083] Фиг. 16 представляет собой блок-схему, показывающую функциональные модули декодера в соответствии с одним вариантом осуществления.
Подробное описание
[0084] Следующая терминология была использована, чтобы описывать варианты осуществления:
[0085] Арифметический оператор “/” используется для целочисленного деления с усечением результата в направлении нуля. Например, 7/4 и -7/-4 округляются до 1 и -7/4 и 7/-4 округляются до -1.
[0086] Арифметический оператор “÷” используется для деления в математических уравнениях, где усечение или округление не предполагается.
[0087] Ceil(x) дает наименьшее целое, больше или равное x.
[0088] Floor(x) дает наибольшее целое, меньшее или равное x.
[0089] Термины “ширина столбца мозаичных элементов” и “ширина мозаичных элементов” используются взаимозаменяемо, что означает, что решение может применяться, когда ширины столбцов мозаичных элементов вычисляются в сетке мозаичных элементов или когда ширины мозаичных элементов вычисляются отдельно (например, если сетка мозаичных элементов отсутствует).
[0090] Термины “высота строки мозаичных элементов” и “высота мозаичных элементов” используются взаимозаменяемо, что означает, что решение может применяться, когда высоты строк мозаичных элементов вычисляются в сетке мозаичных элементов или когда высоты мозаичных элементов вычисляются отдельно (например, если сетка мозаичных элементов отсутствует).
[0091] В соответствии с некоторыми вариантами осуществления, предложенное решение, раскрытое здесь для определения ширины (и эквивалентно высоты) мозаичных элементов для uniform_spacing_flag=1, имеет следующие элементы:
- в цикле для определения ширины каждого мозаичного элемента, ширина для мозаичного элемента определяется с использованием доступных размеров оставшихся единиц, что означает количество размеров единиц в строке, которые еще не распределены мозаичному элементу;
- количество размеров оставшихся единиц затем делится на количество оставшихся мозаичных элементов в строке;
- полученный размер мозаичного элемента округляется до большего или меньшего целого (функции Ceil() или Floor()) в соответствии с заданным правилом для упорядочивания ширины мозаичных элементов; и
- опциональный элемент для повторного вычисления количества размеров оставшихся единиц (например, CTU) в каждой итерации цикла для определения ширины каждого мозаичного элемента.
[0092] Те же самые элементы применяются к определению высоты мозаичных элементов.
[0093] Предложенное решение, раскрытое здесь, описывает способ декодера для декодирования картинки 10 из битового потока, причем способ содержит выведение размеров и/или местоположений для всех сегментов в картинке из битового потока, причем картинка 10 состоит из некоторого количества единиц 8, и структура 13 разбиения разбивает картинку на по меньшей мере два сегмента 11, и декодер определяет, что пространственная сегментация является равномерной, путем декодирования одного или нескольких кодовых слов в битовом потоке, и декодер определяет количество пространственных сегментов путем декодирования одного или нескольких кодовых слов в битовом потоке, и декодер определяет размер мозаичной единицы, и разбиение сегментов на равномерные ширины или высоты следует фиксированному шаблону колебаний, независимому от количества пространственных сегментов, и выведение размеров сегмента выполняется в цикле по количеству сегментов, где в этом цикле вычисляются количество оставшихся мозаичных единиц, подлежащих сегментации, и количество оставшихся сегментов.
[0094] В одном примере, предложенное решение заменяет следующие строки HEVC:
следующими строками:
[0095] Предложенный способ также уменьшает сложность по сравнению с HEVC и гибким мозаичным разделением, предложенным в JVET-L0359. Предложенный способ не использует умножения и использует только 1 деление на итерацию для определения ширин столбцов мозаичных элементов и высот строк мозаичных элементов, в то время как способ HEVC использует 2 умножения и 2 деления на итерацию.
[0096] Вариант осуществления 1. Монотонное колебание
[0097] В варианте осуществления, ширина сегментов в строке или высота сегментов в столбце никогда не находится в порядке возрастания или убывания, следующем предопределенному направлению сканирования. Сегмент может представлять собой мозаичный элемент в картинке, и поэтому размеры мозаичных элементов являются монотонными (никогда по возрастанию или никогда по убыванию) в направлении сканирования. Например, для ширин мозаичных элементов, то, что они никогда не являются возрастающими в направлении сканирования слева направо, означает, что ширина мозаичного элемента никогда не больше, чем ширина другого мозаичного элемента в той же самой строке, пространственно расположенного слева от первого мозаичного элемента.
[0098] В первом варианте осуществления, для никогда не возрастающей ширины столбцов мозаичных элементов (направление сканирования слева направо) и высоты строк мозаичных элементов (направление сканирования сверху вниз) в дополнение к HEVC, следующие функции HEVC:
заменяются следующими функциями:
[0099] Результирующие значения в списках colWidth и rowHeight даны в единицах блока дерева кодирования яркости. Если, например, размер CTU равен 128×128, значения даются в единицах из 128 выборок яркости, так что значение 2 означает 256 выборок яркости.
[00100] Списки colWidth и rowHeight затем используются декодером для определения порядка сканирования блоков в картинке. Когда данные блока декодируются, пространственное положение блока основано на значениях в списках colWidth и rowHeight. Декодер может создавать списки преобразований из адресов сканирования мозаичных элементов в адреса растрового сканирования и другие подобные способы с использованием значений в colWidth и rowHeight. Декодер может затем использовать списки преобразований во время декодирования для определения пространственных положений блоков. В HEVC, списки преобразований используются и называются CtbAddrRsToTs и CtbAddrTsToRs.
[00101] Фиг. 6 показывает таблицу 600, которая сравнивает распределение размеров мозаичных элементов для HEVC и приведенную выше примерную реализацию первого варианта осуществления. Как показано в таблице 600, в предложенном решении, границы мозаичных элементов сохраняются теми же самыми, что и на исходной картинке, когда столбцы мозаичных элементов удаляются с левой или правой или обеих сторон картинки. Эффект округления регулируется, чтобы помещать несколько более широкие мозаичные элементы на левой стороне картинки во всех случаях, используя функцию Ceil() и повторно вычисляя количество оставшихся мозаичных единиц в каждой итерации цикла по мозаичным элементам для определения ширин столбцов мозаичных элементов.
[00102] Таблица 600 показывает то, как внутренние границы мозаичных элементов изменяются после удаления некоторых столбцов мозаичных элементов из исходной картинки с использованием равномерного разнесения мозаичных элементов HEVC, в то время как внутренние границы мозаичных элементов сохраняются неизменными в предложенном решении. Параметры для исходной картинки установлены следующим образом: uniform_spacing_flag=1, PicWidthInCtbsY=10, num_tile_columns_minus1=3, num_tile_rows_minus1=1.
[00103] Ниже приведен другой пример первого варианта осуществления, построенный в дополнение к уравнениям, предложенным в JVET-L0359, который поддерживает гранулярности размеров мозаичных элементов меньшие, чем размер CTU. Следующие изменения уравнений предложены в дополнение к JVET-L0359:
и эквивалентно для высот строк мозаичных элементов предлагаются следующие изменения:
[00104] Результирующие значения в списках colWidth и rowHeight даны в мозаичных единицах яркости. Если, например, размер мозаичной единицы равен 32×32, значения даны в единицах 32 выборок яркости, так что значение 2 означает 64 выборки яркости.
[00105] Таблица 4 сравнивает результаты для ширины мозаичных элементов между JVET-L0359 и предложенным решением в варианте 1 осуществления для разных значений ширин картинки. Результаты для JVET-L0359 показывают несогласованность в ширине столбцов мозаичных элементов (colWidth[i]), когда размер мозаичной единицы изменяется, тогда как предложенное решение в варианте осуществления 1 обеспечивает согласованную ширину столбцов мозаичных элементов (colWidth[i]), когда размер мозаичной единицы изменяется, так как он согласованно приоритизирует несколько большие мозаичные элементы для помещения на левую сторону картинки.
Таблица 4
<i>Ширина картинки </i><i> (в выборках</i><i>яркости)</i>
<i>Размер </i><i>мозаичной единицы</i>
PicWidthInTileUnitsY
JVET-L0359
Первый вариант осуществления
colWidth[i],i=0, 1(в размере мозаичной единицы)
colWidth[i],i=0, 1(в выборках яркости)
colWidth[i],i=0, 1(в размере мозаичной единицы)
colWidth[i],i=0, 1(в выборках яркости)
2160
32
Ceil(67,5) = 68
34, 34
1072, 1088
<i>Меньший</i><i>мозаичный</i><i>элемент</i> начинает сетку
34, 34
1088, 1072
<i>Больший</i><i>мозаичный</i><i>элемент</i>начинает сетку
16
135
67, 68
1088, 1072
<i>Больший</i><i>мозаичный</i><i>элемент</i>начинает сетку
68, 67
1088, 1072
<i>Больший</i><i>мозаичный</i><i>элемент</i>начинает сетку
1080
16
Ceil(67,5) = 68
34, 34
544, 536
<i>Больший</i><i>мозаичный</i><i>элемент</i>начинает сетку
34, 34
544, 536
<i>Больший</i><i>мозаичный</i><i>элемент</i>начинает сетку
8
135
67, 68
536, 544
<i>Меньший</i><i>мозаичный элемент</i> начинает сетку
68, 67
544, 536
<i>Больший</i><i>мозаичный</i><i>элемент</i>начинает сетку
480
128
Ceil(3,75) = 4
2, 2
256, 224
<i>Больший</i><i>мозаичный</i><i>элемент</i>начинает сетку
2, 2
256, 224
<i>Больший</i><i>мозаичный</i><i>элемент</i>начинает сетку
32
15
7, 8
224, 256
<i>Меньший</i><i>мозаичный элемент</i> начинает сетку
8, 7
256, 224
<i>Больший</i><i>мозаичный</i><i>элемент</i>начинает сетку
[00106] Таблица 4 показывает ширину столбца мозаичных элементов, вычисленную, когда uniform_spacing_flag=1, num_tile_columns_minus1=1, с использованием гибкого разделения на мозаичные элементы как в JVET-L0359 по сравнению с предложенным решением в первом варианте осуществления.
[00107] В первом варианте осуществления, декодер может выполнять все или поднабор следующих этапов:
[00108] 1. Декодировать информацию, что одна или несколько картинок разбиваются на более чем один сегмент, из одного или нескольких синтаксических элементов в битовом потоке. Синтаксис предпочтительно находится в наборе параметров картинки. Синтаксис может специфицировать количество R, указывающее количество строк сегментов, и количество C, указывающее количество столбцов сегментов.
[00109] 2. Декодировать информацию, что пространственная сегментация является равномерной, из одного или нескольких синтаксических элементов в битовом потоке. Синтаксис предпочтительно находится в наборе параметров картинки. Синтаксис может состоять из однобитового флага, специфицирующего, является ли пространственная сегментация равномерной или нет.
[00110] 3. Определить размер S единицы сегмента либо из одного или нескольких синтаксических элементов, либо с использованием предопределенного размера единицы сегмента. Если используется предопределенный размер единицы, он может быть равен размеру CTU или размеру CTU в одном измерении. Например, если размер CTU равен 128×128, размер S единицы сегмента может быть равен 128 (или 128×128).
[00111] 4. Вычислить размер картинки в количестве единиц сегмента. Вычисление может выполняться отдельно для высоты и ширины картинки, так что горизонтальный размер (HS) устанавливается равным ширине картинки в выборках яркости, деленной на размер S единицы сегмента. Вертикальный размер (VS) может быть установлен равным высоте картинки в выборках яркости, деленной на размер единицы сегмента.
[00112] 5. Вывести ширину и высоты всех сегментов из количества сегментов в картинке и размера S единицы сегмента. Вывод выполняется в цикле по количеству сегментов, где количество сегментов, еще подлежащих сегментации, и размер картинки, еще подлежащей сегментации в количестве единиц сегментов обновляется в каждой итерации цикла.
[00113] Вывод может выполняться в двух отдельных циклах:
а. Вывести ширины столбцов сегментов из ширины картинки в количестве мозаичных единиц и количестве столбцов C сегментов посредством следующих подэтапов:
i. Установить ширину картинки, еще подлежащей сегментации, (A) равной значению HS
ii. Установить количество столбцов сегментов, еще подлежащих сегментации, (B) равным значению C
iii. Вывести ширины столбцов в цикле, где одно значение ширины выводится на итерацию и где количество столбцов сегментов, еще подлежащих сегментации, (B) и ширина картинки, еще подлежащей сегментации, (A) оба обновляются в каждой итерации. Итерация может исполняться C раз.
1. Выведенная ширина W столбца может быть установлена равной Ceil(A÷B)
2. Переменная A может затем обновляться до A-W, и переменная B может обновляться до B-1
b. Вывести высоты строк сегментов из высоты картинки в количестве мозаичных единиц и количестве строк R сегментов путем следующих подэтапов:
i. Установить высоту картинки, еще подлежащей сегментации, (A) равной значению VS
ii. Установить количество строк сегментов, еще подлежащих сегментации, (B) равным значению R
iii. Вывести высоты строк в цикле, где одно значение высоты выводится на итерацию и где количество строк сегментов, еще подлежащих сегментации, (B) и высота картинки, еще подлежащей сегментации, (A) оба обновляются в каждой итерации. Итерация может исполняться R раз.
1. Выведенная высота H строки может быть установлена равной Ceil(A÷B)
2. Переменная A может затем обновляться до A-H, и переменная B может обновляться до B-1
[00114] 6. Вывести пространственное местоположение для текущего блока с использованием выведенных ширин сегмента и выведенных высот сегмента.
[00115] 7. Декодировать текущий блок с использованием выведенного пространственного местоположения. Сохранить декодированные значения выборки для текущего блока в памяти в положениях памяти, соответствующих выведенному пространственному местоположению.
[00116] В варианте этого варианта осуществления, функция Ceil() может быть замещена функцией Floor(), только в горизонтальном или только в вертикальном или в обоих направлениях.
[00117] В варианте этого варианта осуществления, флаг может выбирать между двумя функциями Ceil() и Floor(). В некоторых вариантах осуществления, могут существовать два независимых флага для горизонтального и вертикального направлений.
[00118] Вариант осуществления 2. Специфицированный порядок
[00119] Во втором варианте осуществления, ширина сегментов в строке или высота сегментов в столбце следует специфицированному порядку. Этот специфицированный порядок может сигнализироваться в битовом потоке с использованием шаблона образца в виде последовательности битов. Сегменты могут представлять собой мозаичные элементы в картинке, и поэтому в этом варианте осуществления задается форма предпочтительного колебания в размерах мозаичных элементов. Например, все несколько более широкие мозаичные элементы находятся на левой стороне картинки. Это может выполняться посредством шаблона образца, выраженного в форме последовательности битов, которая задает функцию Ceil() или Floor() в каждой итерации цикла по мозаичным элементам, чтобы задавать ширину (или высоту) мозаичного элемента. Функция Ceil() может быть представлена как 1, и функция Floor() может быть представлена как 0 в последовательности битов образца. В качестве примера, образец 110 может задавать функцию Ceil() в первых двух мозаичных элементах и функцию Floor() в третьей итерации цикла для задания размера мозаичного элемента. Шаблон может периодически повторяться, если количество мозаичных элементов больше, чем длина последовательности битов образца.
[00120] Вариант осуществления 3. Двоичные разделения мозаичных элементов
n
[00121] В третьем варианте осуществления, двоичное разделение сегмента с явным упорядочиванием ширины или высоты сегмента применяется к ширине или высоте картинки. Сегменты могут представлять собой мозаичные элементы в картинке, и поэтому двоичное разбиение используется для разбиения картинки на 2 мозаичных элементов с равномерными размерами мозаичных элементов. Предопределенный шаблон колебания (как во втором варианте осуществления) может использоваться в комбинации с этим вариантом осуществления. Двоичное разбиение может выполняться иерархически до тех пор, пока алгоритм не достигнет заданного количества сегментов, или только до определенного количества этапов, и остаток разделений сегмента выполняется другими способами. В качестве примера, полный размер делится на 2 на первом этапе, где задается назначать меньший или больший сегмент влево или вправо. На каждом из последующих этапов, каждый из левого и правого сегментов делится на две части с использованием следующего уровня двоичного разбиения и заданного правила для позиционирования возможно меньшего или большего сегмента.
[00122] Вариант осуществления 4. Упорядочивание колебания по умолчанию
[00123] В четвертом варианте осуществления, ширина сегментов в строке или высота сегментов в столбце картинки следует заданному порядку по умолчанию для ширины или высоты сегментов. Сегменты могут представлять собой мозаичные элементы в картинке, и поэтому предпочтительное упорядочивание по умолчанию определяется для контроля колебаний в размерах сегментов. Шаблон колебания по умолчанию может сигнализироваться в битовом потоке. В варианте этого варианта осуществления шаблон по умолчанию может быть перезаписан. В другом варианте этого варианта осуществления флаг может задавать, используется ли упорядочивание по умолчанию или другое заданное упорядочивание.
[00124] Вариант осуществления 5.
[00125] В пятом варианте осуществления, цель состоит в достижении максимально возможных больших мозаичных элементов равного размера с использованием способа равномерного разнесения.
[00126] Это может быть достигнуто путем декодирования значения TileWidth из одного или нескольких кодовых слов в битовом потоке. Затем значения ширины всех столбцов мозаичных элементов в картинке за исключением одного устанавливается равным декодированному значению TileWidth. Значение ширины одного оставшегося столбца мозаичных элементов устанавливается равным значению ширины картинки минус сумма значений ширины всех столбцов мозаичных элементов за исключением одного оставшегося столбца мозаичных элементов. Значение ширины одного оставшегося столбца может также быть равным значению TileWidth.
[00127] Альтернативно или дополнительно, значение TileHeight декодируется из одного или нескольких кодовых слов в битовом потоке. Затем значения высоты всех строк мозаичных элементов в картинке за исключением одного устанавливаются равными выведенному значению TileHeight. Значение высоты одной оставшейся строки мозаичных элементов устанавливается равным значению высоты картинки минус сумма значений высоты всех строк мозаичных элементов за исключением одной оставшейся строки мозаичных элементов. Значение высоты одной оставшейся строки может также быть равным значению TileHeight.
[00128] Способ в этом варианте осуществления приводит к тому, что большинство мозаичных элементов имеют равный размер, например, как проиллюстрировано на картинке 1200, показанной на фиг. 12, где большинство мозаичных элементов имеют размер 4×4 CTU или мозаичных единиц.
[00129] Вариант осуществления может быть реализован в HEVC v5 или текущем проекте VVC путем удаления следующего текста из спецификации HEVC v5 или проекта VVC.
[00130] Удаленный текст выше заменяется следующим текстом в спецификации HEVC v5 или проекте VVC соответственно.
[00131] Синтаксис и семантика для tile_width и tile_height могут выглядеть следующим образом:
Таблица 5. Синтаксис мозаичных элементов для седьмого варианта осуществления
[00132] Синтаксис и семантика объясняются более подробно ниже:
num_tile_columns_minus1
[00133]  плюс 1 специфицирует количество столбцов мозаичных элементов, разбивающих картинку. num_tile_columns_minus1 должно находиться в диапазоне от 0 до PicWidthInCtbsY - 1, включительно. Когда tiles_enabled_flag равен 0, значение num_tile_columns_minus1 предполагается равным 0. В противном случае, если uniform_spacing_flag равен 1, значение num_tile_columns_minus1 выводится, как показано выше.
num_tile_rows_minus1
[00134]  плюс 1 специфицирует количество строк мозаичных элементов, разбивающих картинку. num_tile_rows_minus1 должно находиться в диапазоне от 0 до PicHeightinCtbsY - 1, включительно. Когда tiles_enabled_flag равен 0, значение num_tile_rows_minus1 предполагается равным 0. В противном случае, если uniform_spacing_flag равен 1, значение num_tile_rows_minus1 выводится, как показано выше.
[00135] Когда tiles_enabled_flag равен 1, num_tile_columns_minus1 и num_tile_rows_minus1 не должны быть оба равны 0.
tile_width
[00136]  специфицирует ширину всех мозаичных элементов, не принадлежащих последнему столбцу мозаичных элементов. tile_width должно находиться в диапазоне от 1 до PicWidthInCtbsY - 1, включительно.
tile_height
[00137]  специфицирует высоту всех мозаичных элементов, не принадлежащих последней строке мозаичных элементов. tile_height должно находиться в диапазоне от 1 до PicHeightinCtbsY - 1, включительно.
[00138] Декодер может выполнять все или поднабор следующих этапов для этого варианта осуществления:
[00139] 1. Декодировать информацию, что одна или несколько картинок разбиваются на более чем один сегмент, из одного или нескольких синтаксических элементов в битовом потоке. Синтаксис предпочтительно находится в наборе параметров картинки.
[00140] 2. Декодировать информацию, что пространственная сегментация является равномерной, из одного или нескольких синтаксических элементов в битовом потоке. Синтаксис предпочтительно находится в наборе параметров картинки. Синтаксис может состоять из однобитового флага, специфицирующего, является ли пространственная сегментация равномерной или нет.
[00141] 3. Определить размер S единицы сегмента либо из одного или нескольких синтаксических элементов, либо с использованием предопределенного размера единицы сегмента. Если используется предопределенный размер единицы, он может быть равен единице дерева кодирования. Например, если размер CTU равен 128×128, размер S единицы сегмента может быть равен 128 (или 128×128).
[00142] 4. Вычислить размер картинки в количестве единиц сегмента. Вычисление может выполняться отдельно для высоты и ширины, так что горизонтальный размер HS устанавливается равным ширине картинки в выборках яркости, деленной на размер единицы сегмента. Вертикальный размер VS может быть установлен равным высоте картинки в выборках яркости, деленной на размер единицы сегмента.
[00143] 5. Декодировать значение TileWidth, представляющее ширину мозаичного элемента в S единицах из кодового слова в битовом потоке. Кодовое слово может представлять собой кодовое слово UVLC. Кодовое слово может декодироваться как ширина мозаичного элемента минус один, и поэтому значение TileWidth может быть установлено равным декодированному значению плюс 1.
[00144] 6. Декодировать значение TileHeight, представляющее высоту мозаичного элемента в S единицах из кодового слова в битовом потоке. Кодовое слово может представлять собой кодовое слово UVLC. Кодовое слово может декодироваться как высота мозаичного элемента минус один, и поэтому значение TileWidth может быть установлено равным декодированному значению плюс 1.
[00145] 7. Вывести ширины столбцов сегмента из ширины картинки в количестве мозаичных единиц и переменной TileWidth посредством следующих подэтапов:
a. Установить ширину картинки, еще подлежащей сегментации, (A) равной значению HS
b. Установить переменную i равной значению 0
c. Повторно исполнять следующие подэтапы, пока ширина картинки, еще подлежащей сегментации, (A) не станет больше, чем значение TileWidth:
i. Установить ширину столбца i-го столбца сегментов в TileWidth
ii. Вычесть значение TileWidth из значения A
iii. Увеличить значение переменной i на 1
d. Установить ширину столбца i-го столбца сегментов в значение A
e. Установить переменную num_tile_columns_minus1 равной значению переменной i, или альтернативно, установить переменную, представляющую количество столбцов мозаичных элементов в картинке, равной значению переменной i плюс 1
[00146] 8. Вывести высоты строк сегментов из высоты картинки в количестве мозаичных единиц и переменную TileHeight посредством следующих подэтапов:
a. Установить высоту картинки, еще подлежащей сегментации, (A) равной значению VS
b. Установить переменную i равной значению 0
c. Повторно исполнить следующие подэтапы, пока высота картинки, еще подлежащей сегментации, (A) не станет больше, чем значение TileHeight:
i. Установить высоту строки i-ой строки сегмента в TileHeight
ii. Вычесть значение TileHeight из значения A
iii. Увеличить значение переменной i на 1
d. Установить высоту строки i-ой строки сегмента в значение A
e. Установить переменную num_tile_rows_minus1 равной значению переменной i, или альтернативно, установить переменную, представляющую количество строк мозаичных элементов в картинке, равным значению переменной i плюс 1
[00147] 9. Вывести пространственное местоположение для текущего блока с использованием выведенных ширин сегментов и выведенных высот сегментов.
[00148] 10. Декодировать текущий блок с использованием выведенного пространственного местоположения. Сохранить декодированные значения выборок для текущего блока в памяти в положениях в памяти, соответствующих выведенному пространственному местоположению.
[00149] Вариант осуществления 6.
[00150] В шестом варианте осуществления, может использоваться один из множества способов для равномерного мозаичного разбиения. В одном варианте осуществления, существуют один или несколько синтаксических элементов, указывающих, какой из множества способов следует использовать. Один или несколько синтаксических элементов могут представлять собой флаг, специфицирующий, какой из двух способов используется. Один или несколько синтаксических элементов могут быть представлены в наборе параметров, таком как набор параметров картинки, но этот вариант осуществления не ограничен только этим местоположением. Набор множества способов может включать в себя любой способ, раскрытый здесь, а также способы, известные в данной области техники, такие как способы, описанные в спецификации HEVC v5 и спецификации проекта VVC.
[00151] Вариант осуществления 7. Малые мозаичные элементы слева или сверху
[00152] В вариантах осуществления 5-6, описанных выше в настоящем раскрытии, мозаичные элементы были упорядочены так, что полноразмерные мозаичные элементы расположены слева и сверху в мозаичной структуре картинки.
[00153] В седьмом варианте осуществления, мозаичные элементы упорядочиваются противоположно тому, как в вариантах осуществления 5-6, т.е. остаток ширины мозаичных элементов является шириной самого левого мозаичного элемента(ов) в равномерной мозаичной структуре и/или остаток высоты мозаичных элементов является высотой самого верхнего мозаичного элемента(ов) в равномерной мозаичной структуре. Другими словами, полноразмерные мозаичные элементы расположены справа и/или снизу, а мозаичные элементы меньшего размера с шириной, равной остатку ширины мозаичных элементов, и/или с высотой, равной высоте мозаичных элементов, расположены слева и/или сверху в мозаичной структуре. Это иллюстрируется на фиг. 13 картинкой 1300, которая содержит 896×640 пикселов. Сплошные линии представляют границы мозаичных элементов, а пунктирные линии представляют границы CTU. Каждая CTU составляет 64×64 пикселов. Фиг. 13 показывает пример равномерной мозаичной структуры с полноразмерными мозаичными элементами снизу и справа и мозаичными элементами меньшего размера, расположенными слева и сверху.
[00154] Вариант осуществления 8. Выравнивание по границам группы мозаичных элементов
[00155] В восьмом варианте осуществления, размеры мозаичных элементов упорядочиваются в соответствии с любым из предшествующих вариантов осуществления с добавлением того, что мозаичные элементы группируются в группы мозаичных элементов, где каждая группа мозаичных элементов может содержать строку/столбец мозаичных элементов с шириной/высотой мозаичных элементов, равной остатку высоты/ширины мозаичных элементов.
[00156] Это проиллюстрировано на фиг. 14, где группа мозаичных элементов представлена большими пунктирными линиями, мозаичные элементы представлены сплошными линиями и CTU представлены штриховыми линиями. Отметим, что не все группы мозаичных элементов могут иметь мозаичные элементы с равным остатком ширины мозаичных элементов в зависимости от того, возможно ли равным образом разделить общий остаток на количество CTU. Фиг. 14 показывает пример мозаичной структуры с группами мозаичных элементов, где каждая группа мозаичных элементов может содержать мозаичный элемент с шириной и/или высотой, равной значению остатка ширины/высоты мозаичных элементов.
[00157] В примере, показанном на фиг. 14, ширина группы мозаичных элементов составляет 5 CTU, и ширина мозаичных элементов составляет 2 CTU. Поскольку ширина картинки составляет 14 CTU, картинка делится на 3 группы мозаичных элементов в горизонтальном направлении, с 5, 5 и 4 мозаичными элементами соответственно. Две первые группы мозаичных элементов делятся горизонтально на два полноразмерных мозаичных элемента из 2 CTU и один мозаичный элемент с остаточной шириной мозаичных элементов в 1 CTU. Самую левую группу мозаичных элементов можно равно разделить на 2 CTU, поэтому не требуется мозаичный элемент с остаточной шириной мозаичных элементов. Может также иметься сценарий с большими мозаичными элементами, содержащими больше CTU (например, 4 мозаичных элемента по горизонтали), где остатки будут составлять 3, 3, 2, т.е. все группы мозаичных элементов имеют мозаичные элементы с остатком ширины мозаичных элементов, но остаток ширины мозаичных элементов не является одинаковым для всех групп мозаичных элементов.
[00158] Фиг. 15 представляет собой блок-схему последовательности операций, иллюстрирующую процесс 1500 в соответствии с вариантом осуществления. Процесс 1500 представляет собой способ для декодирования картинки. Способ 1500 включает в себя декодирование информации, что картинка разбивается на более чем один сегмент, на основе одного или нескольких синтаксических элементов в битовом потоке (этап 1502); декодирование информации, что пространственная сегментация является равномерной, на основе одного или нескольких синтаксических элементов в битовом потоке (этап 1504); определение размера единицы сегмента на основе одного или нескольких синтаксических элементов или на основе предопределенного размера единицы сегмента (этап 1506); декодирование первого значения, указывающего ширину сегмента, из одного или нескольких кодовых слов в битовом потоке (этап 1508); декодирование второго значения, указывающего высоту сегмента, из одного или нескольких кодовых слов в битовом потоке (этап 1510); выведение ширин столбцов сегментов на основе ширины картинки в количестве единиц сегмента и первого значения (этап 1512); выведение высот строк сегментов на основе высоты картинки в количестве единиц сегмента и второго значения (этап 1514); выведение пространственного местоположения для текущего блока на основе выведенных ширин столбцов сегментов и выведенных высот сегментов (этап 1516); и декодирование текущего блока на основе выведенного пространственного местоположения (этап 1518).
[00159] В некоторых вариантах осуществления, выведение ширин столбцов сегментов содержит установку значений ширины столбца всех столбцов сегментов в картинке за исключением одного столбца равными первому значению и установку значения ширины столбца одного оставшегося столбца сегментов равным ширине картинки минус сумма значений ширины всех столбцов сегментов за исключением одного столбца сегментов.
[00160] В некоторых вариантах осуществления, выведение высот строк сегментов содержит установку значений высоты строки всех строк сегментов в картинке за исключением одной строки равными второму значению и установку значения высоты строки одной оставшейся строки сегментов равным высоте картинки минус сумма значений высоты всех строк сегментов за исключением одной строки сегментов.
[00161] В некоторых вариантах осуществления, один или несколько синтаксических элементов находятся в наборе параметров картинки.
[00162] В некоторых вариантах осуществления, один или несколько синтаксических элементов содержат однобитовый флаг, специфицирующий, является ли пространственная сегментация равномерной.
[00163] В некоторых вариантах осуществления, предопределенный размер единицы сегмента равен единице дерева кодирования.
[00164] В некоторых вариантах осуществления, вычисление размера картинки в сегменте содержит: вычисление размера сегмента картинки для высоты и вычисление размера сегмента картинки для ширины.
[00165] В некоторых вариантах осуществления, первое значение является значением TileWidth, представляющим ширину мозаичного элемента в единицах сегмента, и вторым значением является TileHeight, представляющее высоту мозаичного элемента в единицах сегмента.
[00166] Фиг. 16 представляет собой блок-схему, показывающую функциональные модули декодера 1602 в соответствии с некоторыми вариантами осуществления. Как показано на фиг. 16, декодер 1602 включает в себя первый модуль 1604 декодирования для декодирования информации, что картинка разбивается на более чем один сегмент, на основе одного или нескольких синтаксических элементов в битовом потоке; второй модуль 1606 декодирования для декодирования информации, что пространственная сегментация является равномерной, на основе одного или нескольких синтаксических элементов в битовом потоке; модуль 1608 определения для определения размера единицы сегмента на основе одного или нескольких синтаксических элементов или на основе предопределенного размера единицы сегмента; третий модуль 1610 декодирования для декодирования первого значения, указывающего ширину сегмента, из одного или нескольких кодовых слов в битовом потоке; четвертый модуль 1612 декодирования для декодирования второго значения, указывающего высоту сегмента, из одного или нескольких кодовых слов в битовом потоке; первый модуль 1614 выведения для выведения ширин столбцов сегментов на основе ширины картинки в количестве единиц сегмента и первого значения; второй модуль 1616 выведения для выведения высот строк сегментов на основе высоты картинки в количестве единиц сегмента и второго значения; третий модуль 1618 выведения для выведения пространственного местоположения для текущего блока на основе выведенных ширин столбцов сегментов и выведенных высот сегментов; и пятый модуль 1620 декодирования для декодирования текущего блока на основе выведенного пространственного местоположения.
[00167] Фиг. 7 представляет собой блок-схему последовательности операций, иллюстрирующую процесс 700 в соответствии с вариантом осуществления. Процесс 700 представляет собой способ для декодирования картинки (10), содержащей некоторое количество единиц (8), из битового потока, картинка разбивается на по меньшей мере два пространственных сегмента (11) посредством структуры (13) разбиения. Способ включает в себя декодирование одного или нескольких кодовых слов в битовом потоке (этап 710); определение, что структура разбиения является равномерной, на основе одного или нескольких кодовых слов (этап 720); определение количества пространственных сегментов на основе одного или нескольких кодовых слов (этап 730); определение размера единицы сегмента (этап 740); и выведение размеров и/или местоположений для всех пространственных сегментов в картинке из одного или нескольких кодовых слов (этап 750), причем выведение размеров и/или местоположения сегмента содержит первый цикл по количеству пространственных сегментов в первом измерении или направлении, и количество оставшихся единиц сегмента в первом измерении или направлении, подлежащих сегментации, и количество оставшихся сегментов в первом измерении вычисляются в первом цикле.
[00168] В некоторых вариантах осуществления, выведение размеров и/или местоположения сегмента содержит второй цикл по количеству пространственных сегментов во втором измерении или направлении, отличном от первого измерения или направления, и количество оставшихся единиц сегмента во втором измерении или направлении, подлежащих сегментации, и количество оставшихся сегментов во втором измерении или направлении вычисляются во втором цикле.
[00169] В некоторых вариантах осуществления, первое измерение или направление представляет собой горизонтальное измерение или направление, и второе измерение или направление представляет собой вертикальное измерение или направление.
[00170] В некоторых вариантах осуществления, ширина сегментов в строке или высота сегментов в столбце следует специфицированному порядку.
[00171] В некоторых вариантах осуществления, ширина сегментов в строке или высота сегментов в столбце никогда не находятся в возрастающем или убывающем порядке.
[00172] В некоторых вариантах осуществления, двоичное разделение сегмента с явным упорядочиванием ширины или высоты сегмента применяется к ширине или высоте картинки.
[00173] В некоторых вариантах осуществления, ширина сегментов в строке или высота сегментов в столбце картинки следует специфицированному порядку по умолчанию для ширины или высоты сегментов.
[00174] В некоторых вариантах осуществления, размер единицы сегмента равен размеру единицы дерева кодирования (CTU).
[00175] В некоторых вариантах осуществления, размер единицы сегмента меньше, чем размер единицы дерева кодирования (CTU). В некоторых вариантах осуществления, размер единицы сегмента больше, чем размер CTU. В некоторых вариантах осуществления, любой сегмент является мозаичным элементом.
[00176] В некоторых вариантах осуществления, выведение размеров содержит:
выведение списка Sizes[] как:
A=PicWidthInTileUnits
B=NumberOfSegmentColumns
for(i=0; i < NumberOfSegmentColumns; i++) {
Sizes[i] = Round(A ÷ B)
A=A - Sizes[i]
B=B - 1
}
где NumberOfSegmentColumns представляет собой количество столбцов сегментов, PicWidthInTileUnits представляет собой ширину картинки в единицах мозаичного элемента, Round() представляет собой функцию Floor() или функцию Ceil(), и ÷ представляет собой деление без усечения или округления.
[00177] В некоторых вариантах осуществления, выведение размеров содержит:
выведение списка Sizes[] как:
A=PicHeightInTileUnits
B=NumberOfSegmentRows
for(i=0; i < NumberOfSegmentRows; i++) {
Sizes[i] = Round(A ÷ B)
A=A - Sizes[i]
B=B - 1
}
где NumberOfSegmentRows представляет собой количество строк сегментов, PicHeightinTileUnits представляет собой высоту картинки в единицах мозаичного элемента, Round() представляет собой функцию Floor() или функцию Ceil(), и ÷ представляет собой деление без усечения или округления.
[00178] В некоторых вариантах осуществления, сегменты (11) независимы от других сегментов (11), так что выведение любого режима интра-предсказания для любой единицы (16) в текущем сегменте (15) зависит только от ранее выведенных режимов интра-предсказания в единицах (17), которые принадлежат текущему сегменту (15), и не зависит от какого-либо режима интра-предсказания в какой-либо единице (18), которая принадлежит другому сегменту (14).
[00179] В некоторых вариантах осуществления, способ включает в себя дополнительный этап разбиения сегментов на равномерные ширины или высоты, который следует фиксированному шаблону колебания, независимому от количества пространственных сегментов.
[00180] Фиг. 8 представляет собой блок-схему последовательности операций, иллюстрирующую процесс 800 в соответствии с вариантом осуществления. Процесс 800 представляет собой способ для кодирования картинки (10), содержащей некоторое количество единиц (8), в битовый поток, причем картинка разбивается на по меньшей мере два пространственных сегмента (11) посредством равномерной структуры (13) разбиения. Способ включает в себя кодирование информации, что структура (13) разбиения является равномерной, путем кодирования одного или нескольких кодовых слов в битовый поток (этап 810); кодирование количества пространственных сегментов путем кодирования одного или нескольких кодовых слов в битовый поток (этап 820); определение размера единицы сегмента (этап 830); и выведение и кодирование размеров и/или местоположений для всех пространственных сегментов в картинке в битовый поток (этап 840), причем выведение размеров сегмента содержит первый цикл по количеству пространственных сегментов в первом измерении или направлении, и количество оставшихся единиц сегмента в первом измерении или направлении, подлежащих сегментации, и количество оставшихся сегментов в первом измерении или направлении вычисляются в первом цикле.
[00181] В некоторых вариантах осуществления, выведение размеров и/или местоположения сегмента содержит второй цикл по количеству пространственных сегментов во втором измерении или направлении, отличном от первого измерения или направления, и количество оставшихся единиц сегмента во втором измерении или направлении, подлежащих сегментации, и количество оставшихся сегментов во втором измерении или направлении вычисляются во втором цикле.
[00182] В некоторых вариантах осуществления, первое измерение или направление представляет собой горизонтальное измерение или направление, и второе измерение или направление представляет собой вертикальное измерение или направление.
[00183] Фиг. 9 представляет собой блок-схему, показывающую функциональные модули декодера 902 в соответствии с некоторыми вариантами осуществления. Как показано на фиг. 9, декодер 902 включает в себя модуль 904 декодирования для декодирования одного или нескольких кодовых слов в битовом потоке; первый модуль 906 определения для определения, что структура разбиения является равномерной, на основе одного или нескольких кодовых слов; второй модуль 908 определения для определения количества пространственных сегментов на основе одного или нескольких кодовых слов; третий модуль 910 определения для определения размера единицы сегмента; и модуль 912 выведения для выведения размеров и/или местоположений для всех пространственных сегментов в картинке из одного или нескольких кодовых слов, причем выведение размеров и/или местоположения сегмента содержит первый цикл по количеству пространственных сегментов в первом измерении и второй цикл по количеству пространственных сегментов во втором измерении, количество оставшихся единиц сегмента в первом измерении, подлежащих сегментации, и количество оставшихся сегментов в первом измерении вычисляются в первом цикле, и количество оставшихся единиц сегмента во втором измерении, подлежащих сегментации, и количество оставшихся сегментов во втором измерении вычисляются во втором цикле.
[00184] Фиг. 10 представляет собой блок-схему, показывающую функциональные модули кодера 1002 в соответствии с некоторыми вариантами осуществления. Как показано на фиг. 10, кодер 1002 включает в себя первый модуль 1004 кодирования для кодирования информации, что структура (13) разбиения является равномерной, путем кодирования одного или нескольких кодовых слов в битовый поток; второй модуль 1006 кодирования для кодирования количества пространственных сегментов путем кодирования одного или нескольких кодовых слов в битовый поток; модуль 1008 определения для определения размера единицы сегмента; и модуль 1010 выведения для выведения и кодирования размеров и/или местоположений для всех пространственных сегментов в картинке в битовый поток, причем выведение размеров сегмента содержит первый цикла по количеству пространственных сегментов в первом измерении и второй цикл по количеству пространственных сегментов во втором измерении, количество оставшихся единиц сегмента в первом измерении, подлежащих сегментации, и количество оставшихся сегментов в первом измерении вычисляются в первом цикле, и количество оставшихся единиц сегмента во втором измерении, подлежащих сегментации, и количество оставшихся сегментов во втором измерении вычисляются во втором цикле.
[00185] В некоторых вариантах осуществления, кодер сконфигурирован, чтобы определять структуру разбиения, которая делит картинку на некоторое количество равномерных пространственных сегментов, причем каждый пространственный сегмент содержит по меньшей мере одну единицу, и причем выведение размеров сегмента выполняется в первом цикле по количеству пространственных сегментов в первом измерении и во втором цикле по количеству пространственных сегментов во втором измерении, причем количество оставшихся единиц сегмента в первом измерении, подлежащих сегментации, и количество оставшихся сегментов в первом измерении вычисляются в первом цикле, и причем количество оставшихся единиц сегмента во втором измерении, подлежащих сегментации, и количество оставшихся сегментов во втором измерении вычисляются во втором цикле; кодировать множество пространственных сегментов в соответствии со структурой разбиения, чтобы сгенерировать множество закодированных пространственных сегментов, причем каждый закодированный пространственный сегмент соответствует одному из пространственных сегментов структуры разбиения, и каждый закодированный пространственный сегмент является независимым, так что выведение какого-либо режима интра-предсказания для первой единицы первого пространственного сегмента зависит от выведенного режима интра-предсказания для второй единицы первого пространственного сегмента и является независимым от какого-либо режима интра-предсказания для единиц других пространственных сегментов структуры разбиения; и генерировать битовый поток, содержащий множество закодированных пространственных сегментов и информацию, указывающую равномерную структуру разбиения, используемую, чтобы разделять картинку на множество пространственных сегментов.
[00186] Фиг. 11 представляет собой блок-схему устройства 1100 для реализации декодера 902, 1602 и/или кодера 1002, в соответствии с некоторыми вариантами осуществления. Когда устройство 1100 реализует декодер, устройство 1100 может называться “устройством 1100 декодирования”, и когда устройство 1100 реализует кодер, устройство 1100 может называться “устройством 1100 кодирования”. Как показано на фиг. 11, устройство 1100 (также известное как “узел”) может содержать: схему 1102 обработки (PC), которая может включать в себя один или несколько процессоров (P) 1155 (например, универсальный микропроцессор и/или один или несколько других процессоров, таких как специализированная интегральная схема (ASIC), программируемые вентильные матрицы (FPGA) и тому подобное); сетевой интерфейс 1148, содержащий передатчик (Tx) 1145 и приемник (Rx) 1147 для обеспечения устройству 1100 возможности передавать данные и принимать данные на/от других узлов, соединенных с сетью 1110 (например, сетью Интернет-протокола (IP)), с которой соединен сетевой интерфейс 1148; и локальный модуль 1108 хранения (также известный как “система хранения данных”), который может включать в себя одно или несколько энергонезависимых устройств хранения и/или одно или несколько энергозависимых устройств хранения. В вариантах осуществления, где PC 1102 включает в себя программируемый процессор, может быть обеспечен компьютерный программный продукт (CPP) 1141. CPP 1141 включает в себя считываемый компьютером носитель (CRM) 1142, хранящий компьютерную программу (CP) 1143, содержащую считываемые компьютером инструкции (CRI) 1144. CRM 1142 может представлять собой не-временный считываемый компьютером носитель, такой как магнитные носители (например, жесткий диск), оптические носители, устройства памяти (например, память с произвольным доступом, флэш-память) и тому подобное. В некоторых вариантах осуществления, CRI 1144 компьютерной программы 1143 сконфигурированы так, что при исполнении посредством PC 1102, CRI побуждают устройство 1100 выполнять вышеописанные этапы (например, этапы, описанные со ссылкой на блок-схемы последовательностей операций). В других вариантах осуществления, устройство 1100 может быть сконфигурировано, чтобы выполнять вышеописанные этапы, без потребности в коде. То есть, например, PC 1102 может состоять только из одной или нескольких ASIC. Таким образом, признаки вышеописанных вариантов осуществления могут быть реализованы в аппаратных средствах и/или программном обеспечении.
[00187] Краткое описание различных вариантов осуществления
[00188] A1. Способ для декодирования картинки, причем способ содержит: декодирование информации, что картинка разбивается на более чем один сегмент, на основе одного или нескольких синтаксических элементов в битовом потоке; декодирование информации, что пространственная сегментация является равномерной, на основе одного или нескольких синтаксических элементов в битовом потоке; определение размера единицы сегмента на основе одного или нескольких синтаксических элементов или на основе предопределенного размера единицы сегмента; декодирование первого значения, указывающего ширину сегмента, из одного или нескольких кодовых слов в битовом потоке; декодирование второго значения, указывающего высоту сегмента, из одного или нескольких кодовых слов в битовом потоке; выведение ширин столбцов сегментов на основе ширины картинки в количестве единиц сегмента и первого значения; выведение высот строк сегментов на основе высоты картинки в количестве единиц сегмента и второго значения; выведение пространственного местоположения для текущего блока на основе выведенных ширин столбцов сегментов и выведенных высот строк сегментов; и декодирование текущего блока на основе выведенного пространственного местоположения.
[00189] A2. Способ варианта осуществления A1, причем выведение ширин столбцов сегментов содержит: установку значений ширины столбца всех столбцов сегментов в картинке за исключением одного столбца равными первому значению и установку значения ширины столбца одного оставшегося столбца сегментов равным ширине картинки минус сумма значений ширины всех столбцов сегментов за исключением одного столбца сегментов.
[00190] A3. Способ варианта осуществления A1 или A2, причем выведение высот строк сегментов содержит: установку значений высоты строк всех строк сегментов в картинке за исключением одной строки равными второму значению и установку значения высоты строки одной оставшейся строки сегментов равным высоте картинки минус сумма значений высоты всех строк сегментов за исключением одной строки сегментов.
[00191] A4. Способ любого одного из вариантов осуществления A1-A3, причем один или несколько синтаксических элементов находятся в наборе параметров картинки.
[00192] A5. Способ любого одного из вариантов осуществления A1-A4, причем один или несколько синтаксических элементов содержит однобитовый флаг, специфицирующий, является ли пространственная сегментация равномерной.
[00193] A6. Способ любого одного из вариантов осуществления A1-A5, причем единица сегмента представляет собой единицу дерева кодирования или блок дерева кодирования.
[00194] A7. Способ по любому из пунктов A1-A6, дополнительно содержащий вычисление размера картинки в некотором количестве единиц сегмента.
[00195]
[00196] A8. Способ по пункту A7, причем вычисление размера картинки в количестве единиц сегмента содержит: вычисление размера сегмента картинки для высоты и вычисление размера сегмента картинки для ширины.
[00197]
[00198] A9. Способ по любому из пунктов A1-A8, причем первое значение представляет ширину мозаичного элемента в единицах сегмента, и второе значение представляет высоту мозаичного элемента в единицах сегмента.
[00199] A10. Способ по любому из пунктов A1-A9, причем декодирование первого значения из одного или нескольких кодовых слов в битовом потоке состоит из декодирования значения конкретного кодового слова в битовом потоке и добавления 1 к декодированному значению.
[00200] A11. Способ по любому из пунктов A1-A10, причем выведение ширин столбцов сегментов содержит:
[00201] установку переменной, A, в оставшееся значение ширины; и
[00202] определение, является ли значение, равное (A - TileWidth), меньшим, чем TileWidth, причем TileWidth равно первому значению.
[00203] A12. Способ по пункту A11, причем если определено, что значение (A - TileWidth) не меньше, чем первое значение, то выполнение этапов:
[00204] установки первой переменной ширины столбца равной TileWidth; и
[00205] определения, является ли значение, равное (A - 2 × TileWidth)), меньшим, чем TileWidth.
[00206] A13. Способ по пункту A11 или A12, причем определение, является ли значение (A - TileWidth) меньшим, чем TileWidth, содержит:
[00207] установку A равным (A - TileWidth); и
[00208] сравнение A с TileWidth.
[00209] A14. Способ по пункту A12 или A13, причем если определено, что A - TileWidth меньше, чем TileWidth, то установку второй переменной ширины столбца равной A - TileWidth.
[00210] A15. Способ по пункту A15, причем установка второй переменной ширины столбца равной A - TileWidth выполняется, только если A - TileWidth больше 0.
[00211] A16. Способ по пункту A14 или A15, дополнительно содержащий установку переменной, представляющей количество столбцов мозаичных элементов в картинке, равной значению переменной i или равной значению переменной i плюс 1, причем i является целым, так что значение (A - ((i-1) × TileWidth)) не меньше, чем TileWidth, но значение (A - (i × TileWidth)) меньше, чем TileWidth.
[00212] A17. Способ по любому из пунктов A1-A10, причем выведение ширин столбцов сегментов содержит:
[00213] 1) установку переменной, A, в оставшееся значение ширины; и
[00214] 2) установку переменной, i, в исходное значение;
[00215] 3) определение, является ли значение, равное (A - (i × TileWidth)), меньшим, чем TileWidth, причем TileWidth равно первому значению; и
[00216] 4) если определено, что значение, равное (A - (i × TileWidth)), не меньше, чем TileWidth, то выполнение этапов: установки переменной col_width[i] равной TileWidth, приращения i и повторения этапов 3) и 4).
[00217] A18. Способ по пункту A17, причем после того, как определено, что значение, равное (A - (i × TileWidth)), меньше, чем TileWidth, выполнение установки col_width[i] равной A и приращение i.
[00218] В то время как различные варианты осуществления описаны в настоящем документе (включая Приложение, если таковое имеется), следует понимать, что они были представлены только в качестве примера и не для ограничения. Таким образом, широта и объем настоящего раскрытия не должны быть ограничены любым из описанных выше примерных вариантов осуществления. Более того, любая комбинация вышеописанных элементов во всех возможных их вариациях включается в раскрытие, если только иное не указано здесь или иное не вступает в явное противоречие с контекстом.
[00219] Дополнительно, в то время как процессы, описанные выше и проиллюстрированные на чертежах, показаны как последовательность этапов, это было сделано исключительно ради иллюстрации. Соответственно, подразумевается, что некоторые этапы могут добавляться, некоторые этапы могут опускаться, порядок этапов может быть переупорядочен, и некоторые этапы могут выполняться параллельно.