ПЕРЕКРЕСТНАЯ ССЫЛКА НА СВЯЗАННЫЕ ЗАЯВКИ
Эта патентная заявка испрашивает приоритет заявки PCT/EP2020/051788, поданной 24 января 2020 г. Раскрытие вышеупомянутой патентной заявки включается в данный документ путем ссылки в полном объеме.
ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Варианты осуществления настоящей заявки (раскрытие) в целом относятся к области обработки изображений и, более конкретно, к адаптивной контурной фильтрации.
УРОВЕНЬ ТЕХНИКИ
Видеокодирование (кодирование и декодирование видео) используется в широком диапазоне применений цифрового видео, например, в широковещательном цифровом телевидении, передаче видео через Интернет и мобильные сети, в диалоговых приложениях в реальном времени, таких как видеочат, видеоконференцсвязь, DVD и Blu-Ray диски, системы сбора и редактирования видеоконтента и видеокамеры приложений безопасности.
Объем видеоданных, необходимых для представления даже относительно короткого видео, может быть значительным, что может привести к трудностям, когда эти данные должны передаваться в потоковом режиме или иным образом передаваться по сети связи с ограниченной пропускной способностью. Таким образом, видеоданные, как правило, сжимаются перед тем, как передаваться через современные телекоммуникационные сети. Размер видео также может быть проблемой, когда видео хранится на запоминающем устройстве, поскольку ресурсы памяти могут быть ограничены. Устройства сжатия видео часто используют программное и/или аппаратное обеспечение в источнике для кодирования видеоданных перед передачей или хранением, тем самым уменьшая количество данных, необходимых для представления цифровых видеоизображений. Сжатые данные затем принимаются устройством декомпрессии видео получателя, которое декодирует видеоданные. С ограниченными сетевыми ресурсами и постоянно растущими требованиями к более высокому качеству видео, желательны улучшенные способы сжатия и декомпрессии, которые улучшают степень сжатия с минимальными потерями качества изображения или вообще без таких потерь.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Варианты осуществления настоящей заявки обеспечивают устройства и способы для кодирования и декодирования согласно независимым пунктам формулы изобретения.
Вышеупомянутые и другие цели достигаются изобретением по независимым пунктам формулы изобретения. Дополнительные формы осуществления очевидны из зависимых пунктов формулы изобретения, описания и чертежей.
Конкретные варианты осуществления изложены в прилагаемых независимых пунктах формулы изобретения, а другие варианты осуществления - в зависимых пунктах формулы изобретения.
Первый аспект настоящего изобретения обеспечивает способ фильтрации значения выборки изображения, при этом способ содержит: получение восстановленного значения выборки для блока изображения; получение коэффициентов фильтра для адаптивной контурной фильтрации в соответствии с битовым потоком;
получение значения суммы согласно коэффициентам фильтра и восстановленному значению выборки для блока; округление значения суммы в соответствии с вертикальным положением выборки в блоке для получения округленного значения суммы; получение восстановленного фильтром значения выборки для блока в соответствии с округленным значением суммы.
Согласно вариантам осуществления настоящего изобретения во время процесса фильтрации ALF используется значение округления, соответствующее значению сдвига вправо. Это решение обеспечивает преимущество, заключающееся в том, что фильтрация ALF является точной и последовательной по сравнению с другими этапами фильтрации.
В одной реализации округленное значение суммы равно (sum + (1 << (alfShiftY - 1))) >> alfShiftY, где sum - значение суммы, alfShiftY - переменная, определенная на основе вертикального положения выборки.
В одной реализации alfShiftY равно 10, когда вертикальное положение выборки удовлетворяет любому из следующих условий:
y==CtbSizeY - t-1, или y==CtbSizeY - t, или y==ctbHeightC - t, или y==ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В одной реализации alfShiftY равно 7, когда вертикальное положение выборки не удовлетворяет ни одному из следующих условий:
y==CtbSizeY-t-1, или y==CtbSizeY-t, или y == ctbHeightC-t,или y == ctbHeightC-t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В одной реализации, когда y равно 0, alfShiftY равно 10.
В одной реализации, когда y не равно 0, alfShiftY равно 7.
В одной реализации вертикальное положение выборки в блоке представляет собой положение выборки цветности или положение выборки яркости.
В одной реализации процесс округления содержит: прибавление значения, которое определяется на основе вертикального положения, к значению суммы для получения добавленного значения суммы и сдвиг добавленного значения суммы на основе вертикального положения.
В одной реализации получение восстановленного фильтром значения выборки для блока в соответствии с округленным значением суммы содержит: получение восстановленного фильтром значения выборки для блока в соответствии с округленным значением суммы и восстановленным значением выборки для блока.
В одной реализации блок представляет собой блок дерева кодирования.
Второй аспект настоящего изобретения обеспечивает устройство декодирования видео, содержащее: модуль восстановления, который выполнен с возможностью получения восстановленного значения выборки для блока изображения; модуль синтаксического анализа, который выполнен с возможностью получения коэффициентов фильтра для адаптивной контурной фильтрации в соответствии с битовым потоком; модуль вычисления, который выполнен с возможностью получения значения суммы согласно коэффициентам фильтра и восстановленному значению выборки для блока; модуль округления, выполненный с возможностью округления значения суммы в соответствии с вертикальным положением выборки в блоке для получения округленного значения суммы; модуль фильтрации, который выполнен с возможностью получения восстановленного фильтром значения выборки для блока в соответствии с округленным значением суммы.
Согласно вариантам осуществления настоящего изобретения во время процесса фильтрации ALF используется значение округления, соответствующее значению сдвига вправо. Это решение обеспечивает преимущество, заключающееся в том, что фильтрация ALF является точной и последовательной по сравнению с другими этапами фильтрации.
В одной реализации округленное значение суммы равно (sum+(1<<(alfShiftY-1)))>>alfShiftY, где sum - значение суммы, alfShiftY - переменная, определенная на основе вертикального положения выборки.
В одной реализации alfShiftY равно 10, когда вертикальное положение выборки удовлетворяет любому из следующих условий:
y== CtbSizeY - t-1, или y== CtbSizeY - t, или y== ctbHeightC - t, или y== ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В одной реализации alfShiftY равно 7, когда вертикальное положение выборки не удовлетворяет ни одному из следующих условий:
y== CtbSizeY - t-1, или y== CtbSizeY - t, или y== ctbHeightC - t, или y== ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В одной реализации, когда y равно 0, alfShiftY равно 10.
В одной реализации, когда y не равно 0, alfShiftY равно 7.
В одной реализации вертикальное положение выборки в блоке представляет собой положение выборки цветности или положение выборки яркости.
В одной реализации модуль округления выполнен с возможностью
добавления значения, которое определено на основе вертикального положения, к значению суммы для получения добавленного значения суммы и сдвига добавленного значения суммы на основе вертикального положения для получения округленного значения суммы.
Третий аспект настоящего изобретения обеспечивает декодер, содержащий схему обработки для осуществления способа в соответствии с первым аспектом и любой из реализаций первого аспекта.
Четвертый аспект настоящего изобретения обеспечивает компьютерный программный продукт, содержащий программный код для выполнения способа согласно первому аспекту, третьему аспекту и любой реализации первого аспекта, третьего аспекта при выполнении на компьютере или процессоре.
Пятый аспект настоящего изобретения обеспечивает декодер, содержащий: один или более процессоров; и не-кратковременный считываемый компьютером носитель данных, соединенный с процессорами и хранящий программу для выполнения процессорами, при этом программа, когда она выполняется процессорами, конфигурирует декодер для выполнения способа согласно любому из первого аспекта, третьего аспекта и любого варианта реализации первого аспекта, третьего аспекта.
Шестой аспект настоящего изобретения обеспечивает не-кратковременный считываемый компьютером носитель, содержащий программный код, который при выполнении компьютерным устройством предписывает компьютерному устройству выполнять способ в соответствии с любым из первого аспекта, третьего аспекта и любой из вариантов реализации первого аспекта, третьего аспекта.
Седьмой аспект настоящего изобретения обеспечивает не-кратковременный носитель данных, содержащий битовый поток, кодированный/декодированный способом любого из вышеприведенных вариантов осуществления.
Восьмой аспект настоящего изобретения обеспечивает кодированный битовый поток для видеосигнала посредством включения множества синтаксических элементов, при этом множество синтаксических элементов содержит параметр управления деблокированием для компонента цветности, который условно сигнализируется по меньшей мере на основе значения синтаксического элемента, при этом значение синтаксического элемента связано с параметром управления деблокирования для компонента цветности слайса кодированного изображения.
Способ согласно первому аспекту изобретения может быть выполнен устройством согласно второму аспекту изобретения. Дальнейшие признаки и формы реализации способа согласно первому аспекту изобретения соответствуют признакам и формам реализации устройства согласно второму аспекту изобретения.
Подробности одного или более вариантов осуществления изложены на прилагаемых чертежах и в нижеследующем описании. Другие особенности, цели и преимущества будут очевидны из описания, чертежей и формулы изобретения.
Девятый аспект настоящего изобретения обеспечивает способ фильтрации значения выборки изображения, при этом способ содержит: получение значения выборки для блока изображения; получение коэффициентов фильтра для адаптивной контурной фильтрации;
получение значения суммы согласно коэффициентам фильтра и значению выборки для блока; округление значения суммы в соответствии с вертикальным положением выборки в блоке для получения округленного значения суммы; получение значения выборки фильтра для блока в соответствии с округленным значением суммы; кодирование значения выборки фильтра для блока для получения битового потока.
Согласно вариантам осуществления настоящего изобретения во время процесса фильтрации ALF используется значение округления, соответствующее значению сдвига вправо. Это решение обеспечивает преимущество, заключающееся в том, что фильтрация ALF является точной и последовательной по сравнению с другими этапами фильтрации.
В одной реализации округленное значение суммы равно (sum + (1 << (alfShiftY - 1))) >> alfShiftY, где sum - значение суммы, alfShiftY - переменная, определенная на основе вертикального положения выборки.
В одной реализации alfShiftY равно 10, когда вертикальное положение выборки удовлетворяет любому из следующих условий:
y== CtbSizeY - t-1, или y== CtbSizeY - t, или y== ctbHeightC - t, или y== ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В одной реализации alfShiftY равно 7, когда вертикальное положение выборки не удовлетворяет ни одному из следующих условий:
y== CtbSizeY - t-1, или y== CtbSizeY - t, или y== ctbHeightC - t, или y== ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В одной реализации, когда y равно 0, alfShiftY равно 10.
В одной реализации, когда y не равно 0, alfShiftY равно 7.
В одной реализации вертикальное положение выборки в блоке представляет собой положение выборки цветности или положение выборки яркости.
В одной реализации процесс округления содержит: добавление значения, которое определяется на основе вертикального положения, к значению суммы для получения добавленного значения суммы и сдвиг добавленного значения суммы на основе вертикального положения.
В одной реализации получение значения выборки фильтра для блока в соответствии с округленным значением суммы содержит: получение значения выборки фильтра для блока в соответствии с округленным значением суммы и значением выборки для блока.
В одной реализации блок представляет собой блок дерева кодирования.
Десятый аспект настоящего изобретения обеспечивает устройство кодирования видео, устройство содержит: модуль получения, который выполнен с возможностью получения значения выборки для блока изображения; модуль получения выполнен с возможностью получения коэффициентов фильтра для адаптивной контурной фильтрации; модуль вычисления, который выполнен с возможностью получения значения суммы согласно коэффициентам фильтра и значению выборки для блока; модуль округления, выполненный с возможностью округления значения суммы в соответствии с вертикальным положением выборки в блоке для получения округленного значения суммы; модуль фильтрации, который выполнен с возможностью получения значения выборки фильтра для блока в соответствии с округленным значением суммы; модуль формирования битового потока, который выполнен с возможностью кодирования значения выборки фильтра для получения битового потока.
Согласно вариантам осуществления настоящего изобретения во время процесса фильтрации ALF используется значение округления, соответствующее значению сдвига вправо. Это решение обеспечивает преимущество, заключающееся в том, что фильтрация ALF является точной и последовательной по сравнению с другими этапами фильтрации.
В одной реализации округленное значение суммы равно (sum + (1 << (alfShiftY - 1))) >> alfShiftY, где sum - значение суммы, alfShiftY - переменная, определенная на основе вертикального положения выборки.
В одной реализации alfShiftY равно 10, когда вертикальное положение выборки удовлетворяет любому из следующих условий:
y== CtbSizeY - t-1, или y== CtbSizeY - t, или y== ctbHeightC - t, или y== ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В одной реализации alfShiftY равно 7, когда вертикальное положение выборки не удовлетворяет ни одному из следующих условий:
y== CtbSizeY - t-1, или y== CtbSizeY - t, или y== ctbHeightC - t, или y== ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В одной реализации, когда y равно 0, alfShiftY равно 10.
В одной реализации, когда y не равно 0, alfShiftY равно 7.
В одной реализации вертикальное положение выборки в блоке представляет собой положение выборки цветности или положение выборки яркости.
В одной реализации модуль округления выполнен с возможностью прибавления значения, которое определяется на основе вертикального положения, к значению суммы для получения добавленного значения суммы и сдвига добавленного значения суммы на основе вертикального положения для получения округленного значения суммы.
Одиннадцатый аспект настоящего изобретения обеспечивает кодер, содержащий схему обработки для осуществления способа в соответствии с девятым аспектом и любой из реализаций девятого аспекта.
Двенадцатый аспект настоящего изобретения обеспечивает компьютерный программный продукт, содержащий программный код для выполнения способа согласно девятому аспекту, третьему аспекту и любой реализации девятого аспекта при выполнении на компьютере или процессоре.
Тринадцатый аспект настоящего изобретения обеспечивает кодер, содержащий: один или более процессоров; и не-кратковременный считываемый компьютером носитель данных, соединенный с процессорами и хранящий программу для выполнения процессорами, при этом программа, когда она выполняется процессорами, конфигурирует кодер для выполнения способа согласно любому из девятого аспекта, третий аспект и любой вариант реализации девятого аспекта.
Четырнадцатый аспект настоящего изобретения обеспечивает не-кратковременный считываемый компьютером носитель, содержащий программный код, который при выполнении компьютерным устройством предписывает компьютерному устройству выполнять способ в соответствии с любым из девятого аспекта и любой из реализаций девятого аспекта.
Пятнадцатый аспект настоящего изобретения обеспечивает не-кратковременный носитель данных, содержащий битовый поток, кодированный/декодированный способом любого из вышеприведенных вариантов осуществления.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
В следующих вариантах осуществления изобретения описаны более подробно со ссылкой на сопровождающие фигуры и чертежи, на которых:
Фиг. 1A является блок-схемой, иллюстрирующей пример системы видеокодирования, выполненной с возможностью реализации вариантов осуществления изобретения;
Фиг. 1B является блок-схемой, показывающей другой пример системы видеокодирования, выполненной с возможностью реализации вариантов осуществления изобретения;
Фиг. 2 является блок-схемой, иллюстрирующей пример видеокодера, выполненного с возможностью реализации вариантов осуществления изобретения;
Фиг. 3 является блок-схемой, иллюстрирующей пример структуры видеодекодера, выполненного с возможностью реализации вариантов осуществления изобретения;
Фиг. 4 является блок-схемой, иллюстрирующей пример устройства кодирования или устройства декодирования;
Фиг. 5 является блок-схемой, иллюстрирующей другой пример устройства кодирования или устройства декодирования;
Фиг. 6-22 схематично иллюстрируют примеры вариантов осуществления изобретения;
Фиг. 23 является блок-схемой, показывающей примерную структуру системы 3100 доставки контента, которая реализует услугу доставки контента;
Фиг. 24 является блок-схемой, показывающей структуру примерного терминального устройства.
Фиг. 25 является блок-схемой последовательности операций, показывающей вариант осуществления способа согласно настоящему изобретению.
Фиг. 26 является блок-схемой, показывающей вариант осуществления устройства согласно настоящему изобретению.
Следующие одинаковые ссылочные позиции относятся к идентичным или, по меньшей мере, функционально эквивалентным функциям, если явно не указано иное.
ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ
В нижеследующем описании делается ссылка на сопроводительные чертежи, которые составляют часть данного раскрытия и которые показывают, в качестве иллюстрации, конкретные аспекты вариантов осуществления изобретения или конкретные аспекты, в которых варианты осуществления настоящего изобретения могут быть использованы. Понятно, что варианты осуществления данного изобретения могут быть использованы в других аспектах и содержат структурные или логические изменения, не показанные на чертежах. Поэтому нижеследующее подробное описание не следует воспринимать в ограничивающем смысле, и объем настоящего изобретения определяется прилагаемой формулой изобретения.
Например, понятно, что раскрытие, связанное с описанным способом, также может быть справедливо для соответствующего устройства или системы, выполненных с возможностью выполнения способа, и наоборот. Например, если описаны один или более конкретных этапов способа, соответствующее устройство может включать в себя один или более блоков, например, функциональных блоков, для выполнения описанного одного или более этапов способа (например, один блок, выполняющий один или множество этапов, или множество блоков, каждый из которых выполняет один или более из множества этапов), даже если такие один или более блоков явно не описаны или не показаны на чертежах. (например, один блок, выполняющий один или множество этапов, или множество блоков, каждый из которых выполняет один или более из множества этапов), даже если такой один или более блоков явно не описаны или не проиллюстрированы на чертежах. С другой стороны, например, если конкретное устройство описано на основе одного или множества блоков, например функциональных блоков, соответствующий способ может включать в себя один этап для выполнения функциональных возможностей одного или множества блоков (например, один этап, выполняющий функциональные возможности одного или множества блоков, или множество этапов, каждый из которых выполняет функциональные возможности одного или более из упомянутого множества блоков), даже если такой один или множество этапов не описаны явным образом или не проиллюстрированы на чертежах. Кроме того, понятно, что признаки различных примерных вариантов осуществления и/или аспектов, описанных в данном документе, могут быть объединены друг с другом, если специально не указано иное.
Видеокодирование обычно относится к обработке последовательности изображений, которые образуют видео или видеопоследовательность. Вместо термина «изображение» термины «кадр» или «картинка» могут использоваться как синонимы в области видеокодирования. Видеокодирование (или кодирование (coding) в целом) содержит две части: видеокодирование (video encoding) и видеодекодирование. Кодирование видео выполняется на стороне источника и обычно включает в себя обработку (например, путем сжатия) исходных видеоизображений для уменьшения количества данных, необходимых для представления видеоизображений (для более эффективного хранения и/или передачи). Видеодекодирование выполняется на стороне получателя (адресата) и обычно содержит обратную обработку по сравнению с кодером для восстановления видеоизображений. Варианты осуществления, относящиеся к «кодированию» видеоизображений (или изображений в целом), должны пониматься как относящиеся к «кодированию» или «декодированию» видеоизображений или соответствующих видеопоследовательностей. Комбинация кодирующей части и декодирующей части также называется кодек (кодирование и декодирование).
В случае видеокодирования без потерь исходные видеоизображения могут быть восстановлены, т.е. восстановленные видеоизображения имеют такое же качество, что и исходные видеоизображения (при условии отсутствия потерь передачи или других потерь данных во время хранения или передачи). В случае кодирования видео с потерями выполняется дополнительное сжатие, например, квантованием, чтобы уменьшить количество данных, представляющих видеоизображения, которые не могут быть полностью восстановлены в декодере, т.е. качество восстановленных видеоизображений ниже или хуже по сравнению с качеством исходных видеоизображений.
Несколько стандартов видеокодирования принадлежат к группе «гибридных видеокодеков с потерями» (т.е. сочетают пространственное и временное предсказание в области выборки и кодирование с 2D преобразованием для применения квантования в области преобразования). Каждое изображение видеопоследовательности обычно разделяется на набор неперекрывающихся блоков, и кодирование обычно выполняется на уровне блоков. Несколько стандартов видеокодирования принадлежат к группе «гибридных видеокодеков с потерями» (т.е. сочетают пространственное и временное предсказание в области выборки и кодирование с D преобразованием для применения квантования в области преобразования). Каждое изображение видеопоследовательности обычно разделяется на набор неперекрывающихся блоков, и кодирование обычно выполняется на уровне блоков. Другими словами, в кодере видео обычно обрабатывается, то есть кодируется, на уровне блока (видеоблока), например с использованием пространственного (внутри изображения) предсказания и/или временного (между изображениями) предсказания для формирования блока предсказания, блок предсказания вычитается из текущего блока (блока, который в настоящее время обрабатывается/подлежит обработке) для получения остаточного блока, остаточный блок преобразуется и этот остаточный блок квантуется в области преобразования для сокращения объема данных (сжатия), которые подлежат передаче, тогда как в декодере обратная обработка по сравнению с кодером применяется к кодированному или сжатому блоку для восстановления текущего блока для представления. Кроме того, кодер дублирует цикл обработки декодера, так что оба будут формировать идентичные предсказания (например, внутрикадровое и межкадровое предсказания) и/или реконструировать для обработки, т.е. кодирования, последующих блоков.
В нижеследующих вариантах осуществления системы 10 видеокодирования, видеокодер 20 и видеодекодер 30 описаны на основе Фиг. 1-3.
Фиг. 1A представляет собой схематическую блок-схему, иллюстрирующую примерную систему 10 кодирования, например, систему 10 кодирования видео (или систему 10 короткого кодирования), которая может использовать методики настоящей заявки. Видеокодер 20 (или сокращенно кодер 20) и видеодекодер 30 (или сокращенно декодер 30) системы 10 видеокодирования представляют примеры устройств, которые могут быть выполнены с возможностью выполнения методов в соответствии с различными примерами, описанными в настоящей заявке.
Как показано на фиг. 1A, система 10 кодирования содержит устройство-источник 12, выполненное с возможностью предоставления кодированных данных 21 изображения, например, устройству-получателю 14 для декодирования декодированных данных 13 изображения.
Устройство-источник 12 содержит кодер 20 и может дополнительно, т.е. необязательно, содержать источник 16 изображений, препроцессор (или блок предварительной обработки) 18, например, препроцессор 18 изображений, и интерфейс связи или блок 22 связи.
Источник 16 изображений может содержать или быть устройством захвата изображений любого типа, например камерой для захвата изображения реального мира, и/или устройством формирования изображений любого типа, например процессором компьютерной графики для формирования компьютерного анимированного изображения, или любым другим типом устройства для получения и/или предоставления изображения реального мира, формируемого компьютером изображения (например, содержимого экрана, изображения виртуальной реальности (VR)) и/или любой их комбинации (например, изображения дополненной реальности (AR)). Источником изображения может быть любой тип памяти или хранилища, в котором хранятся любые из вышеупомянутых изображений.
В отличие от препроцессора 18 и обработки, выполняемой посредством блока 18 предварительной обработки, изображение или данные 17 изображения также могут именоваться необработанным (raw) изображением или необработанными данными 17 изображения.
Препроцессор 18 выполнен с возможностью приема (необработанных) данных 17 изображения и выполнения предварительной обработки в отношении этих данных 17 изображения для получения предварительно обработанного изображения 19 или предварительно обработанных данных 19 изображения. Предварительная обработка, выполняемая препроцессором 18, может, например, включать в себя обрезку, преобразование цветового формата (например, из RGB в YCbCr), коррекцию цвета или удаление шума. Можно понять, что блок 18 предварительной обработки может быть необязательным компонентом.
Видеокодер 20 выполнен с возможностью приема предварительно обработанных данных 19 изображения и предоставления кодированных данных 21 изображения (дополнительные подробности будут описаны ниже, например, на основе Фиг. 2).
Интерфейс связи 22 устройства-источника 12 может быть выполнен с возможностью приема кодированных данных 21 изображения и передачи кодированных данных 21 изображения (или любой их дополнительной обработанной версии) по каналу 13 связи на другое устройство, например, на устройство-получатель 14 или любое другое устройство, для хранения или непосредственного восстановления.
Устройство-получатель 14 содержит декодер 30 (например, видеодекодер 30) и может дополнительно, т.е. необязательно, содержать интерфейс связи или блок 28 связи, постпроцессор 32 (или блок 32 постобработки) и устройство отображения 34.
Интерфейс 28 связи устройства-получателя 14 выполнен с возможностью приема кодированных данных 21 изображения (или любой их дополнительно обработанной версии), например, непосредственно от устройства-источника 12 или из любого другого источника, например, запоминающего устройства, например, устройства хранения кодированных данных изображения и предоставления кодированных данных 21 изображения в декодер 30.
Интерфейс 22 связи и интерфейс 28 связи могут быть выполнены с возможностью передачи или приема кодированных данных 21 изображения или кодированных данных 13 через прямую линию связи между устройством-источником 12 и устройством-получателем 14, например, через прямое проводное или беспроводное соединение, или через сеть любого типа, например, проводную или беспроводную сеть или любую их комбинацию, или любую частную и общедоступную сеть, или любую их комбинацию.
Интерфейс 22 связи может быть, например, выполнен с возможностью упаковки кодированных данных 21 изображения в соответствующий формат, например, в пакеты, и/или обработки кодированных данных изображения с использованием любого типа кодирования передачи или обработки для передачи по линии связи или сети связи.
Интерфейс 28 связи, являющийся аналогом интерфейса 22 связи, может быть, например, выполнен с возможностью приема переданных данных и обработки данных передачи с использованием любого вида соответствующего декодирования или обработки и/или распаковки передачи для получения кодированных данных 21 изображения.
Как интерфейс 22 связи, так и интерфейс 28 связи могут быть сконфигурированы как однонаправленные интерфейсы связи, как показано стрелкой для канала 13 связи на фиг. 1A, указывающей от устройства-источника 12 к устройству-получателю 14, или двунаправленные интерфейсы связи, и могут быть сконфигурированы, например, для отправки и приема сообщений, например, для установки соединения, для подтверждения и обмена любой другой информацией, относящейся к линии связи и/или передаче данных, например, к передаче кодированных данных изображения.
Декодер 30 выполнен с возможностью приема кодированных данных 21 изображения и предоставления декодированных данных 31 изображения или декодированного изображения 31 (дополнительные подробности будут описаны ниже, например, на основе Фиг. 3 или Фиг. 5).
Постпроцессор 32 устройства-получателя 14 выполнен с возможностью постобработки декодированных данных 31 изображения (также называемых данными восстановленного изображения), например декодированного изображения 31, для получения данных 33 изображения постобработки, например, постобработанного изображения 33. Постобработка, выполняемая блоком 32 постобработки, может содержать, например, преобразование цветового формата (например, из YCbCr в RGB), коррекцию цвета, обрезку или повторную выборку или любую другую обработку, например, для подготовки декодированных данных 31 изображения для отображения, например, устройством 34 отображения.
Устройство 34 отображения устройства-получателя 14 выполнено с возможностью приема данных 33 изображения после обработки для отображения изображения, например, пользователю или зрителю. Устройство 34 отображения может быть или содержать любой вид дисплея для представления восстановленного изображения. Дисплеи могут, например, включать жидкокристаллические дисплеи (LCD), дисплеи на органических светоизлучающих диодах (OLED), плазменные дисплеи, проекторы, микросветодиодные дисплеи, жидкокристаллические дисплеи на кремнии (LCoS), цифровой световой процессор (DLP) или дисплей любого другого вида.
Хотя Фиг. 1A иллюстрирует устройство-источник 12 и устройство-получатель 14 как отдельные устройства, варианты осуществления устройств также могут содержать обе или обе функциональные возможности, устройство-источник 12 или соответствующую функциональную возможность и устройство-получатель 14 или соответствующую функциональную возможность. В таких вариантах осуществления устройство-источник 12 или соответствующая функциональная возможность и устройство-получатель 14 или соответствующая функциональная возможность могут быть реализованы с использованием одного и того же аппаратного и/или программного обеспечения или с помощью отдельного аппаратного и/или программного обеспечения или любой их комбинации.
Как будет очевидно для специального элемента на основании описания, наличие и (конкретное) разделение функциональных возможностей различных блоков или функций в устройстве-источнике 12 и/или устройстве-получателе 14, как показано на Фиг. 1A, может варьироваться в зависимости от фактического устройства и применения.
Кодер 20 (например, видеокодер 20) или декодер 30 (например, видеодекодер 30) или и кодер 20, и декодер 30 могут быть реализованы через схему обработки, как показано на фиг. 1B, такую как один или более микропроцессоров, цифровых сигнальных процессоров (DSP), специализированных интегральных схем (ASIC), программируемых вентильных матрицы (FPGA), дискретной логики, аппаратного обеспечения, выделенного кодирования видео или любых их комбинаций. Кодер 20 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении кодера 20 с фиг. 2 и/или любой другой системы кодера или подсистемы, описанной в данном документе. Декодер 30 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении декодера 30 с фиг. 3 и/или любой другой системы декодера или подсистемы, описанной в данном документе. Схема обработки может быть выполнена с возможностью выполнения различных операций, которые будут описаны ниже. Как показано на фиг. 5, если методики частично реализованы в программном обеспечении, устройство может хранить инструкции для программного обеспечения на подходящем не-кратковременном считываемом компьютером носителе данных и может выполнять инструкции в аппаратных средствах, используя один или более процессоров для выполнения методик этого раскрытия. Любой из видеокодера 20 и видеодекодера 30 может быть интегрирован как часть объединенного кодера/декодера (CODEC) в одном устройстве, например, как показано на фиг. 1B.
Устройство-источник 12 и устройство-получатель 14 могут содержать любое из широкого диапазона устройств, в том числе любые виды портативных или стационарных устройств, например ноутбуки или портативные компьютеры, мобильные телефоны, смартфоны, планшеты или планшетные компьютеры, камеры, настольные компьютеры, телевизионные приставки, телевизоры, устройства отображения, цифровые медиаплееры, игровые консоли, устройства потоковой передачи видео (например, серверы служб контента или серверы доставки контента), широковещательное приемное устройство, широковещательное передающее устройство или подобное, и могут использовать операционную систему любого типа или обходиться без нее. В некоторых случаях устройство-источник 12 и устройство-получатель 14 могут быть оборудованы для беспроводной связи. Таким образом, устройство-источник 12 и устройство-получатель 14 могут быть устройствами беспроводной связи.
В некоторых случаях система 10 кодирования видео, проиллюстрированная на фиг. 1A, является лишь примером, а способы настоящей заявки могут применяться к настройкам кодирования видео (такого как кодирование видео или декодирование видео), которые не обязательно включают в себя передачу каких-либо данных между устройствами кодирования и декодирования. В других примерах данные извлекаются из локальной памяти, передаются в потоковом режиме по сети или подобное. Устройство кодирования видео может кодировать и сохранять данные в память, и/или устройство видеодекодирования может извлекать и декодировать данные из памяти. В некоторых примерах кодирование и декодирование выполняется устройствами, которые связь друг с другом не осуществляют, а просто кодируют данные в память и/или извлекают и декодируют данные из памяти.
Для удобства описания здесь описаны варианты осуществления данного изобретения, например, со ссылкой на высокоэффективное кодирование видео (HEVC) или на эталонное программное обеспечение универсального кодирования видео (VVC), стандарт кодирования видео следующего поколения, разрабатываемый объединенной группой сотрудничества по кодированию видео (JCT-VC) экспертной группы по кодированию видео ITU-T (VCEG) и экспертной группой по движущимся изображениям ISO/IEC (MPEG). Специалист в данной области техники поймет, что варианты осуществления данного изобретения не ограничиваются HEVC или VVC.
Кодер и способ кодирования
Фиг. 2 показывает схематичное блочное представление примерного видеокодера 20, который выполнен с возможностью реализации способов настоящей заявки. В примере на фиг. 2 видеокодер 20 содержит ввод 201 (или входной интерфейс 201), блок 204 вычисления остатка, блок 206 обработки преобразования, блок 208 квантования, блок 210 обратного квантования и блок 212 обработки обратного преобразования, блок 214 восстановления, блок 220 контурного фильтра, буфер 230 (DPB) декодированных изображений, блок 260 выбора режима, блок 270 энтропийного кодирования и вывод 272 (или выходной интерфейс 272). Блок 260 выбора режима может включать в себя блок 244 межкадрового предсказания, блок 254 внутрикадрового предсказания и блок 262 разделения. Блок 244 межкадрового предсказания может включать в себя блок оценки движения и блок компенсации движения (не показаны). Видеокодер 20, показанный на фиг. 2, также может называться гибридным видеокодером или видеокодером согласно гибридному видеокодеку.
Блок 204 вычисления остатка, блок 206 обработки преобразования, блок 208 квантования, блок 260 выбора режима могут относится к формированию прямого пути прохождения сигнала кодера 20, тогда как блок 210 обратного квантования, блок 212 обработки обратного преобразования, блок 214 восстановления, буфер 216, контурный фильтр 220, буфер 230 (DPB) декодированных изображений, блок 244 межкадрового предсказания и блок 254 внутрикадрового предсказания могут относится к формированию обратного пути прохождения сигнала видеокодера 20, при этом обратный путь прохождения сигнала видеокодера 20 соответствует пути прохождения сигнала декодера (см. видеодекодер 30 на фиг. 3). Блок 210 обратного квантования, блок 212 обработки обратного преобразования, блок 214 восстановления, контурный фильтр 220, буфер декодированных изображений (DPB) 230, блок 244 межкадрового предсказания и блок 254 внутрикадрового предсказания также относятся к формированию «встроеннного декодера» видеокодера 20.
Изображения и разделение изображений (изображения и блоки)
Кодер 20 может быть выполнен с возможностью приема, например, через ввод 201 изображения 17 (или данных 17 изображения), например изображения из последовательности изображений, образующих видео или видеопоследовательность. Принятое изображение или данные изображения также могут представлять собой предварительно обработанное изображение 19 (или предварительно обработанные данные 19 изображения). Для простоты нижеследующее описание ссылается на изображение 17. Изображение 17 также может именоваться текущим изображением или изображением, которое подлежит кодированию (в частности, при кодировании видео, чтобы отличать текущее изображение от других изображений, например, ранее кодированных и/или декодированных изображений той же видеопоследовательности, т.е. видеопоследовательности, которая также содержит текущее изображение).
Изображение (цифровое) является или может рассматриваться как двумерный массив или матрица выборок со значениями интенсивности. Выборка в массиве также может упоминаться как пиксель (сокращенная форма элемента изображения) или пэл (picture element, элемент изображения). Число выборок в горизонтальном и вертикальном направлении (или оси) массива или изображения определяет размер и/или разрешение изображения. Для представления цвета обычно используются три цветовые компоненты, т.е. изображение может быть представлено или включать в себя три массива выборок. В формате RBG или цветовом пространстве изображение содержит соответствующий массив красных, зеленых или синих выборок. Однако при кодировании видео каждый пиксель обычно представлен в формате яркости и цветности или цветовом пространстве, например YCbCr, которое содержит компоненту яркости, обозначаемую Y (иногда вместо этого также используется L), и две компоненты цветности (цветоразностные компоненты), обозначаемые Cb и Cr. Компонента Y яркости (luminance) (или сокращенно яркость (luma)) представляет яркость (brightness) или интенсивность уровня серого (например, как в полутоновом изображении), в то время как две компоненты Cb и Cr цветности (chrominance) (или сокращенно цветности (chroma)) представляют компоненты информации о цветности (chromaticity) или цвете. Соответственно, изображение в формате YCbCr содержит массив выборок яркости со значениями (Y) выборок яркости и два массива выборок цветности со значениями (Cb и Cr) цветности. Изображения в формате RGB могут быть конвертированы или преобразованы в формат YCbCr и наоборот, процесс также известен как цветовое преобразование или конвертация. Если изображение является монохромным, оно может содержать только массив выборок яркости. Соответственно, изображение может быть, например, массивом выборок яркости в монохромном формате или массивом выборок яркости и двумя соответствующими массивами выборок цветности в цветовом формате 4:2:0, 4:2:2 и 4:4:4.
Варианты осуществления видеокодера 20 могут содержать блок разделения изображения (не показан на фиг. 2), выполненный с возможностью разделения изображения 17 на множество (обычно не перекрывающихся) блоков 203 изображения. Эти блоки также могут называться корневыми блоками, макроблоками (H.264/AVC) или блоками дерева кодирования (CTB) или единицами дерева кодирования (CTU) (H.265/HEVC и VVC). Блок разделения изображения может быть выполнен с возможностью использования одного и того же размера блока для всех изображений в видеопоследовательности и соответствующей сетки, определяющей размер блока, или изменения размера блока между изображениями или подмножествами или группами изображений и разделения каждого изображения на соответствующие блоки.
В дополнительных вариантах осуществления видеокодер может быть выполнен с возможностью приема непосредственно блока 203 изображения 17, например одного, нескольких или всех блоков, формирующих изображение 17. Блок 203 изображения также может именоваться текущим блоком изображения или блоком изображения, подлежащим кодированию.
Подобно изображению 17, блок 203 изображения снова является или может рассматриваться как двумерный массив или матрица выборок со значениями интенсивности (значениями выборок), хотя и меньшего размера, чем изображение 17. Другими словами, блок 203 может содержать, например, один массив выборок (например, массив яркости в случае монохромного изображения 17 или массив яркости или цветности в случае цветного изображения) или три массива выборок (например, яркость и два массива цветности в случае цветного изображения 17) или любое другое число и/или вид массивов в зависимости от применяемого цветового формата. Число выборок в горизонтальном и вертикальном направлении (или оси) блока 203 определяет размер блока 203. Соответственно, блок может, например, массив дискретных выборок MxN (M-столбцов на N-строк) или массив MxN коэффициентов преобразования.
Варианты осуществления видеокодера 20, показанные на фиг. 2, могут быть выполнены с возможностью кодирования изображения 17 блок за блоком, например кодирование и предсказание выполняется для каждого блока 203.
Вычисление остатка
Блок 204 вычисления остатка может быть выполнен с возможностью вычисления остаточного блока 205 (также именуемого остатком 205) на основе блока 203 изображения и блока 265 предсказания (дополнительные подробности о блоке 265 предсказания приведены ниже), например, путем вычитания значений выборок блока 265 предсказания из значений выборок блока 203 изображения, выборка за выборкой (пиксель за пикселем), чтобы получить остаточный блок 205 в области выборок.
Преобразование
Блок 206 обработки преобразования может быть выполнен с возможностью применения преобразования, например - дискретного косинусного преобразования (DCT) или дискретного синусного преобразования (DST), к значениям выборок остаточного блока 205, чтобы получить коэффициенты 207 преобразования в области преобразования. Коэффициенты 207 преобразования могут также именоваться остаточными коэффициентами преобразования и представлять остаточный блок 205 в области преобразования.
Блок 206 обработки преобразования может быть выполнен с возможностью применения целочисленных аппроксимаций DCT/DST, таких как преобразования, определенные для H.265/HEVC. По сравнению с ортогональным преобразованием DCT такие целочисленные аппроксимации обычно масштабируются с определенным коэффициентом. Чтобы сохранить норму остаточного блока, который обрабатывается прямым и обратным преобразованиями, дополнительные коэффициенты масштабирования применяются как часть процесса преобразования. Коэффициенты масштабирования обычно выбираются на основе определенных ограничений, например коэффициенты масштабирования представляют собой степень двойки для операций сдвига, битовая глубина коэффициентов преобразования, компромисс между точностью и затратами на реализацию и т. д. Конкретные коэффициенты масштабирования, например, задаются для обратного преобразования, например блоком 212 обработки обратного преобразования (и соответствующим обратным преобразованием, например блоком 312 обработки обратного преобразования в видеодекодере 30), и соответствующие коэффициенты масштабирования для прямого преобразования, например блоком 206 обработки преобразования, могут быть заданы надлежащим образом в кодере 20.
Варианты осуществления видеокодера 20 (соответственно блок 206 обработки преобразования) могут быть выполнены с возможностью вывода параметров преобразования, например, типа преобразования или преобразований, например, непосредственно или кодированы или сжаты через блок 270 энтропийного кодирования, так что, например, видеодекодер 30 может принимать и использовать параметры преобразования для декодирования.
Квантование
Блок 208 квантования может быть выполнен с возможностью квантования коэффициентов 207 преобразования для получения квантованных коэффициентов 209, например, путем применения скалярного квантования или векторного квантования. Квантованные коэффициенты 209 также могут упоминаться как квантованные коэффициенты 209 преобразования или квантованные остаточные коэффициенты 209.
Процесс квантования может уменьшить битовую глубину, связанную с некоторыми или всеми коэффициентами 207 преобразования. Например, n-битовый коэффициент преобразования может быть округлен до m-битного коэффициента преобразования во время квантования, где n больше m. Степень квантования может быть изменена посредством регулировки параметра квантования (QP). Например, для скалярного квантования может применяться другое масштабирование для достижения более тонкого или более грубого квантования. Меньшие размеры шагов квантования соответствуют более тонкому квантованию, тогда как большие размеры шагов квантования соответствуют более грубому квантованию. Применимый размер шага квантования может быть указан параметром квантования (QP). Параметр квантования может, например, представлять собой индекс для предопределенного набора применимых размеров шагов квантования. Например, небольшие параметры квантования могут соответствовать тонкому квантованию (небольшим размерам шагов квантования), а большие параметры квантования могут соответствовать грубому квантованию (большим размерам шагов квантования) или наоборот. Квантование может включать в себя деление на размер шага квантования, а соответствующее и/или обратное деквантование, например, блоком 210 обратного квантования, может включать в себя умножение на размер шага квантования. Варианты осуществления в соответствии с некоторыми стандартами, например HEVC, могут быть выполнены с возможностью использования параметра квантования для определения размера шага квантования. Как правило, размер шага квантования может быть вычислен на основе параметра квантования с использованием аппроксимации фиксированной точки уравнения, включающего в себя деление. Дополнительные коэффициенты масштабирования могут быть введены для квантования и деквантования, чтобы восстановить норму остаточного блока, которая могла быть изменена из-за масштабирования, используемого в аппроксимации фиксированной точки упомянутого уравнения для размера шага квантования и параметра квантования. В одной примерной реализации масштабирование обратного преобразования и деквантование могут быть объединены. В качестве альтернативы настроенные таблицы квантования могут использоваться и сигнализироваться от кодера к декодеру, например в битовом потоке. Квантование является операцией с потерями, при которой потери возрастают с увеличением размеров шагов квантования.
Варианты осуществления видеокодера 20 (соответственно блок 208 квантования) могут быть выполнены с возможностью вывода параметров квантования (QP), например, напрямую или кодированных через блок 270 энтропийного кодирования, так что, например, видеодекодер 30 может принимать и применять параметры квантования для декодирования.
Обратное квантование
Блок 210 обратного квантования выполнен с возможностью применения обратного квантования блока 208 квантования к квантованным коэффициентам для получения деквантованных коэффициентов 211, например путем применения обратной схемы квантования относительно таковой, применяемой блоком 208 квантования, на основе или с использованием того же размера шага квантования, что и блок 208 квантования. Деквантованные коэффициенты 211 также могут упоминаться как деквантованные остаточные коэффициенты 211 и соответствовать - хотя они обычно не идентичны коэффициентам преобразования из-за потери при квантовании - коэффициентам 207 преобразования.
Обратное преобразование
Блок 212 обработки обратного преобразования выполнен с возможностью применения обратного преобразования относительно преобразования, применяемого блоком 206 обработки преобразования, например обратного дискретного косинусного преобразования (DCT) или обратного дискретного синусного преобразования (DST) или других обратных преобразований для получения восстановленного остаточного блока 213 (или соответствующих деквантованных коэффициентов 213) в области выборок. Восстановленный остаточный блок 213 также может именоваться блоком 213 преобразования.
Восстановление
Блок 214 восстановления (например, блок сложения или сумматор 214) выполнен с возможностью сложения блока 213 преобразования (т. е. восстановленного остаточного блока 213) с блоком 265 предсказания, чтобы получить восстановленный блок 215 в области выборок, например посредством сложения - выборка за выборкой - значений выборок восстановленного остаточного блока 213 и значений выборок блока 265 предсказания.
Фильтрация
Блок 220 контурного фильтра (или сокращенно «контурный фильтр» 220) выполнен с возможностью фильтрации восстановленного блока 215, чтобы получить фильтрованный блок 221, или, в общем, для фильтрации восстановленных выборок для получения фильтрованных выборок. Блок контурного фильтра, например, выполнен с возможностью сглаживания переходов пикселей или иного улучшения качества видео. Блок 220 контурного фильтра может содержать один или более контурных фильтров, таких как деблокирующий фильтр, фильтр с адаптивным к выборке смещением (SAO), или один или более других фильтров, таких как двусторонний фильтр, адаптивный контурный фильтр (ALF), фильтры сглаживания, повышения резкости или совместные фильтры, или любая их комбинация. Хотя блок 220 контурного фильтра показан на фиг. 2 как контурный фильтр, в других конфигурациях блок 220 контурного фильтра может быть реализован как постконтурный фильтр. Фильтрованный блок 221 также может именоваться фильтрованным восстановленным блоком 221.
Варианты осуществления видеокодера 20 (соответственно блока 220 контурного фильтра) могут быть выполнены с возможностью вывода параметров контурного фильтра (таких как информация адаптивного к выборке смещения), например непосредственно или кодированных через блок 270 энтропийного кодирования, так что, например, декодер 30 может принимать и применять аналогичные параметры контурного фильтра или соответствующие контурные фильтры для декодирования.
Буфер декодированных изображений
Буфер 230 декодированных изображений (DPB) может быть памятью, в которой хранятся опорные изображения или, в общем, данные опорных изображений для кодирования видеоданных посредством видеокодера 20. DPB 230 может быть сформирован любым из множества запоминающих устройств, таких как динамическая память с произвольным доступом (DRAM), в том числе синхронная DRAM (SDRAM), магниторезистивная RAM (MRAM), резистивная RAM (RRAM) или запоминающими устройствами других типов. Буфер 230 (DPB) декодированных изображений может быть выполнен с возможностью сохранения одного или более фильтрованных блоков 221. Буфер 230 декодированных изображений может быть дополнительно выполнен с возможностью сохранения других ранее фильтрованных блоков, например ранее восстановленных и фильтрованных блоков 221, того же самого текущего изображения или разных изображений, например ранее восстановленных изображений, и может предоставлять полные ранее восстановленные, т.е. декодированные, изображения (и соответствующие опорные блоки и выборки) и/или частично восстановленное текущее изображение (и соответствующие опорные блоки и выборки), например, для межкадрового предсказания. Буфер 230 декодированных изображений (DPB) также может быть выполнен с возможностью сохранения одного или более нефильтрованных восстановленных блоков 215 или, в общем, нефильтрованных восстановленных выборок, например если восстановленный блок 215 не фильтруется блоком 220 контурного фильтра, или любой другой дополнительно обработанной версии восстановленных блоков или выборок.
Выбор режима (разделение и предсказание)
Блок 260 выбора режима содержит блок 262 разделения, блок 244 межкадрового предсказания и блок 254 внутрикадрового предсказания и выполнен с возможностью приема или получения исходных данных изображения, например исходного блока 203 (текущего блока 203 текущего изображения 17), и восстановленных данных изображения, например фильтрованных и/или нефильтрованных восстановленных выборок или блоков того же самого (текущего) изображения и/или из одного или множества ранее декодированных изображений, например из буфера 230 декодированных изображений или других буферов (например, линейного (строкового) буфера, не показан). Восстановленные данные изображения используются в качестве данных опорного изображения для предсказания, например межкадрового предсказания или внутрикадрового предсказания, чтобы получить блок 265 предсказания или предиктор 265.
Блок 260 выбора режима может быть выполнен с возможностью определения или выбора разделения для текущего режима предсказания блока (включая отсутствие разделения) и режима предсказания (например, режима внутреннего или межкадрового предсказания) и формирования соответствующего блока 265 предсказания, который используется для вычисления остаточного блока 205 и для восстановления восстановленного блока 215.
Варианты осуществления блока 260 выбора режима могут быть выполнены с возможностью выбора разделения и режима предсказания (например, из тех, которые поддерживаются блоком 260 выбора режима или доступны для него), которые обеспечивают наилучшее совпадение или, другими словами, минимальный остаток (минимальный остаток означает лучшее сжатие для передачи или хранения), или минимальные накладные расходы на сигнализацию (минимальные накладные расходы на сигнализацию означают лучшее сжатие для передачи или хранения), или который учитывает или балансирует оба фактора. Блок 260 выбора режима может быть выполнен с возможностью определения режима разделения и предсказания на основе оптимизации скорость/искажение (RDO), то есть выбора режима предсказания, который обеспечивает минимальное искажение при определенной скорости. Такие термины, как «лучший», «минимальный», «оптимальный» и т. д. в этом контексте не обязательно относятся к всеобъемлющему «лучшему», «минимуму», «оптимальному» и т. д., но также могут относиться к выполнению критерия выбора или прекращения, например когда значение превышает или падает ниже порогового значения, или других ограничений, потенциально ведущих к «субоптимальному выбору», но уменьшающих сложность и время обработки.
Другими словами, блок 262 разделения может быть выполнен с возможностью разделения блока 203 на более мелкие разделы блока или субблоки (которые снова образуют блоки), например итеративно с использованием разделения квадродерева (QT), двоичного разделения (BT), или разделения троичного дерева (TT) или любой их комбинации, и выполнения, например, предсказания для каждого из разделов блока или субблоков, при этом выбор режима содержит выбор древовидной структуры разделяемого блока 203, а режимы предсказания применяются к каждому из разделов блока или субблоков.
Далее более подробно поясняется разделение (например, посредством блока 260 разделения) и обработка предсказания (посредством блока 244 межкадрового предсказания и блока 254 внутрикадрового предсказания), выполняемые примерным видеокодером 20.
Разделение
Блок 262 разделения может разделять (или разбивать) текущий блок 203 на более мелкие разделы, например блоки меньшего размера квадратного или прямоугольного размера. Эти меньшие блоки (которые также могут именоваться субблоками) могут быть дополнительно разделены на еще меньшие разделы. Это также называется разделением дерева или иерархическим разделением дерева, в котором корневой блок, например на корневом уровне 0 дерева (уровень 0 иерархии, глубина 0), может быть рекурсивно разделен, например разделен на два или более блоков следующего более низкого уровня дерева, например узлов на уровне 1 дерева (уровень 1 иерархии, глубина 1), при этом эти блоки могут быть снова разделены на два или более блоков следующего более низкого уровня, например уровня 2 дерева (уровень 2 иерархии, глубина 2), и т. д. пока разделение не будет завершено, например из-за выполнения критерия прекращения, например достижения максимальной глубины дерева или минимального размера блока. Блоки, которые далее не разделяются, также называются листовыми блоками или листовыми узлами дерева. Дерево, использующее разделение на два раздела, называется двоичным деревом (BT), дерево, использующее разделение на три раздела, называется троичным деревом (TT), а дерево, использующее разделение на четыре раздела, называется квадродеревом (QT).
Как упоминалось ранее, используемый здесь термин «блок» может быть частью, в частности квадратной или прямоугольной частью изображения. Что касается, например, HEVC и VVC, блок может быть или соответствовать единице дерева кодирования (CTU), единице кодирования (CU), единице предсказания (PU) и единице преобразования (TU) и/или соответствующим блокам, например блоку дерева кодирования (CTB), блоку кодирования (CB), блоку преобразования (TB) или блоку предсказания (PB).
Например, единица дерева кодирования (CTU) может быть или содержать CTB выборок яркости, два соответствующих CTB выборок цветности изображения, которое имеет три массива выборок, или CTB выборок монохромного изображения или изображения, которое кодируется с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования выборок. Соответственно, блок дерева кодирования (CTB) может быть NxN блоком выборок для некоторого значения N, так что деление компоненты на CTB является разделением. Единица кодирования (CU) может быть или содержать блок кодирования выборок яркости, два соответствующих блока кодирования выборок цветности изображения, которое имеет три массива выборок, или блок кодирования выборок монохромного изображения или изображения, которое кодируется с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования выборок. Соответственно, блок кодирования (CB) может быть MxN блоком выборок для некоторых значений M и N, так что деление CTB на блоки кодирования является разделением.
В вариантах осуществления, например, согласно HEVC, единица дерева кодирования (CTU) может быть разделена на CU с использованием структуры квадродерева, обозначенной в качестве дерева кодирования. Решение о том, следует ли кодировать область изображения с использованием предсказания между изображениями (временного) или внутри изображения (пространственного), принимается на уровне CU. Каждая CU может быть дополнительно разделена на одну, две или четыре PU в соответствии с типом разделения на PU. Внутри одной PU применяется один и тот же процесс предсказания, а релевантная информация передается в декодер на основе PU. После получения остаточного блока путем применения процесса предсказания на основе типа разделения на PU, CU может быть разделена на единицы (TU) преобразования в соответствии с другой структурой квадродерева, аналогичной дереву кодирования для CU.
В вариантах осуществления, например в соответствии с разрабатываемым в настоящее время наиболее новым стандартом кодирования видео, который называется универсальное кодирование видео (VVC), для разделения блока кодирования используется, разделение квадродерева и двоичного дерева (QTBT). В блочной структуре QTBT CU может иметь либо квадратную, либо прямоугольную форму. Например, единица дерева кодирования (CTU) сначала разделяется на структуру квадродерева. Листовые узлы квадродерева дополнительно разделяются двоичным деревом или тройчной (или тройной) древовидной структурой. Листовые узлы дерева разделения называются единицами кодирования (CU), и эта сегментация используется для обработки предсказания и преобразования без какого-либо дальнейшего разделения. Это означает, что CU, PU и TU имеют одинаковый размер блока в структуре блока кодирования QTBT. Параллельно, вместе с блочной структурой QTBT также предложено использовать множественный раздел, например раздел троичного дерева..
В одном примере блок 260 выбора режима видеокодера 20 может быть выполнен с возможностью выполнения любого сочетания способов разделения, описанных в данном документе.
Как описано выше, видеокодер 20 выполнен с возможностью определения или выбора наилучшего или оптимального режима предсказания из набора ( предопределенных) режимов предсказания. Набор режимов предсказания может содержать, например, режимы внутрикадрового предсказания и/или режимы межкадрового предсказания.
Внутрикадровое предсказание
Набор режимов внутрикадрового предсказания может содержать 35 различных режимов внутрикадрового предсказания, например ненаправленные режимы, такие как режим DC (или среднего) и планарный режим, или направленные режимы, например, как определены в HEVC, или может содержать 67 различных режимов внутрикадрового предсказания, например, ненаправленные режимы, такие как режим DC (или среднего) и планарный режим, или направленные режимы, например, как определены для VVC.
Блок 254 внутрикадрового предсказания выполнен с возможностью использования восстановленных дискретных выборок соседних блоков одного и того же текущего изображения для формирования блока 265 внутрикадрового предсказания согласно режиму внутрикадрового предсказания набора режимов внутрикадрового предсказания.
Блок 254 внутрикадрового предсказания (или, в общем, блок 260 выбора режима) дополнительно выполнен с возможностью вывода параметров внутрикадрового предсказания (или, в общем, информации, указывающей выбранный режим внутрикадрового предсказания для блока) в блок 270 энтропийного кодирования в форме синтаксических элементов 266 для включения в кодированные данные 21 изображения, чтобы, например, видеодекодер 30 мог принимать и использовать параметры предсказания для декодирования.
Межкадровое-предсказание
Набор (возможных) режимов межкадрового предсказания зависит от доступных опорных изображений (то есть предыдущих, по меньшей мере частично декодированных изображений, например сохраненных в DPB 230) и других параметров межкадрового предсказания, например используется ли опорное изображение целиком или только часть, например область окна поиска вокруг области текущего блока, опорного изображения для поиска наиболее подходящего опорного блока и/или, например, применяется ли интерполяция пикселей, например полупиксельная (half/semi-pel) и/или четвертьпиксельная (quarter-pel) интерполяция, или нет..
В дополнение к вышеупомянутым режимам предсказания могут применяться режим пропуска и/или прямой режим.
Блок 244 межкадрового предсказания может включать в себя блок оценки движения (ME) и блок компенсации движения (MC) (оба на фиг. 2 не показаны). Блок оценки движения может быть выполнен с возможностью приема или получения блока 203 изображения (текущего блока 203 изображения текущего изображения 17) и декодированного изображения 231, или по меньшей мере одного или множества ранее восстановленных блоков, например восстановленных блоков одного или множества других/отличных ранее декодированных изображений 231, для оценки движения. Например, видеопоследовательность может содержать текущее изображение и ранее декодированные изображения 231 или, другими словами, текущее изображение и ранее декодированные изображения 231 могут быть частью или формировать последовательность изображений, образующих видеопоследовательность.
Кодер 20 может, например, быть выполнен с возможностью выбора опорного блока из упомянутого множества опорных блоков одинаковых или разных изображений из множества других изображений и обеспечения опорного изображения (или индекса опорного изображения) и/или смещения (пространственного смещения) между позицией (x, y координатами) опорного блока и позицией текущего блока в качестве параметров межкадрового предсказания в блок оценки движения. Это смещение также называется вектором движения (MV).
Блок компенсации движения выполнен с возможностью получения, например, приема параметра межкадрового предсказания и выполнения межкадрового предсказания на основе или с использованием параметра межкадрового предсказания для получения блока 265 межкадрового предсказания. Компенсация движения, выполняемая блоком компенсации движения, может включать в себя получение или формирование блока предсказания на основе вектора движения/блока, определенного посредством оценки движения, возможно с выполнением интерполяций с точностью до субпикселя. Интерполяционная фильтрация может формировать дополнительные пиксельные выборки из известных пиксельных выборок, таким образом потенциально увеличивая число блоков предсказания-кандидатов, которые могут использоваться для кодирования блока изображения. После приема вектора движения для PU текущего блока изображения блок компенсации движения может определить местоположение блока предсказания, на который указывает вектор движения, в одном из списков опорных изображений.
Блок компенсации движения может также формировать синтаксические элементы, связанные с блоками и видеослайсами, для использования видеодекодером 30 при декодировании блоков изображения видеослайса.
Энтропийное кодирование
Блок 270 энтропийного кодирования выполнен с возможностью применения, например, алгоритма или схемы энтропийного кодирования (например, схемы кодирования с переменной длиной (VLC), схемы контекстно-адаптивного VLC (CAVLC), схемы арифметического кодирования, бинаризации, контекстно-адаптивного двоичного арифметического кодирования (CABAC), основанного на синтаксисе контекстно-адаптивного двоичного арифметического кодирования (SBAC), энтропийного кодирования с разделением интервала вероятности (PIPE) или другого способа или методологии энтропийного кодирования) или пропуска (без сжатия) в отношении квантованных коэффициентов 209, параметров межкадрового предсказания, параметров внутрикадрового предсказания, параметров контурного фильтра и/или других синтаксических элементов для получения кодированных данных 21 изображения, которые могут выводиться через вывод 272, например в форме кодированного битового потока 21, так что, например, видеодекодер 30 может принимать и использовать эти параметры для декодирования. Кодированный битовый поток 21 может быть передан на видеодекодер 30 или сохранен в памяти для последующей передачи или извлечения видеодекодером 30.
Другие изменения в структуре видеокодера 20 могут использоваться для кодирования видеопотока. Например, кодер 20, не основанный на преобразовании, может квантовать остаточный сигнал напрямую без блока 206 обработки преобразования. В другой реализации кодер 20 может иметь блок 208 квантования и блок 210 обратного квантования, объединенные в единый блок.
Декодер и способ декодирования
Фиг. 3 показывает пример видеодекодера 30, который выполнен с возможностью реализации способов настоящей заявки. Видеодекодер 30 выполнен с возможностью приема кодированных данных 21 изображения (например, кодированного битового потока 21), например кодированных кодером 20, чтобы получить декодированное изображение 331. Кодированные данные изображения или битовый поток содержит информацию для декодирования кодированных данных изображения, например данных, которые представляют блоки изображения кодированного видеослайса и связанные синтаксические элементы.
В примере на фиг. 3, декодер 30 содержит блок 304 энтропийного декодирования, блок 310 обратного квантования, блок 312 обработки обратного преобразования, блок 314 восстановления (например, сумматор 314), контурный фильтр 320, буфер 330 (DPB) декодированных изображений, выбора режима блок 344 межкадрового предсказания и блок 354 внутрикадрового предсказания. Блок 344 межкадрового предсказания может быть или включать в себя блок компенсации движения. Видеодекодер 30 может, в некоторых примерах, выполнять этап декодирования, в целом обратный этапу кодирования, описанному в отношении видеокодера 100 на фиг. 2.
Как описано в отношении кодера 20, блок 210 обратного квантования, блок 212 обработки обратного преобразования, блок 214 восстановления, контурный фильтр 220, буфер 230 (DPB) декодированных изображений, блок 344 межкадрового предсказания и блок 354 внутрикадрового предсказания также относятся к формированию «встроенного декодера» видеокодера 20. Соответственно, блок 310 обратного квантования может быть идентичен по функции блоку 110 обратного квантования, блок 312 обработки обратного преобразования может быть идентичен по функции блоку 212 обработки обратного преобразования, блок 314 восстановления может быть идентичен по функции блоку 214 восстановления, контурный фильтр 320 может быть идентичен по функции контурному фильтру 220, а буфер 330 декодированных изображений может быть идентичен по функции буферу 230 декодированных изображений. Следовательно, пояснения, предоставленные для соответствующих блоков и функций видеокодера 20, применимы соответственно и к соответствующим блокам и функциям видеодекодера 30.
Энтропийное декодирование
Блок 304 энтропийного декодирования выполнен с возможностью синтаксического анализа битового потока 21 (или, в общем случае, кодированных данных 21 изображения) и выполнения, например, энтропийного декодирования кодированных данных 21 изображения для получения, например, квантованных коэффициентов 309 и/или декодированных параметров кодирования (не показано на фиг. 3), например, любой или все параметры межкадрового предсказания (например, индекс опорного изображения и вектор движения), параметр внутрикадрового предсказания (например, режим или индекс внутрикадрового предсказания), параметры преобразования, параметры квантования, параметры контурного фильтра и/или другие синтаксические элементы. Блок 304 энтропийного декодирования может быть выполнен с возможностью применения алгоритмов или схем декодирования, соответствующих схемам кодирования, как описано в отношении блока 270 энтропийного кодирования кодера 20. Блок 304 энтропийного декодирования может быть дополнительно выполнен с возможностью предоставления параметров межкадрового предсказания, параметра внутрикадрового предсказания и/или других синтаксических элементов блоку 360 выбора режима и других параметров другим блокам декодера 30. Видеодекодер 30 может принимать синтаксические элементы на уровне видеослайса и/или уровне видеоблока.
Обратное квантование
Блок 310 обратного квантования может быть выполнен с возможностью приема параметров квантования (QP) (или, в общем, информации, относящейся к обратному квантованию) и квантованных коэффициентов из кодированных данных 21 изображения (например, посредством синтаксического анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования) и применения, на основе параметров квантования, обратного квантования в отношении декодированным квантованных коэффициентов 309 для получения деквантованных коэффициентов 311, которые также могут называться коэффициентами 311 преобразования. Процесс обратного квантования может включать в себя использование параметра квантования, определенного видеокодером 20 для каждого видеоблока в видеослайсе для определения степени квантования и, аналогично, степени обратного квантования, которая должна быть применена.
Обратное преобразование
Блок 312 обработки обратного преобразования может быть выполнен с возможностью приема деквантованных коэффициентов 311, также именуемых коэффициентами 311 преобразования, и применения преобразования к деквантованным коэффициентам 311 для того, чтобы получить восстановленные остаточные блоки 213 в области выборок. Восстановленные остаточные блоки 213 также могут именоваться блоками 313 преобразования. Преобразование может быть обратным преобразованием, например, обратным DCT, обратным DST, обратным целочисленным преобразованием или концептуально аналогичным процессом обратного преобразования. Блок 312 обработки обратного преобразования может быть дополнительно выполнен с возможностью приема параметров преобразования или соответствующей информации из кодированных данных 21 изображения (например, путем синтаксического анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования), чтобы определять преобразование, которое подлежит применению к деквантованным коэффициентам 311.
Восстановление
Блок 314 восстановления (например, блок сложения или сумматор 314) может быть выполнен с возможностью сложения восстановленного остаточного блока 313 с блоком 365 предсказания, чтобы получить восстановленный блок 315 в области выборок, например посредством сложения значений выборок восстановленного остаточного блока 313 и значений выборок блока 365 предсказания.
Фильтрация
Блок 320 контурного фильтра (либо в контуре кодирования, либо после контура кодирования) выполнен с возможностью фильтрации восстановленного блока 315 для получения фильтрованного блока 321, например, для сглаживания переходов пикселей или иного улучшения качества видео. Блок 320 контурного фильтра может содержать один или более контурных фильтров, таких как деблокирующий фильтр, фильтр с адаптивным к выборке смещением (SAO), или один или более других фильтров, таких как двусторонний фильтр, адаптивный контурный фильтр (ALF), фильтры сглаживания, повышения резкости или совместные фильтры, или любая их комбинация. Хотя блок 320 контурного фильтра показан на фиг. 3 как контурный фильтр, в других конфигурациях блок 320 контурного фильтра может быть реализован как постконтурный фильтр.
Буфер декодированных изображений
Декодированные видеоблоки 321 изображения затем сохраняются в буфере 330 декодированных изображений, который сохраняет декодированные изображения 331 в качестве опорных изображений для последующей компенсации движения для других изображений и/или для вывода, соответственно, отображения.
Декодер 30 выполнен с возможностью вывода декодированного изображения 311, например, через вывод 312 для представления или просмотра пользователю.
Предсказание
Блок 344 межкадрового предсказания может быть идентичен блоку 244 межкадрового предсказания (в частности, блоку компенсации движения), а блок 354 внутрикадрового предсказания может быть идентичен блоку 254 межкадрового предсказания по функции, и принимает решения по разделению или разделению и выполняет предсказание на основе параметров разделения и/или предсказания или соответствующей информации, принимаемой из кодированных данных 21 изображения (например, путем синтаксического анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования). Блок 360 выбора режима может быть выполнен с возможностью осуществления предсказания (внутрикадрового или межкадрового предсказания) для каждого блока на основе восстановленных изображений, блоков или соответствующих выборок (фильтрованных или нефильтрованных) для получения блока 365 предсказания.
Когда видеослайс кодируется как внутрикадрово-кодируемый (I) слайс, блок 354 внутрикадрового предсказания блока 360 выбора режима выполнен с возможностью формирования блока 365 предсказания для блока изображения текущего видеослайса на основе просигнализированного режима внутрикадрового предсказания и данных из ранее декодированных блоков текущего изображения. Когда видеоизображение кодируется как межкадрово-кодируемый (т.е. B или P) слайс, блок 344 межкадрового предсказания (например, блок компенсации движения) блока 360 выбора режима выполнен с возможностью создания блоков 365 предсказания для видеоблока текущего видеослайса на основе векторов движения и других синтаксических элементов, принимаемых от блока 304 энтропийного декодирования. Для межкадрового предсказания блоки предсказания могут быть созданы из одного из опорных изображений в пределах одного из списков опорных изображений. Видеодекодер 30 может создавать списки опорных кадров, Список 0 и Список 1, используя способы построения по-умолчанию на основе опорных изображений, хранящихся в DPB 330.
Блок 360 выбора режима выполнен с возможностью определения информации предсказания для видеоблока текущего видеослайса путем синтаксического анализа векторов движения или связанной информации и других синтаксических элементов, и использует информацию предсказания для создания блоков предсказания для текущего декодируемого видеоблока. Например, блок 360 выбора режима использует некоторые из принятых синтаксических элементов для определения режима предсказания (например, внутрикадровое или межкадровое предсказание), используемого для кодирования видеоблоков видеослайса, типа слайса межкадрового предсказания (например, B-слайс, P-слайс или GPB-слайс), информации построения для одного или более списков опорных изображений для слайса, векторов движения для каждого межкадрово-кодированного видеоблока слайса, статуса межкадрового предсказания для каждого межкадрово-кодированного видеоблока слайса, а также другой информации для декодирования видеоблоков в текущем видеослайсе.
Другие варианты видеодекодера 30 могут использоваться для декодирования кодированных данных 21 изображения. Например, декодер 30 может создавать выходной видеопоток без блока 320 контурной фильтрации. Например, декодер 30, не основанный на преобразовании, может выполнять обратное квантование остаточного сигнала напрямую без блока 312 обработки обратного преобразования для определенных блоков или кадров. В другой реализации видеодекодер 30 может иметь блок 310 обратного квантования и блок 312 обработки обратного преобразования, объединенные в один блок.
Следует понимать, что в кодере 20 и декодере 30 результат обработки некоторого текущего этапа может быть обработан дополнительно, а затем выведен на следующий этап. Например, после интерполяционной фильтрации, получения вектора движения или контурной фильтрации, дополнительная операция, такая как Clip (усечение) или смещение, может выполняться над результатом обработки интерполяционной фильтрации, получения вектора движения или контурной фильтрации.
Следует отметить, что дополнительные операции могут применяться к получаемым векторам движения текущего блока (в том числе, но без ограничения, к векторам движения контрольной точки аффинного режима, векторам движения субблока в аффинном, планарном, ATMVP режимах, временным векторам движения и тому подобному). Например, значение вектора движения ограничивается предопределенным диапазоном в соответствии с его представляющим битом. Если представляющий бит вектора движения является bitDepth (битовой глубиной), тогда диапазон составляет -2^(bitDepth-1) ~ 2^(bitDepth-1)-1, где «^» означает возведение в степень. Например, если bitDepth установлена равной 16, диапазон составляет -32768 ~ 32767; если bitDepth установлена равной 18, диапазон составляет -131072~131071. Например, значение получаемого вектора движения (например, MV четырех субблоков 4x4 в одном блоке 8x8) ограничивается таким образом, чтобы максимальная разность между целыми частями MV четырех субблоков 4x4 не превышала N пикселей, например была не более 1 пикселя. Здесь представлены два способа ограничения вектора движения в соответствии с bitDepth.
Способ 1: удаление MSB (старшего бита) переполнения посредством потоковых операций
где mvx представляет собой горизонтальную компоненту вектора движения блока изображения или субблока, mvy представляет собой вертикальную компоненту вектора движения блока изображения или субблока, а ux и uy указывает промежуточное значение;
Например, если значение mvx равно -32769, после применения формул (1) и (2) результирующее значение равняется 32767. В компьютерной системе десятичные числа хранятся как дополнение до двух. Дополнением до двух для -32769 является 1,0111,1111,1111,1111 (17 битов), затем MSB отбрасывается, поэтому результирующим дополнением до двух является 0111,1111,1111,1111 (десятичное число составляет 32767), что совпадает с выходными данными от применения формул (1) и (2).
Операции могут применяться во время суммирования mvp и mvd, как показано в формулах (5)-(8).
Способ 2: удаление MSB переполнения посредством усечения значения
vx=Clip3(-2bitDepth-1, 2bitDepth-1 -1, vx)
vy=Clip3(-2bitDepth-1, 2bitDepth-1 -1, vy)
где vx представляет собой горизонтальную компоненту вектора движения блока изображения или субблока, vy представляет собой вертикальную компоненту вектора движения блока изображения или субблока; x, y и z соответственно соответствуют трем входным значениям процесса усечения MV, а определение функции Clip3 является следующим:
Clip3(x, y, z)=
Фиг. 4 является схематичным представлением устройства 400 кодирования видео согласно варианту осуществления настоящего раскрытия. Устройство 400 кодирования видео подходит для реализации раскрытых вариантов осуществления, которые описаны в данном документе. В варианте осуществления устройство 400 кодирования видео может быть декодером, таким как видеодекодер 30 по фиг. 1A, или кодером, таким как видеокодер 20 по фиг. 1A.
Устройство 400 кодирования видео содержит входные порты 410 (или порты 410 ввода) и блоки 420 (Rx) приемника для приема данных; процессор, логический блок или центральный процессор (CPU) 430 для обработки данных; блоки 440 (Tx) передатчика и выходные порты 450 (или порты 450 вывода) для передачи данных; и память 460 для хранения данных. Устройство 400 кодирования видео также может содержать компоненты преобразования оптических сигналов в электрические (OE) и компоненты преобразования электрических сигналов в оптические (EO), подключенные к входным портам 410, блокам 420 приемника, блокам 440 передатчика и выходным портам 450 для обеспечения входа или выхода оптических или электрических сигналов.
Процессор 430 реализуется аппаратным обеспечением и программным обеспечением. Процессор 430 может быть реализован в виде одного или более CPU-чипов, ядер (например, в виде многоядерного процессора), FPGA, ASIC и DSP. Процессор 430 поддерживает связь с входными портами 410, блоками 420 приемника, блоками 440 передатчика, выходными портами 450 и памятью 460. Процессор 430 содержит модуль 470 кодирования. Модуль 470 кодирования реализует раскрытые варианты осуществления, описанные выше. Например, модуль 470 кодирования реализует, обрабатывает, подготавливает или предоставляет различные операции кодирования. Следовательно, включение модуля 470 кодирования обеспечивает существенное улучшение функциональных возможностей устройства 400 кодирования видео и обеспечивает трансформацию устройства 400 кодирования видео в другое состояние. В качестве альтернативы модуль 470 кодирования реализуется как инструкции, хранящиеся в памяти 460 и исполняемые процессором 430.
Память 460 может содержать один или более дисков, ленточных накопителей и твердотельных накопителей и может использоваться в качестве устройства хранения данных переполнения для хранения программ, когда такие программы выбраны для исполнения, и для хранения инструкций и данных, которые считываются во время исполнения программ. Память 460 может быть, например, кратковременной и/или энергонезависимой и может быть постоянной памятью (ROM), оперативной памятью (RAM), троичной ассоциативной памятью (TCAM) и/или статической оперативной памятью (SRAM).
Фиг. 5 является упрощенной блок-схемой устройства 500, которое может использоваться как одно или оба из устройства-источника 12 и устройства-получателя 14 с фиг. 1A согласно примерному варианту осуществления.
Процессор 502 в устройстве 500 может быть центральным процессором. В качестве альтернативы, процессор 502 может быть устройством любого другого типа или множеством устройств, способных манипулировать или обрабатывать информацию, которая существует в настоящее время или будет разработана в будущем. Хотя раскрытые реализации могут быть осуществлены на практике с одним процессором, как показано, например, с процессором 502, преимущества в скорости и эффективности могут быть достигнуты с использованием более одного процессора.
Память 504 в устройстве 500 может быть постоянной памятью (ROM) или устройством оперативной памяти (RAM) в реализации. В качестве памяти 504 может использоваться запоминающее устройство любого другого подходящего типа устройства. Память 504 может включать в себя код и данные 506, доступ к которым осуществляется процессором 502 с использованием шины 512. Память 504 может дополнительно включать в себя операционную систему 508 и прикладные программы 510, при этом прикладные программы 510 включают в себя по меньшей мере одну программу, которая позволяет процессору 502 выполнять описанные в данном документе способы. Например, прикладные программы 510 могут включать в себя приложения с 1 по N, которые дополнительно включают в себя приложение кодирования видео, которое выполняет описанные в данном документе способы.
Устройство 500 может также включать в себя одно или более устройств вывода, например дисплей 518. Дисплей 518 может быть, в одном примере, сенсорным дисплеем, который объединяет дисплей с сенсорным элементом, способным воспринимать сенсорные вводы (касанием). Дисплей 518 может быть соединен с процессором 502 через шину 512.
Хотя здесь изображена как одна шина, шина 512 устройства 500 может состоять из многочисленных шин. Кроме того, вторичное хранилище 514 может быть напрямую связано с другими компонентами устройства 500 или может быть доступно через сеть и может содержать один встраиваемый блок, такой как карта памяти, или множество блоков, таких как множество карт памяти. Таким образом, устройство 500 может быть реализовано в самых разнообразных конфигурациях.
Уровень техники внутриконтурного фильтра (In-Loop filter)
Всего в VTM3 имеется три типа контурных фильтров. Помимо деблокирующего фильтра и SAO (двух контурных фильтров в HEVC), в VTM3 применяется адаптивный контурной фильтр (ALF). Порядок процесса фильтрации в VTM3 следующий: деблокирующий фильтр, SAO и ALF.
Уровень техники ALF
В VTM3 применяется адаптивный контурной фильтр (ALF) с блочной адаптацией фильтра. Для компонента яркости выбирается один из 25 фильтров для каждого блока 4×4, исходя из направления и активности локальных градиентов.
Форма фильтра:
В JEM для компонента яркости используются две формы алмазных фильтров (как показано на фиг. 6). Ромбовидная форма 7×7 применяется для компонента яркости, а ромбовидная форма 5×5 применяется для компонента цветности.
Классификация блоков:
Для компонента яркости каждый блок относится к одному из 25 классов. Классификационный индекс C выводится на основе направленности и квантованного значения активности следующим образом:
(9)
Чтобы вычислить и сначала вычисляются градиенты горизонтального, вертикального и двух диагональных направлений с использованием одномерного лапласиана:
Где индексы и относятся к координатам верхней левой выборки в блоке , а указывает восстановленную выборку в координате .
Чтобы уменьшить сложность классификации блоков, применяется расчет одномерного лапласиана с субдискретизацией. Как показано на фиг. 7, одни и те же положения подвыборки используются для расчета градиента во всех направлениях.
Тогда максимальное и минимальное значения градиентов горизонтального и вертикального направлений устанавливаются как:
Максимальное и минимальное значения градиента двух диагональных направлений устанавливаются как:
Чтобы получить значение направленности эти значения сравниваются друг с другом и с двумя пороговыми значениями и
Этап 1. Если оба неравенства и верны, устанавливается равным .
Этап 2. Если , переход к этапу 3; в противном случае переход к этапу 4.
Этап 3. Если , устанавливается равным ; в противном случае устанавливается равным .
Этап 4. Если , устанавливается равным ; в противном случае устанавливается равным .
Значение активности вычисляется как:
далее квантуется до диапазона от 0 до 4 включительно, и квантованное значение обозначается как
Для компонентов цветности в изображении метод классификации не применяется, для каждого компонента цветности применяется один набор коэффициентов ALF.
Геометрические преобразования коэффициентов фильтра
Перед фильтрацией каждого блока яркости 4×4 к коэффициентам фильтра применяются геометрические преобразования, такие как вращение или переворот по диагонали и вертикали, в зависимости от значений градиента, рассчитанных для этого блока. Это эквивалентно применению этих преобразований к выборкам в области поддержки фильтра. Идея состоит в том, чтобы сделать разные блоки, к которым применяется ALF, более похожими, выровняв их направленность.
Введены три геометрических преобразования, в том числе диагональный, вертикальный переворот и вращение:
где - размер фильтра, а - координаты коэффициентов, так что точка находится в верхнем левом углу, а точка в правом нижнем углу. Преобразования применяются к коэффициентам f(k,l) фильтра в зависимости от значений градиента, рассчитанных для этого блока. Взаимосвязь между преобразованием и четырьмя градиентами в четырех направлениях приведена в следующей таблице.
Сигнализация параметров фильтра
В VTM3 параметры фильтра ALF указываются в заголовке слайса. Можно указать до 25 наборов коэффициентов фильтра яркости. Чтобы уменьшить служебные биты, коэффициенты фильтра различной классификации могут быть объединены.
Процесс фильтрации можно контролировать на уровне CTB. Сигнализируется флаг, указывающий, применяется ли ALF к CTB яркости. Для каждого CTB цветности может быть сигнализирован флаг, указывающий, применяется ли ALF к CTB цветности, в зависимости от значения alf_chroma_ctb_present_flag.
Коэффициенты фильтра квантуются с нормой, равной 128. Для дальнейшего ограничения сложности умножения применяется соответствие битового потока, согласно которому значение коэффициента центрального положения должно находиться в диапазоне от 0 до 28, а значения коэффициента остальных положений должны находиться в диапазоне от -27 до 27 - 1, включительно.
Процесс фильтрации
На стороне декодера, когда ALF включен для CTB, каждая выборка в пределах CU фильтруется, в результате получается значение выборки , как показано ниже, где L обозначает длину фильтра, представляет коэффициент фильтра, а обозначает декодированные коэффициенты фильтра.
Спецификация синтаксиса ALF согласно спецификации VVC
Процесс адаптивной контурной фильтрации
1.1 Общие положения
Входными данными этого процесса являются массивы восстановленных выборок изображения перед адаптивным контурным фильтром recPictureL, recPictureCb и recPictureCr.
Выходными данными этого процесса являются массивы модифицированных восстановленных выборок изображения после адаптивного контурного фильтра alfPictureL, alfPictureCb и alfPictureCr.
Значения выборок в массивах модифицированных восстановленных выборок изображения после адаптивного контурного фильтра alfPictureL, alfPictureCb и alfPictureCr изначально устанавливаются равными значениям выборок в массивах восстановленных выборок изображения перед адаптивным контурным фильтром recPictureL, recPictureCb и recPictureCr, соответственно.
Когда значение tile_group_alf_enabled_flag равно 1, для каждой единицы дерева кодирования с местоположением блока дерева кодирования яркости (rx, ry), где rx=0..PicWidthInCtbs - 1 и ry=0..PicHeightInCtbs-1, применяется следующий процесс:
Когда значение alf_ctb_flag[0][rx][ry] равно 1, процесс фильтрации блоков дерева кодирования для выборок яркости, как указано в пункте 1.2, вызывается с recPictureL, alfPictureL и местоположением (xCtb, yCtb) блока дерева кодирования яркости установленным равным (rx << CtbLog2SizeY , ry << CtbLog2SizeY) в качестве входных данных, а выходными данными является модифицированное фильтрованное изображение alfPictureL.
Когда значение alf_ctb_flag[1][rx][ry] равно 1, вызывается процесс фильтрации блоков дерева кодирования для выборок цветности, как указано в пункте 1.1, с recPicture, установленным равным recPictureCb, alfPicture, установленным равным alfPictureCb, и местоположением (xCtbC, yCtbC) блока дерева кодирования цветности, установленным равным (rx << (CtbLog2SizeY - 1), ry << (CtbLog2SizeY - 1) в качестве входных данных, а выходными данными является модифицированное фильтрованное изображение alfPictureCb.
Когда значение alf_ctb_flag[2][rx][ry] равно 1, вызывается процесс фильтрации блока дерева кодирования для выборок цветности, как указано в пункте 1.4, с recPicture, установленным равным recPictureCr, alfPicture, установленным равным alfPictureCr, и местоположением (xCtbC, yCtbC) блока дерева кодирования цветности, установленным равным (rx << (CtbLog2SizeY - 1), ry << (CtbLog2SizeY - 1) в качестве входных данных, а выходными данными является модифицированное фильтрованное изображение alfPictureCr.
1.2 Процесс фильтрации блоков дерева кодирования для выборок яркости
Входные данные этого процесса:
восстановленный массив recPictureL выборок яркости изображения до процесса адаптивной контурной фильтрации,
массив alfPictureL фильтрованных восстановленных выборок яркости изображения,
местоположение (xCtb, yCtb) яркости, указывающее верхнюю левую выборку текущего блока дерева кодирования яркости относительно верхней левой выборки текущего изображения.
Выходными данными этого процесса является массив alfPictureL модифицированных фильтрованных восстановленных выборок яркости изображения.
Процесс вывода для пункта 1.3 индекса фильтра вызывается с местоположением (xCtb, yCtb) и восстановленным массивом recPictureL выборок яркости изображения в качестве входных данных, и filtIdx[x][y] и transposeIdx[x][y] с x, y=0..CtbSizeY - 1 в качестве выходных данных.
Для получения фильтрованных восстановленных выборок alfPictureL[x][y] яркости каждая восстановленная выборка яркости внутри текущего блока дерева кодирования яркости recPictureL[x][y] фильтруется следующим образом с x, y=0..CtbSizeY - 1:
Массив коэффициентов f[j] фильтра яркости, соответствующий фильтру, заданному filtIdx[x][y], выводится следующим образом с j=0..12:
f[j]=AlfCoeffL[filtIdx[x][y]][j].
Коэффициенты фильтра яркости filterCoeff выводятся в зависимости от transposeIdx[x][y] следующим образом:
Если transposeIndex[x][y]== 1,
filterCoeff[]={f[9], f[4], f[10], f[8], f[1], f[5], f[11], f[7], f[3], f[0], f[2], f[6], f[12]}
В противном случае, если transposeIndex[x][y]== 2,
filterCoeff[]={f[0], f[3], f[2], f[1], f[8], f[7], f[6], f[5], f[4], f[9], f[10], f[11], f[12]}
В противном случае, если transposeIndex[x][y]== 3,
filterCoeff[]={f[9], f[8], f[10], f[4], f[3], f[7], f[11], f[5], f[1], f[0], f[2], f[6], f[12]}
В противном случае
filterCoeff[]={f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8], f[9], f[10], f[11], f[12]}
Местоположения (hx, vy) для каждой из соответствующих выборок яркости (x, y) внутри данного массива recPicture выборок яркости выводятся следующим образом:
hx=Clip3(0, pic_width_in_luma_samples-1, xCtb+x)
vy=Clip3(0, pic_height_in_luma_samples-1, yCtb+y)
Переменная sum выводится следующим образом:
sum=filterCoeff[0]*(recPictureL[hx,vy+3]+recPictureL[hx,vy-3]) +
filterCoeff[1]*(recPictureL[hx+1,vy+2]+recPictureL[hx-1,vy-2]) +
filterCoeff[2]*(recPictureL[hx,vy+2]+recPictureL[hx,vy-2]) +
filterCoeff[3]*(recPictureL[hx-1,vy+2]+recPictureL[hx+1,vy-2]) +
filterCoeff[4]*(recPictureL[hx+2,vy+1]+recPictureL[hx-2,vy-1]) +
filterCoeff[5]*(recPictureL[hx+1,vy+1]+recPictureL[hx-1,vy-1]) +
filterCoeff[6]*(recPictureL[hx,vy+1]+recPictureL[hx,vy-1]) +
filterCoeff[7]*(recPictureL[hx-1,vy+1]+recPictureL[hx+1,vy-1]) +
filterCoeff[8]*(recPictureL[hx-2,vy+1]+recPictureL[hx+2,vy-1]) +
filterCoeff[9]*(recPictureL[hx+3,vy]+recPictureL[hx-3,vy]) +
filterCoeff[10]*(recPictureL[hx+2,vy]+recPictureL[hx-2,vy]) +
filterCoeff[11]*(recPictureL[hx+1,vy]+recPictureL[hx-1,vy]) +
filterCoeff[12]*recPictureL[hx,vy]
sum=(sum+64)>>7
Модифицированная фильтрованная восстановленная выборка alfPictureL[xCtb+x][yCtb+y] яркости изображения выводится следующим образом:
alfPictureL[xCtb+x][yCtb+y]=Clip3(0,(1<<BitDepthY)-1,sum).
1.3 Процесс получения транспонирования ALF и индекса фильтра для выборок яркости
Входные данные этого процесса:
местоположение (xCtb, yCtb) яркости, указывающее верхнюю левую выборку текущего блока дерева кодирования яркости относительно верхней левой выборки текущего изображения,
восстановленный массив recPictureL выборок яркости изображения до процесса адаптивной контурной фильтрации.
Выходными данными этого процесса являются:
массив filtIdx[x][y] индексов фильтра классификации с x, y=0..CtbSizeY - 1,
массив transposeIdx индексов транспонирования[x][y] с x, y=0..CtbSizeY - 1.
Местоположения (hx, vy) для каждой из соответствующих выборок яркости (x, y) внутри данного массива recPicture выборок яркости выводятся следующим образом:
hx=Clip3 (0, pic_width_in_luma_samples - 1, x)
vy=Clip3 (0, pic_height_in_luma_samples - 1, y)
Массив filtIdx индексов фильтра классификации и массив transposeIdx индексов транспонирования получают с помощью следующих упорядоченных этапов:
Переменные filtH[x][y], filtV[x][y], filtD0[x][y] и filtD1[x][y] с x, y=-2..CtbSizeY+1 выводятся следующим образом:
Если оба x и y - четные числа или оба x и y - нечетные числа, применяется следующее:
filtH[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x-1,vyCtb+y]- recPicture[hxCtb+x+1,vyCtb+y])
filtV[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x,vyCtb+y-1]-recPicture[hxCtb+x,vyCtb+y+1])
filtD0[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x-1,vyCtb+y-1]-recPicture[hxCtb+x+1,vyCtb+y+1])
filtD1[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x+1,vyCtb+y-1]-recPicture[hxCtb+x-1,vyCtb+y+1])
В противном случае filtH[x][y], filtV[x][y], filtD0[x][y] и filtD1[x][y] устанавливаются равными 0.
Переменные varTempH1[x][y], varTempV1[x][y], varTempD01[x][y], varTempD11[x][y] и varTemp[x][y] с x, y=0..(CtbSizeY - 1) >> 2 выводятся следующим образом:
sumH[x][y]= ΣiΣj filtH[(x<<2)+i][(y<<2)+j] с i,j=-2..5
sumV[x][y]=ΣiΣj filtV[(x<<2)+i][(y<<2)+j] с i,j=-2..5
sumD0[x][y]=ΣiΣj filtD0[(x<<2)+i][(y<<2)+j] с i,j=-2..5
sumD1[x][y]=ΣiΣj filtD1[(x<<2)+i][(y<<2)+j] с i,j=-2..5
sumOfHV[x][y]=sumH[x][y]+sumV[x][y]
Переменные dir1[x][y], dir2[x][y] и dirS[x][y] с x, y=0..CtbSizeY - 1 выводятся следующим образом:
Переменные hv1, hv0 и dirHV выводятся следующим образом:
Если sumV[x>>2][y>>2] больше, чем sumH[x>>2][y>>2], , применяется следующее:
hv1=sumV[x>>2][y>>2]
hv0=sumH[x>>2][y>>2]
dirHV=1
В противном случае применяется следующее:
hv1=sumH[x>>2][y>>2]
hv0=sumV[x>>2][y>>2]
dirHV=3
Переменные d1, d0 и dirD выводятся следующим образом:
Если sumD0[x>>2][y>>2] больше, чем sumD1[x>>2][y>>2], применяется следующее:
d1=sumD0[x>>2][y>>2]
d0=sumD1[x>>2][y>>2]
dirD=0
В противном случае применяется следующее:
d1=sumD1[x>>2][y>>2]
d0=sumD0[x>>2][y>>2]
dirD = 2
Переменные hvd1, hvd0 выводятся следующим образом:
hvd1=(d1*hv0>hv1*d0)?d1:hv1
hvd0=(d1*hv0>hv1*d0)?d0:hv0
Переменные dirS[x][y], dir1[x][y] и dir2[x][y] выводятся следующим образом:
dir1[x][y]=(d1*hv0>hv1*d0)?dirD:dirHV
dir2[x][y]=(d1*hv0>hv1*d0)?dirHV:dirD
dirS[x][y]=(hvd1>2*hvd0)?1:((hvd1*2>9*hvd0)?2:0)
Переменная avgVar[x][y] с x,y=0..CtbSizeY-1 выводится следующим образом:
varTab[]={0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4}
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>> 2]*64)>>(3+BitDepthY))]
Массив filtIdx[x][y] индексов фильтра классификации и массив transposeIdx индексов транспонирования[x][y] с x=y=0..CtbSizeY - 1 выводятся следующим образом:
transposeTable[]={0, 1, 0, 2, 2, 3, 1, 3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
Когда dirS[x][y] не равно 0, filtIdx[x][y] модифицируется следующим образом:
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5.
1.4 Процесс фильтрации блоков дерева кодирования для выборок цветности
Входные данные этого процесса:
восстановленный массив recPicture выборок цветности изображения до процесса адаптивной контурной фильтрации,
фильтрованный восстановленный массив выборок цветности изображения alfPicture,
местоположение (xCtbC, yCtbC) цветности, указывающее верхнюю левую выборку текущего блока дерева кодирования цветности относительно верхней левой выборки текущего изображения.
Выходными данными этого процесса является модифицированный фильтрованный восстановленный массив выборок цветности изображения alfPicture.
Размер текущего блока дерева кодирования цветности ctbSizeC выводится следующим образом:
ctbSizeC=CtbSizeY/SubWidthC
Для получения фильтрованных восстановленных выборок alfPicture[x][y] цветности каждая восстановленная выборка цветности внутри текущего блока дерева кодирования цветности recPicture[x][y] фильтруется следующим образом с x, y=0..ctbSizeC - 1:
Местоположения (hx, vy) для каждой из соответствующих выборок цветности (x, y) внутри данного массива recPicture выборок цветности выводится следующим образом:
hx=Clip3 (0, pic_width_in_luma_samples/SubWidthC - 1, xCtbC+x)
vy=Clip3 (0, pic_height_in_luma_samples/SubHeightC - 1, yCtbC+y)
Переменная sum выводится следующим образом:
sum=AlfCoeffC[0]*(recPicture[hx,vy+2]+recPicture[hx,vy-2]) + AlfCoeffC[1]*(recPicture[hx+1,vy+1]+recPicture[hx-1,vy-1]) + AlfCoeffC[2]*(recPicture[hx,vy+1]+recPicture[hx,vy-1]) + AlfCoeffC[3]*(recPicture[hx-1,vy+1]+recPicture[hx+1,vy-1]) + AlfCoeffC[4]*(recPicture[hx+2,vy]+recPicture[hx-2,vy]) + AlfCoeffC[5]*(recPicture[hx+1,vy]+recPicture[hx-1,vy]) + AlfCoeffC[6]*recPicture[hx,vy]
sum=(sum+64)>>7
Модифицированная фильтрованная восстановленная выборка alfPicture[xCtbC+x][yCtbC+y] цветности изображения выводится следующим образом:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum).
Текущие требования к линейному буферу трех каскадных контурных фильтров (Deblocking, SAO, ALF) VTM-3.0 для компонента яркости составляют 11,25 строк, а для компонента цветности - 6,25 строк (см. фиг. 8). Удовлетворение повышенных требований к линейному буферу на аппаратных микросхемах, как известно, является проблемой, поскольку линейный буфер необходимо хранить во «внутренней» памяти, тем самым увеличивая площадь аппаратной микросхемы.
Чтобы уменьшить требования к линейному буферу VTM-3.0,
Классификация блоков ALF адаптирована для того, чтобы гарантировать, что для классификации блоков ALF не нужны пиксели выше или ниже виртуальной границы (VB). Виртуальные границы (VB) представляют собой сдвинутые вверх горизонтальные границы CTU на «N» пикселей. Для каждой CTU SAO и ALF могут обрабатывать выборки выше VB до прихода нижней CTU, но не могут обрабатывать выборки ниже VB до прихода нижней CTU, что в основном вызвано задержкой вертикальной деблокирующей фильтрации.
В VTM-3.0 N может принимать положительное целочисленное значение, которое больше или равно 4, например, N=4 или N=6.
Чтобы уменьшить требования к линейному буферу, некоторые примеры в основном адаптируют классификацию блоков ALF таким образом, что в дальнейшем используется подмножество выборок, которые изначально использовались в классификации блоков.
Подход «сдвига сетки» используется для случаев, когда размер окна классификации блоков ALF (P x P) не является целым числом, кратным N. В текущем VTM-3.0 классификация блоков ALF выполняется для блоков 4×4. Поэтому P устанавливается равным 4 для VTM-3.0. Подход со сдвигом сетки в основном сдвигает окно классификации блоков ALF на целое число выборок, так что заданное окно классификации блоков P x P не пересекает виртуальную границу. Таким образом, для исходных выборок на изображении, которые эквивалентны «P-N», классификация блоков ALF выполняется только с использованием окна блока 2×2, или первые «P-N» строк повторно используют решение о классификации блока 4×4, начиная сразу с («P-N» + 1).
Фильтрация ALF адаптирована для использования искаженных версий фильтра как для компонентов яркости, так и для компонентов цветности, либо с использованием дополнения, либо путем добавления неиспользуемых коэффициентов фильтра к центральному коэффициенту. Таким образом, для фильтрации ALF не требуются дополнительные линейные буферы.
Используйте модифицированную версию исходной классификации блоков ALF, чтобы классификация блоков не требовала дополнительных линейных буферов. Также фильтрация ALF модифицирована таким образом, что ей не нужны никакие дополнительные буферы. Модифицированная версия классификации блоков использует только подмножество выборок, которые изначально использовались в исходной классификации блоков.
Как показано на фиг. 8, требования к линейному буферу яркости для VVC составляют 11,25 строк яркости, когда считается, что виртуальная граница находится на 4 строки выше границы CTU.
Объяснение требования линейного буфера следующее: деблокирование горизонтального края, перекрывающегося краем CTU, не может быть выполнена, так как решения и фильтрация требуют строки K, L, M, M от первой CTU и строки O, P.. от первой CTU. Поэтому деблокирование горизонтальных ребер, перекрывающихся с границей CTU, откладывается до нижней CTU. Поэтому строки K, L, M, N, которые представляют собой восстановленные выборки яркости, должны храниться в линейном буфере (4 строки). Затем SAO-фильтрация может быть выполнена для строк от A до J. Строка J может быть SAO-фильтрована, поскольку деблокирование не изменяет выборки в строке K. Для SAO-фильтрации строки K решение о классификации смещения края сохраняется только в линейном буфере. (что составляет 0,25 строки яркости). Фильтрация ALF может выполняться только для строк A-F. В примере классификация ALF выполняется для каждого блока 4×4. Для каждой классификации блока 4×4 требуется окно активности размером 8×8, которое, в свою очередь, требует окна 9×9 для вычисления одномерного лапласиана для определения градиента.
Поэтому для классификации блоков строк G, H, I, J, необходимы SAO-фильтрованные выборки ниже виртуальной границы. Также для строк D, E, F, требуются SAO-фильтрованные выборки для классификации выборок. Также для ALF-фильтрации строки G требуются три SAO-фильтрованных строки D, E, F сверху. Таким образом, общее требование к линейному буферу выглядит следующим образом:
Строки K-N (Горизонтальные пиксели DF) - 4
Строки D-J (SAO-фильтрованные пиксели) - 7
Значения классификатора смещения граней SAO между строкой J и строкой K - 0,25
Следовательно, общее количество строк яркости равно 7+4+0,25=11,25.
Модифицированная классификация блоков, когда виртуальная граница представляет собой 4 строки.
Фиг. 9 показано, как выполняется классификация блоков ALF для строк выше и ниже виртуальной границы.
Решение 1 (классификация асимметричных усеченных блоков ALF)
Фиг. 9 раскрывает примеры, относящиеся к модифицированной классификации ALF, чтобы избежать линейных буферов яркости ALF (асимметричный вариант).
Как показано на фиг. 9a и фиг. 18a, для блока 4×4 непосредственно над виртуальной границей для классификации блоков используются только выборки, находящиеся выше границы блока.
В одной реализации для классификации блока 4×4 непосредственно над VB (4a):
Используйте только выборки выше VB в классификации (выборки в строках от E до I).
Для классификации блока 4×4 непосредственно под VB (4b):
Используйте только выборки ниже VB в классификации (выборки в строках от P до L).
В одной реализации для классификации блока 4×4 непосредственно над VB (4a)):
Дополнение строки J строками K, L, M.
Для классификации блока 4×4 непосредственно под VB (4b):
Дополнение строки K строками J, I, H.
Как показано на фиг. 9b, для классификации блока 4×4 непосредственно под виртуальной границей используются только выборки, находящиеся ниже виртуальной границы.
На фиг. 9a, фиг. 22a (случай, когда блок 4x4 находится выше VB) классификация блоков для блока, начинающегося в строке G, использует строки D, E, F, F, H, J, J. Поскольку расчет градиента выборки, принадлежащие строке J, нуждается в еще одной строке ниже, поэтому строка J дополняется строкой K.
В одной реализации
Для блока 4×4 выше VB:
Только выборки выше VB вносят вклад в классификацию блоков ALF и наоборот.
Для расчета градиента выборок в строке J строка K дополняется строкой J.
Для блока 4×4 ниже VB:
Только выборки ниже VB вносят вклад в классификацию блоков ALF и наоборот.
Для расчета градиента выборок в строке J строка K дополняется строкой J.
При расчете активности используется другая нормализация, поскольку для классификации блоков используется меньше выборок.
Поэтому для расчета активности используется следующее уравнение:
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>> 2]*Ac)>>(3+ BitDepthY))], где значение Ac равно 96 для блоков вблизи виртуальной границы и 64 для остальных блоков.
Используемый расчет активности модифицируется следующим образом: avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*Ac)>>(3+ BitDepthY))], где значение Ac равно 96 для блоков вблизи виртуальной границы и 64 для остальных блоков.
В качестве альтернативы, для классификации блоков, начинающихся со строки G, используются только строки D, E, F, G. Строка I может быть дополнительно использована для классификации, например, вычисляет градиенты для каждого набора из 2 строк, что затрудняет включение строки I в классификацию.
Второе решение - использовать простое дополнение. Строка J дополняется строкой K, L, M, а затем строки, начинающиеся от D до M, могут использоваться для классификации блоков.
На фиг. 9b, фиг. 22b и фиг. 18b (случай, когда блок 4×4 находится ниже VB) классификация блоков для блока, начинающегося в строке K, использует строки K, L, M, N, O, P, Q. , Поскольку для вычисления градиента выборок, принадлежащих строке K, требуется еще одна строка выше, поэтому строка K дополняется строкой J. Используемый расчет активности модифицируется следующим образом: avgVar[x][y]=varTab[Clip3(0 , 15, (sumOfHV[x >> 2][y >> 2] * Ac) >> (3+ BitDepthY)], где значение Ac равно 96 для блоков вблизи виртуальной границы и 64 для остальных блоков.
В одной реализации
Для классификации блока 4×4 непосредственно над VB (фиг. 18a):
Используйте только выборки выше VB в классификации (выборки в строках от E до H).
Строки I и J рассматриваются вместе в VTM-3.0, поэтому используется только строка H.
Дополнение строки J строкой K, чтобы также использовать строки I и J в классификации.
Для классификации блока 4×4 непосредственно под VB (фиг. 18b):
Используйте только выборки ниже VB в классификации (выборки в строках от P до M)
Строки K и L рассматриваются вместе в VTM-3.0, поэтому используется только строка M.
Дополнение строки K строкой J, чтобы также использовать строки I и J в классификации.
Альтернативно, для классификации блоков, начинающихся со строки K, используются только строки M, N, O, P, Q. Строка L может быть дополнительно использована для классификации, например, вычисляет градиенты для каждого набора из 2 строк, что затрудняет включение строки L в классификацию.
Второе решение - использовать простое дополнение. Строка K дополняется строкой J, I, H, а затем строки, начинающиеся от H до Q, могут использоваться для классификации блоков.
Решение 2 (классификация симметричных усеченных блоков ALF)
Как показано на фиг. 10, раскрыта реализация, относящаяся к модифицированной классификации ALF, чтобы избежать линейных буферов яркости ALF (симметричный вариант), классификация симметричных усеченных блоков ALF использует лишь внутренние 4 выборки (a, b, c, d) для классификации заданного блока.
Например,
Решение 1:
Для классификации блока 4×4 непосредственно над VB (фиг. 10a):
Используйте только выборки выше VB в классификации. В основном используются выборки a, b, c, d.
Для классификации блока 4×4 непосредственно под VB (фиг. 10b):
Используйте только выборки ниже VB в классификации. В основном используются выборки a, b, c, d.
На фиг. 10a для блока, начинающегося с строки G, в расчетах градиента используются только выборки, принадлежащие строкам H и I (выборки a, b, c, d). Никакого дополнительного дополнения в этом случае не требуется. Аналогично на фиг. 10b для блока, начинающегося с строки K, в расчетах градиента используются только выборки, принадлежащие строкам L и M (выборки a, b, c, d). Никакого дополнительного дополнения в этом случае не требуется. Преимущество этого решения состоит в том, что градиент вычисляется с использованием симметричной формы блока, что может быть выгодно для субъективного качества изображения, особенно когда содержимое изображения часто изменяется в заданном локальном окне. Кроме того, решение является менее сложным в вычислительном отношении, поскольку оно вычисляет градиент, используя только 4 выборки (a, b, c, d).
Фиг. 11 раскрывает реализацию, относящуюся к модифицированной классификации ALF, чтобы избежать линейных буферов яркости ALF с 6 строками (2 дополнительные строки могут использоваться для классификации блоков ALF), изображает особый случай, когда классификация блоков ALF может использовать две дополнительные строки линейного буфера, которые могут хранить SAO-фильтрованные. В этом случае классификация блоков ALF может использовать две дополнительные строки как выше, так и ниже виртуальной границы для блоков, начинающихся со строки G и строки K соответственно.
Например,
Решение 1:
Для классификации блока 4×4 непосредственно над VB (левый подрисунок на фиг. 11):
SAO-фильтрованные строки K, L ниже VB могут быть использованы в дальнейшем
Для классификации блока 4×4 непосредственно под VB (правый подрисунок на фиг. 11):
SAO-Фильтрованные строки I, J выше VB, , могут быть использованы в дальнейшем
В другом примере
Решение 2:
Для классификации блока 4×4 непосредственно над VB (левый подрисунок на фиг. 11):
Дополнение строки L строками M
Для классификации блока 4×4 непосредственно под VB (правый подрисунок на фиг. 11):
Дополнение строки I строкой H.
Модифицированная фильтрация ALF, когда виртуальная граница представляет собой 4 строки.
Фиг. 12a и фиг. 12b раскрывают реализацию, относящуюся к модифицированной фильтрации ALF, чтобы избежать линейных буферов яркости ALF. Для фильтрации строк H, J, I (выше виртуальной границы) и строк K, L, M (ниже виртуальной границы) используются искаженные версии фильтра яркости 7×7.
Фильтр отбрасывает коэффициенты выше и ниже виртуальной границы симметричным образом. Например, для фильтрации строки M коэффициент c0 лежит выше виртуальной границы и, наоборот, для фильтрации строки H. Поэтому в этом случае для решения 1 отброшенный коэффициент c0 добавляется к соседнему коэффициенту, который является непосредственно вертикальным. Следовательно, . В решении 2 отброшенный коэффициент добавляется к центральному коэффициенту, в результате чего
Аналогично для фильтрации строки L и строки I модифицированные значения коэффициентов относятся к решению 1:
Для решения 2:
Аналогично для фильтрации строки J и строки K модифицированные значения коэффициентов относятся к решению 1:
Это решение также можно рассматривать как симметричное дополнение, как показано на фиг. 21. Как показано на фиг. 21a, для фильтрации строки M строка K дополняется строкой J, а строка J дополняется строкой K.
Как показано на фиг. 21b, для фильтрации строки L строка K дополняется строкой J и строки I. Аналогично для фильтрации строки I строка J дополняется строкой K и строки L.
Как показано на фиг. 21c, для фильтрации строки K строка K дополняется строками J, I и H. Аналогично для фильтрации строки J строка J дополняется строками K, L и M.
Процесс, аналогичный описанному выше, также выполняется для фильтрации ALF цветности.
Изменения спецификации синтаксиса для решения 1 приведены ниже:
2.1 Общие положения
Входными данными этого процесса являются массивы восстановленных выборок изображения перед адаптивным контурным фильтром recPictureL, recPictureCb и recPictureCr.
Выходными данными этого процесса являются массивы модифицированных восстановленных выборок изображения после адаптивного контурного фильтра alfPictureL, alfPictureCb и alfPictureCr.
Значения выборок в массивах модифицированных восстановленных выборок изображения после адаптивного контурного фильтра alfPictureL, alfPictureCb и alfPictureCr изначально устанавливаются равными значениям выборок в массивах восстановленных выборок изображения перед адаптивным контурным фильтром recPictureL, recPictureCb и recPictureCr, соответственно.
Когда значение tile_group_alf_enabled_flag равно 1, для каждой единицы дерева кодирования с местоположением блока дерева кодирования яркости (rx, ry), где rx=0..PicWidthInCtbs - 1 и ry=0..PicHeightInCtbs - 1, применяется следующее:
Когда значение alf_ctb_flag[0][rx][ry] равно 1, процесс фильтрации блоков дерева кодирования для выборок яркости, как указано в пункте 2.2, вызывается с recPictureL, alfPictureL и местоположением (xCtb, yCtb) блока дерева кодирования яркости установленными равным (rx << CtbLog2SizeY, ry << CtbLog2SizeY) в качестве входных данных, а выходными данными является модифицированное фильтрованное изображение alfPictureL.
Когда значение alf_ctb_flag[1][rx][ry] равно 1, вызывается процесс фильтрации блоков дерева кодирования для выборок цветности, как указано в пункте 2.4, с recPicture, установленным равным recPictureCb, alfPicture, установленным равным alfPictureCb, и местоположением (xCtbC, yCtbC) блока дерева кодирования цветности, установленным равным (rx << (CtbLog2SizeY - 1), ry << (CtbLog2SizeY - 1) в качестве входных данных, а выходными данными является модифицированное фильтрованное изображение alfPictureCb.
Когда значение alf_ctb_flag[2][rx][ry] равно 1, вызывается процесс фильтрации блоков дерева кодирования для выборок цветности, как указано в пункте 2.4, с recPicture, установленным равным recPictureCr, alfPicture, установленным равным alfPictureCr, и местоположением (xCtbC, yCtbC) блока дерева кодирования цветности установленным равным (rx << (CtbLog2SizeY - 1), ry << (CtbLog2SizeY - 1) в качестве входных данных, а выходными данными является модифицированное фильтрованное изображение alfPictureCr.
2.2 Процесс фильтрации блоков дерева кодирования для выборок яркости
Входные данные этого процесса:
восстановленный массив recPictureL выборок яркости изображения до процесса адаптивной контурной фильтрации,
массив alfPictureL фильтрованных восстановленных выборок яркости изображения,
местоположение (xCtb, yCtb) яркости, указывающее верхнюю левую выборку текущего блока дерева кодирования яркости относительно верхней левой выборки текущего изображения.
Выходными данными этого процесса является массив alfPictureL модифицированных фильтрованных восстановленных выборок яркости изображения.
Процесс вывода для пункта 2.3 индекса фильтра вызывается с местоположением (xCtb, yCtb) и восстановленным массивом recPictureL выборок яркости изображения в качестве входных данных, и filtIdx[x][y] и transposeIdx[x][y] с x, y=0..CtbSizeY - 1 в качестве выходных данных.
Для получения фильтрованных восстановленных выборок alfPictureL[x][y] яркости каждая восстановленная выборка яркости внутри текущего блока дерева кодирования яркости recPictureL[x][y] фильтруется следующим образом с x, y=0..CtbSizeY - 1:
Массив коэффициентов f[j] фильтра яркости, соответствующий фильтру, заданному filtIdx[x][y], выводится следующим образом с j=0..12:
f[j]=AlfCoeffL[filtIdx[x][y]][j].
Коэффициенты фильтра яркости filterCoeff выводятся в зависимости от transposeIdx[x][y] следующим образом:
Если transposeIndex[x][y]== 1,
filterCoeff[]={ f[9], f[4], f[10], f[8], f[1], f[5], f[11], f[7], f[3], f[0], f[2], f[6], f[12] }
В противном случае, если transposeIndex[x][y]== 2,
filterCoeff[]={ f[0], f[3], f[2], f[1], f[8], f[7], f[6], f[5], f[4], f[9], f[10], f[11], f[12] }
В противном случае, если transposeIndex[x][y]== 3,
filterCoeff[]={ f[9], f[8], f[10], f[4], f[3], f[7], f[11], f[5], f[1], f[0], f[2], f[6], f[12] }
В противном случае
filterCoeff[]={ f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8], f[9], f[10], f[11], f[12] }
Местоположения (hx, vy) для каждой из соответствующих выборок яркости (x, y) внутри данного массива recPicture выборок яркости выводятся следующим образом:
hx=Clip3(0, pic_width_in_luma_samples-1,xCtb+x)
vy=y
Смещение положения входной выборки фильтра r=0…6 выводится в соответствии с положением y выборки яркости, как показано в таблице 2-2a ниже.
Переменная sum выводится следующим образом:
sum=filterCoeff[0]*(recPictureL[hx,vy + r5 ]+recPictureL[hx,vy - r6 ]) +
filterCoeff[1]*(recPictureL[hx+1,vy + r3]+recPictureL[hx-1,vy - r4 ]) +
filterCoeff[2]*(recPictureL[hx,vy + r3 ]+recPictureL[hx,vy - r4 ]) +
filterCoeff[3]*(recPictureL[hx-1,vy + r3 ]+recPictureL[hx+1,vy - r4]) +
filterCoeff[4]*(recPictureL[hx+2,vy + r1 ]+recPictureL[hx-2,vy - r2 ]) +
filterCoeff[5]*(recPictureL[hx+1,vy + r1 ]+recPictureL[hx-1,vy - r2 ]) +
filterCoeff[6]*(recPictureL[hx,vy + r1]+recPictureL[hx,vy - r2]) + (8-1155)
filterCoeff[7]*(recPictureL[hx-1,vy + r1 ]+recPictureL[hx+1,vy - r2]) +
filterCoeff[8]*(recPictureL[hx-2,vy + r1 ]+recPictureL[hx+2,vy - r2]) +
filterCoeff[9]*(recPictureL[hx+3,vy]+recPictureL[hx-3,vy]) +
filterCoeff[10]*(recPictureL[hx+2,vy]+recPictureL[hx-2,vy]) +
filterCoeff[11]*(recPictureL[hx+1,vy]+recPictureL[hx-1,vy]) +
filterCoeff[12]*recPictureL[hx,vy]
sum=(sum+64)>>7
Модифицированная фильтрованная восстановленная выборка alfPictureL[xCtb+x][yCtb+y] яркости изображения выводится следующим образом:
alfPictureL[xCtb+x][yCtb+y]=Clip3(0, (1 << BitDepthY) - 1, сумма).
2.3 Процесс получения для транспонирования ALF и индекса фильтра для выборок яркости
Входные данные этого процесса:
местоположение (xCtb, yCtb) яркости, указывающее верхнюю левую выборку текущего блока дерева кодирования яркости относительно верхней левой выборки текущего изображения,
восстановленный массив recPictureL выборок яркости изображения до процесса адаптивной контурной фильтрации.
Выходными данными этого процесса являются:
массив filtIdx[x][y] индексов фильтра классификации с x, y=0..CtbSizeY - 1,
массив transposeIdx индексов транспонирования[x][y] с x, y=0..CtbSizeY - 1.
Местоположения (hx, vy) для каждой из соответствующих выборок яркости (x, y) внутри данного массива recPicture выборок яркости выводятся следующим образом:
hx=Clip3 (0, pic_width_in_luma_samples - 1, x)
если yCtb+CtbSizeY >= pic_height_in_luma_samples
vy=Clip3 (0, pic_height_in_luma_samples - 1, y)
В противном случае, если y < (CtbSizeY - 4),
vy=Clip3(0, yCtb+CtbSizeY - 5, yCtb+y)
В противном случае
vy=Clip3(yCtb+CtbSizeY - 4, pic_height_in_luma_samples - 1, yCtb+y).
Массив filtIdx индексов фильтра классификации и массив transposeIdx индексов транспонирования получают с помощью следующих упорядоченных этапов:
Переменные filtH[x][y], filtV[x][y], filtD0[x][y] и filtD1[x][y] с x, y=-2..CtbSizeY+1 выводятся следующим образом:
Если оба x и y - четные числа или оба x и y - нечетные числа, применяется следующее:
filtH[x][y]=Abs(recPicture[hxCtb+x, vyCtb+y] << 1) - recPicture[hxCtb+x-1, vyCtb+ y] - recPicture[hxCtb+x+1, vyCtb+y])
filtV[x][y]=Abs(recPicture[hxCtb+x, vyCtb+y] << 1) - recPicture[hxCtb+x, vyCtb+y-1] - recPicture[hxCtb+x, vyCtb+y+1])
filtD0[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x-1,vyCtb+y-1]-recPicture[hxCtb+x+1,vyCtb+y+1])
filtD1[x][y]=Abs((recPicture[hxCtb + x,vyCtb + y]<<1) - recPicture[hxCtb + x + 1,vyCtb + y - 1] - recPicture[ hxCtb + x - 1,vyCtb + y + 1])
В противном случае filtH[x][y], filtV[x][y], filtD0[x][y] и filtD1[x][y] устанавливаются равными 0.
Переменные varTempH1[x][y], varTempV1[x][y], varTempD01[x][y], varTempD11[x][y] и varTemp[x][y] с x, y=0..(CtbSizeY - 1) >> 2 выводятся следующим образом:
Если (y << 2) == CtbSizeY - 8 и yCtb+CtbSizeY < pic_height_in_luma_samples - 1, то
sumH[x][y]=ΣiΣj filtH[(x<<2)+i][(y<<2)+j] с i=-2..5 и j = -2..3
sumV[x][y]=ΣiΣj filtV[(x<<2)+i][(y<<2)+j] с i=-2..5 и j = -2..3
sumD0[x][y]=ΣiΣj filtD0[(x<<2)+i][(y<<2)+j] с i=-2..5 и j = -2..3
sumD1[x][y]=ΣiΣj filtD1[(x<<2)+i][(y<<2)+j] с i=-2..5 и j = -2..3
переменная Ac установлена как 96
в противном случае, если (y << 2) == CtbSizeY - 4 и yCtb+CtbSizeY < pic_height_in_luma_samples - 1, то
sumH[x][y]=ΣiΣj filtH[(x<<2)+i][(y<<2)+j] с i=-2..5 и j = 0..5
sumV[x][y]=ΣiΣj filtV[(x<<2)+i][(y<<2)+j] с i=-2..5 и j = 0..5
sumD0[x][y]=ΣiΣj filtD0[(x<<2)+i][(y<<2)+j] с i=-2..5 и j = 0..5
sumD1[x][y]=ΣiΣj filtD1[(x<<2)+i][(y<<2)+j] с i=-2..5 и j = 0..5
переменная Ac установлена как 96
в противном случае
sumH[x][y]=ΣiΣj filtH[(x<<2)+i][(y<<2)+j] с i,j=-2..5
sumV[x][y]=ΣiΣj filtV[(x<<2)+i][(y<<2)+j] с i,j=-2..5
sumD0[x][y]=ΣiΣj filtD0[(x<<2)+i][(y<<2)+j] с i,j=-2..5
sumD1[x][y]=ΣiΣj filtD1[(x<<2)+i][(y<<2)+j] с i,j=-2..5
sumOfHV[x][y]=sumH[x][y]+sumV[x][y] (8-1168)
переменная Ac установлена как 64
Переменные dir1[x][y], dir2[x][y] и dirS[x][y] с x, y=0..CtbSizeY - 1 выводятся следующим образом:
Переменные hv1, hv0 и dirHV выводятся следующим образом:
Если sumV[x >> 2][y >> 2] больше, чем sumH[x >> 2][y >> 2], применяется следующее:
hv1=sumV[x>>2][y>>2]
hv0=sumH[x>>2][y>>2]
dirHV=1;
В противном случае применяется следующее:
hv1=sumH[x>>2][y>>2]
hv0=sumV[x>>2][y>>2]
dirHV=3.
Переменные d1, d0 и dirD выводятся следующим образом:
Если sumD0[x>>2][y>>2] больше, чем sumD1[x>>2][y>>2], применяется следующее:
d1=sumD0[x>>2][y>>2]
d0=sumD1[x>>2][y>>2]
dirD=0;
В противном случае применяется следующее:
d1=sumD1[x>>2][y>>2]
d0=sumD0[x>>2][y>>2]
dirD = 2.
Переменные hvd1, hvd0 выводятся следующим образом:
hvd1=(d1*hv0>hv1*d0)?d1:hv1
hvd0=(d1*hv0>hv1*d0)?d0:hv0.
Переменные dirS[x][y], dir1[x][y] и dir2[x][y] выводятся следующим образом:
dir1[x][y]=(d1*hv0>hv1*d0)?dirD:dirHV
dir2[x][y]=(d1*hv0>hv1*d0)?dirHV:dirD
dirS[x][y]=(hvd1>2*hvd0)?1:((hvd1*2>9*hvd0)?2:0).
Переменная avgVar[x][y] с x, y=0..CtbSizeY - 1 выводится следующим образом:
varTab[]={ 0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4 }
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*Ac)>>(3+BitDepthY))].
Массив filtIdx[x][y] индексов фильтра классификации и массив transposeIdx индексов транспонирования[x][y] с x=y=0..CtbSizeY - 1 выводятся следующим образом:
transposeTable[]={ 0, 1, 0, 2, 2, 3, 1, 3 }
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
Когда dirS[x][y] не равно 0, filtIdx[x][y] модифицируется следующим образом:
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5.
2.4 Процесс фильтрации блоков дерева кодирования для выборок цветности
Входные данные этого процесса:
восстановленный массив recPicture выборок цветности изображения до процесса адаптивной контурной фильтрации,
фильтрованный восстановленный массив выборок цветности изображения alfPicture,
местоположение (xCtbC, yCtbC) цветности, указывающее верхнюю левую выборку текущего блока дерева кодирования цветности относительно верхней левой выборки текущего изображения.
Выходными данными этого процесса является модифицированный фильтрованный восстановленный массив выборок цветности изображения alfPicture.
Размер текущего блока дерева кодирования цветности ctbSizeC выводится следующим образом:
ctbSizeC=CtbSizeY/SubWidthC .
Для получения фильтрованных восстановленных выборок alfPicture[x][y] цветности каждая восстановленная выборка цветности внутри текущего блока дерева кодирования цветности recPicture[x][y] фильтруется следующим образом с x, y=0..ctbSizeC - 1:
Местоположения (hx, vy) для каждого из соответствующих выборок цветности (x, y) внутри данного массива recPicture выборок цветности выводится следующим образом:
hx=Clip3 (0, pic_width_in_luma_samples/SubWidthC - 1, xCtbC+x)
vy = y
смещения r=0…4 положения входной выборки фильтра выводятся в соответствии с положением y выборки цветности, как показано в Таблице 2.4 ниже.
Переменная sum выводится следующим образом:
sum=AlfCoeffC[0]*(recPicture[hx,vy + r3]+recPicture[hx,vy - r4]) +
AlfCoeffC[1]*(recPicture[hx+1,vy + r1]+recPicture[hx-1,vy - r2]) +
AlfCoeffC[2]*(recPicture[hx,vy + r1]+recPicture[hx,vy - r2]) +
AlfCoeffC[3]*(recPicture[hx-1,vy + r1]+recPicture[hx+1,vy - r2]) +
AlfCoeffC[4]*(recPicture[hx+2,vy]+recPicture[hx-2,vy]) +
AlfCoeffC[5]*(recPicture[hx+1,vy]+recPicture[hx-1,vy]) +
AlfCoeffC[6]*recPicture[hx,vy]
Модифицированная фильтрованная восстановленная выборка alfPicture[xCtbC+x][yCtbC+y] цветности изображения выводится следующим образом:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum).
Для решения 2:
Процесс фильтрации ALF согласно ITU JVET-Q0044 выглядит следующим образом:
8.8.5 Процесс адаптивной контурной фильтрации
8.8.5.1 Общие положения
Входными данными этого процесса являются массив восстановленных выборок изображения перед адаптивным контурным фильтром recPictureL и, когда ChromaArrayType не равно 0, массивы recPictureCb и recPictureCr .
Выходными данными этого процесса являются массив модифицированных восстановленных выборок изображения после адаптивного контурного фильтра alfPictureL и, когда ChromaArrayType не равно 0, массивы alfPictureCb и alfPictureCr.
Значения выборок в массиве модифицированных восстановленных выборок изображения после адаптивного контурного фильтра alfPictureL и, когда ChromaArrayType не равно 0, массивы alfPictureCb и alfPictureCr изначально устанавливаются равными значениям выборок в массиве восстановленных выборок изображения до применения адаптивного контурного фильтра recPictureL, и, когда ChromaArrayType не равно 0, массивы recPictureCb и recPictureCr соответственно.
Для каждой единицы дерева кодирования с местоположением блока дерева кодирования яркости (rx, ry), где rx=0..PicWidthInCtbsY - 1 и ry=0..PicHeightInCtbsY - 1, применяется следующее:
Когда alf_ctb_flag[0][rx][ry] равно 1, процесс фильтрации блоков дерева кодирования для выборок яркости, как указано в пункте 8.8.5.2, вызывается с recPictureL, alfPictureL и местоположением (xCtb, yCtb) блока дерева кодирования яркости установленным равным (rx << CtbLog2SizeY , ry << CtbLog2SizeY) в качестве входных данных, а выходными данными является модифицированное фильтрованное изображение alfPictureL.
Когда ChromaArrayType не равно 0, а alf_ctb_flag[1][rx][ry] равно 1, процесс фильтрации блоков дерева кодирования для выборок цветности, как указано в пункте 8.8.5.4, вызывается с recPicture, установленным равным recPictureCb, alfPicture установленным равным alfPictureCb, местоположением (xCtbC, yCtbC) блока дерева кодирования цветности, установленным равным (rx << CtbLog2SizeY) / SubWidthC, (ry << CtbLog2SizeY) / SubHeightC) и набором индексов altIdx альтернативного фильтра цветности установленным равным alf_ctb_filter_alt_idx[0][rx][ry] в качестве входных данных, а выходными данными является модифицированное фильтрованное изображение alfPictureCb.
Когда ChromaArrayType не равно 0, а alf_ctb_flag[2][rx][ry] равно 1, вызывается процесс фильтрации блоков дерева кодирования для выборок цветности, как указано в пункте 8.8.5.4, с recPicture, установленным равным recPictureCr, alfPicture установленным равным alfPictureCr, местоположением (xCtbC, yCtbC) блока дерева кодирования цветности установленым равным (rx << CtbLog2SizeY) / SubWidthC, (ry << CtbLog2SizeY) / SubHeightC), и набором индексов altIdx альтернативного фильтра цветности установленным равным alf_ctb_filter_alt_idx[0][rx][ry] в качестве входных данных, а выходными данными является модифицированное фильтрованное изображение alfPictureCr.
8.8.5.2 Процесс фильтрации блоков дерева кодирования для выборок яркости
Входные данные этого процесса:
восстановленный массив recPicture выборок яркости изображения перед процессом адаптивной контурной фильтрации,
массив alfPictureL фильтрованных восстановленных выборок яркости изображения,
местоположение (xCtb, yCtb) яркости, указывающее верхнюю левую выборку текущего блока дерева кодирования яркости относительно верхней левой выборки текущего изображения.
Выходными данными этого процесса является массив alfPictureL модифицированных фильтрованных восстановленных выборок яркости изображения.
Процесс вывода для пункта 8.8.5.3 индекса фильтра вызывается с местоположением (xCtb, yCtb) и восстановленным массивом recPicture выборок яркости изображения в качестве входных данных, и filtIdx[x][y] и transposeIdx[x][y] с x, y=0..CtbSizeY - 1 в качестве выходных данных.
Для получения фильтрованных восстановленных выборок alfPictureL[x][y] яркости каждая восстановленная выборка яркости внутри текущего блока дерева кодирования яркости recPicture[x][y] фильтруется следующим образом с x, y=0..CtbSizeY - 1:
Массив коэффициентов f[j] фильтра яркости и массив значений c[j] отсечения яркости, соответствующий фильтру, заданному filtIdx[x][y], выводится следующим образом с j=0..11:
Если AlfCtbFiltSetIdxY[xCtb >> CtbLog2SizeY][yCtb >> CtbLog2SizeY] меньше 16, применяется следующее:
i=AlfCtbFiltSetIdxY[xCtb >> CtbLog2SizeY][yCtb >> CtbLog2SizeY] (1411)
f[j]=AlfFixFiltCoeff[AlfClassToFiltMap[i][filtIdx[x][y]]][j] (1412)
c[j]=2BitDepth (1413 ()
В противном случае (AlfCtbFiltSetIdxY[xCtb >> CtbLog2SizeY][yCtb >> CtbLog2SizeY] больше или равно 16, применяется следующее:
i=slice_alf_aps_id_luma[AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY] - 16] (1414)
f[j]=AlfCoeffL[i][filtIdx[x][y]][j] (1415 ()
c[j]=AlfClipL[i][filtIdx[x][y]][j] (1416 ()
Коэффициенты фильтра яркости и индекс idx значений отсечения выводятся в зависимости от transposeIdx[x][y] следующим образом:
Если значение transposeIndex[x][y] равно 1, применяется следующее:
idx[]={9, 4, 10, 8, 1, 5, 11, 7, 3, 0, 2, 6} (1417)
В противном случае, если значение transposeIndex[x][y] равно 2, применяется следующее:
idx[]={0, 3, 2, 1, 8, 7, 6, 5, 4, 9, 10, 11} (1418)
В противном случае, если значение transposeIndex[x][y] равно 3, применяется следующее:
idx[]={9, 8, 10, 4, 3, 7, 11, 5, 1, 0, 2, 6} (1419)
В противном случае применяется следующее:
idx[]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} (1420)
Местоположения (hx+i, vy+j) для каждой из соответствующих выборок яркости (x, y) внутри данного массива recPicture выборок яркости с i, j=-3..3 выводится следующим образом:
hx+i=Clip3(0, pic_width_in_luma_samples - 1, xCtb+x+i) (1421)
vy+j=Clip3(0, pic_height_in_luma_samples - 1, yCtb+y+j) (1422 ()
Переменные clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag и clipBotRightFlag получаются путем вызова процесса определения граничного положения ALF, как указано в пункте 8.8.5.5, с (xCtb, yCtb) и (x, y) в качестве входных данных.
Переменные hx+i и vy+j модифицируются путем вызова процесса выборочного дополнения ALF (ALF sample padding), как указано в пункте 8.8.5.6, с помощью (xCtb, yCtb), (hx+i, vy+j), 0, clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag и clipBotRightFlag в качестве входных данных.
Переменная applyAlfLineBufBoundary выводится следующим образом:
Если нижняя граница текущего блока дерева кодирования является нижней границей текущего изображения и pic_height_in_luma_samples - yCtb <= CtbSizeY - 4, applyAlfLineBufBoundary устанавливается равным 0:
В противном случае applyAlfLineBufBoundary устанавливается равным 1.
Смещения y1, y2 и y3 вертикального положения выборки указаны в таблице 43 в соответствии с вертикальным положением y выборки яркости и applyAlfLineBufBoundary.
Переменная curr выводится следующим образом:
curr=recPicture[hx][vy] (1423)
Переменная sum выводится следующим образом: sum=f[idx[0]]*(Clip3(-c[idx[0]],c[idx[0]],recPicture[hx][vy +y3]-curr)+
Clip3(-c[idx[0]],c[idx[0]],recPicture[hx][vy -y3]-curr)) + f[idx[1]]*(Clip3(-c[idx[1]],c[idx[1]],recPicture[hx +1][vy +y2]-curr)+
Clip3(-c[idx[1]],c[idx[1]],recPicture[hx -1][vy -y2]-curr)) +
f[idx[2]]*(Clip3(-c[idx[2]],c[idx[2]],recPicture[hx][vy +y2]-curr)+
Clip3(-c[idx[2]],c[idx[2]],recPicture[hx][vy -y2]-curr)) +
f[idx[3]]*(Clip3(-c[idx[3]],c[idx[3]],recPicture[hx -1][vy +y2]-curr)+
Clip3(-c[idx[3]],c[idx[3]],recPicture[hx +1][vy -y2]-curr)) +
f[idx[4]]*(Clip3(-c[idx[4]],c[idx[4]],recPicture[hx +2][vy +y1]-curr)+
Clip3(-c[idx[4]],c[idx[4]],recPicture[hx -2][vy -y1]-curr)) +
f[idx[5]]*(Clip3(-c[idx[5]],c[idx[5]],recPicture[hx +1][vy +y1]-curr)+
Clip3(-c[idx[5]],c[idx[5]],recPicture[hx -1][vy -y1]-curr)) +
f[idx[6]]*(Clip3(-c[idx[6]],c[idx[6]],recPicture[hx][vy +y1]-curr)+
Clip3(-c[idx[6]],c[idx[6]],recPicture[hx][vy -y1]-curr)) + (1424)
f[idx[7]]*(Clip3(-c[idx[7]],c[idx[7]],recPicture[hx -1][vy +y1]-curr)+
Clip3(-c[idx[7]],c[idx[7]],recPicture[hx +1][vy -y1]-curr)) +
f[idx[8]]*(Clip3(-c[idx[8]],c[idx[8]],recPicture[hx -2][vy +y1]-curr)+
Clip3(-c[idx[8]],c[idx[8]],recPicture[hx +2][vy -y1]-curr)) +
f[idx[9]]*(Clip3(-c[idx[9]],c[idx[9]],recPicture[hx +3][vy]-curr)+
Clip3(-c[idx[9]],c[idx[9]],recPicture[hx -3][vy]-curr)) +
f[idx[10]]*(Clip3(-c[idx[10]],c[idx[10]],recPicture[hx +2][vy]-curr)+
Clip3(-c[idx[10]],c[idx[10]],recPicture[hx -2][vy]-curr)) +
f[idx[11]]*(Clip3(-c[idx[11]],c[idx[11]],recPicture[hx +1][vy]-curr)+
Clip3(-c[idx[11]],c[idx[11]],recPicture[hx -1][vy]-curr)) sum=curr+((sum+64)>>7) (1425)
Модифицированная фильтрованная восстановленная выборка alfPictureL[xCtb+x][yCtb+y] яркости изображения выводится следующим образом:
alfPictureL[xCtb+x][yCtb+y]=Clip3(0,(1<<BitDepth)-1,sum) (1426)
8.8.5.3 Процесс получения для транспонирования ALF и индекса фильтра для выборок яркости
Входные данные этого процесса:
местоположение (xCtb, yCtb) яркости, указывающее верхнюю левую выборку текущего блока дерева кодирования яркости относительно верхней левой выборки текущего изображения,
восстановленный массив recPicture выборок яркости изображения перед процессом адаптивной контурной фильтрации.
Выходными данными этого процесса являются:
массив filtIdx[x][y] индексов фильтра классификации с x, y=0..CtbSizeY - 1,
массив transposeIdx индексов транспонирования[x][y] с x, y=0..CtbSizeY - 1.
Переменные ac[x][y], sumH[x][y], sumV[x][y], sumD0[x][y], sumD1[x][y] и sumOfHV[x][y] с x, y=0..(CtbSizeY - 1) >> 2 выводятся следующим образом:
Переменные x4 и y4 устанавливаются как (x << 2) и (y << 2) соответственно.
Переменные minY, maxY и ac[x][y] выводятся следующим образом:
Если y4 равно (CtbSizeY - 8) и выполняется одно из следующих условий, minY устанавливается равным -2, maxY устанавливается равным 3, а ac[x][y] устанавливается равным 3.
Нижняя граница текущего блока дерева кодирования является нижней границей изображения и pic_height_in_luma_samples - yCtb > CtbSizeY - 4.
Нижняя граница текущего блока дерева кодирования не является нижней границей изображения.
В противном случае, если y4 равно (CtbSizeY - 4) и выполняется одно из следующих условий, minY устанавливается равным 0, maxY устанавливается равным 5, а ac[x][y] устанавливается равным 3.
Нижняя граница текущего блока дерева кодирования является нижней границей изображения и pic_height_in_luma_samples - yCtb > CtbSizeY - 4.
Нижняя граница текущего блока дерева кодирования не является нижней границей изображения.
В противном случае minY устанавливается равным -2, maxY устанавливается равным 5, а ac[x][y] устанавливается равным 2.
Переменные clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag и clipBotRightFlag получаются путем вызова процесса определения граничного положения ALF, как указано в пункте 8.8.5.5, с (xCtb, yCtb) и (x4, y4) в качестве входных данных.
Местоположения (hx4+i, vy4+j) для каждого из соответствующих выборок яркости внутри данного массива recPicture выборок яркости с i, j=-3..6 выводится следующим образом:
hx4+i=Clip3(0, pic_width_in_luma_samples - 1, xCtb+x4+i) (1427)
vy4+j=Clip3(0, pic_height_in_luma_samples - 1, yCtb+y4+j) (1428)
Переменные hx4+i и vy4+j модифицируются путем вызова процесса выборочного дополнения ALF, как указано в пункте 8.8.5.6, с (xCtb, yCtb), (hx4+i, vy4+j), переменной isChroma установленной равной равной 0, clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag и clipBotRightFlag в качестве входных данных.
Переменные filtH[i][j], filtV[i][j], filtD0[i][j] и filtD1[i][j] с i, j=-2..5 выводятся следующим образом:
Если и i, и j являются четными числами или оба i и j не являются четными числами, применяется следующее:
filtH[i][j]=Abs((recPicture[hx4+i][vy4+j]<<1)-recPicture[hx4+i-1][vy4+j]-recPicture[hx4+i+1][vy4+j]) (1429)
filtV[i][j]=Abs((recPicture[hx4+i][vy4+j]<<1)-recPicture[hx4+i][vy4+j-1]-recPicture[hx4+i][vy4+j+1]) (1430)
filtD0[i][j]=Abs((recPicture[hx4+i][vy4+j]<<1)-recPicture[hx4+i-1][vy4+j-1]-recPicture[hx4+i+1][vy4+j+1]) (1431)
filtD1[i][j]=Abs((recPicture[hx4+i][vy4+j]<<1)-recPicture[hx4+i+1][vy4+j-1]-
recPicture[hx4+i-1][vy4+j+1]) (1432)
В противном случае filtH[i][j], filtV[i][j], filtD0[i][j] и filtD1[i][j] устанавливаются равными 0.
Переменные sumH[x][y], sumV[x][y], sumD0[x][y], sumD1[x][y] и sumOfHV[x][y] выводятся следующим образом:
sumH[x][y]=ΣiΣj filtH[i][j], с i=-2..5,j=minY..maxY (1433)
sumV[x][y]=ΣiΣj filtV[i][j], с i=-2..5,j=minY..maxY (1434)
sumD0[x][y]=ΣiΣj filtD0[i][j], с i=-2..5,j=minY..maxY (1435)
sumD1[x][y]=ΣiΣj filtD1[i][j], с i=-2..5,j=minY..maxY (1436)
sumOfHV[x][y]=sumH[x][y]+sumV[x][y] (1437)
Массив filtIdx индексов фильтра классификации и массив transposeIdx индексов транспонирования получаются с помощью следующих этапов:
1. Переменные dir1[x][y], dir2[x][y] и dirS[x][y] с x, y=0..CtbSizeY - 1 выводятся следующим образом:
Переменные hv1, hv0 и dirHV выводятся следующим образом:
Если sumV[x >> 2][y >> 2] больше, чем sumH[x >> 2][y >> 2], применяется следующее:
hv1=sumV[x>>2][y>>2] (1438)
hv0=sumH[x>>2][y>>2] 1439)
dirHV=1 (1440)
В противном случае применяется следующее:
hv1=sumH[x>>2][y>>2] (1441)
hv0=sumV[x>>2][y>>2] (1442)
dirHV=3 (1443)
Переменные d1, d0 и dirD выводятся следующим образом:
Если sumD0[x >> 2][y >> 2] больше, чем sumD1[x >> 2][y >> 2], применяется следующее:
d1=sumD0[x>>2][y>>2] (1444)
d0=sumD1[x>>2][y>>2] (1445)
dirD=0 (1446)
В противном случае применяется следующее:
d1=sumD1[x>>2][y>>2] (1447)
d0=sumD0[x>>2][y>>2] (1448)
dirD = 2 (1449)
Переменные hvd1, hvd0 выводятся следующим образом:
hvd1=(d1*hv0>hv1*d0)?d1:hv1 (1450)
hvd0=(d1*hv0>hv1*d0)?d0:hv0 (1451)
Переменные dirS[x][y], dir1[x][y] и dir2[x][y] выводятся следующим образом:
dir1[x][y]=(d1*hv0>hv1*d0)?dirD:dirHV (1452)
dir2[x][y]=(d1*hv0>hv1*d0)?dirHV:dirD (1453)
dirS[x][y]=(hvd1*2>9*hvd0)?2:((hvd1>2*hvd0)?1:0) (1454)
Переменная avgVar[x][y] с x, y=0..CtbSizeY - 1 выводится следующим образом:
varTab[]={ 0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4 } (1455)
avgVar[x][y]=varTab[Clip3(0,15, (sumOfHV[x>>2][y>>2]* (1456)ac[x>>2][y>>2])>>(BitDepth-1))]
Массив filtIdx[x][y] индексов фильтра классификации и массив transposeIdx индексов транспонирования[x][y] с x=y=0..CtbSizeY - 1 выводятся следующим образом:
transposeTable[]={0, 1, 0, 2, 2, 3, 1, 3}
transposeIdx[x][y]=transposeTable[dir1[x][y] * 2 + (dir2[x][y] >> 1)]
filtIdx[x][y]=avgVar[x][y]
Когда dirS[x][y] не равно 0, filtIdx[x][y] модифицируется следующим образом:
filtIdx[x][y] += (((dir1[x][y] & 0×1) << 1) + dirS[x][y]) * 5 (1457)
8.8.5.4 Процесс фильтрации блоков дерева кодирования для выборок цветности
Входные данные этого процесса:
восстановленный массив recPicture выборок цветности изображения до процесса адаптивной контурной фильтрации,
фильтрованный восстановленный массив выборок цветности изображения alfPicture,
местоположение (xCtbC, yCtbC) цветности, указывающее верхнюю левую выборку текущего блока дерева кодирования цветности относительно верхней левой выборки текущего изображения,
индекс altIdx альтернативного фильтра цветности.
Выходными данными этого процесса является модифицированный фильтрованный восстановленный массив выборок цветности изображения alfPicture.
Ширина и высота текущего блока дерева кодирования цветности ctbWidthC и ctbHeightC выводятся следующим образом:
ctbWidthC=CtbSizeY/SubWidthC (1458)
ctbHeightC=CtbSizeY/SubHeightC (1459)
Для получения фильтрованных восстановленных выборок alfPicture[x][y] цветности каждая восстановленная выборка цветности внутри текущего блока дерева кодирования цветности recPicture[x][y] фильтруется следующим образом: x=0..ctbWidthC - 1, y=0..ctbHeightC - 1:
Местоположения (hx+i, vy+j) для каждой из соответствующих выборок цветности (x, y) внутри данного массива recPicture выборок цветности с i, j=-2..2 выводится следующим образом:
hx+i=Clip3(0, pic_width_in_luma_samples/SubWidthC - 1, xCtbC+x+i) (1460)
vy+j=Clip3(0, pic_height_in_luma_samples/SubHeightC - 1, yCtbC+y+j) (1461)
Переменные clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag и clipBotRightFlag получаются путем вызова процесса определения граничного положения ALF, как указано в пункте 8.8.5.5, с помощью (xCtbC * SubWidthC, yCtbC * SubHeightC) и (x * SubWidthC, y * SubHeightC) в качестве входных данных.
Переменные hx+i и vy+j модифицируются путем вызова процесса выборочного дополнения ALF, как указано в пункте 8.8.5.6, с (xCtb, yCtb), (hx+i, vy+j), переменная isChroma установлена равной 1, clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag и clipBotRightFlag в качестве входных данных.
Переменная applyAlfLineBufBoundary выводится следующим образом:
Если нижняя граница текущего блока дерева кодирования является нижней границей изображения и pic_height_in_luma_samples - (yCtbC * SubHeightC) < CtbSizeY - 4, applyAlfLineBufBoundary устанавливается равным 0.
В противном случае applyAlfLineBufBoundary устанавливается равным 1.
Смещения y1 и y2 выборки по вертикали указаны в таблице 43 в соответствии с вертикальным положением y выборки цветности и applyAlfLineBufBoundary.
Переменная curr выводится следующим образом:
curr=recPicture[hx][vy] (1462)
Массив коэффициентов f[j] фильтра цветности и массив значений c[j] отсечения цветности выводится следующим образом с j=0..5:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][altIdx][j] (1463)
c[j]=AlfClipC[slice_alf_aps_id_chroma][altIdx][j] (1464)
Переменная sum выводится следующим образом:
sum=f[0]*(Clip3(-c[0],c[0],recPicture[hx][vy+y2]-curr)+
Clip3(-c[0],c[0],recPicture[hx][vy-y2]-curr)) +
f[1]*(Clip3(-c[1],c[1],recPicture[hx+1][vy+y1]-curr)+
Clip3(-c[1],c[1],recPicture[hx-1][vy-y1]-curr)) +
f[2]*(Clip3(-c[2],c[2],recPicture[hx][vy+y1]-curr)+
Clip3(-c[2],c[2],recPicture[hx][vy-y1]-curr)) + (1465)
f[3]*(Clip3(-c[3],c[3],recPicture[hx-1][vy+y1]-curr)+
Clip3(-c[3],c[3],recPicture[hx+1][vy-y1]-curr)) +
f[4]*(Clip3(-c[4],c[4],recPicture[hx+2][vy]-curr)+
Clip3(-c[4],c[4],recPicture[hx-2][vy]-curr)) +
f[5]*(Clip3(-c[5],c[5],recPicture[hx+1][vy]-curr)+
Clip3(-c[5],c[5],recPicture[hx-1][vy]-curr))
sum=curr+((sum+64)>>7) (1466)
Модифицированная фильтрованная восстановленная выборка alfPicture[xCtbC+x][yCtbC+y] цветности изображения выводится следующим образом:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepth)-1,sum) (1467)
8.8.5.5 Процесс определения граничного положения ALF
Входные данные этого процесса:
местоположение (xCtb, yCtb) яркости, указывающее верхнюю левую выборку текущего блока дерева кодирования яркости относительно верхней левой выборки текущего изображения,
местоположение яркости (x, y), определяющее текущую выборку относительно верхней левой выборки текущего блока дерева кодирования яркости.
Выходными данными этого процесса являются:
левое вертикальное граничное положение clipLeftPos,
правое вертикально граничное положение clipRightPos,
верхнее горизонтальное граничное положение clipTopPos,
нижнее горизонтальное граничное положение clipBottomPos,
флаг верхней левой границы clipTopLeftFlag,
флаг нижней правой границы clipBotRightFlag.
Переменные clipLeftPos, clipRightPos, clipTopPos и clipBottomPos устанавливаются равными -128.
Обе переменные clipTopLeftFlag и clipBotRightFlag равны 0.
Переменная clipTopPos модифицируется следующим образом:
Если y - (CtbSizeY - 4) больше или равно 0, переменная clipTopPos устанавливается равной yCtb+CtbSizeY - 4.
В противном случае, если VirtualBoundariesDisabledFlag равно 1, а yCtb+y - VirtualBoundariesPosY[n] больше или равно 0 и меньше 3 для любого n=0..VirtualBoundariesNumHor - 1, применяется следующее:
clipTopPos=VirtualBoundariesPosY[n] (1468)
В противном случае, если y меньше 3 и выполняется одно или более из следующих условий, переменная clipTopPos устанавливается равной yCtb:
Верхняя граница текущего блока дерева кодирования является верхней границей тайла, а loop_filter_across_tiles_enabled_flag равно 0.
Верхняя граница текущего блока дерева кодирования является верхней границей слайса, а loop_filter_across_slices_enabled_flag равно 0.
Верхняя граница текущего блока дерева кодирования является верхней границей субизображения, а loop_filter_across_subpic_enabled_flag[SubPicIdx] равно 0.
Переменная clipBottomPos модифицируется следующим образом:
Если VirtualBoundariesDisabledFlag равно 1, VirtualBoundariesPosY[n] не равно pic_height_in_luma_samples - 1 или 0, а VirtualBoundariesPosY[n] - yCtb - y больше 0 и меньше 5 для любого n=0..VirtualBoundariesNumHor - 1, применяется следующее:
clipBottomPos=VirtualBoundariesPosY[n] (1469)
В противном случае, если CtbSizeY - 4 - y больше 0 и меньше 5, переменная clipBottomPos устанавливается равной yCtb+CtbSizeY - 4.
В противном случае, если CtbSizeY - y меньше 5 и выполняется одно или более из следующих условий, переменная clipBottomPos устанавливается равной yCtb+CtbSizeY:
Нижняя граница текущего блока дерева кодирования является нижней границей тайла, а loop_filter_across_tiles_enabled_flag равно 0.
Нижняя граница текущего блока дерева кодирования является нижней границей слайса, а loop_filter_across_slices_enabled_flag равно 0.
Нижняя граница текущего блока дерева кодирования является нижней границей субизображения, а loop_filter_across_subpic_enabled_flag[SubPicIdx] равно 0.
Переменная clipLeftPos модифицируется следующим образом:
Если VirtualBoundariesDisabledFlag равно 1, а xCtb+x - VirtualBoundariesPosX[n] больше или равно 0 и меньше 3 для любого n=0..VirtualBoundariesNumVer - 1, применяется следующее:
clipLeftPos=VirtualBoundariesPosX[n] (1470)
В противном случае, если x меньше 3 и выполняется одно или более из следующих условий, переменная clipLeftPos устанавливается равной xCtb:
Левая граница текущего блока дерева кодирования является левой границей тайла, а loop_filter_across_tiles_enabled_flag равно 0.
Левая граница текущего блока дерева кодирования является левой границей слайса, а loop_filter_across_slices_enabled_flag равно 0.
Левая граница текущего блока дерева кодирования является левой границей субизображения, а loop_filter_across_subpic_enabled_flag[SubPicIdx] равно 0.
Переменная clipRightPos модифицируется следующим образом:
Если VirtualBoundariesDisabledFlag равно 1, а VirtualBoundariesPosX[n]- xCtb - x больше 0 и меньше 5 для любого n=0..VirtualBoundariesNumVer - 1, применяется следующее:
clipRightPos=VirtualBoundariesPosX[n] (1471)
В противном случае, если CtbSizeY - x меньше 5 и выполняется одно или более из следующих условий, переменная clipRightPos устанавливается равной xCtb+CtbSizeY:
Правая граница текущего блока дерева кодирования является правой границей тайла, а loop_filter_across_tiles_enabled_flag равно 0.
Правая граница текущего блока дерева кодирования является правой границей слайса, а loop_filter_across_slices_enabled_flag равно 0.
Правая граница текущего блока дерева кодирования является правой границей фрагмента изображения, а loop_filter_across_subpic_enabled_flag[SubPicIdx] равно 0.
Переменные clipTopLeftFlag и clipBotRightFlag модифицируются следующим образом:
Если блок дерева кодирования, охватывающий положение яркости (xCtb, yCtb), и блок дерева кодирования, охватывающий положение яркости (xCtb - CtbSizeY, yCtb - CtbSizeY), принадлежат разным слайсам, а loop_filter_across_slices_enabled_flag равно 0, clipTopLeftFlag устанавливается равным 1.
Если блок дерева кодирования, охватывающий положение яркости (xCtb, yCtb), и блок дерева кодирования, охватывающий положение яркости (xCtb+CtbSizeY, yCtb+CtbSizeY), принадлежат разным слайсам, а loop_filter_across_slices_enabled_flag равно 0, clipBotRightFlag устанавливается равным 1.
8.8.5.6 Процесс выборочного дополнения ALF
Входные данные этого процесса:
местоположение (xCtb, yCtb) яркости, указывающее верхнюю левую выборку текущего блока дерева кодирования яркости относительно верхней левой выборки текущего изображения,
местоположение яркости (x, y), указывающее соседнюю выборку относительно верхней левой выборки текущего изображения,
флаг isChroma, указывающий, является ли компонент цвета компонентом цветности или нет,
левое вертикальное граничное положение clipLeftPos,
правое вертикально граничное положение clipRightPos,
верхнее горизонтальное граничное положение clipTopPos,
нижнее горизонтальное граничное положение clipBottomPos,
флаг верхней левой границы clipTopLeftFlag,
флаг нижней правой границы clipBotRightFlag.
Выходными данными этого процесса являются:
модифицированное местоположение яркости (x, y), указывающее соседнюю выборку относительно верхней левой выборки текущего изображения,
Переменные picWidth, picHeight, xCtbCur, yCtbCur, CtbSizeHor, CtbSizeVer, topBry, botBry, leftBry и rightBry выводятся следующим образом:
picWidth=isChroma ? pic_width_in_luma_samples/SubWidthC : pic_width_in_luma_samples (1472)
picHeight=isChroma? pic_height_in_luma_samples/SubHeightC : pic_height_in_luma_samples (1473)
xCtbCur=isChroma ? xCtb/SubWidthC : xCtb (1474)
yCtbCur=isChroma ? yCtb/SubHeightC : yCtb (1475)
ctbSizeHor=isChroma ? CtbSizeY/SubWidthC : CtbSizeY (1476)
ctbSizeVer=isChroma ? CtbSizeY/SubHeightC : CtbSizeY (1477)
topBryPos=isChroma ? clipTopPos/SubHeightC : clipTopPos (1478)
botBryPos=isChroma ? clipBottomPos/SubHeightC : clipBottomPos (1479)
leftBryPos=isChroma ? clipLeftPos/SubWidthC : clipLeftPos (1480)
rightBryPos=isChroma ? clipRightPos/SubWidthC : clipRightPos (1481)
Переменные (x , y) модифицируются следующим образом:
Когда topBryPos не меньше 0, применяется следующее:
y=Clip3(topBryPos, picHeight - 1, y) (1482)
Когда botBryPos не меньше 0, применяется следующее:
y=Clip3(0, botBryPos - 1, y) (1483)
Когда leftBryPos не меньше 0, применяется следующее:
x=Clip3(leftBryPos, picWidth - 1, x) (1484)
Когда rightBryPos не меньше 0, применяется следующее:
x=Clip3(0, rightBryPos - 1, x) (1485)
(x, y) устанавливается равным (xCtbCur, y), если выполняются все следующие условия:
clipTopLeftFlag равно true
topBryPos меньше 0, а leftBryPos меньше 0
x меньше, чем xCtbCur, а y меньше, чем yCtbCur
(x, y) устанавливается равным (xCtbCur+CtbSizeHor - 1, y), если выполняются все следующие условия:
clipBotRightFlag равно true
botBryPos меньше 0, а rightBryPos меньше 0
x больше, чем xCtbCur+CtbSizeHor - 1, а y больше, чем yCtbCur+CtbSizeVer - 1.
Например, ITU JVET-Q0150 предлагает модифицировать процесс фильтрации ALF, особенно на границах CTU.
Основные изменения касаются изменений уравнений 1425, 1467 (см. уравнения выше) и таблиц 43 и 44 (см. таблицы выше).
Как раскрыто в JVET-Q0150, обработка виртуальных границ ALF определяется следующим образом:
1. sum=curr+((sum+64)>>alfShiftY). (1425)
Обычно Curr означает значение центрального пикселя, которое в данный момент фильтруется. y1, y2 и y3 - вертикальные положения выборки яркости (y), используемые в фильтрации ALF. CtbSizey - размер CTB.
2.sum=curr + (sum+64) >> alfShiftC). (1466)
В уравнениях 1425 и 1466 фильтрованное значение в процессе фильтрации ALF делится или (смещается вправо) на значение (alfShiftY или alfShiftC), которое зависит от того, насколько далеко текущий центральный пиксель (заданный значением y) находится от виртуальной границы ALF. Обычно alfShiftY используется для яркости, а alfShiftC используется для компонента цветности. Следовательно, значение alfShiftY или alfShiftC может быть либо 10, либо 7, в зависимости от значения y согласно таблице 43, таблице 44 для фильтрации ALF яркости и цветности соответственно.
Однако, согласно приведенным выше двум уравнениям, значение округления, которое используется в процессе фильтрации ALF, всегда одинаково (64), даже если значение сдвига вправо равно 7 или 10.
Варианты осуществления настоящего изобретения предлагают использовать значение округления, соответствующее значению сдвига вправо, во время процесса фильтрации ALF. Это решение обеспечивает преимущество, заключающееся в том, что фильтрация ALF является точной и последовательной по сравнению с другими этапами фильтрации.
Изменения в спецификации следующие:
1.sum=curr + ((sum+roundY) >> alfShiftY) (1425)
2.sum=curr + ((sum+roundC) >> alfShiftC) (1466)
В некоторых реализациях выборки обрабатываются в единицах CTB. Размер массива для каждого CTB яркости как по ширине, так и по высоте равен CtbSizeY в единицах выборок. Ширина и высота массива для каждого CTB цветности равны CtbWidthC и CtbHeightC соответственно в единицах выборок.
Две новые переменные roundY и roundC используются в уравнениях 1425 и 1466 соответственно. Значения указаны в таблицах 43 и 44 соответственно.
В реализации, показанной на фиг. 25, раскрыт способ фильтрации значения выборки изображения, содержащий:
S2501: получение восстановленного значения выборки для блока изображения.
В примере входными данными процесса адаптивной контурной фильтрации являются массив восстановленных выборок изображения перед адаптивной контурной фильтрацией recPictureL и, когда sps_chroma_format_idc не равно 0, массивы recPictureCb и recPictureCr.
Значения выборок в массиве модифицированных восстановленных выборок изображения после адаптивного контурного фильтра alfPictureL и, когда sps_chroma_format_idc не равно 0, массивы alfPictureCb и alfPictureCr изначально устанавливаются равными значениям выборок в массиве восстановленных выборок изображения до применения адаптивного контурного фильтра recPictureL, и, когда sps_chroma_format_idc не равно 0, массивам recPictureCb и recPictureCr соответственно.
sps_chroma_format_idc определяет выборку цветности относительно выборки яркости.
S2502: получение коэффициентов фильтра для адаптивной контурной фильтрации в соответствии с битовым потоком.
адаптивный контурной фильтр (ALF) - это процесс фильтрации, который применяется как часть процесса декодирования и управляется параметрами, переданными в APS.
набор параметров адаптации (APS) представляет собой синтаксическую структуру, содержащую синтаксические элементы, которые применяются к нулю или более слайсам, как определено нулем или более синтаксическими элементами, обнаруженными в заголовках слайсов.
Процесс получения индекса фильтра вызывается с местоположением (xCtb, yCtb) и восстановленным массивом recPicture выборок яркости изображения в качестве входных данных, а также filtIdx[x][y] и transposeIdx[x][y] с x, y=0. .CtbSizeY - 1 в качестве выходных данных.
Битовый поток может быть получен согласно беспроводной сети или проводной сети. Битовый поток может передаваться с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской строки (DSL) или беспроводных технологий, таких как инфракрасная связь, радио связь, микроволновая связь, WIFI, Bluetooth, LTE или 5G.
В варианте осуществления битовый поток представляет собой последовательность битов, например в форме потока единиц уровня сетевой абстракции (NAL) или байтового потока, который формирует представление последовательности единиц доступа (AU), формирующей одну или более кодируемых/декодируемых видеопоследовательностей (CVS).
В некоторых вариантах осуществления для процесса декодирования сторона декодера считывает битовый поток и получает декодированные изображения из битового потока; для процесса кодирования сторона кодера создает битовый поток.
Обычно битовый поток будет содержать синтаксические элементы, которые формируются синтаксической структурой. синтаксический элемент: Элемент данных, представленный в битовом потоке.
синтаксическая структура: ноль или более синтаксических элементов, присутствующих вместе в битовом потоке в специфицированном порядке.
В конкретном примере форматы битового потока специфицируют взаимосвязь между потоком единиц уровня сетевой абстракции (NAL) и байтовым потоком, каждый из которых называется битовым потоком.
Битовый поток может быть, например, в одном из двух форматов: в формате потока единиц NAL или в формате байтового потока. Формат потока единиц NAL концептуально является более «базовым» типом. Формат потока единиц NAL содержит последовательность синтаксических структур, называемых единицами NAL. Эта последовательность упорядочена в порядке декодирования. Существуют ограничения, налагаемые на порядок декодирования (и содержимое) единиц NAL в потоке единиц NAL.
Формат байтового потока может быть построен из формата потока единиц NAL путем упорядочивания единиц NAL в порядке декодирования и добавления к каждой единице NAL начального кодового префикса и нуля или более байтов с нулевым значением для формирования потока из байтов. Формат потока единиц NAL может быть извлечен из формата байтового потока путем поиска местоположения уникального шаблона начального кодового префикса в пределах этого потока из байтов.
В этом разделе специфицируется взаимосвязь между исходными и декодируемыми изображениями, которая определена через битовый поток.
Источник видео, который представлен битовым потоком, представляет собой последовательность изображений в порядке декодирования.
Каждое из исходных и декодированных изображений состоит из одного или более массивов выборок:
-- Только яркость (Y) (монохромная).
-- Яркость и две цветности (YCbCr или YCgCo).
-- Зеленый, синий и красный (GBR, также известный как RGB).
-- Массивы, представляющие другие неопределенные монохромные или трехцветные выборки цветов (например, YZX, также известные как XYZ).
Переменные и термины, ассоциированные с этими массивами, упоминаются как яркость (либо L, либо Y) и цветность, причем два массива цветности упоминаются как Cb и Cr; независимо от фактического используемого способа представления цвета. Фактический используемый способ представления цвета может быть указан в синтаксисе, который специфицирован в параметрах VUI как специфицировано в ITU-T H.SEI | ISO/IEC 23002-7.
S2503: получение значения суммы согласно коэффициентам фильтра и восстановленному значению выборки для блока.
Например,
Переменная curr выводится следующим образом:
curr=recPicture[hx][vy]
Переменная sum выводится следующим образом: sum=f[idx[0]]*(Clip3(-c[idx[0]],c[idx[0]],recPicture[hx][vy+y3]-curr)+
Clip3(-c[idx[0]],c[idx[0]],recPicture[hx][vy-y3]-curr)) + f[idx[1]]*(Clip3(-c[idx[1]],c[idx[1]],recPicture[hx+1][vy+y2]-curr)+
Clip3(-c[idx[1]],c[idx[1]],recPicture[hx-1][vy-y2]-curr)) +
f[idx[2]]*(Clip3(-c[idx[2]],c[idx[2]],recPicture[hx][vy+y2]-curr)+
Clip3(-c[idx[2]],c[idx[2]],recPicture[hx][vy-y2]-curr)) +
f[idx[3]]*(Clip3(-c[idx[3]],c[idx[3]],recPicture[hx-1][vy+y2]-curr)+
Clip3(-c[idx[3]],c[idx[3]],recPicture[hx+1][vy-y2]-curr)) +
f[idx[4]]*(Clip3(-c[idx[4]],c[idx[4]],recPicture[hx+2][vy+y1]-curr)+
Clip3(-c[idx[4]],c[idx[4]],recPicture[hx-2][vy-y1]-curr)) +
f[idx[5]]*(Clip3(-c[idx[5]],c[idx[5]],recPicture[hx+1][vy+y1]-curr)+
Clip3(-c[idx[5]],c[idx[5]],recPicture[hx-1][vy-y1]-curr)) +
f[idx[6]]*(Clip3(-c[idx[6]],c[idx[6]],recPicture[hx][vy+y1]-curr)+
Clip3(-c[idx[6]],c[idx[6]],recPicture[hx][vy-y1]-curr)) +
f[idx[7]]*(Clip3(-c[idx[7]],c[idx[7]],recPicture[hx-1][vy+y1]-curr)+
Clip3(-c[idx[7]],c[idx[7]],recPicture[hx+1][vy-y1]-curr)) +
f[idx[8]]*(Clip3(-c[idx[8]],c[idx[8]],recPicture[hx-2][vy+y1]-curr)+
Clip3(-c[idx[8]],c[idx[8]],recPicture[hx+2][vy-y1]-curr)) +
f[idx[9]]*(Clip3(-c[idx[9]],c[idx[9]],recPicture[hx+3][vy]-curr)+
Clip3(-c[idx[9]],c[idx[9]],recPicture[hx-3][vy]-curr)) +
f[idx[10]]*(Clip3(-c[idx[10]],c[idx[10]],recPicture[hx+2][vy]-curr)+
Clip3(-c[idx[10]],c[idx[10]],recPicture[hx-2][vy]-curr)) +
f[idx[11]]*(Clip3(-c[idx[11]],c[idx[11]],recPicture[hx+1][vy]-curr)+
Clip3(-c[idx[11]],c[idx[11]],recPicture[hx-1][vy]-curr))
В другом примере
Переменная curr выводится следующим образом:
curr=recPicture[hx][vy]
Массив коэффициентов f[j] фильтра цветности и массив значений c[j] отсечения цветности выводится следующим образом с j=0..5:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][altIdx][j]
c[j]=AlfClipC[slice_alf_aps_id_chroma][altIdx][j]
Переменная sum выводится следующим образом:
sum=f[0]*(Clip3(-c[0],c[0],recPicture[hx][vy+y2]-curr)+
Clip3(-c[0],c[0],recPicture[hx][vy-y2]-curr)) +
f[1]*(Clip3(-c[1],c[1],recPicture[hx+1][vy+y1]-curr)+
Clip3(-c[1],c[1],recPicture[hx-1][vy-y1]-curr)) +
f[2]*(Clip3(-c[2],c[2],recPicture[hx][vy+y1]-curr)+
Clip3(-c[2],c[2],recPicture[hx][vy-y1]-curr)) +
f[3]*(Clip3(-c[3],c[3],recPicture[hx-1][vy+y1]-curr)+
Clip3(-c[3],c[3],recPicture[hx+1][vy-y1]-curr)) +
f[4]*(Clip3(-c[4],c[4],recPicture[hx+2][vy]-curr)+
Clip3(-c[4],c[4],recPicture[hx-2][vy]-curr)) +
f[5]*(Clip3(-c[5],c[5],recPicture[hx+1][vy]-curr)+
Clip3(-c[5],c[5],recPicture[hx-1][vy]-curr))
S2504: округление значения суммы в соответствии с вертикальным положением выборки в блоке для получения округленного значения суммы.
В примере процесс округления содержит: добавление значения, которое определено на основе вертикального положения, к значению суммы для получения добавленного значения суммы и смещение добавленного значения суммы на основе вертикального положения.
В примере округленное значение суммы равно (sum + (1 << (alfShiftY - 1))) >> alfShiftY, где sum - значение суммы, alfShiftY - переменная, которая определяется на основе вертикального положения выборки.
В примере округленное значение суммы равно (sum + (1 << (alfShiftC - 1) >> alfShiftC, где sum - значение суммы, alfShiftC - это переменная, которая определяется на основе вертикального положения выборки.
Можно понять, что alfShiftC представляет собой переменную для положения выборки цветности, alfShiftY представляет собой переменную для положения выборки яркости, в настоящем раскрытии эти две переменные могут использоваться взаимозаменяемо.
В примере, где alfShiftY равно 10, когда вертикальное положение выборки удовлетворяет любому из следующих условий:
y==CtbSizeY-t-1, или y==CtbSizeY-t, или y==ctbHeightC-t, или y==ctbHeightC-t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение. В некоторых примерах t равно 2, 3, 4, 5, 6 и так далее.
Например, alfShiftY равно 7, когда вертикальное положение выборки не удовлетворяет ни одному из следующих условий:
y== CtbSizeY - t-1, или y== CtbSizeY - t, или y== ctbHeightC - t, или y== ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В примере, когда y равно 0, alfShiftY равно 10.
В примере, когда y не равно 0, alfShiftY равно 7.
Например, вертикальное положение выборки в блоке является положением выборки цветности или положением выборки яркости.
или
S2605: получение восстановленного фильтром значения выборки для блока в соответствии с округленным значением суммы.
Выходами процесса ALF являются массив модифицированных восстановленных выборок изображения после адаптивного контурного фильтра alfPictureL и, когда sps_chroma_format_idc не равно 0, массивы ccAlfPictureCb и ccAlfPictureCr.
Например,
Процесс фильтрации блока дерева кодирования для выборок яркости
Входные данные этого процесса:
восстановленный массив recPicture выборок яркости изображения перед процессом адаптивной контурной фильтрации,
массив alfPictureL фильтрованных восстановленных выборок яркости изображения,
местоположение (xCtb, yCtb) яркости, указывающее верхнюю левую выборку текущего блока дерева кодирования яркости относительно левой верхней выборки текущего изображения.
Выходными данными этого процесса является массив alfPictureL модифицированных фильтрованных восстановленных выборок яркости изображения.
Процесс получения индекса фильтра вызывается с местоположением (xCtb, yCtb) и восстановленным массивом recPicture выборок яркости изображения в качестве входных данных, а также filtIdx[x][y] и transposeIdx[x][y] с x, y=0..CtbSizeY - 1 в качестве выходных данных.
Для получения фильтрованных восстановленных выборок alfPictureL[xCtb+x][yCtb+y] яркости каждая восстановленная выборка яркости внутри текущего блока дерева кодирования яркости recPicture[xCtb+x][yCtb+y] фильтруется с x следующим образом: y=0..CtbSizeY - 1:
Массив коэффициентов f[j] фильтра яркости и массив значений c[j] отсечения яркости, соответствующий фильтру, заданному filtIdx[x][y], выводится следующим образом с j=0..11:
Если AlfCtbFiltSetIdxY[xCtb >> CtbLog2SizeY][yCtb >> CtbLog2SizeY] меньше 16, применяется следующее:
i=AlfCtbFiltSetIdxY[xCtb >> CtbLog2SizeY][yCtb >> CtbLog2SizeY]
f[j]=AlfFixFiltCoeff[AlfClassToFiltMap[i][filtIdx[x][y]]][j]
c[j]=2BitDepth
В противном случае (AlfCtbFiltSetIdxY[xCtb >> CtbLog2SizeY][yCtb >> CtbLog2SizeY] больше или равно 16, применяется следующее:
i=sh_alf_aps_id_luma[AlfCtbFiltSetIdxY[xCtb >> CtbLog2SizeY][yCtb >> CtbLog2SizeY] - 16]
f[j]=AlfCoeffL[i][filtIdx[x][y]][j]
c[j]=AlfClipL[i][filtIdx[x][y]][j]
Коэффициенты фильтра яркости и индекс idx значений отсечения выводятся в зависимости от transposeIdx[x][y] следующим образом:
Если значение transposeIdx[x][y] равно 1, применяется следующее:
idx[]={9, 4, 10, 8, 1, 5, 11, 7, 3, 0, 2, 6}
В противном случае, если значение transposeIdx[x][y] равно 2, применяется следующее:
idx[]={0, 3, 2, 1, 8, 7, 6, 5, 4, 9, 10, 11}
В противном случае, если значение transposeIdx[x][y] равно 3, применяется следующее:
idx[]={9, 8, 10, 4, 3, 7, 11, 5, 1, 0, 2, 6}
В противном случае применяется следующее:
idx[]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
Местоположения (hx+i, vy+j) для каждой из соответствующих выборок яркости (x, y) внутри данного массива recPicture выборок яркости с i, j=-3..3 выводится следующим образом:
hx+i=Clip3(0, pps_pic_width_in_luma_samples - 1, xCtb+x+i)
vy+j=Clip3(0, pps_pic_height_in_luma_samples - 1, yCtb+y+j)
Переменные clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag и clipBotRightFlag получаются путем вызова процесса определения граничного положения ALF с (xCtb, yCtb), (x, y) и переменной vbOffset, установленной равной 4, в качестве входных данных.
Переменные hx+i и vy+j модифицируются путем вызова процесса выборочного дополнения ALF с помощью (xCtb, yCtb), (hx+i, vy+j), переменной isChroma, установленной равной 0, clipLeftPos, clipRightPos, clipTopPos, clipBottomPos , clipTopLeftFlag и clipBotRightFlag в качестве входных данных.
Переменная applyAlfLineBufBoundary выводится следующим образом:
Если нижняя граница текущего блока дерева кодирования является нижней границей текущего изображения и pps_pic_height_in_luma_samples - yCtb <= CtbSizeY - 4, applyAlfLineBufBoundary устанавливается равным 0:
В противном случае applyAlfLineBufBoundary устанавливается равным 1.
Смещения y1, y2, y3 вертикального положения выборки и переменная alfShiftY указаны в таблице 45 в соответствии с вертикальным положением y выборки яркости и applyAlfLineBufBoundary.
Переменная curr выводится следующим образом:
curr=recPicture[hx][vy]
Переменная sum выводится следующим образом:
sum=f[idx[0]]*(Clip3(-c[idx[0]],c[idx[0]],recPicture[hx][vy+y3]-curr)+
Clip3(-c[idx[0]],c[idx[0]],recPicture[hx][vy-y3]-curr)) +
f[idx[1]]*(Clip3(-c[idx[1]],c[idx[1]],recPicture[hx+1][vy+y2]-curr)+
Clip3(-c[idx[1]],c[idx[1]],recPicture[hx-1][vy-y2]-curr)) +
f[idx[2]]*(Clip3(-c[idx[2]],c[idx[2]],recPicture[hx][vy+y2]-curr)+
Clip3(-c[idx[2]],c[idx[2]],recPicture[hx][vy-y2]-curr)) +
f[idx[3]]*(Clip3(-c[idx[3]],c[idx[3]],recPicture[hx-1][vy+y2]-curr)+
Clip3(-c[idx[3]],c[idx[3]],recPicture[hx+1][vy-y2]-curr)) +
f[idx[4]]*(Clip3(-c[idx[4]],c[idx[4]],recPicture[hx+2][vy+y1]-curr)+
Clip3(-c[idx[4]],c[idx[4]],recPicture[hx-2][vy-y1]-curr)) +
f[idx[5]]*(Clip3(-c[idx[5]],c[idx[5]],recPicture[hx+1][vy+y1]-curr)+
Clip3(-c[idx[5]],c[idx[5]],recPicture[hx-1][vy-y1]-curr)) +
f[idx[6]]*(Clip3(-c[idx[6]],c[idx[6]],recPicture[hx][vy+y1]-curr)+
Clip3(-c[idx[6]],c[idx[6]],recPicture[hx][vy-y1]-curr)) +
f[idx[7]]*(Clip3(-c[idx[7]],c[idx[7]],recPicture[hx-1][vy+y1]-curr)+
Clip3(-c[idx[7]],c[idx[7]],recPicture[hx+1][vy-y1]-curr)) +
f[idx[8]]*(Clip3(-c[idx[8]],c[idx[8]],recPicture[hx-2][vy+y1]-curr)+
Clip3(-c[idx[8]],c[idx[8]],recPicture[hx+2][vy-y1]-curr)) +
f[idx[9]]*(Clip3(-c[idx[9]],c[idx[9]],recPicture[hx+3][vy]-curr)+
Clip3(-c[idx[9]],c[idx[9]],recPicture[hx-3][vy]-curr)) +
f[idx[10]]*(Clip3(-c[idx[10]],c[idx[10]],recPicture[hx+2][vy]-curr)+
Clip3(-c[idx[10]],c[idx[10]],recPicture[hx-2][vy]-curr)) +
f[idx[11]]*(Clip3(-c[idx[11]],c[idx[11]],recPicture[hx+1][vy]-curr)+
Clip3(-c[idx[11]],c[idx[11]],recPicture[hx-1][vy]-curr))
sum=curr+((sum+(1<<(alfShiftY-1)))>>alfShiftY)
Модифицированная фильтрованная восстановленная выборка alfPictureL[xCtb+x][yCtb+y] яркости изображения выводится следующим образом:
alfPictureL[xCtb+x][yCtb+y]=Clip3(0, (1 << BitDepth) - 1, сумма)
В другом примере
Процесс фильтрации блока дерева кодирования для выборок цветности
Входные данные этого процесса:
восстановленный массив recPicture выборок цветности изображения до процесса адаптивной контурной фильтрации,
фильтрованный восстановленный массив выборок цветности изображения alfPicture,
местоположение (xCtbC, yCtbC) цветности, указывающее верхнюю левую выборку текущего блока дерева кодирования цветности относительно верхней левой выборки текущего изображения,
индекс altIdx альтернативного фильтра цветности.
Выходными данными этого процесса является модифицированный фильтрованный восстановленный массив выборок цветности изображения alfPicture.
Ширина и высота текущего блока дерева кодирования цветности ctbWidthC и ctbHeightC выводятся следующим образом:
ctbWidthC=CtbSizeY/SubWidthC
ctbHeightC=CtbSizeY/SubHeightC
Для получения фильтрованных восстановленных выборок alfPicture[xCtbC+x][yCtbC+y] цветности каждая восстановленная выборка цветности внутри текущего блока дерева кодирования цветности recPicture[xCtbC+x][yCtbC+y] фильтруется следующим образом с x=0..ctbWidthC - 1, y=0..ctbHeightC - 1:
Местоположения (hx+i, vy+j) для каждой из соответствующих выборок цветности (x, y) внутри данного массива recPicture выборок цветности с i, j=-2..2 выводится следующим образом:
hx+i=Clip3(0, pps_pic_width_in_luma_samples/SubWidthC - 1, xCtbC+x+i)
vy+j=Clip3(0, pps_pic_height_in_luma_samples/SubHeightC - 1, yCtbC+y+j)
Переменные clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag и clipBotRightFlag получаются путем вызова процесса определения граничного положения ALF с (xCtbC * SubWidthC, yCtbC * SubHeightC), (x * SubWidthC, y * SubHeightC) и переменной vbOffset, установленной равной 2 * SubHeightC в качестве входных данных.
Переменные hx+i и vy+j модифицируются путем вызова процесса выборочного дополнения ALF с (xCtbC * SubWidthC, yCtbC * SubHeightC), (hx+i, vy+j), переменной isChroma, установленной равной 1, clipLeftPos, clipRightPos , clipTopPos, clipBottomPos, clipTopLeftFlag и clipBotRightFlag в качестве входных данных.
Переменная applyAlfLineBufBoundary выводится следующим образом:
Если нижняя граница текущего блока дерева кодирования является нижней границей изображения и pps_pic_height_in_luma_samples - (yCtbC * SubHeightC) < CtbSizeY - 4, applyAlfLineBufBoundary устанавливается равным 0.
В противном случае applyAlfLineBufBoundary устанавливается равным 1.
Смещения y1, y2 вертикального положения выборки и переменная alfShiftC указаны в таблице 46 в соответствии с вертикальным положением y выборки цветности и applyAlfLineBufBoundary.
Переменная curr выводится следующим образом:
curr=recPicture[hx][vy]
Массив коэффициентов f[j] фильтра цветности и массив значений c[j] отсечения цветности выводится следующим образом с j=0..5:
f[j]=AlfCoeffC[sh_alf_aps_id_chroma][altIdx][j]
c[j]=AlfClipC[sh_alf_aps_id_chroma][altIdx][j]
Переменная sum выводится следующим образом:
sum=f[0]*(Clip3(-c[0],c[0],recPicture[hx][vy+y2]-curr)+
Clip3(-c[0],c[0],recPicture[hx][vy-y2]-curr)) +
f[1]*(Clip3(-c[1],c[1],recPicture[hx+1][vy+y1]-curr)+
Clip3(-c[1],c[1],recPicture[hx-1][vy-y1]-curr)) +
f[2]*(Clip3(-c[2],c[2],recPicture[hx][vy+y1]-curr)+
Clip3(-c[2],c[2],recPicture[hx][vy-y1]-curr)) +
f[3]*(Clip3(-c[3],c[3],recPicture[hx-1][vy+y1]-curr)+
Clip3(-c[3],c[3],recPicture[hx+1][vy-y1]-curr)) +
f[4]*(Clip3(-c[4],c[4],recPicture[hx+2][vy]-curr)+
Clip3(-c[4],c[4],recPicture[hx-2][vy]-curr)) +
f[5]*(Clip3(-c[5],c[5],recPicture[hx+1][vy]-curr)+
Clip3(-c[5],c[5],recPicture[hx-1][vy]-curr))
sum=curr+((sum+(1<<(alfShiftC-1)))>>alfShiftC)
Модифицированная фильтрованная восстановленная выборка alfPicture[xCtbC+x][yCtbC+y] цветности изображения выводится следующим образом:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0, (1 << BitDepth) - 1, сумма)
В реализации, показанной на фиг. 26, раскрыто устройство 2600 декодирования видео, устройство 2600 содержит: модуль 2601 восстановления, который выполнен с возможностью получения восстановленного значения выборки для блока изображения; модуль 2602 синтаксического анализа, который выполнен с возможностью получения коэффициентов фильтра для адаптивной контурной фильтрации в соответствии с битовым потоком; модуль 2603 вычисления, который выполнен с возможностью получения значения суммы согласно коэффициентам фильтра и восстановленному значению выборки для блока; модуль 2604 округления, который выполнен с возможностью округления значения суммы в соответствии с вертикальным положением выборки в блоке для получения округленного значения суммы; модуль 2605 фильтрации, который выполнен с возможностью получения восстановленного фильтром значения выборки для блока в соответствии с округленным значением суммы.
В примере округленное значение суммы равно (sum + (1 << (alfShiftY - 1))) >> alfShiftY, где sum - это значение суммы, alfShiftY - переменная, которая определяется на основе вертикального положения выборки.
Например, alfShiftY равно 10, когда вертикальное положение выборки удовлетворяет любому из следующих условий: y== CtbSizeY - t-1, или y== CtbSizeY - t, или y== ctbHeightC - t, или y== ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
Например, alfShiftY равно 7, когда вертикальное положение выборки не удовлетворяет ни одному из следующих условий:
y== CtbSizeY - t-1, или y== CtbSizeY - t, или y== ctbHeightC - t, или y== ctbHeightC - t-1, где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение.
В примере, когда y равно 0, alfShiftY равно 10.
В примере, когда y не равно 0, alfShiftY равно 7.
Например, вертикальное положение выборки в блоке является положением выборки цветности или положением выборки яркости.
В примере модуль округления выполнен с возможностью
добавления значения, которое определено на основе вертикального положения, к значению суммы для получения добавленного значения суммы и сдвига добавленного значения суммы на основе вертикального положения для получения округленного значения суммы.
Дополнительные подробности для модулей в устройстве декодирования видео могут относиться к приведенным выше примерам и реализациям способов.
Дополнительное решение (решение 3), изображенное на фиг. 12b, также можно использовать для фильтрации строк H, J, I (над виртуальной границей) и строк K, L, M (ниже виртуальной границы). На основе доминирующего направления края для данного блока модифицируется фильтр ALF.
Следует отметить, что может использоваться любой алгоритм, который может определить направление доминирующего края для данного блока, и он не ограничивается алгоритмом, описанным ниже. Направление доминирующего края для данного блока может быть вычислено с использованием значений градиента, вычисленных для данного блока с использованием значений и градиента и значения D направленности, вычисленного во время классификации блоков ALF. Если значение D направленности равно 0, 1, 2, то, как показано на фиг. 12b, подрисунок с, выбирается решение 1 (сложение коэффициентов по вертикали). Если значение D направленности равно 3 или 4 (случай, когда направленность блока имеет сильное «диагональное» ребро), то проверяется следующее дополнительное условие . Если условие истинно, градиент в 135 градусов выбирается в качестве доминирующего направления края, и поэтому, как показано на фиг. 12c, подрисунок b, модифицированная фильтрация выполняется следующим образом:
Для строк M и H
Для строк L и I
Для строк J и K:
С другой стороны, если
, то, как показано на фиг. 12c, подрисунок a, модифицированная фильтрация выполняется следующим образом:
Для строк M и H
Для строк L и I
Для строк J и K:
Если данный фильтр преобразуется, как указано в таблице 1, все вышеперечисленные решения можно использовать. Уравнения в приведенных выше решениях даны для случая, когда преобразование не применяется. Для преобразованного фильтра коэффициенты в уравнениях можно заменить на основе уравнений 17, 18, 19 соответственно.
Дополнительное решение (решение 4), изображенное на фиг. 19a и 19b, отключает фильтрацию, когда абсолютная сумма дополненных коэффициентов превышает пороговое значение (T), умноженное на абсолютную сумму не дополненных коэффициентов. Например, для
строки M и H, , то фильтрация ALF отключена для строк M и H.
Аналогично для строк L и I, , то ALF фильтрация отключена для строк L и I.
Аналогично для строк J и K, то ALF фильтрация отключена для строк J и K.
Где T обычно является пороговым значением, которое может принимать дробные значения в диапазоне от 0 до 1. Например, значение T может быть 0,5, 0,6 или 0,7.
Аналогично для цветности, как показано на фиг. 20, для строк N и K, , то фильтрация ALF отключен для строк N и K.
для строк M и L, , то фильтрация ALF отключена для строк M и L.
Функция abs(x) определяется следующим образом:
Abs(x)=
В соответствии с альтернативным решением операция фильтрации отключается, если она основана на определенном геометрическом преобразовании и горизонтальной близости фильтрованной пиксельной выборке к виртуальной границе. Другими словами, предположим, что пиксельная выборка, подлежащая фильтрации, представляет собой N выборок выше или ниже виртуальной границы (горизонтальное расстояние равно N до горизонтальной границы), а определенное преобразование геометрического фильтра представляет собой преобразование_X. Операция фильтрации отключена для пиксельной выборки\, если;
1. Если N меньше предварительно определенного порогового значения, а именно thr,
2. И если преобразование_X входит в набор преобразований, которые предварительно определены или указаны в битовом потоке.
Согласно одному конкретному примеру thr равно 1 (указывает на строку выборок, которые находятся на одну строку выше и на одну строку ниже виртуальной границы). В соответствии с другим примером набор преобразований включает по меньшей мере одно из следующих значений: «Без преобразования», «Диагональное», «Вертикальное отражение», «Вращение». Согласно другому примеру thr равно 1, а набор преобразований включает в себя по меньшей мере одно из значений «Без преобразования», «Диагональное», «Вертикальное отражение», «Вращение». В другом примере набор преобразований включает в себя Диагональное и Вращение.
Отмечается, что множество преобразований является подмножеством всех возможных преобразований фильтра. Согласно документу JVET1001_v7 «Универсальное кодирование видео (проект 3)» (общедоступный по адресу http://phenix.it-sudparis.eu/jvet/), существует 4 возможных преобразования фильтра. В документе преобразование фильтра определяется в соответствии с подразделом «8.5.4.3 Процесс получения для транспонирования ALF и индекса фильтра для выборок яркости», а определенное преобразование указывается переменной transposeIdx. TransposeIdx может принимать значения 0, 1, 2 и 3.
В соответствии с одним примером операция фильтрации отключается для пиксельной выборки, если определено, что значение transposeIdx равно предварительно определенному значению. Следует отметить, что набор предварительно определенных значений включает в себя по меньшей мере одно значение от 0 до 3. Кроме того, следует отметить, что набор предварительно определенных значений не включает в себя все возможные значения (все 0, 1, 2 и 3).
В другом примере операция фильтрации отключена, если пиксель, подлежащий фильтрации, находится на одну выборку выше или ниже виртуальной границы, а определенное преобразование фильтра входит в набор предварительно определенных значений.
Требования к линейному буферу для выборок цветности:
Фиг. 13 показаны требования к линейному буферу для выборок цветности. Поскольку деблокирование использует только 2 сэмпла и модифицирует максимум 1 сэмпл, требования к линейному буферу цветности ALF снижаются до 6,25 строк. Поскольку для выборок цветности не выполняется явная классификация блоков, необходимо модифицировать только фильтрацию на виртуальных границах (VB). Фиг. 14 относится к модифицированному фильтру ALF для цветности, который показывает искаженную версию фильтра, созданного либо с использованием дополнения (решение 1), либо путем добавления отброшенного коэффициента к центральному коэффициенту (решение 2).
Модифицированная классификация блоков, когда виртуальная граница представляет собой 6 строк.
Фиг. 15 показаны требования к линейному буферу ALF, когда деблокирующий фильтр использует 6 строк линейного буфера. Следовательно, виртуальная граница представляет собой 6 строк выше границы CTU. В этом случае общее требование к линейному буферу контурного фильтра увеличивается до 15,25 строк.
Чтобы уменьшить требования к линейному буферу, на фиг. 16 показано решение о повторном использовании классификации блоков на виртуальной границе и использовании усеченной версии для фильтрации, а на фиг. 16 показано одно решение, которое поясняется ниже:
Классификация блоков блока 4×4, начинающегося со строки C, достигается путем дополнения строки H строкой I, чтобы гарантировать, что для классификации блоков не требуется никакой строки ниже виртуальной границы. На фиг. 16 строка H дополняется строкой I, чтобы облегчить принятие решения о классификации блока 4×4, начиная со строки C.
Строки G, H повторно используют решение о классификации блока из блоков C, D, E, F.
строки I, J используют решение о классификации блока из блока K, L, M, N
Усеченные версии фильтров (слайды 8 и 9) используются для фильтрации строк F, G, H, I, J, K.
В строках G, H повторно используется решение о классификации блока из блока C, D, E, F. В строках I, J повторно используется решение о классификации блока из строк K, L, M, N (или) строк I, J, K, L можно рассматривать как один сегмент блока 4×4, и классификация выполняется для этих 4 строк, а затем строки M, N повторно используют решение о классификации блока из блока K, L, M, N.
Фиг. 17 используется подход со сдвигом сетки, при котором первые две строки на верхней границе изображения и последние две строки на нижней границе изображения классифицируются и фильтруются отдельно, и поэтому сетка классификации и фильтрации ALF перемещается на 2 выборки вниз по оси Y. Это решение имеет то преимущество, что данный блок 4×4 никогда не перекрывается и не пересекает виртуальную границу. В общем случае, когда размер виртуальной границы не кратен 4 (размер классификации блока ALF), сетка фильтрации ALF может быть смещена по следующей формуле:
((Размер виртуальной границы) / 4) - 4. Для самой фактической фильтрации можно использовать искаженную версию фильтра, показанную на рисунках 12a, 12b и 12c. См. фиг. 17, когда виртуальная граница представляет собой 6 строк выше границы CTU, в решении используется подход «Сдвиг сетки» (Grid Shifting).
Сетка фильтра ALF смещается на две строки по оси Y, чтобы данное окно классификации блока 4×4 не пересекало заданную виртуальную границу.
Как правило, когда размер виртуальной границы не кратен 4 (размер классификации блока ALF), сетка может быть смещена на следующее значение по оси Y:
(((Размер виртуальной границы) / 4) - 4).
На границах кадра,
В верхних граничных строках кадра A’, B’ повторно используется решение о классификации блока из блока 4×4, начиная с третьей строки.
Точно так же для последних 2 строк на нижней границе кадра классификация блоков повторно использует решение из окна классификации блоков размером 4×4 непосредственно над ним.
Хотя варианты осуществления данного изобретения были в основном описаны на основе видеокодирования, следует отметить, что варианты осуществления системы 10 кодирования/декодирования, кодера 20 и декодера 30 (и, соответственно, системы 10), а также другие варианты осуществления, описанные в данном документе, также могут быть выполнены с возможностью обработки или кодирования/декодирования неподвижного изображения, т.е. обработки или кодирования/декодирования отдельного изображения независимо от любого предшествующего или последующего изображения, как при кодировании/декодировании видео. В общем, только блоки 244 межкадрового предсказания (кодер) и 344 (декодер) могут не быть доступны в случае, если кодирование/декодирование для обработки изображения ограничено одним изображением 17. Все другие функциональные возможности (также называемые инструментами или технологиями) видеокодера 20 и видеодекодера 30 могут в равной степени использоваться для обработки неподвижного изображения, например, вычисление остатка 204/304, преобразование 206, квантование 208, обратное квантование 210/310, (обратное) преобразование 212/312, разделение 262/362, внутрикадровое предсказание 254/354 и/или контурная фильтрация 220, 320, энтропийное кодирование 270 и энтропийное декодирование 304.
Ниже приводится объяснение применений способа кодирования, а также способа декодирования, как показано в вышеупомянутых вариантах осуществления, и системы, использующей их.
Фиг. 23 является блок-схемой, показывающей систему 3100 доставки контента для реализации услуги распространения контента. Данная система 3100 доставки контента включает в себя устройство 3102 захвата, терминальное устройство 3106 и опционально включает в себя дисплей 3126. Устройство 3102 захвата осуществляет связь с терминальным устройством 3106 по линии 3104 связи. Линия связи может включать в себя канал 13 связи, описанный выше. Линия 3104 связи включает в себя, но без ограничения упомянутым, WIFI, Ethernet, кабель, беспроводную связь (3G/4G/5G), USB или любую их комбинацию, или подобное.
Устройство 3102 захвата формирует данные и может кодировать данные способом кодирования, показанным в вышеуказанных вариантах осуществления. В качестве альтернативы устройство 3102 захвата может распространять данные на сервер потоковой передачи (не показан на чертежах), а сервер кодирует эти данные и передает кодированные данные на терминальное устройство 3106. Устройство 3102 захвата включает в себя, но без ограничения упомянутым, камеру, смартфон или планшет, компьютер или ноутбук, систему видеоконференцсвязи, КПК, устанавливаемое на транспортное средство устройство, или комбинацию любых из них, или подобное. Например, устройство 3102 захвата может включать в себя устройство-источник 12, описанное выше. Когда данные включают в себя видео, видеокодер 20, включенный в устройство 3102 захвата, может фактически выполнять обработку видеокодирования. Когда данные включают в себя аудио (т.е. речь), аудиокодер, включенный в устройство 3102 захвата, может фактически выполнять обработку аудиокодирования. Для некоторых практических сценариев устройство 3102 захвата распространяет кодированные видео- и аудиоданные путем их совместного мультиплексирования. Для других практических сценариев, например, в системе видеоконференцсвязи, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. Устройство 3102 захвата распространяет кодированные аудиоданные и кодированные видеоданные на терминальное устройство 3106 по отдельности.
В системе 3100 доставки контента терминальное устройство 310 принимает и воспроизводит кодированные данные. Терминальное устройство 3106 может быть устройством с возможностью приема и извлечения данных, таким как смартфон или планшет 3108, компьютер или ноутбук 3110, сетевой видеорегистратор (NVR) / цифровой видеорегистратор (DVR) 3112, телевизор 3114, телеприставка (STB) 3116, система 3118 видеоконференцсвязи, система 3120 видеонаблюдения, карманный персональный компьютер (КПК) 3122, устанавливаемое на транспортное средство устройство 3124, или их комбинация, или подобное, способное декодировать вышеупомянутые кодированные данные. Например, терминальное устройство 3106 может включать в себя устройство-получатель 14, описанное выше. Когда кодированные данные включают в себя видео, видеодекодеру 30, включенному в терминальное устройство, отдается приоритет для выполнения видеодекодирования. Когда кодированные данные включают в себя аудио, аудиодекодеру, включенному в терминальное устройство, отдается приоритет для выполнения обработки аудиодекодирования.
Для терминального устройства со своим дисплеем, например смартфона или планшета 3108, компьютера или ноутбука 3110, сетевого видеорегистратора (NVR) / цифрового видеорегистратора (DVR) 3112, телевизора 3114, карманного персонального компьютера (КПК) 3122 или устанавливаемого на транспортное средство устройства 3124, терминальное устройство может передавать декодированные данные на свой дисплей. Для терминального устройства, не оборудованного дисплеем, такого как STB 3116, система 3118 видеоконференцсвязи или система 3120 видеонаблюдения, контакт в нем устанавливается с внешним дисплеем 3126 для приема и показа декодированных данных.
Когда каждое устройство в этой системе выполняет кодирование или декодирование, может использоваться устройство кодирования изображения или устройство декодирования изображения, как показано в вышеупомянутых вариантах осуществления.
Фиг. 24 является схемой, показывающей структуру примерного терминального устройства 3106. После того, как терминальное устройство 3106 принимает поток от устройства 3102 захвата, блок 3202 обработки протокола анализирует протокол передачи упомянутого потока. Протокол включает в себя, но без ограничения упомянутым, протокол потоковой передачи в реальном времени (RTSP), протокол передачи гипертекста (HTTP), протокол потоковой передачи HTTP Live (HLS), MPEG-DASH, транспортный протокол реального времени (RTP), протокол обмена сообщениями в реальном времени (RTMP) или любую их комбинацию, или подобное.
После того, как блок 3202 обработки протокола обработает поток, формируется файл потока. Файл выводится в блок 3204 демультиплексирования. Блок 3204 демультиплексирования может разделять мультиплексированные данные на кодированные аудиоданные и кодированные видеоданные. Как описано выше, в других практических сценариях, например, в системе видеоконференцсвязи, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. В этой ситуации кодированные данные передаются на видеодекодер 3206 и аудиодекодер 3208 без использования блока 3204 демультиплексирования.
Посредством обработки демультиплексирования формируются элементарный поток (ES) видео, ES аудио и, опционально, субтитры. Видеодекодер 3206, который включает в себя видеодекодер 30, описанный в вышеупомянутых вариантах осуществления, декодирует ES видео с помощью способа декодирования, как показано в вышеупомянутых вариантах осуществления, для формирования видеокадра и подает эти данные в блок 3212 синхронизации. Аудиодекодер 3208 декодирует аудио ES для формирования аудиокадра и подает эти данные в блок 3212 синхронизации. В качестве альтернативы видеокадр может сохраняться в буфере (не показан на Фиг. 24) перед его подачей в блок 3212 синхронизации. Точно так же аудиокадр может сохраняться в буфере (не показан на Фиг. 24) перед его подачей в блок 3212 синхронизации.
Блок 3212 синхронизации синхронизирует видеокадр и аудиокадр и подает видео/аудио в видео/аудио дисплей 3214. Например, блок 3212 синхронизации синхронизирует представление видео и аудио информации. Информация может кодироваться в синтаксисе с использованием временных меток, касающихся представления кодированных аудио- и видеоданных, а также временных меток, касающихся доставки самого потока данных.
Если субтитры включены в поток, декодер 3210 субтитров декодирует субтитры и синхронизирует их с видеокадром и звуковым кадром и передает видео/аудио/субтитры на дисплей 3216 видео/аудио/субтитров.
Настоящее изобретение не ограничивается вышеупомянутой системой, и либо устройство кодирования изображения, либо устройство декодирования изображения в вышеупомянутых вариантах осуществления может быть включено в другую систему, например, автомобильную систему.
Варианты осуществления, например, кодера 20 и декодера 30, а также описанные в данном документе функции, например применительно к кодеру 20 и декодеру 30 могут быть реализованы аппаратным обеспечением, программным обеспечением, микропрограммным обеспечением или любой их комбинацией. При реализации в программном обеспечении, функции могут храниться на считываемом компьютером носителе данных или передаваться через среду связи в виде одной или более инструкций или кода и исполняться аппаратным блоком обработки. Считываемые компьютером носители могут включать в себя считываемые компьютером носители, которые соответствуют материальному носителю, например носителю данных, или среде связи, в том числе любой среде, которая обеспечивает передачу компьютерной программы из одного места в другое, например, согласно протоколу связи. Таким образом, считываемые компьютером носители обычно могут соответствовать (1) материальным считываемым компьютером запоминающим носителям, которые являются не-кратковременными, или (2) среде связи, такой как сигнал или несущая волна. Носители данных могут быть любыми доступными носителями, к которым может быть осуществлен доступ одним или более компьютерами или одним или более процессорами для извлечения инструкций, кода и/или структур данных для реализации методик, описанных в этом раскрытии. Компьютерный программный продукт может включать в себя считываемый компьютером носитель данных.
В качестве примера, а не ограничения, такие считываемые компьютером носители могут содержать RAM, ROM, EEPROM, CD-ROM или другое хранилище на оптическом диске, хранилище на магнитном диске или другие магнитные запоминающие устройства, флэш-память или любой другой носитель данных, который может использоваться для хранения желаемого программного кода в форме инструкций или структур данных и может быть доступен для компьютера. Кроме того, любое соединение правильно называть считываемым компьютером носителем данных. Например, если инструкции передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской строки (DSL) или беспроводных технологий, таких как инфракрасная-, радио- и микроволновая- связь, тогда коаксиальный кабель, оптоволоконный кабель, витая пара, DSL или беспроводные технологии, такие как инфракрасная-, радио- и микроволновая- связь, включаются в определение носителя. Однако следует понимать, что считываемые компьютером носители и носители хранения данных не включают в себя соединения, несущие волны, сигналы или другие кратковременные носители, а вместо этого направлены на не-кратковременные, материальные запоминающие носители. Диск (disk) и диск (disc), используемые используемые в данном документе, включают в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), дискету и диск Blu-ray, где диски (disks) обычно воспроизводят данные магнитным образом, а диски (discs) воспроизводят данные оптически с помощью лазеров. Комбинации вышеперечисленного также должны быть включены в объем считываемых компьютером носителей.
Инструкции могут исполняться одним или более процессорами, такими как один или более цифровых сигнальных процессоров (DSP), микропроцессоров общего назначения, интегральных схем специального назначения (ASIC), программируемых вентильных матриц (FPGA) или других эквивалентных интегральных или дискретных логических схем. Соответственно, термин «процессор», используемый в данном документе, может относиться к любой из вышеупомянутой структуры или любой другой структуре, подходящей для реализации методик, описанных в данном документе. Кроме того, в некоторых аспектах функциональные возможности, описанные в данном документе, могут быть предоставлены в рамках специализированных аппаратных и/или программных модулей, выполненных с возможностью кодирования и декодирования, или включены в комбинированный кодек. Кроме того, методики могут быть полностью реализованы в одной или более схемах или логических элементах.
Методики этого раскрытия могут быть реализованы в большом количестве устройств или аппаратных компонентов, в том числе таких как беспроводной телефон, интегральная схема (ИС) или набор ИС (например, набор микросхем). В этом раскрытии описаны различные компоненты, модули или блоки, чтобы подчеркнуть функциональные аспекты устройств, выполненных с возможностью выполнения раскрытых технологий, но не обязательно требующих реализации различными аппаратными блоками. Скорее, как описано выше, различные блоки могут быть объединены в аппаратный блок кодека или предоставлены совокупностью взаимодействующих аппаратных блоков, в том числе один или более процессоров, как описано выше, вместе с подходящим программным обеспечением и/или микропрограммным обеспечением.
Настоящее раскрытие раскрывает следующие дополнительные аспекты:
Пример 1. Способ фильтрации значения выборки изображения, при этом изображение содержит первый блок и второй блок, при этом первый блок и второй блок примыкают друг к другу на границе блока, при этом изображение содержит не менее n×m выборок p(i, j), расположенные в n строках и m столбцах, где i - это индекс строки от 1 до n, а j - индекс столбца от 1 до m, где выборки p(i, j) с i от 1 до k принадлежат первому блоку, а выборки с i от k+1 до n принадлежат второму блоку, где k - целое число меньше n,
при этом способ содержит, с целым числом t, которое меньше k, и с целым числом j в диапазоне от 1 до m:
создание с целым числом i в диапазоне от 1 до k-t-1 значения фильтрованной выборки путем применения фильтра к значению выборки p(i, j), при этом фильтр поддерживается набором выборок поддержки фильтра, при этом набор выборок поддержки фильтра содержит выборку p(i, j) и одну или более дополнительных выборок, при этом набор выборок поддержки фильтра не содержит выборок p(i’,j’) с индексом строки i’ больше, чем k-t-1 и/или
создание с целым числом i в диапазоне от k-t до k значения фильтрованной выборки путем применения фильтра к значению выборки p(i, j), при этом фильтр поддерживается набором выборок поддержки фильтра, при этом набор выборок поддержки фильтра содержит выборку p(i, j) и одну или более дополнительных выборок, при этом набор выборок поддержки фильтра не содержит выборок p(i’,j’) с индексом строки i’ меньше, чем k-t.
Пример 2. Способ фильтрации значений выборок изображения, причем изображение содержит первый блок и второй блок, при этом первый блок и второй блок примыкают друг к другу на границе блока,
при этом изображение содержит по меньшей мере n×m выборок p(i, j), расположенных в n строках и m столбцах, где i - индекс строки от 1 до n, а j - индекс столбца от 1 до m, при этом выборки p(i, j) с i от 1 до k относятся к первому блоку, а выборки с i от k+1 до n относятся ко второму блоку, где k является целым числом, меньшим n,
при этом способ содержит, с целым числом t, которое меньше k, и для каждого i от 1 до k и каждого j от 1 до m:
создание значения фильтрованной выборки путем применения фильтра к значению выборки p(i, j), при этом фильтр поддерживается набором выборок поддержки фильтра, при этом набор выборок поддержки фильтра содержит выборку p(i, j) и одну или более дополнительных выборок, где, если i находится в диапазоне от 1 до k-t-1, набор выборок поддержки фильтра не содержит выборок p(i’,j’) с индексом строки i’ больше, чем k-t-1 , и при этом, если i находится в диапазоне от k-t до k, набор выборок поддержки фильтра не содержит выборок p(i’,j’) с индексом строки i’ меньше, чем k-t.
Пример 3. Способ по примеру 1 или 2, в котором первый блок представляет собой первую единицу дерева кодирования, CTU, а второй блок представляет собой вторую CTU.
Пример 4. Способ по любому из примеров 1-3, где t равно 2, 3, 4, 5 или 6.
Пример 5. Способ по любому из примеров 1-4,
где для каждого i в диапазоне от 1 до k-t-1 и для каждого j от 1 до m набор выборок поддержки фильтра содержит несколько выборок p(i’,j’) с i’ в диапазоне от 1 до k-t-1; а также
при этом для каждого i в диапазоне от k-t до k и для каждого j от 1 до m набор выборок поддержки фильтра содержит несколько выборок p(i’,j’) с i’, равным или превышающим k-t.
Пример 6. Способ по примеру 5, в котором для каждого i в диапазоне от k-t до k и для каждого j от 1 до m набор выборок поддержки фильтра дополнительно содержит одну или более выборок p(i’,j’) с i’ большим, чем k.
Пример 7. Способ по любому из примеров 1-6, в котором фильтр представляет собой внутриконтурный фильтр.
Пример 8. Способ по любому из примеров 1-7, в котором фильтр содержит деблокирующий фильтр.
Пример 9. Способ по любому из примеров 1-8, в котором фильтр содержит деблокирующий фильтр, адаптивный фильтр смещения выборки, SAO, адаптивный контурной фильтр, ALF или межкомпонентный адаптивный контурной фильтр (CCALF).
Пример 10. Способ по любому из примеров 1-9, содержащий:
определение значений выборок первого блока;
применение фильтра к значениям выборок первого блока в строках с 1 по k-t-1;
сохранение значений выборок первого блока от строк k-t до k в буфере;
определение значений выборок второго блока; а также
применение фильтра к значениям выборок первого блока в строках k-t, которые были сохранены в буфере.
Пример 11. Способ по любому из примеров 1-10, в котором фильтр представляет собой адаптивный контурной фильтр или межкомпонентный адаптивный контурной фильтр, или адаптивный фильтр определяется с использованием этапа классификации, на котором осуществляется доступ к выборкам текущего блока, а также к выборкам, окружающим блок.
Пример 12. Способ по примеру 11, в котором, когда выборки, окружающие блок, недоступны, адаптивный фильтр определяется с использованием значения нормализации, при этом значение нормализации является положительным целочисленным значением и зависит от количества доступных выборок, окружающих данный блок.
Пример 13. Способ примера 11 или 12, в котором значение нормализации имеет обратную зависимость от количества доступных выборок.
Пример 14. Способ любого из примеров 10-13, где значение нормализации равно 96, когда доступны не все выборки, окружающие блок.
Пример 15. Способ любого из примеров 10-14, в котором значение нормализации равно 64, когда доступны все выборки, окружающие блок.
Пример 16. Способ по любому из примеров 1-10, в котором фильтр представляет собой адаптивный контурной фильтр.
Пример 17. Способ по любому из примеров 1-10, в котором операция симметричного дополнения применяется, когда требуемые выборки недоступны для фильтрации данной выборки.
Пример 18. Способ по примеру 17, в котором операция симметричного дополнения определяется как замена недоступных выборок ближайшими соседними выборками, которые доступны для операции фильтрации.
Пример 19. Способ по любому из примеров 17 или 18, в котором операция симметричного дополнения определяется как способ, при котором фильтр делается симметричным путем применения операции дополнения с обеих сторон фильтра, даже если с одной стороны выборки фильтра все еще могут быть доступны. .
Пример 20. Способ по любому из примеров 1-19, в котором изображение включается в кадр видеопоследовательности.
Пример 21. Способ по любому из примеров 1-20, выполняемый для кодирования или декодирования изображения или выполняемый для кодирования или декодирования видеопоследовательности, содержащей изображение.
Пример 22. Способ по любому из примеров 1-21, в котором значение округления, используемое в процессе фильтрации, зависит от вертикального положения (координаты y) выборки p(i, j).
Пример 23. Способ по любому из примеров 1-22, в котором значение округления, используемое в процессе фильтрации, зависит от вертикального положения (координаты y) выборки p(i, j) и значения квантования (например, >> значение сдвига вправо), используемые в процессе фильтрации.
Пример 24. Способ по примеру 23, в котором при указании значения квантования переменной Q значение округления равно pow(2, Q-1), переменная получается по вертикальному положению (координате y) выборки p (i, j).
Пример 25. Способ по любому из примеров 22- 24, в котором значение округления равно 512, когда вертикальное положение (координата y) выборки p(i, j) удовлетворяет любому из следующих условий:
y==CtbSizeY-t-1, или y==CtbSizeY-t, или y==ctbHeightC-t, или y==ctbHeightC-t-1 (в некоторых примерах для цветности t равно 2; для яркости t равно 4).
Пример 26. Способ по любому из примеров 22- 25, в котором значение округления равно 64, когда вертикальное положение (координата y) образца p(i, j) не удовлетворяет ни одному из следующих условий:
y==CtbSizeY-t-1, или y==CtbSizeY-t, или y==ctbHeightC-t, или y==ctbHeightC-t-1.
Пример 27. Кодер (20), содержащий схему обработки для выполнения способа по любому из примеров 1-26.
Пример 28. Декодер (30), содержащий схему обработки для выполнения способа по любому из примеров 1-26.
Пример 29. Компьютерная программа, содержащая программный код для выполнения способа по любому из примеров 1-26.
Пример 30. Декодер, содержащий:
один или более процессоров; и
не-кратковременный считываемый компьютером носитель, связанный с процессорами и хранящий программную часть для исполнения процессорами, при этом программная часть, когда исполняется процессорами, конфигурирует декодер для выполнения способа по любому из примеров 1-26.
Пример 31. Кодер, содержащий:
один или более процессоров; и
не-кратковременный считываемый компьютером носитель, связанный с процессорами и хранящий программную часть для исполнения процессорами, при этом программная часть, когда исполняется процессорами, конфигурирует кодер для выполнения способа по любому из примеров 1-26.
Изобретение относится к средствам для кодирования изображений. Технический результат заключается в повышении эффективности кодирования изображений. Получают восстановленное значение выборки у выборки для блока изображения. Получают коэффициенты фильтра для адаптивной контурной фильтрации в соответствии с битовым потоком. Получают значение суммы посредством выполнения операции суммирования согласно коэффициентам фильтра и восстановленному значению выборки у выборки для блока. Округляют значение суммы в соответствии с вертикальным положением выборки в блоке для получения округленного значения суммы, при этом вертикальное положение выборки в блоке представляет собой положение выборки яркости. При этом округленное значение суммы удовлетворяет определенному выражению: sum = curr + ((sum + roundY) >> alfShiftY); где sum в левой части выражения представляет собой округленное значение суммы, где y представляет собой вертикальное положение выборки, roundY отличается от alfShiftY. Получают восстановленное фильтром значение выборки для блока в соответствии с округленным значением суммы. 4 н. и 10 з.п. ф-лы, 26 ил.
1. Способ фильтрации значения выборки изображения,
при этом способ содержит:
получение восстановленного значения выборки у выборки для блока изображения;
получение коэффициентов фильтра для адаптивной контурной фильтрации в соответствии с битовым потоком;
получение значения суммы посредством выполнения операции суммирования согласно коэффициентам фильтра и восстановленному значению выборки у выборки для блока;
округление значения суммы в соответствии с вертикальным положением выборки в блоке для получения округленного значения суммы, при этом вертикальное положение выборки в блоке представляет собой положение выборки яркости; при этом округленное значение суммы удовлетворяет следующему выражению в следующей таблице:
sum = curr + ((sum + roundY) >> alfShiftY);
где sum в левой части выражения представляет собой округленное значение суммы, где y представляет собой вертикальное положение выборки, roundY отличается от alfShiftY;
получение восстановленного фильтром значения выборки для блока в соответствии с округленным значением суммы.
2. Способ по п. 1, в котором roundY равно 512, а alfShiftY равно 10, когда вертикальное положение выборки удовлетворяет любому из следующих условий:
y == CtbSizeY - t-1, или
y == CtbSizeY - t, или
y == ctbHeightC - t, или
y == ctbHeightC - t-1,
где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение, при этом t представляет собой 2, 3, 4, 5 или 6.
3. Способ по п. 1 или 2, в котором roundY равно 64, а alfShiftY равно 7, когда вертикальное положение выборки не удовлетворяет ни одному из следующих условий:
y == CtbSizeY - t-1, или
y == CtbSizeY - t, или
y == ctbHeightC - t, или
y == ctbHeightC - t-1,
где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение, при этом t представляет собой 2, 3, 4, 5 или 6.
4. Способ по любому из пп. 2, 3, в котором, когда y равно 0, alfShiftY равно 10.
5. Способ по любому из пп. 2-4, в котором, когда y не равно 0, alfShiftY равно 7.
6. Способ по любому из пп. 1-5, в котором процесс округления содержит:
добавление значения roundY, которое определяется на основе вертикального положения, к значению суммы для получения добавленного значения суммы, и
смещение добавленного значения суммы на основе вертикального положения.
7. Устройство декодирования видео, содержащее:
модуль восстановления, который выполнен с возможностью получения восстановленного значения выборки у выборки для блока изображения;
модуль синтаксического анализа, который выполнен с возможностью получения коэффициентов фильтра для адаптивной контурной фильтрации в соответствии с битовым потоком;
модуль вычисления, который выполнен с возможностью получения значения суммы посредством применения операции суммирования согласно коэффициентам фильтра и восстановленному значению выборки у выборки для блока;
модуль округления, выполненный с возможностью округления значения суммы в соответствии с вертикальным положением выборки в блоке для получения округленного значения суммы, при этом вертикальное положение выборки в блоке представляет собой положение выборки яркости; при этом округленное значение суммы удовлетворяет следующему выражению и следующей таблице:
sum = curr + ((sum + roundY) >> alfShiftY);
где sum в левой части выражения представляет собой округленное значение суммы, где y представляет собой вертикальное положение выборки, roundY отличается от alfShiftY;
модуль фильтрации, который выполнен с возможностью получения восстановленного фильтром значения выборки для блока в соответствии с округленным значением суммы.
8. Устройство декодирования видео по п. 10, в котором roundY равно 512, а alfShiftY равно 10, когда вертикальное положение выборки удовлетворяет любому из следующих условий:
y == CtbSizeY - t-1, или
y == CtbSizeY - t, или
y == ctbHeightC - t, или
y == ctbHeightC - t-1,
где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение, при этом t представляет собой 2, 3, 4, 5 или 6.
9. Устройство декодирования видео по п. 7 или 8, в котором roundY равно 64, а alfShiftY равно 7, когда вертикальное положение выборки не удовлетворяет ни одному из следующих условий:
y == CtbSizeY - t-1, или
y == CtbSizeY - t, или
y == ctbHeightC - t, или
y == ctbHeightC - t-1,
где y - вертикальное положение выборки, CtbSizeY - размер блока дерева кодирования, CTB, ctbHeightC - высота CTB, t - целочисленное значение, при этом t представляет собой 2, 3, 4, 5 или 6.
10. Устройство декодирования видео по п. 8 или 9, в котором, когда y равно 0, alfShiftY равно 10.
11. Устройство декодирования видео по любому из пп. 8-10, в котором, когда y не равно 0, alfShiftY равно 7.
12. Устройство декодирования видео по любому из пп. 7-11, в котором модуль округления выполнен с возможностью
добавления значения roundY, которое определено на основе вертикального положения, к значению суммы для получения добавленного значения суммы и сдвига добавленного значения суммы на основе вертикального положения для получения округленного значения суммы.
13. Декодер, содержащий:
один или более процессоров; и
не-кратковременный считываемый компьютером носитель, связанный с процессорами и хранящий программную часть для исполнения процессорами, причем программная часть, когда исполняется упомянутыми процессорами, конфигурирует декодер для выполнения способа по любому из пп. 1-6.
14. Не-кратковременный считываемый компьютером носитель, содержащий компьютерный программный продукт для использования устройством декодирования видео, причем компьютерный программный продукт содержит выполняемые компьютером инструкции, хранимые на упомянутом не-кратковременном считываемом компьютером носителе таким образом, что, при выполнении процессором, они предписывают устройству декодирования выполнять способ по любому из пп. 1-6.
Benjamin Bross et al, "Versatile Video Coding (Draft 7)", JVET-P2001_vE, 16th Meeting, Geneva, Oct | |||
Станок для придания концам круглых радиаторных трубок шестигранного сечения | 1924 |
|
SU2019A1 |
Способ получения цианистых соединений | 1924 |
|
SU2018A1 |
Устройство для закрепления лыж на раме мотоциклов и велосипедов взамен переднего колеса | 1924 |
|
SU2015A1 |
Станок для придания концам круглых радиаторных трубок шестигранного сечения | 1924 |
|
SU2019A1 |
Станок для придания концам круглых радиаторных трубок шестигранного сечения | 1924 |
|
SU2019A1 |
Способ восстановления спиралей из вольфрамовой проволоки для электрических ламп накаливания, наполненных газом | 1924 |
|
SU2020A1 |
КОДИРОВАНИЕ И ДЕКОДИРОВАНИЕ ДАННЫХ | 2013 |
|
RU2599935C2 |
Авторы
Даты
2024-09-27—Публикация
2021-01-22—Подача