ВНУТРЕННЕЕ ПРЕДСКАЗАНИЕ БЛОЧНОГО КОПИРОВАНИЯ С АСИММЕТРИЧНЫМИ РАЗДЕЛАМИ И СХЕМАМИ ПОИСКА НА СТОРОНЕ КОДЕРА, ДИАПАЗОНЫ ПОИСКА И ПОДХОДЫ К РАЗДЕЛЕНИЮ
INTRA BLOCK COPY PREDICTION WITH ASYMMETRIC PARTITIONS AND ENCODER-SIDE SEARCH PATTERNS, SEARCH RANGES AND APPROACHES TO PARTITIONING

УРОВЕНЬ ТЕХНИКИ
[001] Инженеры используют сжатие (также называемое кодированием источника или декодированием источника), чтобы уменьшить скорость передачи битов цифрового видео. Сжатие уменьшает стоимость хранения и передачи видеоинформации посредством преобразования информации в форму более низкой скорости передачи битов. Распаковка (также называемое декодированием) восстанавливает версию исходной информации из сжатой формы. «Кодек» представляет собой систему кодера/декодера.
[002] За последние два десятилетия были приняты различные стандарты видеокодека, включая стандарты ITU-T H.261, H.262 (MPEG-2 или ISO/IEC 13818-2), H.263 и H.264 (MPEG-4 AVC или ISO/IEC 14496-10), стандарты MPEG-1 (ISO/IEC 11172-2) и MPEG-4 Visual (ISO/IEC 14496-2), и стандарт SMPTE 421M (VC-1). Совсем недавно был одобрен стандарт H.265/HEVC (ITU-T H.265 или ISO/IEC 23008-2). Расширения к стандарту H.265/HEVC (например, для масштабируемого кодирования/декодирования видео, для кодирования/декодирования видео с более высокой точностью с точки зрения битовой глубины или частоты дискретизации сигнала цветности выборки, для контента захвата экрана или для мультивидового кодирования/декодирования) в настоящее время находятся в стадии разработки. Стандарт видеокодека, как правило, определяет опции для синтаксиса кодированного битового видеопотока, детализируя параметры в битовом потоке, когда конкретные функции используются в кодировании и декодировании. Во многих случаях стандарт видеокодека также содержит подробную информацию об операциях декодирования, которые должен выполнить декодер, чтобы достичь соответствующих результатов в декодировании. Помимо стандартов кодека, различные собственные форматы кодека определяют другие опции для синтаксиса кодированного битового видеопотока и соответствующие операции декодирования.
[003] Внутреннее блочное копирование («BC») представляет собой режим предсказания на стадии разработки расширений HEVC. Для режима внутреннего предсказания BC, выборочные значения текущего блока изображения предсказываются с использованием ранее восстановленных выборочных значений в том же самом изображении. Вектор блока («BV») указывает смещение от текущего блока в область изображения, которая включает в себя ранее восстановленные выборочные значения, используемые для предсказания. BV передается в битовом потоке. Внутреннее предсказание BC представляет собой форму предсказания внутри изображения – внутреннее предсказание BC для блока изображения не использует каких-либо выборочных значений, отличных от выборочных значений в том же изображении.
[004] Как в настоящее время определено в стандарте HEVC и реализовано в некоторых справочных программах для стандарта HEVC, режим внутреннего предсказания BC имеет ряд проблем. В частности, опции для размеров блоков для внутреннего предсказания BC слишком ограничены во многих сценариях, и решения на стороне кодера о размерах блока и о том, как использовать внутриблочное предсказание, не выполняются эффективно во многих сценариях.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[005] Таким образом, подробное описание представляет инновации во внутреннем предсказании блочного копирования («BC»), а также инновации в схемах поиска на стороне кодера, диапазонах поиска и подходах к разделению. Например, некоторые из инноваций относятся к использованию асимметричных разделов (иногда называемых «AMP») для внутреннего предсказания BC. Другие инновации относятся к схемам поиска или подходам, которые кодер использует во время оценки вектора блока («BV») (для внутреннего предсказания BC) или оценки движения. Дополнительные другие инновации относятся к использованию диапазонов поиска BV, которые имеют горизонтальное или вертикальное отклонение во время оценки BV.
[006] В соответствии с первым аспектом инноваций, описанных в материалах настоящей заявки, кодер изображения или видео кодирует изображение или видео для получения кодированных данных, и выводит кодированные данные как часть битового потока. Как часть кодирования, кодер выполняет внутреннее предсказание BC для текущего блока, который асимметрично разделен для внутреннего предсказания BC. Например, текущий блок представляет собой блок 2N×2N, и текущий блок разделен на (1) блок 2N×N/2 и блок 2N×3N/2 или (2) блок 2N×3N/2 и блок 2N×N/2. Или, в качестве другого примера, текущий блок представляет собой блок 2N×2N, и текущий блок разделен на (1) блок N/2×2N и блок 3N/2×2N или (2) блок 3N/2×2N и блок N/2×2N. В более общем смысле, для асимметричного разделения текущий блок может быть расщеплен на два раздела, которые имеют различные размеры. Как часть кодирования, кодер может также выполнять внутреннее предсказание BC для другого блока, который симметрично разделен для внутреннего предсказания BC. Например, другой блок представляет собой блок 2N×2N, который разделен на (1) два блока 2N×N, (2) два блока N×2N, или (3) четыре блока N×N, каждый из которых может быть дополнительно разделен на два блока N×N/2, два блока N/2×N или четыре блока N/2×N/2. В более общем смысле, для симметричного разделения другой блок может быть расщеплен на два раздела, которые имеют идентичные размеры.
[007] В соответствии со вторым аспектом инноваций, описанных в материалах настоящей заявки, декодер изображения или видео принимает кодированные данные как часть битового потока и декодирует кодированные данные, чтобы восстановить изображение или видео. Как часть декодирования, декодер выполняет внутреннее предсказание BC для текущего блока, который асимметрично разделен для внутреннего предсказания BC. Например, текущий блок представляет собой блок 2N×2N, и текущий блок разделен на (1) блок 2N×N/2 и блок 2N×3N/2 или (2) блок 2N×3N/2 и блок 2N×N/2. Или, в качестве другого примера, текущий блок представляет собой блок 2N×2N, и текущий блок разделен на (1) блок N/2×2N и блок 3N/2×2N или (2) блок 3N/2×2N и блок N/2×2N. В более общем смысле, для асимметричного разделения текущий блок может быть расщеплен на два раздела, которые имеют различные размеры. Как часть декодирования, кодер может также выполнять внутреннее предсказание BC для другого блока, который симметрично разделен для внутреннего предсказания BC. Например, другой блок представляет собой блок 2N×2N, который разделен на (1) два блока 2N×N, (2) два блока N×2N, или (3) четыре блока N×N, каждый из которых может быть дополнительно разделен на два блока N×N/2, два блока N/2×N или четыре блока N/2×N/2. В более общем смысле, для симметричного разделения другой блок может быть расщеплен на два раздела, которые имеют идентичные размеры.
[008] В соответствии с третьим аспектом инноваций, описанных в материалах настоящей заявки, кодер изображения или видео кодирует изображение или видео для получения кодированных данных, и выводит кодированные данные как часть битового потока. Как часть кодирования, декодер вычисляет предсказание для текущего блока (например, блок предсказания единицы предсказания) текущего изображения. Предсказание может быть для оценки движения или оценки BV для внутреннего предсказания BC. В любом случае, вычисление предсказания использует подход снизу вверх для идентификации разделов текущего блока. В целом, разделы для текущего блока включают в себя два или более разделов, которые имеют различные размеры. Например, текущий блок представляет собой блок 2N×2N, и подход снизу вверх состоит в том, что: (a) проверяют режимы для каждого блока N×N из блока 2N×2N; (b) выбирают лучшие режимы для соответствующих блоков N×N; (c) кэшируют значения вектора для соответствующих блоков N×N; (d) проверяют режимы с 2N-размером для блока 2N×2N, в том числе используют кэшированные значения вектора; (e) выбирают лучший режим с 2N-размером для блока 2N×2N; и (f) выбирают между лучшим режимом с 2N-размером для блока 2N×2N и выбранными лучшими режимами для соответствующих блоков N×N блока 2N×2N. Или, в качестве другого примера, текущий блок представляет собой блок 2N×2N, и подход снизу вверх состоит в том, что: (a) проверяют подмножество режимов для каждого блока N×N из блока 2N×2N; (b) кэшируют значения вектора для соответствующих блоков N×N; (c) проверяют подмножество режимов с 2N-размером для блока 2N×2N, в том числе используют кэшированные значения вектора; (d) выбирают лучший режим с 2N-размером для блока 2N×2N; и (e) выбирают между лучшим режимом с 2N-размером для блока 2N×2N и лучшими режимами для соответствующих блоков N×N.
[009] В соответствии с четвертым аспектом инноваций, описанных в материалах настоящей заявки, кодер изображения или видео кодирует изображение или видео для получения кодированных данных, и выводит кодированные данные как часть битового потока. Как часть кодирования, кодер вычисляет предсказание для текущего блока текущего изображения. Предсказание может быть для оценки движения или оценки BV для внутреннего предсказания BC. В любом случае, вычисление предсказания состоит в том, что (a) идентифицируют текущее лучшее местоположение для предсказания с помощью итеративной оценки в малой окрестности (например, местоположениях, которые расположены в непосредственной близости горизонтально или вертикально к текущему лучшему местоположению) вокруг текущего лучшего местоположения; и (b) подтверждают текущее лучшее местоположение с помощью итеративной оценки в последовательно более крупных окрестностях (например, местоположениях в кольцах снаружи от малой окрестности) вокруг текущего лучшего местоположения. Например, если текущее лучшее местоположение хуже, чем местоположение в одной из более крупных окрестностей, кодер заменяет текущее лучшее местоположение и повторяет идентификацию и подтверждение. Стадия подтверждения может остановиться, если достигнуто пороговое значение итераций оценки в последовательно более крупных окрестностях.
[010] В соответствии с пятым аспектом инноваций, описанных в материалах настоящей заявки, кодер изображения или видео определяет BV для текущего блока изображения, выполняет внутреннее предсказание BC для текущего блока с использованием BV и кодирует BV. BV указывает на смещение в область внутри изображения. При определении BV, кодер проверяет ограничение, что область находится внутри диапазона поиска BV, имеющего горизонтальное отклонение или вертикальное отклонение. Кодер может выбрать диапазон поиска BV из нескольких доступных диапазонов поиска BV, например, в зависимости от, по меньшей мере частично, значений BV одного или более предыдущих блоков, которые могут быть отслежены в гистограммной структуре данных.
[011] В соответствии с шестым аспектом инноваций, описанных в материалах настоящей заявки, кодер изображения или видеокодирует данные для изображения с использованием внутреннего предсказания BC и выводит кодированные данные как часть битового потока. Как часть кодирования, кодер выполняет операции оценки BV с использованием диапазона поиска BV с горизонтальным или вертикальным отклонением. Кодер может выбрать диапазон поиска BV из нескольких доступных диапазонов поиска BV, например, в зависимости от, по меньшей мере частично, значений BV одного или более предыдущих блоков, которые могут быть отслежены в гистограммной структуре данных.
[012] Инновации могут быть реализованы как часть способа, как часть вычислительного устройства, выполненного с возможностью выполнения способа, или как часть материального машинного читаемого носителя, хранящего машинно-исполняемые инструкции, приводящие к тому, что вычислительное устройство выполняет способ. Различные инновации могут быть использованы в комбинации или раздельно.
[013] Вышеизложенные и другие цели, отличительные признаки и преимущества изобретения станут очевиднее из последующего подробного описания, которое выполнено со ссылкой на прилагаемые фигуры.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[014] Фигура 1 представляет собой схему примерной вычислительной системы, в которой некоторые из описанных вариантов осуществления могут быть реализованы.
[015] Фигуры 2a и 2b представляют собой схемы примерных сетевых сред, в которых некоторые из описанных вариантов осуществления могут быть реализованы.
[016] Фигура 3 представляет собой схему примерной системы кодирования, в сочетании с которой некоторые из описанных вариантов осуществления могут быть реализованы.
[017] Фигура 4 представляет собой схему примерной системы декодирования, в сочетании с которой некоторые из описанных вариантов осуществления могут быть реализованы.
[018] Фигуры 5a и 5b представляет собой схемы, иллюстрирующие примерный видеокодер, в сочетании с которым некоторые из описанных вариантов осуществления могут быть реализованы.
[019] Фигура 6 представляет собой схему, иллюстрирующую примерный видеодекодер, в сочетании с которым некоторые из описанных вариантов осуществления могут быть реализованы.
[020] Фигуры 7 и 8 представляют собой схемы, иллюстрирующие внутреннее предсказание BC для блока изображения и блоки-кандидаты для блока в согласовании блоков.
[021] Фигура 9 представляет собой схему, иллюстрирующую примерные размеры блока для внутреннего предсказания BC, включая некоторые асимметричные разделы и некоторые симметричные разделы.
[022] Фигуры 10 и 11 представляют собой обобщенные методы для кодирования и декодирования, соответственно, которые включают в себя внутреннее предсказание BC с асимметричными разделами.
[023] Фигура 12 представляет собой схему, иллюстрирующую оценку движения для блока изображения.
[024] Фигура 13 представляет собой блок-схему и прилагаемую схему, иллюстрирующую подход сверху вниз к разделению предсказанного с помощью внутреннего предсказания BC блока.
[025] Фигура 14 представляет собой блок-схему, иллюстрирующую обобщенный метод для использования подхода снизу вверх к разделению.
[026] Фигура 15 представляет собой блок-схему и прилагаемую схему, иллюстрирующую подход снизу вверх к разделению предсказанного с помощью внутреннего предсказания BC блока.
[027] Фигура 16 представляет собой блок-схему и прилагаемую схему, иллюстрирующую еще более быстрые подходы снизу вверх к разделению предсказанного с помощью внутреннего предсказания BC блока.
[028] Фигура 17 представляет собой блок-схему, иллюстрирующую обобщенный метод для поиска значения BV или значения MV для блока с использованием итеративной оценки местоположения в малой окрестности(ях) и итеративного подтверждения местоположения в более крупной окрестности(ях).
[029] Фигуры 18a и 18b представляют собой схемы, иллюстрирующие итеративную оценку местоположения в малой окрестности при поиске значения BV или значения MV для блока.
[030] Фигура 19 представляет собой схему, иллюстрирующую итеративное подтверждение местоположения в одной или нескольких более крупных окрестностях при поиске значения BV или значения MV для блока.
[031] Фигура 20 представляет собой блок-схему, иллюстрирующую примерный метод для поиска значения BV или значения MV для блока с использованием итеративной оценки местоположения в малой окрестности(ях) и итеративного подтверждения местоположения в более крупной окрестности(ях).
[032] Фигуры 21a-21e представляют собой схемы, иллюстрирующие примерные ограничения на диапазон поиска для значений BV.
[033] Фигура 22 представляет собой блок-схему, иллюстрирующую обобщенный метод для кодирования с режимом внутреннего предсказания BC, при условии соблюдения одного или более ограничений на выбор значений BV.
[034] Фигура 23 представляет собой схему, иллюстрирующую примерный порядок z-сканирования для блоков изображения.
ПОДРОБНОЕ ОПИСАНИЕ
[035] Подробное описание представляет инновации во внутреннем предсказании блочного копирования («BC»), а также инновации в схемах поиска на стороне кодера, диапазонах поиска и подходах к разделению. Например, некоторые из инноваций относятся к использованию асимметричных разделов (иногда называемых «AMP») для внутреннего предсказания BC во время кодирования и/или декодирования. Другие инновации относятся к схемам поиска или подходам, которые кодер использует во время оценки вектора блока («BV») (для внутреннего предсказания BC) или оценки движения. Дополнительные другие инновации относятся к использованию диапазонов поиска BV, которые имеют горизонтальное или вертикальное отклонение во время оценки BV.
[036] Хотя операции, описанные в материалах настоящей заявки, находятся на местах, описанных как выполняемые видеокодером или видеодекодером, во многих случаях операции могут быть выполнены другим типом инструмента обработки медиа (например, кодером изображения или декодером изображения).
[037] Некоторые из инноваций, описанных в материалах настоящей заявки, проиллюстрированы со ссылкой на синтаксические элементы и операции, характерные для стандарта H.265/HEVC. Например, дана ссылка на проект версии JCTVC-P1005 стандарта H.265/HEVC – «Текстовая Спецификация Расширений Диапазона Высокоэффективного Кодирования Видео (HEVC): Проект 6», JCTVC-P1005_v1, Февраль 2014. Инновации, описанные в материалах настоящей заявки, также могут быть реализованы для других стандартов или форматов.
[038] Многие из инноваций, описанных в материалах настоящей заявки, могут улучшить производительность соотношения скорость-искажение при кодировании определенного «искусственно созданного» видеоконтента, такого как контент захвата экрана. В целом, видео захвата экрана (также называемое видео контента экрана) представляет собой видео, которое содержит визуализированный текст, компьютерную графику, сгенерированный анимацией контент или другие подобные типы контента, захваченного при визуализации на компьютерный дисплей, в отличие от захваченного только камерой видеоконтента. Контент захвата экрана, как правило, включает в себя повторяющиеся структуры (например, графику, текстовые символы). Контент захвата экрана обычно закодирован в формате (например, YUV 4:4:4 или RGB 4:4:4) с высоким разрешением выборки насыщенности цвета, хотя от также может быть закодирован в формате с более низким разрешением выборки насыщенности цвета (например, YUV 4:2:0). Общие сценарии для кодирования/декодирования контента захвата экрана включают в себя конференц-связь удаленного рабочего стола и кодирование/декодирование графических наложений на естественное видео или другое видео «смешанного контента». Несколько из инноваций, описанных в материалах настоящей заявки, приспособлены для кодирования видео содержимого экрана или другого искусственно-созданного видео. Эти инновации могут также быть использованы для естественного видео, но могут не быть столь же эффективными. Другие инновации, описанные в материалах настоящей заявки, эффективны в кодировании естественного видео или искусственно-созданного видео.
[039] В более общем смысле, возможны различные альтернативы примерам, описанным в материалах настоящей заявки. Например, некоторые из способов, описанных в материалах настоящей заявки, могут быть изменены путем изменения порядка описанных действий способа, путем разделения, повторения или пропуска определенных действий способа, и т. д. Различные аспекты раскрытой технологии могут быть использованы в комбинации или отдельно. Различные варианты осуществления используют одну или более из описанных инноваций. Некоторые из инноваций, описанных в материалах настоящей заявки, решают одну или более из проблем, отмеченных на заднем плане. Как правило, данный метод/инструмент не решает все такие проблемы.
I. ПРИМЕРНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ
[040] Фигура 1 иллюстрирует обобщенный пример подходящей вычислительной системы (100), в которой несколько из описанных инноваций могут быть реализованы. Вычислительная система (100) не предназначена для предложения какого-либо ограничения объема использования или функциональности, поскольку инновации могут быть реализованы в различных вычислительных системах общего назначения или специального назначения.
[041] Как показано на Фигуре 1, вычислительная система (100) включает в себя один или более обрабатывающих блоков (110, 115) и память (120, 125). Обрабатывающие блоки (110, 115) выполняют машинно-исполняемые инструкции. Обрабатывающий блок может быть центральным процессором («CPU») общего назначения, процессором в специализированной интегральной схеме («ASIC») или любым другим типом процессора. В многопроцессорной системе несколько обрабатывающих блоков выполняют машинно-исполняемые инструкции, чтобы повысить вычислительную мощность. Например, Фигура 1 показывает центральный процессор (110), а также графический процессор или сопроцессор (115). Материальная память (120, 125) может представлять собой энергозависимую память (например, регистры, кэш, ОЗУ (оперативное запоминающее устройство)), энергонезависимую память (например, ПЗУ (постоянное запоминающее устройство), ЭСППЗУ (электрически стираемое программируемое постоянное запоминающее устройство), флэш-память, и т.д.) или какую-либо комбинацию из двух, к которой имеет доступ обрабатывающий блок(и). Память (120, 125) хранит программное обеспечение (180), реализующее одну или более инновации для внутреннего предсказания BC с асимметричными разделами и/иди одну или более инновации для схем поиска на стороне кодера, диапазоны поиска, имеющие горизонтальное или вертикальное отклонение и/или подходы к разделению, в форме машинно-исполняемых инструкций, подходящих для выполнения обрабатывающим блоком(ами).
[042] Вычислительная система может иметь дополнительные отличительные признаки. Например, вычислительная система (100) включает в себя запоминающее устройство (140), одно или более устройств (150) ввода, одно или более устройств (160) вывода, и одно или более соединений (170) связи. Механизм взаимного соединения (не показан), такой как шина, контроллер или сеть, осуществляет взаимное соединение компонентов вычислительной системы (100). Как правило, программное обеспечение операционной системы (не показано) предоставляет рабочую среду для другого программного обеспечения, исполняемого в вычислительной системе (100), и координирует деятельность компонентов вычислительной системы (100).
[043] Материальное запоминающее устройство (140) может быть съемным или несъемным и включает в себя магнитные диски, магнитные ленты или кассеты, CD-ROM (ПЗУ на компакт диске), DVD (универсальный цифровой диск) или любой другой носитель, который может быть использован для хранения информации и к которому может быть осуществлен доступ в вычислительной системе (100). Запоминающее устройство (140) хранит инструкции для программного обеспечения (180), реализующего одну или более инноваций для внутреннего предсказания BC с асимметричными разделами и/или одну или более инноваций для схем поиска на стороне кодера, поисковых диапазонов и/или подходов к разделению.
[044] Устройство(а) (150) ввода может представлять собой устройство сенсорного ввода, такое как клавиатура, мышь, перо или шаровой манипулятор, устройство голосового ввода, устройство сканирования или другое устройство, которое обеспечивает ввод в вычислительную систему (100). Для видео, устройство(а) (150) ввода может представлять собой камеру, видеокарту, карту ТВ тюнера, модуль захвата экрана или подобное устройство, которое принимает входной видеосигнал в аналоговой или цифровой форме, или CD-ROM или CD-RW, который считывает входной видеосигнал в вычислительную систему (100). Устройство(а) (160) вывода может представлять собой дисплей, принтер, динамик, устройство для записи CD или другое устройство, которое обеспечивает вывод из вычислительной системы (100).
[045] Соединение(я) (170) связи дают возможность обмена данными через среду передачи данных с другой вычислительной сущностью. Среда передачи данных транспортирует информацию, такую как машинно-исполняемые инструкции, входной или выходной аудио- или видеосигнал или другие данные, в модулированном информационном сигнале. Модулированный информационный сигнал представляет собой сигнал, который обладает одной или более характеристиками, устанавливаемыми или изменяемыми таким образом, чтобы закодировать информацию в сигнале. В качестве примера, а не ограничения, среда передачи данных может использовать электрическую, оптическую, радиочастотную (RF) или другую несущую.
[046] Инновации могут быть описаны в общем контексте машинно-читаемых носителей. Машинно-читаемые носители представляют собой любые доступные материальные носители, к которым может быть осуществлен доступ в вычислительной среде. В качестве примера, а не ограничения, в вычислительной системе (100) машинно-читаемые носители включают в себя память (120, 125), запоминающее устройство (140), и комбинации любых из вышеприведенных.
[047] Инновации могут быть описаны в общем контексте машинно-исполняемых инструкций, таких как те, которые включены в программные модули, исполняемые в вычислительной системе на целевом реальном или виртуальном процессоре. Как правило, программные модули включают в себя процедуры, программы, библиотеки, объекты, классы, компоненты, структуры данных и т.д., которые выполняют конкретные задачи или реализуют конкретные абстрактные типы данных. Функциональные возможности программных модулей могут быть скомбинированы или разделены между программными модулями, как требуется в различных вариантах осуществления. Машинно-исполняемые инструкции для программных модулей могут быть исполнены в локальной или распределенной вычислительной системе.
[048] Термины «система» и «устройство» используются взаимозаменяемо в материалах настоящей заявки. Если из контекста явно не следует иное, никакой из терминов не подразумевает какого-либо ограничения на тип вычислительной системы или вычислительного устройства. В целом, вычислительная система или вычислительное устройство могут быть локальными или распределенными, и могут включать в себя любую комбинацию аппаратных средств специального назначения и/или аппаратных средств общего назначения с программным обеспечением, реализующим функциональность, описанную в материалах настоящей заявки.
[049] Раскрытые способы также могут быть реализованы с использованием специализированных вычислительных аппаратных средств, выполненных с возможностью выполнения любого из раскрытых способов. Например, раскрытые способы могут быть реализованы посредством интегральной схемы (например, ASIC (такой как цифровой сигнальный процессор («DSP») ASIC, графический процессор («GPU»), или программируемое логическое устройство («PLD»), такое как программируемая вентильная матрица («FPGA»)), специально спроектированной или выполненной с возможностью реализации любого из раскрытых способов.
[050] В целях представления подробное описание использует термины, такие как «определять», «использовать», чтобы описывать машинные операции в вычислительной системе. Эти термины являются высокоуровневыми абстракциями для операций, выполняемых компьютером, и не должны быть перепутаны с действиями, выполняемыми человеком. Фактические машинные операции, соответствующие этим терминам, различаются в зависимости от реализации. Как используется в материалах настоящей заявки для описания варианта кодирования, термин «лучший» (как в «лучшем местоположении», «лучшем режиме» для разделения или «лучшей комбинации») указывает предпочтительный вариант кодирования по сравнению с другими вариантами кодирования, по отношению к предполагаемой эффективности кодирования или фактической эффективности кодирования, в терминах стоимости искажения, стоимости битовой скорости или некоторой комбинации стоимости искажения и стоимости битовой скорости. Любая доступная метрика искажения может использоваться для стоимости искажения. Любая доступная метрика битовой скорости может использоваться для стоимости битовой скорости. Другие факторы (такие как алгоритмическая сложность кодирования, алгоритмическая сложность декодирования, использование ресурсов и/или задержка) могут также оказывать влияние на решение о том, какой вариант кодирования является «лучшим».
II. ПРИМЕРНЫЕ СЕТЕВЫЕ СРЕДЫ
[051] Фигуры 2a и 2b показывают примерные сетевые среды (201, 202), которые включают в себя видеокодеры (220) и видеодекодеры (270). Кодеры (220) и декодеры (270) соединены через сеть (250) с использованием соответствующего протокола связи. Сеть (250) может включать в себя Интернет или другую компьютерную сеть.
[052] В сетевой среде (201), показанной на Фигуре 2a, каждый инструмент (210) связи в реальном времени («RTC») включает в себя как кодер (220), так и декодер (270) для двунаправленной связи. Данный кодер (220) может производить выходной сигнал, совместимый с разновидностью или расширением стандарта H.265/HEVC, стандартом SMPTE 421M, стандартом ISO/IEC 14496-10 (также известным как H.264 или AVC), другим стандартом или собственным форматом, с соответствующим декодером (270), принимающим закодированные данные от кодера (220). Двунаправленная связь может быть частью видеоконференции, видеозвонка или другого сценария связи с двумя участниками или несколькими участниками. Хотя сетевая среда (201) на Фигуре 2a включает в себя два инструмента (210) связи реального времени, сетевая среда (201) может вместо этого включать в себя три или более инструментов (210) связи реального времени, который принимают участие в связи с несколькими участниками.
[053] Инструмент (210) связи реального времени управляет кодированием посредством кодера (220). Фигура 3 показывает примерную систему (300) кодирования, которая может быть включена в инструмент (210) связи реального времени. Альтернативно, инструмент (210) связи реального времени использует другую систему кодирования. Инструмент (210) связи реального времени также управляет декодированием посредством декодера (270). Фигура 4 показывает примерную систему (400) декодирования, которая может быть включена в инструмент (210) связи реального времени. Альтернативно, инструмент (210) связи реального времени использует другую систему декодирования.
[054] В сетевой среде (202), показанной на Фигуре 2b, инструмент (212) кодирования включает в себя кодер (220), который кодирует видео для доставки нескольким инструментам (214) воспроизведения, которые включают в себя декодеры (270). Однонаправленная связь может быть предоставлена для системы видеонаблюдения, системы наблюдения через веб-камеру, модуля захвата экрана, презентации конференц-связи удаленного рабочего стола или другого сценария, в котором видео закодировано и отправлено из одного местоположения в одно или более другие местоположения. Хотя сетевая среда (202) на Фигуре 2b включает в себя два инструмента (214) воспроизведения, сетевая среда (202) может включать в себя больше или меньше инструментов (214) воспроизведения. Как правило, инструмент (214) воспроизведения обменивается данными с инструментом (212) кодирования, чтобы определить поток видео, который должен принять инструмент (214) воспроизведения. Инструмент (214) воспроизведения принимает поток, буферизует принятые закодированные данные в течение соответствующего периода и начинает декодирование и воспроизведение.
[055] Фигура 3 показывает примерную систему (300) кодирования, которая может быть включена в инструмент (212) кодирования. Альтернативно, инструмент (212) кодирования времени использует другую систему кодирования. Инструмент (212) кодирования может также включать в себя логику управления на стороне сервера для управления соединениями с одним или более инструментами (214) воспроизведения. Фигура 4 показывает примерную систему (400) декодирования, которая может быть включена в инструмент (214) воспроизведения. Альтернативно, инструмент (214) воспроизведения использует другую систему декодирования. Инструмент (214) кодирования может также включать в себя логику управления на стороне клиента для управления соединениями с инструментом (212) кодирования.
III. ПРИМЕРНЫЕ СИСТЕМЫ КОДИРОВАНИЯ
[056] Фигура 3 представляет собой структурную схему примерной системы кодирования (300), в сочетании с которой некоторые из описанных вариантов осуществления могут быть реализованы. Система (300) кодирования может быть инструментом кодирования общего назначения, выполненным с возможностью работы в любом из нескольких режимов кодирования, таких как режим кодирования с малой задержкой для связи в реальном времени, режим транскодирования и режим кодирования с более высокой задержкой для создания медиа для воспроизведения из файла или потока, или она может быть инструментом кодирования специального назначения, приспособленного для одного такого режима кодирования. Система (300) кодирования может быть приспособлена для кодирования определенного типа контента (например, контента захвата экрана). Система (300) кодирования может быть реализована как модуль операционной системы, как часть библиотеки приложения или как отдельное приложение. В целом, система (300) кодирования принимает последовательность исходных видеокадров (311) из источника (310) видеосигнала и создает кодированные данные в качестве выходных данных в канал (390). Закодированные выходные данные в канал могут включать в себя контент, закодированный с использованием внутреннего режима предсказания BC.
[057] Источник (310) видеосигнала может быть камерой, картой тюнера, носителями данных, модулем захвата экрана или другим цифровым источником видеосигнала. Источник (310) видеосигнала формирует последовательность видеокадров с частотой кадров, например, 30 кадров в секунду. Используемый в материалах настоящей заявки термин «кадр», как правило, относится к источнику, закодированным или восстановленным данным изображения. Для видео с прогрессивной разверткой кадр представляет собой видеокадр с прогрессивной разверткой. Для получения видео с чересстрочной разверткой, в примерных вариантах осуществления чересстрочный видеокадр может быть расперемежен перед кодированием. Альтернативно, два дополняющих видеополя с чересстрочной разверткой кодируются вместе как один видеокадр или кодируются как два отдельно закодированных поля. Помимо указания на видеокадр с прогрессивной разверткой или видеокадр с чересстрочной разверткой, термин «кадр» или «изображение» может указывать на одно непарное видеополе, дополняющую пару видеополей, плоскость видеообъекта, которая представляет видеообъект в заданное время, или область интереса в более крупном изображении. Плоскость видеообъекта или область могут быть частью более крупного изображения, которое включает в себя несколько объектов или областей сцены.
[058] Прибывающий исходный кадр (311) хранится во временной области (320) памяти исходных кадров, которая включает в себя несколько областей (321, 322, …, 32n) памяти кадрового буфера. Кадровый буфер (321, 322, и т.д.) хранит один исходный кадр в области (320) памяти исходных кадров. После того как один или более из исходных кадров (311) был сохранен в кадровых буферах (321, 322, и т.д.), селектор (330) кадра выбирает отдельный исходный кадр из области (320) памяти исходных кадров. Порядок, в котором кадры выбираются селектором (330) кадра для ввода в кодер (340), может отличаться от порядка, в котором кадры формируются источником (310) видео, например, кодирование некоторых кадров может быть отложено в порядке, чтобы позволить некоторым более поздним кадрам быть закодированными первыми и чтобы таким образом облегчить временно обратное предсказание. Перед кодером (340), система (300) кодирования может включать в себя препроцессор (не показан), который выполняет предварительную обработку (например, фильтрацию) выбранного кадра (331) перед кодированием. Предварительная обработка может включать в себя преобразование цветового пространства в первичные (например, яркость) и вторичные (например, различия в насыщенности цвета в сторону красного и синего) компоненты и обработку передискретизации (например, чтобы уменьшить пространственное разрешение компонентов насыщенности цвета) для кодирования. Как правило, перед кодированием видео преобразуется в цветовое пространство, такое как YUV, в котором выборочные значения компонента яркости (Y) представляют значения яркости или интенсивности, а выборочные значения компонентов насыщенности цвета (U, V) представляют значения цветового различия. Точные определения значений цветового различия (и операций преобразования в/из цветового пространства YUV в другое цветовое пространство, такое как RGB) зависят от реализации. Как правило, в материалах настоящей заявки термин YUV указывает на любое цветовое пространство с компонентом яркости (или светимости) и одним или более компонентами насыщенности цвета (или цветности), включая Y’UV, YIQ, Y’IQ и YDbDr, а также такие вариации как YCbCr и YCoCg. Выборочные значения насыщенности цвета могут быть субдискретизированы в более низкую частоту дискретизации насыщенности цвета (например, для формата YUV 4:2:0), или выборочные значения насыщенности цвета могут иметь такое же разрешение, что и выборочные значения яркости (например, для формата YUV 4:4:4). Или, видео может быть закодировано в другой формат (например, формат RGB 4:4:4, формат GBR 4:4:4 или формат BGR 4:4:4).
[059] Кодер (340) кодирует выбранный кадр (331), чтобы сформировать закодированный кадр (341), и также формирует сигналы (342) управления памятью («MMCO») или информацию о наборе эталонных изображений («RPS»). RPS представляет собой набор кадров, которые могут использоваться в качестве опорных в компенсации движения для текущего кадра или любого последующего кадра. Если текущий кадр не является первым кадром, который был закодирован, при выполнении процесса его кодирования кодер (340) может использовать один или более ранее закодированные/декодированные кадры (369), которые были сохранены во временной области (360) памяти декодированных кадров. Такие сохраненные декодированные кадры (369) используются в качестве опорных кадров для межкадрового предсказания содержимого текущего исходного кадра (331). Информация (342) MMCO/RPS указывает на декодер, чьи восстановленные кадры могут быть использованы в качестве опорных кадров, и, следовательно, должны быть сохранены в области памяти кадров.
[060] Как правило, кодер (340) включает в себя несколько модулей кодирования, которые выполняют задачи кодирования, такие как разделение на элементы мозаичного изображения, оценка внутреннего предсказания и предсказание, оценка и компенсация движения, частотные преобразования, квантование и энтропийное кодирование. Точные операции, выполняемые кодером (340), могут изменяться в зависимости от формата сжатия. Формат выходных закодированных данных может быть вариацией или расширением формата H.265/HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2, или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264), или другого формата.
[061] Кодер (340) может разделять кадр на несколько элементов мозаичного изображения одного и того же размера или различных размеров. Например, кодер (340) разделяет кадр вдоль строк элементов мозаичного изображения и столбцов элементов мозаичного изображения, которые, вместе с границами кадра, определяют горизонтальные и вертикальные границы элементов мозаичного изображения в кадре, где каждый элемент мозаичного изображения представляет собой прямоугольную область. Элементы мозаичного изображения часто используются для обеспечения возможности параллельной обработки. Кадр также может быть организован в виде одного или более фрагментов, где фрагмент может быть целым кадром или областью кадра. Фрагмент может быть декодирован независимо от других фрагментов в кадре, что повышает устойчивость к ошибкам. Содержимое фрагмента или элемента мозаичного изображения дополнительно разделяется на блоки или другие наборы выборочных значений в целях кодирования и декодирования.
[062] Для синтаксиса в соответствии со стандартом H.265/HEVC, кодер разделяет содержимое кадра (или фрагмента или элемента мозаичного изображения) на единицы дерева кодирования. Единица дерева кодирования («CTU») включает в себя выборочные значения яркости, организованные как блок дерева кодирования яркости («CTB»), и соответствующие выборочные значения насыщенности цвета, организованные как два CTB насыщенности цвета. Размер CTU (и его CTB) выбирается кодером. CTB яркости может содержать, например, 64×64, 32×32 или 16×16 выборочных значений яркости. CTU включает в себя одну или более единиц кодирования. Единица кодирования («CU») имеет блок кодирования яркости («CB») и два соответствующих CB насыщенности цвета. Например, CTU с 64×64 CTB яркости и двумя 64×64 CTB насыщенности цвета (формат YUV 4:4:4) может быть разделен на четыре CU, при этом каждый CU включает в себя 32×32 CB яркости и два 32×32 CB насыщенности цвета, и каждый CU, вероятно, разделяется дополнительно на более мелкие CU. Или, в качестве другого пример, CTU с 64×64 CTB яркости и двумя 32×32 CTB насыщенности цвета (формат YUV 4:2:0) может быть разделен на четыре CU, при этом каждый CU включает в себя 32×32 CB яркости и два 16×16 CB насыщенности цвета, и каждый CU, вероятно, разделяется дополнительно на более мелкие CU. Самый маленький допустимый размер CU (например, 8×8, 16×16) может быть передан в сигнале в битовом потоке.
[063] Как правило, CU имеет решим предсказания, такой как внутренний или внешний. CU включает в себя одну или более единиц предсказания в целях передачи сигналов информации предсказания (такой как подробности режима предсказания, значения смещения, и т.д) и/или обработки предсказания. Единица предсказания («PU») имеет блок предсказания яркости («PB») и два PB насыщенности цвета. В соответствии со стандартом H.265/HEVC, для CU внутреннего предсказания, PU имеет такой же размер, что и CU, если только CU не имеет наименьший размер (например, 8×8). В этом случае, CU может быть разделен на четыре более мелких PU (например, каждый 4×4, если наименьший размер CU составляет 8×8, для внутреннего предсказания) или PU может иметь наименьший размер CU, как указано синтаксическим элементом для CU. Для асимметричных разделов, используемых во внутреннем предсказании BC, однако, CU может быть разделена на несколько PU, как показано на Фигуре 9. В этом случае более крупная CU (например, 64×64, 32×32 или 16×16) или CU наименьшего размера (например, 8×8) может быть разделена на несколько PU.
[064] CU также имеет одну или более единиц предсказания в целях остаточного кодирования/декодирования, где единица преобразования («TU») имеет блок преобразования яркости («TB») и два TB насыщенности цвета. PU в CU внутреннего предсказания может содержать одну TU (равного размера с PU) или несколько TU. Кодер решает, как разделять видео на CTU, CU, PU, TU, и т.д.
[065] В реализациях H.265/HEVC фрагмент может включать в себя один сегмент фрагмента (независимый сегмент фрагмента) или может быть разделен на несколько сегментов фрагмента (независимый сегмент фрагмента и один или более зависимых сегментов фрагмента). Сегмент фрагмента представляет собой целое число CTU, упорядоченных последовательно в развертку элементов мозаичного изображения, содержащихся в одной единице сетевого уровня абстракции («NAL»). Для независимого сегмента фрагмента, заголовок сегмента фрагмента включает в себя значения синтаксических элементов, которые применяются для независимого сегмента фрагмента. Для зависимого сегмента фрагмента, усеченный заголовок сегмента фрагмента включает в себя несколько значений синтаксических элементов, которые применяются для этого зависимого сегмента фрагмента, а значения других синтаксических элементов для зависимого сегмента фрагмента выводятся из значений для предшествующего независимого сегмента фрагмента в порядке декодирования.
[066] В материалах настоящей заявки термин «блок» может указывать на макроблок, единицу предсказания, остаточную единицу данных или CB, PB или TB или некоторый другой набор выборочных значений, в зависимости от контекста.
[067] Возвращаясь к Фигуре 3, кодер представляет блок внутреннего кодирования исходного кадра (331) в терминах предсказания из других, ранее восстановленных выборочных значений в кадре (331). Для внутреннего предсказания BC, устройство оценки внутри изображения оценивает смещения блока по отношению к другим, ранее восстановленным выборочным значениям. Опорная область внутрикадрового предсказания представляет собой область выборочных значений в кадре, которые используются, чтобы сгенерировать значения BC-предсказания для блока. Область внутрикадрового предсказания может быть указана с помощью значения вектора блока («BV») (определенного в оценке BV). Примерные подходы к принятию решений во время кодирования внутри изображения описаны ниже. В зависимости от реализации, кодер может выполнять оценку BV для блока с использованием входных выборочных значений или восстановленных выборочных значений (ранее закодированных выборочных значений в том же изображении). Для дополнительных деталей смотри описание оценки BV в секции V.
[068] Для внутреннего пространственного предсказания для блока, устройство оценки внутри изображения оценивает экстраполяцию соседних восстановленных выборочных значений в блок. Устройство оценки внутри изображения может выводить информацию предсказания (такую как значения BV для внутреннего предсказания BC, или режим (направление) предсказания для внутреннего пространственного предсказания), которая энтропийно закодирована. Предсказывающее устройство внутрикадрового предсказания применяет информацию предсказания, чтобы определить значения внутреннего предсказания.
[069] Кодер (340) представляет межкадрово закодированный, предсказанный блок исходного кадра (331) в терминах предсказания из опорных кадров. Устройство оценки движения оценивает движение блока по отношению к одному или более опорным кадрам (369). Когда используются несколько опорных кадров, несколько опорных кадров могут быть из различных временных направлений или одного и того же временного направления. Опорная область предсказания с компенсацией движения представляет собой область выборочных значений в опорном кадре(ах), которые используются, чтобы сгенерировать значения предсказания с компенсацией движения для блока выборочных значений текущего кадра. Устройство оценки движения выводит информацию движения, такую как информация вектора движения («MV»), которая энтропийно закодирована. Компенсатор движения применяет MV к опорным кадрам (369), чтобы определить значения предсказания с компенсацией движения для межкадрового предсказания. Примерные подходы к принятию решений во время кодирования между изображениями описаны ниже.
[070] Кодер может определить различия (если таковые есть) между значениями предсказания блока (внутреннего или внешнего) и соответствующие исходные значения. Эти остаточные значения предсказания дополнительно кодируются с использованием частотного преобразования (если частотное преобразование не пропускается), квантования и энтропийного кодирования. Например, кодер (340) устанавливает значения для параметра квантования («QP») для изображения, элемента мозаичного изображения, фрагмента и/или другой части видео, и квантует коэффициенты преобразования соответственно. Энтропийный кодировщик кодера (340) сжимает квантованные значения коэффициента преобразования, а также определенную дополнительную информацию (например, информацию MV, значения индекса для предсказывающих устройств BV, дифференциалы BV, значения QP, решения режима, выборы параметра). Типичные методы энтропийного кодирования включают в себя экспоненциальное кодирования Голомба, кодирование Голомба-Райса, арифметическое кодирование, дифференциальное кодирование, кодирование Хаффмана, кодирование длины серий, кодирование переменная-длина-к-переменной-длине («V2V»), кодирование переменная-длина-к-фиксированной-длине («V2F»), кодирование Лемпеля-Зива («LZ»), кодирование словаря, энтропийное кодирование разделения интервала вероятности («PIPE») и комбинации вышеупомянутого. Энтропийный кодировщик может использовать различные методы кодирования для различных видов информации, может применять различные методы в комбинации (например, путем применения кодирования Голобма-Райса, за которым следует арифметическое кодирование), и может выбирать из множества кодовых таблиц в определенном методе кодирования. В некоторых реализациях частотное преобразование может быть пропущено. В этом случае остаточные значения предсказания могут быть квантованы и энтропийно закодированы.
[071] Адаптивный деблокирующий фильтр включен в контур компенсации движения (т.е., «внутриконтурная» фильтрация) в кодере (340), чтобы сгладить разрывы через строки и/или столбцы границы блока в декодированном кадре. Другая фильтрация (такая как дереверберационная фильтрация, адаптивная контурная фильтрация («ALF») или фильтрация адаптивного к выборке смещения («SAO»); не показана) может быть альтернативно или дополнительно применена в качестве операций внутриконтурной фильтрации.
[072] Закодированные данные, сформированные кодером (340), включают в себя синтаксические элементы для различных уровней синтаксиса битового потока. Для синтаксиса в соответствии со стандартом H.265/HEVC, например, набор параметров изображения («PPS») представляет собой синтаксическую структуру, которая содержит синтаксические элементы, которые могут быть связаны с изображением. PPS может использоваться для одного изображения, или PPS может быть повторно использован для нескольких изображений в последовательности. PPS, как правило, передается в сигнале отдельно от закодированных данных для изображения (например, одна единица NAL для PPS, и одна или более других единиц NAL для закодированных данных для изображения). В закодированных данных для изображения синтаксический элемент указывает, какой PPS использовать для изображения. Подобным образом, для синтаксиса в соответствии со стандартом H.265/HEVC, набор параметров последовательности («SPS») представляет собой синтаксическую структуру, которая содержит синтаксические элементы, которые могут быть связаны с последовательностью изображений. Битовый поток может включать в себя один SPS или несколько SPS. SPS, как правило, передается в сигнале отдельно от других данных для последовательности, и синтаксический элемент в других данных указывает, какой SPS использовать.
[073] Закодированные кадры (341) и информация (342) MMCO/RPS (или информация, эквивалентная информации (342) MMCO/RPS), поскольку зависимости и структуры упорядочения для кадров уже известны в кодере (340)) обрабатываются эмулятором (350) процесса декодирования. Эмулятор (350) процесса декодирования реализует некоторую функциональность декодера, например, задачи декодирования для восстановления опорных кадров. Способом, совместимым с информацией (342) MMCO/RPS, эмулятор (350) процесса декодирования определяет, должен ли заданный закодированный кадр (341) быть восстановлен и сохранен для использования в качестве опорного кадра в межкадровом предсказании последующих кадров, которые должны быть закодированы. Если закодированный кадр (341) должен быть сохранен, эмулятор (350) процесса декодирования моделирует процесс декодирования, который был бы проведен декодером, который принимает закодированный кадр (341), и формирует соответствующий декодированный кадр (351). При этом, когда кодер (340) использовал декодированный кадр(ы) 369, которые были сохранены в области (360) хранения декодированных кадров, эмулятор (350) процесса декодирования также использует декодированный кадр(ы) (369) из области хранения (360) как часть процесса декодирования.
[074] Временная область (360) памяти декодированных кадров включает в себя несколько областей (361, 362, …, 36n) памяти кадрового буфера. Способом, совместимым с информацией (342) MMCO/RPS, эмулятор (350) процесса декодирования управляет содержимым области (360) памяти, чтобы идентифицировать любые кадровые буферы (361, 362, и т.д.) с кадрами, которые больше не нужны кодеру (340) для использования в качестве опорных кадров. После моделирования процесса декодирования, эмулятор (350) процесса декодирования сохраняет недавно декодированный кадр (351) в кадровый буфер (361, 362, и т.д.), который был идентифицирован таким способом.
[075] Закодированные кадры (341) и информация (342) MMCO/RPS буферизуются во временной области (370) закодированных данных. Закодированные данные, которые агрегированы в области (370) закодированных данных, содержат, как часть синтаксиса элементарного закодированного видеопотока данных, закодированные данные для одного или более изображений. Закодированные данные, которые агрегированы в области (370) закодированных данных, могут также включать в себя метаданные медиа, относящиеся к закодированным видеоданным (например, в качестве одного или более параметров в одном или более сообщениях дополнительной информации расширения («SEI») или сообщениях информации о простоте использования видео («VUI»)).
[076] Агрегированные данные (371) из временной области (370) закодированных данных обрабатываются канальным кодером (380). Канальный кодер (380) может пакетировать и/или мультиплексировать агрегированные данные для передачи или хранения в качестве потока медиа (например, в соответствии с форматом программного потока медиа или транспортного потока, таким как TU-T H.222.0|ISO/IEC 13818-1, или форматом транспортного протокола Интернета реального времени, таким как IETF RFC 3550), и в этом случае канальный кодер (380) может добавлять синтаксические элементы как часть синтаксиса потока передачи медиа. Или, канальный кодер (380) может организовать агрегированные данные для хранения в виде файла (например, в соответствии с форматом контейнера медиа, таким как ISO/IEC 14496-12), и в этом случае канальный кодер (380) может добавлять синтаксические элементы как часть синтаксиса файла хранения медиа. Или, в более общем смысле, канальный кодер (380) может реализовывать один или более протоколов мультиплексирования медиа-системы или транспортных протоколов, и в этом случае канальный кодер (380) может добавлять синтаксические элементы как часть синтаксиса протокола(ов). Канальный кодер (380) предоставляет выходные данные в канал (390), который представляет хранение, соединение связи или другой канал для выходных данных. Канальный кодер (380) или канал (390) могут также включать в себя другие элементы (не показаны), например, для кодирования с упреждающей коррекцией ошибок («FEC») и аналоговой модуляции сигнала.
IV. ПРИМЕРНЫЕ СИСТЕМЫ ДЕКОДИРОВАНИЯ
[077] Фигура 4 представляет собой структурную схему примерной системы декодирования (400), в сочетании с которой некоторые из описанных вариантов осуществления могут быть реализованы. Система (400) декодирования может быть инструментом декодирования общего назначения, выполненным с возможностью работы в любом из нескольких режимов декодирования, таких как режим декодирования с малой задержкой для связи в реальном времени и режим декодирования с более высокой задержкой для воспроизведения медиа из файла или потока, или она может быть инструментом декодирования специального назначения, приспособленного для одного такого режима декодирования. Система (400) декодирования может быть реализована как модуль операционной системы, как часть библиотеки приложения или как отдельное приложение. В целом, система (400) декодирования принимает закодированные данные из канала (410) и формирует восстановленные кадры в качестве выходных данных для места назначения (490) выходных данных.
[078] Система (400) декодирования включает в себя канал (410), который может представлять запоминающее устройство, соединение связи или другой канал для закодированных данных в качестве входных данных. Канал (410) формирует закодированные данные, которые были закодированы в канале. Канальный декодер (420) может обрабатывать закодированные данные. Например, канальный декодер (420) депакетирует и/или демультиплексирует данные, которые были агрегированы для передачи или хранения в качестве потока медиа (например, в соответствии с форматом программного потока медиа или транспортного потока, таким как TU-T H.222.0|ISO/IEC 13818-1, или форматом транспортного протокола Интернета реального времени, таким как IETF RFC 3550), и в этом случае канальный декодер (420) может разбирать синтаксические элементы, добавленные как часть синтаксиса потока передачи медиа. Или, канальный декодер (420) выделяет закодированные данные, которые были агрегированы для хранения в виде файла (например, в соответствии с форматом контейнера медиа, таким как ISO/IEC 14496-12), и в этом случае канальный декодер (420) может разбирать синтаксические элементы, добавленные как часть синтаксиса файла хранения медиа. Или, в более общем смысле, канальный декодер (420) может реализовывать один или более протоколов демультиплексирования медиа-системы или транспортных протоколов, и в этом случае канальный декодер (420) может анализировать синтаксические элементы, добавленные как часть синтаксиса протокола(ов). Канал (410) или канальный декодер (420) могут также включать в себя другие элементы (не показаны), например, для декодирования FEC и аналоговой демодуляции сигнала.
[079] Закодированные данные (421), которые выводятся из канального декодера (420), хранятся во временной области (430) закодированных данных до тех пор, пока достаточное количество таких данных не будет принято. Закодированные данные (421) включают в себя закодированные кадры (431) и информацию (432) MMCO/RPS. Закодированные данные (421) в области (430) закодированных данных содержат, как часть синтаксиса элементарного закодированного видеопотока данных, закодированные данные для одного или более изображений. Закодированные данные (421) в области (430) закодированных данных могут также включать в себя метаданные медиа, относящиеся к закодированным видеоданным (например, в качестве одного или более параметров в одном или более сообщениях SEI или сообщениях VUI).
[080] В целом, область (430) закодированных данных временно хранить закодированные данные (421) до тех пор, пока такие закодированные данные (421) не будут использоваться декодером (450). В этот момент, закодированные данные для закодированного кадра (431) и информация (432) MMCO/RPS передаются из области (430) закодированных данных в декодер (450). По мере того как декодирование продолжается, новые закодированные данные добавляются в область (430) закодированных данных, и самые старые закодированные данные, остающиеся в области (430) закодированных данных, передаются в декодер (450).
[081] Декодер (450) декодирует закодированный кадр (431), чтобы сформировать соответствующий декодированный кадр (451). В зависимости от обстоятельств, при выполнении своего процесса декодирования, декодер (450) может использовать один или более ранее декодированные кадры (469) как опорные кадры для межкадрового предсказания. Декодер (450) считывает такие ранее декодированные кадре (469) и временной области (460) памяти декодированных кадров. В целом, декодер (450) включает в себя несколько декодирующих модулей, которые выполняют задачи декодирования, такие как энтропийное кодирование, внутрикадровое предсказание, межкадровое предсказание с компенсацией движения, обратное квантование, обратные частотные преобразования (если не пропущены) и слияние элементов мозаичного изображение. Точные операции, выполняемые декодером (450), могут изменяться в зависимости от формата сжатия.
[082] Например, декодер (450) принимает закодированные данные для сжатого кадра или последовательности кадров и формирует выходные данные, включающие в себя декодированный кадр (451). В декодере (450) буфер принимает закодированные данные для сжатого кадра и, в соответствующее время, делает принятые закодированные данные доступными для энтропийного декодера. Энтропийный декодер энтропийно декодирует энтропийно закодированные квантованные данные, а также энтропийно закодированную дополнительную информацию, как правило, применяя инверсию энтропийного кодирования, выполненного в кодере. Компенсатор движения применяет информацию движения к одному или более опорным кадрам, чтобы сформировать значения предсказания с компенсацией движения для любых внешним образом закодированных блоков кадра, которые восстанавливаются. Модуль внутрикадрового предсказания может пространственно предсказать выборочные значения текущего блока из соседних, ранее восстановленных выборочных значений или, для внутреннего предсказания BC, предсказать выборочные значения текущего блока, используя ранее восстановленные выборочные значения области внутрикадрового предсказания в кадре. Область внутрикадрового предсказания может быть указана с помощью значения BV. Декодер (450) также восстанавливает остаточные значения предсказания. Обратный квантователь обратно квантует энтропийно декодированные данные. Например, декодер (450) устанавливает значения для QP для изображения, элемента мозаичного изображения, фрагмента и/или другой части видео на основе синтаксических элементов в битовом потоке, и обратно квантует коэффициенты преобразования соответственно. Обратный частотный преобразователь преобразует квантованные данные частотной области в данные пространственной области. В некоторых реализациях частотное преобразование может быть пропущено, и в этом случае обратное частотное преобразование также пропускается. Если это так, остаточные значения предсказания могут быть энтропийно декодированы и обратно квантованы. Для межкадрово предсказанного блока, декодер (450) объединяет восстановленные остаточные значения предсказания со значениями предсказания с компенсацией движения. Декодер (450) может подобным образом объединить остаточные значения предсказания со значениями предсказания из внутреннего предсказания. Адаптивный деблокирующий фильтр включен в контур компенсации движения в видеодекодере (450), чтобы сгладить разрывы через строки и/или столбцы границы блока в декодированном кадре (451). Другая фильтрация (такая как дереверберационная фильтрация, ALF или фильтрация SAO; не показана) может быть альтернативно или дополнительно применена в качестве операций внутриконтурной фильтрации.
[083] Временная область (460) памяти декодированных кадров включает в себя несколько областей (461, 462, …, 46n) памяти кадрового буфера. Область (460) хранения декодированных кадров представляет собой пример буфера декодированных изображений. Декодер (450) использует информацию (432) MMCO/RPS, чтобы идентифицировать кадровый буфер (461, 462, и т.д), в котором он может хранить декодированный кадр (451). Декодер (450) хранит декодированный кадр (451) в этом кадровом буфере.
[084] Выходной секвенсор (480) идентифицирует, когда следующий кадр, который должен быть сформирован в выходном порядке, становится доступным в области (460) памяти декодированных кадров. Когда следующий кадр (481), который должен быть сформирован в выходном порядке, становится доступным в области (460) хранения декодированных кадров, он считывается выходным секвенсором (480) и выводится в выходное место назначения (490) (например, дисплей). В целом, порядок, в котором кадры выводятся из области (460) памяти декодированных кадров посредством выходного секвенсора (480), может отличаться от порядка, в котором кадры декодируются декодером (450).
V. ПРИМЕРНЫЕ ВИДЕОКОДЕРЫ
[085] Фигуры 5a и 5b представляет собой структурные схемы обобщенного видеокодера (500), в сочетании с которым некоторые из описанных вариантов осуществления могут быть реализованы. Кодер (500) принимает последовательность видеоизображений, включая текущее изображение, в качестве входного видеосигнала (505) и формирует закодированные данные в закодированном битовом видеопотоке (595) в качестве выходных данных.
[086] Кодер (500) является основанным на блоках и использует блоковый формат, который зависит от реализации. Блоки могут быть дополнительно подразделены на различных этапах, например, на этапах предсказания, частотного преобразования и/или энтропийного кодирования. Например, изображение может быть разделено на блоки 64×64, блоки 32×32 или блоки 16×16, которые, в свою очередь, могут быть разделены на более мелкие блоки или выборочные значения для кодирования и декодирования. В реализациях кодирования для стандарта H.265/HEVC, кодер разделяет изображение на CTU (CTB), CU (CB), PU (PB) и TU (TB). Блоки (например, CU) могут быть асимметрично разделены на более мелкие блоки (например, PU) в целях внутреннего предсказания BC, как показано на Фигуре 9.
[087] Кодер (500) сжимает изображения, используя кодирование внутри изображения и/или кодирование между изображений. Многие из компонентов кодера (500) используются как для кодирования внутри изображения, так и для кодирования между изображений. Точные операции, выполняемые этими компонентами, могут варьироваться в зависимости от типа сжимаемой информации.
[088] Модуль (510) элементов мозаичного изображения опционально разделяет изображение на несколько элементов мозаичного изображения одного и того же размера или различных размеров. Например, модуль (510) элементов мозаичного изображения разделяет кадр вдоль строк элементов мозаичного изображения и столбцов элементов мозаичного изображения, которые, вместе с границами изображения, определяют горизонтальные и вертикальные границы элементов мозаичного изображения на изображении, где каждый элемент мозаичного изображения представляет собой прямоугольную область. В реализациях H.265/HEVC, кодер (500) разделяет изображение на один или более фрагментов, где каждый фрагмент включает в себя один или более сегментов фрагмента.
[089] Общее управление (520) кодированием принимает изображения для входного видеосигнала (505), а также обратную связь (не показана) от различных модулей кодера (500). В целом, общее управление (520) кодированием подает управляющие сигналы (не показаны) другим модулям (таким как модуль (510) элементов мозаичного изображения, преобразователь/преобразователь масштаба/квантователь (530), преобразователь масштаба/обратный преобразователь (535), устройство (540) оценки внутри изображения, устройство (550) оценки движения и внутренний/внешний переключатель), чтобы установить и изменить параметры кодирования в ходе кодирования. В частности, общее управление (520) кодированием может управлять решениями о разделении во время кодирования. В более общем плане, общее управление (520) кодированием может решать, использовать ли и как использовать внутреннее предсказание BC во время кодирования. Общее управление (520) кодированием может также оценивать промежуточные результаты во время кодирования, например, выполняя анализ соотношения скорость-искажение. Общее управление (520) кодированием формирует общие управляющие данные (522), которые указывают на решения, сделанные во время кодирования, так что соответствующий декодер может принимать согласованные решения. Общие управляющие данные (522) предоставляются устройству форматирования заголовка/энтропийному кодировщику (590).
[090] Если текущее изображение предсказано с использованием межкадрового предсказания, устройство (550) оценки движения оценивает движение блоков выборочных значений текущего изображения входного видеосигнала (505) по отношению к одному или более опорным изображениям. Буфер (570) декодированных изображений буферизует одно или более восстановленные ранее закодированные изображения для использования в качестве опорных изображений. При определении, как разделять блоки для оценки движения, устройство (550) оценки движения может применять подход сверху вниз или подход снизу вверх, как описано ниже. Устройство (550) оценки движения может использовать схему поиска, как описано ниже, или другую схему поиска. Когда используются несколько опорных изображений, несколько опорных изображений могут быть из различных временных направлений или одного и того же временного направления. Устройство (550) оценки движения формирует в качестве дополнительной информации данные (552) движения, такие как данные MV, индексные значения режима слияния и данные выбора опорного изображения. Данные (552) движения передаются в устройство форматирования заголовка/энтропийный кодировщик (590), а также в компенсатор (555) движения.
[091] Компенсатор (555) движения применяет MV к восстановленному опорному изображению(ям) из буфера (570) декодированных изображений. Компенсатор (555) движения формирует предсказания с компенсацией движения для текущего изображения.
[092] В отдельном пути в кодере (500) устройство (540) оценки внутри изображения определяет, как выполнять предсказание внутри изображения для блоков выборочных значений текущего изображения входного видеосигнала (505). Текущее изображение может быть целиком или частично закодировано с использованием кодирования внутри изображения. Используя значения восстановления (538) текущего изображения, для внутреннего пространственного предсказания устройство (540) оценки внутри изображения определяет, как пространственно предсказать выборочные значения текущего блока текущего изображения из соседних, ранее восстановленных выборочных значений текущего изображения.
[093] Или, для внутреннего предсказания BC с использованием значений BV, устройство (540) оценки внутри изображения оценивает смещение выборочных значений текущего блока к различным опорным областям-кандидатам в текущем изображении. При определении, как разделять блоки для оценки BV (и внутреннего предсказания BC), устройство (540) оценки внутри изображения может применять подход сверху вниз или подход снизу вверх, как описано ниже. Устройство (540) оценки внутри изображения может использовать схему поиска, как описано ниже, или другую схему поиска. Для внутреннего предсказания BC, устройство (540) оценки внутри изображения может ограничивать процесс выбора BV с использованием одного или более ограничений, описанных ниже.
[094] В зависимости от реализации, кодер может выполнять оценку BV для текущего блока с использованием входных выборочных значений, восстановленных выборочных значений до внутриконтурной фильтрации, или восстановленных выборочных значений после внутриконтурной фильтрации. В целом, путем использования входных выборочных значений или неотфильтрованных, восстановленных выборочных значений для оценки BV, кодер может избежать узкого места последовательной обработки (что может быть результатом фильтрации восстановленных выборочных значений опорной области перед оценкой BV/внутренним предсказанием BC). С другой стороны, хранение неотфильтрованных, восстановленных выборочных значений использует дополнительную память. Также, если внутриконтурная фильтрация применяется до оценки BV, может быть область влияния, которая перекрывается между процессом фильтрации, который будет применен после того как область текущего блока декодирована, и областью, которая используется для оценки BV/внутреннего предсказания BC. В таком случае, оценка BV/внутреннее предсказание BC было бы применено до того аспекта операции фильтрации. В некоторых реализациях, кодер может применять некоторые операции внутриконтурной фильтрации до оценки BV/внутреннего предсказания BC, и выполнять дополнительную или альтернативную фильтрацию на более позднем этапе обработки.
[095] Или, для режима кодирования словаря внутри изображения, пиксели блока кодируются с использованием предыдущих выборочных значений, хранимых в словаре или другом местоположении, где пиксель представляет собой набор совместно расположенных выборочных значений (например, триплет RGB или триплет YUV). Например, кодер (500) может вычислить хэш-значения ранее восстановленных выборочных значений (например, группировок из 1 пикселя, 2 пикселей, 4 пикселей, 8 пикселей и так далее) и сравнить эти хэш-значения с хэш-значением набора текущих кодируемых пикселей. Совпадения длины одного или более могут быть идентифицированы в ранее восстановленных выборочных значениях на основе хэш-сравнения. Текущий пиксель(и) (или выборочные значения) могут быть закодированы в различных режимах словаря 1D и 2D, используя сдвиг, который идентифицирует местоположение в предыдущем пикселе (например, в словаре), и длину, указывающую на число пикселей, предсказываемых из того сдвига. Как правило, никакого остатка не вычисляется для блока, закодированного в режиме кодирования словаря внутри изображения.
[096] Устройство (540) оценки внутри изображения формирует в качестве дополнительной информации данные (542) внутреннего предсказания, такие как информация, указывающая, использует ли внутреннее предсказание пространственное предсказание, внутреннее предсказание BC или режим словаря, направление режима предсказания (для внутреннего пространственного предсказания), значения BV (для внутреннего предсказания BC) и сдвиги и длины (для режима словаря). Данные (542) внутреннего предсказания передаются в устройство форматирования заголовка/энтропийный кодировщик (590), а также в устройство (545) предсказания внутри изображения.
[097] В соответствии с данными (542) внутреннего предсказания, предсказатель (545) внутри изображения пространственно предсказывает выборочные значения текущего блока текущего изображения из соседних, ранее восстановленных выборочных значений текущего изображения. Или, для внутреннего предсказания BC, предсказатель (545) внутри изображения предсказывает выборочные значения текущего блока, используя ранее восстановленные выборочные значения опорной области предсказания внутри изображения, которая указывается значением BV для текущего блока. В некоторых случаях, значение BV может быть предсказателем BV (предсказанным значением BV). В других случаях, значение BV может отличаться от его предсказанного значения BV, и в этом случае дифференциал BV показывает различие между предсказанным значением BV и значением BV. Или, для режима словаря внутри изображения, предсказатель (545) внутри изображения восстанавливает пиксели, используя сдвиги и длины.
[098] Внутренний/внешний переключатель выбирает, будет ли предсказатель (558) для заданного блока предсказанием с компенсацией движения или предсказанием внутри изображения.
[099] Для режима без словаря, когда остаточное кодирования не пропускается, разница (если она есть) между блоком предсказания (558) и соответствующей частью исходного текущего изображения входного видеосигнала (505) предоставляет значения остатка (518). Во время восстановления текущего изображения, когда остаточные значения были закодированы/переданы, восстановленные остаточные значения объединяются с предсказанием (558), чтобы сформировать примерное или точное восстановление (538) исходного контента из видеосигнала (505). (В сжатии с потерями некоторая информация теряется из видеосигнала (505).)
[0100] В преобразователе/преобразователе масштаба/квантователе (530), для режимов без словаря, когда частотное преобразование не пропускается, частотные преобразователь преобразует видеоинформацию пространственной области в данные частотной области (например, спектральное преобразование). Для основанного на блоках кодирования видео, частотный преобразователь применяет дискретное косинусное преобразование («DCT»), его целочисленное приближение, или другой тип прямого блочного преобразования (например, дискретное синусное преобразование или его целочисленное приближение) к блокам предсказания остаточных данных (или данным выборочных значений, если предсказание (558) равно нулю), формируя блоки коэффициентов частотного преобразования. Преобразователь/преобразователь масштаба/квантователь (530) может применять преобразование с переменными размерами блоков. В этом случае, преобразователь/преобразователь масштаба/квантователь (530) может определить, какие размеры блоков преобразований использовать для остаточных значений для текущего блока. Преобразователь масштаба/квантователь масштабирует и квантует коэффициенты преобразования. Например, квантователь применяет скалярное квантование мертвой зоны к данным частотной области с размером шага квантования, который изменятся на основе картинки-к-картинке, основе элемента мозаичного изображения-к-элементу мозаичного изображения, на основе фрагмента-к-фрагменту, на основе блока-к-блоку, на характерной для частоты основе или другой основе. Данные (532) квантованных коэффициентов преобразования предоставляются устройству форматирования заголовка/энтропийному кодировщику (590). Если частотное преобразование пропущено, преобразователь масштаба/квантователь могут масштабировать и квантовать блоки остаточных данных предсказания (или данных выборочных значений, если предсказание (558) равно нулю), формируя квантованные значения, которые предоставляются устройству форматирования заголовка/энтропийному кодировщику (590).
[0101] В преобразователе масштаба/обратном преобразователе (535), для режимов без словаря, преобразователь масштаба/обратный преобразователь выполняет обратное масштабирование и обратное квантование квантованных коэффициентов преобразования. Когда этап преобразования не был пропущен, обратный частотный преобразователь выполняет обратное частотное преобразование, формируя блоки восстановленных остаточных значений предсказания или выборочных значений. Если этап преобразования был пропущен, обратное частотное преобразование также пропускается. В этом случае, преобразователь масштаба/обратный квантователь могут выполнять обратное масштабирование и обратное квантование блоков остаточных данных предсказания (или данных выборочных значений), формируя восстановленные данные. Когда остаточные значения были закодированы/переданы, кодер (500) объединяет восстановленные остаточные значения со значениями предсказания (558) (например, значениями предсказания с компенсацией движения, значениями предсказания внутри изображения), чтобы сформировать восстановление (538). Когда остаточные значения не были закодированы/переданы, кодер (500) использует значения предсказания (558) в качестве восстановления (538).
[0102] Для предсказания внутри изображения, значения восстановления (538) могут быть поданы обратно в устройство (540) оценки внутри изображения и предсказатель (545) внутри изображения. Значения восстановления (538) могут использоваться для предсказания с компенсацией движения последующих изображений. Значения восстановления (538) могут быть дополнительно отфильтрованы. Управление (560) фильтрацией определяет, как выполнять деблокирующую фильтрацию и фильтрацию SAO значений восстановления (538), для заданного изображения видеосигнала (505). Управление (560) фильтрацией формирует управляющие данные (562) фильтрации, которые предоставляются устройству форматирования заголовка/энтропийному кодировщику (590) и устройству слиянию/фильтру(ам) (565).
[0103] В устройстве слияния/фильтре(ах) (565) кодер (500) осуществляет слияние контента из различных элементов мозаичного изображения в восстановленную версию изображения. Кодер (500) выборочно осуществляет деблокирующую фильтрацию и фильтрацию SAO в соответствии с управляющими данными (562) фильтрации, с тем чтобы адаптивно сгладить разрывы через границы в изображениях. Другая фильтрация (такая как дереверберационная фильтрация или ALF; не показана) может быть альтернативно или дополнительно применена. Границы могут быть выборочно отфильтрованы или совсем не отфильтрованы, в зависимости от настроек кодера (500), и кодер (500) может предоставить синтаксис в закодированном битовом потоке, чтобы указать, была или нет такая фильтрация применена. Буфер (570) декодированных изображений буферизует восстановленное текущее изображение для использования в последующем предсказании с компенсацией движения.
[0104] Устройство форматирования заголовка/энтропийный кодировщик (590) форматирует и/или энтропийно кодирует общие управляющие данные (522), данные (532) квантованных коэффициентов преобразования, данные (542) внутреннего предсказания, данные (552) движения и управляющие данные (562) фильтрации. Для данных (552) движения, устройство форматирования заголовка/энтропийный кодировщик (590) может выбрать и энтропийно закодировать значения индекса режима слияния, или может быть использован предсказатель MV по умолчанию. В некоторых случаях, устройство форматирования заголовка/энтропийный кодировщик (590) также определяет дифференциалы MV для значений MV (по отношению к предсказателям MV для значений MV), затем энтропийно кодирует дифференциалы MV, например, используя контекстно-адаптивное двоичное арифметическое кодирование. Для данных (542) внутреннего предсказания, значение BV может быть закодировано с использованием предсказания BV. Предсказание BV может использовать предсказатель BV по умолчанию (например, из одного или более соседних блоков). Когда возможны несколько предсказателей BV, индекс предсказателя BV может указывать, какой из нескольких предсказателей BV использовать для предсказания BV. Устройство форматирования заголовка/энтропийный кодировщик (590) может выбирать и энтропийно кодировать значения индекса предсказателя BV (для внутреннего предсказания BC), или может быть использовать предсказатель BV по умолчанию. В некоторых случаях, устройство форматирования заголовка/энтропийный кодировщик (590) также определяет дифференциалы BV для значений BV (по отношению к предсказателям BV для значений BV), затем энтропийно кодирует дифференциалы BV, например, используя контекстно-адаптивное двоичное арифметическое кодирование.
[0105] Устройство форматирования заголовка/энтропийный кодировщик (590) предоставляет закодированные данные в закодированные битовый видеопоток (595). Формат закодированного битового видеопотока (595) может быть вариацией или расширением формата H.265/HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2, или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264), или другого формата.
[0106] В зависимости от реализации и желаемого типа сжатия, модули кодера (500) могут быть добавлены, опущены, разделены на несколько модулей, объединены с другими модулями, и/или заменены подобными модулями. В альтернативных вариантах осуществления, кодеры с различными модулями и/или другими конфигурациями модулей выполняют один или более из описанных методов. Конкретные варианты кодеров, как правило, используют разновидность или дополненную версию кодера (500). Взаимосвязи, показанные между модулями в кодере (500), указывают на общие потоки информации в кодере; другие взаимосвязи не показаны для простоты.
VI. ПРИМЕРНЫЕ ВИДЕОДЕКОДЕРЫ
[0107] Фигура 6 представляет собой структурную схему обобщенного декодера (600), в сочетании с которым некоторые из описанных вариантов осуществления могут быть реализованы. Декодер (600) принимает закодированные данные в закодированном битовом видеопотоке (605) и формирует выходной сигнал, включая изображения для восстановленного видео (695). Формат закодированного битового видеопотока (605) может быть вариацией или расширением формата HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2, или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264), или другого формата.
[0108] Декодер (600) является основанным на блоках и использует блоковый формат, который зависит от реализации. Блоки могут быть дополнительно подразделены на различных этапах. Например, изображение может быть разделено на блоки 64×64, блоки 32×32 или блоки 16×16, которые, в свою очередь, могут быть разделены на более мелкие блоки или выборочные значения. В реализациях кодирования для стандарта HEVC, изображение разделяется на CTU (CTB), CU (CB), PU (PB) и TU (TB). Блоки (например, CU) могут быть асимметрично разделены на более мелкие блоки (например, PU) в целях внутреннего предсказания BC, как показано на Фигуре 9.
[0109] Декодер (600) распаковывает изображения, используя кодирование внутри изображения и/или кодирование между изображений. Многие из компонентов декодера (600) используются как для кодирования внутри изображения, так и для кодирования между изображений. Точные операции, выполняемые этими компонентами, могут варьироваться в зависимости от типа распаковываемой информации.
[0110] Буфер принимает закодированные данные в закодированном битовом видеопотоке (605) и делает принятые закодированные данные доступными синтаксическому анализатору/энтропийному декодеру (610). Синтаксический анализатор/энтропийный декодер (610) энтропийно декодирует энтропийно закодированные данные, как правило, применяя инверсию энтропийного кодирования, выполняемого в кодере (500) (например, контекстно-адаптивное двоичное арифметическое декодирование). В результате синтаксического анализа и энтропийного декодирования, синтаксический анализатор/энтропийный декодер (610) формирует общие управляющие данные (622), данные (632) квантованных коэффициентов преобразования, данные (642) внутреннего предсказания, данные (652) движения и управляющие данные (662) фильтрации. Для данных (642) внутреннего предсказания, если переданы значения индекса предсказателя BV, синтаксический анализатор/энтропийный декодер (610) может энтропийно декодировать значения индекса предсказателя BV, например, используя контекстно-адаптивное двоичное арифметическое декодирование). В некоторых случаях, синтаксический анализатор/энтропийный декодер (610) также энтропийно декодирует дифференциалы BV для значений BV (например, используя контекстно-адаптивное двоичное арифметическое декодирование), затем объединяет дифференциалы BV с соответствующими предсказателями BV, чтобы восстановить значения BV. В других случаях, дифференциал BV опускается из битового потока, и значение BV представляет собой просто предсказатель BV (например, указанный вместе со значением индекса предсказателя BV).
[0111] Общее управление (620) декодированием принимает общие управляющие данные (622) и предоставляет управляющие сигналы (не показаны) другим модулям (таким как преобразователь масштаба/обратный преобразователь (635), предсказатель (645) внутри изображения, компенсатор (655) движения и внутренний/внешний переключатель), чтобы установить и изменить параметры декодирования во время декодирования.
[0112] Если текущее изображение предсказано с использованием предсказания между изображениями, компенсатор (655) движения принимает данные (652) движения, такие как данные MV, данные выбора опорного изображения и значения индекса режима слияния. Компенсатор (655) движения применяет MV к восстановленному опорному изображению(ям) из буфера (670) декодированных изображений. Компенсатор (655) движения формирует предсказания с компенсацией движения для внешним образом закодированных блоков текущего изображения. Буфер (670) декодированных изображений хранит одно или более ранее восстановленные изображения для использования в качестве опорных изображений.
[0113] В отдельном пути внутри декодера (600), предсказатель (645) предсказания внутри изображения принимает данные (642) внутреннего предсказания, такие как информация, указывающая, использует ли внутреннее предсказание пространственное предсказание, внутреннее предсказание BC или режим словаря, и направление режима предсказания (для внутреннего пространственного предсказания), значения BV (для внутреннего предсказания BC) или сдвиги и длины (для режима словаря). Для внутреннего пространственного предсказания, использование значений восстановления (638) текущего изображения, в соответствии с данными режима предсказания, предсказатель (645) внутри изображения пространственно предсказывает выборочные значения текущего блока текущего изображения из соседних, ранее восстановленных выборочных значений текущего изображения. Или, для внутреннего предсказания BC с использованием значений BV, предсказатель (645) внутри изображения предсказывает выборочные значения текущего блока, используя ранее восстановленные выборочные значения области предсказания внутри кадра, которая указывается значением BV для текущего блока. Или, для режима словаря внутри изображения, предсказатель (645) внутри изображения восстанавливает пиксели, используя сдвиги и длины.
[0114] Внутренний/внешний переключатель выбирает значения предсказания с компенсацией движения или предсказания внутри изображения для использования в качестве предсказания (658) для заданного блока. Например, когда следуют синтаксису HEVC, внутренний/внешний переключатель может управляться на основе синтаксического элемента, закодированного для CU изображения, которое может содержать внутренним образом предсказанные CU и внешним образом предсказанные CU. Когда остаточные значения были закодированы/переданы, декодер (600) объединяет предсказание (658) с восстановленными остаточными значениями, чтобы сформировать восстановление (638) контента из видеосигнала. Когда остаточные значения не были закодированы/переданы, декодер (600) использует значения предсказания (658) в качестве восстановления (638).
[0115] Чтобы восстановить остаток, когда остаточные значения были закодированы/переданы, преобразователь масштаба/обратный преобразователь (635) принимает и обрабатывает данные (632) квантованных коэффициентов преобразования. В преобразователе масштаба/обратном преобразователе (635), преобразователь масштаба/обратный преобразователь выполняет обратное масштабирование и обратное квантование квантованных коэффициентов преобразования. Обратный частотный преобразователь выполняет обратное частотное преобразование, формируя блоки восстановленных остаточных значений предсказания или выборочных значений. Например, обратный частотный преобразователь применяет обратное блочное преобразование к коэффициентам частотного преобразования, формируя данные выборочных значений или остаточные данные предсказания. Обратное частотное преобразование может быть обратным DCT, его целочисленным приближением, или другим типом обратного частотного преобразования (например, обратное дискретное синусное преобразование или его целочисленное приближение). Если частотное преобразование было пропущено во время кодирования, обратное частотное преобразование также пропускается. В этом случае, преобразователь масштаба/обратный квантователь могут выполнять обратное масштабирование и обратное квантование блоков остаточных данных предсказания (или данных выборочных значений), формируя восстановленные данные.
[0116] Для предсказания внутри изображения, значения восстановления (638) могут быть поданы обратно в предсказатель (645) внутри изображения. Для предсказания между изображениями, значения восстановления (638) могут быть дополнительно отфильтрованы. В устройстве слияния/фильтре(ах) (665) декодер (600) осуществляет слияние контента из различных элементов мозаичного изображения в восстановленную версию изображения. Декодер (600) выборочно осуществляет деблокирующую фильтрацию и фильтрацию SAO в соответствии с управляющими данными (662) фильтрации и правилами для адаптации фильтра, с тем чтобы адаптивно сгладить разрывы через границы в кадрах. Другая фильтрация (такая как дереверберационная фильтрация или ALF; не показана) может быть альтернативно или дополнительно применена. Границы могут быть выборочно отфильтрованы или совсем не отфильтрованы, в зависимости от настроек декодера (600) или указания синтаксиса в закодированных данных битового потока. Буфер (670) декодированных изображений буферизует восстановленное текущее изображение для использования в последующем предсказании с компенсацией движения.
[0117] Декодер (600) может также включать в себя фильтр последующей обработки. Фильтр (608) последующей обработки может включать в себя деблокирующую фильтрацию, дереверберационную фильтрацию, адаптивную фильтрацию Винера, фильтрацию воспроизведения зерна фотопленки, фильтрацию SAO или другой вид фильтрации. Тогда как «внутриконтурная» фильтрация выполняется на восстановленных выборочных значениях кадров в контуре компенсации движения, и, следовательно, оказывает влияние на выборочные значения опорных кадров, фильтр (608) последующей обработки применяется к восстановленным выборочным значениям за пределами контура компенсации движения, до вывода для дисплея.
[0118] В зависимости от реализации и желаемого типа распаковки, модули декодера (600) могут быть добавлены, опущены, разделены на несколько модулей, объединены с другими модулями, и/или заменены подобными модулями. В альтернативных вариантах осуществления, декодеры с различными модулями и/или другими конфигурациями модулей выполняют один или более из описанных методов. Конкретные варианты декодеров, как правило, используют разновидность или дополненную версию декодера (600). Взаимосвязи, показанные между модулями в декодере (600), указывают на общие потоки информации в декодере; другие взаимосвязи не показаны для простоты.
VII. ВНУТРЕННЕЕ ПРЕДСКАЗАНИЕ БЛОЧНОГО КОПИРОВАНИЯ С АСИММЕТРИЧНЫМИ РАЗДЕЛАМИ
[0119] В этом разделе представлены примеры асимметричных разделов для предсказанных посредством внутреннего BC блоков. Использование асимметричных разделов может позволить кодеру адаптировать разделы к строго определенным, но нерегулярным схемам изображений внутри блоков, которые являются общими в тексте, Веб страницах и других частях видео захвата экрана и другого искусственно созданного видео.
A. РЕЖИМ ВНУТРЕННЕГО ПРЕДСКАЗАНИЯ BC И ЗНАЧЕНИЯ BV – ВВЕДЕНИЕ
[0120] Для внутреннего предсказания BC, выборочные значения текущего блока изображения предсказываются с использованием выборочных значений в том же самом изображении. Значение BV указывает смещение от текущего блока в область изображения («опорную область»), которая включает в себя выборочные значения, используемые для предсказания. Опорная область предоставляет предсказанные значения для текущего блока. Выборочные значения, используемые для предсказания, представляют собой ранее восстановленные выборочные значения, которые, таким образом, доступны в кодере во время кодирования и в декодере во время декодирования. Значение BV передается в битовом потоке, и декодер может использовать значение BV, чтобы определить опорную область изображения, чтобы использовать для предсказания, которая также восстанавливается в декодере. Внутреннее предсказание BC представляет собой форму предсказания внутри изображения – внутреннее предсказание BC для блока изображения не использует каких-либо выборочных значений, отличных от выборочных значений в том же изображении.
[0121] Фигура 7 иллюстрирует внутреннее предсказание BC для текущего блока (730) текущего изображения (710). Текущий блок может быть блоком кодирования («CB») единицы кодирования («CU»), блоком предсказания («PB») единицы предсказания («PU»), блоком преобразования («TB») единицы преобразования («TU») или другим блоком. Размер текущего блока может быть 64×64, 32×32, 16×16, 8×8 или некоторым другим размером. В более общем смысле, размер текущего блока составляет m×n, где каждое из m и n представляет собой целое число, и где m и n могут быть равны друг другу или могут иметь различные значения. Таким образом, текущий блок может быть квадратным или прямоугольным. Альтернативно, текущий блок может иметь некоторую другую форму.
[0122] BV (740) указывает смещение (или сдвиг) от текущего блока (730) в опорную область (750) изображения, которая включает в себя выборочные значения, используемые для предсказания. Опорная область (750), указанная BV (740), иногда называется «блоком согласования» для текущего блока (730). Блок согласования может быть идентичным текущему блоку (730), или он может быть приближением текущего блока (730). Предположим, что верхнее левое положение текущего блока находится в положении (x0, y0) на текущем изображении, и предположим, что верхнее левое положение опорной области находится в положении (x1, y1) на текущем изображении. BV указывает смещение (x1-x0, y1-y0). Например, если верхнее левое положение текущего блока находится в положении (256, 128), а верхнее левое положение опорной области находится в положении (126, 104), значение BV составляет (-130, -24). В этом примере, отрицательное горизонтальное смещение указывает положение слева от текущего блока, а отрицательное вертикальное смещение указывает положение над текущим блоком.
[0123] Внутреннее предсказание BC может улучшить эффективность кодирования путем применения избыточности (например, повторяющийся паттерн внутри изображения) при использовании операций BC. Нахождение блока согласования для текущего блока может быть вычислительно сложным и трудоемким, однако, учитывающим количество блоков-кандидатов, которые кодер может оценить. Фигура 8 показывает некоторые из блоков-кандидатов для текущего блока (830) текущего изображения (810) в операциях согласования блоков. Четыре BV (841, 842, 843, 844) указывают смещения для четырех блоков-кандидатов. Блоки-кандидаты могут быть где угодно внутри восстановленного контента текущего изображения (810). (Блоки обычно кодируются слева направо, затем сверху вниз.) Блок-кандидат может перекрываться с другими блоками-кандидатами, как показано для блоков-кандидатов, указанных посредством BV (843, 844).
[0124] В некоторых примерных реализациях, внутренним образом предсказанная область (850) ограничена быть внутри того же фрагмента и элемента мозаичного изображения, что и текущий блок (830). Такое внутреннее предсказание BC не использует выборочные значения в других фрагментах или элементах мозаичного изображения. Местоположение предсказанной внутренним образом области (850) может быть предметом одного или более других ограничений (например, для диапазона поиска, учитывающего использование восстановленных выборочных значений закодированных внешним образом блоков). Альтернативно, местоположение предсказанной внутренним образом области (850) не ограничено (то есть, полный диапазон поиска) внутри восстановленного контента текущего изображения (810).
[0125] Блок с режимом предсказания внутреннего предсказания BC может быть CB, PB или другим блоком. Когда блок представляет собой CB, BV для блока может быть передан на уровне CU (и другие CB в CU используют тот же самый BV или его масштабированную версию). Или, когда блок представляет собой PB, BV для блока может быть передан на уровне PU (и другие PB в PU используют тот же самый BV или его масштабированную версию). В более общем смысле, BV для внутреннего предсказания BC передается на подходящем синтаксическом уровне для блока.
[0126] Операции поблочного копирования предсказания в соответствии с внутренним режимом предсказания BC могут быть выполнены на уровне CB (когда BV передается для каждого CB) или PB (когда BV передается для каждого PB). Например, предположим, CB 16×16 имеет один PB 16×16. BV (для PB) применяется для поблочного копирования области 16×16. Когда область внутреннего предсказания имеет ограничение, чтобы не перекрывать блок 16×16, который предсказывается, BV имеет величину (абсолютное значение) по меньшей мере 16 горизонтально или вертикально.
[0127] Альтернативно, операции поблочного копирования могут быть выполнены на уровне TB в PB или CB, даже когда BV передается для PB или CB. Таким образом, BV, по мере того как применяется для TB, может ссылаться на положения других TB в том же PB или CB. Например, предположим, что CB 16×16 имеет один PB 16×16, но разделен на шестнадцать TB 4×4 в целях остаточного кодирования/декодирования. BV (для PB) применяется для поблочного копирования области 4×4 для первого TB в порядке растрового сканирования, затем тот же BV применяется для поблочного копирования области 4×4 для второго TB в порядке растрового сканирования, и так далее. Область 4×4, используемая в операциях BC для TB, может включать в себя положения в ранее восстановленных TB в том же CB, после объединения остаточных значений с предсказанными значениями для этих ранее восстановленных TB. (BV все еще не ссылается на положения в том же TB, который предсказывается). Применение операций BC на уровне TB облегчает использование BV с относительно малыми величинами.
[0128] Перекрытие на уровне TB создает последовательные зависимости в восстановлении для TU в PU, неявно. Это уменьшает возможности для параллельных вычислений и потенциально снижает пропускную способность на аппаратном уровне. Перекрытие на уровне PU может устранить такие последовательные зависимости среди TB. В этом случае, операции поблочного копирования выполняются на уровне PB, которые могут перекрываться. Таким образом, BV, по мере того как применяется для PB, может ссылаться на положения других PB в том же CB. Предположим, CB 16×16 разделен на два PB в целях внутреннего предсказания BC (например, два PB 16×16, или два PB 8×8, или PB 4×16 и PB 12×16, и т.д.). BV для одного PB применяется для поблочного копирования области для этого PB, затем BV для другого PB применяется для поблочного копирования области для другого PB. Область, используемая в операциях BC для второго PB, может включать в себя положения в ранее восстановленном первом PB в том же CB, после объединения остаточных значений с предсказанными значениями для первого PB. (BV все еще не ссылается на положения в том же PB, который предсказывается). Применение операций BC на уровне PB облегчает использование BV с относительно малыми величинами (по сравнению с применением операций BC на уровне CB). Кроме того, когда операции BC применяются на уровне PB, параллельная обработка на уровне TU по-прежнему разрешена для TB в PB.
[0129] Операции внутреннего предсказания BC для блоков насыщенности цвета CU, как правило, соответствуют операциям внутреннего предсказания BC для блока яркости CU. Как правило, сегментация PB насыщенности цвета и TB яркости соответствует непосредственно сегментации PB яркости и TB яркости в CU. Когда формат видео представляет собой YUV 4:4:4, размеры PB и TB насыщенности цвета совпадают с размерами соответствующих PB и TB яркости. Когда формат видео представляет собой YUV 4:2:0, PB и TB насыщенности цвета равны половине ширины и половине высоты соответствующих PB и TB яркости. Если TB яркости имеет минимальный размер преобразования, тем не менее, используется один TB насыщенности цвета, имеющий этот минимальный размер преобразования. Когда формат видео представляет собой YUV 4:2:2, PB и TB насыщенности цвета равны половине ширины соответствующих PB и TB яркости.
[0130] В некоторых реализациях, для CU, предсказанной с помощью внутреннего предсказания BC, внутреннее предсказание BC для блока насыщенности цвета в PU использует то же самое значение BV, что и внутреннее предсказание BC для блока яркости в PU, возможно, после масштабирования и округления, когда данные насыщенности цвета имеют уменьшенное разрешение по отношению к данным яркости (например, когда формат представляет собой формат YUV 4:2:0, значение BV делится на два для горизонтального и вертикального компонентов; или, когда формат представляет собой формат YUV 4:2:2, значение BV делится для два для горизонтального компонента). Альтернативно, различные значения BV могут быть переданы для блока яркости и блоков насыщенности цвета PU.
[0131] В некоторых реализациях, кодер учитывает выборочные значения яркости при идентификации значения BV или значения MV во время оценки BV или оценки MV. Например, кодер пытается сопоставить выборочные значения яркости для текущего блока (например, PB из PU) с восстановленными выборочными значениями яркости. Результирующее значение BV или значение MV, тем не менее, также применяется к выборочным значениям насыщенности цвета соответствующих блоков насыщенности цвета. Альтернативно, кодер учитывает выборочные значения яркости и соответствующие выборочные значения насыщенности цвета при идентификации значения BV или значения MV во время оценки BV или оценки MV.
[0132] В некоторых реализациях, если режим предсказания блока яркости PU представляет собой внутреннее предсказание BC, режим предсказания для блоков насыщенности цвета PU также будет предсказан с помощью внутреннего предсказания BC. Например, режим предсказания передается для PU. Альтернативно, режим предсказания может быть внутренним предсказанием BC для блока яркости или блоков насыщенности цвета PU, но не для обоих.
B. АСИММЕТРИЧНЫЕ РАЗДЕЛЫ
[0133] Фигура 9 показывает примеры (900) разделов блока для внутреннего предсказания BC в некоторых примерных реализациях. Блок 2N×2N кодируется с использованием внутреннего предсказания BC. Например, блок 2N×2N представляет собой блок 64×64, блок 32×32, блок 16×16 или блок 8×8. Блок 2N×2N может быть предсказан с помощью внутреннего предсказания BC без разделения. Или, блок 2N×2N может быть разделен различными способами, как показано на Фигуре 9.
[0134] Блок 2N×2N может быть разделен горизонтально на два раздела. Два раздела могут иметь одинаковые размеры – два блока 2N×N – для симметричного разделения. Или, два раздела могут быть асимметричными. Например, верхний раздел представляет собой блок 2N×N/2, а нижний раздел представляет собой блок 2N×3N/2. Или, в качестве другого пример, верхний раздел представляет собой блок 2N×3N/2, а нижний раздел представляет собой блок 2N×N/2. Таким образом, блок 64×64 может быть разделен на два блока 64×32, блок 64×16 и блок 64×48, или блок 64×48 и блок 64×16. Блок 32×32, 16×16 или 8×8 может быть подобным образом горизонтально разделен.
[0135] Блок 2N×2N может быть вместо этого разделен вертикально на два раздела. Два раздела могут иметь одинаковые размеры – два блока N×2N – для симметричного разделения. Или, два раздела могут быть асимметричными. Например, левый раздел представляет собой блок N/2×2N, а правый раздел представляет собой блок 3N/2×2N. Или, в качестве другого примера, левый раздел представляет собой блок 3N/2×2N, а правый раздел представляет собой блок N/2×2N. Таким образом, блок 64×64 может быть разделен на два блока 32×64, блок 16×64 и блок 48×64, или блок 48×64 и блок 16×64. Блок 32×32, 16×16 или 8×8 может быть подобным образом вертикально разделен.
[0136] Или, блок 2N×2N может быть разделен на четыре раздела N×N, которые могут быть дополнительно подразделены. Например, как показано на Фигуре 9, заданный раздел N×N может быть дополнительно разделен на два блока N×N/2, два блока N/2×N или четыре блока N/2×N/2. Таким образом, блок 64×64 может быть разделен на четыре блока 32×32, каждый из которых может быть дополнительно разделен на два блока 32×16, два блока 16×32 или четыре блока 16×16. Блок 32×32, 16×16 или 8×8 может быть подобным образом разделен посредством деления квадродерева на четыре раздела.
[0137] Поскольку этот термин используется в материалах настоящей заявки, раздел “N×N” также может считаться разделом 2N×2N в большинстве случаев. В реализациях H.265/HEVC, термин N×N, как правило, используется для описания PU или PB, но не CU или CB. Как используется в материалах настоящей заявки, термин «раздел N×N» или «блок N×N» указывает на раздел текущего блока 2N×2N (например, как часть оценки сверху вниз режимов разделения или оценки снизу вверх режимов разделения). В этом контексте, раздел N×N или блок N×N сам может считаться блоком 2N×2N, и может рассматриваться таким в дальнейшем разделении, если раздел N××N или блок N×N не имеет минимальный размер и дополнительно не разделяется. Обозначения для разделов в разделе N×N или блоке N×N могут подобным образом быть скорректированы.
[0138] Ограничение размеров асимметричных разделов до кратных N/2 может уменьшить сложность оценки того, какой из режимов разделения использовать во время кодирования. Альтернативно, кодер может рассматривать другие размеры разделов (например, кратные N/4 или размеры разделов m×n, в более общем смысле). Рассмотрение других размеров разделов может немного улучшить выгоду при кодировании, но также увеличивает сложность процесса поиска во время кодирования, и может увеличить накладные расходы сигнализации.
C. Примерные Методы для Кодирования или Декодирования, которые включают в себя Внутреннее Предсказание BC с Асимметричными Разделами.
[0139] Фигура 10 показывает обобщенный метод (1000) для кодирования, который включает в себя внутреннее предсказание BC с асимметричными разделами. Кодер изображения или видео, такой как описанный со ссылкой на Фигуру 3 или Фигуры 5a-5b, может выполнять метод (1000). Фигура 11 показывает обобщенный метод (1100) для декодирования, который включает в себя внутреннее предсказание BC с асимметричными разделами. Декодер изображения или видео, такой как описанный со ссылкой на Фигуру 4 или Фигуру 6, может выполнять метод (1100).
[0140] Как показано на Фигуре 10, кодер кодирует (1010) изображение или видео для формирования закодированных данных. Как часть кодирования, кодер выполняет внутреннее предсказание BC для текущего блока, который асимметрично разделен для внутреннего предсказания BC. В частности, текущий блок может быть расщеплен на два раздела, которые имеют различные размеры. Кодер выводит (1020) закодированные данные как часть битового потока.
[0141] Как показано на Фигуре 11, декодер принимает (1110) закодированные данные как часть битового потока. Декодер декодирует (1120) закодированные данные, чтобы восстановить изображение или видео. Как часть декодирования, декодер выполняет внутреннее предсказание BC для текущего блока, который асимметрично разделен для внутреннего предсказания BC. В частности, текущий блок может быть расщеплен на два раздела, которые имеют различные размеры.
[0142] Например, текущий блок 2N×2N горизонтально разделен на (1) блок 2N×N/2 и блок 2N×3N/2 или (2) блок 2N×3N/2 и блок 2N×N/2. Или, текущий блок 2N×2N вертикально разделен на (1) блок N/2×2N и блок 3N/2×2N или (2) блок 3N/2×2N и блок N/2×2N. Альтернативно, текущий блок асимметрично разделен каким-либо другим способом.
[0143] Другой блок может быть симметрично разделен для внутреннего предсказания BC. Например, другой блок представляет собой блок 2N×2N, который разделен на (1) два блока 2N×N, (2) два блока N×2N, или (3) четыре блока N×N, каждый из которых может быть дополнительно разделен на два блока N×N/2, два блока N/2×N или четыре блока N/2×N/2. В более общем смысле, для симметричного разделения другой блок может быть расщеплен на два раздела, которые имеют идентичные размеры.
VIII. ПОДХОДЫ НА СТОРОНЕ КОДЕРА К РАЗДЕЛЕНИЮ
[0144] В этом разделе представлены различные подходы на стороне кодера к идентификации разделов во время оценки движения или оценки вектора блока (для внутреннего предсказания BC).
[0145] Примеры внутреннего предсказания BC и оценки представлены, например, в разделах V, VII.A, IX и X. Оценка BV может быть вычислительно сложной, учитывая большое количество возможных блоков-кандидатов для текущего блока. Вычислительная сложность оценки BV является особенно проблематичной, когда диапазон поиска для значений BV включает в себя все ранее восстановленные области изображения, из-за большого количества блоков-кандидатов, с которыми сравнивается текущий блок. Для блоков-кандидатов всего кадра, количество операций еще выше. Когда кодер оценивает асимметричные разделы, сложность оценки BV дополнительно увеличивается.
[0146] Вычислительная сложность оценки движения также может быть очень высокой, как объяснено в следующем разделе.
A. ОЦЕНКА ДВИЖЕНИЯ И ЗНАЧЕНИЙ MV – ВВЕДЕНИЕ
[0147] Для оценки движения, выборочные значения текущего блока текущего изображения предсказываются с использованием выборочных значений в другом изображении, которое называется опорным изображением. Значение вектора движения («MV») указывает смещение от положения текущего блока в опорном изображении в область опорного изображения («опорную область»), которая включает в себя выборочные значения, используемые для предсказания. Опорная область предоставляет предсказанные значения для текущего блока. Выборочные значения, используемые для предсказания, представляют собой ранее восстановленные выборочные значения, которые, таким образом, доступны в кодере во время кодирования и в декодере во время декодирования. Значение MV передается в битовом потоке, и декодер может использовать значение MV, чтобы определить опорную область опорного изображения, чтобы использовать для предсказания, которая также восстанавливается в декодере. Когда доступно несколько опорных изображений, битовый поток может также включать в себя указание того, какое опорное изображение использовать, чтобы найти опорную область.
[0148] Фигура 12 иллюстрирует оценку движения для текущего блока (1230) текущего изображения (1210). Текущий блок может быть блоком кодирования («CB») единицы кодирования («CU»), блоком предсказания («PB») единицы предсказания («PU»), блоком преобразования («TB») единицы преобразования («TU») или другим блоком. Размер текущего блока может быть 64×64, 32×32, 16×16, 8×8 или некоторым другим размером. В более общем смысле, размер текущего блока составляет m×n, где каждое из m и n представляет собой целое число, и где m и n могут быть равны друг другу или могут иметь различные значения. Таким образом, текущий блок может быть квадратным или прямоугольным. Альтернативно, текущий блок может иметь некоторую другую форму.
[0149] Значение (1240) MV указывает смещение (или сдвиг) от положения текущего блока (1230) в опорную область (иногда называемую опорным блоком) на опорном изображении (1250), которая включает в себя выборочные значения, используемые для предсказания. Опорная область, указанная значением (1240) MV, иногда называется «блоком согласования» для текущего блока (1230). Блок согласования может быть идентичным текущему блоку (1230), или он может быть приближением текущего блока (1230). Предположим, что верхнее левое положение текущего (1230) блока находится в положении (x0, y0) на текущем изображении (1210), и предположим, что верхнее левое положение опорной области находится в положении (x1, y1) на текущем изображении (1250). Значение (1240) MV указывает смещение (x1-x0, y1-y0). Например, если верхнее левое положение текущего блока находится в положении (256, 128), а верхнее левое положение опорной области находится в положении (126, 104), значение MV составляет (-130, -24). В этом примере, отрицательное горизонтальное смещение указывает положение слева от текущего блока, а отрицательное вертикальное смещение указывает положение над текущим блоком.
[0150] Опорная область для текущего блока (1230) выбирается из нескольких блоков-кандидатов во время оценки движения. Фигура 12 также показывает некоторые из блоков-кандидатов для текущего блока (1230) текущего изображения (1210) в оценке движения. Четыре значения (1241, 1242, 1243, 1244) MV указывают смещения для четырех блоков-кандидатов. В целом, блоки-кандидаты могут быть где угодно в пределах опорного изображения (1250). Блок-кандидат может перекрываться с другими блоками-кандидатами, как показано для блоков-кандидатов, указанных значениями (1243, 1244) MV. Вычислительная сложность оценки движения является особенно проблематичной, когда диапазон поиска для значений MV включает в себя все опорные изображения, из-за большого количества блоков-кандидатов, с которыми сравнивается текущий блок. Вычислительная сложность усугубляется, когда оценка движения выполняется для нескольких опорных изображений.
B. ТОЧНОСТЬ ЗНАЧЕНИЙ BV и MV
[0151] Во многих примерах, описанных в материалах настоящей заявки, значения BV имеют точность целочисленных выборок. Такие значения BV указывают на сдвиги целочисленных выборок. Внутреннее предсказание BC часто используется при кодировании искусственно созданного видео (такого как видео содержимого экрана), для которого смещения дробных выборок являются редкими, так что точности целочисленных выборок достаточно для значений BV. Альтернативно, значения BV могут указывать на сдвиги дробных выборок. Например, значение BV с точностью ½-выборки может указывать на горизонтальное и/или вертикальное смещение со сдвигом ½-выборки (например, 1,5 выборки, 2,5 выборки и так далее). Или, значение BV с точностью ¼-выборки может указывать на горизонтальное и/или вертикальное смещение со сдвигом ¼, ½ или ¾-выборки. Или, значение BV с точностью 1/8-выборки может указывать на горизонтальное и/или вертикальное смещение со сдвигом 1/8, 1/4, 3/8, 1/2, 5/8, 3/4, или 7/8-выборки. Или, значение BV может иметь некоторую другую точность.
[0152] С другой стороны, значения MV, как правило, имеют точность дробной выборки, поскольку смещения дробной выборки являются распространенными при кодировании естественного видео. Например, значения MV могут иметь точность ½-выборки, точность ¼-выборки, точность 1/8-выборки или некоторую другую точность. Альтернативно, значения MV имеют точность целочисленной выборки.
C. ПОДХОДЫ К ИДЕНТИФИКАЦИИ РАЗДЕЛОВ
[0153] В целом, кодер может использовать подход сверху вниз или подход снизу вверх при идентификации разделов во время оценки движения или оценки BV (для внутреннего предсказания BC). Подход снизу вверх первоначально оценивает варианты для разделов наименьшего размера, затем использует результаты от этой первоначальной оценки при оценке вариантов для разделов последовательно большего размера. Подход снизу вверх может быть вычислительно дорогим. С другой стороны, подход сверху вниз первоначально оценивает варианты для разделов большего размера, затем использует результаты от этой первоначальной оценки при оценке вариантов для разделов последовательно меньшего размера. Подход сверху вниз с меньшей вероятностью определит оптимальный путь для разделения блоков, но обычно вычислительно проще, чем подход снизу вверх.
[0154] Для дополнительных сведений о подходах к разделению, смотрите, например: (1) Салливан и другие, «Эффективное Кодирование Изображений и Видео с Помощью Квадродерева», вProc. IEEE Int. Conf. on Acoust., Speech, and Signal Proc.(ICASSP), Торонто, Канада, Том 4, стр. 2661–2664, Май 1991, который описывает, как идентифицировать оптимальное дерево с точки зрения соотношения скорость-искажение для древовидного кодирования (по меньшей мере, при некоторых обстоятельствах); (2) Салливан и другие, «Оптимизированная с Точки Зрения Соотношения Скорость-Искажение Компенсация Движения для Сжатия Видео с использованием Блоков Фиксированного или Переменного Размера», в Proc. IEEE Global Telecom. Conf. (GLOBECOM), Феникс, Аризона, стр. 85–90, Декабрь 1991, который описывает, как применить оптимизацию с точки зрения скорость-искажение к компенсации движения (с или без деревьев); и (3) Салливан и другие, «Эффективное Кодирование Изображений и Видео с Помощью Квадродерева», IEEE Trans. on Image Proc., Том IP-3, Номер 3, стр. 327–331, Май 1994, который дополнительно описывает, как идентифицировать оптимальное дерево с точки зрения соотношения скорость-искажение для древовидного кодирования.
[0155] В некоторых реализациях, применяя один из подходов сверху вниз или подходов снизу вверх, описанных ниже, кодер идентифицирует разделы для PU. Кодер может установить разделы для PU на основе анализа PB яркости из PU. Или, Кодер может установить разделы для PU на основе анализа как PB яркости, так и PB насыщенности цвета из PU. В любом случае, разделы, установленные на основе PU, затем применяются к PB из PU. Альтернативно, кодер идентифицирует разделы для другого типа единицы или блока.
1. C. ПОДХОДЫ СВЕРХУ ВНИЗ К ИДЕНТИФИКАЦИИ РАЗДЕЛОВ
[0156] Кодер может использовать подход сверху вниз при идентификации разделов текущего блока во время оценки BV (для внутреннего предсказания BC) или оценке движения. Текущий блок может быть PB из PU, или другим типом блока. Фигура 13 представляет собой блок-схему и прилагаемую схему, иллюстрирующую подход сверху вниз к разделению предсказанного с помощью внутреннего предсказания BC блока. Кодер изображения или видео, такой как описанный со ссылкой на Фигуру 3 или Фигуры 5a-5b, может использовать подход (1300). В примере, показанном на Фигуре 13, кодер идентифицирует по меньшей мере некоторые из разделов предсказанного с помощью внутреннего предсказания BC блока 2N×2N с асимметричным разделением.
[0157] Кодер проверяет (1310) режимы с размерами 2N. Например, кодер проверяет режим для одного блока 2N×2N, режим для двух блоков 2N×N, режим для двух блоков N×2N,режимы для одного блока N/2×2N и одного блока 3N/2×2N (два варианта, показанные на Фигуре 13, с узким блоком слева или справа) и режимы для одного блока 2N×N/2и одного блока 2N×3N/2 (два варианта, показанные на фигуре 13, с более коротким блоком в верхней или нижней части). Для CU 16×16, например, кодер проверяет все из PU с размером 16×P и все из PU с размером P×16, где P может быть 4, 8, 12 и 16 в разрешенных комбинациях.
[0158] Для заданного режима для текущего блока 2N×2N, кодер определяет значение(я) BV для блока(ов) текущего блока 2N×2N в соответствии с режимом. Для блока текущего блока 2N×2N, кодер может выбрать начальное значение BV, например, на основе (1) значения(й) BV, используемых соседним блоком(ами) в текущем изображении, (2) значения BV, используемого расположенным по соседству блоком предыдущего изображения, или (3) значения MV, идентифицированного для блока текущего блока 2N×2N в более ранней оценке движения. Кодер затем находит подходящее значение BV для блока текущего блока 2N×2N.
[0159] Кодер выбирает (1320) наилучший режим размерности 2N. Критерий выбора может быть стоимостью искажения, стоимостью битовой скорости или некоторой комбинацией стоимости искажения и стоимости битовой скорости, или критерий выбора может использовать некоторую другую метрику (например, используя предел отклонения или краевой детектор). Например, на Фигуре 13 кодер выбирает режим с левым блоком N/2×2N и правым блоком 3N/2×2N.
[0160] После разделения блока 2N×2N как квадродерева, кодер также проверят (1330) режимы для каждого блока N×N из блока 2N×2N. Например, для заданного блока N×N, кодер проверяет режим для одного блока N×N, режим для двух блоков N×N/2, режим для двух блоков N/2×N и режим для четырех блоков N/2×N/2. Кодер может проверить каждый блок N×N отдельно. Для CU 8×8, например, кодер проверяет PU 8×8, два PU 8×4, два PU 4×8 и четыре PU 4×4.
[0161] Для заданного режима для заданного блока N×N, кодер определяет значение(я) BV для блока(ов) заданного блока N×N в соответствии с режимом. Кодер может выбрать начальные значения BV, например, на основе значений BV, которые были идентифицированы для текущего блока 2N×2N. Кодер затем находит подходящее значение(я) BV для блока(ов) заданного блока N×N в соответствии с режимом.
[0162] Кодер выбирает (1340) наилучшую комбинацию режимов для соответствующих блоков N×N. Критерий выбора может быть стоимостью искажения, стоимостью битовой скорости или некоторой комбинацией стоимости искажения и стоимости битовой скорости, или критерий выбора может использовать некоторую другую метрику (например, используя предел отклонения или краевой детектор). Как показано на Фигуре 13, различные блоки N×N могут иметь один и тот же режим или различные режимы.
[0163] Для блока 2N×2N, кодер затем выбирает (1350) между наилучшим режимом размера 2N и комбинацией наилучших режимов для соответствующих блоков N×N. Критерий выбора может быть стоимостью искажения, стоимостью битовой скорости или некоторой комбинацией стоимости искажения и стоимости битовой скорости, или критерий выбора может использовать некоторую другую метрику (например, используя предел отклонения или краевой детектор).
2. ПОДХОДЫ СНИЗУ ВВЕРХ К ИДЕНТИФИКАЦИИ РАЗДЕЛОВ
[0164] Вместо использования подхода сверху вниз, кодер может использовать подход снизу вверх при идентификации разделов текущего блока во время оценки BV (для внутреннего предсказания BC) или оценке движения. Фигура 14 представляет собой блок-схему, иллюстрирующую обобщенный метод для использования подхода снизу вверх к разделению. Кодер изображения или видео, такой как описанный со ссылкой на Фигуру 3 или Фигуры 5a-5b, может выполнять метод (1400).
[0165] Кодер кодирует (1410) изображение или видео для формирования закодированных данных. Как часть кодирования (например, как часть оценки движения или как часть оценки вектора блока для внутреннего предсказания BC), кодер вычисляет предсказание для текущего блока текущего изображения. Текущий блок может быть PB из PU, или другим типом блока. При вычислении предсказания, кодер использует подход снизу вверх для идентификации разделов текущего блока. Кодер может асимметрично разделять текущий блок, так что разделы текущего блока представляют собой два раздела, которые имеют различные размеры, или симметрично разделять текущий блок, так что разделы текущего блока имеют одинаковые размеры.
[0166] В целом, для подхода снизу вверх, для текущего блока, кодер проверяет по меньшей мере некоторые режимы разделения для меньших блоков внутри текущего блока. Кодер кэширует результаты, такие как значения BV или значения MV для меньших блоков. Кодер затем проверяет по меньшей мере некоторые режимы разделения для текущего блока, используя кэшированные результаты (из меньших блоков), чтобы уменьшить вычислительную сложность проверки режимов разделения для текущего блока. Например, кодер использует кэшированные результаты из меньших блоков, чтобы идентифицировать начальные значения BV (во время оценки BV) или значения MV (во время оценки движения) для режимов разделения для текущего блока. Во многих случаях, начальные значения BV (или значения MV) будут использоваться для текущего блока, что значительно сокращает процесс поиска. Фигуры 15 и 16 показывают примерные подходы снизу вверх для идентификации разделов для текущего блока. Альтернативно, кодер использует другой подход снизу вверх.
[0167] Кодер затем выводит (1420) закодированные данные как часть битового потока.
[0168] Фигура 15 представляет собой блок-схему и прилагаемую схему, иллюстрирующую подход снизу вверх (1500) к разделению предсказанного с помощью внутреннего предсказания BC блока. Кодер изображения или видео, такой как описанный со ссылкой на Фигуру 3 или Фигуры 5a-5b, может использовать подход (1500).
[0169] Для блока 2N×2N, который разделен как квадродерево, кодер проверят (1510) режимы для каждого блока N×N из блока 2N×2N. Например, для заданного блока N×N, кодер проверяет режим для одного блока N×N, режим для двух блоков N×N/2, режим для двух блоков N/2×N и режим для четырех блоков N/2×N/2. Кодер может проверить каждый блок N×N отдельно. Для CU 8×8, например, кодер проверяет режимы для PU 8×8, двух PU 8×4, двух PU 4×8 и четырех PU 4×4.
[0170] Для заданного режима заданного блока N×N, кодер определяет значение(я) BV для блока(ов) заданного блока N×N в соответствии с режимом. Для блока заданного блока N×N, кодер может выбрать начальное значение BV, например, на основе (1) значения(й) BV, используемых соседним блоком(ами) в текущем изображении, (2) значения BV, используемого расположенным по соседству блоком предыдущего изображения, или (3) значения MV, идентифицированного для блока заданного блока N×N в более ранней оценке движения. Кодер затем находит подходящее значение BV для блока заданного блока N×N.
[0171] Кодер выбирает (1520) наилучшую комбинацию режимов для соответствующих блоков N×N. Критерий выбора может быть стоимостью искажения, стоимостью битовой скорости или некоторой комбинацией стоимости искажения и стоимости битовой скорости, или критерий выбора может использовать некоторую другую метрику (например, используя предел отклонения или краевой детектор). Как показано на Фигуре 15, различные блоки N×N могут иметь один и тот же режим или различные режимы.
[0172] Кодер кэширует (1530) значения вектора, информацию о режиме разделения и/или другие результаты проверки (1510) режимов для каждого блока N×N из блока 2N×2N. Например, кодер кэширует значения BV во время оценки BV, а также выборы режима разделения для блоков N×N из блоков 2N×2N.
[0173] Кодер проверяет (1540) режимы размерности 2N, используя кэшированную информацию, чтобы уменьшить вычислительную сложность путем сокращения процесса поиска во многих случаях. Кодер может использовать кэшированные результаты для идентификации начальных значений BV (во время оценки BV) для блока 2N×2N. Во многих случаях, начальные значения BV будут использованы для режимов разделения размера 2N блока 2N×2N, что значительно сокращает процесс поиска.
[0174] Например, кодер проверяет режим для одного блока 2N×2N, режим для двух блоков 2N×N, режим для двух блоков N×2N, режимы для одного блока N/2×2N и одного блока 3N/2×2N (два варианта, показанные на Фигуре 15, с узким блоком слева или справа) и режимы для одного блока 2N×N/2 и одного блока 2N×3N/2 (два варианта, показанные на фигуре 15, с более коротким блоком в верхней или нижней части). Для CU 16×16, например, кодер повторно использует информацию, закэшированную после проверки режимов разделения для четырех CU 8×8 из CU 16×16. Во многих случаях, режим разделения для CU 16×16 заканчивает использованием кэшированного значения BV из CU 8×8, что значительно сокращает процесс поиска.
[0175] Кодер выбирает (1550) наилучший режим размерности 2N. Критерий выбора может быть стоимостью искажения, стоимостью битовой скорости или некоторой комбинацией стоимости искажения и стоимости битовой скорости, или критерий выбора может использовать некоторую другую метрику (например, используя предел отклонения или краевой детектор). Например, на Фигуре 15 кодер выбирает режим с левым блоком N/2×2N и правым блоком 3N/2×2N.
[0176] Для блока 2N×2N, кодер затем выбирает (1560) между наилучшим режимом размера 2N и комбинацией режимов для соответствующих блоков N×N. Критерий выбора может быть стоимостью искажения, стоимостью битовой скорости или некоторой комбинацией стоимости искажения и стоимости битовой скорости, или критерий выбора может использовать некоторую другую метрику (например, используя предел отклонения или краевой детектор).
[0177] Метод (1500), описанный со ссылкой на Фигуру 15, также может быть использован для разделения снизу вверх закодированных внешним образом блоков. В этом случае, значения MV и другие результаты из блоков N×N кэшируются. Кодер может использовать кэшированные результаты для идентификации начальных значений MV (во время оценки движения) для блока 2N×2N. Во многих случаях, начальные значения MV будут использованы для режимов разделения размера 2N блока 2N×2N, что значительно сокращает процесс поиска.
[0178] Фигура 16 представляет собой блок-схему и прилагаемую схему, иллюстрирующую еще более быстрые подходы (1600) снизу вверх к разделению предсказанного с помощью внутреннего предсказания BC блока. Кодер изображения или видео, такой как описанный со ссылкой на Фигуру 3 или Фигуры 5a-5b, может использовать один из подходов (1600). Подходы (1600) на Фигуре 16 подобны подходу (1500) на Фигуре 15, но были изменены в нескольких местах, чтобы дополнительно сократить процесс поиска.
[0179] Для блока 2N×2N, который разделен как квадродерево, кодер проверят (1610) подмножество режимов для каждого блока N×N из блока 2N×2N. То есть, кодер проверяет некоторые, но не все из режимов для каждого блока N×N. Например, для заданного блока N×N, кодер проверяет только режим с двумя блоками N×N/2. Или, в качестве другого примера, кодер проверяет только режим с двумя блоками N/2×N. Кодер может проверить каждый блок N×N отдельно. Путем проверки меньшего количества режимов, однако, процесс поиска сокращается. Альтернативно, кодер проверяет другие и/или дополнительные режимы для каждого блока N×N.
[0180] Если было проверено (1610) несколько режимов, кодер выбирает (1620) наилучшую комбинацию режимов для соответствующих блоков N×N. Критерий выбора может быть стоимостью искажения, стоимостью битовой скорости или некоторой комбинацией стоимости искажения и стоимости битовой скорости, или критерий выбора может использовать некоторую другую метрику (например, используя предел отклонения или краевой детектор). Если был проверен (1610) только один режим, кодер просто использует этот режим для каждого блока N×N.
[0181] Кодер кэширует (1630) значения вектора, информацию о режиме разделения и/или другие результаты проверки (1610) режимов для каждого блока N×N из блока 2N×2N. Например, кодер кэширует значения BV во время оценки BV, а также выборы режима разделения для блоков N×N из блоков 2N×2N.
[0182] Кодер проверяет (1640) подмножество режимов размерности 2N, используя кэшированную информацию для уменьшения вычислительной сложности. Например, если кодер проверил (1610) только блоки N×N/2 из блоков N××N, кодер проверяет режим для одного блока 2N×2N, режим для двух блоков 2N×N, и режимы для одного блока 2N×N/2 и одного блока 2N×3N/2 (два варианта, показанные на Фигуре 16, с более коротким блоком в верхней или нижней части). Или, если кодер проверил (1610) только блоки N/2×N из блоков N×N, кодер проверяет режим для одного блока 2N×2N, режим для двух блоков N×2N, и режимы для одного блока N/2×2N и одного блока 3N/2×2N (два варианта, показанные на Фигуре 16, с узким блоком слева или справа).
[0183] Или, в качестве другого примера (не показанного на Фигуре 16), кодер проверяет (1610) только раздел N×N для каждого блока N×N из блока 2N×2N. Если блок 2N×2N представляет собой внутренним образом закодированный блок, кодер проверяет (1640) режим для одного блока 2N×2N, режим для двух блоков N×2N, и режимы для одного блока N/2×2N и одного блока 3N/2×2N (с узким блоком слева или справа). Если блок 2N×2N представляет собой внешним образом закодированный блок, кодер проверяет (1640) режим для одного блока 2N×2N, режим для двух блоков 2N×N, и режимы для одного блока 2N×N/2 и одного блока 2N×3N/2 (с более коротким блоком в верхней или нижней части).
[0184] Кодер выбирает (1650) наилучший режим размерности 2N. Критерий выбора может быть стоимостью искажения, стоимостью битовой скорости или некоторой комбинацией стоимости искажения и стоимости битовой скорости, или критерий выбора может использовать некоторую другую метрику (например, используя предел отклонения или краевой детектор). Для блока 2N×2N, кодер затем выбирает (1660) между наилучшим режимом размера 2N и комбинацией режимов для соответствующих блоков N×N. Критерий выбора может быть стоимостью искажения, стоимостью битовой скорости или некоторой комбинацией стоимости искажения и стоимости битовой скорости, или критерий выбора может использовать некоторую другую метрику (например, используя предел отклонения или краевой детектор).
[0185] Метод (1600), описанный со ссылкой на Фигуру 16, также может быть использован для разделения снизу вверх закодированных внешним образом блоков. В этом случае, значения MV и другие результаты из блоков N×N кэшируются. Кодер может использовать кэшированные результаты для идентификации начальных значений MV (во время оценки движения) для блока 2N×2N. Во многих случаях, начальные значения MV будут использованы для режимов разделения размера 2N блока 2N×2N, что значительно сокращает процесс поиска.
[0186] В подходах (1500, 1600), показанных на Фигурах 15 и 16, кодер может ограничить количество кэшированных значений BV или значений MV. Например, кодер хранит только значение(я) BV или значение(я) MV для наилучшего режима разделения для каждого блока N×N из блока 2N×2N. Альтернативно, кодер также хранит другие значения BV или значения MV. Ограничение кодера может управлять тем, сколько значений BV или значений MV кодер хранит.
IX. СХЕМЫ ПОИСКА
[0187] Настоящий раздел представляет различные схемы поиска, которые могут использоваться в оценке движения или внутреннем предсказании BC. В частности, схемы поиска используют общие типы движения в видео захвата экрана или другом искусственно созданном видео. В таком видео, движение блока часто представляет собой чисто горизонтальное движение или чисто вертикальное движение (например, от прокручивания содержимого Веб-страницы или контента приложения в компьютерной среде настольной системы, или от прокручивания тикерной графики в видео смешанного контента). В этом смысле, схемы поиска адаптированы для видео захвата экрана или другого искусственно-созданного видео, но они также могут быть использованы при кодировании естественного видео.
[0188] Фигура 17 представляет собой блок-схему, иллюстрирующую обобщенный метод (1700) для поиска значения BV или значения MV для блока с использованием итеративной оценки местоположения в малой окрестности(ях) и итеративного подтверждения местоположения в более крупной окрестности(ях). Кодер изображения или видео, такой как описанный со ссылкой на Фигуру 3 или Фигуры 5a-5b, может выполнять метод (1700).
[0189] Кодер кодирует изображение или видео для получения кодированных данных, и выводит кодированные данные как часть битового потока. Во время кодирования, кодер вычисляет предсказание для текущего блока текущего изображения (например, используя оценку BV или оценку движения). При вычислении предсказания, кодер идентифицирует (1710) текущее лучшее местоположение для предсказания с помощью итеративной оценки в малой окрестности вокруг текущего лучшего местоположения для предсказания. Например, малая окрестность включает в себя местоположения, которые расположены в непосредственной близости по горизонтали или по вертикали к текущему лучшему местоположению. Если одно из местоположений в малой окрестности дает более хорошие результаты, чем текущее лучшее местоположение, текущее лучшее местоположение заменяется более хорошим местоположением в малой окрестности, и новое местоположение проверяется в малой окрестности вокруг него. Таким образом, процесс поиска с помощью схемы малой окрестности может итеративно повторяться, пока текущее лучшее местоположение является лучшим местоположением в малой окрестности вокруг него. Это может произойти в первой итерации или после нескольких итераций.
[0190] Фигуры 18a и 18b иллюстрируют итеративную оценку местоположения в малой окрестности при поиске значения BV или значения MV для блока. На Фигуре 18a, текущее лучшее местоположение показано как черный круг. Смежные местоположения в ромбовидной схеме (показаны как серые круги) оцениваются. Результаты для четырех смежных местоположений, соответственно, сравниваются с результатами для текущего лучшего местоположения (с точки зрения стоимости искажения, стоимости битовой скорости или некоторой комбинации стоимости искажения и стоимости битовой скорости). В примере на Фигурах 18a и 18b, местоположение ниже текущего лучшего местоположения на Фигуре 18a дает более хорошие результаты и становится текущим лучшим местоположением. В следующей итерации, как показано на Фигуре 18b, оцениваются смежные местоположения в ромбовидной схеме вокруг нового текущего лучшего местоположения. Альтернативно, малая окрестность может иметь другую форму.
[0191] Кодер может использовать пороговое значение для ограничения количества итераций на этапе идентификации (1710). Пороговое значение зависит от реализации и составляет, например, 4 итерации. Если достигнуто пороговое число итераций, кодер может выполнить другой процесс поиска (например, процесс полного поиска или процесс хеширования), чтобы определить наилучшее место для предсказания.
[0192] Возвращаясь к Фигуре 17, после идентификации текущего лучшего местоположения в малой окрестности (в пределах порогового количества итераций), кодер подтверждает (1720) текущее лучшее местоположение для предсказания через итеративную оценку в последовательно более крупных окрестностях вокруг текущего лучшего местоположения для предсказания. Например, каждая из более крупных окрестностей включает в себя местоположения в кольце за пределами малой окрестности. Последовательно более крупные окрестности могут расти инкрементно на один образец, два образца, и т.д., на каждой стороне. Или, последовательно более крупные окрестности могут быть расширены посредством некоторого коэффициента. Например, радиус более крупной окрестности масштабируется с коэффициентом 2 в каждой итерации после первой.
[0193] Если одно из местоположений в более крупной окрестности дает более хорошие результаты, чем текущее лучшее местоположение, текущее лучшее местоположение заменяется более хорошим местоположением в более крупной окрестности, и кодер начинает заново процессы в новом текущем лучшем местоположении. В противном случае (ни одно из местоположений в более крупной окрестности не дает более хороших результатов, чем текущее лучшее местоположение), кодер повторяет процесс подтверждения со следующей более крупной окрестностью, пока пороговое значение итераций процесса подтверждения (1720) не будет достигнуто. Пороговое значение зависит от реализации и, например, любой из стадий с 4 по 7 проверок для последовательно более крупных окрестностей.
[0194] После того как самая крупная окрестность успешно проверена, кодер прекращает процесс поиска. В противном случае, (показано как решение 1730), кодер начинает заново процесс в новом текущем лучшем местоположении.
[0195] Фигура 19 иллюстрирует итеративное подтверждение местоположения в одной или нескольких более крупных окрестностях при поиске значения BV или значения MV для блока. На Фигуре 19, текущее лучшее местоположение показано как черный круг. Кодер проверяет восемь местоположений в углах и средних точках квадрата (внутреннего квадрата) вокруг текущего лучшего местоположения. Восемь местоположений показаны как серые круги на Фигуре 19. Результаты для восьми местоположений, соответственно, сравниваются с результатами для текущего лучшего местоположения (с точки зрения стоимости искажения, стоимости битовой скорости или некоторой комбинации стоимости искажения и стоимости битовой скорости). Если ни одно из восьми местоположений во внутреннем квадрате не лучше, чем текущее лучшее местоположение, кодер проверяет восемь местоположений (углы и средние точки) более крупного квадрата (внешнего квадрата на Фигуре 19). Альтернативно, более крупная окрестность может иметь другую форму (например, круг местоположений), включать в себя меньше местоположений, которые оцениваются (например, только углы по периметру формы).
[0196] Счетчик для первого порогового значения (итерации малой окрестности) может быть сброшен каждый раз, когда этап идентификации (1710) запущен или перезапущен. Или, кодер может сбросить счетчик для первого порогового значения только один раз, в начале процесса (1700). Подобным образом, счетчик для второго порогового значения (итерации более крупной окрестности) может быть сброшен каждый раз, когда этап подтверждения (1720) запущен или перезапущен. Или, кодер может сбросить счетчик для второго порогового значения только один раз, в начале процесса (1700). Если счетчики сбрасываются в рамках процесса (1700), кодер может использовать другое ограничение, чтобы ограничить то, насколько долго продолжается процесс поиска, гарантируя, что он заканчивается в течение разумного периода времени.
[0197] Фигура 20 представляет собой блок-схему, иллюстрирующую примерный метод для поиска значения BV или значения MV для блока с использованием итеративной оценки местоположения в малой окрестности(ях) и итеративного подтверждения местоположения в более крупной окрестности(ях).
[0198] Кодер сбрасывает (2010) первый и второй счетчики. Кодер устанавливает (2020) текущее лучшее местоположение и оценивает его (если результаты для текущего лучшего местоположения еще не доступны из предыдущей оценки). Кодер затем оценивает (2030) смежные местоположения в малой окрестности вокруг текущего лучшего местоположения (если результаты для смежных местоположений еще не доступны из предыдущей оценки). Кодер проверяет (2040), не найдено ли новое лучшее местоположение (путем сравнения результатов). Если это так, кодер проверяет (2042), не достигнуто ли первое пороговое значение, используя первый счетчик. Если это не так, кодер увеличивает первый счетчик (не показан), устанавливает (2010) текущее лучшее местоположение в качестве нового лучшего текущего местоположения (из числа смежных местоположений) и продолжает оттуда. Таким образом, кодер может итеративно проверить малую окрестность смежных местоположений вокруг текущего лучшего местоположения.
[0199] Если достигнуто первое пороговое значение, кодер выполняет (2080) полный поиск. Альтернативно, кодер использует другой процесс поиска, такой как процесс хэширования.
[0200] Если новое лучшее местоположение не найдено (на решении (2040)), кодер оценивает (2050) кольцо местоположений вокруг текущего лучшего местоположения. Кодер проверяет (2060), не найдено ли новое лучшее местоположение (путем сравнения результатов). Если это так, кодер сбрасывает (2090) первый и второй счетчики, устанавливает (2010) текущее лучшее местоположение в качестве нового лучшего текущего местоположения (из числа смежных местоположений) и продолжает оттуда. Таким образом, кодер перезапускает процесс (2000).
[0201] В противном случае (новое местоположение не найдено на решении (2060)), кодер проверяет (2062), не достигнуто ли второе пороговое значение, используя второй счетчик. Если это так, кодер (успешно) завершает процесс поиска. Если это не так, кодер увеличивает второй счетчик (не показан), расширяет кольцо (2070) местоположений и оценивает (2050) (расширенное) кольцо местоположений вокруг текущего лучшего местоположения.
[0202] В примерах, описанных в этом разделе, значения BV и значения MV указывают на сдвиги целочисленной выборки. Альтернативно, значения BV и/или значения MV могут указывать на сдвиги дробных выборок. Когда разрешены сдвиги дробных выборок, кодер может идентифицировать значение BV или значение MV, имеющее сдвиг целочисленной выборки, как описано со ссылкой на Фигуры 17-20. Затем, кодер может идентифицировать значение BV или значение MV в окрестности вокруг значения BV или MV целочисленной выборки (например, в пределах сдвига единственной выборки из значения BV или MV целочисленной выборки).
[0203] Альтернативно, когда разрешены сдвиги дробных выборок, кодер может идентифицировать значение BV или значение MV, имеющее сдвиг дробной выборки, с разрешенной точностью на каждом из этапов, описанных со ссылкой на Фигуры 17-20 (то есть, идентифицировать значение BV или значение MV, имеющее сдвиг дробной выборки в малой окрестности, идентифицировать значение BV или значение MV, имеющее сдвиг дробной выборки в более крупной окрестности, и так далее).
X. ОГРАНИЧЕНИЕ ДИАПАЗОНА ПОИСКА BV ДЛЯ ВНУТРЕННЕГО ПРЕДСКАЗАНИЯ BC
[0204] В некоторых примерных реализациях, кодер использует диапазон полного поиска для оценки BV. Осуществляется поиск по всей области восстановленного выборочного значения, чтобы идентифицировать значение BV для текущего блока. В то время как использование диапазона полного поиска может помочь идентифицировать наилучшие значения BV для использования во внутреннем предсказании BC, оно также может увеличить сложность оценки BV.
[0205] В других примерных реализациях, кодер ограничивает диапазон поиска BV в соответствии с одним или более ограничениями. Путем ограничения диапазона поиска BV, область восстановленных выборочных значений, на которую ссылается доступ быстрой памяти для внутреннего предсказания BC во время кодирования и декодирования, может быть уменьшена, что приводит к снижению затрат на реализацию.
[0206] В примерах настоящего раздела, кодер учитывает выборочные значения яркости текущего блока яркости при идентификации значения BV во время оценки BV. Кодер пытается сопоставить выборочные значения яркости для текущего блока с восстановленными выборочными значениями яркости предыдущих блоков яркости. Результирующее значение BV, тем не менее, также применяется к выборочным значениям насыщенности цвета соответствующих блоков насыщенности цвета.
[0207] Фигура 21a иллюстрирует примерные ограничения на диапазон поиска для значений BV. Помимо текущего блока (2130) текущего кадра (2110), Фигура 21a показывает диапазон поиска, определенный двумя CTB (2120, 2122). Текущий CTB (2120) является частью текущей CTU и включает в себя текущий блок (2130). Вместе с CTB (2120), расположенным слева, текущий CTB (2120) определяет диапазон поиска, в котором допустимые BV могут быть найдены для текущего блока (2130). BV (2142, 2144) ссылаются на области, которые находятся за пределами диапазона поиска, так что эти значения BV (2142, 2144) не допускаются.
[0208] В некоторых примерных реализациях, диапазон поиска для значений BV для текущего блока представляет собой текущий CTB и CTB слева от него. Например, CTB может иметь размер 64×64, 32×32 или 16×16 выборочных значений, что приводит к диапазону поиска 128×64, 64×32 или 32×16 выборочных значений. Только выборочные значения в текущем CTB и левом CTB используются для внутреннего предсказания BC для текущего блока. Это упрощает реализацию кодера путем ограничения процесса поиска. Это также упрощает реализацию декодера путем ограничения количества выборочных значений, которые декодер буферизует в быстрой памяти для внутреннего предсказания. (Декодер имеет достаточную емкость буфера для хранения выборочных значений для двух CTB самых крупных возможных размеров, даже если выбран меньший размер CTU/CTB). Другое ограничение состоит в том, что внутреннее предсказание не может ссылаться на выборочные значения из другого фрагмента или элемента мозаичного изображения. Для текущего блока m×n c верхним левым положением в (x0, y0) и CTB, каждым имеющим размеры CTBsizeY×CTBsizeY, кодер может проверить эти ограничения для двумерного BV, имеющего горизонтальный компонент BV[0] и вертикальный компонент BV[1], следующим образом.
-  BV[0]≥-((x0% CTBsizeY)+CTBsizeY)
-  BV[1]≥-(y0% CTBsizeY)
-  Выборочные значения в положениях (x0, y0), (x0+BV[0], y0+BV[1]) и (x0+BV[0]+m-1, y0+BV[1]+n-1) должны быть в одном и том же фрагменте.
- Выборочные значения в положениях (x0, y0), (x0+BV[0], y0+BV[1]) и (x0+BV[0]+m-1, y0+BV[1]+n-1) должны быть в одном и том же элементе мозаичного изображения.
[0209] На практике, оценка значений кандидата BV в большом, квадратном диапазоне поиска (таком как диапазон поиска S×S, где S представляет собой CTBsizeY) или большем, прямоугольном диапазоне поиска (таком как диапазон поиска 2S×S, где S представляет собой CTBsizeY) не имеет смысла, если наилучшие значения BV имеют тенденцию быть ориентированными либо горизонтально, либо вертикально. Вместо этого, кодер может использовать меньший диапазон, который по-прежнему включает в себя вероятные значения кандидата BV, где меньший диапазон поиска BV ориентирован горизонтально (например, с размерами 2S×¼S или 2S×¾S) или ориентирован вертикально (например, с размерами ¼S×2S или ¾S×2S). В большинстве сценариев, кодер проверяет меньше значений BV во время оценки BV, но по-прежнему находит наиболее подходящие значения.
[0210] Диапазон поиска BV с горизонтальным отклонением (или горизонтальной ориентацией) включает в себя значения кандидата BV с более широким диапазоном значений горизонтального компонента BV, чем значений вертикального компонента BV. С другой стороны, диапазон поиска BV с вертикальным отклонением (или вертикальной ориентацией) включает в себя значения кандидата BV с более широким диапазоном значений вертикального компонента BV, чем значений горизонтального компонента BV.
[0211] Диапазон поиска BV также может быть предметом других ограничений. Например, диапазон поиска BV может быть предметом ограничения, заключающегося в том, что любое значение BV для текущего блока ссылается на область, которая лежит внутри текущего CTB и/или CTB слева от текущего CTB. То есть, диапазон поиска BV умещается внутри текущего CTB и CTB слева от него. Или, в качестве другого примера, диапазон поиска BV может быть предметом ограничения, заключающегося в том, что любое значение BV для текущего блока ссылается на область, которая лежит внутри текущего CTB и/или CTB над текущим CTB. То есть, диапазон поиска BV умещается внутри текущего CTB и CTB над ним. Диапазон поиска BV также может быть ограничен, чтобы умещаться внутри текущего изображения. В некоторых реализациях, диапазон поиска BV дополнительно ограничен, чтобы умещаться внутри текущего фрагмента или текущего элемента мозаичного изображения.
[0212] Помимо ограничения на дальней границе диапазона поиска BV (вдали от текущего блока), диапазон поиска BV может быть ограничен у его ближней границы (близко к текущему блоку). Например, в некоторых реализациях, для CU, имеющего размер 2N×2N, раздел PU может иметь размер N×N и 2N×N или N×2N, где каждый PU имеет свой собственный BV, или некоторые другие размер раздела. Для BV из PU не разрешено, тем не менее, ссылаться на другие области PU внутри той же CU. Это ограничение на диапазон поиска BV несколько снижает производительность по сравнению с разрешением перекрытия на уровне PU, но позволяет каждому PU иметь свой собственный BV и позволяет PU внутри каждой CU быть восстановленным параллельно, что может способствовать эффективному декодированию.
[0213] Альтернативно, если перекрытие между CB и соответствующей областью внутреннего предсказания разрешено, кодер может выполнить обработку перекрытия. В этом случае, диапазон поиска BV с горизонтальным отклонением или вертикальным отклонением может расшириться в текущую CU.
[0214] Фигура 21b показывает первый альтернативный диапазон (2181) поиска, который имеет горизонтальное отклонение (горизонтальную ориентацию). Диапазон (2181) поиска имеет размеры до 2S×¼S. Диапазон (2181) поиска может быть усечен, чтобы уместиться в текущем CTB и CTB слева от него, как показано в заштрихованной накрест и заштрихованной частях диапазона (2181) поиска. Или, диапазон (2181) поиска может быть дополнительно ограничен, чтобы не включать в себя какую-либо часть в текущем CTB (показано как заштрихованная часть диапазона (2181) поиска на Фигуре 21b).
[0215] Фигура 21c показывает второй альтернативный диапазон (2182) поиска, который имеет горизонтальное отклонение. Диапазон (2182) поиска имеет размеры до 2S×¾S. Диапазон (2182) поиска может быть усечен, чтобы уместиться в текущем CTB и CTB слева от него, как показано в заштрихованной накрест и заштрихованной частях диапазона (2182) поиска. Или, диапазон (2182) поиска может быть дополнительно ограничен, чтобы не включать в себя какую-либо часть в текущем CTB (показано как заштрихованная часть диапазона (2182) поиска на Фигуре 21c).
[0216] Фигура 21b показывает третий альтернативный диапазон (2183) поиска, который имеет вертикальное отклонение (вертикальную ориентацию). Диапазон (2183) поиска имеет размеры до ¼S×2S. Диапазон (2183) поиска может быть усечен, чтобы уместиться в текущем CTB и CTB над ним, как показано в заштрихованной накрест и заштрихованной частях диапазона (2183) поиска. Или, диапазон (2183) поиска может быть дополнительно ограничен, чтобы не включать в себя какую-либо часть в текущем CTB (показано как заштрихованная часть диапазона (2183) поиска на Фигуре 21d).
[0217] Фигура 21e показывает четвертый альтернативный диапазон (2184) поиска, который имеет вертикальное отклонение. Диапазон (2184) поиска имеет размеры до ¾S×2S. Диапазон (2184) поиска может быть усечен, чтобы уместиться в текущем CTB и CTB над ним, как показано в заштрихованной накрест и заштрихованной частях диапазона (2184) поиска. Или, диапазон (2184) поиска может быть дополнительно ограничен, чтобы не включать в себя какую-либо часть в текущем CTB (показано как заштрихованная часть диапазона (2184) поиска на Фигуре 21d).
[0218] Во время оценки BV, видеокодер или кодер изображения может выполнять кодирование, которое включает в себя оценку BV следующим образом.
[0219] Кодер определяет BV для текущего блока изображения. BV указывает на смещение в область внутри изображения. Текущий блок находится в текущем CTB, имеющем размер S. Как часть определения BV, кодер проверяет ограничение, что область находится внутри диапазона поиска BV, имеющего горизонтальное отклонение или вертикальное отклонение. Кодер выполняет внутреннее предсказание BC для текущего блока с помощью BV. Кодер также кодирует BV. Например, кодер выполняет предсказание BC и кодирует BV, как описано в другом месте в настоящей заявке.
[0220] В более общем смысле, кодер кодирует данные для изображения с помощью предсказания BC. Кодирование включает в себя выполнение операций оценки BV с использованием диапазона поиска BV с горизонтальным или вертикальным отклонением. Кодер выводит закодированные данные для изображения.
[0221] Диапазон поиска BV может иметь горизонтальное отклонение, имеющее размеры 2S×¼S или 2S×¾S. Или, в более общем смысле, горизонтально-отклоненный диапазон поиска BV имеет ширину между S и 2S, включительно, и имеет высоту между ¼S и ¾S, включительно. Или, диапазон поиска BV может иметь вертикальное отклонение, имеющее размеры ¼S×2S или ¾S×2S. Или, в более общем смысле, вертикально-отклоненный диапазон поиска BV имеет высоту между S и 2S, включительно, и имеет ширину между ¼S и ¾S, включительно.
[0222] Кодер может выбрать диапазон поиска BV из числа нескольких доступных диапазонов поиска BV. Например, кодер выбирает среди нескольких диапазонов поиска, имеющих горизонтальное отклонение (например, диапазонов поиска 2S×¼S и 2S×¾S). Или, кодер выбирает среди нескольких диапазонов поиска, имеющих вертикальное отклонение (например, диапазонов поиска ¼S×2S и ¾S×2S). Или, кодер выбирает среди нескольких диапазонов поиска, при этом каждый имеет горизонтальное отклонение или вертикальное отклонение.
[0223] Кодер может выбрать диапазон поиска BV на основе, по меньшей мере частично, значений BV одного или более предыдущих блоков. Например, предыдущий блок(и) находятся в текущем изображении. Или, предыдущий блок(и) находятся в одном или более из предыдущих изображений. Или, предыдущий блок(и) находятся в текущем изображении и одном или более из предыдущих изображений. Рассматривая значение(я) BV предыдущего блока(ов), кодер может идентифицировать тенденции в значениях BV (например, что большинство значений BV имеют сильный горизонтальный компонент BV, но мало или вообще не имеют вертикального компонента) и выбрать соответствующий диапазон поиска BV. Выбор диапазона поиска BV может также зависеть от других факторов (например, пользовательских настроек).
[0224] Значение(я) BV для предыдущего блока(ов) могут быть отслежены, например, с помощью структуры данных, которая организует значение(я) BV как гистограмму с различными категориями (или «столбцами гистограммы»), соответствующими различными диапазонам поиска значений BV и хранящими количество на категорию/столбец гистограммы. Таким образом, структура данных гистограммы может предоставить статистические данные о частоте использования различных значений BV. Или, значение(я) BV могут быть отслежены иным способом. Например, кодер отслеживает значения BV для блоков текущего изображения, затем оценивает значения BV предыдущих блоков в окрестности вокруг текущего блока для определения того, какой диапазон поиска BV использовать.
[0225] Использование более мелкого диапазона поиска BV с горизонтальным или вертикальным отклонением может быть чуть менее эффективным (с точки зрения производительности скорость-искажение), чем использование более крупного диапазона поиска SxS or 2S×S. Для многих сценариев кодирования, сокращение вычислительной сложности оценки BV оправдывает это ухудшение.
[0226] Фигура 22 показывает метод (2200) для кодирования с режимом внутреннего предсказания BC, при условии соблюдения одного или более ограничений на выбор значений BV. Кодер, такой как описанный со ссылкой на Фигуру 3 или Фигуры 5a-5b, может выполнять метод (2200).
[0227] Для начала, кодер определяет (2210) BV для текущего блока изображения. Текущий блок может быть CB, PB или другим блоком. BV указывает на смещение в область внутри изображения. При определении BV, кодер проверяет одно или более ограничений.
[0228] В соответствии с одним возможным ограничением, кодер проверяет диапазон выборочных значений, используемых для внутреннего предсказания BC. Кодер может проверить, что область-кандидат внутреннего предсказания находится внутри диапазона, определенного текущим CTB и одним или более другими CTB (например, CTB слева от текущего CTB)/Например, когда BV имеет первый компонент BV[0] и второй компонент BV[1], текущий блок имеет верхнее левое положение в положении (x0, y0), и каждый из CTB имеет ширину CTBwidth и высоту CTBheight, ограничение удовлетворено, если BV[0]>=-((x0%CTBwidth)+CTBwidth) и BV[1]>=-(y0%CTBheight). Кодер может аналогичным образом проверить верхние пределы на значениях BV[0] и BV[1] в диапазоне поиска: BV[0]<(CTBwidth - m-(x0% CTBwidth)) и BV[1]<(CTBheight-n - (y0% CTBheight)). Альтернативно, диапазон поиска включает в себя больше или меньше CTB, или диапазон поиска определяется каким-либо другим способом.
[0229] В соответствии с другим возможным ограничением, кодер ограничивает поиск текущим фрагментом и элементом мозаичного изображения (то есть, текущий блок и область являются частью не более, чем одного фрагмента изображения, и не более, чем одного элемента мозаичного изображения). Кодер может проверить, что верхнее левое положение текущего блока, верхнее левое положение области-кандидата внутреннего предсказания и нижнее правое положение области-кандидата внутреннего предсказания являются частью одного фрагмента и одного элемента мозаичного изображения. Например, ограничение удовлетворяется, если (x0, y0), (x0+BV[0], y0+BV[1]) и (x0+BV[0]+m-1, y0+BV[1]+n-1) являются частью одного фрагмента и одного элемента мозаичного изображения.
[0230] Альтернативно, кодер проверяет другие и/или дополнительные ограничения.
[0231] Кодер выполняет (2220) внутреннее предсказание BC для текущего блока с помощью BV. Например, кодер выполняет внутреннее предсказание BC для всего текущего блока. Или, кодер выполняет внутреннее предсказание BC для нескольких блоков, связанных с текущим блоком (например, для нескольких TB на основе TB-за-TB, где TB связаны с текущим PB, который имеет BV).
[0232] Кодер кодирует (2230) BV. Кодер может повторять метод (2200) для другого блока режима внутреннего предсказания BC.
[0233] Для внутреннего предсказания BC, кодер и декодер используют восстановленные выборочные значения. Невосстановленные выборочные значения могут присутствовать как части изображения, которые еще не были закодированы и восстановлены. Чтобы избежать использования невосстановленных выборочных значений для внутреннего предсказания BC, кодер устанавливает ограничения на допустимые значения BV, так что только фактические, ранее невосстановленные выборочные значения используются для внутреннего предсказания BC в соответствии с BV.
[0234] В некоторых примерах реализациях, кодер проверяет значение BV, рассматривая порядки z-сканирования текущего блока и блока, который содержит нижнее правое положение области-кандидата внутреннего предсказания. Более конкретно, кодер, что порядок z-сканирования блока, содержащего положение (x0+BV[0]+m-1, y0+BV[1]+n-1), меньше, чем порядок z-сканирования блока, содержащего (x0, y0). Если это так, блок, который содержит нижнее правое положение области внутреннего предсказания, был ранее восстановлен (и, следовательно, таким образом имеет оставшуюся часть области внутреннего предсказания). BV также удовлетворяет по меньшей мере одному из условий BV[0]+m≤0 и BV[1]+n≤0, гарантируя, что область внутреннего предсказания не перекрывает текущий блок.
[0235] Порядок z-сканирования следует за последовательно заданным упорядочиванием блоков, которые разделяют изображение. Фигура 23 показывает пример порядка (2300) z-сканирования для текущего блока (2330) и блоков, которые могут включать в себя нижнее правое положение области внутреннего предсказания для кандидата BV. Текущий блок (2330) может быть CB, PB или другим блоком. Порядки z-сканирования, как правило, назначаются блокам последовательно слева направо в строке, повторяя в последовательных строках сверху вниз. Когда блок разделен, порядки z-сканирования назначаются внутри разделенного блока рекурсивно. Для реализаций кодирования/декодирования для стандарта HEVC, порядок z-сканирования проходит CTB-к-CTB по шаблону растрового сканирования CTB (слева направо в строке CTB, повторяя в последовательных строках CTB сверху вниз). Если CTB разделен, порядок z-сканирования следует шаблону растрового сканирования для CB квадродерева в разделенном CTB. И, если CB разделен (например, на несколько CB или несколько PB), порядок z-сканирования следует шаблону растрового сканирования для блоков в разделенном CB.
[0236] Альтернативно, когда внутреннее предсказание BC может быть выполнено на основе TB-за-TB, кодер и декодер могут проверить на предмет возможного перекрытия между областью внутреннего предсказания и текущим блоком (TB), затем использовать результаты проверки, чтобы решить, должен ли текущий TB быть разделен на более мелкие TB для применения операций внутреннего предсказания BC. Предположим, текущий TB имеет размер m×n, где m и n могут быть равны друг другу или могут иметь разные значения. Если BV[0]>-m и BV[1]>-n, область внутреннего предсказания перекрывает текущий TB m×n, что является проблематичным, если текущий TB m×n не разделен на более мелкие TB для применения операций внутреннего предсказания BC. Таким образом, если BV[0]>-m и BV[1]>-n, кодер и декодер разделяют текущий TB на более мелкие TB. То же условие проверяется (например, проверяется рекурсивно) для более мелких TB, которые могут быть дополнительно разделены, если BV[0]>-m и BV[1]>-n даже для меньших значений m и n после разделения.
[0237] Например, предположим, что BV для РВ равно (-9, -5), и текущий TB представляет собой блок 32××32. Кодер и декодер определяют, что -9>-32 и -5>-32, указывая, что область внутреннего предсказания (чей левый верхний угол смещен -9, -5) будет перекрывать текущий TB 32×32. Кодер и декодер разделяют TB 32×32 на четыре TB 16×16. Для каждого из TB 16×16, кодер и декодер определяют, что -9>-16 и -5>-16, указывая, что область внутреннего предсказания (чей левый верхний угол смещен -9, -5) будет перекрывать текущий TB 16×16. Кодер и декодер разделяют каждый TB 16×16, последовательно, на четыре TB 8×8. Для TB 8×8, BV из (-9, -5) не является проблематичным, поэтому TB 8×8 не вынужден быть дополнительно разделен.
[0238] В этом сценарии, когда TB разделяется из-за значения BV и размера TB, кодер может пропустить передачу сигнала значения флага, который в противном случае передал бы сигнал, разделять ли текущий TB на более мелкие TB. Битовому потоку закодированных данных не хватает значения флага, предписывающего декодеру разделить текущий TB на более мелкие TB. Вместо этого, декодер может сделать вывод, что TB должен быть разделен из-за значения BV и размера TB. Это может сэкономить биты, которые иначе были бы потрачены на передачу информации о разделении TB.
[0239] Как часть оценки BV, кодер может использовать любой из нескольких подходов. Кодер может использовать полный поиск, оценивая каждое значения кандидата BV, разрешенное в диапазоне поиска. Или, кодер может использовать частичный поиск, оценивая только некоторые из значений кандидатов BV, разрешенных в диапазоне поиска. Например, кодер может начать частичный поиск c предсказанного значения BV для текущего блока (например, предсказанного на основе значений BV одного или нескольких соседних блоков). После оценки значения кандидата BV в начальном положении для частичного поиска, кодер может оценить одно или более других значений кандидатов BV на увеличивающихся расстояниях от начального положения (например, в соответствии со схемой спирального поиска или какой-либо другой схемой). Или, кодер может использовать схему поиска, как описано в предыдущем разделе. При оценке заданного значения кандидата BV, кодер может сравнить все выборочные значения в области внутреннего предсказания и текущего блока. Или, кодер может оценить подмножество выборочных значений (то есть, подвыборки, чьи значения оцениваются). При сравнении выборочных значений между областью внутреннего предсказания и текущим блоком для определения стоимости искажения, кодер может вычислить среднюю квадратичную ошибку, сумму квадратов разностей ("SSD"), сумму абсолютных разностей ("SAD") и некоторую другую меру искажения. Кодер также может определить стоимость битовой скорости, связанную с кодированием значения кандидата BV.
XI. АЛЬТЕРНАТИВЫ И ВАРИАЦИИ
[0240] Во многих примерах, описанных в материалах настоящей заявки, внутреннее предсказание ВС и компенсация движения реализованы в отдельных компонентах или процессах, и оценка BV и оценка движения реализованы в отдельных компонентах или процессах. Альтернативно, внутреннее предсказание BC может быть реализовано как частный случай компенсации движения, и оценка BV может быть реализована как частный случай оценки движения, для которой текущее изображение используется в качестве опорного изображения. В таких реализациях, значение BV может быть передано как значение MV, но использоваться для внутреннего предсказания BC (в пределах текущего изображения), а не предсказания между изображениями. Поскольку этот термин используется в материалах настоящей заявки, «внутреннее предсказание BC» указывает предсказание внутри текущего изображения, предоставлено ли это предсказание с помощью модуля предсказания внутри изображения, модуля компенсации движения или какого-либо другого модуля. Подобным образом, значение BV может быть представлено с использованием значения MV или с использованием определенного типа параметра или синтаксического элемента, и оценка BV может быть предоставлена с использованием модуля оценки внутри изображения, модуля оценки движения или какого-либо другого модуля.
[0241] Принимая во внимание множество вероятных вариантов осуществления, к которым могут быть применены принципы раскрытого изобретения, следует учитывать, что проиллюстрированные варианты осуществления являются лишь предпочтительными примерами изобретения и не должны восприниматься как ограничивающие область применения изобретения. Вместо этого, объем настоящего изобретения определяется следующей формулой изобретения. Поэтому мы заявляем наше изобретение в формуле в рамках области применения и духа этой формулы.