RU2815441C2 - Способ заполнения отсчетов при адаптивной контурной фильтрации - Google Patents

Способ заполнения отсчетов при адаптивной контурной фильтрации Download PDF

Info

Publication number
RU2815441C2
RU2815441C2 RU2022100447A RU2022100447A RU2815441C2 RU 2815441 C2 RU2815441 C2 RU 2815441C2 RU 2022100447 A RU2022100447 A RU 2022100447A RU 2022100447 A RU2022100447 A RU 2022100447A RU 2815441 C2 RU2815441 C2 RU 2815441C2
Authority
RU
Russia
Prior art keywords
sample
current
filter
samples
video
Prior art date
Application number
RU2022100447A
Other languages
English (en)
Other versions
RU2022100447A (ru
Inventor
Ли ЧЖАН
Кай Чжан
Хунбинь Лю
Юэ Ван
Original Assignee
Бейджин Байтдэнс Нетворк Текнолоджи Ко., Лтд.
Байтдэнс Инк.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Бейджин Байтдэнс Нетворк Текнолоджи Ко., Лтд., Байтдэнс Инк. filed Critical Бейджин Байтдэнс Нетворк Текнолоджи Ко., Лтд.
Publication of RU2022100447A publication Critical patent/RU2022100447A/ru
Application granted granted Critical
Publication of RU2815441C2 publication Critical patent/RU2815441C2/ru

Links

Abstract

Изобретение относится к технологиям кодирования и декодирования видео. Техническим результатом является повышение эффективности сжатия видео. Результат достигается тем, что способ обработки видео содержит определение, для преобразования между блоком, входящим в изображение видео в составе видеоролика, и представлением этого видеоролика в форме потока битов данных, заполнение первой группы отсчетов, расположенных через границы нескольких видео областей изображения видео для текущего отсчета в процессе адаптивной контурной фильтрации. Способ также содержит осуществление преобразования в соответствии с результатами указанного определения. 4 н. и 7 з.п. ф-лы, 43 ил., 7 табл.

Description

Область техники, к которой относится изобретение
Настоящий патентный документ направлен, в общем, на технологии кодирования и декодирования видео.
Уровень техники
Стандарты кодирования видео развивались главным образом через разработку хорошо известных стандартов ITU-T и ISO/IEC. Союз ITU-T выпустил стандарты H.261 и H.263, организация ISO/IEC выпустила стандарты MPEG-1 и MPEG-4 Visual, а также эти две организации совместно выпустили стандарты H.262/MPEG-2 Video и H.264/MPEG-4 Advanced Video Coding (AVC) (усовершенствованное видео кодирование) и H.265/HEVC (высокоэффективное видео кодирование). Со времени стандарта H.262, стандарты кодирования видео основаны на гибридной структуре кодирования видео, использующей временное прогнозирование плюс трансформационное кодирование. Для исследований в области технологий кодирования видео будущего, которые будут разработаны после технологии кодирования HEVC, группа экспертов по кодированию видео (VCEG) и группа экспертов по кинематографии (MPEG) в 2015 г. совместно основали Объединенную группу исследований в области видео (Joint Video Exploration Team (JVET)). С тех пор группа JVET разработала множество новых способов и ввела их в эталонное программное обеспечение, называемое Совместной исследовательской моделью (Joint Exploration Model (JEM)). В апреле 2018 г. группа VCEG (Q6/16) и отдел ISO/IEC JTC1 SC29/WG11 (MPEG) создали объединенную группу экспертов в области видео (JVET) для работ над стандартом универсального видео кодирования (Versatile Video Coding (VVC)), имея целью добиться снижения требуемой скорости передачи битов данных на 50% по сравнению с кодированием HEVC.
Раскрытие сущности изобретения
Используя описываемые здесь способы кодирования, транскодирования или декодирования видео, варианты кодирующих устройств или декодирующих устройств для видео могут обрабатывать виртуальные границы блоков дерева кодирования для достижения лучшей эффективности сжатия и более простой реализации инструментов для кодирования или декодирования.
Согласно одному из примерных аспектов предложен способ обработки видео. Способ содержит этап. на котором определяют, для преобразования между блоком видеоизображения видео и представлением видео в виде потока битов данных, способ заполнения первого набора отсчетов, расположенных через границы множества видеообластей видеоизображения, для текущего отсчета в процессе адаптивной контурной фильтрации. Способ содержит также этап, на котором выполняют преобразование на основе указанного определения.
Согласно другому примерному аспекту предложен способ обработки видео. Способ содержит этап, на котором определяют, для преобразования между блоком видеоизображения видео и представлением видео в виде потока битов данных, операцию равномерного заполнения, генерирующую отсчеты для текущего отсчета блока в процессе адаптивной контурной фильтрации, для случая, когда блок совпадает с границей по меньшей мере одного типа множества видеообластей видеоизображения. Способ также содержит этап, на котором выполняют преобразование на основе указанного определения.
Согласно другому примерному аспекту предложен способ обработки видео. Способ содержит этап, на котором определяют, для преобразования между блоком видеоизображения видео и представлением видео в виде потока битов данных, способ привлечения операции заполнения в процессе адаптивной контурной фильтрации для текущего отсчета, расположенного между двумя типами границ множества видеообластей. Один из двух типов границ представляет собой виртуальную границу на 360 градусов. Способ дополнительно содержит этап, на котором выполняют преобразование в соответствии с указанным определением.
Согласно другому примерному аспекту предложен способ обработки видео. Способ содержит этап, на котором выполняют преобразования между видеоблоками видеоизображения и представлением блоков в виде потока битов данных. В данном случае видеоблоки обрабатываются с использованием логического группирования блоков дерева кодирования, и блоки дерева кодирования обрабатываются на основе того, находится ли нижняя граница нижнего блока дерева кодирования за пределами нижней границы видеоизображения.
Согласно другому примерному аспекту предложен другой способ обработки видео. Способ содержит этапы, на которых определяют, на основе состояния блока дерева кодирования для текущего видеоблока, статус использования виртуальных отсчетов в процессе внутриконтурной фильтрации и выполняют преобразование между видеоблоком и представлением видеоблока в виде потока битов данных в соответствии со статусом использования виртуальных отсчетов.
Согласно еще одному другому примерному аспекту предложен другой способ обработки видео. Способ содержит этапы, на которых определяют, в процессе преобразования между видеоизображением, логически сгруппированным в один или более видеосрезов или видео «кирпичей», и представлением видеоизображения в виде потока битов данных, деактивировать использование отсчетов в другом срезе или кирпиче в процессе адаптивной контурной фильтрации, и выполняют преобразование на основе указанного определения.
Согласно еще одному другому примерному аспекту предложен другой способ обработки видео. Способ содержит этапы, на которых определяют, в процессе преобразования между текущим видеоблоком видеоизображения и представлением текущего видеоблока в виде потока битов данных, что текущий видеоблок содержит отсчеты, расположенные на границе видеоединицы видеоизображения, и выполняют указанное преобразование на основе указанного определения, причем на этапе выполнения преобразования генерируют виртуальные отсчеты для процедуры внутриконтурной фильтрации с использованием унифицированного способа, являющегося одинаковым для всех типов границ в пределах видеоизображения.
Согласно еще одному примерному аспекту предложен другой способ обработки видео. Способ содержит этапы, на которых определяют для применения, в процессе преобразования между текущим видеоблоком видеоизображения и представлением текущего видеоблока в виде потока битов данных, один из множества способов выбора отсчетов при использовании адаптивного контурного фильтра (adaptive loop filter (ALF)), доступных для видеоизображения в процессе преобразования, и выполняют преобразование путем применения указанного одного или более способов выбора отсчетов при использовании фильтра ALF.
Согласно еще одному примерному аспекту предложен другой способ обработки видео. Способ содержит этапы, на которых выполняют, на основе граничного правила, операцию внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением текущего видеоблока в виде потока битов данных; причем граничное правило деактивирует использование отсчетов, пересекающих единицу данных виртуального конвейера (virtual pipeline data unit (VPDU)) в видеоизображении, и выполняют преобразование с использованием результата операции внутриконтурной фильтрации.
Согласно еще одному примерному аспекту предложен другой способ обработки видео. Способ содержит этапы, на которых выполняют, на основе граничного правила, операцию внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением текущего видеоблока в виде потока битов данных; причем граничное правило устанавливает, для позиций текущего видеоблока через границу видеоединицы, использовать отсчеты, генерируемые без использования заполнения, и выполняют преобразование с использованием результата операции внутриконтурной фильтрации.
Согласно еще одному примерному аспекту предложен другой способ обработки видео. Способ содержит этапы, на которых выполняют, на основе граничного правила, операцию внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением текущего видеоблока в виде потока битов данных; причем граничное правило устанавливает выбрать, для операции внутриконтурной фильтрации, фильтр с такими размерами, что отсчеты текущего видеоблока, используемые в процессе внутриконтурной фильтрации, не пересекают границу видеоединицы видеоизображения, и выполняют преобразование с использованием результата операции внутриконтурной фильтрации.
Согласно еще одному примерному аспекту предложен другой способ обработки видео. Способ содержит этапы, на которых выполняют, на основе граничного правила, операцию внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением текущего видеоблока в виде потока битов данных; причем граничное правило устанавливает выбрать, для операции внутриконтурной фильтрации, параметры усечения или коэффициенты фильтрации на основе того, нужны ли отсчеты заполнения для внутриконтурной фильтрации, и выполняют преобразование с использованием результата операции внутриконтурной фильтрации.
Согласно еще одному примерному аспекту предложен другой способ обработки видео. Способ содержит этапы, на которых выполняют, на основе граничного правила, операцию внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением текущего видеоблока в виде потока битов данных; причем граничное правило зависит от идентификаторов цветовых составляющих текущего видеоблока, и выполняют преобразование с использованием результата операции внутриконтурной фильтрации.
Согласно еще одному примерному аспекту предложено кодирующее устройство для видео, выполненное с возможностью выполнения описываемого выше способа.
Согласно еще одному примерному аспекту предложено декодирующее устройство для видео, выполненное с возможностью выполнения описываемого выше способа.
Согласно еще одному примерному аспекту предложен машиночитаемый носитель информации. Носитель хранит код, исполнение которого вызывает реализацию процессором одного или более описываемых выше способов.
Приведенные выше и другие аспекты и признаки предлагаемой технологии описаны более подробно на чертежах, в описании и в формуле изобретения.
Краткое описание чертежей
Фиг. 1 показывает пример изображения, содержащего 18x12 единиц дерева кодирования (coding tree unit (CTU)) яркостной составляющей, которые разбиты на 12 плиток и 3 растровых среза.
Фиг. 2 показывает пример изображения, содержащего 18x12 единиц CTU яркостной составляющей, которые разбиты на 24 плитки и 9 прямоугольных срезов.
Фиг. 3 показывает пример изображения, разбитого на 4 плитки, 11 «кирпичей» и 4 прямоугольных среза.
Фиг. 4A показывает пример блоков дерева кодирования (coding tree block (CTB)), пересекающих границы изображения, когда K = M, L < N.
Фиг. 4B показывает пример блоков дерева кодирования (CTB), пересекающих границы изображения, когда K<M, L=N.
Фиг. 4C показывает пример блоков дерева кодирования (CTB), пересекающих границы изображения, когда K<M, L<N.
Фиг. 5 показывает блок-схему примера кодирующего устройства.
Фиг. 6 представляет иллюстрацию отсчетов изображения и горизонтальных и вертикальных границ блоков в сетке 8×8, а также не накладывающиеся один на другой блоки размером 8×8 отсчетов, которые могут быть деблокированы параллельно.
Фиг. 7 показывает примеры пикселей, вовлеченных в принятие решения о включении/выключении фильтра и в выбор сильного/слабого фильтра.
Фиг. 8 показаны четыре одномерных (1-D) направленных структуры.
Фиг. 9 показывает примеры форм фильтра для геометрической адаптивной контурной фильтрации (geometric adaptive loop filtering (GALF)) (левый пример: ромб размером 5×5, средний пример: ромб размером 7×7, правый пример: ром размером 9×9).
Фиг. 10 показывает относительные координаты для опоры фильтра в форме ромба размером 5×5.
Фиг. 11 показывает примеры относительных координат для опоры фильтра в форме ромба размером 5×5.
Фиг. 12A показывает пример конфигурации для вычисления субдискретизированного оператора Лапласа.
Фиг. 12B показывает другой пример конфигурации для вычисления субдискретизированного оператора Лапласа.
Фиг. 12C показывает другой пример конфигурации для вычисления субдискретизированного оператора Лапласа.
Фиг. 12D показывает еще один другой пример конфигурации для вычисления субдискретизированного оператора Лапласа.
Фиг. 13 показывает пример требований к буферу линий для контурного фильтра в документе VTM-4.0 для яркостной составляющей.
Фиг. 14 показывает пример требований к буферу линий для контурного фильтра в документе VTM-4.0 для цветностной составляющей.
Фиг. 15A показывает пример классификации блоков для фильтрации ALF на виртуальной границе, когда N = 4.
Фиг. 15B показывает другой пример классификации блоков для фильтрации ALF на виртуальной границе, когда N = 4.
Фиг. 16A иллюстрирует пример модифицированной фильтрации ALF для яркостной составляющей на виртуальной границе.
Фиг. 16B иллюстрирует другой пример модифицированной фильтрации ALF для яркостной составляющей на виртуальной границе.
Фиг. 16C иллюстрирует еще один другой пример модифицированной фильтрации ALF для яркостной составляющей на виртуальной границе.
Фиг. 17A показывает пример модифицированной фильтрации ALF для цветностной составляющей на виртуальной границе.
Фиг. 17B показывает другой пример модифицированной фильтрации ALF для цветностной составляющей на виртуальной границе.
Фиг. 18A показывает пример горизонтальной круговой компенсации движения.
Фиг. 18B показывает другой пример горизонтальной круговой компенсации движения.
Фиг. 19 иллюстрирует пример модифицированного адаптивного контурного фильтра.
Фиг. 20 показывает пример обработки единиц CTU в видеоизображении.
Фиг. 21 показывает пример границы модифицированного адаптивного контурного фильтра.
Фиг. 22 представляет пример блок-схемы устройства для обработки видео.
Фиг. 23 представляет логическую схему примера способа обработки видео.
Фиг. 24 показывает пример изображения с упаковкой 3x2.
Фиг. 25 показывает пример нескольких заполненных линий для отсчетов с двух видов границ.
Фиг. 26 показывает пример обработки единиц CTU в изображении.
Фиг. 27 показывает другой пример обработки единиц CTU в изображении.
Фиг. 28 показывает другой пример текущего отсчета и отсчетов, к которым следует обратиться.
Фиг. 29 показывает другой пример заполнения «не доступных» соседних отсчетов.
Фиг. 30 представляет блок-схему примера системы обработки видео, в которой могут быть реализованы предлагаемые здесь способы.
Фиг. 31 представляет логическую схему способа обработки видео в соответствии с предлагаемой технологией.
Фиг. 32 представляет логическую схему другого способа обработки видео в соответствии с предлагаемой технологией.
Фиг. 33 представляет логическую схему еще одного другого способа обработки видео в соответствии с предлагаемой технологией.
Осуществление изобретения
Заголовки разделов используются в настоящем документе для облегчения понимания и не ограничивают варианты, описываемые в этом разделе, только этим разделом. Кроме того, хотя некоторые варианты описаны применительно к универсальному видео кодированию (Versatile Video Coding) или к другим конкретным видео кодекам, описываемые здесь способы применимы также к другим технологиям кодирования видео. Кроме того, хотя некоторые варианты описывают этапы кодирования видео подробно, должно быть понятно, что соответствующие этапы декодирования, обратного кодированию будут реализованы декодирующим устройством. Кроме того, термин «обработка видео» охватывает кодирование или сжатие видео, декодирование или расширение видео и транскодирование видео, в ходе которого пиксели видео, представленные в одном сжатом формате, преобразуют в другой сжатый формат или к другой частоте передачи битов сжатых данных.
1. Краткое изложение существа изобретения
Настоящий документ относится к технологиям кодирования видео. В частности, это относится к кодированию границы изображения/среза/плитки/кирпича и кодированию виртуальной границы, особенно для нелинейного адаптивного контурного фильтра. Это может быть применено к существующим стандартам кодирования видео, таким как стандарт кодирования HEVC, или стандарт универсального видео кодирования (Versatile Video Coding), работа над которым еще должна быть завершена. Это может быть также применимо к стандартам кодирования видео или видео кодекам будущего.
2. Первоначальное обсуждение
Стандарты кодирования видео развивались главным образом через разработку хорошо известных стандартов ITU-T и ISO/IEC. Союз ITU-T выпустил стандарты H.261 и H.263, организация ISO/IEC выпустила стандарты MPEG-1 и MPEG-4 Visual, а также эти две организации совместно выпустили стандарты H.262/MPEG-2 Video и H.264/MPEG-4 Advanced Video Coding (AVC) (усовершенствованное видео кодирование) и H.265/HEVC (высокоэффективное видео кодирование). Со времени стандарта H.262, стандарты кодирования видео основаны на гибридной структуре кодирования видео, использующей временное прогнозирование плюс трансформационное кодирование. Для исследований в области технологий кодирования видео будущего, которые будут разработаны после технологии кодирования HEVC, группа экспертов по кодированию видео (VCEG) и группа экспертов по кинематографии (MPEG) в 2015 г. совместно основали Объединенную группу исследований в области видео (Joint Video Exploration Team (JVET)). С тех пор группа JVET разработала множество новых способов и ввела их в эталонное программное обеспечение, называемое Совместной исследовательской моделью (Joint Exploration Model (JEM)). В апреле 2018 г. группа VCEG (Q6/16) и отдел ISO/IEC JTC1 SC29/WG11 (MPEG) создали объединенную группу экспертов в области видео (JVET) для работ над стандартом универсального видео кодирования (VVC), имея целью добиться снижения требуемой скорости передачи битов данных на 50% по сравнению с кодированием HEVC.
2.1 Цветовое пространство и субдискретизация цветностной составляющей
Цветовое пространство, также известное как цветовая модель (или цветовая система), представляет собой абстрактную математическую модель, которая просто описывает диапазон цветов как кортеж номеров, обычно как 3 или 4 значения или цветовых составляющих (например. RGB). По существу, цветовое пространство представляет собой развитие системы координат и подпространство.
Для сжатия видео, наиболее часто используются цветовые пространства YCbCr и RGB.
Пространства YCbCr, Y′CbCr, или Y Pb/Cb Pr/Cr, также записываемые как YCBCR или Y'CBCR, представляют семейства цветовых пространств, используемых как часть конвейера цветового изображения в системах съемки и обработки видео и цифровой фотографии. Здесь Y′ обозначает яркостную составляющую и CB и CR обозначают разностную-синюю и разностную-красную цветностные составляющие. Здесь значение Y′ (со штрихом) отличается от значения Y, представляющей яркость, тем, что интенсивность света кодирована нелинейно на основе гамма-скорректированных значений основных цветов RGB.
Субдискретизация цветностной составляющей представляет собой способ кодирования изображения с использованием меньшего разрешения для цветностной информации, чем для яркостной составляющей, извлекая выгоду из того факта, что система человеческого зрения с меньшей остротой воспринимает разность цветов, чем разницу яркостей.
2.1.1 Цветовой формат 4:4:4
Каждая из трех составляющих Y'CbCr имеет одну и ту же частоту дискретизации, так что здесь нет субдискретизации цветностной составляющей. Эта схема иногда используется в высококачественных сканерах для кинопленки и при послесъемочной обработке в кинематографии.
2.1.2 Цветовой формат 4:2:2
Две цветностные составляющие дискретизируют с частотой, равной половине частоты дискретизации яркостной составляющей: горизонтальное разрешение цветностной составляющей уменьшено вдвое. Это уменьшает ширину полосы частот сигнала несжатого видео на одну треть, что соответствует небольшой визуальной разнице или отсутствию такой разнице.
2.1.3 Цветовой формат 4:2:0
В формате 4:2:0, частота горизонтальной дискретизации удвоена по сравнению с форматом 4:1:1, но поскольку в этой схеме отсчеты в каналах Cb и Cr выполняют только в чередующихся линиях, вертикальное разрешение уменьшено вдвое. Частота передачи данных, таким образом, является такой же. Каждую из составляющих Cb и Cr подвергают субдискретизации с коэффициентом 2 и по горизонтали, и по вертикали. Имеются три варианта схем 4:2:0, имеющих различные горизонтальное и вертикальное размещение.
В стандартах MPEG-2, составляющие Cb и Cr расположены по горизонтали в одном и том же месте. Составляющие Cb и Cr расположены между пикселями в вертикальном направлении (расположены в «междоузлиях»).
В стандартах JPEG/JFIF, H.261 и MPEG-1, составляющие Cb и Cr расположены в промежутках, на полпути между чередующимися отсчетами яркостной составляющей.
В формате 4:2:0 составляющие DV, Cb и Cr расположены в одном и том же месте в горизонтальном направлении. В вертикальном направлении они расположены в одном и том же месте на чередующихся линиях.
2.2 Различные видео единицы
Изображение разбито на одну или несколько строк плиток и один или несколько столбцов плиток. Плитка представляет собой последовательность единиц CTU, покрывающую прямоугольную область изображения.
Плитка разбита на один или несколько кирпичей, каждый из которых содержит несколько строк единиц CTU в пределах этой плитки.
Плитка, не разбитая на несколько кирпичей, также называется кирпичом. Однако кирпич, являющийся истинным подмножеством плитки, не называется плиткой.
Срез содержит либо несколько плиток изображения, либо несколько кирпичей плиток.
Используются два вида срезов, а именно растровые срезы и прямоугольные срезы. В случае растровых срезов такой срез содержит последовательность плиток, полученную при растровом сканировании изображении. В случае прямоугольных срезов, такой срез содержит несколько кирпичей изображения, которые коллективно образуют прямоугольную область изображения. Кирпичи в пределах прямоугольного среза располагаются в порядке растрового сканирования кирпичей в срезе.
Фиг. 1 показывает пример разбиения изображения на растровые срезы, где изображение разбито на 12 плиток и 3 растровых среза.
Фиг. 2 показывает пример разбиения изображения на прямоугольные срезы, гдке это изображение разбито на 24 плитки (6 столбцов плиток и 4 строки плиток) и 9 прямоугольных срезов.
Фиг. 3 показывает пример изображения, разбитого на плитки, кирпичи и прямоугольные срезы, где изображение разбито на 4 плитки (2 столбца плиток и 2 строки плиток), 11 кирпичей (верхняя левая плитка содержит 1 кирпич, верхняя правая плитка содержит 5 кирпичей, нижняя левая плитка содержит 2 кирпича, и нижняя правая плитка содержит 3 кирпича), и 4 прямоугольных среза.
2.2.1 Размеры единиц CTU/блоков CTB
В стандарте кодирования VVC, размер единицы CTU, сообщаемый в виде сигнализации в наборе SPS посредством синтаксического элемента log2_ctu_size_minus2, может быть в пределах 4x4.
7.3.2.3 Синтаксис набора параметров последовательности RBSP
seq_parameter_set_rbsp( ) { Дескриптор
sps_decoding_parameter_set_id u(4)
sps_video_parameter_set_id u(4)
sps_max_sub_layers_minus1 u(3)
sps_reserved_zero_5bits u(5)
profile_tier_level( sps_max_sub_layers_minus1 )
gra_enabled_flag u(1)
sps_seq_parameter_set_id ue(v)
chroma_format_idc ue(v)
if( chroma_format_idc = = 3 )
separate_colour_plane_flag u(1)
pic_width_in_luma_samples ue(v)
pic_height_in_luma_samples ue(v)
conformance_window_flag u(1)
if( conformance_window_flag ) {
conf_win_left_offset ue(v)
conf_win_right_offset ue(v)
conf_win_top_offset ue(v)
conf_win_bottom_offset ue(v)
}
bit_depth_luma_minus8 ue(v)
bit_depth_chroma_minus8 ue(v)
log2_max_pic_order_cnt_lsb_minus4 ue(v)
sps_sub_layer_ordering_info_present_flag u(1)
for( i = ( sps_sub_layer_ordering_info_present_flag ? 0 : sps_max_sub_layers_minus1 );
i <= sps_max_sub_layers_minus1; i++ ) {
sps_max_dec_pic_buffering_minus1[ i ] ue(v)
sps_max_num_reorder_pics[ i ] ue(v)
sps_max_latency_increase_plus1[ i ] ue(v)
}
long_term_ref_pics_flag u(1)
sps_idr_rpl_present_flag u(1)
rpl1_same_as_rpl0_flag u(1)
for( i = 0; i < !rpl1_same_as_rpl0_flag ? 2 : 1; i++ ) {
num_ref_pic_lists_in_sps[ i ] ue(v)
for( j = 0; j < num_ref_pic_lists_in_sps[ i ]; j++)
ref_pic_list_struct( i, j )
}
qtbtt_dual_tree_intra_flag u(1)
log2_ctu_size_minus2 ue(v)
log2_min_luma_coding_block_size_minus2 ue(v)
partition_constraints_override_enabled_flag u(1)
sps_log2_diff_min_qt_min_cb_intra_slice_luma ue(v)
sps_log2_diff_min_qt_min_cb_inter_slice ue(v)
sps_max_mtt_hierarchy_depth_inter_slice ue(v)
sps_max_mtt_hierarchy_depth_intra_slice_luma ue(v)
if( sps_max_mtt_hierarchy_depth_intra_slice_luma != 0 ) {
sps_log2_diff_max_bt_min_qt_intra_slice_luma ue(v)
sps_log2_diff_max_tt_min_qt_intra_slice_luma ue(v)
}
if( sps_max_mtt_hierarchy_depth_inter_slices != 0 ) {
sps_log2_diff_max_bt_min_qt_inter_slice ue(v)
sps_log2_diff_max_tt_min_qt_inter_slice ue(v)
}
if( qtbtt_dual_tree_intra_flag ) {
sps_log2_diff_min_qt_min_cb_intra_slice_chroma ue(v)
sps_max_mtt_hierarchy_depth_intra_slice_chroma ue(v)
if ( sps_max_mtt_hierarchy_depth_intra_slice_chroma != 0 ) {
sps_log2_diff_max_bt_min_qt_intra_slice_chroma ue(v)
sps_log2_diff_max_tt_min_qt_intra_slice_chroma ue(v)
}
}
rbsp_trailing_bits( )
}
Параметр log2_ctu_size_minus2 plus 2 специфицирует размер блока дерева кодирования яркостной составляющей для каждой единицы CTU.
Параметр log2_min_luma_coding_block_size_minus2 plus 2 специфицирует минимальный размер блока кодирования яркостной составляющей.
Переменные CtbLog2SizeY, CtbSizeY, MinCbLog2SizeY, MinCbSizeY, MinTbLog2SizeY, MaxTbLog2SizeY, MinTbSizeY, MaxTbSizeY, PicWidthInCtbsY, PicHeightInCtbsY, PicSizeInCtbsY, PicWidthInMinCbsY, PicHeightInMinCbsY, PicSizeInMinCbsY, PicSizeInSamplesY, PicWidthInSamplesC и PicHeightInSamplesC определяют следующим образом:
CtbLog2SizeY = log2_ctu_size_minus2 + 2 (7-9)
CtbSizeY = 1 << CtbLog2SizeY (7-10)
MinCbLog2SizeY = log2_min_luma_coding_block_size_minus2 + 2 (7-11)
MinCbSizeY = 1 << MinCbLog2SizeY (7-12)
MinTbLog2SizeY = 2 (7-13)
MaxTbLog2SizeY = 6 (7-14)
MinTbSizeY = 1 << MinTbLog2SizeY (7-15)
MaxTbSizeY = 1 << MaxTbLog2SizeY (7-16)
PicWidthInCtbsY = Ceil( pic_width_in_luma_samples ÷ CtbSizeY ) (7-17)
PicHeightInCtbsY = Ceil( pic_height_in_luma_samples ÷ CtbSizeY ) (7-18)
PicSizeInCtbsY = PicWidthInCtbsY * PicHeightInCtbsY (7-19)
PicWidthInMinCbsY = pic_width_in_luma_samples/MinCbSizeY (7-20)
PicHeightInMinCbsY = pic_height_in_luma_samples/MinCbSizeY (7-21)
PicSizeInMinCbsY = PicWidthInMinCbsY * PicHeightInMinCbsY (7-22)
PicSizeInSamplesY = pic_width_in_luma_samples * pic_height_in_luma_samples (7-23)
PicWidthInSamplesC = pic_width_in_luma_samples/SubWidthC (7-24)
PicHeightInSamplesC = pic_height_in_luma_samples/SubHeightC (7-25)
2.2.2 Единицы CTU в изображении
Предположим, что размер блока CTB/единицы LCU обозначен M x N (обычно M равно N, как определено в стандарте HEVC/VVC), и для блока CTB, расположенного на границе изображения (или плитки, или среза, или другой единицы разбиения, граница изображения здесь взята только в качестве примера), в пределах изображения находятся K x L отсчетов, где либо K<M, либо L<N. Для блоков CTB, как это показано на Фиг. 4A-4C, размер блока CTB по-прежнему равен MxN, однако нижняя граница/правая граница блока CTB располагается вне изображения.
На Фиг. 4A показаны блоки CTB, пересекающие нижнюю границу изображения. На Фиг. 4B показаны блоки CTB, пересекающие правую границу изображения. На Фиг. 4C показаны блоки CTB, пересекающие правую нижнюю границу изображения.
На Фиг. 4A-4C показаны примеры блоков CTB, пересекающих границы изображения, (a) K=M, L<N; (b) K<M, L=N; (c) K<M, L<N
2.3 Последовательность операций процедуры кодирования в типовом видео кодеке
На Фиг. 5 показан пример блок-схемы кодирующего устройства для стандарта кодирования VVC, которое содержит три блока внутриконтурной фильтрации: деблокирующий фильтр (deblocking filter (DF)), нелинейный фильтр с адаптивным смещением (sample adaptive offset (SAO)) и адаптивный контурный фильтр ALF. В отличие от фильтра DF, который использует предварительно заданные фильтры, фильтры SAO и ALF используют первоначальные отсчеты текущего изображения для уменьшения среднеквадратических ошибок между первоначальными отсчетами и реконструированными отсчетами путем добавления сдвига и применения фильтра с конечной импульсной характеристикой (КИХ (finite impulse response (FIR))), соответственно, с кодированной дополнительной информацией, сигнализирующей о сдвигах и коэффициентах фильтрации. Фильтр ALF расположен на последней стадии обработки каждого изображения и может рассматриваться в качестве инструмента, пытающегося захватывать («вылавливать») и фиксировать артефакты, создаваемые на предыдущих стадиях.
2.4 Деблокирующий фильтр (DB)
Входными данными для фильтра DB являются реконструированные отсчеты прежде применения внутриконтурных фильтров.
Сначала фильтруют вертикальные кромки в изображении. Затем фильтруют горизонтальные кромки в изображении с использованием отсчетов, модифицированных посредством процедуры фильтрации вертикальных кромок, в качестве входных отсчетов. Вертикальные и горизонтальные кромки в блоках CTB в каждой единице CTU обрабатывают по отдельности на основе единиц кодирования. Вертикальные кромки блоков кодирования в единице кодирования фильтруют, начиная от кромки на левой стороне блоков кодирования и переходя от кромки к кромке в направлении к правой стороне блоков кодирования в геометрическом порядке расположения этих блоков.
На Фиг. 6 представлена иллюстрация отсчетов изображения и горизонтальных и вертикальных размеров блоков в сетке 8×8 и не накладывающихся один на другой блоки размером 8×8 отсчетов, которые могут быть деблокированы параллельно.
2.4.1. Решение о границах
Фильтрация применяется к границам блоков размером 8x8. В дополнение к этому, такая граница должна быть границей блока преобразования или границей субблока кодирования (например, вследствие использования прогнозирования аффинного движения (Affine motion prediction, ATMVP)). Для объектов, не являющихся такими границами, фильтр отключен.
2.4.1 Вычисление жесткости границ
Для границы блока преобразования/границы субблока кодирования, если такая граница расположена в сетке 8x8, эту границу можно фильтровать, и установление жесткости bS[ xDi ][ yDj ] (где [ xDi ][ yDj ] обозначает координаты) для этой кромки определено в Табл. 1 и Табл. 2, соответственно.
Таблица 1. Жесткость границы (когда режим SPS IBC не активизирован)
Приоритет Условие Y U V
5 По меньшей мере один из смежных блоков является блоком с внутрикадровым прогнозированием 2 2 2
4 Граница единицы TU и по меньшей мере один из смежных блоков имеют ненулевые коэффициенты преобразования 1 1 1
3 Опорные изображения или число векторов MV (1 для однонаправленного прогнозирования, 2 для двунаправленного прогнозирования) для смежных блоков являются различными 1 N/A N/A
2 Абсолютная разность между векторами движения одного и того же опорного изображения, принадлежащими смежным блокам, не меньше одного целочисленного отсчета яркостной составляющей 1 N/A N/A
1 Иначе 0 0 0
Таблица 2. Жесткость границы (когда режим SPS IBC активизирован)
Приоритет Условие Y U V
8 По меньшей мере один из смежных блоков является блоком с внутрикадровым прогнозированием 2 2 2
7 Граница единицы TU и по меньшей мере один из смежных блоков имеют ненулевые коэффициенты преобразования 1 1 1
6 Режимы прогнозирования смежных блоков различны (например, один из блоков в режиме копирования IBC, один в режиме межкадрового прогнозирования) 1
5 Оба блока в режиме копирования IBC, и абсолютная разность между векторами движения не меньше одного целочисленного отсчета яркостной составляющей 1 N/A N/A
4 Опорные изображения или число векторов MV (1 для однонаправленного прогнозирования, 2 для двунаправленного прогнозирования) для смежных блоков являются различными 1 N/A N/A
3 Абсолютная разность между векторами движения одного и того же опорного изображения, принадлежащими смежным блокам, не меньше одного целочисленного отсчета яркостной составляющей 1 N/A N/A
1 Иначе 0 0 0
2.4.3 Решение о деблокирующей фильтрации для яркостной составляющей
В этом подразделе описана процедура принятия решения о деблокирующей фильтрации.
На Фиг. 7 показаны примеры пикселей, участвующих в принятии решения о включении/выключении фильтра и выборе сильного/слабого фильтра.
Более широкие-более сильные фильтры яркостной составляющей представляют собой фильтры, используемые, только если все условия – Условие 1, Условие 2 и Условие 3, являются «истинными» (TRUE).
Условие 1 представляет собой «условие большого блока». Это условие определяет, принадлежат ли отсчеты на P-стороне и на Q-стороне большим блокам, что представлено переменной bSidePisLargeBlk и переменной bSideQisLargeBlk соответственно. Переменные bSidePisLargeBlk и bSideQisLargeBlk определены следующим образом.
bSidePisLargeBlk = ((кромка вертикального типа и отсчет p0 принадлежит единице CU с шириной >= 32) | | (кромка горизонтального типа и отсчет p0 принадлежит единице CU с высотой >= 32))? TRUE: FALSE
bSideQisLargeBlk = ((кромка вертикального типа и отсчет q0 принадлежит единице CU с шириной >= 32) | | (кромка горизонтального типа и отсчет q0 принадлежит единице CU с высотой >= 32))? TRUE: FALSE
На основе переменных bSidePisLargeBlk и bSideQisLargeBlk, условие 1 определено следующим образом.
Условие 1 = (bSidePisLargeBlk || bSidePisLargeBlk) ? TRUE: FALSE
Далее, если Условие 1 является истинным (true), далее следует проверить условие 2. Сначала определяют следующие переменные:
- dp0, dp3, dq0, dq3 сначала определяют как в стандарте кодирования HEVC
- если (p-сторона не меньше 32)
dp0 = ( dp0 + Abs( p50 − 2 * p40 + p30 ) + 1 ) >> 1
dp3 = ( dp3 + Abs( p53 − 2 * p43 + p33 ) + 1 ) >> 1
- если (q-сторона не меньше 32)
dq0 = ( dq0 + Abs( q50 − 2 * q40 + q30 ) + 1 ) >> 1
dq3 = ( dq3 + Abs( q53 − 2 * q43 + q33 ) + 1 ) >> 1
Условие2 = (d < β) ? TRUE: FALSE
где d= dp0 + dq0 + dp3 + dq3.
Если Условие1 и Условие2 являются действительными, далее проверяют, использует ли какой-либо из блоков субблоки:
If (bSidePisLargeBlk)
{
If (mode block P == SUBBLOCKMODE)
Sp =5
else
Sp =7
}
else
Sp = 3
If (bSideQisLargeBlk)
{
If (mode block Q == SUBBLOCKMODE)
Sq =5
else
Sq =7
}
else
Sq = 3
Наконец, если оба Условие 1 и Условие 2 являются действительными, предлагаемый способ деблокирования будет проверять условие 3 (условие сильного фильтра для больших блоков), которое определено следующим образом.
В Условии 3 StrongFilterCondition (условие сильного фильтра), определяют следующие переменные:
dpq определяют как в стандарте кодирования HEVC.
sp3 = Abs( p3 − p0 ), определяют как в стандарте кодирования HEVC
if (p-сторона не меньше 32)
if(Sp==5)
sp3 = ( sp3 + Abs( p5 − p3 ) + 1) >> 1
else
sp3 = ( sp3 + Abs( p7 − p3 ) + 1) >> 1
sq3 = Abs( q0 − q3 ), определяют как в стандарте кодирования HEVC
if (q-сторона не меньше 32)
If(Sq==5)
sq3 = ( sq3 + Abs( q5 − q3 ) + 1) >> 1
else
sq3 = ( sq3 + Abs( q7 − q3 ) + 1) >> 1
Как и в стандарте кодирования HEVC, StrongFilterCondition = (dpq меньше ( β >> 2 ), sp3 + sq3 меньше ( 3*β >> 5 ), и Abs( p0 − q0 ) меньше ( 5 * tC + 1 ) >> 1) ? TRUE : FALSE.
2.4.4 Более сильный деблокирующий фильтр для яркостной составляющей (спроектирован для блоков большего размера)
Билинейный фильтр используется, когда отсчеты с какой-либо стороны от границы принадлежат большому блоку. Принадлежность отсчета большому блоку определяют как принадлежность блоку, для которого ширина >= 32 для вертикальной кромки и высота >= 32 для горизонтальной кромки.
Билинейный фильтр описан ниже.
Отсчеты на границе блока, а именно pi для i=0 по Sp-1 и qi для j=0 по Sq-1 (pi и qi обозначают i-ый отсчет в строке для фильтрации вертикальной кромки или i-ый отсчет в столбце для фильтрации горизонтальной кромки) при деблокировании в стандарте кодирования HEVC, описываемом выше, затем заменяют посредством линейной интерполяции следующим образом:
-
-
где члены и обозначают позицию в зависимости от усечения, описываемого в Разделе 2.4.7 и параметры , , , и приведены ниже:
2.4.5 Управление деблокированием для цветностной составляющей
Сильные фильтры для цветностной составляющей используются по обе стороны от границы блока. Здесь фильтр для цветностной составляющей выбирают, когда обе стороны от кромки цветностной составляющей не меньше 8 (позиций цветностной составляющей), и принимается следующее решение, если удовлетворяются три условия: первое условие предназначено для решения о жесткости границы, а также для определения большого блока. Предлагаемый фильтр может быть применен, когда ширина или высота блока, которая перпендикулярно пересекает кромку блока, не меньше 8 в области отсчетов цветностной составляющей. Второе и третье условия являются, в основном, такими же, как для решения о деблокировании яркостной составляющей в стандарте кодирования HEVC, и представляют собой решение о включении/выключении фильтра и решение о сильном фильтре, соответственно.
Для первого решения, жесткость границы (boundary strength (bS)) модифицируют для фильтрации цветностной составляющей, и указанные условия проверяют последовательно. Если какое-либо условие удовлетворяется, тогда проверку остальных условий с более низкими уровнями приоритета пропускают.
Деблокирование цветностной составляющей осуществляется, когда жесткость bS равна 2, или когда жесткость bS равна 1, если обнаружена граница большого блока.
Второе и третье условия являются, в основном, такими же, как решение о сильном фильтре для яркостной составляющей в стандарте кодирования HEVC, и определены следующим образом.
Во втором условии:
Параметр d определяют, как при деблокировании яркостной составляющей в стандарте кодирования HEVC.
Второе условие будет ИСТИННЫМ (TRUE), когда d меньше β.
В третьем условии параметр StrongFilterCondition определяют следующим образом:
dpq определяют, как в стандарте кодирования HEVC.
sp3 = Abs( p3 − p0 ), определяют, как в стандарте кодирования HEVC
sq3 = Abs( q0 − q3 ), определяют, как в стандарте кодирования HEVC
Как и в стандарте кодирования HEVC, StrongFilterCondition = (dpq меньше ( β >> 2 ), sp3 + sq3 меньше ( β >> 3 ), и Abs( p0 − q0 ) меньше ( 5 * tC + 1 ) >> 1)
2.4.6 Сильный деблокирующий фильтр для цветностной составляющей
Далее определен сильный деблокирующий фильтр для цветностной составляющей:
p2′= (3*p3+2*p2+p1+p0+q0+4) >> 3
p1′= (2*p3+p2+2*p1+p0+q0+q1+4) >> 3
p0′= (p3+p2+p1+2*p0+q0+q1+q2+4) >> 3
Предлагаемый фильтр цветностной составляющей осуществляет деблокирование на сетке отсчетов цветностной составляющей 4x4.
2.4.7 Усечение в зависимости от позиции
Усечение tcPD в зависимости от позиции применяют к выходным отсчетам процедуры фильтрации яркостной составляющей, использующей сильные и длинные фильтры, модифицирующие 7, 5 и 3 отсчетов у границы. В предположении распределения погрешности квантования, предлагается увеличить значение усечения для отсчетов, которые, как ожидается, имеют более высокие шумы квантования, вследствие чего ожидается, что для этих отсчетов значения реконструированных отсчетов будут сильнее отклоняться от истинных значений отсчетов.
Для каждой из границ P или Q, фильтрованной с применением асимметричного фильтра, в зависимости от результата процедуры принятия решения в разделе 2.4.2, таблицу для зависимых от позиции пороговых значений выбирают из двух таблиц (например, таблицы Tc7 и Tc3, приведенные ниже), вводимых в декодирующее устройство в качестве дополнительной информации:
Tc7 = { 6, 5, 4, 3, 2, 1, 1}; Tc3 = { 6, 4, 2 };
tcPD = (Sp == 3) ? Tc3 : Tc7;
tcQD = (Sq == 3) ? Tc3 : Tc7;
Для границ P или Q, фильтрованных с применением короткого симметричного фильтра, используют меньшую зависимую от позиции пороговое значение:
Tc3 = { 3, 2, 1 };
После определения порогового значения выполняют усечение фильтрованных значений отсчетов p’i и q’i в соответствии с значениями усечения tcP и tcQ:
p’’i = Clip3(p’i + tcPi, p’i – tcPi, p’i );
q’’j = Clip3(q’j + tcQj, q’j – tcQ j, q’j );
где p’i и q’i представляют собой фильтрованные значения отсчетов, p’’i и q’’j представляют собой выходные значения отсчетов после усечения, и tcPi tcPi представляют собой пороговые значения усечения, для параметра VVC tc и параметров tcPD and tcQD. Функция Clip3 является функцией усечения, как это специфицировано в стандарте кодирования VVC.
2.4.8 Регулирование деблокирования субблоков
Для того чтобы позволить дружественное параллельное деблокирование с использованием и длинных фильтров, и деблокирования субблоков, длинные фильтры ограничены модификацией самое большее 5 отсчетов на стороне, использующей деблокирование субблоков (AFFINE или ATMVP или DMVR), как показано в разделе управления яркостной составляющей для длинных фильтров. В дополнение к этому, деблокирование субблоков регулируют таким образом, чтобы модификация границ субблоков на сетке 8x8 и поблизости от границы единицы CU или неявной единицы TU была ограничена модификацией самое большее двух отсчетов с каждой стороны.
Последующее применяется к границам субблоков, не совмещенным с границей единицы.
If (mode block Q == SUBBLOCKMODE && edge !=0) {
if (!(implicitTU && (edge == (64/4))))
if (edge == 2 || edge == (orthogonalLength - 2) || edge == (56/4) || edge == (72/4))
Sp = Sq = 2;
else
Sp = Sq = 3;
else
Sp = Sq = bSideQisLargeBlk ? 5:3
}
Когда кромка с координатой 0 соответствует границе единицы CU, кромка с координатой 2 или с координатой orthogonalLength-2 соответствует границе субблока на расстоянии 8 отсчетов от границы единицы CU и т.д. Здесь неявная единица TU является истинной (true), если используется неявное разбиение на единицы TU.
2.5 Нелинейный фильтр с адаптивным смещением (SAO)
Входными данными для фильтра SAO являются реконструированные отсчеты после фильтра DB. Концепция фильтрации SAO состоит в уменьшении среднего значения искажений отсчетов в некоторой области путем сначала классификации отсчетов в этой области по нескольким категориям с применением выбранного классификатора, получения значения смещения для каждой категории и затем добавления значения смещения к каждому отсчету в соответствующей категории, где индекс классификатора и значения смещений в рассматриваемой области кодируют в потоке битов данных. В стандартах кодирования HEVC и VVC, область (единицу для сигнализации параметров фильтрации SAO) определяют равной единице CTU.
В стандарте кодирования HEVC приняты два типа фильтров SAO, которые могут удовлетворять требованиям низкой сложности. Этими двумя типами являются фильтры со смещением края (кромки) (edge offset (EO)) и фильтры со смещением полосы (band offset (BO)), более подробно обсуждаемые ниже. Индекс типа фильтра SAO кодируют (он находится в пределах [0, 2]). Для смещения EO, классификация отсчетов основана на сравнении между текущими отсчетами и соседними отсчетами в соответствии с одномерными (1-D) направленными структурами: горизонтальной, вертикальной, диагональной 135° и диагональной 45°.
На Фиг. 8 показаны четыре одномерных (1-D) направленных структуры для классификации отсчетов со смещением EO: горизонтальная (EO класс = 0), вертикальная (EO класс = 1), диагональная 135° (EO класс = 2) и диагональная 45° (EO класс = 3)
Для любого рассматриваемого класса EO каждый отсчет внутри блока CTB классифицируют по пяти категориям. Значение текущего отсчета, обозначенное как “c”, сравнивают с двумя соседями в соответствии с выбранной одномерной (1-D) структурой. Правила классификации для каждого отсчета суммированы в Табл. I. Категории 1 и 4 ассоциированы с локальным минимумом и с локальным пиком вдоль выбранной одномерной (1-D) структуры, соответственно. Категории 2 и 3 ассоциированы с вогнутым и выпуклым углами вдоль выбранной одномерной (1-D) структуры, соответственно. Если текущий отсчет не принадлежит категориям EO 1–4, тогда он принадлежит категории 0 и фильтрация SAO не применяется.
Таблица 3: Правила классификации отсчетов для смещения кромки (Edge Offset)
Категория Условие
1 c<a и c<b
2 ( c < a && c==b) ||(c == a && c < b)
3 ( c > a && c==b) ||(c == a && c > b)
4 c > a && c > b
5 Ничего из приведенного выше
2.6 Адаптивный контурный фильтр на основе геометрического преобразования
Входными данными фильтра DB являются реконструированные отсчеты после фильтра DB и фильтра SAO. Классификация отсчетов и процедура фильтрации основаны на реконструированных отсчетах после фильтра DB и фильтра SAO.
В некоторых вариантах, применяется адаптивный контурный фильтр на основе геометрического преобразования (GALF) с адаптацией этого фильтра на блочной основе. Для яркостной составляющей, выбирают один из 25 фильтров для каждого блока размером 2×2 на основе направления и активности локальных градиентов.
2.6.1 Форма фильтра
В некоторых вариантах, для яркостной составляющей могут быть выбраны до трех форм ромбообразных фильтров (как показано на Фиг. 9). На уровне изображения передают в виде сигнализации индекс, чтобы обозначить форму фильтра, используемого для яркостной составляющей. Каждый квадрат представляет отсчет, и Ci (i равно 0~6 (левый фильтр), 0~12 (средний фильтр), 0~20 (правый фильтр)) обозначает коэффициент, который должен быть применен к этому отсчету. Для цветностной составляющей в изображении всегда используется фильтр в форме ромба размером 5×5.
2.6.1.1 Классификация блоков
Блоки размером разбивают по категориям, относя каждый блок к одному из 25 классов. Индекс C классификации определяют на основе его направленности и квантованного значения активности , следующим образом:
Для вычисления параметров и , сначала вычисляют градиенты в горизонтальном, вертикальном и двух диагональных направлениях с использованием одномерного 1-D оператора Лапласа:
Индексы и относятся к координатам верхнего левого отсчета в блоке размером и обозначает реконструированный отсчет, находящийся в точке с координатами .
Затем максимальное и минимальное значения градиентов в горизонтальном и вертикальном направлениях устанавливают как:
и максимальное и минимальное значения градиентов в двух диагональных направлениях устанавливают как:
Для определения значения направленности , эти значения сравнивают одни с другими и с двумя пороговыми значениями и :
Этап 1. Если оба неравенства и являются истинными (true), устанавливают равной .
Этап 2. Если , переходите к Этапу 3; в противном случае переходите к Этапу 4.
Этап 3. Если , устанавливают равной ; в противном случае устанавливают равной .
Этап 4. Если , устанавливают равной ; в противном случае устанавливают равной .
Значение активности вычисляют как:
далее параметр квантуют в диапазон от 0 до 4, включительно, и квантованное значение обозначают как .
Для обеих цветностных составляющих изображения никакие способы классификации не применяются, например, единственный набор коэффициентов фильтрации ALF применяется для каждой цветностной составляющей.
2.6.1.2 Геометрические преобразования коэффициентов фильтрации
На Фиг. 10 показаны относительные координаты для опоры имеющего форму ромба фильтра размером 5×5: Левый: Диагональный, Центр: Вертикальный переворот, Правый: Поворот.
Прежде фильтрации каждого блока размером 2×2, геометрические преобразования, такие как поворот, или диагональный и вертикальный переворот (опрокидывание), применяются к коэффициентам фильтрации , которые ассоциированы с координатами (k, l), в зависимости от значений градиентов, вычисленных для соответствующего блока. Это эквивалентно применению таких преобразований к отсчетам в области опоры фильтра. Идея состоит в том, чтобы сделать разные блоки, к которым применяется фильтрация ALF, более аналогичными путем совмещения их направленностей.
Введены три геометрических преобразования, включая диагональное преобразование, вертикальный переворот и поворот:
где обозначает размер фильтра и координаты коэффициентов, так что позиция находится в верхнем левом углу, и позиция находится в нижнем правом углу. Эти преобразования применяются к коэффициентам фильтрации f (k, l) в зависимости от значений градиента, вычисленных для каждого блока. Соотношения между этим преобразованием и четырьмя градиентами в четырех направлениях суммированы в Табл. 4. На Фиг. 9 показаны преобразованные коэффициенты для каждой позиции на основе ромба размером 5x5.
Таблица 4: Отображение градиента, вычисленного для одного блока, и преобразований
Значения градиентов Преобразование
gd2 < gd1 и gh < gv Без преобразования
gd2 < gd1 и gv < gh Диагональ
gd1 < gd2 и gh < gv Вертикальный переворот
gd1 < gd2 и gv < gh Поворот
2.6.1.3 Передача сигнализации с параметрами фильтра
В некоторых вариантах, параметры фильтра GALF передают в виде сигнализации для первой единицы CTU, например, после заголовка среза и прежде параметров фильтра SAO для первой единицы CTU. Можно передавать в виде сигнализации до 25 наборов коэффициентов фильтрации для яркостной составляющей. Для уменьшения числа битов издержек, коэффициенты фильтрации разных классов можно объединять. Кроме того, сохраняют коэффициенты фильтра GALF для опорных изображений, так что они могут быть использованы повторно в качестве коэффициентов фильтра GALF для текущего изображения. Текущее устройство может выбрать использование коэффициентов GALF, сохраняемых для опорных изображений, и обойти передачу сигнализации с коэффициентами фильтра GALF. В этом случае передают в виде сигнализации индекс, указывающий одно из опорных изображений, так что текущее изображение наследует коэффициенты фильтра GALF от указанного индексом опорного изображения.
Для поддержки временного прогнозирования фильтра GALF поддерживают список кандидатов для групп фильтров GALF. В начале декодирования новой последовательности список кандидатов пуст. После декодирования одного изображения к этому списку кандидатов может быть добавлена соответствующая группа фильтров. Когда размер этого списка кандидатов достигнет максимально допустимого значения (например, 6), новую группу фильтров записывают поверх самой старой группы фильтров в порядке декодирования, и иными словами, для обновления списка кандидатов применяется правило «первый записан-первый вычеркнут» (first-in-first-out (FIFO)). Во избежание дублирования группа может быть добавлена только тогда, когда соответствующее изображение не использует временное прогнозирование фильтров GALF. Для поддержки временной масштабируемости имеются несколько списков кандидатов для групп фильтров, и каждый список кандидатов ассоциирован с временным слоем. Более конкретно, каждый массив, назначенный индексом временного слоя (TempIdx), может содержать набор фильтров для ранее декодированных изображений с равным или меньшим индексом TempIdx. Например, k-ый массив назначают для ассоциирования с индексом TempIdx равным k, и этот массив содержит только группы фильтров с индексом TempIdx не больше k. После кодирования некоторого изображения группы фильтров, ассоциированных с этим изображением, будут использованы для обновления массивов, ассоциированных с равным или большим индексом TempIdx.
Временное прогнозирование коэффициентов фильтров GALF используется для кадров с межкадровым прогнозированием с целью минимизации сигнализационных издержек. Для кадров с внутрикадровым прогнозированием временное прогнозирование недоступно, а каждому классу назначают 16 фиксированных фильтров. Для индикации использования фиксированного фильтра, передают в виде сигнализации флаг для каждого класса и, если требуется, индекс для каждого выбранного фиксированного фильтра. Даже когда для некоего рассматриваемого класса выбран фиксированный фильтр, коэффициенты для адаптивного фильтра могут быть переданы для этого класса, в каком случае коэффициенты фильтра, которые могут быть применены к реконструированному изображению, представляют собой сумму обоих групп коэффициентов.
Процедурой фильтрации для яркостной составляющей можно управлять на уровне единиц CU. В виде сигнализации передают флаг для индикации, применяется ли фильтр GALF к яркостной составляющей единицы CU. Для цветностной составляющей, применяется ли фильтр GALF или нет, обозначают только на уровне изображения.
2.6.1.4 Процедура фильтрации
На стороне декодирующего устройства, когда для какого-либо блока активизирован фильтр GALF, каждый отсчет в этом блоке фильтруют, результатом чего является значение отсчета, как показано ниже, где L обозначает длину фильтра, представляет коэффициент фильтрации, и обозначает декодированные коэффициенты фильтрации.
(10)
На Фиг. 11 показан пример относительных координат, используемых для опоры фильтра в форме ромба размером 5x5 в предположении, что координаты (i, j) текущего отсчета равны (0, 0). Отсчеты с разными координатами, заполненные одним и тем же цветом, умножают на одинаковые коэффициенты фильтрации.
2.7 Адаптивный контурный фильтр на основе геометрического преобразования (GALF)
2.7.1 Пример фильтра GALF
В некоторых вариантах, процедура фильтрации в адаптивном контурном фильтре осуществляется следующим образом:
, (11)
где отсчеты являются входными отсчетами, обозначает фильтрованный выходной отсчет (например, результат фильтрации), и обозначает коэффициенты фильтрации. На практике, в документе VTM4.0 это реализовано с использованием целочисленной арифметики для прецизионных вычислений с фиксированной запятой:
, (12)
где L обозначает длину фильтра, и представляют собой коэффициенты фильтрации с точностью с фиксированной запятой.
Сегодняшняя структура фильтра GALF в стандарте кодирования VVC имеет следующие основные изменения:
(1) Исключена адаптивная форма фильтра. Для яркостной составляющей допускается только форма фильтра 7x7, и для цветностной составляющей допускается только форма фильтра 5x5.
(2) Передача параметров фильтра ALF в виде сигнализации исключена с уровня среза/изображения и передана на уровень единиц CTU.
(3) Вычисления индекса класса осуществляется на уровне блоков 4x4 вместо блоков 2x2. В дополнение к этому, в некоторых вариантах, для классификации при фильтрации ALF используется способ вычисления субдискретизированного оператора Лапласа. Более конкретно, нет необходимости вычислять горизонтальный/вертикальный/диагональный 45°/диагональный 135° градиенты для каждого отсчета в одном блоке. Вместо этого используется субдискретизация 1:2.
На Фиг. 12A-12D показано вычисление субдискретизированного оператора Лапласа для CE2.6.2. Фиг. 12A иллюстрирует субдискретизированные позиции для вертикального градиента, Фиг. 12B иллюстрирует субдискретизированные позиции для горизонтального градиента, Фиг. 12C иллюстрирует субдискретизированные позиции для диагонального градиента, и Фиг. 12D иллюстрирует субдискретизированные позиции для диагонального градиента.
2.8 Нелинейный фильтр ALF
2.8.1 Переформулирование фильтрации
Уравнение (11) может быть переформулировано, без ущерба для эффективности кодирования, в виде следующего выражения:
, (13)
где обозначает те же коэффициенты фильтрации, как в уравнении (11) [за исключение того, что коэффициент в уравнении (13) равен 1, тогда как в уравнении (11) он равен ].
Используя эту приведенную выше формулу (13) фильтрации, стандарт кодирования VVC вводит нелинейность, чтобы сделать фильтр ALF более эффективным с использованием простой функции усечения для уменьшения отрицательного влияния значений соседних отсчетов (, когда они слишком сильно отличаются от значенийы текущего отсчета (), фильтруемого в текущий момент.
Более конкретно, фильтр ALF модифицирован следующим образом:
, (14)
где представляет собой функцию усечения, и обозначает параметры усечения, зависящие от коэффициентов фильтрации в соответствующих точках . Кодирующее устройство осуществляет оптимизацию для поиска наилучшего коэффициента .
В некоторых вариантах, параметры усечения специфицируют для каждого фильтра ALF, передавая в виде сигнализации по одному значению усечения на каждый коэффициент фильтрации. Это означает, что в потоке битов данных можно передавать до 12 значений усечения на каждый фильтр яркостной составляющей и до 6 значений усечения на каждый фильтр цветностной составляющей.
Для ограничения затрат на сигнализацию и сложности кодирующего устройства используют только 4 фиксированных значения, которые являются одинаковыми для срезов с межкадровым (INTER) и внутрикадровым (INTRA) прогнозированием.
Поскольку дисперсия локальных разностей зачастую выше для яркостной составляющей, чем для цветностной составляющей, для фильтров яркостной составляющей и для фильтров цветностной составляющей применяют две разных группы. Для каждой группы также введено максимальное значение отсчета (здесь 1024 для битовой глубины 10 бит), так что можно отменить активизацию усечения, если в нем нет необходимости.
Группы значений усечения, используемых в некоторых вариантах, приведены в Табл. 5. Указанные 4 значения были выбраны путем грубо равного разбиения, в логарифмической области, полного диапазона значений отсчетов (кодированного посредством 10 бит) для яркостной составляющей и диапазона от 4 до 1024 для цветностной составляющей.
Более точно, таблица значений усечения для яркостной составляющей была получена по следующей формуле:
AlfClipL , при M=210 и N=4. (15)
Аналогично, таблицы значений усечения для цветностных составляющих получают по следующей формуле:
AlfClipC , при M=210, N=4 и A=4. (16)
Таблица 5: Разрешенные значения усечения
Группа плиток с внутрикадровым/межкадровым прогнозированием
Яркостная составляющая { 1024, 181, 32, 6 }
Цветностная составляющая { 1024, 161, 25, 4 }
Выбранные значения усечения кодируют в синтаксическом элементе “alf_data” с использованием схемы кодирования Голомба, соответствующей индексу значения усечения в приведенной выше Табл. 5. Эта схема кодирования является такой же, как схема кодирования для индекса фильтра.
2.9 Виртуальная граница
В аппаратуре и встроенном программном обеспечении обработка на основе изображений практически неприемлема из-за предъявляемых ею высоких требований к буферу изображений. Использование выполненных в кристалле интегральной схемы буферов изображения является очень дорогостоящим, а использование внекристальных буферов изображения значительно увеличивает число обращений к внешней памяти, потребляемую мощность и задержку доступа к данным. Поэтому в реальных изделиях фильтры DF, SAO и ALF должны быть изменены от декодирования на основе изображений к декодированию на основе единиц LCU. Когда обработка на основе единиц LCU используется для фильтров DF, SAO и ALF, вся процедура декодирования может быть осуществлена единица LCU за единицей LCU в порядке растрового сканирования с конвейеризацией единиц LCU для параллельной обработки нескольких единиц LCU. В этом случае для фильтров DF, SAO и ALF нужны буферы линий, поскольку для обработки одной строки единиц LCU требуются пиксели из расположенной сверху строки единиц LCU. Если используются внекристальные буферы линий (например, DRAM), ширина полосы частот внешнего запоминающего устройства и потребляемая им мощность будут увеличены; если используются буферы линий на кристалле интегральной схемы (например, SRAM), площадь кристалла интегральной схемы будет увеличена. Поэтому, хотя буферы линий уже намного меньше буферов изображений, по-прежнему желательно уменьшить буферы линий.
В некоторых вариантах, как показано на Фиг. 13, общее требуемое число буферов линий равно 11.25 для яркостной составляющей. Требования к буферам линий объясняются следующим образом: Деблокирование горизонтальной кромки, накладывающейся на кромку единицы CTU, не может быть осуществлено, поскольку решения и фильтрация требуют линий K, L, M, M из первой единицы CTU и линий O, P из нижней единицы CTU. Поэтому деблокирование горизонтальных кромок, накладывающихся на границу единицы CTU, откладывается до тех пор, пока не придет нижняя единица CTU. Поэтому реконструированные отсчеты яркостной составляющей для линий K, L, M, N должны быть сохранены в буфере линий (4 линии). Затем может быть выполнена фильтрация SAO для линий с A по J. Линия J может быть фильтрована посредством фильтра SAO, поскольку деблокирование не изменяет отсчеты в линии K. Для фильтрации линии K фильтром SAO в буфере линий (размером 0.25 линии яркостной составляющей) сохраняют только решение о классификации смещения кромки. Фильтрация в фильтре ALF может быть осуществлена только для линий A-F. Как показано на Фиг. 13, классификация при фильтрации ALF осуществляется для каждого блока размером 4 x 4. Каждая классификация блоков размером 4 x 4 нуждается в окне активности размером 8 x 8, что в свою очередь нуждается в окне размером 9 x 9 для вычисления одномерного (1d) оператора Лапласа для определения градиента.
Поэтому для классификации блоков применительно к блоку размером 4 x 4, накладывающемуся на линии G, H, I, J, необходимы фильтрованные в фильтре SAO отсчеты ниже виртуальной границы. В дополнение к этому для классификации при фильтрации ALF необходимы отсчеты, фильтрованные посредством фильтра SAO, из линии D, E, F. Более того, для фильтрации 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.
Аналогично, требования к буферу линий для цветностной составляющей иллюстрированы на Фиг. 14. Эти требования к буферу линий для цветностной составляющей оцениваются на уровне 6.25 линий.
Для исключения требований к буферу линий для фильтрации SAO и фильтрации ALF, в самой последней версии стандарта кодирования VVC введена концепция виртуальной границы (virtual boundary (VB)). Как показано на Фиг. 13, границы VB представляют собой горизонтальные границы единиц LCU, смещенные вверх на N пикселей. Для каждой единицы LCU, фильтры SAO и ALF могут обрабатывать пиксели выше границы VB прежде, чем поступит более низкая единица LCU, но не могут обрабатывать пиксели ниже этой границы VB, пока не поступит эта низкая единица LCU, что обусловлено фильтрацией DF. С учетом стоимости аппаратной реализации, пространство между предлагаемой границей VB и горизонтальной границей единицы LCU установлено равным четырем пикселям для яркостной составляющей (например, N=4 на Фиг. 13) и два пикселя для цветностной составляющей (например, N=2 на Фиг. 9).
2.9.1 Модифицированная классификация блоков для ALF, когда размер N границы VB равен 4
На Фиг. 15A-15B показана модифицированная классификация блоков для случая, когда виртуальная граница находится на 4 линии выше границы CTU (N = 4). Как показано на Фиг. 15A, для блока размером 4 x 4, начиная с линии G, классификация блоков использует только линии с E по J. Однако для вычисления градиента оператора Лапласа для отсчетов, принадлежащих линии J, требуется использование еще одной линии ниже (линия K). Поэтому линию K заполняют с использованием линии J.
Аналогично, как показано на Фиг. 15B, для блока размером 4 x 4, начиная с линии K, классификация блоков использует только линии с K по P. Однако для вычисления градиента оператора Лапласа для отсчетов, принадлежащих линии K, требуется еще одна линия сверху (линия J). Поэтому линию J заполняют с использованием линии K.
2.9.2 Двустороннее заполнение для отсчетов через виртуальные границы
Как показано на Фиг. 16A-16C, для фильтрации отсчетов яркостной составляющей, принадлежащих линиям, близким к виртуальным границам, используется усеченная версия фильтров. Как показано на Фиг. 16A в качестве примера, при фильтрации линии M, как показано на Фиг. 13, например, центральный отсчет опорного ромба размером 7x7 находится в линии M. Для этого требуется получить доступ к одной линии выше границы VB (обозначена жирная линия). В таком случае, отсчеты, расположенные выше границы VB, копируют от правого нижнего отсчета ниже границы VB, например, отсчет P0 в сплошной линии, копируется в позицию сверху, очерченную штриховой линией. Симметрично, отсчет P3 в сплошной линии также копируется в очерченную штриховой линией позицию справа внизу, даже если отсчет для этой позиции доступен. Эти скопированные отсчеты используются только в процессе фильтрации яркостной составляющей.
Способ заполнения, используемый для виртуальных границ при фильтрации ALF, может быть обозначен как «Двустороннее заполнение» (‘Two-side Padding’), где, если один отсчет, расположенный в точке (i, j) (например, отсчет P0A, очерченный штриховой линией, на Фиг. 16B) заполняют, тогда соответствующий отсчет, расположенный в точке (m, n) (например, отсчет P3B, очерченный штриховой линией, на Фиг. 16B), использующий совместно с другими один и тот же коэффициент фильтрации, также заполняют, даже если соответствующий отсчет доступен, как показано на Фиг. 16A-16C и Фиг. 17A-17B. На Фиг. 16A-16C, где показана опора фильтра в форме ромба размером 7x7, центр этого фильтра находится в текущем отсчете, который нужно фильтровать в этот момент. На Фиг. 16A показана одна требуемая линия выше/ниже границы VB, каковую линию нужно заполнить. На Фиг. 16B показаны 2 требуемые линии выше/ниже границы VB, какие линии нужно заполнить. На Фиг. 16C показаны 3 требуемые линии выше/ниже границы VB, какие линии нужно заполнить.
Аналогично, как показано на Фиг. 17A-17B, указанный способ двустороннего заполнения также используется для фильтрации ALF цветностной составляющей. На Фиг. 17A-17B показана модифицированная фильтрация ALF цветностной составляющей на виртуальной границе (опора фильтра в форме ромба размером 5x5, центр этого фильтра находится в текущем отсчете, который нужно фильтровать в этот момент). На Фиг. 17A показана 1 требуемая строка выше/ниже границы VB, какую строку нужно заполнить. На Фиг. 17B показаны 2 требуемые строки выше/ниже границы VB, какие строки нужно заполнить.
2.9.3 Альтернативный способ реализации Двустороннего заполнения, когда нелинейная фильтрация ALF не активизирована
Когда нелинейная фильтрация ALF не активизирована для блока CTB, например, параметры усечения в уравнении (14) равны (1<< Bitdepth), процедура заполнения может быть заменена путем модификации коэффициентов фильтрации (также известной как фильтрация ALF с модифицированными коэффициентами (modified-coeff based ALF, MALF)). Например, при фильтрации отсчетов в линии L/I, коэффициент c5 фильтрации модифицируют, превращая его в c5’, в этом случае нет необходимости копировать отсчеты яркостной составляющей, а именно – отсчет P0A в сплошной рамке в отсчет P0A в штриховой рамке и отсчет P3B в сплошной рамке в отсчет P3B в штриховой рамке, как показано на Фиг. 18A. В этом случае, двустороннее заполнение и фильтрация MALF будут давать одинаковый результат, в предположении, что подлежащий фильтрации текущий отсчет расположен в точке (x, y).
(17)
поскольку K(d, b) = d и = из-за заполнения.
Однако когда нелинейная фильтрация ALF активизирована, фильтрация MALF и двустороннее заполнение могут давать разные результаты фильтрации, поскольку нелинейные параметры ассоциированы с каждым коэффициентом, например, для коэффициентов c5 и c1 фильтрации, параметры усечения являются различными. Поэтому,
(18)
поскольку K(d, b) != d, даже = вследствие заполнения.
2.10 Спецификации фильтрации ALF
Вновь добавленные части текста обозначены жирным курсивом с подчеркиванием. Удаляемые части обозначены с использованием [[]].
7.3.2.4 Синтаксис набора параметров изображения RBSP
pic_parameter_set_rbsp( ) { Дескриптор
pps_pic_parameter_set_id ue(v)
pps_seq_parameter_set_id ue(v)
output_flag_present_flag u(1)
single_tile_in_pic_flag u(1)
if( !single_tile_in_pic_flag ) {
uniform_tile_spacing_flag u(1)
if( uniform_tile_spacing_flag ) {
tile_cols_width_minus1 ue(v)
tile_rows_height_minus1 ue(v)
} else {
num_tile_columns_minus1 ue(v)
num_tile_rows_minus1 ue(v)
for( i = 0; i < num_tile_columns_minus1; i++ )
tile_column_width_minus1[ i ] ue(v)
for( i = 0; i < num_tile_rows_minus1; i++ )
tile_row_height_minus1[ i ] ue(v)
}
brick_splitting_present_flag u(1)
for( i = 0; brick_splitting_present_flag && i < NumTilesInPic; i++ ) {
brick_split_flag[ i ] u(1)
if( brick_split_flag[ i ] ) {
uniform_brick_spacing_flag[ i ] u(1)
if( uniform_brick_spacing_flag[ i ] )
brick_height_minus1[ i ] ue(v)
else {
num_brick_rows_minus1[ i ] ue(v)
for( j = 0; j < num_brick_rows_minus1[ i ]; j++ )
brick_row_height_minus1[ i ][ j ] ue(v)
}
}
}
single_brick_per_slice_flag u(1)
if( !single_brick_per_slice_flag )
rect_slice_flag u(1)
if( rect_slice_flag && !single_brick_per_slice_flag ) {
num_slices_in_pic_minus1 ue(v)
for( i = 0; i <= num_slices_in_pic_minus1; i++ ) {
if( i > 0 )
top_left_brick_idx[ i ] u(v)
bottom_right_brick_idx_delta[ i ] u(v)
}
}
loop_filter_across_bricks_enabled_flag u(1)
if( loop_filter_across_bricks_enabled_flag )
loop_filter_across_slices_enabled_flag u(1)
}
if( rect_slice_flag ) {
signalled_slice_id_flag u(1)
if( signalled_slice_id_flag ) {
signalled_slice_id_length_minus1 ue(v)
for( i = 0; i <= num_slices_in_pic_minus1; i++ )
slice_id[ i ] u(v)
}
}
entropy_coding_sync_enabled_flag u(1)
cabac_init_present_flag u(1)
for( i = 0; i < 2; i++ )
num_ref_idx_default_active_minus1[ i ] ue(v)
rpl1_idx_present_flag u(1)
init_qp_minus26 se(v)
transform_skip_enabled_flag u(1)
if( transform_skip_enabled_flag )
log2_transform_skip_max_size_minus2 ue(v)
cu_qp_delta_enabled_flag u(1)
if( cu_qp_delta_enabled_flag )
cu_qp_delta_subdiv ue(v)
pps_cb_qp_offset se(v)
pps_cr_qp_offset se(v)
pps_joint_cbcr_qp_offset se(v)
pps_slice_chroma_qp_offsets_present_flag u(1)
weighted_pred_flag u(1)
weighted_bipred_flag u(1)
deblocking_filter_control_present_flag u(1)
if( deblocking_filter_control_present_flag ) {
deblocking_filter_override_enabled_flag u(1)
pps_deblocking_filter_disabled_flag u(1)
if( !pps_deblocking_filter_disabled_flag ) {
pps_beta_offset_div2 se(v)
pps_tc_offset_div2 se(v)
}
}
pps_loop_filter_across_virtual_boundaries_disabled_flag u(1)
if( pps_loop_filter_across_virtual_boundaries_disabled_flag ) {
pps_num_ver_virtual_boundaries u(2)
for( i = 0; i < pps_num_ver_virtual_boundaries; i++ )
pps_virtual_boundaries_pos_x[ i ] u(v)
pps_num_hor_virtual_boundaries u(2)
for( i = 0; i < pps_num_hor_virtual_boundaries; i++ )
pps_virtual_boundaries_pos_y[ i ] u(v)
}
pps_extension_flag u(1)
if( pps_extension_flag )
while( more_rbsp_data( ) )
pps_extension_data_flag u(1)
rbsp_trailing_bits( )
}
Флаг loop_filter_across_bricks_enabled_flag равный 1 специфицирует, что операции внутриконтурной фильтрации могут быть осуществлены через границы кирпичей в изображении в соответствии с набором PPS. Флаг loop_filter_across_bricks_enabled_flag равный 0 специфицирует, что операции внутриконтурной фильтрации не осуществляются через границы кирпичей в изображении в соответствии с набором PPS. Совокупность этих операций внутриконтурной фильтрации содержит операции деблокирующей фильтрации, нелинейной фильтрации с адаптивным смещением и адаптивной контурной фильтрации. Значение флага loop_filter_across_bricks_enabled_flag, когда этот флаг не присутствует, считают равным 1.
Флаг loop_filter_across_slices_enabled_flag равный 1 специфицирует, что операции внутриконтурной фильтрации могут быть осуществлены через границы срезов в изображении в соответствии с набором PPS. Флаг loop_filter_across_slice_enabled_flag равный 0 специфицирует, что операции внутриконтурной фильтрации не осуществляются через границы срезов в изображении в соответствии с набором PPS. Совокупность этих операций внутриконтурной фильтрации содержит операции деблокирующей фильтрации, нелинейной фильтрации с адаптивным смещением и адаптивной контурной фильтрации. Значение флага loop_filter_across_slices_enabled_flag, когда этот флаг не присутствует, считают равным 0.
Флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равный 1 специфицирует, что операции внутриконтурной фильтрации могут быть осуществлены через виртуальные границы в изображении в соответствии с набором PPS. Флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равный 0 специфицирует, что такая отмена операций внутриконтурной фильтрации не применяется в изображениях в соответствии с набором PPS. Совокупность этих операций внутриконтурной фильтрации содержит операции деблокирующей фильтрации, нелинейной фильтрации с адаптивным смещением и адаптивной контурной фильтрации. Значение флага pps_loop_filter_across_virtual_boundaries_disabled_flag, когда этот флаг не присутствует, считают равным 0.
Параметр pps_num_ver_virtual_boundaries специфицирует число синтаксических элементов pps_virtual_boundaries_pos_x[ i ], присутствующих в наборе PPS. Значение параметра pps_num_ver_virtual_boundaries, когда этот параметр не присутствует, считают равным 0.
8.8.5.2 Процедура фильтрации блоков дерева кодирования для отсчетов яркостной составляющей
Входными данными для этой процедуры являются:
- массив recPictureL реконструированных отсчетов яркостной составляющей изображения прежде процедуры адаптивной контурной фильтрации,
- массив alfPictureL фильтрованных реконструированных отсчетов яркостной составляющей изображения,
- позиция ( xCtb, yCtb ) яркостной составляющей, специфицирующая верхний левый отсчет текущего блока дерева кодирования яркостной составляющей относительно верхнего левого отсчета текущего изображения.
Выходными данными этой процедуры является массив alfPictureL модифицированных фильтрованных реконструированных отсчетов яркостной составляющей изображения.
Процедуру формирования индекса фильтра из статьи 8.8.5.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 ] фильтрации яркостной составляющей и массив значений c[ j ] усечения яркостной составляющей, соответствующих фильтру, специфицированному индексом filtIdx[ x ][ y ], формируют следующим образом при j = 0..11:
- Если AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ] меньше 16, применяется следующее:
i = AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ] (8-1172)
f[ j ] = AlfFixFiltCoeff[ AlfClassToFiltMap[ i ][ filtidx ] ][ j ] (8-1173)
c[ j ] = 2BitdepthY (8-1174)
- В противном случае (AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ] не меньше 16, применяется следующее:
i = slice_alf_aps_id_luma[ AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ] − 16 ] (8-1175)
f[ j ] = AlfCoeffL[ i ][ filtIdx[ x ][ y ] ][ j ] (8-1176)
c[ j ] = AlfClipL[ i ][ filtIdx[ x ][ y ] ][ j ] (8-1177)
- Коэффициенты фильтрации и индекс idx значений усечения яркостной составляющей определяют в зависимости от индекса transposeIdx[ x ][ y ] следующим образом:
- Если индекс transposeIndex[ x ][ y ] равен 1, применяется следующее:
idx[ ] = { 9, 4, 10, 8, 1, 5, 11, 7, 3, 0, 2, 6 } (8-1178)
- В противном случае, если индекс transposeIndex[ x ][ y ] равен 2, применяется следующее:
idx[ ] = { 0, 3, 2, 1, 8, 7, 6, 5, 4, 9, 10, 11 } (8-1179)
- В противном случае, если индекс transposeIndex[ x ][ y ] равен 3, применяется следующее:
idx[ ] = { 9, 8, 10, 4, 3, 7, 11, 5, 1, 0, 2, 6 } (8-1180)
- В противном случае, применяется следующее:
idx[ ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 } (8-1181)
- Позиции ( hx + i, vy + j ) для каждого соответствующего отсчета ( x, y ) яркостной составляющей в пределах рассматриваемого массива recPicture отсчетов яркостной составляющей при i, j = −3..3 определяют следующим образом:
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение xCtb + x − PpsVirtualBoundariesPosX[ n ] не меньше 0 и меньше 3 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( PpsVirtualBoundariesPosX[ n ], pic_width_in_luma_samples − 1, xCtb + x + i ) (8-1182)
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosX[ n ]− xCtb − x больше 0 и меньше 4 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( 0, PpsVirtualBoundariesPosX[ n ] − 1, xCtb + x + i ) (8-1183)
- В противном случае, применяется следующее:
hx + i = Clip3( 0, pic_width_in_luma_samples − 1, xCtb + x + i ) (8-1184)
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение yCtb + y − PpsVirtualBoundariesPosY[ n ] не меньше 0 и меньше 3 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( PpsVirtualBoundariesPosY[ n ], pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1185)
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosY[ n ] − yCtb − y больше 0 и меньше 4 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( 0, PpsVirtualBoundariesPosY[ n ] − 1, yCtb + y + j ) (8-1186)
- В противном случае, применяется следующее:
vy + j = Clip3( 0, pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1187)
- Переменную applyVirtualBoundary определяют следующим образом:
- Если одно или несколько из следующих условий являются истинными (true), переменную applyVirtualBoundary устанавливают равной 0:
- Нижняя граница текущего блока дерева кодирования является нижней границей изображения.
- Нижняя граница текущего блока дерева кодирования является нижней границей кирпича и флаг loop_filter_across_bricks_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования является нижней границей среза и флаг loop_filter_across_slices_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования является одной из нижних виртуальных границ изображения и флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1.
- В противном случае, переменную applyVirtualBoundary устанавливают равной 1.
- Смещения r1, r2 и r3 реконструированных отсчетов специфицированы в Табл. 8-22 в соответствии с позицией y отсчета яркостной составляющей по горизонтали и переменной applyVirtualBoundary.
- Переменную curr определяют следующим образом:
curr = recPictureL[ hx, vy ] (8-1188)
- Переменную sum определяют следующим образом:
sum = f[ idx[ 0 ] ] * ( Clip3( −c[ idx[ 0 ] ], c[ idx[ 0 ] ], recPictureL[ hx, vy + r3 ] − curr ) + Clip3( −c[ idx[ 0 ] ], c[ idx[ 0 ] ], recPictureL[ hx, vy − r3 ] − curr ) ) +
f[ idx[ 1 ] ] * ( Clip3( −c[ idx[ 1 ] ], c[ idx[ 1 ] ], recPictureL[ hx + 1, vy + r2 ] − curr ) + Clip3( −c[ idx[ 1 ] ], c[ idx[ 1 ] ], recPictureL[ hx − 1, vy − r2 ] − curr ) ) +
f[ idx[ 2 ] ] * ( Clip3( −c[ idx[ 2 ] ], c[ idx[ 2 ] ], recPictureL[ hx, vy + r2 ] − curr ) + Clip3( −c[ idx[ 2 ] ], c[ idx[ 2 ] ], recPictureL[ hx, vy − r2 ] − curr ) ) +
f[ idx[ 3 ] ] * ( Clip3( −c[ idx[ 3 ] ], c[ idx[ 3 ] ], recPictureL[ hx − 1, vy + r2 ] − curr ) + Clip3( −c[ idx[ 3 ] ], c[ idx[ 3 ] ], recPictureL[ hx + 1, vy − r2 ] − curr ) ) +
f[ idx[ 4 ] ] * ( Clip3( −c[ idx[ 4 ] ], c[ idx[ 4 ] ], recPictureL[ hx + 2, vy + r1 ] − curr ) + Clip3( −c[ idx[ 4 ] ], c[ idx[ 4 ] ], recPictureL[ hx − 2, vy − r1 ] − curr ) ) +
f[ idx[ 5 ] ] * ( Clip3( −c[ idx[ 5 ] ], c[ idx[ 5 ] ], recPictureL[ hx + 1, vy + r1 ] − curr ) + Clip3( −c[ idx[ 5 ] ], c[ idx[ 5 ] ], recPictureL[ hx − 1, vy − r1 ] − curr ) ) +
f[ idx[ 6 ] ] * ( Clip3( −c[ idx[ 6 ] ], c[ idx[ 6 ] ], recPictureL[ hx, vy + r1 ] − curr ) + Clip3( −c[ idx[ 6 ] ], c[ idx[ 6 ] ], recPictureL[ hx, vy − r1 ] − curr ) ) + (8-1189)
f[ idx[ 7 ] ] * ( Clip3( −c[ idx[ 7 ] ], c[ idx[ 7 ] ], recPictureL[ hx − 1, vy + r1 ] − curr ) + Clip3( −c[ idx[ 7 ] ], c[ idx[ 7 ] ], recPictureL[ hx + 1, vy − r1 ] − curr ) ) +
f[ idx[ 8 ] ] * ( Clip3( −c[ idx[ 8 ] ], c[ idx[ 8 ] ], recPictureL[ hx − 2, vy + r1 ] − curr ) + Clip3( −c[ idx[ 8 ] ], c[ idx[ 8 ] ], recPictureL[ hx + 2, vy − r1 ] − curr ) ) +
f[ idx[ 9 ] ] * ( Clip3( −c[ idx[ 9 ] ], c[ idx[ 9 ] ], recPictureL[ hx + 3, vy ] − curr ) + Clip3( −c[ idx[ 9 ] ], c[ idx[ 9 ] ], recPictureL[ hx − 3, vy ] − curr ) ) +
f[ idx[ 10 ] ] * ( Clip3( −c[ idx[ 10 ] ], c[ idx[ 10 ] ], recPictureL[ hx + 2, vy ] − curr ) + Clip3( −c[ idx[ 10 ] ], c[ idx[ 10 ] ], recPictureL[ hx − 2, vy ] − curr ) ) +
f[ idx[ 11 ] ] * ( Clip3( −c[ idx[ 11 ] ], c[ idx[ 11 ] ], recPictureL[ hx + 1, vy ] − curr ) + Clip3( −c[ idx[ 11 ] ], c[ idx[ 11 ] ], recPictureL[ hx − 1, vy ] − curr ) )
sum = curr + ( ( sum + 64 ) >> 7 ) (8-1190)
- Модифицированный фильтрованный реконструированный отсчет alfPictureL[ xCtb + x ][ yCtb + y ] яркостной составляющей определяют следующим образом:
- Если флаг pcm_loop_filter_disabled_flag и флаг pcm_flag[ xCtb+ x ][ yCtb + y ] оба равны 1, применяется следующее:
alfPictureL[ xCtb + x ][ yCtb + y ] = recPictureL[ hx, vy ] (8-1191)
- В противном случае, флаг (pcm_loop_filter_disabled_flag равен 0 или флаг pcm_flag[ x ][ y ] равен 0), применяется следующее:
alfPictureL[ xCtb + x ][ yCtb + y ] = Clip3( 0, ( 1 << BitDepthY ) − 1, sum ) (8-1192)
Таблица 8-22 – Спецификации смещений r1, r2 и r3 в соответствии с позицией y отсчета яркостной составляющей по горизонтали и переменной applyVirtualBoundary
условие r1 r2 r3
( y = = CtbSizeY − 5 | | y = = CtbSizeY − 4 ) && ( applyVirtualBoundary = = 1 ) 0 0 0
( y = = CtbSizeY − 6 | | y = = CtbSizeY − 3 ) && ( applyVirtualBoundary = = 1 ) 1 1 1
( y = = CtbSizeY − 7 | | y = = CtbSizeY − 2 ) && ( applyVirtualBoundary = = 1 ) 1 2 2
В противном случае 1 2 3
8.8.5.4 Процедура фильтрации блока дерева кодирования для отсчетов цветностной составляющей
Входными данными для этой процедуры являются:
- массив recPicture реконстpуированных отсчетов цветностной составляющей изображения прежде процедуры адаптивной контурной фильтрации,
- массив alfPicture фильтрованных реконструированных отсчетов цветностной составляющей изображения,
- позиция ( xCtb, yCtb ) цветностной составляющей, специфицирующая верхний левый отсчет текущего блока дерева кодирования цветностной составляющей относительно верхнего левого отсчета текущего изображения.
Выходные данные этой процедуры представляют собой массив alfPicture модифицированных фильтрованных реконструированных отсчетов цветностной составляющей изображения.
Ширину и высоту ctbWidthC и ctbHeightC текущего блока дерева кодирования цветностной составляющей определяют следующим образом:
ctbWidthC = CtbSizeY/SubWidthC (8-1230)
ctbHeightC = CtbSizeY/SubHeightC (8-1231)
Для определения фильтрованных реконструированных отсчетов цветностной составляющей 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 определяют следующим образом:
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение xCtbC + x − PpsVirtualBoundariesPosX[ n ]/SubWidthC не меньше 0 и меньше 2 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( PpsVirtualBoundariesPosX[ n ]/SubWidthC, (8-1232)
pic_width_in_luma_samples/SubWidthC − 1, xCtbC + x + i )
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosX[ n ]/SubWidthC − xCtbC − x больше 0 и меньше 3 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( 0, PpsVirtualBoundariesPosX[ n ]/SubWidthC − 1, xCtbC + x + i ) (8-1233)
- В противном случае, применяется следующее:
hx + i = Clip3( 0, pic_width_in_luma_samples/SubWidthC − 1, xCtbC + x + i ) (8-1234)
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение yCtbC + y − PpsVirtualBoundariesPosY[ n ]/SubHeightC не меньше 0 и меньше 2 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( PpsVirtualBoundariesPosY[ n ]/SubHeightC , (8-1235)
pic_height_in_luma_samples/SubHeightC − 1, yCtbC + y + j )
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosY[ n ]/SubHeightC − yCtbC − y больше 0 и меньше 3 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( 0, PpsVirtualBoundariesPosY[ n ]/SubHeightC − 1, yCtbC + y + j ) (8-1236)
- В противном случае, применяется следующее:
vy + j = Clip3( 0, pic_height_in_luma_samples/SubHeightC − 1, yCtbC + y + j ) (8-1237)
- Переменную applyVirtualBoundary определяют следующим образом:
- Если одно или несколько из следующих условий является истинным (true), переменную applyVirtualBoundary устанавливают равной 0:
- Нижняя граница текущего блока дерева кодирования представляет собой нижнюю границу изображения.
- Нижняя граница текущего блока дерева кодирования представляет собой нижнюю границу кирпича и флаг loop_filter_across_bricks_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования представляет собой нижнюю границу среза и флаг loop_filter_across_slices_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования представляет собой одну из нижних виртуальных границ изображения и флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1.
- В противном случае, переменную applyVirtualBoundary устанавливают равной 1.
- Смещения r1, r2 и r3 реконструированных отсчетов специфицированы в Табл. 8-22 в соответствии с позицией y отсчета яркостной составляющей по горизонтали и переменной applyVirtualBoundary.
- Переменную curr определяют следующим образом:
curr = recPicture[ hx, vy ] (8-1238)
- Массив коэффициентов f[ j ] фильтрации цветностной составляющей и массив and c[ j ] значений усечения цветностной составляющей определяют следующим образом при j = 0..5:
f[ j ] = AlfCoeffC[ slice_alf_aps_id_chroma ][ j ] (8-1239)
c[ j ] = AlfClipC[ slice_alf_aps_id_chroma ][ j ] (8-1240)
- Переменную sum определяют следующим образом:
sum=f[0]*(Clip3(−c[0],c[0],recPicture[hx,vy+r2]−curr)+Clip3(−c[0],c[0],recPicture[hx,vy−r2]−curr))+f[1]*(Clip3(−c[1],c[1],recPicture[hx+1,vy+r1]−curr)+Clip3(−c[1],c[1],recPicture[hx−1,vy−r1]−curr))+f[2]*(Clip3(−c[2],c[2],recPicture[hx,vy+r1]−curr)+ Clip3( −c[ 2 ], c[ 2 ], recPicture[ hx, vy−r1]−curr))+(8-1241)f[3]*(Clip3(−c[3],c[3],recPicture[hx−1,vy+r1]−curr)+ Clip3( −c[3], c[3], recPicture[hx+1,vy−r1]−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 ) (8-1242)
- Модифицированный фильтрованный реконструированный отсчет alfPicture[ xCtbC + x ][ yCtbC + y ] цветностной составляющей определяют следующим образом:
- Если флаг pcm_loop_filter_disabled_flag и флаг pcm_flag[(xCtbC + x)* SubWidthC ][ ( yCtbC + y ) * SubHeightC ] оба равны1, применяется следующее:
alfPicture[ xCtbC + x ][ yCtbC + y ] = recPictureL[ hx, vy ] (8-1243)
- В противном случае флаг (pcm_loop_filter_disabled_flag равен 0 или флаг pcm_flag[ x ][ y ] равен 0), применяется следующее:
alfPicture[ xCtbC + x ][ yCtbC + y ] = Clip3( 0, ( 1 << BitDepthC ) − 1, sum ) (8-1244)
2.11 Примеры обработки единиц CTU
В соответствии с сегодняшней конфигурацией стандарта кодирования VVC, если нижняя граница одного блока CTB является нижней границей среза/кирпича, способ выполнения фильтрации ALF для виртуальной границы не активизирован. Например, одно изображение разбивают на несколько единиц CTU и 2 среза, как показано на Фиг. 19.
Предположен, что размер единицы CTU равен MxM (например, M = 64), в соответствии с определением виртуальной границы, последние 4 линии в пределах блока CTB обрабатывают ниже виртуальной границы. Для аппаратной реализации применяется следующее:
– Если нижняя граница блока CTB является нижней границей изображения (например, CTU-D), обрабатывают блок размером (M+4) × M, содержащий 4 линии из строки единиц CTU сверху и все линии из текущей единицы CTU.
- В противном случае, если нижняя граница блока CTB является нижней границей среза (или кирпича) (например, CTU-C) и флаг loop_filter_across_slice_enabled_flag (или флаг loop_filter_across_bricks_enabled_flag) равен 0, обрабатывают блок размером (M+4) × M, содержащий 4 линии из строки единиц CTU сверху и все линии из текущей единицы CTU.
- В противном случае, если единица CTU/блок CTB находится в первой строке единиц CTU в срезе/кирпиче/плитке (например, CTU-A), обрабатывают блок размером M × (M-4), исключив последние 4 линии.
- В противном случае, если единица CTU/блок CTB находится не в первой строке единиц CTU в срезе/кирпиче/плитке (например, CTU-B) и не в последней строке единиц CTU в срезе/кирпиче/плитке, обрабатывают блок размером M × M, содержащий 4 линии из строки единиц CTU сверху и исключающий последние 4 линии из текущей единицы CTU.
На Фиг. 19 показан пример обработки единиц CTU в изображении.
2.12 Кодирование видео в пределах всех 360 градусов
Горизонтальная круговая компенсация движения согласно документу VTM5 представляет собой инструмент кодирования, специфичный для обработки кругового видео на 360 градусов и разработанный для повышения визуального качества реконструированного кругового видео на 360 градусов в формате равнопрямоугольной (equi-rectangular (ERP)) проекции. В ходе обычной компенсации движения, когда вектор движения указывает на отсчеты, находящиеся за пределами границ опорного изображения, применяется повторяющееся заполнение для формирования значений отсчетов, расположенных за пределами, путем копирования из ближайших соседей на соответствующей границе изображения. Для кругового видео на 360 градусов этот способ повторяющегося заполнения не подходит и может породить визуальные артефакты, называемые «шовные артефакты» в реконструированном видео через окно. Поскольку видео на 360 градусов захвачено (снято) на сфере и по природе своей не имеет «границ», опорные отсчеты, расположенные вне границ опорного изображения в проецируемой области, всегда могут быть получены из соседних отсчетов в сферической области. Для общего формата проекции может быть затруднительно определить соответствующие соседние отсчеты в сферической области, поскольку это требует преобразования координат 2D-в-3D и 3D-в-2D, а также интерполяции отсчетов для дробных позиций. Эта проблема намного проще для левой и правой границ проекционного формата ERP, поскольку соседи на сфере вне левой границы изображения могут быть получены из отсчетов внутри правой границы изображения и наоборот.
На Фиг. 20 показан пример горизонтальной круговой компенсации движения в стандарте кодирования VVC.
Процедура горизонтальной круговой компенсации движения осуществляется, как показано на Фиг. 20. Когда часть опорного блока находится вне левой (или правой) границы опорного изображения в области проекции, вместо того, чтобы применять повторяющееся заполнение, указанную «внеграничную» часть берут из соответствующих соседей на сфере, относящихся к опорному изображению в направлении правой (или левой) границы области проекции. Повторяющееся заполнение используется только для верхней и нижней границ изображения. Как показано на Фиг. 20, горизонтальная круговая компенсация движения может быть объединена с ненормативным способом заполнения, часто используемым при кодировании кругового видео на 360 градусов. В стандарте кодирования VVC это достигается путем передачи в виде сигнализации синтаксического элемента высокого уровня с целью индикации кругового смещения, которое должно быть установлено для ширины изображения в проекции ERP прежде заполнения; этот синтаксис используется для регулирования позиции горизонтального кругового изображения соответствующим образом. На этот синтаксис не влияет конкретное значение заполнения на левой и правой границах изображения, и вследствие этого синтаксис естественно поддерживает асимметричное заполнение изображения в проекции ERP, например, когда заполнение слева и справа различно. Горизонтальная круговая компенсация движения предоставляет больше значимой информации для компенсации движения, когда опорные отсчеты располагаются вне левой и правой границ изображения.
Для проекционных форматов, составленных из нескольких поверхностей, независимо от того, какая компактная упаковка кадра используется, возникают нарушения непрерывности между двумя или более соседними поверхностями изображения с упакованным кадром. Например, при рассмотрении конфигурации упаковки кадра 3×2, показанной на Фиг. 24, три поверхности в верхней половине являются непрерывно смежными в трехмерном (3D) пространстве, но верхняя и нижняя половины изображения с упакованным кадром являются дискретными (разделены разрывом) в трехмерном пространстве. Если операции внутриконтурной фильтрации осуществляются через этот разрыв, на реконструированном видео могут оказаться видны шовные артефакты.
Для уменьшения поверхностных шовных артефактов может быть отменена активизация операций внутриконтурной фильтрации через нарушения непрерывности в изображении с упакованным кадром. Был предложен синтаксис для передачи сигнализации о вертикальных и/или горизонтальных границах, активизация операций внутриконтурной фильтрации через которые отменена. По сравнению с использованием двух плиток, по одной для каждой группы непрерывных поверхностей, и для отмены активизации операций внутриконтурной фильтрации через плитки предложенный способ сигнализации является более гибким, поскольку он не требует, чтобы размер поверхности был кратным размеру единицы CTU.
2.13 Пример независимых областей с ограниченным движением на основе суб-изображений
В некоторых вариантах, включены следующие признаки:
1) Изображения могут быть разбиты на суб-изображения.
2) Индикация существования суб-изображений входит в набор SPS, вместе с другой информацией на уровне последовательности относительно суб-изображений
3) Тем, рассматривать ли суб-изображение в качестве изображения в процессе декодирования (исключая операции внутриконтурной фильтрации), можно управлять посредством потока битов данных.
4) Тем, отменена ли внутриконтурная фильтрация через границы суб-изображений, можно управлять посредством потока битов данных для каждого суб-изображения. Процедуры фильтрации DBF, SAO и ALF обновляют для управления операциями внутриконтурной фильтрации через границы суб-изображений.
5) Для простоты, в качестве стартовой точки, ширину, высоту, смещение по горизонтали и смещение по вертикали передают в виде сигнализации в единицах отсчетов яркостной составляющей в наборе SPS. Границы суб-изображений ограничены границами срезов.
6) Рассмотрение суб-изображения в качестве изображения в процессе декодирования (исключая операции внутриконтурной фильтрации) специфицируют путем небольшого обновления синтаксиса coding_tree_unit( ) и обновлений следующих процедур декодирования:
o Процедура определения для (усовершенствованного) прогнозирования временного вектора движения яркостной составляющей
o Процедура билинейной интерполяции отсчетов яркостной составляющей
o Процедура фильтрации отсчетов яркостной составляющей с использованием 8-отводного интерполяционного фильтра
o Процедура интерполяции отсчетов цветностной составляющей
7) Идентификаторы (ID) суб-изображений специфицируют в явном виде в наборе SPS и включают в заголовки групп плиток, чтобы позволить выделить последовательности суб-изображений без необходимости изменения единиц VCL NAL.
Группы выходных суб-изображений (Output sub-picture sets (OSPS)) предложены для спецификации нормативного извлечения и точек соответствия для суб-изображений и групп таких суб-изображений.
3. Технические проблемы, решаемые техническими решениями, предлагаемыми в настоящем документе
Сегодняшний вариант стандарта кодирования VVC имеет следующие проблемы:
1. Текущая настройка активизации виртуальной границы фильтрации ALF зависит от того, является ли нижняя граница блока CTB нижней границей изображения. Если это истинно (true), тогда отменяют активизацию фильтрации ALF виртуальной границы, такой как граница CTU-D, показанная на Фиг. 19. Однако возможно, что нижняя граница блока CTB находится с внешней стороны от нижней границы изображения, так что изображение размером 256x240 разбито на 4 единицы CTU размером 128x128 каждая, в этом случае, виртуальная граница фильтрации ALF будет ошибочно задана как истинная (true) для последних 2 единиц CTU, которые имеют отсчеты с внешней стороны от нижней границы изображения.
2. Активизацию обработки виртуальной границы фильтрации ALF отменяют для нижней границы изображения и для границы среза/плитки/кирпича. Отмена активизации границы VB вдоль границы среза/кирпича может создать конвейерный пузырь или потребовать обработки 68 линий на каждую единицу данных виртуального конвейера (Virtual pipeline data units (VPDU, размером 64x64 в стандарте кодирования VVC)) в предположении размера единицы LCU, равного 64x64. Например:
a. Для декодирующих устройств, не осведомленных заранее о границах срезов/кирпичей/плиток (например, для приложений с малой задержкой), необходимо восстановить буферы линий для фильтрации ALF. Использовать ли содержимое буферов линий для фильтрации ALF, зависит от того, является ли текущая единица CTU также единицей CTU на границе среза/кирпича/плитки, эта информация, однако, неизвестна до тех пор, пока не будет декодирован следующий срез/кирпич/плитка.
b. Для декодирующих устройств, осведомленных заранее о границах срезов/кирпичей/плиток, либо им необходимо существовать с конвейерными пузырями (что весьма маловероятно), либо использовать фильтрацию ALF со скоростью 68 линий на каждую единицу VDPU размером 64x64 все время (избыточное выделение), чтобы избежать использования буферов линий для фильтрации ALF.
3. Существуют различные способы обработки виртуальной границы и границы единицы видео, например, различные способы заполнения. Поэтому, для строки можно осуществлять больше одного способа заполнения, когда эта линия имеет несколько границ.
a. В одном из примеров, если нижняя граница блока является круговой виртуальной границей на 360 градусов, и виртуальная граница фильтрации ALF также применяется к этому блоку, тогда, в этом случае, может быть сначала применен способ заполнения для круговой виртуальной границы на 360 градусов с целью генерации виртуальных отсчетов, расположенных ниже круговой виртуальной границы на 360 градусов. После этого виртуальные отсчеты, расположенные ниже круговой виртуальной границы на 360 градусов, рассматривают как доступные. Далее может быть применен 2-сторонний способ заполнения для фильтрации ALF в соответствии с Фиг. 16 A-C. Пример показан на Фиг. 25.
4. Способ обработки виртуальной границы может быть субоптимальным, поскольку используются отсчеты заполнения, что может быть менее эффективным.
5. Когда нелинейная фильтрация ALF не активизирована, способы фильтрации MALF и двустороннего заполнения должны быть способны генерировать одинаковые результаты для фильтрации отсчета, что требует доступа к отсчетам, пересекающим виртуальную границу. Однако когда такая нелинейная фильтрация ALF активизирована, эти два способа будут давать разные результаты. Было бы выгодно совместить эти два случая.
6. Срез может быть прямоугольным или непрямоугольным, как показано на Фиг. 28. В этом случае, единица CTU может нее совпадать с какими-либо границами (например, изображения/среза/плитки/кирпича). Однако может оказаться необходимым получить доступ к отсчетам вне текущего среза. Если процедура фильтрации, пересекающая границу среза, не активизирована (например, флаг loop_filter_across_slices_enabled_flag является ложным (false)), как осуществлять процедуру классификации и фильтрации ALF, не известно.
4. Примеры способов и вариантов
Приведенный ниже список следует рассматривать в качестве примеров для пояснения общих концепций. Приведенные в списке способы не следует интерпретировать в узком смысле. Кроме того, эти способы можно комбинировать каким-либо подходящим способом.
Способ заполнения, используемый для виртуальных границ фильтрации ALF, может быть обозначен как «Двустороннее заполнение», где, если заполнен один отсчет, расположенный в точке (i, j), тогда расположенный в точке (m, n) соответствующий отсчет, который совместно использует тот же самый коэффициент фильтрации, также заполняют, даже если этот отсчет доступен, как показано на Фиг. 12 – 13.
Согласно способу заполнения, используемому для границ изображения/виртуальных границ кругового видео на 360 градусов, нормальные границы (например, верхние и нижние границы) могут быть обозначены как «Одностороннее заполнение», где, если один отсчет, который нужно использовать, находится с внешней стороны от этих границ, его копируют из доступной стороны рассматриваемого изображения.
Способ заполнения, используемый для левой и правой границ кругового видео на 360 градусов, может быть обозначен как «Заполнение на круговой основе», где, если один отсчет, который нужно использовать, находится с внешней стороны от этих границ, его копируют с использованием компенсации движения.
В последующем обсуждении, слова, что отсчет находится «на границе единицы видео», могут означать, что расстояние между этим отсчетом и границей единицы видео меньше или не больше некого порогового значения. Термин «линия» может относиться к отсчетам, расположенным в одной и той позиции по горизонтали, или к отсчетам, расположенным в одной и той же позиции по вертикали (например, например отсчеты в одной и той же строке и/или отсчеты в одном и том же столбце). Функция Abs(x) определена следующим образом:
Abs( x ) = .
В последующем обсуждении термин «виртуальный отсчет» обозначает генерируемый отсчет, который может отличаться от реконструированного отсчета (может быть обработан деблокирующим фильтром и/или фильтром SAO). Виртуальный отсчет может быть использован для осуществления фильтрации ALF для другого отсчета. Виртуальный отсчет можно генерировать посредством заполнения.
Фраза «способ обработки виртуальной границы для фильтрации ALF» может обозначать, что переменная applyVirtualBoundary в настоящей спецификации может быть установлена на «истинно». Фраза «активизация виртуальной границы» может обозначать, что текущий блок разбит по меньшей мере на две части виртуальной границей и что для отсчетов, расположенных в одной части, не допускается в процессе фильтрации (например, фильтрации ALF) использовать отсчеты из другой части. Виртуальная граница может находиться на K строк выше нижней границы блока.
В последующем описании соседние отсчеты могут представлять собой отсчеты, требуемые для классификации фильтра и/или процедуры фильтрации.
В настоящем описании, соседний отсчет является «недоступным», если он находится вне текущего изображения, или текущего суб-изображения, или текущей плитки, или текущего среза, или текущего кирпича, или текущей единицы CTU, или текущей единицы обработки (такой как единица обработки для фильтрации ALF или единица обработки для узкой фильтрации ALF), или какой-либо другой единицы видео.
1. Определение, что «Нижняя граница текущего блока дерева кодирования является нижней границей изображения», заменено определением «Нижняя граница текущего блока дерева кодирования является нижней границей изображения или находится вне изображения».
a. В качестве альтернативы, далее, в этом случае, способ обработки виртуальной границы фильтрации ALF может быть не активизирован.
2. Следует ли активизировать использование виртуальных отсчетов (например, установить переменную applyVirtualBoundary равной «истинно» (true) или «ложно» (false))) в процессе внутриконтурной фильтрации, может зависеть от размера блока CTB.
a. В одном из примеров, переменную applyVirtualBoundary всегда устанавливают равной «ложно» (false) для некоего конкретного размера единицы CTU/блока CTB, например, для размера единицы CTU/блока CTB, равного KxL (например, K=L=4).
b. В одном из примеров, переменную applyVirtualBoundary всегда устанавливают равной «ложно» (false) для некоторых размеров единицы CTU/блока CTB не больше или меньше KxL (например, K=L=8).
c. В качестве альтернативы, не активизируют ALF фильтрацию для некоторых размеров единицы CTU/блока CTB, таких как 4x4, 8x8.
3. Следует ли активизировать использование виртуальных отсчетов (например, заполненных от реконструированных отсчетов) в процедурах внутриконтурной фильтрации (например, фильтрации ALF), может зависеть от того, является ли нижняя граница блока нижней границей единицы видео, которая имеет меньшие размеры по сравнению с изображением (например, среза/плитки/кирпича), или виртуальной границей.
a. В одном из примеров, способ обработки виртуальной границы фильтрации ALF может быть активизирован (например, переменная applyVirtualBoundary установлена равной «истинно» (true)) для блока дерева кодирования (CTB), если нижняя граница этого блока CTB является границей единицы видео или виртуальной границы.
- В качестве альтернативы, кроме того, если нижняя граница не является нижней границей изображения, или нижняя граница находится вне изображения, активизируют приведенный выше способ.
b. Когда нижняя граница текущего блока дерева кодирования представляет собой одну из нижних виртуальных границ изображения и флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1, способ обработки виртуальных границ фильтрации ALF может быть по-прежнему активизирован (например, переменную applyVirtualBoundary устанавливают равной «истинно» (true)).
c. В одном из примеров, следует ли активизировать способ обработки виртуальных границ фильтрации ALF (например, установить соответствующе значение переменной applyVirtualBoundary) для блока CTB может зависеть от соотношения между нижней границей этого блока CTB и нижней границей изображения.
i. В одном из примеров, переменную applyVirtualBoundary устанавливают равной «ложно» (false), только если нижняя граница блока CTB является нижней границей изображения, содержащего этот блок CTB, или если эта нижняя граница находится вне изображения.
ii. В одном из примеров, переменную applyVirtualBoundary устанавливают равной «истинно» (true), когда нижняя граница блока CTB НЕ является нижней границей изображения, содержащего этот блок CTB.
d. В одном из примеров, при декодировании единицы CTU-C, как показано на Фиг. 18A-18B, M × M отсчетов могут быть фильтрованы вместе с K линиями из расположенной сверху единицы CTU, и исключив K линий ниже виртуальной границы.
4. Предлагается не активизировать использование отсчетов через границы кирпичей/срезов в процессе фильтрации (например, фильтрации ALF) даже когда передаваемые в виде сигнализации флаги управления использованием контурных фильтров, пересекая границы кирпичей/срезов, (например, флаг loop_filter_across_bricks_enabled_flag/loop_filter_across_slices_enabled_flag) имеют значение «истинно» (true).
a. В качестве альтернативы, кроме того, передаваемый в виде сигнализации флаг loop_filter_across_bricks_enabled_flag/loop_filter_across_slices_enabled_flag может управлять только процедурой фильтрации в деблокирующем фильтре и в фильтре SAO, исключая фильтр ALF.
b. В одном из примеров, виртуальный отсчет может быть использован вместо реконструированного отсчета в соответствующей позиции для осуществления фильтрации ALF для другого отсчета.
5. Когда один блок (например, блок CTB) содержит отсчет, расположенный на границе видео единицы (такой как граница среза/кирпича/плитки/виртуальные или нормальные границы кругового видео на 360 градусов/границ изображения), способ того, как генерировать виртуальный отсчет внутри или вне единицы видео (например, способы заполнения) для внутриконтурной фильтрации, такой как ALF, может быть унифицирован для различных видов границ.
a. В качестве альтернативы, кроме того, способ обработки виртуальных границ (например, способ Двустороннего заполнения) может быть применен к блоку для обработки отсчета на границе для внутриконтурной фильтрации.
b. В качестве альтернативы, кроме того, приведенные выше способы могут быть применены, когда блок содержит отсчет, расположенный на нижней границе единицы видео.
c. В одном из примеров, при декодировании K линий одного блока, если эти K линий находится ниже виртуальной границы этого блока (например, последние K линий в единице CTU-B, показанной на Фиг. 17A-17B) и нижняя граница этого блока является нижней границей единицы видео, виртуальные отсчеты можно генерировать в процессе классификации/фильтрации ALF, чтобы избежать использования других отсчетов вне этих K линий, например, может быть применен способ Двустороннего заполнения.
i. В качестве альтернативы, фильтр ALF может быть не активизирован для этих последних K линий.
d. В одном из примеров, когда один блок расположен на нескольких границах, совокупность пикселей/отсчетов, используемых для классификации при фильтрации ALF, может быть ограничена так, чтобы не пересекать какую-либо из этих нескольких границ.
i. В одном из примеров, для какого-либо отсчета, если определенный соседний с ним отсчет является «недоступным» (например, через какую-либо из указанных нескольких границ), какой-либо один или все виды градиентов/направленности могут не быть вычислены для этого отсчета.
1. В одном из примеров, градиенты для этого отсчета могут считаться нулевыми.
2. В одном из примеров, градиенты для этого отсчета могут считаться «недоступными» и могут не быть добавлены к активности (например, определенной в уравнении Eq. (8) раздела 2.6.1.1), определяемой в процессе классификации при фильтрации ALF.
ii. В одном из примеров, активность/направленность, определяемая в процессе классификации при фильтрации ALF, может быть масштабирована с некоторым коэффициентом, когда только часть отсчетов, используемых процессе классификации при фильтрации ALF, являются «доступными» (например, не через какую-либо из указанных границ).
iii. В одном из примеров, для пограничного блока, в предположении, что градиенты/направленность требуется вычислить для N отсчетов в процессе классификации при фильтрации ALF, а градиенты могут быть вычислены только для M отсчетов (например, если некоторый соседний отсчет относительно какого-либо отсчета «недоступен», тогда для него невозможно вычислить градиент), тогда активность может быть умножена на N/M.
1. В качестве альтернативы, эта активность может быть умножена на коэффициент, зависящий от N/M. Например, это число может представлять собой MN (N – целое число), например, M = 2.
e. В одном из примеров, когда одна линия находится на нескольких границах (например, расстояние от этой линии до границы меньше порогового значения), процедура заполнения осуществляется только однажды независимо от того, какому числу границ принадлежит эта линия.
i. В качестве альтернативы, более того, как много соседних линий должны быть заполнены, может зависеть от позиции текущей линии относительно всех границ.
ii. Например, решение о том, как много соседних линий должны быть заполнены, может быть принято на основе расстояний между текущей линией и двумя границами, например, если текущая линия находится в пределах двух границ, так что эти две границы располагаются выше и ниже рассматриваемой линии.
iii. Например, решение о том, как много соседних линий должны быть заполнены, может быть принято на основе расстояния между текущей линией и ближайшей границей, так что эти две границы располагаются выше и ниже рассматриваемой линии.
iv. Например, то, как много соседних линий должны быть заполнены, может быть вычислены для каждой границы независимо, и максимум одну строку выбирают в качестве окончательного числа заполняемых строк.
v. В одном из примеров, решение о том, как много соседних линий должны быть заполнены, может быть принято для каждой стороны (например, стороны сверху и стороны снизу) относительно текущей линии.
vi. В одном из примеров, для способа двустороннего заполнения, решение о том, как много соседних линий должны быть заполнены, может быть принято совместно для обеих сторон.
vii. В качестве альтернативы, кроме того, применяется способ двустороннего заполнения, используемый фильтрацией ALF.
f. В одном из примеров, когда одна линия находится возле нескольких границ и имеет по меньшей мере по одной границе с каждой стороны (например, со стороны сверху и со стороны снизу) относительно текущей линии, фильтрация ALF для этого варианта может быть не активизирована.
g. В одном из примеров, когда число заполняемых линий, требуемых текущей линией, больше порогового значения, фильтрация ALF для текущей линии может быть не активизирована.
i. В одном из примеров, когда число заполняемых линий с какой-либо стороны больше некоторого порогового значения, фильтрация ALF для текущей линии может быть не активизирована.
ii. В одном из примеров, когда общее число заполняемых линий по обе стороны больше некоторого порогового значения, фильтрация ALF для текущей линии может быть не активизирована.
h. В качестве альтернативы, кроме того, приведенные выше способы могут быть применены, когда блок содержит отсчет, расположенный на нижней границе единицы видео, и для этого блока активизирована внутриконтурная фильтрация, такая как фильтрация ALF.
i. В качестве альтернативы, кроме того, приведенные выше способы могут быть применены при определенных условиях, например, когда рассматриваемый блок содержит какой-либо отсчет, расположенный на нижней границе единице видео, и фильтрация, пересекающая эти границы, не разрешена (например, флаг pps_loop_filter_across_virtual_boundaries_disabled_flag/ loop_filter_across_slices_enabled_flag/loop_filter_across_slices_enabled_flag имеет значение «истинно» (true)).
j. Предлагаемый способ также применим к отсчетам/блокам, расположенным на вертикальных границах.
6. Например, когда отсчет находится по меньшей мере на двух границах одного блока (например, по меньшей мере одна из этих границ, расположенная выше текущей линии, является виртуальной границей фильтрации ALF, а ниже находится другая граница), то, как много линий должны быть заполнены, определяют не только на основе расстояния между текущей линией и виртуальной границей фильтрации ALF. Напротив, это определяют на основе расстояний от текущей линии до каждой из этих двух границ.
a. В одном из примеров, число линий для заполнения с каждой стороны устанавливают равным (M – min (D0, D1)).
b. В одном из примеров, число линий для заполнения с каждой стороны устанавливают равным (M – max (D0, D1)).
c. Для приведенного выше примера, D0, D1 обозначают расстояния от текущей линии до границ выше/ниже.
d. Для приведенного выше примера, M обозначает число линий, на которое виртуальная граница фильтрации ALF отстоит от нижнего края одной единицы CTU.
7. Могут быть определены по меньшей мере два способа выбора отсчетов при классификации при фильтрации ALF и/или в процессе линейной или нелинейной фильтрации ALF, где один из этих способов выбирает отсчеты прежде применения какого-либо способа внутриконтурной фильтрации; а другой способ выбирает отсчеты после применения одного или нескольких способов внутриконтурной фильтрации, но прежде применения фильтрации ALF.
a. В одном из примеров, выбор различных способов может зависеть от позиции отсчетов, подлежащих фильтрации.
b. В одном из примеров, отсчет на нижней границе единицы видео (такой как блок CTB) может быть выбран посредством первого способа, используемого при фильтрации ALF для другого отсчета. В противном случае (отсчет не находится на границе), выбирают второй способ.
8. Предлагается не активизировать использование отсчетов, пересекая границу единицы VPDU (например, области размером 64x64) в процессе фильтрации.
a. В одном из примеров, когда отсчет, требуемый процедурой классификации при фильтрации ALF, находится вне пределов границ единицы VPDU, или ниже виртуальной границы, он может быть заменен виртуальным отсчетом или результаты классификации для этого отсчета могут быть скопированы из того, что ассоциировано с другими отсчетами, такими как те, что заполнены из доступных отсчетов.
b. В одном из примеров, когда отсчет, требуемый процедурой фильтрации, находится вне границ единицы VPDU или ниже виртуальной границы, он может быть заменен виртуальным отсчетом, например, заполнен из доступных отсчетов.
c. В одном из примеров, способ обработки виртуальных границ фильтрации ALF может быть активизирован (например, переменную applyVirtualBoundary устанавливают равной «истинно» (true)) для блока, если этот блок расположен на границе единицы VPDU.
d. В качестве альтернативы, использование отсчетов, пересекая горизонтальную границу единицы VPDU, может быть не активизировано для процедуры фильтрации.
i. В одном из примеров, когда отсчет, требуемый процедурой фильтрации, находится ниже горизонтальной границы единицы VPDU или виртуальной границы, он может быть заменен виртуальным отсчетом, например, заполнен из доступных отсчетов.
e. В качестве альтернативы, использование отсчетов, пересекая вертикальную границу единицы VPDU, может быть не активизировано для процедуры фильтрации.
i. В одном из примеров, когда отсчет, требуемый процедурой фильтрацией, находится с внешней стороны от вертикальной границы единицы VPDU или ниже виртуальной границы, он может быть заменен виртуальным отсчетом, например, заполнен из доступных отсчетов.
9. Вместо использования отсчетов заполнения (например, недоступных, выше/ниже виртуальных границ, выше/ниже границ единицы видео) в процессе классификации/фильтрации ALF, предлагается использовать реконструированные отсчеты прежде всех внутриконтурных фильтров.
a. В качестве альтернативы, кроме того, концепция двустороннего заполнения применяется с использованием заполняющих отсчетов из совокупности реконструированных отсчетов прежде всех внутриконтурных фильтров.
i. В одном из примеров, если отсчет в опоре фильтра взят из совокупности реконструированных отсчетов прежде всех внутриконтурных фильтров, симметричный ему (например, симметричный относительно начала координат, например, текущий отсчет) отсчет в опоре фильтре должен также использовать реконструированный отсчет прежде всех внутриконтурных фильтров.
1. В предположении, что координаты текущего отсчета, подлежащего фильтрации, равны (0, 0) и отсчет, расположенный в точке (i, j), является реконструированным отсчетом прежде всех внутриконтурных фильтров, тогда отсчет, расположенный в точке с координатами (-i, -j), представляет собой реконструированный отсчет прежде всех внутриконтурных фильтров.
2. В предположении, что координаты текущего отсчета, подлежащего фильтрации, равны (x, y) и отсчет, расположенный в точке (x + i, y + j), является реконструированным отсчетом прежде всех внутриконтурных фильтров, тогда отсчет, расположенный в точке с координатами (x – i, y – j), представляет собой реконструированный отсчет прежде всех внутриконтурных фильтров.
b. В качестве альтернативы, кроме того, когда активизировано внутриконтурное переформирование (также называемое LMCS), реконструированные отсчеты прежде всех внутриконтурных фильтров являются отсчетами в исходной области, преобразованные из переформированной области.
10. Вместо использования отсчетов заполнения (например, недоступных, выше/ниже виртуальных границ, выше/ниже границ единицы видео) в процессе фильтрации ALF, предлагается использовать разные опоры фильтров ALF.
a. В одном из примеров, в предположении, что отсчет необходимо заполнить приведенным выше способом, вместо осуществления заполнения, коэффициент фильтрации, ассоциированный с указанным отсчетом, устанавливают равным нулю.
i. В этом случае, опору фильтра модифицируют путем исключения отсчетов, которые необходимо заполнить.
ii. В качестве альтернативы, кроме того, коэффициенты фильтрации, применяемые к другим отсчетам за исключением текущего отсчета, поддерживают неизменными, однако коэффициент фильтрации, применяемый к текущему отсчету, может быть модифицирован, например, ( (1<< C_BD) – сумма всех коэффициентов фильтрации, применяемых к отсчетам, которые не нужно заполнять) где C_BD обозначает битовую глубину коэффициента фильтрации.
1. Принимая Фиг. 18A-18B в качестве примера, при фильтрации линий L и I, коэффициент фильтрации c12, применяемый к текущему отсчету, модифицируют и делают его равным ((1<< C_BD) – 2*(c4+c5+c6+c7+c8+c9+c10+c11)).
b. В одном из примеров, в предположении, что отсчет (x1, y1) заполняют от отсчета (x2, y2) приведенным выше способом, вместо осуществления заполнения, коэффициент фильтрации, ассоциированный с отсчетом (x1, y1), суммируют с коэффициентом для позиции (x2, y2) независимо от того, активизирован ли, либо не активизирован нелинейный фильтр.
i. В качестве альтернативы, кроме того, параметр усечения для отсчета в точке (x2, y2) может быть определен «на лету».
1. В одном из примеров, он может быть установлен равным декодированному параметру усечения для отсчета (x2, y2).
2. В качестве альтернативы, он может быть установлен равным результату вычисления функции, входными данными для которой являются декодированные параметры усечения для отсчетов в точках (x1, y1) и (x2, y2), например, большему значению или меньшему значению.
11. Выбор параметров усечения/коэффициентов фильтрации/опор фильтров может зависеть от того, нужна ли фильтрация отсчета для доступа к отсчетам заполнения (например, не доступны, выше/ниже виртуальных границ, выше/ниже границ единицы видео).
a. В одном из примеров, разные параметры усечения/коэффициенты фильтрации/опоры фильтров могут быть использованы для отсчетов с одинаковым индексом класса, но для некоторых из этих отсчетов требуется доступ к отсчетам заполнения, а для других нет.
b. В одном из примеров, параметры усечения/коэффициентов фильтрации/опоры фильтров для фильтрации отсчетов, которые требуются для доступа к отсчетам заполнения, могут быть сообщены в виде сигнализации на уровне единицы CTU/области/среза/плитки.
c. В одном из примеров, параметры усечения/коэффициентов фильтрации/опоры фильтров для фильтрации отсчетов, которые требуются для доступа к отсчетам заполнения, могут быть определены из тех, которые используются для фильтрации отсчетов, какие не требуются для доступа к отсчетам заполнения.
i. В одном из примеров, могут быть применены п. 9a или 9b.
12. Как обрабатывать отсчет на границе для внутриконтурной фильтрации (такой как фильтрация ALF) может зависеть от цветовой составляющей и/или цветового формата.
a. Например, определение «на границе» может отличаться для разных цветовых составляющих. В одном из примеров, отсчет яркостной составляющей находится на нижней границе, если расстояние между этим отсчетом и нижней границей меньше T1; отсчет цветностной составляющей находится на нижней границе, если расстояние между этим отсчетом и нижней границей меньше T2. Значения T1 и T2 могут быть разными.
i. В одном из примеров, значения T1 и T2 могут быть разными, когда цветовой формат не является форматом 4:4:4.
13. Когда нижняя/верхняя/левая/правая граница для одной единицы CTU/VPDU также является границей среза/плитки/кирпича/подобласти с независимым кодированием, применяется фиксированный порядок нескольких процедур заполнения.
a. В одном из примеров, на первом этапе сначала применяют способ заполнения (например, 1-стороннее заполнение) среза/плитки/кирпича. После этого, на втором этапе применяют способ заполнения для обработки виртуальных границ фильтрации ALF (например, способ 2-стороннего заполнения). В таком случае, отсчеты заполнения после первого этапа маркируют как доступные и они могут быть использованы для принятия решения о том, как много линий нудно заполнить при обработке виртуальных границ фильтрации ALF. То же самое правило (например, Фиг. 16A-C) используется для обработки единиц CTU, которые не располагаются на указанных границах.
14. Предлагаемые способы могут быть применены к одной или нескольким границам между двумя суб-изображениями.
a. Граница, к которой применяются предлагаемые способы, может быть горизонтальной границей.
b. Граница, к которой применяются предлагаемые способы, может быть вертикальной границей.
15. Предлагаемые выше способы могут быть применены к отсчетам/блокам на вертикальных границах.
16. Следует ли и/или как применять предлагаемый способ к «виртуальной границе на 360 градусов» может зависеть от позиции этой «виртуальной границы на 360 градусов».
a. В одном из примеров, когда «виртуальная граница на 360 градусов» совпадает с границей единицы CTU, может быть применен предлагаемый способ. Например, Только 2-стороннее заполнение может быть применено при фильтрации ALF для отсчетов на «виртуальной границе на 360 градусов» .
b. В одном из примеров, когда «виртуальная граница на 360 градусов» не совпадает с границей единицы CTU, предлагаемый способ может быть неприменим. Например, только 1-стороннее заполнение может быть применено при фильтрации ALF для отсчетов на «виртуальной границе на 360 градусов».
c. В одном из примеров, для отсчетов на нескольких границах, где по меньшей мере одна граница является «виртуальной границей на 360 градусов» и по меньшей мере одна из этих «виртуальных границ на 360 градусов» не совпадает с границей единицы CTU, предлагаемый способ может быть неприменим.
i. Например, отсчеты через любую из этих нескольких границ могут быть заполнены посредством 1-сторонннего заполнения.
1. В качестве альтернативы, кроме того, если имеется «виртуальная граница», 2-стороннее заполнение может быть применено в процессе фильтрации ALF после 1-стороннего заполнения.
d. В одном из примеров, для отсчетов, расположенных между границами двух видов, если одна из этих границ является «виртуальной границей на 360 градусов», а другая нет, заполнение привлекается только один раз в процессе фильтрации ALF.
i. В одном из примеров, может быть использован способ заполнения для обработки виртуальных границ фильтрации ALF (например, способ 2-стороннего заполнения).
1. В качестве альтернативы, может быть использован способ заполнения для обработки границ изображения (или среза/плитки/кирпича/суб-изображения) (например, 1-стороннее заполнение).
ii. В качестве альтернативы, две или более процедур заполнения могут быть выполнены по порядку.
1. В одном из примеров, сначала может быть применен способ заполнения для обработки границ изображения (или среза/плитки/кирпича/суб-изображения) (например, 1-стороннее заполнение), после чего может быть использован способ заполнения для обработки виртуальных границ фильтрации ALF (например, способ 2-стороннего заполнения).
a. В качестве альтернативы, кроме того, отсчеты заполнения после первого заполнения считают доступными для второй процедуры заполнения.
iii. В одном из примеров, для отсчетов, расположенных между границами двух или более типов, (например, граница среза/граница плитки/граница кирпича /виртуальная граница на 360 градусов/виртуальная граница фильтрации ALF/граница суб-изображения), если только одна из границ является «виртуальной границей на 360 градусов» (как показано на Фиг. 24, например, первая граница является «виртуальной границей на 360 градусов», и вторая граница является «виртуальной границей фильтрации ALF» или границей среза/кирпича/плитки/границей суб-изображения; или наоборот), может быть применен предлагаемый способ. Например, только 2-стороннее заполнение может быть применено при фильтрации ALF для этих отсчетов.
1. В качестве альтернативы, если эти несколько видов границ являются либо «виртуальными границами на 360 градусов», либо границами изображения, предлагаемый способ может быть не применим. Например, только 1-стороннее заполнение может быть применено при фильтрации ALF для этих отсчетов.
e. В одном из примеров, для отсчетов, расположенных между границами двух или более типов, и если по меньшей мере одна из этих границ является «виртуальной границей на 360 градусов» и не совпадает с границей единицы CTU, предлагаемый способ может быть не применим.
i. В таком случае, это можно рассматривать, как в известной технике для обработки отсчетов только на «виртуальной границе на 360 градусов», но не на границах других типов.
ii. В одном из примеров, только 1-стороннее заполнение может быть применено при фильтрации ALF для этих отсчетов.
f. В одном из примеров, для отсчетов, расположенных между границами двух или более типов, и если по меньшей мере одна из этих границ является «виртуальной границей на 360 градусов», предлагаемый способ может быть не применим.
i. В таком случае, это можно рассматривать, как в известной технике для обработки отсчетов только на «виртуальной границе на 360 градусов», но не на границах других типов.
ii. В одном из примеров, только 1-стороннее заполнение может быть применено при фильтрации ALF для этих отсчетов.
17. Когда опорный отсчет, требуемый в процессе фильтрации ALF, (например, отсчет P0i при i равно A/B/C/D, как показано на Фиг. 16C, при фильтрации текущего отсчета P0) и/или процедура классификации при фильтрации ALF является «недоступный», например, из-за того, что рассматриваемый отсчет расположен в другой единице видео (например, срезе/кирпиче/плитке/суб-изображении) относительно текущего отсчета и фильтрация с использованием отсчетов через границу этой единицы видео (например, границы среза/кирпича/плитки/суб-изображения) не разрешена, «недоступный» отсчет может быть заполнен «доступными» отсчетами (например, отсчетами из того же самого среза/кирпича/плитки/суб-изображения, как и текущий отсчет).
a. В одном из примеров, «недоступный» опорный отсчет может быть сначала усечен до ближайшей к нему «доступной» горизонтальной позиции, а затем выполняют усечение этого «недоступного» опорного отсчета до ближайшей к нему «доступной» вертикальной позиции, при необходимости.
b. В одном из примеров, «недоступный» опорный отсчет может быть сначала усечен до ближайшей к нему «доступной» вертикальной позиции, а затем выполняют усечение этого «недоступного» опорного отсчета до ближайшей к нему «доступной» горизонтальной позиции, при необходимости.
c. В одном из примеров, выполняют усечение координаты «недоступного» опорного отсчета к координате ближайшего к нему «доступного» отсчета (например, отстоящего на наименьшее расстояние) в горизонтальном направлении.
i. В одном из примеров, для двух отсчетов с координатами (x1, y1) and (x2, y2), горизонтальное расстояние между ними может быть вычислено по формуле Abs(x1 – x2).
d. В одном из примеров, выполняют усечение координаты «недоступного» опорного отсчета к координате ближайшего к нему «доступного» отсчета (например, отстоящего на наименьшее расстояние) в вертикальном направлении.
i. В одном из примеров, для двух отсчетов с координатами (x1, y1) и (x2, y2), вертикальное расстояние между ними может быть вычислено по формуле Abs(y1 – y2).
e. В одном из примеров, выполняют усечение «недоступного» опорного отсчета до ближайшего к нему «доступного» отсчета (например, отстоящего на наименьшее расстояние).
i. В одном из примеров, для двух отсчетов с координатами (x1, y1) and (x2, y2), расстояние между ними может быть вычислено по формуле (x1 – x2)* (x1 – x2) + (y1 – y2)*(y1 – y2).
ii. В качестве альтернативы, расстояние между двумя пикселями может быть вычислено по формуле Abs(x1 – x2) + Abs(y1 – y2).
f. В качестве альтернативы, процедура фильтрации для текущего примера не активизирована.
g. В качестве альтернативы, может быть не разрешено использовать процедуру классификации для фильтрации ALF (например, вычисление градиента для текущего отсчета) для недоступных опорных отсчетов.
18. Как определять отсчет заполнения для недоступных опорных отсчетов может зависеть от того, совпадает ли рассматриваемая единица CTU с какой-либо границей.
a. В одном из примеров, когда текущая единица CTU не совпадает с границами какого-либо типа, но процедуре фильтрации (например, процедуре классификации ALF/фильтрации ALF) для текущего отсчета необходимо получить доступ к опорному отсчету в другой единице видео (например, срезе), могут быть применены способы, описанные в п. 16.
i. В качестве альтернативы, кроме того, когда текущая единица CTU не совпадает с границами какого-либо типа, но процедуре фильтрации (например, процедуре классификации ALF/фильтрации ALF) для текущего отсчета необходимо получить доступ к опорному отсчету в другой единице видео (например, срезе), а фильтрация, пересекающая границу среза, не разрешена, могут быть применены способы, описанные в п.16.
ii. В качестве альтернативы, кроме того, когда текущая единица CTU не совпадает с границами какого-либо типа, но процедуре фильтрации (например, процедуре классификации ALF/фильтрации ALF) для текущего отсчета необходимо получить доступ к опорному отсчету в другой единице видео (например, срезе) и к текущему отсчету в той же самой единице видео, а фильтрация, пересекающая границу среза, не разрешена, могут быть применены способы, описанные в п.16.
b. В одном из примеров, когда единица CTU совпадает с границей какого-либо типа, могут быть применены унифицированные способы заполнения (например, 2-стороннее или 1-стороннее заполнение).
i. В качестве альтернативы, когда текущая единица CTU совпадает с границами нескольких типов, а фильтрация, пересекающая эти границы, не разрешена, могут быть применены унифицированные способы заполнения (например, 2-стороннее или 1-стороннее заполнение).
c. В одном из примеров, только «недоступные» отсчеты, которые не могут быть заполнены способом 2-стороннего заполнения или/и 1-стороннего заполнения, могут быть заполнены с применением способов, описанных в п. 16.
5. Варианты
В разделах ниже, описаны некоторые примеры того, как может быть модифицирована текущая версия стандарта кодирования VVC с целью адаптации к некоторым вариантам предлагаемой технологии. Вновь добавляемые части обозначены жирным курсивом с подчеркиванием. Удаляемые части обозначены с использованием символов [[]].
5.1 Вариант #1
Флаг loop_filter_across_bricks_enabled_flag, равный 1, специфицирует, что операции внутриконтурной фильтрации могут быть осуществлены через границы кирпичей в изображениях со ссылками на набор PPS. Флаг loop_filter_across_bricks_enabled_flag, равный 0, специфицирует, что операции внутриконтурной фильтрации не осуществляются через границы кирпичей в изображениях со ссылками на набор PPS. Совокупность операций внутриконтурной фильтрации содержит операции деблокирующего фильтра, операции нелинейного фильтра с адаптивным смещением [[, и операции адаптивного контурного фильтра]]. Значение флага loop_filter_across_bricks_enabled_flag, когда он не присутствует, считают равным 1.
Флаг loop_filter_across_slices_enabled_flag, равный 1, специфицирует, что операции внутриконтурной фильтрации могут быть осуществлены через границы срезов в изображениях со ссылками на набор PPS. Флаг loop_filter_across_slice_enabled_flag, равный 0, специфицирует, что операции внутриконтурной фильтрации не осуществляются через границы срезов в изображениях со ссылками на набор PPS. Совокупность операций внутриконтурной фильтрации содержит операции деблокирующего фильтра, операции нелинейного фильтра с адаптивным смещением [[, и операции адаптивного контурного фильтра]]. Значение флага loop_filter_across_slices_enabled_flag, когда он не присутствует, считают равным 0.
5.2 Вариант #2
На Фиг. 21 показана обработка единиц CTU в изображении. Отличия от Фиг. 19 выделены штриховыми линиями.
5.3 Вариант #3
8.8.5.2 Процедура фильтрации блока дерева кодирования для яркостной составляющей
Входными данными для этой процедуры являются:
- массив recPictureL реконструированных отсчетов яркостной составляющей изображения прежде процедуры адаптивной контурной фильтрации,
- массив alfPictureL фильтрованных отсчетов яркостной составляющей изображения,
- позиция ( xCtb, yCtb ) яркостной составляющей, специфицирующая верхний левый отсчет текущего блока дерева кодирования яркостной составляющей относительно верхнего левого текущего изображения
Выходными данными этой процедуры является массив alfPictureL модифицированных фильтрованных реконструированных отсчетов яркостной составляющей.
Процедуру определения индекса фильтра согласно статье 8.8.5.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 ] фильтрации яркостной составляющей и массив значений c[ j ] усечения яркостной составляющей, соответствующие фильтру, специфицированному параметрами filtIdx[ x ][ y ], определяют следующим образом при j = 0..11:
- …
- Индекс idx коэффициентов фильтрации и значений усечения яркостной составляющей определяют в зависимости от параметров transposeIdx[ x ][ y ] следующим образом:
- …
- Позиции ( hx + i, vy + j ) для каждого из соответствующих отсчетов ( x, y ) яркостной составляющей внутри рассматриваемого конкретного массива recPicture яркостной составляющей при i, j = −3..3 определяют следующим образом:
- …
– Переменную applyVirtualBoundary определяют следующим образом:
– Если [[одно или несколько из]] следующее условие [[]] является истинным (true), переменную applyVirtualBoundary устанавливают равной 0:
– Нижняя граница текущего блока дерева кодирования является нижней границей изображения.
[[– Нижняя граница текущего блока дерева кодирования является нижней границей кирпича, и флаг loop_filter_across_bricks_enabled_flag равен 0.
– Нижняя граница текущего блока дерева кодирования является нижней границей среза, и флаг loop_filter_across_slices_enabled_flag равен 0.
– Нижняя граница текущего блока дерева кодирования является одной из нижних виртуальных границ изображения, и флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1.]]
– В противном случае, переменную applyVirtualBoundary устанавливают равным 1.
- Смещения r1, r2 и r3 реконструированных отсчетов специфицированы в Табл. 8-22 в соответствии с горизонтальной позицией y отсчета яркостной состaвляющей и переменной applyVirtualBoundary.
- …
8.8.5.4 Процедура фильтрации блока дерева кодирования для цветностной составляющей
Входными данными для этой процедуры являются:
- массив recPicture реконструированных отсчетов цветностной составляющей изображения прежде процедуры адаптивной контурной фильтрации,
- массив alfPicture фильтрованных реконструированных отсчетов цветностной составляющей изображения,
- позиция ( xCtbC, yCtbC ) цветностной составляющей, специфицирующая верхний левый отсчет текущего блока дерева кодирования цветностной составляющей относительно верхнего левого отсчета текущего изображения.
Выходными данными этой процедуры является массив alfPicture модифицированных фильтрованных реконструированных отсчетов цветностной составляющей изображения.
Ширину и высоту ctbWidthC и ctbHeightC текущего блока дерева кодирования цвеитностной составляющей определяют следующим образом:
ctbWidthC = CtbSizeY/SubWidthC (8-1230)
ctbHeightC = CtbSizeY/SubHeightC (8-1231)
Для определения фильтрованных реконструированных отсчетов 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 определяют следующим образом:
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение xCtbC + x − PpsVirtualBoundariesPosX[ n ]/SubWidthC не меньше 0 и меньше 2 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( PpsVirtualBoundariesPosX[ n ]/SubWidthC, (8-1232)
pic_width_in_luma_samples/SubWidthC − 1, xCtbC + x + i )
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosX[ n ]/SubWidthC − xCtbC − x больше 0 и меньше 3 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( 0, PpsVirtualBoundariesPosX[ n ]/SubWidthC − 1, xCtbC + x + i ) (8-1233)
- В противном случае, применяется следующее:
hx + i = Clip3( 0, pic_width_in_luma_samples/SubWidthC − 1, xCtbC + x + i ) (8-1234)
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение yCtbC + y − PpsVirtualBoundariesPosY[ n ]/SubHeightC не меньше 0 и меньше 2 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( PpsVirtualBoundariesPosY[ n ]/SubHeightC , (8-1235)
pic_height_in_luma_samples/SubHeightC − 1, yCtbC + y + j )
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosY[ n ]/SubHeightC − yCtbC − y больше 0 и меньше 3 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( 0, PpsVirtualBoundariesPosY[ n ]/SubHeightC − 1, yCtbC + y + j ) (8-1236)
- В противном случае, применяется следующее:
vy + j = Clip3( 0, pic_height_in_luma_samples/SubHeightC − 1, yCtbC + y + j ) (8-1237)
- Переменную applyVirtualBoundary определяют следующим образом:
- Если [[одно или несколько из]] следующее условие [[]] является истинным (true), переменную applyVirtualBoundary устанавливают равной 0:
- Нижняя граница текущего блока дерева кодирования является нижней границей изображения.
- [[Нижняя граница текущего блока дерева кодирования является нижней границей кирпича, и флаг loop_filter_across_bricks_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования является нижней границей среза и флаг loop_filter_across_slices_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования является одной из нижних виртуальных границ изображения и флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1.]]
- В противном случае, переменную applyVirtualBoundary устанавливают равной 1.
- Смещения r1 и r2 реконструированных отсчетов специфицированы в Табл. 8-22 в соответствии с горизонтальной позицией y отсчета яркостной состaвляющей и переменной applyVirtualBoundary.
В качестве альтернативы, условие «нижняя граница текущего блока дерева кодирования является нижней границей изображения» может быть заменено условием «нижняя граница текущего блока дерева кодирования является нижней границей изображения или находится вне этого изображения».
5.4 Вариант #4
Этот вариант показывает пример, в котором не разрешено использование отсчетов ниже области единицы VPDU в процессе классификации при фильтрации ALF (соответствует подразделу 7 в разделе 4).
8.8.5.3 Способ определения транспонирования фильтра ALF и индекса фильтра для отсчетов яркостной составляющей
Входными данными для этой процедуры являются:
- позиция ( xCtb, yCtb ) яркостной составляющей, специфицирующая верхний левый отсчет текущего блока дерева кодирования яркостной составляющей относительно верхнего левого отсчета текущего изображения,
- массив recPictureL реконструированных отсчетов яркостной составляющей изображения прежде процедуры адаптивной контурной фильтрации.
Выходными данными этой процедуры являются
- массив классификационных индексов фильтров filtIdx[ x ][ y ] при x, y = 0..CtbSizeY − 1,
- массив индексов транспонирования transposeIdx[ x ][ y ] при x, y = 0..CtbSizeY − 1.
Позиция ( hx + i, vy + j ) для каждого из соответствующих отсчетов ( x, y ) яркостной составляющей внутри рассматриваемого конкретного массива recPicture отсчетов яркостной составляющей при i, j = −2..5 определяют следующим образом:
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение xCtb + x − PpsVirtualBoundariesPosX[ n ] не меньше 0 и меньше 2 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( PpsVirtualBoundariesPosX[ n ], pic_width_in_luma_samples − 1, xCtb + x + i ) (8-1193)
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosX[ n ] − xCtb − x больше 0 и меньше 6 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( 0, PpsVirtualBoundariesPosX[ n ] − 1, xCtb + x + i ) (8-1194)
- В противном случае, применяется следующее:
hx + i = Clip3( 0, pic_width_in_luma_samples − 1, xCtb + x + i ) (8-1195)
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение yCtb + y − PpsVirtualBoundariesPosY[ n ] не меньше 0 и меньше 2 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( PpsVirtualBoundariesPosY[ n ], pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1196)
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosY[ n ] − yCtb − y больше 0 и меньше 6 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( 0, PpsVirtualBoundariesPosY[ n ] − 1, yCtb + y + j ) (8-1197)
- В противном случае, применяется следующее:
- Если yCtb + CtbSizeY не меньше to pic_height_in_luma_samples, применяется следующее:
vy + j = Clip3( 0, pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1198)
- В противном случае, если y меньше CtbSizeY − 4, применяется следующее:
vy + j = Clip3( 0, yCtb + CtbSizeY − 5, yCtb + y + j ) (8-1199)
- В противном случае, применяется следующее:
vy + j = Clip3( yCtb + CtbSizeY − 4, pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1200)
Массив классификационных индексов фильтров filtIdx и массив индексов транспонирования transposeIdx посредством следующих упорядоченных этапов:
1. Переменные 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[ hx, vy ] << 1 ) − recPicture[ hx − 1, vy ] − recPicture[ hx + 1, vy ] ) (8-1201)
filtV[ x ][ y ] = Abs( ( recPicture[ hx, vy ] << 1 ) − recPicture[ hx, vy − 1 ] − recPicture[ hx, vy + 1 ] ) (8-1202)
filtD0[ x ][ y ] = Abs( ( recPicture[ hx, vy ] << 1 ) − recPicture[ hx − 1, vy − 1 ] − recPicture[ hx + 1, vy + 1 ] ) (8-1203)
filtD1[ x ][ y ] = Abs( ( recPicture[ hx, vy ] << 1 ) − recPicture[ hx + 1, vy − 1 ] − recPicture[ hx − 1, vy + 1 ] ) (8-1204)
- В противном случае, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] и filtD1[ x ][ y ] устанавливают равными 0.
2. Переменные minY, maxY и ac определяют следующим образом:
- Если ( y << 2 ) равно (min(CtbSizeY, 64)-8) [[( CtbSizeY − 8 )]] и ( yCtb + CtbSizeY ) меньше pic_height_in_luma_samples – 1, переменную minY устанавливают равной −2, переменную maxY устанавливают равной 3 и переменную ac устанавливают равной 96.
- В противном случае, если ( y << 2 ) равно (min(CtbSizeY, 64)-4) [[( CtbSizeY − 4 )]] и ( yCtb + CtbSizeY ) меньше pic_height_in_luma_samples – 1, переменную minY устанавливают равной 0, переменную maxY устанавливают равной 5, и переменную ac устанавливают равной 96.
- В противном случае, переменную minY устанавливают равной −2, и переменную maxY устанавливают равной 5, и переменную ac устанавливают равной 64.
3. Переменные 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[ h(x << 2 ) + i − xCtb ][ v(y << 2) + j − yCtb ] with i = −2..5, j = minY..maxY (8-1205)
sumV[ x ][ y ] = ΣiΣj filtV[ h(x << 2 ) + i − xCtb ][ v(y << 2) + j − yCtb ] with i = −2..5, j = minY..maxY (8-1206)
sumD0[ x ][ y ] = ΣiΣj filtD0[ h(x << 2 ) + i − xCtb ][ v(y << 2) + j − yCtb ] with i = −2..5, j = minY..maxY (8-1207)
sumD1[ x ][ y ] = ΣiΣj filtD1[ h(x << 2 ) + i − xCtb ][ v(y << 2) + j − yCtb ] with i = −2..5, j = minY..maxY (8-1208)
sumOfHV[ x ][ y ] = sumH[ x ][ y ] + sumV[ x ][ y ] (8-1209)
4. Переменные dir1[ x ][ y ], dir2[ x ][ y ] и dirS[ x ][ y ] при x, y = 0..CtbSizeY − 1 определяют следующим образом:
- Переменные hv1, hv0 и dirHV определяют следующим образом:
- Переменные d1, d0 и dirD определяют следующим образом:
5. Переменную 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 } (8-1227)
avgVar[ x ][ y ] = varTab[ Clip3( 0, 15, ( sumOfHV[ x >> 2 ][ y >> 2 ] * ac ) >> ( 3 + BitDepthY ) ) ] (8-1228)
6. Массив классификационных индексов фильтров 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 (8-1229)
5.5 Вариант #5
Для отсчетов, расположенных на границах нескольких типов (например, границе среза/кирпича, виртуальной границе на 360 градусов), процедуру заполнения привлекают только однажды. И то, как много линий нужно заполнить с каждой стороны, зависит от позиции текущего отсчета относительно границ.
В одном из примеров, применяется 2-сторонний способ заполнения для фильтрации ALF. В качестве альтернативы, кроме того, согласно способу симметричного 2-стороннего заполнения, когда отсчет находится на двух границах, например, на одной границе на стороне сверху и одной границе на стороне снизу, решение о том, как много отсчетов заполняют, принимают на основе более близкой границы, как показано на Фиг. 27. При этом, когда определяют классификационную информацию, используют только четыре линии между двумя границами, как показано на Фиг. 27.
На Фиг. 26 показан пример способов заполнения для случая, когда 4 линии отсчетов находятся на двух границах. В одном из примеров, первая граница на Фиг. 26 может представлять собой виртуальную границу фильтрации ALF; вторая граница на Фиг. 25 может быть границей среза/плитки/кирпича или виртуальной границей на 360 градусов.
5.6 Вариант #6
8.8.5.2 Процедура фильтрации блока дерева кодирования для отсчетов яркостной составляющей
Входными данными для этой процедуры являются:
- массив recPictureL реконструированных отсчетов яркостной составляющей изображения прежде процедуры адаптивной контурной фильтрации,
- массив alfPictureL фильтрованных реконструированных отсчетов яркостной составляющей изображения,
- позиция ( xCtb, yCtb ) яркостной составляющей, специфицирующая верхний левый отсчет текущего блока дерева кодирования яркостной составляющей относительно верхнего левого отсчета текущего изображения.
Выходными данными этой процедуры является массив alfPictureL модифицированных фильтрованных реконструированных отсчетов яркостной составляющей изображения.
Процедуру определения индекса фильтра согласно статье 8.8.5.3 привлекают с использованием позиции ( xCtb, yCtb ) и массива recPictureL реконструированных отсчетов яркостной составляющей изображения в качестве входных данных, а индексы filtIdx[ x ][ y ] и transposeIdx[ x ][ y ] при x, y = 0..CtbSizeY − 1 в качестве выходных данных.
- Позиции ( hx + i, vy + j ) для каждого из соответствующих отсчетов яркостной составляющей ( x, y ) яркостной составляющей внутри рассматриваемого конкретного массива recPicture отсчетов яркостной составляющей при i, j = −3..3 определяют следующим образом:
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение xCtb + x − PpsVirtualBoundariesPosX[ n ] не меньше 0 и меньше 3 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( PpsVirtualBoundariesPosX[ n ], pic_width_in_luma_samples − 1, xCtb + x + i ) (8-1197)
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosX[ n ]− xCtb − x больше 0 и меньше 4 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( 0, PpsVirtualBoundariesPosX[ n ] − 1, xCtb + x + i ) (8-1198)
- В противном случае, применяется следующее:
hx + i = Clip3( 0, pic_width_in_luma_samples − 1, xCtb + x + i ) (8-1199)
- [[Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение yCtb + y − PpsVirtualBoundariesPosY[ n ] не меньше 0 и меньше 3 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( PpsVirtualBoundariesPosY[ n ], pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1200)
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosY[ n ] − yCtb − y больше 0 и меньше 4 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( 0, PpsVirtualBoundariesPosY[ n ] − 1, yCtb + y + j ) (8-1201)]]
- [[В противном случае, ]]Применяется следующее:
vy + j = Clip3( 0, pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1202)
- [[Переменную applyVirtualBoundary определяют следующим образом:
- Если одно или несколько следующих условий являются «истинным» (true), переменную applyVirtualBoundary устанавливают равной 0:
- Нижняя граница текущего блока дерева кодирования является нижней границей изображения.
- Нижняя граница текущего блока дерева кодирования является нижней границей кирпича и флаг loop_filter_across_bricks_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования является нижней границей среза и флаг loop_filter_across_slices_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования является одной из нижних виртуальных границ изображения и флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1.
- В противном случае, переменную applyVirtualBoundary устанавливают равной 1.]]
- Переменные boundaryPos1 и boundaryPos2 определяют путем привлечения процедуры определения позиции вертикальной границы для отсчетов яркостной составляющей, как это специфицировано в разделе 8.8.5.5 при yCtb равно yCtb и y равно y.
Таблица 8-24 – Спецификации значений r1, r2, и r3 в соответствии с горизонтальной позицией y отсчета яркостной составляющей и переменными [[applyVirtualBoundary]] boundaryPos1 и boundaryPos2.
8.8.5.3 Процедура определения транспонирования фильтрации ALF и индекса фильтра для отсчетов яркостной составляющей
Входными данными для этой процедуры являются:
- позиция ( xCtb, yCtb ) яркостной составляющей, специфицирующая верхний левый отсчет текущего блока дерева кодирования яркостной составляющей относительно верхнего левого отсчета текущего изображения,
- массив recPictureL реконструированных отсчетов яркостной составляющей изображения прежде процедуры адаптивной контурной фильтрации.
Выходными данными процедуры являются
- массив классификационных индексов фильтров filtIdx[ x ][ y ] при x, y = 0..CtbSizeY − 1,
- массив индексов транспонирования transposeIdx[ x ][ y ] при x, y = 0..CtbSizeY − 1.
Позиции ( hx + i, vy + j ) для каждого из соответствующих отсчетов ( x, y ) яркостной составляющей внутри рассматриваемого конкретного массива recPicture отсчетов яркостной составляющей при i, j = −2..5 определяют следующим образом:
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение xCtb + x − PpsVirtualBoundariesPosX[ n ] не меньше 0 и меньше 2 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( PpsVirtualBoundariesPosX[ n ], pic_width_in_luma_samples − 1, xCtb + x + i ) (8-1208)
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosX[ n ] − xCtb − x больше 0 и меньше 6 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( 0, PpsVirtualBoundariesPosX[ n ] − 1, xCtb + x + i ) (8-1209)
- В противном случае, применяется следующее:
hx + i = Clip3( 0, pic_width_in_luma_samples − 1, xCtb + x + i ) (8-1210)
- [[Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение yCtb + y − PpsVirtualBoundariesPosY[ n ] не меньше 0 и меньше 2 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( PpsVirtualBoundariesPosY[ n ], pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1211)
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosY[ n ] − yCtb − y больше 0 и меньше 6 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( 0, PpsVirtualBoundariesPosY[ n ] − 1, yCtb + y + j ) (8-1212)
- В противном случае, применяется следующее:
- Если значение yCtb + CtbSizeY не меньше pic_height_in_luma_samples, применяется следующее:
vy + j = Clip3( 0, pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1213)
- В противном случае, if y is less than CtbSizeY − 4, применяется следующее:
vy + j = Clip3( 0, yCtb + CtbSizeY − 5, yCtb + y + j ) (8-1214)
- В противном случае, применяется следующее:
vy + j = Clip3( yCtb + CtbSizeY − 4, pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1215)]]
- Переменные boundaryPos1 и boundaryPos2 определяют путем привлечения процедуры определения позиции вертикальной границы для отсчетов яркостной составляющей, как это специфицировано в разделе 8.8.5.5 при yCtb равно yCtb и y равно y.
- Если пересенная boundaryPos1 равна −1 и переменная boundaryPos2 равна −1, применяется следующее:
hx + i = Clip3( 0, pic_width_in_luma_samples − 1, xCtb + x + i ) (8-1211)
- В противном случае, если переменная boundaryPos1 не равна −1 и переменная boundaryPos2 равна −1, применяется следующее:
- Если y меньше boundaryPos1, применяется следующее:
vy + j = Clip3( 0, yCtb + boundaryPos1 − 1, yCtb + y + j ) (8-1215)
- В противном случае, если y не меньше boundaryPos1, применяется следующее:
vy + j = Clip3( Ctb + boundaryPos1, pic_height_in_luma_samples − 1, yCtb + y + j )
(8-1216)
- В противном случае (boundaryPos1 не равно −1 и boundaryPos2 не равно −1), применяется следующее:
- Если y меньше boundaryPos1, применяется следующее:
vy + j = Clip3( 0, yCtb + boundaryPos1 − 1, yCtb + y + j ) (8-1215)
- В противном случае, если y не меньше boundaryPos2, применяется следующее:
vy + j = Clip3( yCtb + boundaryPos2, pic_height_in_luma_samples − 1, yCtb + y + j ) (8-1216)
- В противном случае (y больше boundaryPos1 не больше boundaryPos2), применяется следующее:
vy + j = Clip3( yCtb + boundaryPos1, yCtb + boundaryPos2 − 1, yCtb + y + j ) (8-1216)
Массив классификационных индексов фильтров filtIdx и массив индексов транспонирования transposeIdx определяют посредством следующих упорядоченных этапов:
1. Переменные 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[ hx, vy ] << 1 ) − recPicture[ hx − 1, vy ] − (8-1216)
recPicture[ hx + 1, vy ] )
filtV[ x ][ y ] = Abs( ( recPicture[ hx, vy ] << 1 ) − recPicture[ hx, vy − 1 ] − (8-1217)
recPicture[ hx, vy + 1 ] )
filtD0[ x ][ y ] = Abs( ( recPicture[ hx, vy ] << 1 ) − recPicture[ hx − 1, vy − 1 ] − (8-1218)
recPicture[ hx + 1, vy + 1 ] )
filtD1[ x ][ y ] = Abs( ( recPicture[ hx, vy ] << 1 ) − recPicture[ hx + 1, vy − 1 ] − (8-1219)
recPicture[ hx − 1, vy + 1 ] )
- В противном случае, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] и переменную filtD1[ x ][ y ] уставнавливают равной 0.
2. Переменные minY, maxY и ac определяют следующим образом:
- Если ( y << 2 ) равно ( CtbSizeY − 8 ) и ( yCtb + CtbSizeY ) меньше значения pic_height_in_luma_samples − 1, переменную minY устанавливают равной −2, переменную maxY устанавливают равной 3, и переменную ac устанавливают равной 96.
- В противном случае, если ( y << 2 ) равно ( CtbSizeY − 4 ) и ( yCtb + CtbSizeY ) меньше значения pic_height_in_luma_samples − 1, переменную minY устанавливают равной 0, переменную maxY устанавливают равной 5 и переменную ac устанавливают равной 96.
- Переменные boundaryPos1 и boundaryPos2 определяют путем привлечения процедуры определения позиции вертикальной границы для отсчетов яркостной составляющей, как это специфицировано в разделе 8.8.5.5 при yCtb равно yCtb и y равно y.
- Если переменная boundaryPos1 не равна −1 и переменная boundaryPos2 равна −1, применяется следующее:
- Если y равно boundaryPos1 – 4, переменную minY устанавливают равной −2, переменную maxY устанавливают равной 3 и переменную ac устанавливают равной 96.
- В противном случае, если y равно boundaryPos1, переменную minY устанавливают равной 0, переменную maxY устанавливают равной 5 и переменную ac is set equal to 96.
- В противном случае, переменную minY устанавливают равной -2, переменную maxY устанавливают равной 5 и переменную ac устанавливают равной 64.
- В противном случае, если переменная boundaryPos1 не равна −1 и переменная boundaryPos2 не равна −1, применяется следующее:
- Если y равно boundaryPos1 – 4, переменную minY устанавливают равной -2, переменную maxY устанавливают равной 3 и переменную ac устанавливают равной 96.
- В противном случае, если y равно boundaryPos2, переменную minY устанавливают равной 0, переменную maxY устанавливают равной 5 и переменную ac устанавливают равной 96.
- В противном случае, еслт y равно boundaryPos1 и boundaryPos2 не меньше boundaryPos2 + 8, переменную minY устанавливают равной 0, переменную maxY устанавливают равной 5 и переменную ac устанавливают равной 96.
- В противном случае, если y равно boundaryPos1 и boundaryPos2 равно boundaryPos2 + 4, переменную minY устанавливают равной 0, переменную maxY устанавливают равной 3 и переменную ac устанавливают равной 128.
- В противном случае, если y равно boundaryPos2 – 4 и boundaryPos2 не меньше boundaryPos2 + 8, переменную minY устанавливают равной -2, переменную maxY устанавливают равной 3 и переменную ac устанавливают равной 96.
- В противном случае, переменную minY устанавливают равной -2, переменную maxY устанавливают равной 5 и переменную ac устанавливают равной 64.
- В противном случае (boundaryPos1 равно −1 и boundaryPos2 равно −1), переменную minY устанавливают равной -2, переменную maxY устанавливают равной 5 и переменную ac устанавливают равной 64.
- [[В противном случае, переменную minY устанавливают равной −2, переменную maxY устанавливают равной 5 и переменную ac устанавливают равной 64.]]
3. Переменные sumH[ x ][ y ], sumV[ x ][ y ], sumD0[ x ][ y ], sumD1[ x ][ y ] и sumOfHV[ x ][ y ] при x, y = 0..( CtbSizeY − 1 ) >> 2 определяют следующим образом:
sumH[ x ][ y ] = ΣiΣj filtH[ h(x << 2 ) + i − xCtb ][ v(y << 2) + j − yCtb ] при i = −2..5, j = minY..maxY (8-1220)
sumV[ x ][ y ] = ΣiΣj filtV[ h(x << 2 ) + i − xCtb ][ v(y << 2) + j − yCtb ] при i = −2..5, j = minY..maxY (8-1221)
sumD0[ x ][ y ] = ΣiΣj filtD0[ h(x << 2 ) + i − xCtb ][ v(y << 2) + j − yCtb ] при i = −2..5, j = minY..maxY (8-1222)
sumD1[ x ][ y ] = ΣiΣj filtD1[ h(x << 2 ) + i − xCtb ][ v(y << 2) + j − yCtb ] при i = −2..5, j = minY..maxY (8-1223)
sumOfHV[ x ][ y ] = sumH[ x ][ y ] + sumV[ x ][ y ] (8-1224)
8.8.5.4 Способ фильтрации блока дерева кодирования для отсчетов цветностной составляющей filtering process for chroma samples
Входными данными для этой процедуры являются:
- массив recPicture реконструированных отсчетов цветностной составляющей изображения прежде процедуры адаптивной контурной фильтрации,
- массив alfPicture фильтрованных реконструированных отсчетов цветностной составляющей изображения,
- позиция ( xCtbC, yCtbC ) цветностной составляющей, специфицирующая верхний левый отсчет текущего блока дерева кодирования цветностной составляющей относительно верхнего левого отсчета текущего изображения.
Выходными данными этой процедуры является массив alfPicture модифицированных фильтрованных реконструированных отсчетов цветностной составляющей изображения.
Ширину и высоту, ctbWidthC и ctbHeightC, текущего блока дерева кодирования цветностной составляющей определяют следующим образом:
ctbWidthC = CtbSizeY/SubWidthC (8-1245)
ctbHeightC = CtbSizeY/SubHeightC (8-1246)
Для определения фильтрованных реконструированных отсчетов 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 определяют следующим образом:
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение xCtbC + x − PpsVirtualBoundariesPosX[ n ]/SubWidthC не меньше 0 и меньше 2 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( PpsVirtualBoundariesPosX[ n ]/SubWidthC, (8-1247)
pic_width_in_luma_samples/SubWidthC − 1, xCtbC + x + i )
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosX[ n ]/SubWidthC − xCtbC − x больше 0 и меньше 3 для любого n = 0..pps_num_ver_virtual_boundaries − 1, применяется следующее:
hx + i = Clip3( 0, PpsVirtualBoundariesPosX[ n ]/SubWidthC − 1, xCtbC + x + i ) (8-1248)
- В противном случае, применяется следующее:
hx + i = Clip3( 0, pic_width_in_luma_samples/SubWidthC − 1, xCtbC + x + i ) (8-1249)
- [[Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение yCtbC + y − PpsVirtualBoundariesPosY[ n ]/SubHeightC не меньше 0 и меньше 2 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( PpsVirtualBoundariesPosY[ n ]/SubHeightC , (8-1250)
pic_height_in_luma_samples/SubHeightC − 1, yCtbC + y + j )
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosY[ n ]/SubHeightC − yCtbC − y больше 0 и меньше 3 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
vy + j = Clip3( 0, PpsVirtualBoundariesPosY[ n ]/SubHeightC − 1, yCtbC + y + j ) (8-1251)
- В противном случае,]] Применяется следующее:
vy + j = Clip3( 0, pic_height_in_luma_samples/SubHeightC − 1, yCtbC + y + j )
(8-1252)
- [[Переменную applyVirtualBoundary определяют следующим образом:
- Если одно или несколько из следующих условий являются «истинными» (true), applyVirtualBoundary устанавливают равной 0:
- Нижняя граница текущего блока дерева кодирования является нижней границей изображения.
- Нижняя граница текущего блока дерева кодирования является нижней границей кирпича и флаг loop_filter_across_bricks_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования является нижней границей среза и флаг loop_filter_across_slices_enabled_flag равен 0.
- Нижняя граница текущего блока дерева кодирования является одной из нижних виртуальных границ изображения и флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1.
- В противном случае, переменную applyVirtualBoundary устанавливают равной 1.]]
- Переменную boundaryPos1 и переменную boundaryPos2 определяют путем привлечения процедуры определения позиции вертикальной границы для отсчетов яркостной составляющей, как это специфицировано в разделе 8.8.5.5 при yCtb равно yCtb и y равно y.
- Переменную boundaryPos1 устанавливают равной boundaryPos1/SubWidthC.
- Переменную boundaryPos2 устанавливают равной boundaryPos2/SubWidthC.
- Смещения r1 и r2 реконструированных отсчетов, специфицируют в Табл. 8-24 в соответствии с горизонтальной позицией y отсчета яркостной составляющей и переменной applyVirtualBoundary.
- Переменную curr определяют следующим образом:
curr = recPicture[ hx, vy ] (8-1253)
- Массив коэффициентов f[ j ] фильтрации цветностной составляющей и массив значений c[ j ] усечения цветностной составляющей определяют следующим образом при j = 0..5:
f[ j ] = AlfCoeffC[ slice_alf_aps_id_chroma ][ j ] (8-1254)
c[ j ] = AlfClipC[ slice_alf_aps_id_chroma ][ j ] (8-1255)
- Переменную sum определяют следующим образом:
sum = f[0]*(Clip3(−c[0], c[0], recPicture[hx,vy+r2]−curr)+
Clip3(−c[0],c[0],recPicture[hx,vy−r2]−curr))+ f[1] * (Clip3(−c[1], c[1], recPicture[hx + 1, vy + r1] −curr)+Clip3(−c[1],c[1],recPicture[hx−1,vy−r1]−curr))+ f[2]*(Clip3(−c[2],c[2],recPicture[hx,vy + r1] −curr)+Clip3(−c[2],c[2],recPicture[hx,vy−r1]−curr))+(8-1256) f[3]*(Clip3(−c[3],c[ 3 ], recPicture[hx−1,vy+r1]−curr)+Clip3(−c[3], c[3], recPicture[hx+ 1, vy− r1]−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 ) (8-1257)
- Модифицированный фильтрованный реконструированный отсчет alfPicture[ xCtbC + x ][ yCtbC + y ] цветностной составляющей изображения определяют следующим образом:
- Если флаг pcm_loop_filter_disabled_flag и значения pcm_flag[ ( xCtbC + x ) * SubWidthC ][ ( yCtbC + y ) * SubHeightC ] оба равны 1, применяется следующее:
alfPicture[ xCtbC + x ][ yCtbC + y ] = recPictureL[ hx, vy ] (8-1258)
- В противном случае (флаг pcm_loop_filter_disabled_flag равен 0 или флаг pcm_flag[ x ][ y ] равен 0), применяется следующее:
alfPicture[ xCtbC + x ][ yCtbC + y ] = Clip3( 0, ( 1 << BitDepthC ) − 1, sum )
(8-1259)
[[Таблица 8-25 – Спецификации смещения r1 и r2 в соответствии с горизонтальной позицией y отсчета яркостной составляющей и переменной applyVirtualBoundary]]
[[условие r1 r2
( y = = ctbHeightC − 2 | | y = = ctbHeightC − 3 ) && ( applyVirtualBoundary = = 1 ) 0 0
( y = = ctbHeightC − 1 | | y = = ctbHeightC − 4 ) && ( applyVirtualBoundary = = 1 ) 1 1
В противном случае 1 2]]
Таблица 8-25 – Спецификация смещения r1 и r2 в соответствии с горизонтальной позицией y отсчета яркостной составляющей и переменными boundaryPos1 и boundaryPos2
условие r1 r2
( y = = boundaryPos1 − 1 | | y = = boundaryPos1 ) && ( boundaryPos1 > −1 && ( boundaryPos2 = = −1 | | boundaryPos2 >= boundaryPos1 + 4 ) ) 0 0
( y = = boundaryPos1 − 2 | | y = = boundaryPos1 + 1) && ( boundaryPos1 > −1 && ( boundaryPos2 = = −1 | | boundaryPos2 >= boundaryPos1 + 4 ) ) 1 1
( y = = boundaryPos1 − 1 | | y = = boundaryPos1 | | y = = boundaryPos2 − 1 | | y = = boundaryPos2 ) && ( boundaryPos1 > −1 && boundaryPos2 = = boundaryPos1 + 2 ) ) 0 0
( y = = boundaryPos1 − 2 | | y = = boundaryPos2 + 1 ) && ( boundaryPos1 > −1 && boundaryPos2 = = boundaryPos1 + 2 ) ) 1 1
В противном случае 1 2

