ОБЛАСТЬ ТЕХНИКИ
Настоящее раскрытие относится, в общем, к методам кодирования и декодирования видео и, более конкретно, к кодированию и декодированию гибких сегментов картинки.
ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИ
Кодирование видео с высокой эффективностью (HEVC), представляет собой кодек видео на основе блоков, стандартизированный как ITU-T, так и Группой экспертов по движущимся изображениям (MPEG), который использует методы как пространственного, так и временного предсказания. Пространственное предсказание снижает пространственную избыточность и реализуется с использованием интра- (I) предсказания из того же самого кадра текущей картинки. Временное предсказание снижает временную избыточность и реализуется с использованием интер- (P) или двунаправленного интер- (B) предсказания на уровне блоков из ранее декодированных опорных картинок. Независимо от конкретного типа метода предсказания, однако, результирующая разность между исходными пиксельными данными и предсказанными пиксельными данными, упоминаемая как “остаток”, преобразуется в частотную область и квантуется. Квантование преобразованных остатков, уровень которого определяется параметром квантования (QP), облегчает контроль компромисса между битовой скоростью (битрейтом) и качеством видео.
Преобразованный и квантованный остаток затем энтропийно кодируется перед передачей на декодер вместе с необходимыми параметрами предсказания. Параметры предсказания, которые также энтропийно кодируются, включают в себя режим предсказания и вектора движения. После приема, декодер выполняет энтропийное декодирование, обратное квантование и обратное преобразование для получения остатка. Декодер затем восстанавливает изображение из остатка с использованием метода интра-предсказания или интер-предсказания.
Как MPEG, так и ITU-T работают над последующей версией HEVC в Объединенной группе исследования видео (JVET). Наименованием этого разрабатываемого кодека видео является многоцелевое кодирование видео (VCC).
Краткое описание сущности изобретения
Варианты осуществления в настоящем документе полезны для кодирования и декодирования картинки с использованием гибкого разбиения, например, разбиения, которое снизило бы затраты на передачу кодированных сегментов картинки. Например, один или более вариантов осуществления обеспечивают структуру гибкого пространственного разбиения, где край первого сегмента картинки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных сегментов картинки.
Один или более вариантов осуществления включают в себя способ декодирования картинки. Способ содержит прием битового потока. Битовый поток содержит множество кодированных сегментов картинки и информацию из набора параметров, ассоциированную с множеством кодированных сегментов картинки. Способ дополнительно содержит выведение, из информации в битовом потоке, структуры пространственного разбиения. Структура пространственного разбиения делит картинку на сегменты картинки. Каждый сегмент картинки соответствует одному из множества кодированных сегментов картинки, и каждый сегмент картинки содержит по меньшей мере одну единицу. Край первого сегмента картинки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных сегментов картинки. Способ дополнительно содержит декодирование множества кодированных сегментов картинки, принятых в битовом потоке, в соответствии со структурой пространственного разбиения. Выведение какого-либо режима интра-предсказания для первой единицы первого сегмента картинки зависит от выведенного режима интра-предсказания для второй единицы первого сегмента картинки и не зависит от какого-либо режима интра-предсказания для единиц любых других сегментов картинки структуры пространственного разбиения.
Один или более вариантов осуществления включают соответствующий способ кодирования картинки, который может быть использован совместно или отдельно от способов для декодирования картинки, описанных здесь. Способ содержит определение структуры пространственного разбиения, которая разделяет картинку на сегменты картинки. Каждый сегмент картинки содержит по меньшей мере одну единицу. Край первого сегмента картинки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных сегментов картинки. Способ дополнительно содержит кодирование множества сегментов картинки в соответствии со структурой пространственного разбиения, чтобы генерировать множество кодированных сегментов картинки. Каждый кодированный сегмент картинки соответствует одному из сегментов картинки структуры пространственного разбиения. Каждый кодированный сегмент картинки является независимым, так что выведение какого-либо режима интра-предсказания для первой единицы первого сегмента картинки зависит от выведенного режима интра-предсказания для второй единицы первого сегмента картинки и не зависит от какого-либо режима интра-предсказания для единиц любых других сегментов картинки структуры пространственного разбиения. Способ содержит генерирование битового потока, содержащего множество кодированных сегментов картинки и информацию, указывающую структуру пространственного разбиения, используемую для разделения картинки на множество сегментов картинки, и передачу битового потока.
Варианты осуществления настоящего раскрытия также обеспечивают схему декодирования, сконфигурированную, чтобы принимать битовый поток. Битовый поток содержит множество кодированных сегментов картинки и информацию из набора параметров, ассоциированную с множеством кодированных сегментов картинки. Схема декодера дополнительно сконфигурирована, чтобы выводить, из информации в битовом потоке, структуру пространственного разбиения. Структура пространственного разбиения делит картинку на сегменты картинки. Каждый сегмент картинки соответствует одному из множества кодированных сегментов картинки, и каждый сегмент картинки содержит по меньшей мере одну единицу. Край первого сегмента картинки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных сегментов картинки. Схема декодера дополнительно сконфигурирована, чтобы декодировать множество кодированных сегментов картинки, принятых в битовом потоке, в соответствии со структурой пространственного разбиения. Выведение какого-либо режима интра-предсказания для первой единицы первого сегмента картинки зависит от выведенного режима интра-предсказания для второй единицы первого сегмента картинки и не зависит от какого-либо режима интра-предсказания для единиц любых других сегментов картинки структуры пространственного разбиения.
Варианты осуществления настоящего раскрытия также обеспечивают декодер, содержащий схему приема, сконфигурированную, чтобы принимать битовый поток, содержащий множество кодированных сегментов картинки и информацию из набора параметров, ассоциированную с множеством кодированных сегментов картинки, память, содержащую исполняемые инструкции, и схему обработки, операционно соединенную со схемой приема и памятью, и сконфигурированную, чтобы исполнять исполняемые инструкции, чтобы определять структуру пространственного разбиения, которая разделяет картинку на сегменты картинки. Каждый сегмент картинки содержит по меньшей мере одну единицу. Край первого сегмента картинки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных сегментов картинки. Обработка дополнительно сконфигурирована, чтобы кодировать множество сегментов картинки в соответствии со структурой пространственного разбиения, чтобы генерировать множество кодированных сегментов картинки. Каждый кодированный сегмент картинки соответствует одному из сегментов картинки структуры пространственного разбиения. Каждый кодированный сегмент картинки является независимым, так что выведение какого-либо режима интра-предсказания для первой единицы первого сегмента картинки зависит от выведенного режима интра-предсказания для второй единицы первого сегмента картинки и не зависит от какого-либо режима интра-предсказания для единиц любых других сегментов картинки структуры пространственного разбиения. Схема обработки также сконфигурирована, чтобы генерировать битовый поток, содержащий множество кодированных сегментов картинки и информацию, указывающую структуру пространственного разбиения, используемую для разделения картинки на множество сегментов картинки.
Варианты осуществления настоящего раскрытия также обеспечивают схему кодера, сконфигурированную, чтобы определять структуру пространственного разбиения, которая разделяет картинку на сегменты картинки. Каждый сегмент картинки содержит по меньшей мере одну единицу. Край первого сегмента картинки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных сегментов картинки. Схема кодера дополнительно сконфигурирована, чтобы кодировать множество сегментов картинки в соответствии со структурой пространственного разбиения, чтобы генерировать множество кодированных сегментов картинки. Каждый кодированный сегмент картинки соответствует одному из сегментов картинки структуры пространственного разбиения. Каждый кодированный сегмент картинки является независимым, так что выведение какого-либо режима интра-предсказания для первой единицы первого сегмента картинки зависит от выведенного режима интра-предсказания для второй единицы первого сегмента картинки и не зависит от какого-либо режима интра-предсказания для единиц любых других сегментов картинки структуры пространственного разбиения. Схема кодера дополнительно сконфигурирована, чтобы генерировать битовый поток, содержащий множество кодированных сегментов картинки и информацию, указывающую структуру пространственного разбиения, используемую для разделения картинки на множество сегментов картинки, и передавать битовый поток.
Варианты осуществления настоящего раскрытия также обеспечивают кодер, содержащий память, содержащую исполняемые инструкции, схему обработки, операционно соединенную с памятью, и передатчик. Схема обработки сконфигурирована, чтобы определять структуру пространственного разбиения, которая разделяет картинку на сегменты картинки. Каждый сегмент картинки содержит по меньшей мере одну единицу. Край первого сегмента картинки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных сегментов картинки. Схема обработки дополнительно сконфигурирована, чтобы кодировать множество сегментов картинки в соответствии со структурой пространственного разбиения, чтобы генерировать множество кодированных сегментов картинки. Каждый кодированный сегмент картинки соответствует одному из сегментов картинки структуры пространственного разбиения. Каждый кодированный сегмент картинки является независимым, так что выведение какого-либо режима интра-предсказания для первой единицы первого сегмента картинки зависит от выведенного режима интра-предсказания для второй единицы первого сегмента картинки и не зависит от какого-либо режима интра-предсказания для единиц любых других сегментов картинки структуры пространственного разбиения. Схема обработки дополнительно сконфигурирована, чтобы генерировать битовый поток, содержащий множество кодированных сегментов картинки и информацию, указывающую структуру пространственного разбиения, используемую для разделения картинки на множество сегментов картинки. Передатчик сконфигурирован, чтобы передавать битовый поток.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Фиг. 1 иллюстрирует пример разбиения CTU на CU с использованием QTBT.
Фиг. 2 иллюстрирует примерное разбиение тайлов.
Фиг. 3A-3B иллюстрирует примерную структуру тайлов с тайлами высокого разрешения и тайлами низкого разрешения.
Фиг. 4 иллюстрирует пример структуры тайлов, которая не поддерживается в HEVC.
Фиг. 5 иллюстрирует примерную структуру тайлов, которая может поддерживаться в HEVC.
Фиг. 6 иллюстрирует примерное разбиение, иллюстрирующее единицы и мозаичные элементы (тайлы).
Фиг. 7 иллюстрирует примерный битовый поток в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 8 иллюстрирует картинку, разбитую на 64 единицы.
Фиг. 9 иллюстрирует примерную структуру разбиения на три сегмента в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 10 иллюстрирует картинку, которая была разбита с использованием структуры разбиения, иллюстрируемой на фиг. 8 и 9, в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 11A-11B иллюстрируют картинку, разбитую в соответствии со структурой разбиения, причем фиг. 11A иллюстрирует единицы, и фиг. 11B иллюстрирует сегменты тайлов, в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 12A представляет собой блок-схему последовательности операций, иллюстрирующую способ для кодирования картинки или части картинки с использованием гибких тайлов в соответствии с первым вариантом осуществления настоящего раскрытия.
Фиг. 12B представляет собой блок-схему последовательности операций, иллюстрирующую способ для декодирования картинки или части картинки, которая была закодирована с использованием гибких тайлов в соответствии с первым вариантом осуществления настоящего раскрытия.
Фиг. 13A представляет собой блок-схему последовательности операций, иллюстрирующую способ, с помощью которого кодер конструирует и сигнализирует гибкие тайлы в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 13B представляет собой блок-схему последовательности операций, иллюстрирующую способ, с помощью которого декодер синтаксически анализирует и конструирует гибкие тайлы в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 14 иллюстрирует примерное разбиение тайлов, где используется 10 тайлов для разбиения картинки в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 15 иллюстрирует примерное разбиение тайлов, в котором картинка, имеющая размер 2048×1280, разбивается на 26 тайлов в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 16A иллюстрирует способ, реализуемый в декодере для декодирования кодированного представления картинки битового потока видео в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 16B иллюстрирует способ, реализуемый в кодере для кодирования представления картинки битового потока видео в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 17A-17C иллюстрируют разбиение тайлов картинки, проиллюстрированной на фиг. 14 и соответствующей битам ctu_status, в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 18A представляет собой блок-схему последовательности операций, иллюстрирующую способ, реализуемый в кодере для конструирования и сигнализации тайлов в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 18B-18C иллюстрируют способ, реализуемый в декодере для синтаксического анализа и конструирования тайлов, отправленных кодером, в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 19A-19B представляют собой блок-схемы последовательности операций, иллюстрирующие способы, реализуемые кодером и декодером, соответственно, чтобы конструировать и сигнализировать тайлы в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 20 иллюстрирует целочисленное разделение тайлов в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 21A-21B иллюстрируют способ, реализуемый кодером, чтобы конструировать и сигнализировать тайлы в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 21C-21D иллюстрируют способ, реализуемый декодером, чтобы синтаксически анализировать тайлы, сконструированные и сигнализированные кодером на фиг. 21A-21B в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 22A-22C иллюстрируют горизонтальные и вертикальные разделительные линии, соответствующие структуре тайлов согласно фиг. 14 в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 23A представляет собой блок-схему последовательности операций, иллюстрирующую способ, реализуемый в кодере для определения горизонтальных и вертикальных разделительных линий для данной структуры тайлов в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 23B представляет собой блок-схему последовательности операций, иллюстрирующую способ, реализуемый в декодере для обработки тайлов, имеющих данную структуру тайлов, описанную соответствующими горизонтальными и вертикальными разделительными линиями в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 24A-24C иллюстрируют примерную структуру тайлов и соответствующий набор T-соединений перед и после удаления избыточных T-соединений в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 25A-25B иллюстрируют примерную структуру тайлов и соответствующий набор T-соединений в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 26A представляет собой блок-схему последовательности операций, иллюстрирующую способ, реализуемый в кодере для создания набора T-соединений в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 26B представляет собой блок-схему последовательности операций, иллюстрирующую способ, реализуемый в декодере для создания набора T-соединений в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 27A-27C иллюстрируют примерную структуру тайлов и соответствующую матрицу начальных углов и матрицу конечных углов в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 28A представляет собой блок-схему последовательности операций, иллюстрирующую способ, реализуемый в кодере для создания матриц начальных и конечных углов в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 28B представляет собой блок-схему последовательности операций, иллюстрирующую способ, реализуемый в декодере для обработки матриц начальных и конечных углов в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 29 иллюстрирует систему, сконфигурированную, чтобы обмениваться последовательностями изображений, которые кодируются и декодируются в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 30 представляет собой блок-схему, иллюстрирующую компоненты кодера.
Фиг. 31 представляет собой блок-схему, иллюстрирующую компоненты декодера.
Фиг. 32-33 представляют собой блок-схемы, иллюстрирующие некоторые функциональные компоненты кодера и декодера, соответственно.
Фиг. 34A представляет собой кодер, кодирующий изображение в соответствии со структурой разбиения в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 34B представляет собой декодер, декодирующий изображение в соответствии со структурой разбиения в соответствии с одним вариантом осуществления настоящего раскрытия.
Фиг. 35 представляет собой систему, содержащую декодер и кодер в соответствии с одним вариантом осуществления настоящего раскрытия.
ПОДРОБНОЕ ОПИСАНИЕ
Настоящая заявка испрашивает приоритет заявки США № 62/688314, поданной 21 июня 2018, раскрытие которой во всей своей полноте включено в настоящий документ посредством ссылки.
Структура квадродерева и двоичного дерева (QTBT)
Как указано выше, HEVC представляет собой кодек видео на блочной основе, стандартизированный ITU-T и MPEG, который использует методы как пространственного, так и временного предсказания. HEVC использует блочную структуру, где каждый блок кодирования верхнего уровня, т.е. наибольший блок в разбиении на блоки кодирования, упоминаемый здесь как единица дерева кодирования (CTU), разбивается посредством структуры квадродерева (QT). Это разбиение формирует разделы (разбиения) блоков кодирования, упоминаемые здесь как единицы кодирования (CU). CU могут затем дополнительно разбиваться, рекурсивным образом, на меньшие CU одинакового размера по структуре квадродерева, до размера блока 8×8.
Блочная структура в текущей версии VVC отличается от блочной структуры в HEVC. В частности, блочная структура в VVC упоминается как блочная структура квадродерева плюс двоичное дерево плюс троичное дерево (QTBT+TT). CU в QTBT+TT может иметь либо квадратную, либо прямоугольную формы. Единица дерева кодирования (CTU) сначала разбивается посредством структуры квадродерева как в HEVC. Затем CTU дополнительно разбивается с разбиениями равных размеров либо по вертикали, либо по горизонтали в двоичной структуре, чтобы сформировать блоки кодирования (также упоминаемые как CU). Таким образом, блок может иметь либо квадратную, либо прямоугольную форму.
Глубина квадродерева и двоичного дерева может быть установлена кодером в битовом потоке. Пример разделения CTU с использованием QTBT+TT иллюстрируется на фиг. 1. TT позволяет разделять CU на три разбиения, вместо двух разбиений равных размеров. Это повышает вероятность использования блочной структуры, которая лучше подгоняется к структуре контента в картинке.
Контекстно-адаптивное двоичное арифметическое кодирование (CABAC)
Контекстно-адаптивное двоичное арифметическое кодирование (CABAC) представляет собой инструмент энтропийного кодирования, используемый в HEVC и VVC. CABAC сконфигурировано, чтобы кодировать двоичные символы, что поддерживает низкую сложность и обеспечивает возможность моделирования вероятностей для битов символа, которые используются более часто. Модели вероятности выбираются адаптивно на основе локального контекста, поскольку режимы кодирования обычно являются хорошо коррелированными локально.
Вырезки
Принцип вырезок в HEVC делит картинку на независимо кодируемые вырезки, где каждая вырезка считывается в порядке растрового сканирования в единицах CTU. Разные типы кодирования могут использоваться для вырезок одной и той же картинки. Например, вырезка может представлять собой I-вырезку или P-вырезку или B-вырезку. Однако главным назначением вырезок является обеспечение возможности повторной синхронизации в случае потери данных.
Тайлы
Стандарт кодирования видео HEVC включает в себя инструмент, называемый “тайлами”, который делит картинку на прямоугольные пространственно независимые области. С использованием тайлов, картинка в HEVC может разбиваться на строки и столбцы выборок, где любой данный тайл расположен на пересечении данной строки и данного столбца. Фиг. 2 показывает пример разбиения на тайлы с использованием четырех (4) строк тайлов и пяти (5) столбцов тайлов, давая в результате всего двадцать (20) тайлов для картинки. Как видно из фиг. 2, тайлы в HEVC всегда выровнены с границами CTU.
Структура тайлов сигнализируется в наборе параметров картинки (PPS) путем специфицирования толщин строк и ширин столбцов. Индивидуальные строки и столбцы могут иметь различные размеры, но разбиение всегда распространяется по всей картинке, слева направо и сверху вниз соответственно.
Синтаксис PPS, используемый для специфицирования структуры тайлов в HEVC, приведен ниже в таблице 1. Как видно из таблицы 1, флаг (т.е. tile_enabled_flag) указывает, используются ли или нет тайлы. Если tile_enabled_flag установлен, то количество столбцов (т.е. num_tile_columns_minus1) и строк (т.е. num_tile_rows_minus1) тайлов специфицированы. uniform_spacing_flag представляет собой флаг, который специфицирует, сигнализируются ли явно ширины столбцов и высоты строк, или должен использоваться предопределенный способ, чтобы равномерно разносить границы тайлов. Если указывается явная сигнализация, то ширины столбцов сигнализируются одна за одной с последующими высотами строк. Информация ширин столбцов и высот строк сигнализируется в единицах CTU. Наконец, флаг loop_filter_across_tile_enabled_flag специфицирует, включены ли или выключены контурные фильтры по границам тайлов для всех границ тайлов в картинке.
Таблица 1 - Синтаксис тайлов в HEVC
Подобно вырезкам, отсутствует зависимость декодирования между тайлами такой же картинки. Это включает в себя интра-предсказание, выбор контекста и предсказание вектора движения. Однако одно исключение состоит в том, что зависимости контурной фильтрации в общем случае разрешены между тайлами. Однако эти зависимости могут быть отменены путем установки loop_filter_across_tile_enabled_flag соответственно.
В противоположность вырезкам, тайлы не требуют так много данных заголовка. Непроизводительные издержки заголовка на тайл содержат сигнализацию смещений битового потока, которые присутствуют в заголовке вырезки и указывают начальную точку всех тайлов в картинке. Декодер декодирует начальные точки, чтобы позволить разделять кодированную картинку на кодированные тайлы, чтобы распределять их для параллельного декодирования. В HEVC, включение смещений битового потока в заголовке вырезки является обязательным, когда тайлы включены. Однако комбинация тайлов и вырезок ограничена в HEVC. В частности, либо все CTU в тайле принадлежат такой же вырезке, либо все CTU принадлежат тому же самому тайлу.
Смещения битового потока могут также обеспечивать возможность извлечения тайлов и сшивания тайлов, чтобы повторно вставлять тайлы в выходной поток. Это требует некоторых ограничений на стороне кодера, чтобы сделать тайлы независимыми во времени. Одно ограничение ограничивает вектора движения так, что компенсация движения для тайла использует только выборки, включенные в пространственно совмещенные тайлы предыдущих картинок. Другое ограничение ограничивает временное предсказание вектора движения (TMVP), так что этот процесс делается независимым во времени. Для полной независимости, устранение блочности границ между тайлами должно быть отключено посредством ранее описанного loop_filter_across_tile_enabled_flag. Однако отключение устранения блочности может ввести видимые линии между тайлами. Поэтому некоторые реализации отключают устранение блочности, в то время как другие реализации не делают этого.
Тайлы иногда используются для 360-градусного видео, которое предназначено для восприятия с использованием наголовных устройств отображения (HMD). Поле зрения при использовании современных устройств HMD ограничено до примерно 20% полной сферы. Это означает, что только 20% полного 360-градусного видео воспринимается пользователем. Обычно, полная сфера 360-градусного видео доступна для устройства HMD, из которого затем вырезается часть, которая визуализируется для пользователя. Эта часть, т.е. часть сферы, которую видит пользователь, называется окном просмотра. Хорошо известная оптимизация ресурсов предназначается для того, чтобы уведомлять видеосистему устройства HMD о движениях головы и направлении, в котором смотрит пользователь, так что меньше ресурсов тратится на обработку выборок видео, которые не визуализируются для пользователя. Ресурсы могут представлять собой, например, ширину полосы от сервера к клиенту или функциональные возможности декодирования устройства. Для будущих устройств HMD, где поле зрения будет больше, чем возможно в настоящее время, неравномерное распределение ресурсов будет все еще выгодным. В частности, зрительная система человека требует более высокого качества изображения в центральной зоне зрения (около 18° горизонтального вида), в то время как более низкие требования предъявляются к качеству изображения в периферийной области (примерно 120° или более для комфортного горизонтального вида). Поэтому, неравномерное распределение ресурсов было бы более полезным, чтобы удовлетворить требования зрительной системы человека, когда больше ресурсов распределяются в центральной области зрения по сравнению с периферийной областью.
Оптимизация ресурсов для представляющей интерес области (RoI), является другим случаем использования для тайлов. RoI может специфицироваться в содержимом или извлекаться таким методом, как слежение за положением глаз. Одним способом использования движений головы для снижения количества требуемых ресурсов является использование тайлов. Этот способ сначала кодирует последовательность видео несколько раз с использованием тайлов. Структура разбиения на тайлы является такой же во всех кодированиях; однако последовательность видео кодируется при различных качествах видео. Это формирует по меньшей мере одно кодирование высокого качества для последовательности видео и одно кодирование низкого качества для последовательности видео. Это означает, что, для каждого тайла в конкретный момент времени, имеется по меньшей мере одно представление тайла высокого качества и по меньшей мере одно представление тайла низкого качества. Различие между тайлом высокого качества и тайлом низкого качества может состоять в том, что тайл высокого качества кодируется с более высокой битовой скоростью, чем тайл низкого качества, или что тайл высокого качества имеет более высокое разрешение, чем тайл низкого качества.
Фиг. 3A-3B иллюстрируют пример тайлов высокого качества, имеющих более высокое разрешение, чем у тайлов низкого качества. В частности, фиг. 3A иллюстрирует картинку, которая только что была декодирована декодером. В этом контексте, картинки, показывающие выход с декодера (т.е., декодированные картинки), являются картинками, показанными в сжатой области. В этом примере, все 8 тайлов A-H в сжатой области имеют равный пространственный размер. Затем, после того как картинка декодирована, но перед тем, как картинка визуализирована, тайлы A-H масштабируются и упорядочиваются пространственно. Картинки, которые были подготовлены для визуализации (т.е., после масштабирования и переупорядочивания), представляют собой картинки для показа в выходной области. Выходная область, показанная на фиг. 3B, иллюстрирует картинку, как она визуализируется или представляется пользователю.
Как видно на фиг. 3A-3B, тайлы B, D, F и H являются тайлами высокого качества, поскольку они имеют более высокое разрешение в выходной области. Тайлы A, C, E и G, однако, являются тайлами более низкого разрешения, поскольку этап масштабирования снижает действительное разрешение.
Помимо иллюстрации того, как тайлы имеют различные разрешения, фиг. 3A-3B также иллюстрируют, что тайлы в сжатой области (фиг. 3A) не нуждаются в пространственном упорядочении таким же образом, как они упорядочены в выходной области (фиг. 3B). При условии, что тайлы являются независимыми как по пространству, так и по времени, пространственное размещение тайлов в сжатой области не является важным.
Имеется множество элементов, которые увеличивают битовые затраты при включении тайлов в HEVC. Во-первых, предсказание по тайлам отключено, что означает, что вектора движения и интра-режимы не предсказываются по тайлам. Использование тайлов также отключает предсказание параметра квантования (QP) и выбор контекста. Во-вторых, CABAC инициализируется для каждого тайла, что означает, что адаптация CABAC ослабляется. В-третьих, смещения битового потока должны сигнализироваться для каждого тайла. В-четвертых, структура разбиения тайлов должна быть специфицирована в PPS. Наконец, CABAC сбрасывается после каждого тайла, и кодированные данные должны быть побайтово выровненными.
Тайлы являются полезными; однако имеются некоторые соображения, которые требуют рассмотрения. Например, в своей нынешней форме, HEVC ограничивает тайлы так, чтобы гарантировать их распространение по всей картинке. Однако это ограничивает гибкость тайлов. Например, фиг. 4 иллюстрирует пример структуры тайлов, которая не поддерживается нынешней реализацией HEVC. Чтобы виртуально поддерживать такую структуру тайлов, можно специфицировать структуру разбиения в HEVC, показанную на фиг. 5. Однако структура тайлов, показанная на фиг. 5, содержит больше границ тайлов. Это может ухудшить эффективность сжатия и вызвать ненужные артефакты тайлов. Дополнительно, если тайлы должны быть полностью пространственно независимыми, HEVC в его нынешней форме позволяет только включать и отключать зависимости контурной фильтрации для всех границ тайлов картинки. Поэтому, ненужные ограничения контурной фильтрации будут возникать в традиционных решениях HEVC, так как они не поддерживают гибкие разбиения тайлов.
Варианты осуществления настоящего раскрытия решают эти проблемы путем обеспечения способов гибкого разбиения тайлов. Эти способы обеспечивают больше свободы для кодера, чтобы разбивать картинки на тайлы. В одном варианте осуществления, каждый тайл содержит одиночную прямоугольную область, и ширина и высота каждого тайла сигнализируется декодеру в битовом потоке. После приема, декодер сконфигурирован, чтобы декодировать индивидуальные значения ширины и высоты для каждого тайла из битового потока. В другом варианте осуществления, картинка разделяется на единицы, причем каждой единице назначается ID тайла, который идентифицирует, какому конкретному тайлу назначена единица. Этот последний вариант осуществления является выгодным, так как он поддерживает гибкие разбиения тайлов, имеющие непрямоугольные тайлы, а также разбиения в структуре шахматной доски.
Варианты осуществления настоящего раскрытия позволяют использовать более гибкие разбиения тайлов для различных случаев использования, таких как 360-градусное видео. Кроме того, при сравнении с фиксированными разбиениями тайлов, битовые издержки, ассоциированные с гибкими разбиениями тайлов, ниже. Более конкретно, количество тайлов выше при использовании традиционных разбиений тайлов, и каждый тайл вносит издержки (например, обработку, ассоциированную с очисткой CABAC и сбросом адаптации, смещением битового потока и т.д.). Гибкое разбиение тайлов представленных вариантов осуществления, однако, использует меньше тайлов, тем самым снижая битовые издержки.
Настоящие варианты осуществления также обеспечивают гибкое балансирование нагрузки CPU для параллельной обработки, где кодер может, например, анализировать входную картинку и выбирать разбиение тайлов, которое разделяет картинку на минимально возможное число тайлов (чтобы снизить битовые издержки) при равном заполнении доступного количества внутренних элементов. Кроме того, варианты осуществления настоящего раскрытия также облегчают увеличенное регулирование контурных фильтров по сравнению с обычными способами, чтобы сделать традиционные тайлы более гибкими.
Настоящие варианты осуществления являются более выгодными для случаев использования с высокими требованиями, таких как многовидовое (MV) кодирование видео, например, где ширина полосы или функциональные возможности декодирования являются основным узким местом. В таких случаях, настоящие варианты осуществления обеспечивают возможность лучшего распределения ресурсов. В применениях, где интересующая область (RoI) специфицирована, варианты осуществления настоящего раскрытия также обеспечивают более гибкое распределение ресурсов.
Варианты осуществления гибких разбиений тайлов настоящего раскрытия используют тайлы более крупные, чем в традиционных способах разбиения тайлов. Ввиду увеличенного размера тайла, настоящие варианты осуществления также вносят вклад в качество картинки путем наложения меньших ограничений на интра-вектора движения. Далее, способ гибкого разбиения тайлов согласно настоящему раскрытию удаляет ненужные линии разбиения между тайлами. Такое удаление линий сокращает затраты на фильтрацию по отношению к линиям между тайлами.
Варианты осуществления настоящего раскрытия разбивают картинку из последовательности картинок видео на тайлы с более гибкой структурой тайлов, чем может быть обеспечено традиционными средствами, например, HEVC. Это включает конфигурирование кодера, чтобы генерировать структуру разбиения и тайлы для кодирования, а также декодера, чтобы декодировать структуру разбиения и тайлы. В некоторых вариантах осуществления, способ гибкого разбиения тайлов согласно настоящему раскрытию сосуществует с обработкой HEVC в ее обычной форме. Таким образом, как описано выше, tile_enabled_flag в битовом потоке может использоваться, чтобы специфицировать, следует ли использовать традиционную схему разбиения тайлов, или следует использовать схему гибкого разбиения тайлов в соответствии с настоящими вариантами осуществления.
Следует отметить, что некоторые варианты осуществления ссылаются на термин “единицы”. Как определено здесь, единица представляет собой прямоугольную площадь картинки (например, единицы дерева кодирования или единицы кодирования), так что тайл состоит из одной или нескольких единиц. Фиг. 6 иллюстрирует пример, в котором картинка 10 разбивается на четыре (4) тайла или «сегмента» T1, T2, T3, T4 (совместно, «T») (как показано выделенными черными линиями), причем каждый тайл T содержит 16 единиц U. Это обеспечивает всего 64 единицы U для картинки 10.
Гибкая структура тайлов сигнализируется в битовом потоке 12. Например, кодер сигнализирует гибкую структуру тайлов в наборе параметров, таком как набор параметров последовательности (SPS) или набор параметров картинки (PPS). Однако, как должно быть понятно специалистам в данной области, настоящее раскрытие не ограничено сигнализацией гибкой структуры тайлов в наборе параметров. Хотя варианты осуществления здесь описывают структуру тайлов, как сигнализируется в PPS, это приведено только в целях иллюстрации, и эта информация может сигнализироваться другими способами.
Общее описание
Фиг. 7 показывает битовый поток 12, который декодируется в картинку 10. Фиг. 8 показывает картинку 10, разбитую на 64 единицы U. Один пример единицы U является макроблоком, известным из H.264. Другим примером единицы U является CTU, известная из HEVC.
Как видно из фиг. 7, битовый поток 12 содержит один или более кодированных сегментов 14 и одно или более кодовых слов 16, 18. Одно или более кодовых слов 16 содержат информацию, которая специфицирует количество байтов или битов в битовом потоке, содержащем данные, необходимые для декодирования каждого из кодированных сегментов 14. Одно или более кодовых слов 18 переносят информацию, специфицирующую пространственный размер единицы U. В качестве примера, пространственный размер единиц равен 64 выборкам яркости по горизонтали и 64 выборкам яркости по вертикали; однако, как должно быть понятно специалистам в данной области, настоящее раскрытие не ограничено этими размерами и формами единиц. Другие размеры и формы единиц, включая единицы нерегулярной формы (например, единицы неквадратной формы), также возможны в соответствии с вариантами осуществления настоящего раскрытия.
Как видно из фиг. 7-8, картинка 10 была пространственно разбита на три сегмента T1, T2, T3 (совместно, «T») с использованием структуры разбиения S. Информация, определяющая структуру разбиения S, была выведена из информации в битовом потоке 12. Например, кодированные сегменты 14 из битового потока 12 декодируются, чтобы вывести значения выборок соответствующего декодированного сегмента в картинке 10. Дополнительно, размер и/или положение кодированного сегмента 14 могут синтаксически анализироваться из одного или более кодовых слов 16 в битовом потоке 12. Как отмечено выше, один вариант осуществления настоящего раскрытия использует одно или более кодовых слов 16, чтобы переносить информацию, специфицирующую количество байтов или битов в битовом потоке, которые содержат информацию, необходимую, чтобы декодировать кодированный сегмент 14. Альтернативно, однако, варианты осуществления настоящего раскрытия могут использовать одно или более кодовых слов 16, чтобы переносить информацию, требуемую, чтобы выводить местоположения или позиции кодированного сегмента 14 в битовом потоке 12.
Как видно из фиг. 8, границы каждого сегмента T выровнены с границами единицы U. Это означает, что каждый сегмент T содержит целое число единиц U, и что каждая единица U ассоциирована с одним сегментом T. Например, как видно из фиг. 8, два крайних правых сегмента T1, T2 содержат 16 единиц каждый, в то время как крайний левый сегмент T3 содержит 32 единиц U.
Фиг. 9 иллюстрирует вариант осуществления, в котором картинка 10 разбита с использованием такой же структуры разбиения S, проиллюстрированной на фиг. 8. Однако, в целях ясности, фиг. 9 не иллюстрирует единицы U. Как видно из фиг. 9, одна сторона 19-3 сегмента T3 граничит со сторонами 19-1, 19-2 двух или более соседних или смежных сегментов T1, T2, соответственно.
Фиг. 10 иллюстрирует картинку 10, которая была разбита с использованием такой же структуры разбиения S, проиллюстрированной на фиг. 8 и 9. Как видно из фиг. 10, картинка 10 содержит три сегмента T1, T2, T3. Все сегменты T1, T2, T3 на фиг. 10 содержат одну или более единиц U; однако, в целях ясности, фиг. 10 иллюстрирует сегменты T1 и T3 как содержащие поднабор единиц U. Более конкретно, сегмент T3 содержит единицу U1, в то время как соседний или смежный сегмент T1 содержит единицы U1, U2. Каждый из сегментов T1, T2, T3 является независимым один от другого. Это означает, что границы сегментов T1, T2, T3 обрабатываются подобно границам картинки при декодировании единиц U. Это влияет на процесс выведения элементов при декодировании, такой как, например, выведение режимов интра-предсказания и выведение значений параметров квантования.
Режимы интра-предсказания (например, режим интра- (B) предсказания и режим интра- (P) предсказания) используются и сигнализируются для единиц, которые используют только предсказания из ранее декодированных выборок текущей картинки для предсказания выборки. Обычно, выведение режима интра-предсказания в конкретной единице U1 зависит от ранее выведенных режимов интра-предсказания в других единицах U2. При независимых сегментах, выведение режима интра-предсказания в конкретной единице U1 зависит только от ранее выведенных режимов интра-предсказания в единицах U2, которые принадлежат тому же самому текущему сегменту T1, и не зависит от какого-либо режима интра-предсказания в какой-либо единице, такой как единица U3, которая ассоциирована с отличающимся сегментом, таким как сегмент T3. Таким образом, структура разбиения S на фиг. 10 делает режимы интра-предсказания в единицах U3 в сегменте T3 недоступными для выведения режима интра-предсказания для единиц U1, U2 в отличающемся сегменте T1.
Единица U3 в сегменте T3 могла бы, однако, использоваться для выведения режима интра-предсказания в другой единице, но только если та другая единица находилась в том же самом сегменте T3. Таким образом, границы сегмента имеют то же или подобное влияние на выведение интра-режима, что и граница картинки для единиц U1, U2 во втором сегменте T1.
Значение параметра квантования (QP) также хорошо известно в технике. Значение QP для единицы U, например, обычно выводится с использованием ранее выведенных значений QP. Один процесс выведения, известный в технике, состоит в том, чтобы сначала вывести предсказанное значение QP из битового потока 12, а затем суммировать значение дельты QP с предсказанным значением QP. Поскольку сегменты T1, T2, T3 являются независимыми от каждого другого, выведение значения QP в конкретной единице, такой как единица U2 сегмента T1, например, может зависеть только от ранее выведенных значений QP в единицах, которые находятся в том же самом сегменте T1. Выведение значения QP в конкретной данной единице U1, U2 не зависит от какого-либо из значений QP, ассоциированных с любой другой единицей, которая находится в отличающемся сегменте, такой как единица U3 в сегменте T3. Это означает, что структура разбиения S на фиг. 10 делает значения QP в единицах U3 в сегменте T3 недоступными для выведения значения QP для единиц U1, U2 в отличающемся сегменте T3.
Значения QP в некоторых единицах U могут быть использованы для выведения значения QP в другой единице U, но только если такая другая единица находилась в том же самом сегменте T1. Таким образом, границы сегмента имеют то же самое или подобное влияние на выведение значения QP, как граница картинки для единиц U1, U2 в сегменте T1.
Фиг. 11A-11B иллюстрируют такую же картинку 10, разбитую в соответствии со структурой разбиения S. Фиг. 11A иллюстрирует единицы U. Как описано выше, пространственный размер единиц сигнализируется в битовом потоке 12 как одно или более кодовых слов 16, 18. Фиг. 11B иллюстрирует сегменты T1, T2, T3 и структуру разбиения S картинки 10. Каждый сегмент T1, T2, T3 содержит по меньшей мере одну единицу U. Пространственный размер каждого сегмента T1, T2, T3 выражен в терминах единиц, что означает, что размер единиц U используется при выведении пространственных размеров сегментов и/или пространственной структуры разбиения. В примере на фиг. 11A-11B, пространственный размер двух из сегментов T1 и T2 составляет 4 единицы по горизонтали и 4 единицы по вертикали. Пространственный размер одного сегмента составляет T3 единиц по горизонтали и 8 единиц по вертикали.
Следует отметить, что сегменты T1, T2, T3 в некоторых вариантах осуществления могут быть прямоугольными, так что ширина и высота сегментов отличаются. В других вариантах осуществления, сегменты T1, T2, T3 являются непрямоугольными и выражаются распределением каждой единицы U одному сегменту. Такое распределение используется, чтобы представлять, например, “сегменты шахматной доски”, в котором некоторые из сегментов T представляют белые квадраты на шахматной доске, в то время как другие сегменты T представляют черные квадраты на шахматной доске. Данный сегмент T может, в некоторых вариантах осуществления, быть эквивалентным тайлу или вырезке.
Первый вариант осуществления
Как показано в первом варианте осуществления на фиг. 9, картинка 10 или часть картинки 10 в потоке видео разделяется в пространственную структуру разбиения S, где структура разбиения S содержит по меньшей мере три сегмента T1, T2, T3. Каждый сегмент содержит единицы U, причем меньшей мере один сегмент T, такой как сегмент T1, например, содержит две или более единиц U. Пространственный размер единиц U сигнализируется и декодируется в/из одном(го) или более кодовых слов 18 битового потока 12. Дополнительно, одно или более кодовых слов 16, указывающих размер или положение по меньшей мере одного кодированного сегмента 18 в битовом потоке 12, синтаксически анализируются из битового потока 12.
По меньшей мере один сегмент T3 имеет по меньшей мере одну сторону 19-3, которая граничит более чем с одним соседним сегментом T1, T2. Дополнительно, сегменты T1, T2, T3 являются независимыми относительно друг друга, так что выведение какого-либо режима интра-предсказания для любой единицы U, такой как единица U1 в сегменте T1, зависит только от ранее выведенных режимов интра-предсказания в единице U2, которая также находится в сегменте T1. Выведение какого-либо режима интра-предсказания для единицы U1 в сегменте T1 не зависит от какого-либо режима интра-предсказания в любой единице U3, которая находится в отличающемся сегменте T2. Такие сегменты упоминаются здесь как “гибкие тайлы” или просто как “тайлы”, и отличаются от тайлов HEVC, которые упорядочены как строгие столбцы и строки. То есть, при HEVC, никакие тайлы HEVC в картинке не имеют одну сторону, которая граничит более чем с одним соседним тайлом HEVC. Напротив, данная сторона данного тайла HEVC граничит только с одной стороной одного другого смежного тайла HEVC.
Следует отметить, что настоящее раскрытие использует термины “сегменты”, “гибкие тайлы” и “тайлы” взаимозаменяемым образом. Однако, в контексте этих вариантов осуществления, термины “гибкий тайл” и “тайл” определены как то же самое, что и сегмент, и все отличаются от тайлов HEVC, как описано выше.
Фиг. 12A представляет собой блок-схему последовательности операций, иллюстрирующую способ 20 для кодирования картинки или части картинки с использованием гибких тайлов в соответствии с первым вариантом осуществления настоящего раскрытия.
Способ 20 реализуется в кодере и начинается тем, что кодер определяет гибкую структуру тайлов для картинки (блок 22). Гибкая структура тайлов содержит по меньшей мере один гибкий тайл или “сегмент”, имеющий по меньшей мере одну сторону, которая граничит с двумя или более смежными гибкими тайлами или “сегментами”. Кодер затем определяет по меньшей мере один синтаксический элемент, чтобы описывать, как конструировать гибкую структуру тайлов (блок 24). По меньшей мере один синтаксический элемент содержит одну или более характеристик, которые описывают гибкие тайлы, или синтаксический элемент содержит средство для выведения характеристик для гибких тайлов. Такие характеристики включают, например, идентификатор, ширину, высоту и положение, которые описывают, как назначать и/или получать доступ к индивидуальным гибким тайлам. Кодер затем сигнализирует по меньшей мере один синтаксический элемент для гибкой структуры тайлов в битовом потоке видео (блок 26), кодирует картинку или часть картинки в соответствии с гибкой структурой тайлов в битовый поток видео (блок 28) и передает битовый поток 12 (блок 29).
Фиг. 12B представляет собой блок-схему последовательности операций, иллюстрирующую способ 30 для декодирования картинки или части картинки, которая была закодирована с использованием гибких тайлов в соответствии с первым вариантом осуществления настоящего раскрытия.
Как видно из фиг. 12B, способ 30 начинается тем, что декодер принимает битовый поток видео (блок 32) и синтаксически анализирует по меньшей мере один синтаксический элемент для гибкой структуры тайлов из битового потока видео, принятого из кодера (блок 34). Декодер может затем конструировать гибкую структуру тайлов из по меньшей мере одного синтаксического элемента и назначать или выводить характеристики для индивидуальных гибких тайлов (блок 36). Характеристики включают, например, идентификатор, ширину, высоту и положение, которые используются для назначения и/или доступа к гибким тайлам. Декодер затем декодирует картинку или часть картинки в соответствии с гибкой структурой тайлов (блок 38). Как отмечено выше, гибкая структура тайлов содержит по меньшей мере один гибкий тайл, имеющий по меньшей мере одну сторону, которая граничит с соответствующим и сторонами более чем одного смежного гибкого тайла.
Второй вариант осуществления
Во втором варианте осуществления, гибкие тайлы сканируются в предопределенном порядке, и ширина тайла и высота тайла специфицируются для каждого тайла. Например, предопределенный порядок представляет собой порядок растрового сканирования, например, вдоль CTU, и размер тайла специфицирован в единицах CTU.
Фиг. 13A представляет собой блок-схему последовательности операций, иллюстрирующую способ 40, которым кодер конструирует и сигнализирует гибкие тайлы.
Как видно из способа 40, кодер сначала определяет, имеет ли картинка один тайл или множество тайлов (блок 42). Если картинка имеет только один тайл, кодер устанавливает tile_enabled_flag равным 0, чтобы указать, что картинка имеет только один тайл (блок 44) и завершает процесс. Иначе, если картинка имеет более одного гибкого тайла, кодер создает пустой список тайлов (блок 46). Следуя предопределенному порядку сканирования, кодер добавляет гибкий тайл в список, включая информацию, идентифицирующую высоту и ширину гибкого тайла (блок 48). Кодер продолжает добавлять гибкие тайлы к списку, пока картинка еще имеет гибкие тайлы (блок 50).
Фиг. 13B представляет собой блок-схему последовательности операций, иллюстрирующую способ 60, которым декодер синтаксически анализирует и конструирует гибкие тайлы.
Как показано в способе 60, декодер сначала определяет, имеет ли картинка один тайл или несколько тайлов (блок 62). Если tile_enabled_flag установлен в 0, указывая, что картинка имеет только один гибкий тайл с идентифицированной шириной и высотой, процесс завершается. Иначе, пока еще имеются гибкие тайлы в списке (блок 64), осуществляется синтаксический анализ следующего тайла в списке, специфицированного его шириной и длиной, следуя предопределенному порядку сканирования (блок 66).
Таблица 2 идентифицирует примерный синтаксис для использования в одном или более вариантах осуществления согласно настоящему раскрытию. Синтаксис может быть реализован поверх существующей в настоящее время спецификации кодирования видео HEVC.
Таблица 2 - Пример синтаксиса тайлов
Семантика для синтаксических элементов в таблице 2
tile_enabled_flag: Этот флаг может быть установлен в значение 1 или 0. При установке в 1, этот флаг специфицирует, что имеется более одного тайла в каждой картинке, относящейся к PPS. При установке в 0, этот флаг специфицирует, что имеется только один тайл в каждой картинке, относящейся к PPS.
tile_width_minus1[i] plus 1: специфицирует ширину i-го тайла в единицах единиц дерева кодирования.
tile_height_minus1[i] plus 1: специфицирует высоту i-го тайла в единицах единиц дерева кодирования.
read_more_tiles():
Установить значение возврата read_more_tiles() в TRUE (истинно), если имеется по меньшей мере одна CTU в картинке, которая не назначена тайлу.
Иначе, установить значение возврата read_more_tiles() в FALSE (ложно).
В одном варианте осуществления, декодер вызывает следующую функцию перед синтаксическим анализом первого синтаксического элемента tile_width_minus1 в PPS:
В одном варианте осуществления, декодер вызывает следующую функцию после синтаксического анализа первого синтаксического элемента tile_width_minus1 в PPS.
В одном варианте осуществления, синтаксические элементы tile_width_minus1 и tile_height_minus1 ограничены так, что все из следующих условий должны удовлетворяться перед CTU_tile_assignment:
[tile_coordinate_y+y][tile_coordinate_x+x]=tile_id:
1. tile_coordinate_y+y должно быть меньше, чем PicHeightInCtbsY;
2. tile_coordinate_x+x должно быть меньше, чем PicWidthInCtbsY; и
3. TU_tile_assignment[tile_coordinate_y+y][tile_coordinate_
x+x] должно быть равно “no tile” (нет тайла).
Фиг. 14 иллюстрирует примерное разбиение тайлов, где 10 тайлов T0 …T9 использованы для разбиения картинки 10. Числа, показанные в каждом тайле на фиг. 14, представляют номер тайла (т.е. число 0, 1, 2, …) с последующими шириной и высотой тайла в CTU (например, 4×2). С использованием примерного синтаксиса согласно таблице 2 выше, разбиение тайлов выражается как всего 63.
Фиг. 15 показывает другое примерное разбиение тайлов, в котором картинка 10, имеющая размер 2048×1280, разбивается на 26 тайлов. Как видно из фиг. 15, не все тайлы имеют одинаковый размер и форму. Напротив, имеется один тайл TL большого размера и множество меньших тайлов TS. Большой прямоугольный тайл TL на фиг. 15 является гибким тайлом, так как он имеет одну сторону, которая граничит со сторонами более чем одного из меньших тайлов TS. Дополнительно, картинка содержит 32×20=640 CTU, каждая из которых имеет размер 64×64 выборки яркости. Такое разбиение тайлов используется для потоковой передачи 360-видео, где некоторые меньшие тайлы TS используются, чтобы покрывать окно просмотра, а один большой тайл TL покрывает полную сферу с более низким разрешением.
С использованием примерного синтаксиса в таблице 2 выше, разбиение тайлов согласно фиг. 15 может быть выражено посредством всего 267 битов. Один бит для tile_enabled_flag=1 указывает, что используются гибкие тайлы. Тогда 25 меньших тайлов TS сигнализируются 10 битами каждый, и большой тайл TL сигнализируется 16 битами с использованием tile_width_minus1=11 (7 битов) и tile_height_minus1=19 (9 битов). Если используется размер тайла, то в результате будет 1+размер тайла (5+5) + 25*2 + (3+5) = 69 битов.
Третий вариант осуществления
В предпочтительном варианте осуществления, структура тайлов разбиения передается путем сигнализации высоты и ширины тайлов. Тайлы состоят из целого числа единиц кодирования, таких как CTU. Пространственный размер единиц кодирования сигнализируется в битовом потоке.
Например, размер единицы CTU сигнализируется в битовом потоке как имеющий размер 64×64 выборки яркости. Один тайл затем сигнализируется как имеющий ширину 2 и высоту 1, что означает, что тайл имеет ширину 128 выборок яркости (т.е. 2×64 выборки яркости) и высоту 64 выборки яркости (т.е. 1×64 выборки яркости).
Далее, в этом варианте осуществления используется флаг, чтобы специфицировать, идентичен ли или нет текущий размер тайла ближайшему ранее сигнализированному размеру тайла. Если флаг имеет одно значение, то размер тайла для текущего тайла копируется из предыдущего тайла. Если флаг имеет другое значение, то высота и ширина тайла явно сигнализируется с использованием высоты и ширины единицы кодирования. Как описано более детально ниже, декодер декодирует этот флаг и, на основе его значения, определяет, идентичен ли или нет текущий размер тайла ближайшему ранее сигнализированному размеру тайла.
В одной модификации этого варианта осуществления, сначала декодируется число тайлов в картинке 10. Затем выполняется цикл по известному числу тайлов, для которых декодируется размер. Опционально, размер последнего тайла не сигнализируется, поскольку размер этого последнего тайла задается оставшейся площадью картинки.
В другой модификации этого варианта осуществления, число тайлов в картинке не сигнализируется. Вместо этого, декодер продолжает декодирование размеров тайлов до тех пор, пока декодер не определит, что все необходимые размеры тайлов были декодированы. Когда все необходимые размеры тайлов были декодированы, декодер останавливает декодирование размеров тайлов и переходит к декодированию других данных из битового потока. Один способ определения, были ли декодированы все необходимые размеры тайлов, состоит в определении того, все ли CTU в картинке находятся в тайле, для которого был декодирован размер тайла. Другой способ определения того, были ли декодированы все необходимые размеры тайлов, состоит в определении того, покрывают ли тайлы, соответствующие декодированным размерам тайлов, совместно всю картинку.
В еще одной модификации этого варианта осуществления, опциональное кодовое слово сигнализируется, чтобы передать число раз, когда тайл копировался в положение следующего тайла. Например, размер первого тайла равен 128×128. Тогда может иметься одно или более кодовых слов в битовом потоке, которые специфицируют, действительно ли размер тайла:
1) не копировался в любой другой тайл, что означает, что размер следующего тайла сигнализируется явно с использованием ширины и высоты; или
2) копируется на следующий тайл; или
3) копируется на следующие n тайлов, где число раз копирования сигнализируется.
Как видно из фиг. 16A, декодер сконфигурирован, чтобы декодировать кодированное представление картинки битового потока видео с использованием одного или более из следующих аспектов.
В частности, как показано в способе 70, декодер принимает кодированные элементы, с которыми следует выводить конкретный пространственный размер единицы для декодирования картинки. Альтернативно, декодер сконфигурирован, чтобы использовать конкретный пространственный размер единицы, чтобы декодировать картинку (блок 72). Декодер может также декодировать более одного размера тайла явно из битового потока видео (блок 74). В этих случаях, размер тайла содержит значение ширины, которое выводится из битового потока как целое число ширины единицы, а также значение высоты, которое выводится из битового потока как целое число высоты единицы. В одном варианте осуществления, декодер может декодировать по меньшей мере один размер тайла из битового потока видео, причем размер тайла содержит значение ширины и значение высоты, которое копируется из ранее декодированного размера тайла (блок 76). В одном варианте осуществления, декодер сконфигурирован, чтобы декодировать флаг по меньшей мере для одного текущего тайла (блок 78). В этих случаях, одно значение может указывать, что размер тайла текущего тайла скопирован из ранее декодированного размера тайла, в то время как другое значение указывает, что размер тайла не следует явно декодировать из информации в битовом потоке. В одном варианте осуществления, декодер определяет число размеров тайлов для декодирования путем декодирования значения числа из битового потока, специфицирующего число размеров тайлов (блок 80). В одном варианте осуществления, декодер определяет число размеров тайлов для декодирования путем определения, имеются ли дополнительные размеры тайлов для декодирования (блок 82). В частности, в этих случаях, декодер может определить, все ли CTU в картинке находятся в тайле, для которого был декодирован размер тайла. Альтернативно, декодер может определить, покрывают ли тайлы, соответствующие декодированным размерам тайлов, совместно всю картинку. Независимо от конкретного способа, которым декодер декодирует размеры тайлов, декодер, сконфигурированный в соответствии с этим вариантом осуществления, использует декодированные размеры тайлов, чтобы декодировать закодированное представление картинки.
Как показано на фиг. 16B, кодер может быть сконфигурирован в соответствии с этим вариантом осуществления, чтобы кодировать представление картинки битового потока видео с использованием одного или более из следующих аспектов.
В частности, как показано в способе 90, кодер может, в одном варианте осуществления, быть сконфигурирован, чтобы кодировать конкретный пространственный размер единицы для использования в кодировании по меньшей мере одной картинки (блок 92). В одном варианте осуществления, кодер может быть сконфигурирован, чтобы кодировать более чем один размер тайла явно в битовый поток (блок 94). В этих случаях, кодер может быть сконфигурирован, чтобы кодировать каждый размер тайла путем вставки в битовый поток одного кодированного целого значения ширины тайла, указывающего ширину единиц, и одного кодированного целого значения высоты тайла в битовый поток, указывающего высоту единиц. В одном варианте осуществления, кодер может также быть сконфигурирован, чтобы выводить по меньшей мере один размер тайла путем установки размера тайла равным ранее выведенному или декодированному размеру тайла (блок 96). В одном варианте осуществления, кодер также может быть сконфигурирован, чтобы вставлять значение флага для по меньшей мере одного текущего тайла (блок 98). В этих вариантах осуществления, одно значение может быть использовано, чтобы специфицировать декодеру, что размер тайла текущего тайла должен быть скопирован с ранее декодированного размера тайла, или кодер может вставить размер тайла явно в битовый поток, так что декодер может вывести размер тайла явным образом. В одном варианте осуществления, кодер может также быть сконфигурирован, чтобы указывать число размеров тайлов, которые сигнализируются путем вставки значения числа, специфицирующего число размеров тайлов, в битовый поток. Независимо от конкретного способа, которым кодер кодирует информацию, кодер сконфигурирован, чтобы использовать размеры тайлов для кодирования по меньшей мере одной картинки в битовый поток видео.
Таблица 3 идентифицирует примерный синтаксис для использования в этом варианте осуществления настоящего раскрытия. Синтаксис может быть реализован поверх существующей в настоящее время спецификации кодирования видео HEVC.
Таблица 3 - Примерный синтаксис
Семантика для синтаксических элементов в таблице 3
tile_enabled_flag, равный 1, специфицирует, имеется более одного тайла в каждой картинке, относящейся к PPS. tile_enabled_flag, равный 0, специфицирует, что имеется только один тайл в каждой картинке, относящейся к PPS.
Требованием согласованности битового потока является то, что значение tile_enabled_flag должно быть таким же для всех PPS, которые активированы в CVS.
flexible_tile_enabled_flag, равный 1, специфицирует, что гибкие тайлы используются для разбиения картинок, относящихся к PPS, на тайлы. flexible_tile_enabled_flag равный 0 специфицирует, что гибкие тайлы не используются для разбиения картинок, относящихся к PPS, на тайлы.
Если flexible_tile_enabled_flag равен 1, значение переменного tile_id и значение двумерного массива CTU_tile_assigment специфицированы следующим образом:
number_of_tile_in_picture_minus2 plus 2 специфицирует число тайлов в картинке. number_of_tile_in_picture_minus2 должно быть в диапазоне от 0 до PicSizeInCtbsY-2, включительно.
use_previous_tile_size_flag равный 1 специфицирует, что размер текущего тайла равен размеру предыдущего тайла. use_previous_tile_size_flag равный 0 специфицирует, что размер текущего тайла не равен размеру предыдущего тайла. Если отсутствует, значение use_previous_tile_size_flag подразумевается равным 0.
Когда use_previous_tile_size_flag равен 1, значение i-го элемента в массивах tile_height_minus1 и tile_width_minus1 выводятся следующим образом:
tile_height_minus1[i] = tile_height_minus1[i-1]
tile_width_minus1[i] = tile_width_minus1[i-1]
tile_width_minus1[i] plus 1 специфицирует ширину i-го тайла в единицах тайла.
tile_height_minus1[i] plus 1 специфицирует высоту i-го тайла в единицах тайла.
Значение переменного tile_id и значение двумерного массива CTU_tile_assigment выводятся следующим образом:
Требованием согласованности битового потока является то, что должны выполняться следующие условия перед назначением CTU_tile_assignment[tile_coordinate_x+ctu_y][tile_coordinate_y+y] значению tile_id:
1. Значение tile_coordinate_y+ctu_y должно быть меньше, чем PicHeightInCtbsY
2. Значение tile_coordinate_x+ctu_x должно быть меньше, чем PicWidthInCtbsY
3. Значение CTU_tile_assignment[tile_coordinate_x+ctu_x] [tile_coordinate_y+ctu_y] должно быть равно “no tile”.
Выведение переменного tile_id и значения двумерного массива CTU_tile_assigment, как специфицировано в семантике tile_height_minus1[i] выполняется для каждого значения i. Это означает, что выведение выполняется после каждого цикла переменной i, включая когда use_previous_tile_size_flag отсутствует, когда use_previous_tile_size_flag равен 0, и когда use_previous_tile_size_flag равен 1. Аналогично, три условия согласованности битового потока должны выполняться для любого назначения, сделанного в любом цикле.
Четвертый вариант осуществления
В четвертом варианте осуществления, настоящее раскрытие обеспечивает способ для определения, начинает ли или нет данная единица, такая как единица U, новый тайл. В частности, размеры единиц определяются и затем сканируются в предопределенном порядке. Например, в одном варианте осуществления, единица определяется как имеющая такой же размер, что и CTU, и затем сканируется в порядке растрового сканирования. При растровом сканировании, сканирование выполняется по горизонтали слева направо с постоянной скоростью, затем бланкируется и быстро перемещается обратно влево, где оно поворачивается и свипирует следующую строку, так что вертикальное положение постепенно возрастает. Разумеется, специалисту в данной области должно быть понятно, что порядок растрового сканирования описан в качестве примера в этом варианте осуществления, и другие варианты осуществления могут использовать другие предопределенные порядки сканирования (например, сканирование по горизонтали справа влево или сканирование первоначально по вертикали).
Независимо от конкретного порядка сканирования, для каждой единицы, имеется флаг, специфицирующий, начинает ли единица новый тайл или нет. Никакой флаг не отправляется для данной единицы, когда другая единица, позиционированная выше и слева, принадлежит тому же самому тайлу. В таких случаях, может делаться вывод, что как данная единица, так и другая единица находятся в том же самом тайле.
Таблица 4 графически иллюстрирует, указывает ли позиционирование сканируемой единицы, что единица начинает новый тайл, и значения (если имеются) для установки флага, указывающего, начинает ли единица новый тайл.
Таблица 4: Некоторое возможное позиционирование единиц и ассоциированная сигнализация
Установить флаг в:
0 для указания, что сканируемая единица находится в существующем тайле A
1 для указания, что сканируемая единица начинает новый тайл N
Установить флаг в:
0 для указания, что сканируемая единица находится в существующем тайле A
1 для указания, что сканируемая единица начинает новый тайл N
В этом случае, сканируемая единица не может быть в тайле А
Установить флаг в:
0 для указания, что сканируемая единица находится в существующем тайле В
1 для указания, что сканируемая единица начинает новый тайл N
В этом случае, сканируемая единица не может быть в тайле А
Установить флаг в:
0 для указания, что сканируемая единица находится в существующем тайле В
1 для указания, что сканируемая единица начинает новый тайл N
В этом случае, сканируемая единица не может быть в тайле А
Для всех случаев, показанных в таблице 4, за исключением неоднозначного случая в последней строке (т.е. находится ли сканируемая единица в тайле В, тайле С или начинает новый тайл), один флаг и известный статус других ранее сканированных единиц (т.е. единиц, позиционированных слева и сверху от сканируемой единицы, если они существуют) достаточны, чтобы специфицировать с их помощью корректный статус текущей сканируемой единицы. Для устранения неоднозначности в случае, показанном в последней строке таблицы 4, настоящее раскрытие вводит бит устранения неоднозначности. Например, в одном варианте осуществления, все биты устранения неоднозначности в определенном порядке сканирования помещены в массив битов устранения неоднозначности. Этот массив явно сигнализируется декодеру.
Таблица 5 обеспечивает первый примерный синтаксис для использования с этим вариантом осуществления. Синтаксис, показанный в таблице 5, не мог бы быть реализован поверх существующей в настоящее время спецификации кодирования видео HEVC. Дополнительно, только для иллюстративных целей, размер единицы равен размеру CTU.
Таблица 5: Первый примерный синтаксис
Семантика для синтаксических элементов в таблице 5
tile_enabled_flag: Этот флаг устанавливается в 1, чтобы специфицировать, что имеется более одного тайла в каждой картинке, относящейся к PPS. Этот флаг устанавливается в 0, чтобы специфицировать, что имеется только один тайл в каждой картинке, относящейся к PPS.
tile_status_flag_enabled Этот флаг устанавливается в 1, чтобы специфицировать, что структура тайлов сигнализируется с использованием способа флага статуса. Этот флаг устанавливается в 0, чтобы специфицировать, что структура тайлов не сигнализируется с использованием способа флага статуса тайлов.
ctu_status[i] Это устанавливается в 0, чтобы специфицировать, что ID тайла для текущей CTU копируется из доступного соседнего тайла с использованием copy_id(). Это устанавливается в 1, чтобы специфицировать, что новый ID тайла установлен для текущей CTU с использованием set_new_id().
Как видно из таблицы 4, имеются некоторые случаи, когда статусы CTU остаются неопределенными (например, в строках 2, 3, 5, 6 и 8 таблицы 4). В этих случаях, статус может быть определен, как специфицировано деталями сигнализации, показанными в таблице 6.
Таблица 6: Детали сигнализации для неоднозначных случаев
слева
сверху
слева
копироватьсверху (нужен бит
устранения неоднозначности)
ctu_status_disambiguator_flag: Этот флаг содержит бит устранения неоднозначности, который используется вместе с ctu_status для определения статуса CTU, если необходимо. Длина этого битового потока равна числу битов устранения неоднозначности в ctu_status. ctu_status_disambiguator_flag устанавливается, если и только если значение ctu_status_flag равно 0. В этих случаях, когда disambiguator_bit=0, ctu_status должен копироваться из единицы слева. Когда disambiguator_bit=1, ctu_status должен копироваться из единицы сверху.
exist(): Эта функция указывает, существует ли ID тайла для соседнего блока с ID тайла (tileIdAboveLeft, tileIdAbove или tileIdLeft).
set_new_id(): Эта функция устанавливает ID нового тайла для текущей CTU.
copy_id(): Эта функция копирует ID тайла из соседнего блока в соответствии с деталями, предоставленными в таблице 6.
assign_ctu_to_tile(): Эта функция назначает данную CTU явному ID тайла с использованием флагов ctu_status и ctu_status_disambiguator. Она также назначает данной CTU статус соседней CTU, позиционированной непосредственно слева от данной CTU, непосредственно выше данной CTU и непосредственно выше и слева (т.е., по диагонали) от данной CTU, если они существуют.
read_more_tiles(): Эта функция считывается в предопределенном порядке сканирования, такого как порядок растрового сканирования, следующим образом:
Если имеется по меньшей мере одна CTU в картинке, которая не назначена тайлу, установить значение возврата read_more_tiles() в TRUE;
Иначе установить значение возврата read_more_tiles() в FALSE
В одном аспекте этого варианта осуществления, ID тайла сигнализируется, когда сигнализируется новый тайл. ID тайла может быть ID нового тайла или ID ранее определенного тайла. Сигнализация ID тайла таким способом обеспечивает возможность более гибкой структуры тайлов с непрямоугольными или прерывистыми тайлами.
Отсчет битов
Фиг. 17A-17C иллюстрируют, в соответствии с одним вариантом осуществления, биты ctu_status (фиг. 17B) для разбиения тайлов (фиг. 17A) картинки, показанной на фиг. 14. В этом варианте осуществления, ячейки, которые являются пустыми, указывают, что никакой бит для данной CTU не сигнализируется в ctu_status. Указатель “?” обозначает, что необходим бит устранения неоднозначности. Фиг. 17C иллюстрирует соответствующие биты устранения неоднозначности ctu_status.
Таблица 7 обеспечивает второй примерный синтаксис для использования с этим вариантом осуществления. Синтаксис, показанный в таблице 7, заменял бы первый примерный синтаксис, показанный в таблице 5, и мог бы быть реализован поверх существующей в настоящее время спецификации кодирования видео HEVC. Дополнительно, только для иллюстративных целей, размер единицы равен размеру CTU.
Таблица 7: Второй примерный синтаксис
Семантика для синтаксических элементов в таблице 7
tile_enabled_flag: Этот флаг устанавливается в 1 для указания, что множество тайлов в каждой картинке относятся к PPS. Этот флаг устанавливается в 0 для указания, что только один тайл в каждой картинке относится к PPS.
tile_flag: Этот флаг указывает, установлен ли ID тайла текущей CTU равным ID тайла соседней CTU или начинает новый тайл.
Если tile_flag равен 0, значение CTU_tile_assignment[x][y] специфицировано следующим образом:
CTU_tile_assignment[x][y] = previous_tile;
Если флаг равен 1, значения CTU_tile_assignment[x][y] и tile_id специфицированы следующим образом:
CTU_tile_assignment[x][y] = tile_id;
tile_id=tile_id+1;
tile_flag1: Этот флаг указывает, установлен ли ID тайла текущей CTU равным ID тайла соседней CTU или начинает новый тайл.
Если tile_flag1 установлен в 1, значения CTU_tile_assignment[x][y] и tile_id специфицированы следующим образом:
TU_tile_assignment[x][y] = tile_id;
tile_id=tile_id+1;
tile_flag2: Этот флаг указывает, установлен ли ID тайла текущей CTU равным ID тайла CTU непосредственно выше текущей CTU или непосредственно слева от текущей CTU.
Когда tile_flag2 установлен в 0, значение CTU_tile_assignment[x][y] установлено в значение CTU слева от текущей CTU следующим образом:
CTU_tile_assignment[x][y] = CTU_tile_assignment[x][y-1];
Когда tile_flag2 установлен в 1, значение CTU_tile_assignment[x][y] установлено на значение CTU непосредственно выше текущей CTU следующим образом:
CTU_tile_assignment[x][y] = CTU_tile_assignment[x-1][y];
Пятый вариант осуществления
В пятом варианте осуществления, настоящее раскрытие обеспечивает способ для сканирования тайлов подобно тому, что обеспечено первым вариантом осуществления выше. Однако этот вариант осуществления включает один или более из следующих дополнительных признаков. В частности, этот вариант осуществления также позволяет:
1. Использовать традиционные тайлы в “традиционном режиме тайлов” и использовать гибкие тайлы в “режиме гибких тайлов”. Определение режима работы сигнализируется, например, с помощью флага, такого как flexible_tile_enabled_flag; и/или
2. Специфицировать конкретный размер для тайла. Например, этот вариант осуществления может специфицировать, используя размер последнего тайла для текущего тайла или размер тайла непосредственно слева или выше текущего тайла. Специфицированный размер может применяться к текущему тайлу или ко всем оставшимся тайлам, например, путем сигнализации значения режима.
Фиг. 18A показывает блок-схему способа 110 конструирования и сигнализации тайлов в соответствии с этим вариантом осуществления. Способ 110 реализуется кодером и начинается тем, что кодер определяет, имеет ли картинка только один тайл (блок 112). Если да, то кодер устанавливает tile_enabled_flag в 0 (блок 114) перед завершением способа 110. Однако если кодер определяет, картинка имеет множество тайлов, кодер создает пустой список тайлов (блок 116). Затем, пока тайлы остаются и в предопределенном порядке сканирования (блок 118), кодер устанавливает copy_tile_size_mode (блок 120). Если copy_tile_size_mode установлен в 0 (блок 122), кодер добавляет тайл, включая высоту и ширину тайла, к списку тайлов (блок 124). Затем процесс заканчивается.
Декодер синтаксически анализирует и конструирует тайлы, отправленные кодером. В этом варианте осуществления, декодер может выполнять эти функции в соответствии со способом 130 согласно фиг. 18B-18C. Как показано на фиг. 18B, декодер определяет, установлен ли tile_enabled_flag в 0 (блок 132). Если да, то декодер будет знать, что картинка содержит только один тайл, и поэтому способ 130 заканчивается. Иначе, декодер определяет, установлен ли flexible_tile_enabled_flag в 1 (блок 134). Если нет, декодер выполняет свои функции декодирования с использованием традиционных тайлов (блок 136). Если декодер определяет, что flexible_tile_enabled_flag не установлен в 1, декодер начинает обработку тайлов. В частности, пока тайлы остаются для обработки (блок 138), декодер синтаксически анализирует значение copy_tile_size_mode (блок 140) и использует это значение для определения ширины и высоты текущего тайла (т.е., тайла, обрабатываемого в текущее время).
В частности, если copy_tile_size_mode равен 0 (блок 142), декодер синтаксически анализирует следующий тайл в списке тайлов, который был создан кодером, специфицированный его шириной и длиной в предопределенном порядке сканирования (блок 144).
Если copy_tile_size_mode равен 1 (блок 146), декодер копирует ширину и высоту последнего сигнализированного тайла в ширину и высоту текущего тайла (блок 148).
Согласно фиг. 18C, если copy_tile_size_mode равен 2 (блок 150), декодер копирует ширину и высоту левого тайла в ширину и высоту текущего тайла (блок 152).
Если copy_tile_size_mode равен 3 (блок 154), декодер копирует ширину и высоту тайла непосредственно выше тайла, обрабатываемого в текущее время, в ширину и высоту текущего обрабатываемого тайла (блок 156).
Если copy_tile_size_mode равен 4 и еще не в конце списка тайлов (блок 158), декодер копирует ширину и высоту последнего сигнализированного тайла в ширину и высоту текущего тайла (блок 160).
Если copy_tile_size_mode равен 5 и еще не в конце списка тайлов (блок 162), декодер копирует ширину и высоту тайла непосредственно слева от текущего тайла и копирует эти значения в ширину и высоту текущего тайла (блок 164).
Если copy_tile_size_mode равен 6 и еще не в конце списка тайлов (блок 166), декодер копирует ширину и высоту тайла непосредственно выше текущего тайла в ширину и высоту текущего тайла (блок 168).
Таблица 8 показывает примерный синтаксис для использования с этим вариантом осуществления. Синтаксис согласно таблице 8 может быть реализован поверх спецификации кодирования видео HEVC.
Таблица 8: Примерный синтаксис тайлов
Семантика для синтаксических элементов в таблице 8
tile_enabled_flag: Когда этот флаг равен 1, он указывает, что имеется множество тайлов в каждой картинке, относящейся к PPS. Когда этот флаг равен 0, он указывает, что каждая картинка, относящаяся к PPS, имеет только один тайл.
flexible_tile_enabled_flag: Когда этот флаг равен 1, он указывает, что определены гибкие тайлы. Когда этот флаг равен 0, он указывает, что тайлы определены без использования синтаксиса гибких тайлов.
copy_tile_size_mode: Это значение указывает, как должно приниматься решение о текущем размере тайла. Более конкретно:
- copy_tile_size_mode равный 0 указывает, что размер тайла is явно сигнализируется.
- copy_tile_size_mode равный 1 указывает, что используется последний сигнализированный размер
- copy_tile_size_mode равный 2 указывает, что используется размер тайла слева от верхней/левой выборки текущего тайла
- copy_tile_size_mode равный 3 указывает, что используется размер тайла выше верхней/левой выборки текущего тайла
- copy_tile_size_mode равный 4 указывает, что используется последний сигнализированный тайл для всех оставшихся тайлов
- copy_tile_size_mode равный 5 указывает, что используется тайл слева от верхней/левой выборки текущего тайла для всех оставшихся тайлов
- copy_tile_size_mode равный 6 указывает, что используется тайл выше верхней/левой выборки текущего тайла для всех оставшихся тайлов.
copy_from_last_signaled_tile(): Это функция, которая копирует ширину и длину последнего сигнализированного тайла в ширину и длину текущего тайла.
copy_from_above_tile(): Это функция, которая копирует ширину и длину тайла выше текущего тайла в ширину и длину текущего тайла.
copy_from_left_tile(): Это функция, которая копирует ширину и длину тайла слева от текущего тайла в ширину и длину текущего тайла.
Шестой вариант осуществления
В шестом варианте осуществления, настоящее раскрытие обеспечивает способ для разбиения картинки на единицы и затем сканирования единиц в предопределенном порядке сканирования. Во время этого процесса, идентификатор тайла (tile id) специфицируется для каждой единицы. Предопределенный порядок представляет собой порядок растрового сканирования, и размер единицы равен размеру одной единицы CTU.
Фиг. 19A и 19B являются блок-схемами способов, реализуемых кодером и декодером, соответственно, чтобы конструировать и сигнализировать тайлы. В частности, способ 170 по фиг. 19A является способом 170, которым кодер конструирует и сигнализирует тайлы. Согласно способу 170, для каждой единицы в картинке (блок 172), кодер сигнализирует ID тайла для единицы в битовом потоке (блок 174) и назначает ID тайла единице (блок 176).
Способ 180 по фиг. 19B является способом 180, реализуемым декодером. В частности, для каждой единицы в картинке (блок 182), декодер синтаксически анализирует ID тайла для тайла, с которым ассоциирована единица (блок 184), и назначает ID тайла единице.
Таблица примерного синтаксиса и описание семантики для варианта осуществления 5 поверх спецификации кодирования видео HEVC могут выглядеть как таблица 9.
Таблица 9: Примерный синтаксис тайла
Семантика для синтаксических элементов в таблице 9
tile_enabled_flag: Когда этот флаг установлен в 1, это указывает, что имеется более одного тайла в каждой картинке, относящейся к PPS. Когда этот флаг установлен в 0, это указывает, что имеется только один тайл в каждой картинке, относящейся к PPS.
tile_id[y][x]: Это специфицирует ID тайла CTU с координатами y и x. Значение CTU_tile_assignment специфицируется следующим образом:
CTU_tile_assignment[y][x] = tile_id[y][x].
Седьмой вариант осуществления
Этот вариант осуществления настоящего раскрытия сходен с пятым вариантом осуществления, но включает в себя следующие дополнительные признаки.
Во-первых, устанавливается флаг, чтобы определять, включены ли гибкие тайлы, или используется традиционная структура тайлов, подобная нынешней структуре тайлов HEVC.
Во-вторых, этот вариант осуществления определяет способ для кодирования независимых тайлов с использованием фиксированного кодового значения, такого как кодовое значение 0. Тайл определен как независимый, если он имеет такой же самый размер, что и единица (например, CTU). Этот признак сберегает биты, когда картинка содержит множество независимых тайлов.
В-третьих, этот вариант осуществления определяет способ, который позволяет опционально кодировать ID тайлов кодированием фиксированной длины. В таких случаях используется флаг, чтобы сигнализировать, используется ли кодирование фиксированной длины значений ID тайла или кодирование переменной длины значений ID тайла.
Специалистам в данной области должно быть понятно, что настоящее раскрытие не ограничено этими признаками и вариантами осуществления. Напротив, эти признаки и их комбинации могут изменяться в различных вариантах осуществления. Кроме того, не требуется осуществлять все признаки. Например, использование флага для указания гибких тайлов и способ кодирования независимых тайлов могли бы использоваться вместе, даже если возможность кодирования ID тайлов кодированием фиксированной длины недоступна.
Таблица 10 показывает примерный синтаксис для использования с этим вариантом осуществления. Синтаксис согласно таблице 10, может быть реализован поверх существующей в настоящее время спецификации кодирования видео HEVC.
Таблица 10: Примерный синтаксис тайлов
Семантика для синтаксических элементов в таблице 10
tile_enabled_flag: Когда этот флаг установлен в 1, он указывает, что имеется более одного тайла в каждой картинке относящейся к PPS. Когда этот флаг установлен в 0, он указывает, что имеется только один тайл в каждой картинке, относящейся к PPS.
flexible_tile_enabled_flag: Когда этот флаг установлен в 1, он указывает, что определены гибкие тайлы. Когда этот флаг установлен в 0, он указывает, что тайлы определены без использования синтаксиса гибких тайлов.
use_zero_to_indicate_independent_tile_flag: Когда этот флаг установлен в 1, он указывает, что независимые тайлы кодированы с tile_id равным 0. Независимый тайл является тайлом с шириной тайла, равной ширине CTU, и высотой тайла, равной высоте CTU. Когда этот флаг установлен в 0, он указывает, что независимые тайлы кодированы таким же образом, как зависимые тайлы.
use_fixed_length_code_for_tile_id_flag: Когда этот флаг установлен в 1, он указывает, что ID тайлов кодированы с использованием кодирования фиксированной длины. Когда этот флаг установлен в 0, он указывает, что ID тайлов кодированы с использованием кодирования фиксированной длины.
number_of_unique_tile_id: Это значение для использования для ID тайла, чтобы указывать, что тайл зависит от всех других тайлов.
tile_id[i][j]: Это значение специфицирует ID тайла CTU с координатами i и j.
Восьмой вариант осуществления
В восьмом варианте осуществления настоящего раскрытия, картинка разделяется на тайлы с использованием квадродеревьев и/или гибкого разбиения тайлов. Процесс для разделения картинки с использованием квадродеревьев в этом варианте осуществления подобен процессу HEVC для разбиения CU.
Для простоты пояснения этого варианта осуществления, наименьшая единица тайла установлена на размер CTU. Однако специалисты в данной области поймут, что в других вариантах осуществления настоящего раскрытия, наименьшей единицей тайла является CU или прямоугольный набор CTU.
Дополнительно, не все тайлы имеют ширину и высоту, которые определены с коэффициентом 2 в терминах CTU. В одном варианте осуществления, разбиения для квадродеревьев используют целочисленное разделение, если высота и ширина не определяются с коэффициентом 2. Например, если размер данного тайла равен 5×7 CTU, разбиение квадродерева будет разделять тайл на тайлы T1, T2, T3 и T4 размера 2×3, 2×4, 3×3 и 3×4, соответственно, как показано на фиг. 20. Аналогично, горизонтальное и вертикальное разбиение “посредине” также использует целочисленные разделения.
Разбиение “посредине” определяется здесь так, что для данного тайла A, имеющего длину N CTU, где N положительное целое больше 1, результирующий первый разделенный тайл B имеет длину N/2, а второй разделенный тайл C имеет длину N/2+N%2, где ‘/’ указывает целочисленное разделение, и ‘%’ обозначает оператор по модулю. Длина тайла может быть шириной тайла, высотой тайла или обоими.
Например, если данный тайл имеет размер 1×5, этот тайл может быть разделен, в соответствии с вариантами осуществления настоящего раскрытия, на два тайла - первый тайл с размером 1×2 и второй тайл с размером 1×3.
Фиг. 21A-21B иллюстрируют способ 190, реализуемый кодером, чтобы конструировать и сигнализировать тайлы. Как показано на фиг. 21A, кодер сначала устанавливает картинку/вырезку как один тайл в списке незавершенных тайлов (блок 192). Кодер затем создает пустой список завершенных тайлов (блок 194). Кодер затем проверяет, чтобы определить, имеются ли какие-либо незавершенные тайлы (блок 196). Если нет, способ 190 заканчивается. Иначе, кодер получает следующий незавершенный тайл в порядке растрового сканирования (блок 198). Кодер затем определяет, может ли тайл далее быть разделен (блок 200). Если нет, кодер удаляет тайл из списка незавершенных тайлов (блок 202) и добавляет тайл, включая ID тайла, положение тайла и размеры тайла, к списку завершенных тайлов (блок 204) перед возвратом к определению, имеются ли какие-либо другие незавершенные тайлы (блок 196). Кодер затем сигнализирует флаг, указывающий, должен ли тайл разбиваться в соответствии с разбиением квадродерева (или горизонтальным или вертикальным разбиением “посредине”, если высота или ширина равна высоте или ширине CTU) (блок 206). Если флаг не указывает разбиение, кодер удаляет текущий тайл из списка незавершенных тайлов (блок 208) и добавляет разделенные тайлы к списку незавершенных тайлов (блок 210) перед возвратом к определению, имеются ли какие-либо другие незавершенные тайлы (блок 196).
Как показано на фиг. 21B, если флаг не указывает разбиение, кодер сигнализирует флаг, указывающий, следует ли дополнительно разделить тайл (блок 212). Если тайл не должен быть разделен, кодер снова определяет, имеются ли какие-либо другие незавершенные тайлы (блок 196). Однако если тайл должен быть дополнительно разделен, кодер сигнализирует флаг, указывающий, следует ли разделить тайл по вертикали или по горизонтали (блок 214). Отметим, однако, что указание вертикального/горизонтального разделения не требуется, когда ширина тайла равна ширине CTU или высота тайла равна высоте CTU.
Кодер затем сигнализирует конкретное положение CTU, в котором разделять тайл (блок 216), и разделяет тайл в этом положении (блок 218). Разделив таким образом, кодер удаляет текущий тайл из списка незавершенных тайлов и добавляет разделенные тайлы к списку незавершенных тайлов (блок 220) перед возвратом к определению, имеются ли какие-либо другие незавершенные тайлы (блок 196).
Фиг. 21C-21D иллюстрируют способ 230, реализуемый декодером, чтобы синтаксически анализировать тайлы, сконструированные и сигнализированные кодером согласно фиг. 21A-21B. Как показано на фиг. 21C, декодер сначала устанавливает картинку/вырезку как единственный тайл в список незавершенных тайлов (блок 232). Затем декодер создает пустой список завершенных тайлов (блок 234). Затем декодер проверяет, чтобы определить, имеются ли какие-либо незавершенные тайлы (блок 236). Если нет, способ 230 заканчивается. Иначе, декодер получает следующий незавершенный тайл в порядке растрового сканирования (блок 238). Затем декодер определяет, может ли тайл быть дополнительно разделен (блок 240). Если нет, декодер удаляет тайл из списка незавершенных тайлов (блок 242) и добавляет тайл, включая ID тайла, положение тайла и размеры тайла, к списку завершенных тайлов (блок 244) перед возвратом к определению, имеются ли какие-либо другие незавершенные тайлы (блок 196). Если тайл может быть разделен дополнительно, то декодер синтаксически анализирует флаг, указывающий, следует ли дополнительно разделить тайл в соответствии с разделением квадродерева (или горизонтальным или вертикальным разделением “посредине”, если высота или ширина равна высоте или ширине CTU) (блок 246). Если флаг указывает такое разделение, декодер удаляет текущий тайл из списка незавершенных тайлов (блок 248) и добавляет разделенные тайлы к списку незавершенных тайлов (блок 250) перед возвратом к определению, имеются ли какие-либо другие незавершенные тайлы (блок 236).
Как показано на фиг. 21D, декодер синтаксически анализирует флаг, сигнализированный кодером, чтобы определить, следует ли дополнительно разделить тайл (блок 252). Если тайл не должен дополнительно разделяться, декодер возвращается к определению, имеются ли какие-либо другие незавершенные тайлы (блок 236). Однако если тайл следует дополнительно разделить, декодер синтаксически анализирует флаг, указывающий, должен ли тайл разделяться по вертикали или по горизонтали (блок 254). Отметим, однако, что синтаксический анализ этого флага, чтобы определять вертикальное/горизонтальное разделение, не требуется, когда ширина тайла равна ширине CTU, или высота тайла равна высоте CTU.
Затем декодер синтаксически анализирует кодовое слово, чтобы определить конкретное положение CTU, в котором следует разделять тайл (блок 256), и разделяет тайл в этом положении (блок 258) перед возвратом к определению, имеются ли какие-либо другие незавершенные тайлы (блок 236).
Таблица 11 показывает примерный синтаксис для использования с этим вариантом осуществления. Синтаксис, показанный в таблице 11, может быть реализован поверх существующей в настоящее время спецификации кодирования видео HEVC.
Таблица 11: Примерный синтаксис тайлов
Семантика для синтаксических элементов в таблице 11
tile_enabled_flag: Этот флаг устанавливается в 1, чтобы указать, что имеется более одного тайла в каждой картинке, относящейся к PPS. Этот флаг устанавливается в 0, чтобы указать, что имеется только один тайл в каждой картинке, относящейся к PPS.
quadtree_split_flag: Этот флаг устанавливается в 1, чтобы указать, что тайл разделен с использованием квадродерева, если tile_width больше, чем ctu_width, и tile_height больше, чем ctu_height, разделен по горизонтали, если tile_width равно ctu_width и tile_height больше, чем ctu_height, или разделен по вертикали, если tile_width больше, чем ctu_width, и tile_height равно ctu_height. Этот флаг устанавливается в 0, чтобы указать, что тайл не разделен с использованием разбиения квадродерева. Отметим, что согласованность битового потока требует, чтобы значение quadtree_split_flag было равно 0, когда tile_width равно ctu_width, и tile_height равно ctu_height.
flexible_split_flag: Этот флаг устанавливается в 1, чтобы указать, что тайл разделен с использованием гибкого разбиения тайлов. Этот флаг устанавливается в 0, чтобы указать, что тайл далее не разделен.
split_in_horizontal_direction_flag: Этот флаг устанавливается в 1, чтобы указать, что гибкое разбиения выполнено в горизонтальном направлении. Этот флаг устанавливается в 0, чтобы указать, что гибкое разбиение выполнено в вертикальном направлении. Если split_in_horizontal_direction_flag отсутствует, значение флага подразумевается равным 1, если tile_width равно ctu_width и tile_height больше, чем ctu_height, и подразумевается равным 0, если tile_width больше, чем ctu_width, и tile_height равно ctu_height.
split_position_minus1 plus 1 специфицирует положение разбиения для гибкого разбиения на единицы CTU. split_position_minus1 должно быть в диапазоне от 0 до tile_width minus 2, если split_in_horizontal_direction_flag установлен в 1, или в диапазоне от 0 до tile_height minus 2, если split_in_horizontal_direction_flag равен 0.
read next_tile(): Эта функция считывает тайлы рекурсивно и сдвигается к следующему тайлу в порядке растрового сканирования, если больше не должно выполняться разбиение для текущего тайла. Дальнейшее разбиение не требуется, если применим любой из следующих случаев.
1. Ширина тайла равна ширине CTU, и высота тайла равна высоте CTU; и/или
2. flexible_split_flag установлен в 0.
Если определено, что тайл далее не должен разделяться, то тайл, включая ID тайла, его x- и y-положения, ширину и высоту, добавляется к списку завершенных тайлов.
split_tile_horizontally(): Эта функция разделяет текущий тайл по горизонтали на тайл A и тайл B в положении tile_height/2 в терминах высоты CTU, где разделение является целочисленным разделением.
split_tile_vertically(): Эта функция разделяет текущий тайл по вертикали на тайл A и тайл B в положении tile_width/2 в единицах ширины CTU, где разделение является целочисленным разделением.
split_tile_using_quadtree(): Эта функция разделяет текущий тайл по горизонтали и по вертикали на тайл A, тайл B, тайл C тайл D в положениях tile_height/2 в терминах высоты CTU и tile_width/2 в терминах ширины CTU, где разделения являются целочисленными разделениями.
split_tile_using_flexible_split(): Эта функция разделяет текущий тайл по горизонтали, если split_in_horizontal_direction равно 1, или по вертикали, если split_in_horizontal_direction_flag равен 0 на тайл A и тайл B в положении split_position_minus1 plus 1.
В соответствии с вариантами осуществления настоящего раскрытия, такая же самая структура тайлов может быть выражена с различными вариациями синтаксиса. То есть, разделение может упорядочиваться по-разному, но все еще достигать того же самого результата.
Дополнительно, часто можно назначать значение split_position_minus1, которое выше, чем разрешенное значение. Например, если tile_width равно 6, то 3 бита требуются для выбора любого из 5 разделенных положений тайла. Таким образом, в этом случае, 23-5=3 положений не могут быть выбраны, хотя это могло быть выбрано без ограничения в семантике. В одном варианте осуществления, где число положений больше, чем 2, дополнительные положения используются, чтобы сигнализировать следующие флаги в синтаксическом анализе. Если по меньшей мере 2 положения доступны, то следующий quadtree_split_flag, если имеется, устанавливается в 0, если split_position_minus1 +1=tile_width, если split_in_horizontal_direction равно 0, или split_position_minus1 +1=tile_height, если split_in_horizontal_direction равно 1. Следующий quadtree_split_flag устанавливается в 1, если split_position_minus1 +1=tile_width +1, если split_in_horizontal_direction равно 0, или split_position_minus1 +1=tile_height +1, если split_in_horizontal_direction равно 1.
В этом варианте осуществления, quadtree_split_flag не установлен в 1 в структуре тайлов картинки, как на фиг. 14, что означает, что каждое завершение разбиения тайлов стоит 2 бита. В некоторых вариантах осуществления, порядок синтаксического элемента может отличаться от предусмотренного в предложенном синтаксисе тайлов. Например, flexible_split_flag может находиться перед quadtree_split_flag, где quad_tree_split_flag равный 0 завершал бы дальнейшее разбиение тайла. В этом примере, структура тайлов согласно фиг. 15 могла бы выражаться с использованием 19+10=29 битов, а структура тайлов согласно фиг. 14 могла бы выражаться с использованием 73-19=54 бита. В одном варианте осуществления, дополнительный флаг мог бы сигнализироваться перед синтаксическим анализом структуры тайлов, указывая, следует ли первым анализировать quad_tree_split_flag или flexible_split_flag. В еще одном варианте осуществления, quad_tree_split_flag не используется. Вместо этого, используется только flexible_split_flag. В этом аспекте, после split_in_horizontal_direction_flag, может использоваться флаг “split_midways_flag”, чтобы специфицировать, следует ли разделять тайл посредине, или положение split_position_minus1 должно быть сначала считано, чтобы выполнять разбиение в этом положении.
Девятый вариант осуществления
В этом варианте осуществления, структура тайлов описывается путем специфицирования границы между тайлами. В настоящем раскрытии, границы между тайлами также упоминаются как “разделительные линии”.
В одном аспекте этого варианта осуществления, разделительные линии являются прямыми линиями, описываемыми их начальными и конечными точками. Поскольку начальные и конечные точки являются взаимозаменяемыми, не оказывая влияния на разделительную линию, обе упоминаются далее как конечные точки.
Так как разделительные линии являются горизонтальными или вертикальными, три координаты и флаг направления достаточны, чтобы однозначно описать ими каждую линию. Далее, этот вариант осуществления использует один флаг для сигнализации группы горизонтальных разделительных линий и один флаг для сигнализации группы вертикальных разделительных линий. Это дополнительно снижает общий битовый отсчет.
Например, иллюстративная структура тайлов, показанная на фиг. 14, может быть выражена с использованием 9 горизонтальных (h1, h2, h3, h4, h5, h6) и вертикальных (v1, v2, v3) разделительных линий, показанных на фиг. 22A-22C. Это эквивалентно 3*9=36 кодовым словам для координаты конечных точек и 2 флагов для групп горизонтальных и вертикальных разделительных линий, соответственно.
Фиг. 23A является блок-схемой последовательности операций, иллюстрирующей способ 260, реализуемый в кодере для определения горизонтальных и вертикальных разделительных линий для данной структуры тайлов. Только для иллюстрации, способ 260 описан в контексте структуры тайлов для картинки, показанной на фиг. 14.
Как показано на фиг. 23A, кодер определяет значение tile_enabled_flag (блок 262). Если этот флаг установлен в 0, это означает, что картинка содержит только один тайл, имеющий такую же ширину и высоту, что и картинка. Таким образом, процесс заканчивается.
Если, однако, этот флаг не установлен в 0, то кодер создает список всех горизонтальных разделительных линий (AHDL), которые образуют желательную структуру тайлов (блок 264), и список всех вертикальных разделительных линий (AVDL), которые образуют желательную структуру тайлов (блок 266). Если AHDL не пустой (блок 268), кодер сигнализирует горизонтальные разделительные линии и отправляет AHDL на декодер (блок 270). Аналогично, если AVDL не пустой (блок 272), кодер сигнализирует вертикальные разделительные линии и отправляет AVDL на декодер (блок 274). Порядок создания и сигнализации AHDL и AVDL может реверсироваться, не оказывая влияния на общие аспекты варианта осуществления.
Фиг. 23B является блок-схемой последовательности операций, иллюстрирующей способ 280, реализуемый в декодере для обработки тайлов, имеющих данную структуру тайлов, описанную соответствующими горизонтальными и вертикальными разделительными линиями. Как отмечено выше, этот вариант осуществления функциональности декодер описан в контексте структуры тайлов для картинки, показанной на фиг. 14. Однако это сделано только для простоты описания.
Как показано на фиг. 23B, декодер сначала определяет, установлен ли tile_enabled_flag в 0 (блок 282). Если этот флаг установлен в 0, это означает, что картинка содержит только один тайл, имеющий такую же ширину и высоту, что и картинка. Таким образом, процесс заканчивается.
Однако если флаг не установлен в 0, декодер создает пустой complete_tile_list (блок 284), синтаксически анализирует AHDL и создает список horizontal_divider_lines (HDL) (блок 286). Декодер также синтаксически анализирует AVDL и создает список vertical_divider_lines (VDL) (блок 288). Порядок синтаксического анализа AHDL и AVDL может быть реверсирован, не оказывая влияния на общие аспекты варианта осуществления.
Затем декодер создает corner_list со всеми углами и их направлениями, созданными границами картинки, HDL и VDL (блок 290). Например, со ссылкой на фиг. 22, точка перекрестия “┼” специфицирует четыре отдельных угла в corner_list, и T-соединения “├” или “┤” или “┬” или “┴” специфицирует точки двух отдельных углов.
Как только corner_list создан и заполнен, декодер обрабатывает этот список. В частности, если corner_list не пустой (блок 292), декодер получает один или более углов в предопределенном порядке сканирования. В частности, декодер принимает первый угол в порядке сканирования и локализует три соответствующих угла, которые формируют тайл из corner_list (блок 294). Затем декодер добавляет тайл к complete_tile_list (блок 296) и удаляет четыре использованных угла из corner_list (блок 298). Этот процесс продолжается до тех пор, пока corner_list не будет опустошен.
Таблица 12 показывает примерный синтаксис для использования с этим вариантом осуществления. Синтаксис, показанный в таблице 12, может быть реализован поверх существующей в настоящее время спецификации кодирования видео HEVC. Каждая конечная точка в списке горизонтальных/вертикальных разделительных линий, которые не расположены по границам картинки, должна располагаться по длине одной разделительной линии в вертикальном/горизонтальном списке (т.е. не другой начальной или конечной точки). Это позволит гарантировать надлежащее разбиение тайлов.
Таблица 12: Примерный синтаксис тайлов
Семантика для синтаксических элементов в таблице 12
tile_enabled_flag: Этот флаг устанавливается в 1, чтобы указать, что имеется более одного тайла в каждой картинке, относящейся к PPS. Этот флаг устанавливается в 0, чтобы указать, что имеется только один тайл в каждой картинке, относящейся к PPS.
tile_divider_line_enabled_flag: Этот флаг устанавливается в 1, чтобы указать, что разделительные линии используются для описания структуры тайлов. Этот флаг устанавливается в 0, чтобы указать, что разделительные линии не используются для описания структуры тайлов.
horizontal_divider_lines_count: Это значение специфицирует число горизонтальных разделительных линий.
vertical_divider_lines_count: Это значение специфицирует число вертикальных разделительных линии.
horizontal_divider_lines[i]: Это значение перечисляет все горизонтальное разделительные линии. Разделительные линии специфицируются координатами их концов. Поскольку каждая разделительная линия в этом списке является горизонтальной, три координаты достаточны, чтобы ими однозначно описать каждую разделительную линию - т.е., одно y-значение и два x-значения.
vertical_divider_lines[i]: Это значение перечисляет все вертикальные разделительные линии. Разделительные линии специфицируются координатами их концов. Поскольку каждая разделительная линия в этом списке является вертикальной, три координаты достаточны, чтобы ими однозначно описать каждую разделительную линию - т.е., два y-значения и одно x-значение.
corner_list: Это список всех угловых точек, описанных их положением и направлением (┌, ┐, └, ┘). Этот список учитывает все границы картинки и все горизонтальные и вертикальные разделительные линии (включая их пересечения).
В одном аспекте, этот вариант осуществления раскрытия предполагает полную сетку. Затем специфицируются начальные и конечные точки разделительных линий, которые должны быть удалены. Для описания структуры тайлов, показанной на фиг. 15, этот вариант осуществления описывает 6 разделительных линий, которые должны быть удалены, и, таким образом, 3*6 кодовых слов плюс два кодовых слова для группы горизонтальных и вертикальных разделительных линий необходимы для описания структуры тайлов.
Еще в одном аспекте, разделительные линии имеют точку(и) перегиба (изменения направления) в дополнение к начальным и конечным точкам. Точки перегиба представляют “соединения” (стыки). В соответствии с настоящим раскрытием, соединения действуют как конечная точка для предыдущей точки и как начальная точка для следующей точки в описании линии.
Несколько наборов разделительных линий могут приводить в результате к такой же структуре тайлов. Кодер может оптимизировать минимальное число разделительных линий. В одном аспекте, разделительные линии могут иметь общие части. В другом аспекте, разделительные линии не имеют общих частей.
Еще в одном аспекте, разделительные линии специфицируются однократно и затем копируются в данное положение в сетке.
Десятый вариант осуществления
Этот вариант осуществления настоящего раскрытия описывает структуру тайлов с использованием набора точек, которые находятся в структуре и которые имеют особые свойства. Эти точки упоминаются здесь как “T-соединения.”
Как описано выше, структура тайлов содержит набор внутренних линий, также упоминаемых как “разделительные линии”. Каждая разделительная линия является прямой линией с двумя конечными точками, где разделительная линия завершается (т.е. разделительная линия далее не продолжается). Так называемые “T-соединения” определяются в положении этих конечных точек разделительных линий. Поскольку каждая разделительная линия заканчивается в соединении этой разделительной линии с другой перпендикулярной разделительной линией (не с конечной точкой другой разделительной линии ввиду прямоугольной структуры тайлов) или в соединении с границей картинки, перпендикулярной первой разделительной линии, каждое T-соединение имеет одну из четырех возможных форм: ┴, ┬, ┤, ├. Таким образом, каждое T-соединение может быть полностью описано с использованием положения соединения и одной из 4 форм ┴, ┬, ┤, ├. Три направления, указываемые каждым T-соединением, упоминаются здесь как “ветви” этого T-соединения.
Структура тайлов картинки может затем определяться из набора T-соединений путем продолжения всех трех ветвей всех T-соединений в картинке до тех пор, пока каждая ветвь не достигнет либо границы картинки, либо положения другого T-соединения.
В одном аспекте этого варианта осуществления, набор T-соединений сокращается путем удаления избыточных T-соединений. Как описано здесь, избыточные T-соединения являются такими, которые расположены на границе картинки и не изменяют структуру тайлов, если они удаляются. Пример структуры тайлов с избыточными T-соединениями показан на фиг. 24A-24B. Набор T- соединений T-J после удаления избыточных T-соединений также представлен на фиг. 24C. Избыточность соединений проверяется поодиночке. Это означает, что если T-соединение T-J является избыточным и, таким образом, будет удалено из набора, оно не должно включаться в проверку избыточности для остальных T-соединений T-J в наборе.
Фиг. 25A-25B иллюстрируют примерную структуру тайлов S и соответствующий набор T-соединений T-J, который описывает эту конкретную структуру тайлов S.
Фиг. 26A является блок-схемой последовательности операций, иллюстрирующей способ 300, реализуемый в кодере для создания набора T-соединений, как описано выше. Способ 300 начинается с того, что кодер выбирает структуру тайлов и создает набор разделительных линий, которые соответствуют этой структуре тайлов (блок 302). Затем кодер создает набор T-соединений (TJ) (блок 304). В этом варианте осуществления, STJ включает информацию относительно положения и ориентации каждого T-соединения. Это может выполняться с использованием множества процессов, однако, в этом варианте осуществления, кодер назначает одно T-соединение положению каждого конца разделительной линии в созданном наборе, и назначает надлежащее направление этому T-соединению на основе того, является ли разделительная линия горизонтальной или вертикальной, и является ли конечная точка левой/правой или верхней/нижней конечной точкой.
Кодер затем удаляет избыточные T-соединения. В частности, для каждого T-соединения на границе картинки (блок 306), кодер определяет, имеется ли другое T-соединение в STJ с тем же числом столбцов или строк, и если да, отличается ли его направление от исследуемого T-соединения (блок 308). Если да, то кодер удаляет это T-соединение (блок 310).
Фиг. 26B является блок-схемой последовательности операций, иллюстрирующей способ 320, реализуемый в декодере для создания набора T-соединений, как описано выше. Способ 300 начинается тем, что декодер декодирует набор или список T-соединений (блок 322). Каждое T-соединение имеет положение и направление или тип. Имеется 4 направления/типа. Никакие два T-соединения не должны иметь одно и то же положение, и никакое T-соединение не должно иметь положение вне картинки. Далее выводится структура разбиения тайлов, при этом декодер выводит разбиение тайлов из набора или списка T-соединений, так что каждое T-соединение продолжается от всех трех ветвей до тех пор, пока каждая ветвь не достигнет другого T-соединения или границы картинки (блок 324).
Таблица 13 показывает примерный синтаксис для использования с этим вариантом осуществления. Синтаксис, показанный в таблице 13, может быть реализован поверх существующей в настоящее время спецификации кодирования видео HEVC.
Таблица 13: Примерный синтаксис тайлов
Семантика для синтаксических элементов в таблице 13
tile_enabled_flag: Этот флаг устанавливается в 1, чтобы указать, что имеется более одного тайла в каждой картинке, относящейся к PPS. Этот флаг устанавливается в 0, чтобы указать, что имеется только один тайл в каждой картинке, относящейся к PPS.
tile_enabled_flag: Этот флаг устанавливается в 1, чтобы указать, что имеется более одного тайла в каждой картинке, относящейся к PPS. Этот флаг устанавливается в 0, чтобы указать, что имеется только один тайл в каждой картинке, относящейся к PPS.
tile_t_junction_enabled_flag: Этот флаг устанавливается в 1 чтобы указать, что T-соединения используются для описания структуры тайлов.
t_junction_size_minus1 plus one: Это значение специфицирует число сигнализируемых T-соединений.
t_junction_new_row_seq: Это значение является битовой последовательностью с длиной, равной числу T- соединений.
t_junction_new_row_seq: Это значение начинается с 1 и переключается каждый раз, когда T-соединение меняет линии сканирования. В качестве примера, для структуры тайлов 14, t_junction_new_row_seq устанавливается в: 1110010110. С использованием этого, не требуется сигнализировать x и y для T-соединения, если оно расположено на той же линии сканирования, что и предыдущее T-соединение.
t_junction_list: Это список всех T-соединений (включая их положение и направление) в определенном порядке сканирования.
complete_tile_list: Это список, который поддерживает все завершенные тайлы. Завершенные тайлы специфицированы их четырьмя углами. complete_tile_list инициализируется одним тайлом, включающим все единицы в картинке.
update_complete_tile_list(): Это определяется как функция, которая обновляет список завершенных тайлов и описывается следующим образом:
update_complete_tile_list() {
- С использованием положения и направления t_junction_list[i], продолжать все ветви t_junction_list[i] до тех пор, пока каждая ветвь не достигнет другого T-соединения или границы картинки.
- Если единицы на двух сторонах каждой ветви назначены тому же самому тайлу, обновить список завершенных тайлов путем добавления вновь созданного тайла(ов).
}
Одиннадцатый вариант осуществления
Этот вариант осуществления основан на наблюдении, что число тайлов обычно намного ниже, чем число блоков в картинке. Этот вариант осуществления использует такую разреженность для кодирования структуры тайлов.
Более детально, каждый тайл может однозначно специфицироваться положением его двух противоположных углов. Для простоты, верхний левый угол рассматривается как начальное положение тайла, и нижний правый угол рассматривается как конечное положение тайла. Соответственно координаты начальной и конечной точек тайлов маркируются в матрице числом столбцов и строк, равным ширине и высоте картинки, деленным на ширину и высоту единиц картинки (например, CTU).
Матрица, соответствующая координатам начальных углов на сетке, рассматривается как разреженная и сжимается с использованием способов сжатия разреженной матрицы, таких, например, как сжатый разреженный столбец (CSC) или сжатая разреженная строка (CSR). То же самое применимо к матрице конечных углов. Другим возможным способом сжатия разреженной матрицы является сжатие матрицы таким же или сходным способом, как это делается в HEVC для матриц значимости коэффициентов или знаков коэффициентов при сжатии коэффициентов преобразования. Фиг. 27A-27C показывают, как структура тайлов картинки 10 (фиг. 27A) связана с матрицей начальных углов (фиг. 27B) и матрицей конечных углов (фиг. 27C).
Одно отличие от стандартных CSC и CSR состоит в том, что единственные ненулевые значения в матрице начальных углов и матрице конечных углов равны 1. Поэтому в битовом потоке отправляется только положение этих ненулевых значений.
Фиг. 28A представляет собой блок-схему последовательности операций, иллюстрирующую способ 330, реализуемый в кодере для создания матриц начальных и конечных углов, как описано выше. Как показано на фиг. 28A, способ 330 начинается тем, что кодер определяет, имеет ли картинка только один тайл (блок 332). Если да, кодер устанавливает tile_enabled_flag в 0 (блок 334), и процесс заканчивается.
Если кодер определяет, что картинка имеет более одного тайла, кодер создает матрицу начальных углов и матрицу конечных углов путем маркирования начальной точки и конечной точки каждого тайла в соответствующей матрице (блок 336). Затем кодер создает битовый поток начальных углов и битовый поток конечных углов (например, с использованием CSC или CSR) (блок 338) и сигнализирует тип сжатия (CSC или CSR) путем установки sparse_matrix_compression_flag (блок 340).
Фиг. 28B представляет собой блок-схему последовательности операций, иллюстрирующую способ 350, реализуемый в декодере для обработки матриц начальных и конечных углов, как описано выше. Как показано на фиг. 28B, способ 350 начинается тем, что декодер определяет, установлен ли tile_enabled_flag в 0 (блок 352). Если да, процесс заканчивается, так как картинка включает только один тайл, который имеет такую же ширину и высоту, что и картинка.
Однако если имеется более одного тайла в картинке, декодер создает пустой список тайлов (блок 354). Затем декодер синтаксически анализирует сжатые начальные углы и конечные углы из битового потока и разворачивает их в матрицу начальных углов и матрицу конечных углов (блок 356). Затем, при условии, что начальные углы определены в матрице начальных углов (блок 358), декодер считывает положение следующего начального угла в направлении растрового сканирования (блок 360).
Затем декодер локализует соответствующий конечный угол в матрице конечных углов, и добавляет тайл (например, положение тайла и ID тайла или, например, положение тайла и ширину и высоту) к complete_tile_list (блок 362). Затем декодер устанавливает соответствующие начальный и конечный углы в матрице в нуль и повторяет процесс.
В качестве контроля корректности, декодер может определить:
- Число начальных углов (единиц в матрице начальных углов) равно числу тайлов.
- Число конечных углов (единиц в матрице начальных углов) равно числу тайлов.
- Первый элемент матрицы начальных углов всегда установлен в 1.
- Последний элемент матрицы конечных углов всегда установлен в 1.
Таблица 14 показывает примерный синтаксис для использования с этим вариантом осуществления. Синтаксис, показанный в таблице 14, может быть реализован поверх существующей в настоящее время спецификации кодирования видео HEVC.
Таблица 14: Примерный синтаксис тайлов
Семантика для синтаксических элементов в таблице 14
tile_enabled_flag: Этот флаг устанавливается в 1, чтобы указать, что имеется более одного тайла в каждой картинке, относящейся к PPS.: Этот флаг устанавливается в 0 чтобы указать, что имеется только один тайл в каждой картинке, относящейся к PPS.
sparse_matrix_compression_enabled_flag: Этот флаг устанавливается в 1, чтобы указать, что разреженная матрица используется для описания структуры тайлов.
sparse_matrix_compression_mode: Это указывает, какой способ сжатия разреженной матрицы используется для матрицы начальных и конечных углов. Установка этого режима в 0 указывает, что используется способ сжатой разреженной строки (CSR).
start_corners_stream_1 является первым массивом, который используется для построения start_corners_matrix. Этот массив конструируется как: start_corners_stream_1[i] = число ненулевых элементов в (i)-ой строке в start_corners_matrix.
tile_count: Это значение специфицирует число тайлов. Это также дает число ненулевых значений в start_corner_matrix и end_corner_matrix.
start_corners_stream_2 является вторым массивом, который используется для построения start_corners_matrix. Этот массив содержит индекс столбца (от 0 до n-1) каждого элемента start_corners_matrix и, следовательно, числа длины ненулевых элементов в start_corners_matrix.
end_corners_stream_1 является первым массивом, который используется для построения end_corners_matrix. Этот массив конструируется как: end_corners_stream_1[i] = число ненулевых элементов в (i)-ой строке в end_corners_matrix.
end_corners_stream_2 является вторым массивом, который используется для построения end_corners_matrix. Этот массив содержит индекс столбца (от 0 до n-1) каждого элемента end_corners_matrix и, следовательно, числа длины ненулевых элементов в end_corners_matrix.
start_corners_matrix является матрицей начальных углов, которая однозначно определяется двумя массивами start_corners_stream1 и start_corners_stream_2.
end_corners_matrix является матрицей конечных углов, которая однозначно определяется двумя массивами end_corners_stream1 и end_corners_stream_2.
complete_tile_list является списком завершенных тайлов, инициализированным как пустой список.
update_complete_tile_list() является функцией, которая считывает тайлы из start_corners_matrix и end_corners_matrix и добавляет их к complete_tile_list. В предположении направления растрового сканирования слева направо и сверху вниз, эта функция описывается следующим образом:
update_complete_tile_list() {
Найти первое 1 значение в start_corners_matrix в направлении растрового сканирования
Найти соответствующее 1 значение в end_corners_matrix.
Добавить тайл к complete_tile_list с использованием координат начального угла и конечного угла.
Установить соответствующий начальный угол в нуль в start_corners_matrix.
}
Варианты осуществления, описанные здесь со ссылкой на структуру разбиения, определенную кодером или выводимую декодером, такими как кодер 400 и декодер 450, иллюстрируются на фиг. 34A и 34B. Фиг. 34A показывает пример кодера 400, передающего битовый поток 700 с информацией, указывающей структуру разбиения 750. Структура разбиения 750 включает в себя сегменты или тайлы 720, 730 и 740. Битовый поток 700 содержит информацию, указывающую размер единицы 710, и информацию, относящуюся к сегментам 720, 730 и 740, где край сегмента 720 граничит с краем сегмента 730 и краем сегмента 740.
Фиг. 34B показывает соответствующий примерный декодер, принимающий битовый поток 700, с информацией, указывающей структуру разбиения 750. Структура разбиения 750 включает в себя сегменты или тайлы 720, 730 и 740. Битовый поток 700 содержит информацию, указывающую размер единицы 710, и информацию, относящуюся к тайлам или сегментам 720, 730 и 740, где край сегмента 720 граничит с краем сегмента 730 и краем сегмента 740.
Разумеется, специалист в данной области поймет, что кодер 400 и декодер 450 могут использоваться отдельно, как показано на фиг. 34A-34B или во взаимосвязи, чтобы обмениваться последовательностями изображений, как показано на фиг. 29.
В случаях, где происходит обмен последовательностями изображений, битовый поток в одном или более вариантах осуществления включает указатель идентификатора картинки или иначе ассоциирует конкретную структуру разбиения с картинкой или несколькими картинками. Как показано на фиг. 29, структура разбиения 400 показывает разделительные линии 420 для сегментов 421, 422, 423 картинки. Данный сегмент картинки структуры разбиения содержит по меньшей мере два подсегмента, например, подсегменты, сформированные разделительной линией 410, образующей границу подсегмента. Подсегмент может содержать множество единиц. Например, согласно фиг. 29, подсегмент 480 содержит 4 единицы. Край первого сегмента 421 картинки граничит с соответствующими краями смежных сегментов 422 и 423 картинки. Согласно фиг. 29, кодер 400 и декодер 450 кодируют и декодируют соответственно множество изображений, которые имеют ту же структуру разбиения 400 или разные структуры разбиения 430 и 450. Эти разные структуры разбиения могут быть гибкими структурами разбиения, как описано здесь. Альтернативно или дополнительно, как показано на фиг. 29, разные структуры разбиения могут включать и традиционные структуры разбиения с разделительными линиями 440 и 460, проходящими через изображение.
Фиг. 35 показывает пример системы или способа 800, в которых используются описанные кодер или декодер. Система содержит источник медиа (например, захват данных, визуализатор или файл). Источник 810 медиа осуществляет ввод в проекционное отображение 820 и затем в кодер или транскодер тайлов, например, кодер 400 для разбиения изображения источника медиа, как описано здесь. Закодированная информация сохраняется в хранилище 830 и затем подается в сервер 840. Она может передаваться по сети 850 на устройство 860 просмотра. Например, изображение является изображением видео, и устройство 860 просмотра имеет декодер 450, как описано, для декодирования разбитого изображения, визуализации 870 изображения и отображения изображения на дисплее 880 пользователю устройства 860 просмотра. Такое устройство просмотра может представлять собой, например, наголовный дисплей (HMD) или любое устройство отображения.
Один или более вариантов осуществления применимы в приложениях, в которых устройство 860 просмотра принимает одно или более изображений во взаимосвязи с конкретным направлением взгляда устройства. В одном варианте осуществления, устройство приняло от сервера 840 информацию, поясняющую, что доступны потоки тайлов, и информацию о каждом потоке тайлов, такую как пространственное покрытие и битовая скорость. Направление взгляда устройства 860 просмотра захватывается, и устройство 860 просмотра запрашивает поднабор потоков тайлов с сервера 840. Устройство 860 просмотра принимает потоки тайлов и составляет из них единый битовый поток и подает битовый поток в декодер 450. Устройство 860 просмотра имеет необходимую информацию о потоках тайлов и как они сформированы в единый битовый поток. Поэтому устройство 860 просмотра может преобразовать декодированные картинки в картинки, пригодные для визуализации.
В другом варианте осуществления, направление взгляда устройства 860 просмотра захватывается и отправляется на сервер 840. Сервер 840 составляет единый битовый поток из сохраненных потоков тайлов и отправляет битовый поток на декодер 450. Необходимая информация о преобразовании декодированных картинок в картинки, пригодные для визуализации, отправляется вместе с битовым потоком. Устройство 860 просмотра декодирует картинки (декодер 450), преобразует и визуализирует их (визуализация 870). Опционально, устройство 860 просмотра или клиент непрерывно отправляет запросы, какую битовую скорость должен иметь поток.
Кодер 400 и декодер 450 могут быть реализованы с использованием подходящей комбинации аппаратных средств и/или программного обеспечения. Соответственно, кодер, содержащий один или более процессоров и, например, одно или более устройств памяти, сконфигурирован для выполнения способов в соответствии с описанными вариантами осуществления. Фиг. 30 является блок-схемой, показывающей компоненты кодера 400. Процессор 500 может быть комбинацией одного или более из подходящего центрального процессора (CPU), мультипроцессора, микроконтроллера, цифрового сигнального процессора (DSP), специализированной интегральной схемы (ASIC) и т.д., способных исполнять программные инструкции, содержащиеся в компьютерной программе 520, сохраненной в одном или более устройствах памяти 515. Одно или более устройств памяти 515 представляют собой, например, буфер данных, память для записи-считывания (RWM), постоянную память (ROM), память с произвольным доступом (RAM), кэш-память, устройства флэш-памяти, оптические устройства хранения и т.д. Кодер может содержать интерфейс 540 со схемой 530 ввода и/или вывода, сконфигурированный для передачи битового потока, например, передатчиком или приемопередатчиком 550.
Как показано на фиг. 31, кодер 400 может содержать блоки, модули или схемы, сконфигурированные для выполнения описанных способов. Например, кодер 400 содержит модуль 600 определения разбиения, определяющий структуру разбиения, которая разделяет картинку на сегменты картинки, как описано. Кодер 400 содержит модуль 610 кодирования, который кодирует сегменты картинки в соответствии со структурой разбиения для генерации множества кодированных сегментов картинки. Кодер 400 содержит модуль 620 генерации, который генерирует битовый поток, содержащий множество кодированных сегментов картинки и информацию, указывающую структуру разбиения, используемую для разделения картинки на множество сегментов картинки.
Далее, декодер 450, содержащий один или более процессоров и, например, одно или более устройств памяти, сконфигурирован для выполнения способов в соответствии с описанными вариантами осуществления. Фиг. 32 является блок-схемой, показывающей компоненты декодера 450. Процессор 510 может быть любой комбинацией одного или более из подходящего центрального процессора (CPU), мультипроцессора, микроконтроллера, цифрового сигнального процессора (DSP), специализированной интегральной схемы (ASIC) и т.д., способных исполнять программные инструкции, содержащиеся в компьютерной программе 550, сохраненной в одном или более устройствах памяти 540. Одно или более устройств памяти 540 представляют собой, например, буфер данных, память для записи-считывания (RWM) или постоянную память (ROM). Декодер 450 содержит интерфейс 545 со схемой 535 ввода и/или вывода, сконфигурированный для приема битового потока, например, приемником или приемопередатчиком 560.
Как показано на фиг. 33, декодер 450 может содержать блоки, модули или схемы, сконфигурированные, чтобы выполнять способы, описанные в настоящем документе. Например, декодер 450 содержит модуль 630 приема, сконфигурированный, чтобы принимать битовый поток. Декодер 450 содержит модуль 640 выведения, сконфигурированный, чтобы выводить, из информации в битовом поток, структуру разбиения. Декодер 450 содержит модуль 650 декодирования, сконфигурированный, чтобы декодировать кодированные сегменты картинки, принятые в битовом потоке в соответствии со структурой разбиения.
Следует отметить, что варианты осуществления в настоящем раскрытии содержат сегменты или тайлы, имеющие прямоугольную форму, где каждый сегмент или тайл имеет четыре стороны или края. Дополнительно, каждая сторона или край граничит с другими сегментами или тайлами или границей картинки. То есть, картинка может быть расширена до размера, равного целому числу единиц.
В настоящем раскрытии, “тайл” является типом сегмента, и термины “сторона” и “край” могут использоваться взаимозаменяемым образом.
Некоторые из вариантов осуществления, предусмотренных здесь, описаны более полно со ссылками на приложенные чертежи. Однако другие варианты осуществления входят в объем предмета, раскрытого здесь. Раскрытый предмет не должен интерпретироваться как ограниченный только вариантами осуществления, раскрытыми в настоящем документе; скорее, эти варианты осуществления предоставлены для примера, чтобы передавать объем заявленного предмета специалистам в данной области техники.
Группа изобретений характеризует технологии кодирования и декодирования видео и, более конкретно, относится к кодированию и декодированию гибких сегментов картинки. Техническим результатом является повышение эффективности кодирования/декодирования картинки с использованием структуры гибкого разбиения вырезок. Предложен способ декодирования картинки. Способ содержит этап, на котором осуществляют прием битового потока, содержащего множество кодированных гибких вырезок и информацию из набора параметров, ассоциированную с множеством кодированных гибких вырезок, причем информация содержит и высоту и ширину первого сегмента картинки структуры пространственного разбиения. Далее, согласно способу, осуществляют выведение, из информации в битовом потоке, структуры пространственного разбиения, которая делит картинку на гибкие вырезки, причем каждая гибкая вырезка соответствует одной из множества кодированных гибких вырезок и содержит по меньшей мере одну единицу. 6 н. и 53 з.п. ф-лы, 59 ил., 14 табл.
1. Способ (30) декодирования картинки, причем способ содержит:
прием (32) битового потока (12), содержащего множество кодированных гибких вырезок и информацию из набора параметров, ассоциированную с множеством кодированных гибких вырезок, причем информация содержит и высоту и ширину первого сегмента картинки структуры пространственного разбиения;
выведение (34), из информации в битовом потоке, структуры пространственного разбиения, которая делит картинку на гибкие вырезки, причем каждая гибкая вырезка соответствует одной из множества кодированных гибких вырезок и содержит по меньшей мере одну единицу, и причем правый край первой гибкой вырезки структуры пространственного разбиения граничит с соответствующими краями двух или более гибких вырезок; и
декодирование (38) множества кодированных гибких вырезок, принятых в битовом потоке в соответствии со структурой пространственного разбиения, причем выведение режима интра-предсказания для первой единицы (U1) первой гибкой вырезки зависит от выведенного режима интра-предсказания для второй единицы (U2) первой гибкой вырезки и не зависит от режима интра-предсказания для единиц любой другой гибкой вырезки структуры пространственного разбиения.
2. Способ по п. 1, причем выведение, из информации в битовом потоке, дополнительно содержит выведение (36) значения параметра квантования для первой единицы на основе значения параметра квантования для второй единицы, причем выведение значения параметра квантования для первой единицы не зависит от значения параметра квантования для единиц любой другой гибкой вырезки.
3. Способ по п. 1, причем выведение структуры пространственного разбиения содержит прием (134) указания, что кодер использует гибкое разбиение.
4. Способ по п. 1, причем декодирование множества кодированных гибких вырезок содержит декодирование каждой гибкой вырезки в соответствии с предопределенным порядком декодирования (66).
5. Способ по п. 4, причем предопределенный порядок декодирования является порядком растрового сканирования.
6. Способ по п. 1, причем выведение структуры пространственного разбиения содержит копирование (152, 156, 164, 168) размера гибкой вырезки из соседней гибкой вырезки.
7. Способ по п. 6, причем информация из набора параметров, ассоциированная с множеством кодированных гибких вырезок, содержит режим копирования, указывающий выбор соседней гибкой вырезки на основе положения соседней гибкой вырезки в структуре пространственного разбиения или порядка для декодирования гибких вырезок.
8. Способ по любому из пп. 1-7, причем каждая единица структуры пространственного разбиения представляет собой единицу дерева кодирования (CTU).
9. Способ по любому из пп. 1-7, причем гибкие вырезки содержат гибкие тайлы.
10. Способ по любому из пп. 1-7, причем каждая единица структуры пространственного разбиения соответствует различным одним из прямоугольных или квадратных областей картинки.
11. Способ по любому из пп. 1-7, причем каждая единица структуры пространственного разбиения представляет собой область картинки, и информация содержит один размер для всех единиц структуры пространственного разбиения.
12. Способ по любому из пп. 1-7, причем информация содержит высоту, ширину или то и другое первой гибкой вырезки структуры пространственного разбиения.
13. Способ по любому из пп. 1-7, причем информация содержит целое число, специфицирующее высоту или ширину относительно размера единицы структуры пространственного разбиения.
14. Способ по любому из пп. 1-7, причем информация содержит указание, что вторая гибкая вырезка структуры пространственного разбиения отличается по высоте, ширине или тому и другому по сравнению с первой гибкой вырезкой.
15. Способ по п. 14, причем указание представляет собой флаг или режим.
16. Способ по п. 14, причем отсутствие указания указывает, что гибкая вырезка структуры пространственного разбиения является такой же, что и другая гибкая вырезка в отношении по меньшей мере одного из высоты или ширины первой гибкой вырезки.
17. Способ по любому из пп. 1-7, причем информация указывает, что декодер, принимающий кодированные гибкие вырезки, должен копировать атрибуты касательно размера гибкой вырезки структуры пространственного разбиения из соседней гибкой вырезки структуры пространственного разбиения.
18. Способ по п. 17, причем информация указывает конкретную соседнюю гибкую вырезку на основе положения конкретной соседней гибкой вырезки в структуре пространственного разбиения.
19. Способ по любому из пп. 1-7, причем информация содержит идентификаторы гибких вырезок, причем каждый идентификатор гибкой вырезки указывает одну из гибких вырезок для единицы структуры пространственного разбиения.
20. Способ по любому из пп. 1-7, причем каждая единица структуры пространственного разбиения представляет собой область картинки, и причем информация указывает один размер для всех единиц структуры пространственного разбиения.
21. Способ по любому из пп. 1-7, причем информация содержит независимый идентификатор единицы, указывающий, что единица представляет собой единственную единицу в гибкой вырезке.
22. Способ по любому из пп. 1-7, причем каждая единица структуры пространственного разбиения представляет собой область картинки, и информация содержит единый размер для всех единиц структуры пространственного разбиения.
23. Способ по любому из пп. 1-7, причем структура пространственного разбиения делит картинку на гибкие вырезки с использованием по меньшей мере одной из вертикальных разделительных линий и горизонтальных разделительных линий.
24. Способ по любому из пп. 1-7, причем структура пространственного разбиения делит картинку на гибкие вырезки с использованием по меньшей мере одного из разбиения квадродерева, разбиения посредине, гибкого разбиения и целочисленного разделения.
25. Способ по любому из пп. 1-7, причем для конкретной гибкой вырезки структуры пространственного разбиения, информация указывает одно или более из следующего:
следует ли разбивать гибкую вырезку с использованием по меньшей мере одного из разбиения квадродерева, разбиения посредине, гибкого разбиения и целочисленного разделения;
конкретный способ разбиения для конкретной гибкой вырезки;
сколько раз должен использоваться конкретный способ разбиения; и
в каком направлении следует разбивать конкретную гибкую вырезку.
26. Способ по любому из пп. 1-7, причем структура пространственного разбиения разделяет гибкие вырезки структуры пространственного разбиения путем компоновки углов гибкой вырезки на сетке, причем начальный угол и конечный угол на сетке определены для каждой гибкой вырезки.
27. Способ по любому из пп. 1-7, причем информация содержит:
последовательность или матрицу указателей начальных углов, которые указывают начало гибкой вырезки в структуре пространственного разбиения на сетке;
последовательность или матрицу указателей конечных углов, которые указывают конец гибкой вырезки в структуре пространственного разбиения на сетке; или
и то, и другое.
28. Способ (20) кодирования картинки, причем способ содержит:
определение (22) структуры пространственного разбиения, которая разделяет картинку на гибкие вырезки, причем каждая гибкая вырезка содержит по меньшей мере одну единицу, и причем край первой гибкой вырезки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных гибких вырезок;
кодирование (28) множества гибких вырезок в соответствии со структурой пространственного разбиения для генерации множества кодированных гибких вырезок, причем каждая кодированная гибкая вырезка соответствует одной из гибких вырезок структуры пространственного разбиения и является независимой, так что выведение режима интра-предсказания для первой единицы (U1) первой гибкой вырезки зависит от выведенного режима интра-предсказания для второй единицы (U2) первой гибкой вырезки и не зависит от режима интра-предсказания для единиц любой другой гибкой вырезки структуры пространственного разбиения;
генерирование битового потока (12), содержащего множество кодированных гибких вырезок и информацию, указывающую структуру пространственного разбиения, используемую для разделения картинки на множество гибких вырезок; и
передачу (29) битового потока.
29. Способ по п. 28, причем каждая кодированная гибкая вырезка является независимой, так что выведение значения параметра квантования для первой единицы зависит от значения параметра квантования для второй единицы и не зависит от значения параметра квантования для единиц других гибких вырезок структуры пространственного разбиения.
30. Способ по любому из пп. 28, 29, причем генерирование битового потока дополнительно содержит генерирование (26) указания в битовом потоке, что кодер использует гибкое разбиение.
31. Способ по любому из пп. 28, 29, дополнительно содержащий определение (72) размера для единицы в структуре пространственного разбиения, причем единица определяет область картинки.
32. Способ по любому из пп. 28, 29, причем каждая единица структуры пространственного разбиения представляет собой единицу дерева кодирования (CTU).
33. Способ по любому из пп. 28, 29, причем гибкие вырезки содержат гибкие тайлы.
34. Способ по любому из пп. 28, 29, причем каждая единица структуры пространственного разбиения соответствует различным одним из прямоугольных или квадратных областей картинки.
35. Способ по любому из пп. 28, 29, причем каждая единица структуры пространственного разбиения представляет собой область картинки, и информация содержит один размер для всех единиц структуры пространственного разбиения.
36. Способ по любому из пп. 28, 29, причем информация содержит высоту, ширину или то и другое первой гибкой вырезки структуры пространственного разбиения.
37. Способ по любому из пп. 28, 29, причем информация содержит целое число, специфицирующее высоту или ширину относительно размера единицы структуры пространственного разбиения.
38. Способ по любому из пп. 28, 29, причем информация содержит указание, что вторая гибкая вырезка структуры пространственного разбиения отличается по высоте, ширине или тому и другому по сравнению с первой гибкой вырезкой.
39. Способ по п. 38, причем указание представляет собой флаг или режим.
40. Способ по п. 38, причем отсутствие указания указывает, что гибкая вырезка структуры пространственного разбиения является такой же, что и другая гибкая вырезка в отношении по меньшей мере одного из высоты или ширины первой гибкой вырезки.
41. Способ по любому из пп. 28, 29, причем информация указывает, что декодер, принимающий кодированные гибкие вырезки, должен копировать атрибуты касательно размера гибкой вырезки структуры пространственного разбиения из соседней гибкой вырезки структуры пространственного разбиения.
42. Способ по п. 41, причем информация указывает конкретную соседнюю гибкую вырезку на основе положения конкретной соседней гибкой вырезки в структуре пространственного разбиения.
43. Способ по любому из пп. 28, 29, причем информация содержит идентификаторы гибких вырезок, причем каждый идентификатор гибкой вырезки указывает одну из гибких вырезок для единицы структуры пространственного разбиения.
44. Способ по любому из пп. 28, 29, причем каждая единица структуры пространственного разбиения представляет собой область картинки, и причем информация указывает один размер для всех единиц структуры пространственного разбиения.
45. Способ по любому из пп. 28, 29, причем информация содержит независимый идентификатор единицы, указывающий, что единица представляет собой единственную единицу в гибкой вырезке.
46 Способ по любому из пп. 28, 29, причем каждая единица структуры пространственного разбиения представляет собой область картинки, и информация содержит единый размер для всех единиц структуры пространственного разбиения.
47. Способ по любому из пп. 28, 29, причем структура пространственного разбиения делит картинку на гибкие вырезки с использованием по меньшей мере одной из вертикальных разделительных линий и горизонтальных разделительных линий.
48. Способ по любому из пп. 28, 29, причем структура пространственного разбиения делит картинку на гибкие вырезки с использованием по меньшей мере одного из разбиения квадродерева, разбиения посредине, гибкого разбиения и целочисленного разделения.
49. Способ по любому из пп. 28, 29, причем для конкретной гибкой вырезки структуры пространственного разбиения, информация указывает одно или более из следующего:
следует ли разбивать гибкую вырезку с использованием по меньшей мере одного из разбиения квадродерева, разбиения посредине, гибкого разбиения и целочисленного разделения;
конкретный способ разбиения для конкретной гибкой вырезки;
сколько раз должен использоваться конкретный способ разбиения; и
в каком направлении следует разбивать конкретную гибкую вырезку.
50. Способ по любому из пп. 28, 29, причем структура пространственного разбиения разделяет гибкие вырезки структуры пространственного разбиения путем компоновки углов гибкой вырезки на сетке, причем начальный угол и конечный угол на сетке определены для каждой гибкой вырезки.
51. Способ по любому из пп. 28, 29, причем информация содержит:
последовательность или матрицу указателей начальных углов, которые указывают начало гибкой вырезки в структуре пространственного разбиения на сетке;
последовательность или матрицу указателей конечных углов, которые указывают конец гибкой вырезки в структуре пространственного разбиения на сетке; или
и то, и другое.
52. Декодер (450) для декодирования картинки, содержащий:
схему (535, 545) приема, сконфигурированную, чтобы принимать (32) битовый поток (12), содержащий множество кодированных гибких вырезок и информацию из набора параметров, ассоциированную с множеством кодированных гибких вырезок;
память (540), содержащую исполняемые инструкции; и
схему (510) обработки, операционно соединенную со схемой приема и памятью и сконфигурированную, чтобы исполнять исполняемые инструкции, чтобы:
выводить (34), из информации в битовом потоке, структуру пространственного разбиения, которая разделяет картинку на гибкие вырезки, причем каждая гибкая вырезка соответствует одной из множества кодированных гибких вырезок, и каждая гибкая вырезка содержит по меньшей мере одну единицу, и причем край первой гибкой вырезки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных гибких вырезок; и
декодировать (38) множество кодированных гибких вырезок, принятых в битовом потоке в соответствии со структурой пространственного разбиения, причем выведение какого-либо режима интра-предсказания для первой единицы (U1) первой гибкой вырезки зависит от выведенного режима интра-предсказания для второй единицы (U2) первой гибкой вырезки и не зависит от какого-либо режима интра-предсказания для единиц любых других гибких вырезок структуры пространственного разбиения.
53. Декодер по п. 52, причем схема обработки дополнительно сконфигурирована, чтобы реализовывать способ по любому из пп. 1-7.
54. Декодер по любому из пп. 52, 53, причем декодер содержится в дисплее (880) для отображения декодированных гибких вырезок.
55. Считываемый компьютером носитель (540) хранения, в котором хранятся исполняемые инструкции, которые, при исполнении схемой (510) обработки в декодере (450), побуждают декодер выполнять способ по любому из пп. 1-7.
56. Кодер (400) для кодирования картинки, содержащий:
память (515), содержащую исполняемые инструкции (520);
схему обработки (500), сконфигурированную, чтобы исполнять инструкции, чтобы:
определять (32) структуру пространственного разбиения, которая разделяет картинку на гибкие вырезки, причем каждая гибкая вырезка содержит по меньшей мере одну единицу, и причем правый край первой гибкой вырезки структуры пространственного разбиения граничит с соответствующими краями двух или более смежных гибких вырезок;
кодировать (28) множество гибких вырезок в соответствии со структурой пространственного разбиения для генерации множества кодированных гибких вырезок, причем каждая кодированная гибкая вырезка соответствует одной из гибких вырезок структуры пространственного разбиения и является независимой, так что выведение режима интра-предсказания для первой единицы (U1) первой гибкой вырезки зависит от выведенного режима интра-предсказания для второй единицы (U2) первой гибкой вырезки и не зависит от режима интра-предсказания для единиц любой другой гибкой вырезки структуры пространственного разбиения;
генерировать битовый поток (12), содержащий множество кодированных гибких вырезок и информацию, указывающую структуру пространственного разбиения, используемую для разделения картинки на множество гибких вырезок; и
передатчик (550), сконфигурированный, чтобы передавать битовый поток.
57. Кодер по п. 56, дополнительно сконфигурированный, чтобы реализовывать способ по любому из пп. 29-52.
59. Считываемый компьютером носитель (540) хранения, в котором хранятся исполняемые инструкции, которые, при исполнении схемой (500) обработки в кодере (400), побуждают кодер выполнять способ по любому из пп. 28-51.
Способ защиты переносных электрических установок от опасностей, связанных с заземлением одной из фаз | 1924 |
|
SU2014A1 |
Автомобиль-сани, движущиеся на полозьях посредством устанавливающихся по высоте колес с шинами | 1924 |
|
SU2017A1 |
Способ защиты переносных электрических установок от опасностей, связанных с заземлением одной из фаз | 1924 |
|
SU2014A1 |
CN 105744272 A, 06.07.2016 | |||
СПОСОБ КОДИРОВАНИЯ ВИДЕОСИГНАЛА ПУТЕМ ПРЕДСКАЗАНИЯ РАЗБИЕНИЯ ТЕКУЩЕГО БЛОКА, СПОСОБ ДЕКОДИРОВАНИЯ И СООТВЕТСТВУЮЩИЕ УСТРОЙСТВА И КОМПЬЮТЕРНЫЕ ПРОГРАММЫ КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ | 2013 |
|
RU2648571C2 |
Авторы
Даты
2021-11-30—Публикация
2019-06-20—Подача