8.8.5.5 Процедура определения позиции вертикальной границы для отсчетов яркостной составляющей
Входными данными для этой процедуры являются:
- позиция yCtb яркостной составляющей, специфицирующая вертикальную позицию верхнего левого отсчета текущего блока дерева кодирования яркостной составляющей относительно верхнего левого отсчета текущего изображения.
- позиция y яркостной составляющей, специфицирующая вертикальную позицию текущего пикселя относительно верхнего левого отсчета текущего блока дерева кодирования яркостной составляющей.
Выходными данными этой процедуры являются:
- вертикальная позиция boundaryPos1 границы сверху.
- вертикальная позиция boundaryPos2 границы снизу.
- Переменную boundaryPos1 определяют следующим образом:
- Переменную boundaryPos1 устанавливают равной −1.
- Если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение yCtb + y − PpsVirtualBoundariesPosY[ n ] не меньше 0 и меньше 3 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
boundaryPos1 = PpsVirtualBoundariesPosY[ n ] (8-1201)
- В противном случае, если флаг pps_loop_filter_across_virtual_boundaries_disabled_flag равен 1 и значение PpsVirtualBoundariesPosY[ n ] − yCtb − y больше 0 и меньше 4 для любого n = 0..pps_num_hor_virtual_boundaries − 1, применяется следующее:
boundaryPos1 = PpsVirtualBoundariesPosY[ n ] (8-1201)
- Переменную boundaryPos2 определяют следующим образом:
- Переменную boundaryPos2 устанавливают равной −1.
- Если нижняя граница текущего блока дерева кодирования является нижней границей кирпича и флаг loop_filter_across_bricks_enabled_flag равен 0, применяется следующее:
- Если CtbSizeY – y меньше 4, переменную boundaryPos2 устанавливают равной CtbSizeY.
- В противном случае, если нижняя граница текущего блока дерева кодирования является нижней границей среза, и флаг loop_filter_across_slices_enabled_flag равен 0, применяется следующее:
- Если CtbSizeY – y меньше 4, переменную boundaryPos2 устанавливают равной CtbSizeY.
- В противном случае, если верхняя граница текущего блока дерева кодирования является верхней границей кирпича и флаг loop_filter_across_bricks_enabled_flag равен 0, применяется следующее:
- Если y меньше 3, переменную boundaryPos2 устанавливают равной 0.
- В противном случае, если верхняя граница текущего блока дерева кодирования является верхней границей среза и флаг loop_filter_across_slices_enabled_flag равен 0, применяется следующее:
- Если y меньше 3, переменную boundaryPos2 устанавливают равной 0.
- Если переменная boundaryPos1 равна −1, применяется следующее:
- Переменная boundaryPos1 равна переменной boundaryPos2.
- Переменная boundaryPos2 равна −1.
- Переменную applyVirtualBoundary определяют следующим образом:
- Если одно или несколько из следующих услолвий являются «истинными» (true), переменную applyVirtualBoundary устанавливают равной 0:
- Нижняя граница текущего блока дерева кодирования является нижней границей изображения.
- В противном случае, переменную applyVirtualBoundary устанавливают равной 1.
- Если переменная applyVirtualBoundary равна 1, применяется следующее:
- Если переменная boundaryPos1 равна −1, переменную boundaryPos1 устанавливают равной CtbSizeY – 4.
- В противном случае, если переменная boundaryPos2 равна −1, переменную boundaryPos2 устанавливают равной CtbSizeY – 4.
- Если переменная boundaryPos1 не равна −1 и переменная boundaryPos1 не равна −1, применяется следующее:
- Если переменная boundaryPos1 равна boundaryPos2, переменную boundaryPos2 устанавливают равной −1.
- В противном случае, если переменная boundaryPos1 больше переменной boundaryPos2, применяется следующее:
- Переменную tmpPos устанавливают равной boundaryPos2.
- Переменную boundaryPos2 устанавливают равной boundaryPos1.
Переменную boundaryPos1 устанавливают равной tmpPos.
5.7 Вариант #7
Для единицы CTU, это может не совпадать с какой-либо границей (например, границей изображения/среза/плитки/кирпича/суб-изображения). Однако может оказаться необходимо обращаться и получить доступ к отсчетам вне текущей единицы (например, изображения/среза/плитки/кирпича/суб-изображения). Если фильтрация, пересекающая границу среза, не активизирована (например, флаг loop_filter_across_slices_enabled_flag равен «ложно» (false)) необходимо заполнить отсчет вне текущей единицы.
Например, для отсчета 2801 (принятого в качестве примера отсчета яркостной составляющей) на Фиг. 28, отсчеты, используемые в процедуре фильтрации ALF, могут быть заполнены, как показано на Фиг. 29.
На Фиг. 22 представлена блок-схема устройства 2200 для обработки видео. Это устройство 2200 может быть использовано для осуществления одного или нескольких способов, описываемых здесь. Устройство 2200 может быть реализовано в смартфоне, планшете, компьютере, приемнике Интернета вещей (Internet of Things (IoT)) и т.д. Устройство 2200 может содержать один или несколько процессоров 2202, одно или несколько запоминающих устройств 2204 и аппаратуру 2206 для обработки видео. Процессор (ы) 2202 может быть конфигурирован для реализации одного или нескольких способов, описываемых в настоящем документе. Запоминающее устройство (устройства) 2204 может быть использовано для сохранения данных и кода, применяемых для осуществления способов и технологий, описываемых здесь. Аппаратура 2206 для обработки видео может быть использована для реализации, в аппаратной схеме, некоторых способов и технологий, описываемых в настоящем документе. В некоторых вариантах, аппаратура 2206 для обработки видео может находиться внутри процессоров 2202 (например, графического процессора).
В некоторых вариантах, предлагаемые здесь способы кодировании видео могут быть осуществлены с использованием устройства, реализованного на аппаратной платформе, как описано применительно к Фиг. 22.
На Фиг. 23 представлена логическая схема примера способа 2300 обработки видео. Этот способ содержит определение (2302), для преобразования между текущим видеоблоком видео и представлением этого текущего видеоблока в виде потока битов данных, одного или нескольких интерполяционных фильтров для использования в процессе преобразования, где эти один или несколько интерполяционных фильтров выбраны из совокупности нескольких интерполяционных фильтров для видео, и осуществление (2304) преобразования с использованием этих одного или нескольких интерполяционных фильтров.
Различные технические решения и варианты, предлагаемые в настоящем документе, далее описаны с использованием списка технических решений.
Раздел 4, поз. 1 предлагает дополнительные примеры следующих решений.
1. Способ обработки видео, содержащий: осуществление преобразования между видеоблоками видеоизображения и представлением этих блоков в виде потока битов данных, где видеоблоки обрабатывают с использованием логических группирований блоков дерева кодирования, где эти блоки дерева кодирования обрабатывают на основе того, находится ли нижняя граница нижнего блока дерева кодирования за пределами нижней границы этого видеоизображения.
2. Способ согласно решению 1, в котором процедура обработки блока дерева кодирования содержит осуществление адаптивной контурной фильтрации значений отсчетов из блока дерева кодирования с использованием отсчетов в пределах этого блока дерева кодирования.
3. Способ согласно решению 1, в котором процедура обработки блока дерева кодирования содержит осуществление адаптивной контурной фильтрации значений отсчетов из блока дерева кодирования путем отмены активизации разбиения блока дерева кодирования на две части в соответствии с виртуальными границами.
Раздел 4, поз. 2 предлагает дополнительные примеры следующих технических решений.
4. Способ обработки видео, содержащий: определение, на основе условия для блока дерева кодирования из текущего видеоблока, статуса использования виртуальных отсчетов в процессе внутриконтурной фильтрации; и осуществление преобразования между видеоблоком и представлением этого видеоблоком в виде потока битов данных, согласованно со статусом использования виртуальных отсчетов.
5. Способ согласно решению 4, в котором логическое значение «истинно» (true) для статуса использования указывает, что текущий видеоблок разбивают по меньшей мере на две части виртуальной границей и для фильтрации отсчетов в одной части не разрешается использовать информацию из другой части.
6. Способ согласно решению 4, в котором логическое значение «истинно» (true) для статуса использования указывает, что виртуальные отсчеты используются в процессе внутриконтурной фильтрации, и в котором внутриконтурная фильтрация осуществляется с использованием модифицированных значений реконструированных отсчетов текущего видеоблока.
7. Способ согласно решению 4, в котором логическое значение «ложно» (false) для статуса использования указывает, что для фильтрации отсчетов в блоке разрешено использовать информацию из этого же самого блока.
8. Способ согласно решению 4, в котором логическое значение «истинно» (true) для статуса использования указывает, что внутриконтурная фильтрация осуществляется применительно к реконструированным отсчетам текущего видеоблока без дальнейшей модификации реконструированных отсчетов.
9. Способ согласно какому-либо из решений 4 – 8, в котором указанное условие специфицирует, что для статуса использования следует установить логическое значение «ложно» (false), если рассматриваемый блок дерева кодирования имеет специальный размер.
10. Способ согласно какому-либо из решений 4 – 8, в котором указанное условие специфицирует, что для статуса использования следует установить логическое значение «ложно» (false), если рассматриваемый блок дерева кодирования имеет размер больше специального размера.
11. Способ согласно какому-либо из решений 4 – 8, в котором указанное условие специфицирует, что для статуса использования следует установить логическое значение «ложно» (false), если рассматриваемый блок дерева кодирования имеет размер меньше специального размера.
Раздел 4, поз. 3 предлагает дополнительные примеры следующих технических решений.
12. Способ согласно решению 5, в котором указанное условие зависит от того, является ли нижняя граница текущего видеоблока нижней границей единицы видео, которая меньше видеоизображения, или эта нижняя граница текущего видеоблока является виртуальной границей.
13. Способ согласно решению 12, в котором указанное условие зависит от того, является ли нижняя граница текущего видеоблока нижней границей среза или плитки или кирпича.
14. Способ согласно решению 12, в котором указанное условие специфицирует, что следует установить для статуса использования логическое значение «истинно» (true), когда нижняя граница текущего видеоблока является нижней границей среза или плитки или кирпича.
15. Способ согласно решению 4 – 12, в котором указанное условие специфицирует, что следует установить для статуса использования логическое значение «ложно» (false), когда нижняя граница текущего видеоблока является нижней границей изображения или находится за пределами нижней границы изображения
Раздел 4, поз. 4 предлагает дополнительные примеры следующих технических решений.
16. Способ обработки видео, содержащий: определение, в процессе преобразования между видеоизображением, которое логически сгруппировано в один или несколько видео срезов или видео кирпичей, и представлением этого видеоизображения в виде потока битов данных, что следует отменить активизацию использования отсчетов из другого отсчета или среза в процессе адаптивной контурной фильтрации; и осуществление преобразования в соответствии с результатами этого определения.
Раздел 4, поз. 5 предлагает дополнительные примеры следующих технических решений.
17. Способ обработки видео, содержащий: определение, в процессе преобразования между текущим видеоблоком видеоизображения и представлением этого текущего видеоблока в виде потока битов данных, что текущий видеоблок содержит отсчеты, расположенные на границе единицы видео этого видеоизображения; и осуществление преобразования на основе указанного определения, и в котором осуществление преобразования содержит генерацию виртуальных отсчетов для процедуры внутриконтурной фильтрации с использованием унифицированного способа, являющегося одинаковым для всех типов границ в указанном видеоизображении.
18. Способ согласно решению 17, в котором единица видео представляет собой срез или плитку или круговое видео на 360 градусов.
19. Способ согласно решению 17, в котором процедура внутриконтурной фильтрации содержит адаптивную контурную фильтрацию.
20. Способ согласно какому-либо из решений 17 – 19, в котором указанный унифицированный способ представляет собой способ двустороннего заполнения.
21. Способ согласно какому-либо из решений 17 – 20, в котором указанный унифицированный способ состоит в том, когда доступ к отсчетам, находящимся ниже первой линии не разрешен и заполнение используется для генерации виртуальных отсчетов для тех, которые находятся ниже первой линии, тогда устанавливают, что доступ к отсчетам, находящимся выше второй линии, тоже не разрешен и заполнение используется для генерации виртуальных отсчетов для тех, какие находятся выше второй линии.
22. Способ согласно какому-либо из решений 17 – 20, в котором указанный унифицированный способ состоит в том, когда доступ к отсчетам, находящимся выше первой линии не разрешен и заполнение используется для генерации виртуальных отсчетов для тех, которые находятся выше первой линии, тогда устанавливают, что доступ к отсчетам, находящимся ниже второй линии, тоже не разрешен и заполнение используется для генерации виртуальных отсчетов для тех, какие находятся ниже второй линии.
23. Способ согласно какому-либо из решений 21-22, в котором расстояние между первой линией и текущей линией, где располагается текущий отсчет, подлежащий фильтрации, и расстояние между второй линией и первой линией равны.
Раздел 4, поз. 6 предлагает дополнительные примеры следующих технических решений.
24. Способ обработки видео, содержащий: определение, что следует применить, в процессе преобразования между текущим видеоблоком видеоизображения и представлением этого блока в виде потока битов данных, один из нескольких доступных для этого видеоизображения в процессе преобразования способов выбора отсчетов для адаптивного контурного фильтра (ALF); и осуществление преобразования с применением указанного одного из нескольких способов выбора отсчетов для фильтрации ALF.
25. Способ согласно решению 24, в котором совокупность указанных нескольких способов выбора отсчетов для фильтрации ALF содержит первый способ, согласно которому отсчеты выбирают прежде применения внутриконтурного фильтра к текущему видеоблоку в процессе преобразования, и второй способ, согласно которому отсчеты выбирают после применения внутриконтурной фильтрации к текущему видеоблоку в процессе преобразования.
Раздел 4, поз. 7 предлагает дополнительные примеры следующих технических решений.
26. Способ обработки видео, содержащий: осуществление, на основе граничного правила, операции внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением этого текущего видеоблока в виде потока битов данных; где указанное граничное правило отменяет активизацию использования отсчетов, пересекающих единицу данных виртуального конвейера (VPDU) видеоизображения, и осуществление указанного преобразования с использованием результатов операции внутриконтурной фильтрации.
27. Способ согласно решению 26, в котором единица VPDU соответствует области видеоизображения, имеющей фиксированный размер.
28. Способ согласно какому-либо из решений 26 – 27, в котором указанное граничное правило далее специфицирует, что следует использовать виртуальные отсчеты для внутриконтурной фильтрации вместо отсчетов, использование которых не активизировано.
29. Способ согласно решению 28, в котором виртуальные отсчеты генерируют путем заполнения.
Раздел 4, поз. 8 предлагает дополнительные примеры следующих технических решений.
30. Способ обработки видео, содержащий: осуществление, на основе граничного правила, операции внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением этого текущего видеоблока в виде потока битов данных; где указанное граничное правило специфицирует использование, для позиций текущего видеоблока через границу единицу видео, отсчетов, генерируемых без использования заполнения; и осуществление преобразования с использованием результата операции внутриконтурной фильтрации.
31. Способ согласно решению 30, в котором отсчеты генерируют с использованием способа двустороннего заполнения.
32. Способ согласно решению 30, в котором указанная операция внутриконтурной фильтрации содержит использование одного и того же способа генерации виртуальных отсчетов для симметрично расположенных отсчетов в ходе операции внутриконтурной фильтрации.
33. Способ согласно какому-либо из решений 30 – 32, в котором операция внутриконтурной фильтрации над отсчетами текущего видеоблока содержит осуществление переформирования отсчетов текущего видеоблока прежде применения внутриконтурной фильтрации.
Раздел 4, поз. 9 предлагает дополнительные примеры следующих технических решений.
34. Способ обработки видео, содержащий: осуществление, на основе граничного правила, операции внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением этого текущего видеоблока в виде потока битов данных; где это граничное правило специфицирует выбор, для операции внутриконтурной фильтрации, фильтра, имеющего такие размеры, что отсчеты текущего видеоблока, используемые для внутриконтурной фильтрации, не пересекает границу единицы видео из видеоизображения; и осуществление преобразования с использованием результата операции внутриконтурной фильтрации.
Раздел 4, поз. 10 предлагает дополнительные примеры следующих технических решений.
35. Способ обработки видео, содержащий: осуществление, на основе граничного правила, операции внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением этого текущего видеоблока в виде потока битов данных; где указанное граничное правило специфицирует выбор, для операции внутриконтурной фильтрации, параметров усечения или коэффициентов фильтрации на основе того, нужны ли отсчеты заполнения для внутриконтурной фильтрации или нет; и осуществление указанного преобразования с использованием результата операции внутриконтурной фильтрации.
36. Способ согласно решению 35, в котором параметры усечения или коэффициенты фильтрации включены в представление в виде потока битов данных.
Раздел 4, поз. 11 предлагает дополнительные примеры следующих технических решений.
37. Способ обработки видео, содержащий: осуществление, на основе граничного правила операции внутриконтурной фильтрации над отсчетами текущего видеоблока видеоизображения в процессе преобразования между текущим видеоблоком и представлением этого текущего видеоблока в виде потока битов данных; где указанное граничное правило зависит от идентификатора цветовой составляющей текущего видеоблока; и осуществление указанного преобразования с использованием результата операции внутриконтурной фильтрации.
38. Способ согласно решению 37, в котором указанное граничное правило различается для яркостной составляющей и/или разных цветовых составляющих.
39. Способ согласно какому-либо из решений 1 – 38, в котором указанная процедура преобразования содержит кодирование текущего видеоблока с превращение его в представление в виде потока битов данных.
40. Способ согласно какому-либо из решений 1 – 38, в котором указанная процедура преобразования содержит декодирование представления в виде потока битов данных для генерации значений отсчетов для текущего видеоблока.
41. Устройство для кодирования видео, содержащее процессор, конфигурированный для осуществления способа, описанного в каком-либо одном или нескольких решений 1 – 38.
42. Устройство для декодирования видео, содержащее процессор, конфигурированный для осуществления способа, описанного в каком-либо одном или нескольких решений 1 – 38.
43. Читаемый компьютером носитель информации, имеющий сохраненный на нем код, этот код, при выполнении его процессором, побуждает процессор осуществлять способ, описанного в каком-либо одном или нескольких решений 1 – 38.
На Фиг. 30 представлена блок-схема, показывающая пример системы 3000 обработки видео, в которой могут быть реализованы различные описываемые здесь способы. Различные варианты реализации могут содержать некоторые или все компоненты системы 3000. Система 3000 может содержать вход 3002 для приема видео контента. Этот видео контент может быть принят в необработанном («сыром») или несжатом формате, например, 8 или 10-битовые многокомпонентные значения пикселей, либо может быть в сжатом или кодированном формате. Вход 3002 может представлять собой сетевой интерфейс, интерфейс периферийных шин или интерфейс запоминающих устройств. К примерам сетевого интерфейса относятся проводные интерфейсы, такие как Этернет, пассивная оптическая сеть (passive optical network (PON)) и т.п., и беспроводные интерфейсы, такие как Wi-Fi или сотовые интерфейсы.
Система 3000 может содержать кодирующий компонент 3004, который может реализовать различные способы кодирования, описываемые в настоящем документе. Кодирующий компонент 3004 может уменьшить среднюю частоту передачи битов данных видео при их прохождении от входа 3002 к выходу кодирующего компонента 3004 для создания кодированного представления этого видео. Поэтому технологии кодирования иногда называют технологиями сжатия видео или технологиями транскодирования видео. Выходные данные кодирующего компонента 3004 могут быть либо сохранены, либо переданы через присоединенные средства связи, представленные здесь компонентом 3006. Сохраняемое или передаваемое (или кодированное) представление видео в виде потока битов данных, принимаемое на вход 3002, может быть использовано компонентом 3008 для генерации значений пикселей или представляемого на дисплее видео, передаваемого интерфейсу 3010 дисплея. Процедура генерации просматриваемого пользователем видео из его представления в виде потока битов данных иногда называется декомпрессией (расширением) видео. Кроме того, хотя некоторые операции обработки видео называются операциями или инструментами «кодирования», следует понимать, что инструменты или операции кодирования используются в кодирующем устройстве и соответствующие инструменты или операции декодирования, которые обращают результаты кодирования, будут осуществляться декодирующим устройством.
Примеры интерфейса шины периферийных устройств или интерфейса дисплея могут представлять собой универсальную последовательную шину (universal serial bus (USB)) или мультимедийный интерфейс высокой четкости (high definition multimedia interface (HDMI)) или Displayport, и т.д. К примерам интерфейса запоминающих устройств относятся интерфейс усовершенствованного последовательного соединения (SATA (serial advanced technology attachment)), интерфейс периферийных устройств (PCI), интерфейс IDE и другие подобные интерфейсы. Способы, описываемые в настоящем документе, могут быть реализованы в разнообразных электронных устройствах, таких как мобильные телефоны, портативные компьютеры, смартфоны или другие устройства, способные осуществлять цифровую обработку данных и/или представлять видео на дисплее.
На Фиг. 31 показана логическая схема представления способа 3100 обработки видео в соответствии с предлагаемой технологией. Способ 3100 содержит, в ходе операции 3110, определение, для преобразования между блоком, входящим в видеоизображение из видео, и представлением этого видео в виде потока битов данных, способа заполнения первой группы отсчетов, расположенных через границы нескольких видеообластей видеоизображения, для текущего отсчета в процессе адаптивной контурной фильтрации. Этот способ 3100 также содержит, в ходе операции 3120, осуществление указанного преобразования согласно результатам определения.
В некоторых вариантах, процедура адаптивной контурной фильтрации содержит классификацию отсчетов или фильтрацию отсчетов. В некоторых вариантах, область видео содержит срез, кирпич, плитку или суб-изображение. В некоторых вариантах, предлагаемый способ специфицирует, что значения отсчетов первой группы заполняют значениями отсчетов второй группы, расположенной в той же видеообласти, где находится текущий отсчет.
В некоторых вариантах, позиции отсчетов второй группы определяют на основе усечения вертикальных координат первой группы отсчетов в горизонтальном направлении для получения ближайших позиций, вертикальные координаты которых расположены в той же видеообласти, где находится текущий отсчет. В некоторых вариантах, позиции отсчетов второй группы далее определяют на основе избирательного усечения горизонтальных координат первой группы отсчетов в вертикальном направлении для получения ближайших позиций, горизонтальные координаты которых расположены в той же видеообласти, где находится текущий отсчет.
В некоторых вариантах, позиции отсчетов второй группы определяют на основе усечения горизонтальных координат первой группы отсчетов в вертикальном направлении для получения ближайших позиций, горизонтальные координаты которых расположены в той же видеообласти, где находится текущий отсчет. В некоторых вариантах, позиции отсчетов второй группы далее определяют на основе избирательного усечения вертикальных координат первой группы отсчетов в горизонтальном направлении для получения ближайших позиций, вертикальные координаты которых расположены в той же видеообласти, где находится текущий отсчет.
В некоторых вариантах, позиции отсчетов второй группы определяют на основе усечения позиций первой группы отсчетов в обоих – горизонтальном и вертикальном, направлениях для получения ближайших позиций, которые расположены в той же видеообласти, где находится текущий отсчет. В некоторых вариантах, отсчет в первой группе отсчетов находится в позиции (x1, y1) и усечение этого отсчета осуществляют к позиции (x2, y2). Расстояние в горизонтальном направлении обозначено как |x1-x2|. Расстояние в вертикальном направлении обозначено как |y1-y2|. Расстояние между двумя позициями обозначено как |x1-x2|+|y1-y2| или (x1-x2)2+(y1-y2)2.
В некоторых вариантах, способ специфицирует, что фильтрация текущего отсчета не активизирована. В некоторых вариантах, способ специфицирует, что использование первой группы отсчетов не разрешается при классификации отсчетов. В некоторых вариантах, применим ли предлагаемый способ к рассматриваемому блоку, основано на том, совпадает ли этот блок с границей нескольких видеообластей. В некоторых вариантах, этот способ применим к блоку в случае, когда блок не совпадает ни с одной из границ нескольких видеообластей и отсчет из первой группы отсчетов необходим в процессе адаптивной контурной фильтрации. В некоторых вариантах, предлагаемый способ применим к блоку в случае: (1) этот блок не совпадает ни с одной из границ нескольких видеообластей, (2) отсчет из первой группы отсчетов необходим в процессе адаптивной контурной фильтрации, и (3) фильтрация первой группы отсчетов не разрешена. В некоторых вариантах, предлагаемый способ применим к рассматриваемому блоку в случае: (1) этот блок не совпадает ни с одной из границ нескольких видеообластей, (2) отсчет из первой группы отсчетов необходим в процессе адаптивной контурной фильтрации, (3) другой отсчет, расположенный в той же самой видеообласти, где находится рассматриваемый блок, необходим в процессе адаптивной контурной фильтрации, и (4) фильтрация первой группы отсчетов не разрешена. В некоторых вариантах, указанная видеообласть представляет собой срез.
В некоторых вариантах, симметричный способ заполнения, согласно которому отсчеты заполнения генерируют с использованием отсчетов по обе стороны от границы, не применим к первой группе отсчетов. В некоторых вариантах, односторонний способ заполнения, согласно которому отсчеты заполнения генерируют с использованием отсчетов с одной стороны от границы, не применим к первой группе отсчетов.
На Фиг. 32 показана логическая схема представления способа 3200 обработки видео в соответствии с предлагаемой технологией. Способ 3200 содержит, в ходе операции 3210, определение, для преобразования между блоком из видеоизображения в составе видео и представлением этого видео в виде потока битов данных, операции равномерного заполнения, генерирующей отсчеты для текущего отсчета в блоке в процессе адаптивной контурной фильтрации, когда блок совпадает с границей по меньшей мере одного типа для нескольких видеообластей видеоизображения. Этот способ 3200 также содержит, в ходе операции 3220, осуществление преобразования на основе результатов определения.
В некоторых вариантах, процедура равномерного заполнения содержит использование отсчетов с одной стороны от границы. В некоторых вариантах, процедура равномерного заполнения содержит использование отсчетов по обе стороны от границы. В некоторых вариантах, операция равномерного заполнения применяется к блоку, когда этот блок совпадает с границами нескольких типов и фильтрация отсчетов, расположенных через границы нескольких видеообластей видеоизображения, не активизирована.
На Фиг. 33 показано представление логической схемы способа 3300 для обработки видео. Этот способ 3300 содержит, в ходе операции 3310, определение, для преобразования между блоком видеоизображения в составе видео и представлением этого видео в виде потока битов данных, способа, согласно которому операция заполнения привлекается в процессе адаптивной контурной фильтрации для текущего отсчета, расположенного между границами двух типов нескольких видеообластей. Один из этих двух типов границ представляет собой виртуальную границу на 360 градусов. Этот способ 3300 также содержит, в ходе операции 3320, осуществление преобразования в соответствии с результатами определения.
В некоторых вариантах, этот способ специфицирует, что операцию заполнения привлекают только один раз в процессе адаптивной контурной фильтрации. В некоторых вариантах, операция заполнения содержит операцию симметричного заполнения, в ходе которой отсчеты заполнения генерируют с использованием отсчетов, находящихся по обе стороны от границы. В некоторых вариантах, операция заполнения содержит операцию одностороннего заполнения, в ходе которой отсчеты заполнения генерируют с использованием отсчетов, расположенных с одной стороны от границы.
В некоторых вариантах, предлагаемый способ специфицирует, что операцию заполнения привлекают вместе по меньшей мере с одной другой операцией заполнения в процессе адаптивной контурной фильтрации в соответствии с некоторым порядком. В некоторых вариантах, рассматриваемую операцию заполнения применяют прежде указанной по меньшей мере другой операции заполнения. Рассматриваемая операция заполнения содержит операцию одностороннего заполнения, в ходе которой отсчеты заполнения генерируют с использованием отсчетов, расположенных с одной стороны от границы, и при этом указанная по меньшей мере одна другая операция заполнения содержит операцию симметричного заполнения, в ходе которой отсчеты заполнения генерируют с использованием отсчетов, расположенных по обе стороны от границы. В некоторых вариантах, отсчеты заполнения после осуществления операции заполнения используются в качестве доступных отсчетов в ходе указанной по меньшей мере одной другой операции заполнения.
В некоторых вариантах, когда другой из упомянутых двух типов границ представляет собой виртуальную границу адаптивной контурной фильтрации или фактическую границу нескольких видеообластей, предлагаемый способ специфицирует, что операция заполнения содержит только операцию симметричного заполнения, в ходе которой отсчеты заполнения генерируют с использованием отсчетов, расположенных по обе стороны от границы. В некоторых вариантах, когда другой из указанных двух типов границ содержит фактическую границу видеоизображении, предлагаемый способ специфицирует, что операция заполнения содержит только одностороннюю операцию заполнения, в ходе которой отсчеты заполнения генерируют с использованием отсчетов, расположенных с одной стороны от границы. В некоторых вариантах, если один из указанных двух типов границ не совпадает с блоком, предлагаемый способ специфицирует, что операция заполнения содержит только операцию симметричного заполнения, в ходе которой отсчеты заполнения генерируют с использованием отсчетов, расположенных по обе стороны от границы. В некоторых вариантах, предлагаемый способ специфицирует, что операция заполнения содержит только операцию симметричного заполнения, в ходе которой отсчеты заполнения генерируют с использованием отсчетов, расположенных по обе стороны от границы.
В некоторых вариантах, процедура преобразования содержит кодирование видео и превращение его в представление в виде потока битов данных. В некоторых вариантах, процедура преобразования содержит декодирование представления в виде потока битов данных для превращения его в видео.
Исходя из изложенного выше, должно быть понятно, что конкретные варианты предлагаемой здесь технологии были описаны для целей иллюстрации, однако могут быть внесены разнообразные модификации, не отклоняясь от объема настоящего изобретения. Соответственно, предлагаемая настоящим документом технология, ничем не ограничивается за исключением прилагаемой Формулы изобретения.
Некоторые варианты предлагаемой технологии содержат принятие решения или определение, что следует активизировать инструменты или режим обработки видео. В одном из примеров, когда эти инструменты или режим активизированы, кодирующее устройство будет использовать или реализовывать эти инструменты или режим при обработке блока видео, но может необязательно модифицировать полученный в результате поток битов данных на использования инструментов или режима. Иными словами, процедура преобразования от блока видео к представлению этого видео в виде потока битов данных будет использовать указанных инструменты или режим обработки видео, когда они активизированы на основе принятого решения или определения. В другом примере, когда указанные инструменты или режим обработки видео активизированы, декодирующее устройство будет обрабатывать поток битов данных, зная, что этот поток битов данных был модифицирован на основе этих инструментов или режимов обработки видео. Иными словами, преобразование от представления видео в виде потока битов данных к блоку видео будет осуществляться с использованием указанных инструментов или режима обработки видео, которые были активизированы на основе принятого решения или определения.
Некоторые варианты предлагаемой технологии содержат принятие решения или определение, что следует отменить активизацию инструментов или режима обработки видео. В одном из примеров, когда указанные инструменты или режим обработки видео не активизированы, кодирующее устройство не будет использовать указанные инструменты или режим при преобразовании блока видео в представление этого видео в виде потока битов данных. В другом примере, когда указанные инструменты или режим обработки видео не активизированы, декодирующее устройство будет обрабатывать поток битов данных, зная, что этот поток биток данных не был модифицирован с использованием указанных инструментов или режима обработки видео, которые были активизированы на основе принятого решения или результатов определения.
Реализация предмета настоящего изобретения и функциональных операций, описываемых в настоящем патентном документе, может быть осуществлена в различных системах, цифровых электронных схемах или в компьютерном загружаемом программном обеспечении, встроенном программном обеспечении или аппаратуре, включая структуры, рассматриваемые в настоящем описании и в его структурных эквивалентах, либо в комбинациях одного или нескольких перечисленных выше объектов. Варианты осуществления предмета настоящего изобретения, рассматриваемые в настоящем описании, могут быть реализованы в виде одного или нескольких компьютерных программных продуктов, например, одного или нескольких модулей компьютерных программных команд, кодированных на материальном и энергонезависимом читаемом компьютером носителе информации для выполнения устройством обработки данных или управления работой этого устройства. Такой читаемый компьютером носитель может представлять собой машиночитаемое устройство для хранения информации, машиночитаемую подложку для хранения информации, запоминающее устройство, материал (композицию), влияющий на машиночитаемый распространяющийся сигнал, или комбинацию одного или нескольких перечисленных выше объектов. Термин «модуль обработки данных» или «устройство обработки данных», охватывает всю аппаратуру, устройства и машины для обработки данных, включая в качестве примеров, программируемый процессор, компьютер, либо несколько процессоров или компьютеров. Такое устройство может содержать, в дополнение к аппаратуре, код, создающий среду для выполнения рассматриваемой компьютерной программы, например, код, составляющий встроенное программное обеспечение процессора, стек протоколов, систему управления базой данных, операционную систему или комбинацию одно или нескольких таких объектов.
Компьютерная программа (также известная как программа, программное обеспечение, программное приложение, сценарий (скрипт) или код) может быть записана на каком-либо языке программирования, включая компилированные или интерпретируемые языки, и может быть развернута в любой форме, и в том числе в виде автономной программы или в виде модуля, компонента, процедуры или в виде другой программной единицы, подходящей для использования в компьютерной среде. Компьютерная программа не обязательно соответствует файлу в файловой системе. Программа может быть сохранена в части файла, сохраняющего также другие программы или данные (например, один или несколько сценариев, сохраняемых в документе на языке разметки), в одном файле, специализированном для сохранения рассматриваемой программы, или в нескольких скоординированных файлах (например, файлах, сохраняющих один или несколько модулей, подпрограмм или фрагментов кода). Компьютерная программа может быть развернута для выполнения на одном или нескольких компьютерах, расположенных в одном месте, либо распределенных в нескольких пунктах и соединенных сетью связи.
Процедуры и логические потоки, рассматриваемые в настоящем описании, могут быть осуществлены посредством одного или нескольких программируемых процессоров, выполняющих одну или несколько компьютерных программ для осуществления функций путем оперирования над входными данными и генерации выходных данных. Эти процедуры и логические потоки могут быть также осуществлены посредством, и устройство может быть выполнено в виде, логической схемы специального назначения, например, программируемой пользователем вентильной матрицы (FPGA (field programmable gate array)) или специализированной интегральной схемы (ASIC (application specific integrated circuit)).
Совокупность процессоров, подходящих для выполнения компьютерной программы, содержит, в качестве примера, микропроцессоры, как общего, так и специального назначения, и любые один или несколько процессоров для цифрового компьютера любого типа. В общем случае, процессор будет принимать команды и данные из постоянного запоминающего устройства и/или запоминающего устройства с произвольной выборкой. Основными элементами компьютера являются процессор для выполнения команд и одно или несколько запоминающих устройств для сохранения команд и данных. В общем случае, компьютер должен также содержать или быть оперативно связанным для приема данных и/или для передачи данных, с одним или несколькими запоминающими устройствами большой емкости для хранения данных, например, магнитными устройствами, магнитооптическими дисками или оптическими дисками. Однако компьютеру необязательно иметь такие устройства. К читаемым компьютером носителям для сохранения команд компьютерных программ и данных относятся все формы энергонезависимых запоминающих устройств и носителей информации, включая, например, полупроводниковые запоминающие устройства, например, стираемое, программируемое постоянное запоминающее устройство (СППЗУ (EPROM)), электрически стираемое программируемое запоминающее устройство (ЭСППЗУ (EEPROM)) и устройства флэш-памяти. Процессор и запоминающее устройство могут быть дополнены посредством или встроены в логическую схему специального назначения.
Настоящее описание вместе с прилагаемыми чертежами следует рассматривать только в качестве примеров. Как используется здесь, применение союза «или» должно также охватывать «и/или», если только контекст ясно не указывает иное.
Хотя настоящий патентный документ содержит много специфических деталей, их не следует толковать в качестве каких-либо ограничений объема какого-либо нововведения или того, что может быть заявлено в качестве изобретения, а просто как описания признаков, которые могут быть специфичными для конкретных вариантов конкретных нововведений. Некоторые признаки, описываемые в настоящем патентном документе в контексте раздельных вариантов, могут быть также реализованы в виде комбинации в одном варианте. Напротив, различные признаки, описываемые в контексте одного варианта, могут быть также реализованы в нескольких вариантах по отдельности или в какой-либо подходящей субкомбинации. Более того, хотя признаки могут быть описаны выше как действующие в определенных комбинациях и даже первоначально заявлены как таковые, один или несколько признаков из заявляемой комбинации могут быть в некоторых случаях исключены из этой заявляемой комбинации, так что эта заявляемая комбинация может быть превращена в субкомбинацию или вариации такой субкомбинации.
Аналогично, тогда как операции изображены на чертежах в конкретном порядке, это не следует понимать как требование, что такие операции должны выполняться в показанном конкретном порядке или в последовательном порядке или что все показанные операции должны быть выполнены для достижения желаемых результатов. Более того, разделение различных системных компонентов, описываемых в настоящем патентном документе, не следует понимать как требование такого разделения во всех вариантах.
Здесь описаны только несколько вариантов и примеров, однако и другие варианты реализации, усовершенствования и вариации могут быть созданы на основе того, что описано и иллюстрировано в настоящем документе.

Claims (45)

1. Способ обработки данных видео, содержащий этапы, на которых:
определяют, для преобразования между изображением видео, содержащим один или более блоков дерева кодирования, и потоком битов данных видео, что первый отсчет недоступен в ходе операции классификации для первой процедуры фильтрации для текущего отсчета в текущем блоке дерева кодирования, поскольку первый отсчет расположен в срезе, отличном от среза, в котором находится текущий отсчет, и в первой процедуре фильтрации не разрешено использовать отсчеты из разных срезов, причем все срезы изображения являются прямоугольными;
применяют процедуру заполнения для первого отсчета, причем значение первого отсчета заполняется на основе второго отсчета, который представляет собой ближайший доступный отсчет, расположенный в том же самом срезе, в котором находится текущий отсчет, при этом позиция второго отсчета определяется на основе:
когда первый отсчет недоступен из-за того, что вертикальная координата первого отсчета находится вне того же самого среза, в котором находится текущий отсчет, усечения вертикальной координаты первого отсчета до новой вертикальной координаты, которая представляет собой ближайшую вертикальную позицию, расположенную в том же самом срезе, в котором находится текущий отсчет; а
когда первый отсчет недоступен из-за того, что горизонтальная координата первого отсчета находится вне того же самого среза, в котором находится текущий отсчет, усечения горизонтальной координаты первого отсчета до новой горизонтальной координаты, которая представляет собой ближайшую горизонтальную позицию, расположенную в том же самом срезе, в котором находится текущий отсчет; и
выполняют преобразование посредством применения первой процедуры фильтрации на основе значения первого отсчета, заполненного на основе второго отсчета, при этом первая процедура фильтрации содержит:
определение, на основе операции классификации, набора коэффициентов фильтрации для текущего отсчета;
определение набора значений усечения для текущего отсчета; и
применение фильтра к текущему отсчету на основе набора коэффициентов фильтрации и набора значений усечения.
2. Способ по п. 1, в котором значение первого отсчета, заполненного на основе второго отсчета, используется для определения индекса классификационного фильтра в операции классификации, и индекс классификационного фильтра для области размером 4×4, содержащей текущий отсчет, определяется на основе градиентов, вычисленных на основе области размером 10×10, содержащей указанную область размером 4×4.
3. Способ по п. 1, в котором значение первого отсчета, заполненного на основе второго отсчета, также используется в фильтре первой процедуры фильтрации.
4. Способ по п. 1, в котором процедура заполнения применяется равномерным способом в случае, когда текущий блок дерева кодирования совпадает с границей другого типа, которая не является границей среза.
5. Способ по п. 1, дополнительно содержащий этап, на котором определяют, активизирована ли виртуальная граница для текущего блока дерева кодирования, на основе соотношения между нижней границей текущего блока дерева кодирования и нижней границей изображения.
6. Способ по п. 5, в котором виртуальная граница активизируется в случае, когда нижняя граница текущего блока дерева кодирования не является нижней границей изображения.
7. Способ по п. 1, в котором на этапе преобразования кодируют видео в поток битов данных.
8. Способ по п. 1, в котором на этапе преобразования декодируют видео из потока битов данных.
9. Устройство обработки данных видео, содержащее процессор и энергонезависимое запоминающее устройство с записанными в нем командами, причем команды при исполнении процессором вызывают выполнение процессором:
определения, для преобразования между изображением видео, содержащим один или более блоков дерева кодирования, и потоком битов данных видео, что первый отсчет для текущего отсчета в текущем блоке дерева кодирования недоступен в ходе операции классификации для первой процедуры фильтрации для текущего отсчета в текущем блоке дерева кодирования, поскольку первый отсчет расположен в срезе, отличном от среза, в котором находится текущий отсчет, и в первой процедуре фильтрации не разрешено использовать отсчеты из разных срезов, причем все срезы изображения являются прямоугольными;
применения процедуры заполнения для первого отсчета, причем значение первого отсчета заполняется на основе второго отсчета, который представляет собой ближайший доступный отсчет, расположенный в том же самом срезе, в котором находится текущий отсчет, при этом позиция второго отсчета определяется на основе:
когда первый отсчет недоступен из-за того, что вертикальная координата первого отсчета находится вне того же самого среза, в котором находится текущий отсчет, усечения вертикальной координаты первого отсчета до новой вертикальной координаты, которая представляет собой ближайшую вертикальную позицию, расположенную в том же самом срезе, в котором находится текущий отсчет; а
когда первый отсчет недоступен из-за того, что горизонтальная координата первого отсчета находится вне того же самого среза, в котором находится текущий отсчет, усечения горизонтальной координаты первого отсчета до новой горизонтальной координаты, которая представляет собой ближайшую горизонтальную позицию, расположенную в том же самом срезе, в котором находится текущий отсчет; и
выполнения преобразования посредством применения первой процедуры фильтрации на основе значения первого отсчета, заполненного на основе второго отсчета, причем первая процедура фильтрации содержит:
определение, на основе операции классификации, набора коэффициентов фильтрации для текущего отсчета;
определение набора значений усечения для текущего отсчета; и
применение фильтра к текущему отсчету на основе набора коэффициентов фильтрации и набора значений усечения.
10. Энергонезависимый, читаемый компьютером носитель для хранения информации, хранящий команды, которые вызывают выполнение процессором:
определения, для преобразования между изображением видео, содержащим один или более блоков дерева кодирования, и потоком битов данных видео, что первый отсчет для текущего отсчета в текущем блоке дерева кодирования недоступен в ходе операции классификации для первой процедуры фильтрации для текущего отсчета в текущем блоке дерева кодирования, поскольку первый отсчет расположен в срезе, отличном от среза, в котором находится текущий отсчет, и в первой процедуре фильтрации не разрешено использовать отсчеты из разных срезов, причем все срезы изображения являются прямоугольными;
применения процедуры заполнения для первого отсчета, причем значение первого отсчета заполняется на основе второго отсчета, который представляет собой ближайший доступный отсчет, расположенный в том же самом срезе, в котором находится текущий отсчет, при этом позиция второго отсчета определяется на основе:
когда первый отсчет недоступен из-за того, что вертикальная координата первого отсчета находится вне того же самого среза, в котором находится текущий отсчет, усечения вертикальной координаты первого отсчета до новой вертикальной координаты, которая представляет собой ближайшую вертикальную позицию, расположенную в том же самом срезе, в котором находится текущий отсчет; а
когда первый отсчет недоступен из-за того, что горизонтальная координата первого отсчета находится вне того же самого среза, в котором находится текущий отсчет, усечения горизонтальной координаты первого отсчета до новой горизонтальной координаты, которая представляет собой ближайшую горизонтальную позицию, расположенную в том же самом срезе, в котором находится текущий отсчет; и
выполнения преобразования посредством применения первой процедуры фильтрации на основе значения первого отсчета, заполненного на основе второго отсчета, причем первая процедура фильтрации содержит:
определение, на основе операции классификации, набора коэффициентов фильтрации для текущего отсчета;
определение набора значений усечения для текущего отсчета; и
применение фильтра к текущему отсчету на основе набора коэффициентов фильтрации и набора значений усечения.
11. Способ сохранения потока битов данных видео, содержащий этапы, на которых:
определяют, для изображения видео, содержащего один или более блоков дерева кодирования, что первый отсчет для текущего отсчета в текущем блоке дерева кодирования недоступен в ходе операции классификации для первой процедуры фильтрации текущего отсчета в текущем блоке дерева кодирования, поскольку первый отсчет расположен в срезе, отличном от среза, в котором находится текущий отсчет, и в первой процедуре фильтрации не разрешено использовать отсчеты из разных срезов, при этом все срезы изображения являются прямоугольными;
применяют процедуру заполнения для первого отсчета, причем значение первого отсчета заполняется на основе второго отсчета, который представляет собой ближайший доступный отсчет, расположенный в том же самом срезе, в котором находится текущий отсчет, причем позиция второго отсчета определяется на основе:
когда первый отсчет недоступен из-за того, что вертикальная координата первого отсчета находится вне того же самого среза, в котором находится текущий отсчет, усечения вертикальной координаты первого отсчета до новой вертикальной координаты, которая представляет собой ближайшую вертикальную позицию, расположенную в том же самом срезе, в котором находится текущий отсчет; и
когда первый отсчет недоступен из-за того, что горизонтальная координата первого отсчета находится вне того же самого среза, в котором находится текущий отсчет, усечения горизонтальной координаты первого отсчета до новой горизонтальной координаты, которая представляет собой ближайшую горизонтальную позицию, расположенную в том же самом срезе, в котором находится текущий отсчет;
генерируют поток битов данных путем применения первой процедуры фильтрации на основе значения первого отсчета, заполненного на основе второго отсчета; и
сохраняют поток битов данных на энергонезависимом читаемом компьютером носителе для записи информации,
причем первая процедура фильтрации содержит:
определение, на основе операции классификации, набора коэффициентов фильтрации для текущего отсчета;
определение набора значений усечения для текущего отсчета; и
применение фильтра к текущему отсчету на основе набора коэффициентов фильтрации и набора значений усечения.
RU2022100447A 2019-07-11 2020-07-13 Способ заполнения отсчетов при адаптивной контурной фильтрации RU2815441C2 (ru)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNPCT/CN2019/095657 2019-07-11

Publications (2)

Publication Number Publication Date
RU2022100447A RU2022100447A (ru) 2023-07-13
RU2815441C2 true RU2815441C2 (ru) 2024-03-15

Family

ID=

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102804776A (zh) * 2010-05-10 2012-11-28 联发科技股份有限公司 自适应回路滤波方法和装置
CN103891292A (zh) * 2011-10-24 2014-06-25 联发科技股份有限公司 非跨图块环路滤波方法及其装置
RU2639958C2 (ru) * 2013-04-17 2017-12-25 Нокиа Текнолоджиз Ой Устройство, способ и компьютерная программа для кодирования и декодирования видеоинформации
US10057574B2 (en) * 2015-02-11 2018-08-21 Qualcomm Incorporated Coding tree unit (CTU) level adaptive loop filter (ALF)

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102804776A (zh) * 2010-05-10 2012-11-28 联发科技股份有限公司 自适应回路滤波方法和装置
CN103891292A (zh) * 2011-10-24 2014-06-25 联发科技股份有限公司 非跨图块环路滤波方法及其装置
RU2639958C2 (ru) * 2013-04-17 2017-12-25 Нокиа Текнолоджиз Ой Устройство, способ и компьютерная программа для кодирования и декодирования видеоинформации
US10057574B2 (en) * 2015-02-11 2018-08-21 Qualcomm Incorporated Coding tree unit (CTU) level adaptive loop filter (ALF)

Similar Documents

Publication Publication Date Title
CN114128278B (zh) 自适应环路滤波中的样点填充
US20240107014A1 (en) Handling Video Unit Boundaries And Virtual Boundaries
CN114097225B (zh) 用于自适应环路滤波的样点确定
CN113994671B (zh) 基于颜色格式处理视频单元边界和虚拟边界
JP7318120B2 (ja) 適応ループフィルタリングにおけるパディングプロセス
US11683488B2 (en) Adaptive loop filtering between different video units
US11706462B2 (en) Padding process at unavailable sample locations in adaptive loop filtering
US11700368B2 (en) Classification in adaptive loop filtering
CN115362682A (zh) 视频比特流中编解码信息的信令通知
RU2815441C2 (ru) Способ заполнения отсчетов при адаптивной контурной фильтрации
RU2811461C2 (ru) Классификация в адаптивной контурной фильтрации
KR102669852B1 (ko) 적응적 루프 필터링을 위한 샘플 결정
CN114128296A (zh) 自适应环路滤波中跨视频单元边界访问样点
CN114902684A (zh) 控制视频编解码中的跨边界滤波