УСТРОЙСТВО КОДИРОВАНИЯ ДИНАМИЧЕСКОГО ИЗОБРАЖЕНИЯ, СПОСОБ КОДИРОВАНИЯ ДИНАМИЧЕСКОГО ИЗОБРАЖЕНИЯ, ПРОГРАММА КОДИРОВАНИЯ ДИНАМИЧЕСКОГО ИЗОБРАЖЕНИЯ, УСТРОЙСТВО ДЕКОДИРОВАНИЯ ДИНАМИЧЕСКОГО ИЗОБРАЖЕНИЯ, СПОСОБ ДЕКОДИРОВАНИЯ ДИНАМИЧЕСКОГО ИЗОБРАЖЕНИЯ И ПРОГРАММА ДЕКОДИРОВАНИЯ ДИНАМИЧЕСКОГО ИЗОБРАЖЕНИЯ
DYNAMIC IMAGE ENCODING DEVICE, DYNAMIC IMAGE ENCODING METHOD, DYNAMIC IMAGE ENCODING PROGRAM, DYNAMIC IMAGE DECODING DEVICE, DYNAMIC IMAGE DECODING METHOD AND DYNAMIC IMAGE DECODING PROGRAM

Уровень техники
Настоящее изобретение относится к способам кодирования и декодирования изображений, в которых изображение разделяется на блоки и выполняется предсказание.
При кодировании и декодировании изображения целевое изображение разделяется на блоки, каждый из которых является группой из заданного количества выборок, и обработка выполняется в блоках блоков. Разделение изображения на соответствующие блоки с соответствующими установками внутрикадрового предсказания и межкадрового предсказания позволяет повысить эффективность кодирования.
В патентном документе 1 раскрыта методика внутрикадрового предсказания, в которой получают предсказанного изображения с использованием декодированных выборок в блоке, соседнем с целевым блоком кодирования/декодирования.
[Патентный документ 1] JP 9–172644 A.
Раскрытие сущности изобретения
Однако в технологии, изложенной в патентном документе 1, для предсказания используются только декодированные выборки в блоке, соседнем с целевым блоком кодирования/декодирования, и это приводит к плохой эффективности предсказания.
В аспекте настоящего изобретения для решения вышеописанной проблемы предоставляется устройство, включающее в себя: блок получения блочного вектора-кандидата, который получает блочные векторы-кандидаты целевого блока кодирования в целевом изображении кодирования из информации кодирования, сохраненной в памяти для хранения информации кодирования; селектор, который выбирает подлежащий выбору блочный вектор из блочных векторов-кандидатов; запоминающее устройство, в котором хранятся кодированные изображения заданного количества стандартных блоков внутриблочного копирования, находящихся непосредственно перед целевым блоком кодирования; и блок коррекции границы опорной области, который удаляет кодированное изображение одного стандартного блока внутриблочного копирования, хранящегося в запоминающем устройстве, из области, на которую можно ссылаться, после завершения процесса кодирования целевого блока кодирования, и определяет, включены ли как верхняя левая позиция, так и нижняя правая позиция опорного блока, указанного выбранным блочным вектором, в область, на которую можно ссылаться.
Согласно настоящему изобретению предложен высокоэффективный процесс кодирования/декодирования изображений с низкой нагрузкой.
Краткое описание чертежей
Фиг. 1 – блок-схема устройства кодирования изображений согласно варианту осуществления настоящего изобретения.
Фиг. 2 – блок-схема устройства декодирования изображения согласно варианту осуществления настоящего изобретения.
Фиг. 3 – блок-схема алгоритма, иллюстрирующая операцию разделения блока дерева.
Фиг. 4 – схема, иллюстрирующая состояние разделения входного изображения на блоки дерева.
Фиг. 5 – схема, иллюстрирующая z-сканирование.
Фиг. 6A – схема, иллюстрирующая форму разделенного блока.
Фиг. 6B – схема, иллюстрирующая форму разделенного блока.
Фиг. 6C – схема, иллюстрирующая форму разделенного блока.
Фиг. 6D – схема, иллюстрирующая форму разделенного блока.
Фиг. 6E – схема, иллюстрирующая форму разделенного блока.
Фиг. 7 – блок-схема алгоритма, иллюстрирующая операцию разделения блока на четыре.
Фиг. 8 – блок-схема алгоритма, иллюстрирующая операцию разделения блока на два или три.
Фиг. 9 – синтаксис для выражения формы разделения блока.
Фиг. 10A – схема, иллюстрирующая внутрикадровое предсказание.
Фиг. 10B – схема, иллюстрирующая внутрикадровое предсказание.
Фиг. 11 – схема, иллюстрирующая опорные блоки для межкадрового предсказания.
Фиг. 12A – синтаксис для выражения режима предсказания блока кодирования.
Фиг. 12В – синтаксис для выражения режима предсказания блока кодирования.
Фиг. 13 – таблица, иллюстрирующая соответствие между элементами синтаксиса и режимами, которые относятся к межкадровому предсказанию.
Фиг. 14 – схема, иллюстрирующая компенсацию аффинного движения в двух контрольных точках.
Фиг. 15 – схема, иллюстрирующая компенсацию аффинного движения в трех контрольных точках.
Фиг. 16 – блок-схема подробной конфигурации блока 102 межкадрового предсказания (фиг. 1).
Фиг. 17 – блок-схема подробной конфигурации блока 301 получения режима предиктора нормального вектора движения (фиг. 16).
Фиг. 18 – блок-схема подробной конфигурации блока 302 получения режима нормального слияния (фиг. 16).
Фиг. 19 – блок-схема алгоритма, иллюстрирующая процесс получения режима предиктора нормального вектора движения блока 301 получения режима предиктора нормального вектора движения (фиг. 16).
Фиг. 20 – блок-схема алгоритма, иллюстрирующая процедуру обработки процесса получения режима предиктора нормального вектора движения.
Фиг. 21 – блок-схема алгоритма, иллюстрирующая процедуру обработки нормального процесса получения режима слияния.
Фиг. 22 – блок-схема подробной конфигурации блока 203 межкадрового предсказания (фиг. 2).
Фиг. 23 – блок-схема подробной конфигурации блока 401 получения режима предиктора нормального вектора движения (фиг. 22).
Фиг. 24 – блок-схема подробной конфигурации блока 402 получения режима нормального слияния (фиг. 22).
Фиг. 25 – блок-схема алгоритма, иллюстрирующая процесс получения режима предиктора нормального вектора движения блока 401 получения режима предиктора нормального вектора движения (фиг. 22).
Фиг. 26 – блок-схема алгоритма, иллюстрирующая процедуру обработки инициализации/обновления списка кандидатов предикторов вектора движения на основании истории.
Фиг. 27 – блок-схема алгоритма процедуры обработки подтверждения идентичного элемента в процедуре обработки инициализации/обновления списка кандидатов предикторов вектора движения на основании истории.
Фиг. 28 – блок-схема алгоритма процедуры обработки сдвига элемента в процедуре обработки инициализации/обновления списка кандидатов предикторов вектора движения на основании истории.
Фиг. 29 – блок-схема алгоритма, иллюстрирующая процедуру обработки получения кандидата предиктора вектора движения на основании истории.
Фиг. 30 – блок-схема алгоритма, иллюстрирующая процедуру обработки получения кандидатов слияния на основании истории.
Фиг. 31A – схема, иллюстрирующая пример процесса обновления списка кандидатов предиктора вектора движения на основании истории.
Фиг. 31B – схема, иллюстрирующая пример процесса обновления списка кандидатов предиктора вектора движения на основании истории.
Фиг. 31C – схема, иллюстрирующая процесса обновления списка кандидатов предиктора вектора движения на основании истории.
Фиг. 32 – схема, иллюстрирующая предсказание компенсации движения в случае, когда выполняется предсказание L0 и опорное изображение (RefL0Pic) L0 происходит в момент перед целевым изображением (CurPic).
Фиг. 33 – схема, иллюстрирующая предсказание с компенсацией движения в случае, когда выполняется предсказание L0 и опорное изображение предсказания L0 происходит в момент после целевого изображения.
Фиг. 34 – схема, иллюстрирующая направление предсказания компенсации движения в двунаправленном предсказании, в котором L0 предсказание опорного изображения происходит в момент перед целевым изображением и L1 предсказание опорного изображения происходит в момент после целевого изображения.
Фиг. 35 – схема, иллюстрирующая направление предсказания компенсации движения в двунаправленном предсказании, в котором L0 предсказание опорного изображения и L1 предсказание опорного изображения происходит в момент до целевого кадра.
Фиг. 36 – схема, иллюстрирующая направление предсказания компенсации движения в двунаправленном предсказании, в котором L0 предсказание опорного изображения и L1 предсказание опорного изображения происходит в момент, после целевого изображения.
Фиг. 37 – блок-схема, иллюстрирующая пример конфигурации аппаратных средств устройства для кодирования-декодирования согласно варианту осуществления настоящего изобретения.
Фиг.38 – блок-схема алгоритма, иллюстрирующая процедуру процесса получения усредненного кандидата слияния.
Фиг.39A – схема, иллюстрирующая действительную опорную область внутриблочного копирования.
Фиг.39B – схема, иллюстрирующая действительную опорную область внутриблочного копирования.
Фиг.40 – блок-схема подробной конфигурации блока 103 внутрикадрового предсказания (фиг.1).
Фиг.41 – блок-схема подробной конфигурации блока 204 внутрикадрового предсказания (фиг.2).
Фиг.42 – блок-схема блока 352 предсказания внутририблочного копирования.
Фиг.43 – блок-схема блока 362 предсказания внутририблочного копирования.
Фиг.44 – блок-схема алгоритма, иллюстрирующая процесс копирования внутрикадрового блока предсказания блока 352 предсказания внутририблочного копирования.
Фиг.45 – блок-схема алгоритма, иллюстрирующая процесс копирования внутрикадрового блока предсказания блока 362 предсказания внутририблочного копирования.
Фиг.46 – блок-схема алгоритма, иллюстрирующая процесс внутриблочного копирования в режиме слияния.
Фиг.47 - блок-схема алгоритма, иллюстрирующая процедуру выполнения процесса получения режима предсказания блочного вектора с внутририблочным копированием.
Фиг.48 – блок-схема алгоритма, иллюстрирующая процесс, выполняемый блоком 380 коррекции опорной позиции и блоком 480 коррекции опорной позиции.
Фиг.49 – схематичное представление, иллюстрирующее состояние коррекции опорной позиции.
Фиг.50A – схематичное представление, иллюстрирующее верхнюю левую и нижнюю правую позиции, когда область, на которую можно ссылаться, является прямоугольной.
Фиг.50B – схематичное представление, иллюстрирующее верхнюю левую и нижнюю правую позиции, когда область, на которую можно ссылаться, является прямоугольной.
Фиг.50C – схематичное представление, иллюстрирующее верхнюю левую и нижнюю правую позиции, когда область, на которую можно ссылаться, является прямоугольной.
Фиг.50D – схематичное представление, иллюстрирующее верхнюю левую и нижнюю правую позиции, когда область, на которую можно ссылаться, является прямоугольной.
Фиг.51 – блок-схема алгоритма, иллюстрирующая процесс коррекции опорной позиции участка, в котором область, на которую можно ссылаться, не является прямоугольной.
Фиг.52A – схематичное представление, иллюстрирующее состояние коррекции опорной позиции.
Фиг.52B – схематичное представление, иллюстрирующее состояние коррекции опорной позиции.
Фиг.53 – блок-схема алгоритма, иллюстрирующая процесс, выполняемый блоком 380 коррекции опорной позиции и блоком 480 коррекции опорной позиции.
Фиг.54A – схематичное представление, иллюстрирующее состояние разделения области, на которую можно ссылаться, на две области.
Фиг.54B – схематичное представление, иллюстрирующее состояние разделения области, на которую можно ссылаться, на две области.
Фиг.54C – схематичное представление, иллюстрирующее состояние разделения области, на которую можно ссылаться, на две области.
Фиг.54D – схематичное представление, иллюстрирующее состояние разделения области, на которую можно ссылаться, на две области.
Фиг.55 – блок-схема алгоритма, иллюстрирующая процесс разделения опорной области на две области и коррекции каждой из опорных позиций.
Фиг.56A – схематичное представление, иллюстрирующее область памяти опорной области, когда единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования.
Фиг.56B – схематичное представление, иллюстрирующее область памяти опорной области, когда единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования.
Фиг.56C – схематичное представление, иллюстрирующее область памяти опорной области, когда единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования.
Фиг.57A – схематичное представление, иллюстрирующее область памяти опорной области, когда действительная опорная область определяется при предположении, что единица получена путем разделения на четыре части блока дерева кодирования, в качестве стандартного блока внутриблочного копирования.
Фиг.57B – схематичное представление, иллюстрирующее область памяти опорной области, когда действительная опорная область определяется при предположении, что единица получена путем разделения на четыре части блока дерева кодирования, в качестве стандартного блока внутриблочного копирования.
Фиг.57C – схематичное представление, иллюстрирующее область памяти опорной области, когда действительная опорная область определяется при предположении, что единица получена путем разделения на четыре части блока дерева кодирования, в качестве стандартного блока внутриблочного копирования.
Фиг.57D – схематичное представление, иллюстрирующее область памяти опорной области, когда действительная опорная область определяется при предположении, что единица получена путем разделения на четыре части блока дерева кодирования, в качестве стандартного блока внутриблочного копирования.
Фиг.58 – блок-схема алгоритма, иллюстрирующая процедуру коррекции границы опорной области.
Фиг.59A – схематичное представление, иллюстрирующее разделение опорного блока в области памяти, когда единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования.
Фиг.59B – схематичное представление, иллюстрирующее разделение опорного блока в области памяти, когда единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования.
Фиг.60A – схематичное представление, иллюстрирующее разделение опорного блока в области памяти, когда действительная опорная область определяется при предположении, что единица получена путем разделения на четыре части блока дерева кодирования, в качестве стандартного блока внутриблочного копирования.
Фиг.60B – схематичное представление, иллюстрирующее разделение опорного блока в области памяти, когда действительная опорная область определяется при предположении, что единица получена путем разделения на четыре части блока дерева кодирования, в качестве стандартного блока внутриблочного копирования.
Осуществление изобретения
Прежде всего, будет описаны определения технологии и технические термины, используемые в настоящем варианте осуществления.
Блок дерева
В варианте осуществления целевое изображение кодирования/декодирования одинаково разделяется на заданный размер. Этот блок определяется как блок дерева. В то время, как на фиг. 4 размер блока дерева устанавливается равным 128×128 выборок, размер блока дерева этим не ограничивается и может быть установлен любой размер. Блок целевого дерева (соответствующий цели кодирования в процессе кодирования и цели декодирования в процессе декодирования) переключается в порядке растрового сканирования, то есть в порядке слева направо и сверху вниз. Внутренняя часть каждого блока дерева может быть дополнительно рекурсивно разделена. Блок кодирования/декодирования в результате рекурсивного разделения блока дерева определяется как блок кодирования. Блок дерева и блок кодирования вместе определяются как блок. Выполнение соответствующего разделения блока обеспечивает эффективное кодирование. Размер блока дерева может быть фиксированным значением, заранее определенным устройством для кодирования и устройством для декодирования, или можно принять конфигурацию, в которой размер блока дерева, определенный устройством для кодирования, передается в устройство для декодирования. Здесь максимальный размер блока дерева составляет 128×128 выборок и минимальный размер блока дерева равен 16×16 выборок. Максимальный размер блока кодирования составляет 64×64 выборки и минимальный размер блока кодирования равен 4×4 выборки.
Режим предсказания
Между внутрикадровым предсказанием (MODE_INTRA) для выполнения предсказания из сигнала, обработанного изображения целевого изображения, и межкадровым предсказанием (MODE_INTER) для выполнения предсказания из сигнала изображения обработанного изображения в блоках целевых блоков кодирования выполняется переключение.
В процессе кодирования используется обработанное изображение для изображения, полученного посредством декодирования кодированного сигнала, сигнала изображения, блока дерева, блока, блока кодирования и т.п. В процессе декодирования используется обработанное изображение для декодированного изображения, сигнала изображения, блока дерева, блока, блока кодирования и т.п.
Режим идентификации внутрикадрового предсказания (MODE_INTRA) и межкадрового предсказания (MODE_INTER) определяется как режим предсказания (PredMode). В качестве значения режим предсказания (PredMode) имеет внутрикадровое предсказание (MODE_INTRA) или межкадровое предсказание (MODE_INTER).
Предсказание с внутрикадровым копированием блока
Предсказание с внутрикадровым копированием блока представляет собой процесс кодирования/декодирования целевого блока по отношению к декодированной выборке в целевом изображении в качестве значения предсказания. Расстояние от целевого блока до опорной выборки представлено блочным вектором. Блочный вектор относится к целевому изображению, и опорное изображение определяется однозначным образом. Таким образом, нет необходимости предоставлять опорный индекс. Разница между блочным вектором и вектором движения заключается в том, является ли опорное изображение целевым изображением или обработанным изображением. В дополнение к этому, в случае блочного вектора точность выборки 1 или точность выборки 4 может быть выбрана с использованием адаптивного разрешения вектора движения (AMVR).
При внутриблочном копировании можно выбирать один из двух режимов: режим предсказания внутририблочного копирования или режим внутриблочного копирования со слиянием.
Режим предсказания внутририблочного копирования представляет собой режим определения блочного вектора целевого блока на основе предиктора блочного вектора, полученного из обработанной информации, и на основе разности блочных векторов. Предиктор блочного вектора получается из обработанного блока вблизи целевого блока и из индекса для точного определения предиктора блочного вектора. Индекс для точного определения предиктора блочного вектора и разности блочных векторов передаются в потоке битов.
Режим внутриблочного копирования со слиянием представляет собой режим получения информации предсказания внутририблочного копирования целевого блока из информации предсказания внутририблочного копирования обработанного блока вблизи целевого блока без передачи разности векторов движения.
Межкадровое предсказание
При межкадровом предсказании, в котором предсказание выполняется из сигнала изображения обработанного изображения, можно использовать множество обработанных изображений в качестве опорных изображений. Для управления множеством опорных изображений, определены два типа справочных списков L0 (справочный список 0) и L1 (справочный список 1). В каждом из списков опорное изображение указывается с использованием опорного индекса. В P-сегменте можно использовать L0 предсказание (Pred_L0). В B-сегменте можно использовать L0 предсказание (Pred_L0), L1 предсказание (Pred_L1) и двунаправленное предсказание (Pred_BI). L0 предсказание (Pred_L0) является межкадровым предсказанием, которое относится к опорному изображению, управляемому L0, в то время, как L1 предсказание (Pred_L1) является межкадровым предсказанием, которое относится к опорному изображению, управляемому с помощью L1. Двунаправленное предсказание (Pred_BI) является межкадровым предсказанием, в котором выполняются как L0 предсказание и L1 предсказание и ссылается на одно опорное изображение, управляемое в каждом из L0 и L1. Информация, определяющая L0 предсказание, L1 предсказание и двунаправленное предсказание, определяется как режим межкадрового предсказания. В следующем процессе обработки предполагается, что обработка будет выполняться для каждого из L0 и L1 для постоянных и переменных в выходных данных суффикса LX.
Режим предиктора вектора движения
Режим предиктора вектора движения является режимом передачи индекса для указания предиктора вектора движения, разности вектора движения, режима межкадрового предсказания и опорного индекса, и определения информации межкадрового предсказания целевого блока. Предиктор вектора движения получают из кандидата предиктора вектора движения, полученного из обработанного блока в соседнем целевом блоке или блоке, принадлежащем обработанному изображению, и расположенном в той же позиции или в окрестности (vicinity) целевого блока, и из индекса для указания предиктора вектора движения.
Режим слияния
Режим слияния является режимом извлечения информации межкадрового предсказания целевого блока из информации межкадрового предсказания обработанного блока в соседнем блоке целевого блока или блока, принадлежащего обработанному изображению и расположенного на той же позиции, что и целевой блок или в окрестностях целевого блока, без передачи разности вектора движения или опорного индекса.
Обработанный блок в соседнем блоке целевого блока и информация межкадрового предсказания обработанного блока определены как кандидаты пространственного слияния. Блоки, принадлежащие обработанному изображению и расположенные на той же позиции, что и целевой блок, или в окрестности (vicinity) целевого блока, и информация межкадрового предсказания, полученная из информации межкадрового предсказания блока, определяются как кандидаты временного слияния. Каждый из кандидатов слияния регистрируется в списке кандидатов слияния. Кандидат слияния, который будет использоваться для предсказания целевого блока, определяется индексом слияния.
Соседний блок
На фиг. 11 показана схема, иллюстрирующая опорные блоки, на которые следует ссылаться для получения информации межкадрового предсказания в режиме предиктора вектора движения и режиме слияния. A0, A1, A2, B0, B1, B2 и B3 представляют собой обрабатываемые блоки в соседнем блоке целевого блока. T0 является блоком, принадлежащим обрабатываемому изображению и расположенным на той же позиции, что и целевой блок, или в окрестности (vicinity) целевого блока в целевом изображении.
A1 и A2 являются блоками, расположенными слева от целевого блока кодирования и рядом с целевым блоком кодирования. B1 и B3 являются блоками, расположенными над целевым блоком кодирования и рядом с целевым блоком кодирования. A0, B0 и B2 являются блоками, расположенными соответственно в нижнем левом, верхнем правом и верхнем левом углу целевого блока кодирования.
Далее приведено подробное описание процесса обработки соседних блоков в режиме предиктора вектора движения и режиме слияния.
Компенсация аффинного движения
Компенсация аффинного движения сначала разбивает блок кодирования на подблоки заданного блока, и затем индивидуально определяет вектор движения для каждого из разделенных подблоков для выполнения компенсации движения. Вектор движения каждого из подблоков получают на основании одной или нескольких контрольных точек, полученных из информации межкадрового предсказания обработанного блока в соседнем блоке целевого блока или блока, принадлежащего обработанному изображению и расположенного на той же позиции, что или в окрестности (vicinity) целевого блока. В то время, как настоящий вариант осуществления устанавливает размер подблока равным 4×4 выборки, размер подблока этим не ограничивается, и вектор движения может быть получен в блоках выборок.
На фиг. 14 показан пример компенсации аффинного движения в случае наличия двух контрольных точек. В этом случае каждая из двух контрольных точек имеет два параметра, то есть горизонтальную составляющую и вертикальную составляющую. Соответственно, аффинное преобразование, имеющее две контрольные точки, называется аффинным преобразованием с четырьмя параметрами. На фиг. 14 CP1 и CP2 являются контрольными точками.
На фиг. 15 показан пример компенсации аффинного движения в случае трех контрольных точек. В этом случае каждая из трех контрольных точек имеет два параметра, то есть горизонтальную составляющую и вертикальную составляющую. Соответственно, аффинное преобразование, имеющее три контрольные точки, называется аффинным преобразованием с шестью параметрами. На фиг. 15 CP1, CP2 и CP3 являются контрольными точками.
Компенсация аффинного движения может использоваться в любом из режима предиктора вектора движения и режима слияния. Режим применения компенсации аффинного движения в режиме предиктора вектора движения определяется как режим предиктора вектора движения подблока. Режим применения компенсации аффинного движения в режиме слияния определяется как режим слияния подблоков.
Синтаксис блока кодирования
Синтаксис для выражения режима предсказания блока кодирования будет описан со ссылкой на фиг.12A, 12B и 13. На фиг.12A pred_mode_flag является флагом, указывающим то, является ли режим режимом межкадрового предсказания. Установка pred_mode_flag в 0 указывает межкадровое предсказание, тогда как установка pred_mode_flag в 1 указывает внутрикадровое предсказание. pred_mode_ibc_flag, указывающий то, является ли режим режимом предсказания внутририблочного копирования, передается в случае внутрикадрового предсказания. merge_flag передается в случае предсказания внутририблочного копирования (pred_mode_ibc_flag = 1). merge_flag является флагом, указывающим то, является ли используемый режим режимом внутриблочного копирования со слиянием или режимом копирования внутрикадрового блока предсказания. merge_idx передается в режиме внутриблочного копирования со слиянием (merge_flag = 1). Режим установлен на нормальное внутрикадровое предсказание, и информация о нормальном внутрикадровом предсказании intra_pred_mode передается в том случае, когда режим не является режимом предсказания внутририблочного копирования (pred_mode_ibc_flag = 0).
intra_pred_mode передается в случае внутрикадрового предсказания. merge_flag является флагом, указывающим то, является ли используемый режим режимом слияния или режимом предсказания вектора движения. В случае режима предиктора вектора движения (merge_flag = 0) передается флаг inter_affine_flag, указывающий то, применять ли режим предиктора вектора движения подблока. В случае применения режима предсказания вектора движения подблока (inter_affine_flag = 1) передается cu_affine_type_flag. cu_affine_type_flag является флагом для определения количества контрольных точек в режиме предиктора вектора движения подблока.
Напротив, как показано на фиг. 12B, в случае режима слияния (merge_flag = 1) передается merge_subblock_flag. merge_subblock_flag является флагом, указывающим, применять ли режим слияния подблоков. В случае режима слияния подблоков (merge_subblock_flag = 1) передается индекс слияния merge_subblock_idx. Наоборот, в случае, когда режим не является режимом слияния подблоков (merge_subblock_flag = 0), передается флаг merge_triangle_flag, указывающий, применять ли режим слияния треугольника. В случае применения режима слияния треугольников (merge_triangle_flag = 1) передаются индексы merge_triangle_idx0 и merge_triangle_idx1 слияния треугольников для каждого из направлений разделения блоков merge_triangle_split_dir и для каждого из двух разделенных разделов. В случае неприменения режима слияния треугольников (merge_triangle_flag = 0) передается индекс merge_idx слияния.
На фиг. 13 показано значение каждого из элементов синтаксиса межкадрового предсказания и соответствующий режим предсказания. merge_flag = 0 и inter_affine_flag = 0 соответствуют нормальному режиму предиктора вектора движения (Inter Pred Mode). merge_flag = 0 и inter_affine_flag = 1 соответствуют режиму предиктора вектора движения подблока (межаффинный режим). merge_flag = 1, merge_subblock_flag = 0 и merge_trianlge_flag = 0 соответствуют нормальному режиму слияния (Merge Mode). merge_flag = 1, merge_subblock_flag = 0 и merge_trianlge_flag = 1 соответствуют режиму слияния треугольников (Triangle Merge Mode). merge_flag = 1, merge_subblock_flag = 1 соответствуют режиму слияния подблоков (Affine Merge Mode).
POC
Счетчик очередности изображений (POC) является переменной, ассоциированной с кодируемым изображением, и устанавливается на значение, которое увеличивается на единицу в соответствии с порядком вывода изображений. Значение POC позволяет различать, являются ли изображения одинаковыми, различать последовательную взаимосвязь внешних изображений в порядке вывода или получать расстояние между изображениями. Например, можно определить, что два изображения, имеющие одинаковое значение POC, являются идентичными изображениями. В случае, когда POCs двух изображений имеют разные значения, изображение с меньшим значением POC может быть определено как изображение, которое выводится раньше. Разница между POCs двух изображений указывает расстояние между изображениями в направлении оси времени.
Первый вариант осуществления
Далее будет приведено описание устройства 100 для кодирования изображения и устройства 200 для декодирования изображения согласно первому варианту осуществления настоящего изобретения.
На фиг. 1 показана блок-схема устройства 100 для кодирования изображений согласно первому варианту осуществления. Устройство 100 для кодирования изображений согласно варианту осуществления включает в себя блок 101 разделения блока, блок 102 межкадрового предсказания, блок 103 внутрикадрового предсказания, память 104 декодированных изображений, определитель 105 способа предсказания, блок 106 генерирования остатка, ортогональный преобразователь/квантователь 107, блок 108 кодирования битовой строки, обратный квантователь/обратный ортогональный преобразователь 109, блок 110 наложения сигнала декодированного изображения и память 111 хранения информации кодирования.
Блок 101 разделения блока рекурсивно разделяет входное изображение для построения блока кодирования. Блок 101 разделения блока включает в себя: блок четвертичного разделения, который разделяет целевой блок разделения как в горизонтальном направлении, так и в вертикальном направлении; и блок двоично-троичного разделения, который разделяет целевой блок разделения либо в горизонтальном направлении, либо в вертикальном направлении. Блок 101 разделения блока устанавливает построенный блок кодирования в качестве целевого блока кодирования и подает сигнал изображения целевого блока кодирования в блок 102 межкадрового предсказания, блок 103 внутрикадрового предсказания и блок 106 генерирования остатка. Дополнительно, блок 101 разделения блока поставляет информацию, указывающую определенную рекурсивную структуру разделения, в блок 108 кодирования битовой строки. Далее приводиться подробная информация функционирования блока 101 разделения блока.
Блок 102 межкадрового предсказания выполняет межкадровое предсказание целевого блока кодирования. Блок 102 межкадрового предсказания выводит множество кандидатов информации межкадрового предсказания из информации межкадрового предсказания, хранящейся в памяти 111 для хранения информации кодирования, и сигнала декодированного изображения, хранящегося в памяти 104 декодированных изображений, выбирает подходящий режим межкадрового предсказания из множества полученных кандидатов, и поставляет выбранный режим межкадрового предсказания и сигнал предсказанного изображения, соответствующий выбранному режиму межкадрового предсказания, в определитель 105 способа предсказания. Далее будет приведена подробная конфигурация и функционирования блока 102 межкадрового предсказания.
Блок 103 внутрикадрового предсказания выполняет внутрикадровое предсказание для целевого блока кодирования. Блок 103 внутрикадрового предсказания обращается к сигналу декодированного изображения, хранящемуся в памяти 104 декодированных изображений, в качестве опорной выборки и выполняет внутрикадровое предсказание на основании информации кодирования, такой как режим внутрикадрового предсказания, сохраненной в памяти 111 хранения информации кодирования и, тем самым, генерирует предсказанный сигнал изображения. При внутрикадровом предсказании, блок 103 внутрикадрового предсказания выбирает подходящий режим внутрикадрового предсказания из множества режимов внутрикадрового предсказания и поставляет выбранный режим внутрикадрового предсказания и выбранный сигнал предсказанного изображения, соответствующий выбранному режиму внутрикадрового предсказания, в определитель 105 способа предсказания. Далее будет описана подробная конфигурация и работа блока 103 внутрикадрового предсказания.
Память 104 декодированных изображений хранит декодированные изображения, сформированные блоком 110 наложения сигнала декодированных изображений. Память 104 декодированных изображений подает сохраненные декодированные изображения в блок 102 межкадрового предсказания и блок 103 внутрикадрового предсказания.
Определитель 105 способа предсказания оценивает каждое из внутрикадрового предсказания и межкадрового предсказания, используя информацию кодирования, величину кода остатка, величину искажения между предсказанным сигналом изображения и сигналом целевого изображения или т.п., и, таким образом, определяет оптимальный режим предсказания. В случае внутрикадрового предсказания определитель 105 способа предсказания поставляет информацию внутрикадрового предсказания, такую как режим внутрикадрового предсказания, в блок 108 кодирования битовой строки в качестве информации кодирования. В случае режима слияния межкадрового предсказания определитель 105 способа предсказания предоставляет информацию межкадрового предсказания, такую как индекс слияния и информацию (флаг слияния подблоков), указывающую, является ли режим режимом слияния подблоков, в блок 108 кодирования битовой строки, как информацию кодирования. В случае режима предиктора вектора движения межкадрового предсказания определитель 105 способа предсказания поставляет информацию межкадрового предсказания, такую как режим межкадрового предсказания, индекс предиктора вектора движения, опорный индекс L0 или L1, разность векторов движения или информацию, указывающую, является ли режим режимом предиктора вектора движения подблока (флаг предиктора вектора движения подблока) в блок 108 кодирования битовой строки в качестве информации кодирования. Определитель 105 способа предсказания дополнительно поставляет определенную информацию кодирования в память 111 хранения информации кодирования. Определитель 105 способа предсказания поставляет сигнал предсказанного изображения в блок 106 генерирования остатка и блок 110 наложения сигнала декодированного изображения.
Блок 106 генерирования остатка формирует остаток путем вычитания сигнала предсказанного изображения из сигнала целевого изображения и поставляет сформированный остаток в ортогональный преобразователь/квантователь 107.
Ортогональный преобразователь/квантователь 107 выполняет ортогональное преобразование и квантование остатка в соответствии с параметром квантования и, тем самым, формирует ортогонально преобразованный и квантованный остаток, и затем поставляет сформированный остаток в блок 108 кодирования битовой строки и обратный квантователь/обратный ортогональный преобразователь 109.
Блок 108 кодирования битовой строки кодирует, в дополнение к последовательностям, изображения, сегменты и информацию в блоках блоков кодирования, блок 108 кодирования битовой строки кодирует информацию кодирования, соответствующую способу предсказания, определенному определителем 105 способа предсказания. для каждого из блоков кодирования. В частности, блок 108 кодирования битовой строки кодирует режим предсказания PredMode для каждого из блоков кодирования. В случае, когда режимом предсказания является межкадровое предсказание (MODE_INTER), блок 108 кодирования битовой строки кодирует информацию кодирования (информацию межкадрового предсказания), такую как флаг, для определения, является ли режим режимом слияния, флаг слияния подблоков, индекс слияния в режиме слияния, режим межкадрового предсказания в режимах без слияния, индекс предиктора вектора движения, информацию, относящуюся к разности векторов движения, и флаг предиктора вектора движения подблока на основе предписанного синтаксиса (правила синтаксиса битовой строки) и, тем самым, формирует первую битовую строку. В случае, когда режимом предсказания является внутрикадровое предсказание (MODE_INTRA), блок 108 кодирования битовых строк кодирует флаг, чтобы определить, является ли режим режимом внутриблочного копирования в соответствии с предписанным синтаксисом. В случае, когда режимом является внутриблочное копирование, информация кодирования (информация внутрикадрового предсказания), такая как индекс слияния в случае режима слияния, индекс предиктора блочного вектора в случае режима без слияния и разность блочных векторов кодируется в соответствии с предписанным синтаксисом. В случае, когда режимом не является внутриблочное копирование, информация кодирования (информация внутрикадрового предсказания), такая как режим внутрикадрового предсказания, кодируется в соответствии с предписанным синтаксисом. С помощью вышеупомянутого способа кодирования создается первая битовая строка. В дополнение к этому, блок 108 кодирования битовой строки выполняет энтропийное кодирование ортогонально преобразованного и квантованного остатка на основе предписанного синтаксиса и, таким образом, формирует вторую битовую строку. Блок 108 кодирования битовой строки мультиплексирует первую битовую строку и вторую битовую строку на основе предписанного синтаксиса и выводит битовый поток.
Обратный квантователь/обратный ортогональный преобразователь 109 выполняет обратное квантование и обратное ортогональное преобразование ортогонально преобразованного/квантованного остатка, подаваемого из ортогонального преобразователя/квантователя 107 и, таким образом, вычисляет остаток и затем подает вычисленный остаток в блок 110 наложения сигнала декодированных изображений.
Блок 110 наложения сигнала декодированного изображения накладывает сигнал предсказанного изображения в соответствии с определением определителя 105 способа предсказания с остатком, который подвергается обратному квантованию/обратному ортогональному преобразованию с помощью обратного квантователя/обратного ортогонального преобразователя 109, тем самым, формируя декодированное изображение, и сохраняет сформированное декодированное изображение в памяти 104 декодированных изображений. Блок 110 наложения сигнала декодированного изображения может выполнять обработку фильтрации для уменьшения искажения, такого как блочное искажение, из-за кодирования декодированного изображения, и может после этого сохранять декодированное изображение в памяти 104 декодированных изображений.
Память 111 хранения информации кодирования хранит информацию кодирования, такую как режим предсказания (межкадровое предсказание или внутрикадровое предсказание), определенный определителем 105 способа предсказания. В случае межкадрового предсказания информация кодирования сохраняется в памяти 111 хранения информации кодирования, которая включает в себя информацию межкадрового предсказания, такую как определенный вектор движения, опорные индексы справочных списков L0 и L1 и список кандидатов предиктора вектора движения на основании истории. В случае режима слияния с межкадровым предсказанием информация кодирования, хранящаяся в памяти 111 хранения информации кодирования, включает в себя, в дополнение к вышеописанной информации, индекс слияния и информацию межкадрового предсказания, включающую в себя информацию, указывающую, является ли режим режимом слияния подблоков. (флаг слияния подблоков). В случае режима предиктора вектора движения межкадрового предсказания информация кодирования, хранимая в памяти 111 хранения информации кодирования, включает в себя, в дополнение к вышеупомянутой информации, информацию межкадрового предсказания, такую как режим межкадрового предсказания, индекс предиктора вектора движения, разность векторов движения и информацию, указывающую, является ли режим режимом предиктора вектора движения подблока (флаг предиктора вектора движения подблока). В случае внутрикадрового предсказания информация кодирования, хранимая в памяти 111 хранения информации кодирования, включает в себя информацию внутрикадрового предсказания, такую как определенный режим внутрикадрового предсказания.
На фиг. 2 показана блок-схема, иллюстрирующей конфигурацию устройства для декодирования изображений согласно варианту осуществления настоящего изобретения, соответствующего устройству для кодирования изображений (фиг. 1). Устройство для декодирования изображений согласно варианту осуществления включает в себя блок 201 декодирование битовой строки, блок 202 разделения блока, блок 203 межкадрового предсказания, блок 204 внутрикадрового предсказания, память 205 хранения информации кодирования, обратный квантователь/обратный ортогональный преобразователь 206 и блок 207 наложения сигнала декодированного изображения и память 208 декодированного изображения.
Так как процесс декодирования устройства для декодирования изображений на фиг. 2 соответствует процессу декодирования, выполняемому устройством для кодирования изображений на фиг. 1. Соответственно, каждая из конфигураций памяти 205 хранения информации кодирования, обратный квантователь/обратный ортогональный преобразователь 206, блок 207 наложения сигнала декодированного изображения и память 208 декодированного изображения на фиг. 2 соответственно имеют функцию, соответствующую каждому из конфигураций памяти 111 хранения информации кодирования, обратного квантователя/обратного ортогонального преобразователя 109, блока 110 наложения сигнала декодированного изображения и памяти 104 декодированных изображений устройства для кодирования изображений (фиг. 1).
Битовый поток, подаваемый в блок 201 декодирования битовых строк, разделяется на основе предписанного правила синтаксиса. Блок 201 декодирования битовых строк декодирует разделенную первую битовую строку и, таким образом, получает последовательность, изображение, сегмент, информацию в блоках блоков кодирования и информацию кодирования в блоках блоков кодирования. В частности, блок 201 декодирования битовых строк декодирует режим предсказания PredMode, который определяет, является ли предсказание межкадровым предсказанием (MODE_INTER) или внутрикадровым предсказанием (MODE_INTRA) в блоках блока кодирования. В случае, когда режимом предсказания является межкадровое предсказание (MODE_INTER), блок 201 декодирования битовых строк декодирует информацию кодирования (информацию межкадрового предсказания), относящуюся к флагу, который определяет, является ли режим режимом слияния, индекс слияния в случае режима слияния, флаг слияния подблока и межкадровое предсказание в случае режима предиктора вектора движения, индекс предиктора вектора движения, разность векторов движения, флаг предиктора вектора движения подблока или т.п. в соответствии с предписанным синтаксисом, и затем подает информацию кодирования (информацию межкадрового предсказания) в память 205 хранения информации кодирования через блок 203 межкадрового предсказания и блок 202 разделения блоков. В случае, когда режимом предсказания является внутрикадровое предсказание (MODE_INTRA), блок 201 декодирования битовых строк декодирует флаг, чтобы определить, является ли режимом режим внутриблочного копирования. В случае, когда режимом является внутриблочное копирование, информация кодирования (информация внутрикадрового предсказания), такая как индекс слияния в случае режима слияния, индекс предиктора блочного вектора в случае режима без слияния, и разность блочных векторов декодируется в соответствии с предписанным синтаксисом. В случае, когда режимом не является внутриблочное копирование, блок 201 декодирования битовых строк декодирует информацию кодирования (информацию внутрикадрового предсказания), такую как режим внутрикадрового предсказания, в соответствии с предписанным синтаксисом. С помощью вышеупомянутого способа декодирования декодированная информация кодирования (информация внутрикадрового предсказания) подается в память 205 хранения информации кодирования через блок 203 межкадрового предсказания или блок 204 внутрикадрового предсказания и через блок 202 разделения блоков. Блок 201 декодирования битовых строк декодирует разделенную вторую битовую строку и вычисляет ортогонально преобразованный/квантованный остаток и затем подает ортогонально преобразованный/квантованный остаток в обратный квантователь/обратный ортогональный преобразователь 206.
Когда режим PredMode предсказания целевого блока кодирования представляет собой межкадровое предсказание (MODE_INTER) и режим предсказания вектора движения, блок 203 межкадрового предсказания использует информацию кодирования уже декодированного сигнала изображения, сохраненного в памяти 205 хранения информации кодирования, для получения множества кандидатов предикторов вектора движения. Блок 203 межкадрового предсказания затем добавляет множество полученных кандидатов предикторов вектора движения в список кандидатов предикторов вектора движения, описанный ниже. Блок 203 межкадрового предсказания выбирает предиктор вектора движения, соответствующий индексу предиктора вектора движения, который должен быть декодирован и поставленный блоком 201 декодирования битовой строки, из множества кандидатов предикторов вектора движения, зарегистрированных в списке кандидатов предикторов вектора движения. Блок 203 межкадрового предсказания затем вычисляет вектор движения на основании разности векторов движения, декодированных блоком 201 декодирования битовой строки и выбранным предиктором вектора движения, и сохраняет вычисленный вектор движения в памяти 205 хранения информации кодирования вместе с другой информацией кодирования. Здесь информация кодирования блока кодирования, которая должна быть поставлена и сохранена, включает в себя режим PredMode предсказания, флаги predFlagL0 [xP] [yP] и predFlagL1 [xP] [yP], указывающие, следует ли использовать L0 предсказание и L1 предсказание, опорные индексы refIdxL0 [xP] [yP] и refIdxL1 [xP] [yP] L0 и L1; и векторы mvL0 [xP] [yP] и mvL1 [xP] [yP] движения для L0 и L1. Здесь xP и yP являются индексами, указывающие позицию верхней левой выборки блока кодирования в изображении. В случае, когда режим PredMode предсказания является межкадровым предсказанием (MODE_INTER) и режимом межкадрового предсказания является L0 предсказанием (Pred_L0), флаг predFlagL0, указывающий, следует ли использовать L0 предсказание, устанавливается на 1, и флаг predFlagL1 указывает, использовать ли L1 предсказание, установлен на 0. В случае, когда режимом межкадрового предсказания является L1 предсказание (Pred_L1), флаг predFlagL0, указывающий, следует ли использовать L0 предсказание, установлен на 0, и флаг predFlagL1, указывающий, использовать ли L1 предсказание, установлен на 1. В случае, когда режимом межкадрового предсказания является двунаправленное предсказание (Pred_BI), и флаг predFlagL0, указывающий, следует ли использовать L0 предсказание, и флаг predFlagL1, указывающий, использовать ли L1 предсказание, устанавливаются на 1. Дополнительно, когда режим PredMode предсказания целевого блока кодирования является режимом межкадрового предсказания (MODE_INTER) и режимом слияния, то получается кандидат слияния. Используя информацию кодирования уже декодированного блока кодирования, хранящуюся в памяти 205 хранения информации кодирования, выводится множество кандидатов слияния и регистрируется в списке кандидатов слияния, описанном ниже. Затем кандидат слияния, соответствующий индексу слияния, который декодируется блоком 201 декодирования битовой строки и предоставляется, выбирается из множества кандидатов слияния, зарегистрированных в списке кандидатов слияния, и затем информация межкадрового предсказания, такая как flags predFlagL0 [xP ] [yP] и predFlagL1 [xP] [yP], указывающие, следует ли использовать L0 предсказание и L1 предсказание выбранного кандидата слияния, опорные индексы refIdxL0 [xP] [yP] и refIdxL1 [xP] [yP] L0 и L1 и векторы mvL0 [xP] [yP] и mvL1 [xP] [yP] движения для L0 и L1 должны храниться в памяти 205 хранения информации кодирования. Здесь xP и yP являются индексами, указывающими позицию верхней левой выборки блока кодирования в изображении. Далее будет приведено подробное описание конфигурации и функционирования блока 203 межкадрового предсказания.
Блок 204 внутрикадрового предсказания выполняет внутрикадровое предсказание, когда режим PredMode предсказания целевого блока кодирования является внутрикадровым предсказанием (MODE_INTRA). Информация кодирования, декодированная блоком 201 декодирования битовой строки, включает в себя режим внутрикадрового предсказания. Блок 204 внутрикадрового предсказания генерирует сигнал предсказанного изображения посредством внутрикадрового предсказания из сигнала декодированного изображения, хранящегося в памяти 208 декодированных изображений, в соответствии с режимом внутрикадрового предсказания в информации кодирования, декодированной блоком 201 декодирования битовой строки. Далее блок 204 внутрикадрового предсказания поставляет сгенерированный предсказанный сигнал изображения в блок 207 наложения декодированного сигнала изображения. Блок 204 внутрикадрового предсказания соответствует блоку 103 внутрикадрового предсказания устройства 100 для кодирования изображения и, таким образом, выполняет обработку, аналогичную обработке блока 103 внутрикадрового предсказания.
Обратный квантователь/обратный ортогональный преобразователь 206 выполняет обратное ортогональное преобразование/обратное квантование ортогонально преобразованного/квантованного остатка, декодированного в блоке 201 декодирования битовой строки и, таким образом, получает обратно ортогонально преобразованный/обратно квантованный остаток.
Блок 207 наложения сигнала декодированного изображения накладывает сигнал изображения, предсказанный с помощью межкадрового предсказания блоком 203 межкадрового предсказания, или сигнал изображения с предсказанием, предсказанный с помощью внутрикадрового предсказания блоком 204 внутрикадрового предсказания, с остатком, который был обратно ортогонально преобразован/обратно квантован посредством обратного квантователя/обратного ортогонального преобразователя 206, тем самым, декодируя сигнал декодированного изображения. Блок 207 наложения сигнала декодированного изображения затем сохраняет сигнал декодированного изображения, который был декодирован, в памяти 208 декодированных изображений. При сохранении декодированного изображения в памяти 208 декодированных изображений, блок 207 наложения сигнала декодированного изображения может выполнять обработку фильтрации для декодированного изображения для уменьшения блочного искажения или подобного из-за кодирования и может после этого сохранять декодированное изображение в памяти 208 декодированных изображений.
Далее будет описана работа блока 101 разделения блока в устройстве 100 для кодирования изображения. На фиг. 3 показана блок-схема алгоритма, иллюстрирующая операцию разделения изображения на блоки дерева и дополнительного разделения каждого из блоков дерева. Сначала входное изображение разделяется на блоки дерева заданного размера (этап S1001). Каждый из блоков дерева сканируется в заранее определенном порядке, то есть в порядке растрового сканирования (этап S1002), и целевой блок дерева внутренне разделяется (этап S1003).
На фиг. 7 показана блок-схема алгоритма, иллюстрирующая подробную операцию процесса разделения на этапе S1003. Сначала определяется, разделить ли целевой блок на четыре (этап S1101).
В случае, когда определяется, что целевой блок должен быть разделен на четыре, целевой блок будет разделен на четыре (этап S1102). Каждый из блоков, полученных путем разделения целевого блока, сканируется в порядке Z-сканирования, то есть в порядке верхнего левого, верхнего правого, нижнего левого и нижнего правого (этап S1103). На фиг. 5 показан пример порядка Z-сканирования, 601 на фиг. 6A иллюстрирует пример, в котором целевой блок разделен на четыре. Цифры от 0 до 3 из 601 на фиг. 6A указывают порядок обработки. Затем рекурсивно выполняется процесс разделения (фиг. 7) для каждого из блоков, разделенных на этапе S1101 (этап S1104).
В случае, когда определено, что целевой блок не должен быть разделен на четыре, целевой блок будет разделен на два или три, а именно, будет выполнено двоично-троичное разделение (этап S1105).
На фиг. 8 показана блок-схема алгоритма, подробно иллюстрирующая работу процесса двоично-троичного разделения на этапе S1105. Во-первых, определяется, будет ли выполнено двоично-троичное разделение для целевого блока, то есть будет ли выполняться какое-либо двоичное или троичное разделение (этап S1201).
В случае, когда не определено, что на целевом блоке должно выполняться двоично-троичное разделение, то есть в случае, когда определено, что не следует разделять целевой блок, разделение завершается (этап S1211). То есть дополнительный процесс рекурсивного разделения не должен выполняться для блока, который был разделен процессом рекурсивного разделения.
В случае, когда определено, что двоично-троичное разделение будет выполнено в целевом блоке, дополнительно определяется, следует ли разделить целевой блок на два (этап S1202).
В случае, когда определяется, что целевой блок должен быть разделен на два, дополнительно определяется, следует ли разделить целевой блок в верхнем-нижнем (вертикальном) направлении (этап S1203) и затем на основании результата целевой блок будет двоично разделен в верхнем-нижнем (вертикальном) направлении (этап S1204), или целевой блок будет двоично разделен в лево-правом (горизонтальном) направлении (этап S1205). В результате этапа S1204 целевой блок двоично разделяется в направлении вверх-вниз (вертикальное направление), как проиллюстрировано на позиции 602 на фиг. 6B. В результате этапа S1205 целевой блок двоично разделяется вправо-влево (горизонтальное направление), как проиллюстрировано на этапе 604 на фиг. 6D.
На этапе S1202, в случае, когда не определено, что целевой блок должен быть разделен на два, то есть в случае, когда определено, что целевой блок должен быть разделен на три, дополнительно определяют, следует ли разделить целевой блок на три части: верхнюю, среднюю и нижнюю (вертикальное направление) (этап S1206). На основании результата целевой блок разделяется на три части: верхнюю, среднюю и нижнюю части (вертикальное направление) (этап S1207) или левую, среднюю и правую части (горизонтальное направление) (этап S1208). В результате этапа S1207 целевой блок разделяется на три части: верхнюю, среднюю и нижнюю части (вертикальное направление), как проиллюстрировано на этапе 603 на фиг. 6C. В результате этапа S1208 целевой блок разделяется на три части: левую, среднюю и правую (горизонтальное направление), как проиллюстрировано на этапе 605 на фиг. 6E.
После выполнения одного из этапов S1204, S1205, S1207 или S1208 каждый из блоков, полученных путем разделения целевого блока, сканируется в порядке слева направо и сверху вниз (этап S1209). Цифры от 0 до 2 от 602 до 605 на фиг. 6B-6E указывают порядок обработки. Для каждого из блоков разделения рекурсивно выполняется процесс двоично-троичного разделения на фиг. 8 (этап S1210).
В описанном в настоящем документе рекурсивном разделении блоков правильность разделения может быть ограничена на основании количества разделений, размера целевого блока и т.п. Информация, которая ограничивает правильность разделения, может быть предоставлена в конфигурации, в которой информация не передается путем заключения предварительного соглашения между устройством кодирования и устройством декодирования, или в конфигурации, в которой устройство кодирования определяет информацию для ограничения правильности разделения и записывает информацию в битовые строки, тем самым, передавая информацию в устройство для декодирования.
Когда конкретный блок разделяется, блок до разделения называется родительским блоком и каждый из блоков после разделения называется дочерним блоком.
Далее будет описана функциональность блока 202 разделения блока в устройстве 200 для декодирования изображения. Блок 202 разделения блока разделяет блок дерева, используя процедуру обработки, аналогичную случаю блока 101 разделения блока устройства 100 для кодирования изображения. Обратите внимание, что есть разница, хотя блок 101 разделения блока устройства 100 для кодирования изображения определяет оптимальную форму разделения блока путем применения способа оптимизации, такого как оценка оптимальной формы путем распознавания изображения или оптимизации скорости искажения, блок 202 разделения блока устройства 200 для декодирования изображения определяет форму разделения блока путем декодирования информации разделения блока, записанную в битовой строке.
Фиг.9 иллюстрирует синтаксис (правила синтаксиса битовой строки), относящийся к разделению блока согласно первому варианту осуществления. coding_quadtree () представляет синтаксис для процесса разделения на четыре части блока. multi_type_tree () представляет синтаксис процесса разделения блока на два или три. qt_split является флагом, указывающим, следует ли разбить блок на четыре. В случае разделения блока на четыре, установка является qt_split = 1. В случае отсутствия разделения блока на четыре, настройка будет равна qt_split = 0. В случае разделения блока на четыре (qt_split = 1), процесс разделения на четыре будет выполняться рекурсивно для каждого из блоков, разделенных на четыре (coding_quadtree (0), coding_quadtree (1), coding_quadtree (2) и coding_quadtree (3), в которых аргументы от 0 до 3 соответствуют номерам 601 на фиг.6A). В случае, когда разделение на четыре не должно выполняться (qt_split = 0), последующее разделение определяется согласно multi_type_tree (). mtt_split является флагом, указывающим, следует ли выполнять дополнительное разделение. В случае, когда необходимо выполнить дополнительное разделение (mtt_split = 1), будет выполнена передача mtt_split_vertical, который является флагом, указывающим, следует ли выполнять разделение в вертикальном или горизонтальном направлении, и mtt_split_binary, который является флагом, определяющим то, следует ли выполнять двоичное разделение или троичное разделение блока. mtt_split_vertical = 1 указывает разделение в вертикальном направлении и mtt_split_vertical = 0 указывает разделение в горизонтальном направлении. mtt_split_binary = 1 указывает, что блок подвергнут двоичному разделению, а mtt_split_binary = 0 указывает, что блок разделен на три. В случае, когда блок должен быть разделен двоичным кодом (mtt_split_binary = 1), процесс разделения выполняется рекурсивно для каждого из двух разделенных блоков (multi_type_tree (0) и multi_type_tree (1), в которых аргументы от 0 до 1 соответствуют числам в 602 или 604 на фиг.6B-6D). В случае, когда блок должен быть разделен на три (mtt_split_binary = 0), процесс разделения выполняется рекурсивно для каждого из трех разделенных блоков (multi_type_tree (0), multi_type_tree (1) и multi_type_tree (2), в котором 0 2 соответствуют номерам 603 на фиг.6B или 605 на фиг.6E). multi_type_tree рекурсивно используется до тех пор, пока mtt_split = 0 не приведет к иерархическому разделению блоков.
Внутрикадровое предсказание
Способ внутрикадрового предсказания согласно варианту осуществления реализуется в блоке 103 внутрикадрового предсказания устройства 100 для кодирования изображений, показанного на фиг.1, и в блоке 204 внутрикадрового предсказания устройства 200 для декодирования изображений, показанного на фиг.2.
Способ внутрикадрового предсказания согласно варианту осуществления будет описан со ссылкой на чертежи. Способ внутрикадрового предсказания реализуется в любом из процессов кодирования и декодирования в единицах блоков кодирования.
Блок 103 внутрикадрового предсказания на стороне кодирования
На фиг.40 показано схематичное представление, иллюстрирующее подробную конфигурацию блока 103 внутрикадрового предсказания устройства 100 для кодирования изображений, показанного на фиг.1. Блок 351 нормального внутрикадрового предсказания вырабатывает предсказанный сигнал изображения посредством нормального внутрикадрового предсказания из декодированных пикселей, соседних с целевым блоком кодирования, выбирает подходящий режим внутрикадрового предсказания из множества режимов внутрикадрового предсказания и подает выбранный режим внутрикадрового предсказания и предсказанный сигнал изображения, соответствующий выбранному режиму внутрикадрового предсказания, в определитель 105 способа предсказания. На фиг.10A и 10B показаны примеры внутрикадрового предсказания. Фиг.10A иллюстрирует соответствие между направлением предсказания нормального внутрикадрового предсказания и номером режима внутрикадрового предсказания. Например, режим 50 «внутрикадрового предсказания» копирует опорные выборки в вертикальном направлении и тем самым создает изображение внутрикадрового предсказания. Режим 1 внутрикадрового предсказания представляет собой режим постоянного тока, в котором все значения выборки целевого блока устанавливаются равными среднему значению опорных выборок. Режим 0 внутрикадрового предсказания представляет собой планарный режим, в котором двухмерное внутрикадровое предсказание создается из опорных выборок в вертикальном и горизонтальном направлениях. На фиг.10В показан пример построения изображения внутрикадрового предсказания в случае режима 40 внутрикадрового предсказания. Для каждой из выборок целевого блока копируется значение опорной выборки в направлении, указанном режимом внутрикадрового предсказания. В случае, когда опорная выборка в режиме внутрикадрового предсказания находится не в целочисленной позиции, значение опорной выборки определяется путем интерполяции из значений опорных выборок в соседних целочисленных позициях.
Блок 352 предсказания внутририблочного копирования получает декодированную область одного и того же сигнала изображения в качестве целевого блока кодирования, вырабатывает предсказанный сигнал изображения в процессе внутриблочного копирования, и подает предсказанный сигнал изображения в определитель 105 способа предсказания. Подробная конфигурация и процесс, выполняемый блоком 352 предсказания внутририблочного копирования будут описаны ниже.
Блок 204 внутрикадрового предсказания на стороне декодирования
На фиг.41 показано схематичное представление, иллюстрирующее подробную конфигурацию блока 204 внутрикадрового предсказания устройства 200 для декодирования изображений, показанного на фиг.2.
Блок 361 нормального внутрикадрового предсказания вырабатывает сигнал предсказания посредством нормального внутрикадрового предсказания из декодированных пикселей, соседних с целевым блоком кодирования, выбирает подходящий режим внутрикадрового предсказания из множества режимов внутрикадрового предсказания и получает выбранный режим внутрикадрового предсказания и предсказанный сигнал изображения, соответствующий выбранному режиму внутрикадрового предсказания. Этот сигнал предсказания подается в блок 207 наложения сигналов декодированного изображения через переключатель 364. Процесс, выполняемый блоком 361 нормального внутрикадрового предсказания, показанного на фиг.41, соответствует процессу, выполняемому блоком 351 нормального внутрикадрового предсказания, показанным на фиг.40, и поэтому их подробное описание будет опущено.
Блок 362 предсказания внутририблочного копирования получает декодированную область одного и того же сигнала изображения в качестве целевого блока кодирования, и получает предсказанный сигнал изображения путем процесса внутриблочного копирования. Этот предсказанный сигнал изображения подается в блок 207 наложения сигналов декодированного изображения через переключатель 364. Подробная конфигурация и процесс, выполняемый блоком 362 предсказания внутририблочного копирования будут описаны ниже.
Межкадровое предсказание
Способ межкадрового предсказания согласно варианту осуществления реализован в блоке 102 межкадрового предсказания устройства для кодирования изображения на фиг. 1 и в блоке 203 межкадрового предсказания устройства для декодирования изображения на фиг. 2.
Далее будет приведено описание способа межкадрового предсказания согласно варианту осуществления со ссылкой на чертежи. Способ межкадрового предсказания реализуется в любом из процессов кодирования и декодирования в блоках кодирования.
Блок 102 межкадрового предсказания на стороне кодирования
На фиг. 16 показана схема, иллюстрирующая подробную конфигурацию блока 102 межкадрового предсказания устройства для кодирования изображений на фиг. 1. Блок 301 получения режима предиктора нормального вектора движения выводит множество кандидатов предиктора нормального вектора движения, выбирает предиктор вектора движения и вычисляет разность векторов движения между выбранным предиктором вектора движения и обнаруженным вектором движения. Обнаруженный режим межкадрового предсказания, опорный индекс, вектор движения и вычисленная разность векторов движения являются информацией межкадрового предсказания режима предиктора нормального вектора движения. Эта информация межкадрового предсказания подается в определитель 305 режима межкадрового предсказания. Далее будет приведена подробная информация конфигурации и обработки блока 301 получения режима предиктора нормального вектора движения.
Блок 302 получения режима нормального слияния выводит множество кандидатов нормального слияния, выбирает кандидата нормального слияния и получает информацию межкадрового предсказания для режима нормального слияния. Эта информация межкадрового предсказания подается в определитель 305 режима межкадрового предсказания. Далее будет приведена подробная информация конфигурации и обработки блока 302 получения режима нормального слияния.
Блок 303 получения режима предиктора вектора движения подблока выводит множество кандидатов предиктора вектора движения подблока, выбирает предиктор вектора движения подблока и вычисляет разность векторов движения между выбранным предиктором вектора движения подблока и обнаруженным вектором движения. Обнаруженный режим межкадрового предсказания, опорный индекс, вектор движения и вычисленная разность векторов движения является информацией межкадрового предсказания режима предиктора вектора движения подблока. Эта информация межкадрового предсказания подается в определитель 305 режима межкадрового предсказания.
Блок 304 получения режима слияния подблоков выводит множество кандидатов слияния подблоков, выбирает кандидата слияния подблоков и получает информацию межкадрового предсказания режима слияния подблоков. Эта информация межкадрового предсказания подается в определитель 305 режима межкадрового предсказания.
В определителе 305 режима межкадрового предсказания определяется информация межкадрового предсказания на основании информации межкадрового предсказания, поступающей из блока 301 получения режима предиктора нормального вектора движения, блока 302 получения режима нормального слияния, блока 303 получения режима предиктора вектора движения подблока и блока 304 получения режима слияния подблоков. Информация межкадрового предсказания согласно результата определения подается из определителя 305 режима межкадрового предсказания в блок 306 предсказания компенсации движения.
Блок 306 предсказания компенсации движения выполняют межкадровое предсказание на сигнале опорного изображения, сохраненном в памяти 104 декодированного изображения на основании определенной информации межкадрового предсказания. Далее будет приведена подробная информация конфигурации и обработки блока 306 предсказания компенсации движения.
Блок 203 межкадрового предсказания на стороне декодирования
На фиг. 22 показан схема, иллюстрирующая подробную конфигурацию блока 203 межкадрового предсказания устройства для декодирования изображения на фиг. 2.
Блок 401 получения режима предиктора нормального вектора движения выводит множество кандидатов предиктора нормального вектора движения, выбирает предиктор вектора движения, вычисляет добавленное значение, полученное путем сложения выбранного предиктора вектора движения и разности декодированных векторов движения, и устанавливает это добавленное значение как вектор движения. Декодированный режим межкадрового предсказания, опорный индекс, вектор движения является информацией межкадрового предсказания режима предиктора нормального вектора движения. Эта информация межкадрового предсказания подается в блок 406 предсказания компенсации движения через переключатель 408. Далее будет приведено подробное описание конфигурации и обработки блока 401 получения режима предиктора нормального вектора движения.
Блок 402 получения режима нормального слияния выводит множество кандидатов нормального слияния, выбирает кандидата нормального слияния и получает информацию межкадрового предсказания для режима нормального слияния. Эта информация межкадрового предсказания подается в блок 406 предсказания компенсации движения через переключатель 408. Ниже будет представлена подробная конфигурация и обработка блока 402 получения режима нормального слияния.
Блок 403 получения режима предиктора вектора движения подблока выводит множество кандидатов предиктора вектора движения подблока, выбирает предиктор вектора движения подблока и вычисляет добавленное значение, полученное путем сложения выбранного предиктора вектора движения подблока и декодированной разности векторов движения, и устанавливает это добавленное значение как вектор движения. Декодированный режим межкадрового предсказания, опорный индекс и вектор движения являются информацией межкадрового предсказания режима предиктора вектора движения подблока. Эта информация межкадрового предсказания подается в блок 406 предсказания компенсации движения через переключатель 408.
Блок 404 получения режима слияния подблоков выводит множество кандидатов слияния подблоков, выбирает кандидата слияния подблоков и получает информацию межкадрового предсказания режима слияния подблоков. Эта информация межкадрового предсказания подается в блок 406 предсказания компенсации движения через переключатель 408.
Блок 406 предсказания компенсации движения выполняет межкадровое предсказание на сигнале опорного изображения, сохраненного в памяти 208 декодированного изображения на основании определенной информации межкадрового предсказания. Подробная конфигурация и обработка блока 406 предсказания компенсации движения аналогичны блоку 306 предсказания компенсации движения на стороне кодирования.
Блок получения режима предиктора нормального вектора движения (Normal AMVP)
Блок 301 получения режима предиктора нормального вектора движения на фиг. 17 включает в себя блок 321 получения кандидата пространственного предиктора вектора движения, блок 322 получения кандидата временного предиктора вектора движения, блок 323 получения кандидата предиктора вектора движения на основании истории, пополнитель 325 кандидатов предиктора вектора движения, определитель 326 нормального вектора движения, селектор 327 кандидата предиктора вектора движения и вычитатель 328 вектора движения.
Блок 401 получения режима предиктора нормального вектора движения на фиг. 23 включает в себя блок 421 получения кандидата пространственного предиктора вектора движения, блок 422 получения кандидата временного предиктора вектора движения, блок 423 получения кандидата предиктора вектора движения на основании истории, пополнитель 425 кандидатов предиктора вектора движения, селектор 426 кандидатов предиктора вектора движения и сумматор 427 вектора движения.
Со ссылкой на блок-схемы алгоритма на фиг. 19 и фиг. 25, соответственно, описаны процедуры обработки блока 301 получения режима предиктора нормального вектора движения на стороне кодирования и блока 401 получения режима предиктора нормального вектора движения на стороне декодирования. На фиг. 19 показана блок-схема алгоритма, иллюстрирующая процедуру обработки получения режима предиктора нормального вектора движения, выполняемую блоком 301 получения режима нормального вектора движения на стороне кодирования. На фиг. 25 показана блок-схема алгоритма, иллюстрирующая процедуру обработки получения режима предиктора нормального вектора движения, выполняемую блоком 401 получения режима нормального вектора движения на стороне декодирования.
Блок получения режима предиктора нормального вектора движения (Normal AMVP): сторона кодирования
Со ссылкой на фиг. 19 будет описана процедура обработки получения режима предиктора нормального вектора движения на стороне кодирования. В описании процедуры обработки на фиг. 19 слово «нормальный», проиллюстрированное на фиг. 19, в некоторых случаях опускается.
Во-первых, определитель 326 нормального вектора движения обнаруживает нормальный вектор движения для каждого из режимов межкадрового предсказания и опорных индексов (этап S100 на фиг. 19).
В последствии, для каждого из L0 и L1 вычисляется разность векторов движения вектора движения, используемого при межкадровом предсказании в режиме предиктора нормального вектора движения (этапы S101-S106 на фиг. 19) в блоке 321 получения кандидата пространственного предиктора вектора движения, блоке 322 получения кандидата временного предиктора вектора движения, блоке 323 получения кандидата предиктора вектора движения на основании истории, пополнителе 325 кандидата предиктора вектора движения, селекторе 327 кандидата предиктора вектора движения и вычитателе 328 вектора движения. В частности, в случае, где режимом предсказания PredMode целевого блока является межкадровое предсказание (MODE_INTER) и режимом межкадрового предсказания является L0 предсказание (Pred_L0), вычисляется список mvpListL0 кандидатов предиктора вектора движения L0. В последствии выбирается предиктор mvpL0 вектора движения и затем вычисляется разность mvdL0 вектора движения вектора mvL0 движения L0. В случае, когда режимом межкадрового предсказания целевого блока является L1 предсказание (Pred_L1), вычисляется список mvpListL1 кандидатов предикторов вектора движения L1. Затем выбирается предиктор mvpL1 вектора движения, в последствии вычисляется разность mvdL1 векторов движения вектора mvL1 движения L1. В случае, когда режимом межкадрового предсказания целевого блока является двунаправленное предсказание (Pred_BI), выполняются оба L0 предсказание и L1 предсказание. Вычисляется список mvpListL0 кандидатов предикторов вектора движения для L0 и выбирается предиктор mvpL0 вектора движения для L0, и затем вычисляется разность mvdL0 векторов движения вектора mvL0 движения для L0. Наряду с этим вычислением вычисляется список mvpListL1 кандидатов предикторов вектора движения для L1 и вычисляется предиктор mvpL1 вектора движения для L1 и затем вычисляется разность mvdL1 векторов движения вектора mvL1 движения для L1.
Процесс вычисления разности векторов движения выполняется для каждого из L0 и L1, в котором процесс вычисления является общим процессом как для L0, так и для L1. Соответственно, L0 и L1 будут обозначаться как LX как общая процедура. В процессе вычисления разности векторов движения L0, X LX устанавливается на 0, в то время как в процессе вычисления разности векторов движения L1, X LX устанавливается на 1. Дополнительно, в случае, когда обращаются за информацией о другом списке вместо одного LX в процессе вычисления разности векторов движения одного LX, другой список будет представлен как LY.
В случае, когда используется вектор mvLX движения LX (ДА на этапе S102 на фиг. 19), вычисляются кандидаты предиктора вектора движения LX, тем самым, составляя список mvpListLX кандидатов предикторов вектора движения LX (этап S103 на фиг. 19). В блоке 301 получения режима предиктора нормального вектора движения, блоке 321 получения кандидата пространственного предиктора вектора движения, блоке 322 получения кандидата временного предиктора вектора движения, блоке 323 получения кандидата предиктора вектора движения на основании истории и пополнителе 325 кандидатов предиктора вектора движения выводят множество кандидатов предикторов вектора движения и, тем самым, составляют список mvpListLX кандидатов предикторов вектора движения. Далее со ссылкой на фиг. 19 будет описана подробная процедура обработки этапа S103 с использованием блок-схемы алгоритма на фиг. 20.
Далее селектор 327 кандидатов предиктора вектора движения выбирает предиктор mvpLX вектора движения LX списка mvpListLX кандидатов предиктора вектора движения LX (этап S104 на фиг. 19). Здесь один элемент (i-й элемент, отсчитываемый от 0) в списке mvpListLX кандидатов предиктора вектора движения представлен как mvpListLX [i]. Вычисляется каждая разность векторов движения, которая представляет собой разность между вектором движения mvLX и каждым из кандидатов предикторов mvpListLX [i] вектора движения, сохраненных в списке mvpListLX кандидатов предикторов вектора движения. Для каждого из элементов (кандидатов предикторов вектора движения) списка mvpListLX кандидатов предиктора вектора движения вычисляется объем кода во время кодирования этих разностей векторов движения. Затем выбирается кандидат предиктор mvpListLX [i] вектора движения, который минимизирует количество кода для каждого из кандидатов предикторов вектора движения среди отдельных элементов, зарегистрированных в списке mvpListLX кандидатов предиктора вектора движения, в качестве предиктора mvpLX вектора движения, и получен его индекс i. В случае наличия множества кандидатов предикторов вектора движения, имеющих минимальный сгенерированный объем кода в списке mvpListLX кандидатов предикторов вектора движения, выбирается кандидат предиктор mvpListLX [i] вектора движения, имеющий индекс i в списке mvpListLX кандидатов предиктора вектора движения, представленный небольшим числом в качестве оптимального предиктора mvpLX вектора движения, и получается его индекс i.
Затем блок 328 вычитания вектора движения вычитает выбранный предиктор mvpLX вектора движения LX из вектора mvLX движения LX и вычисляет разность векторов mvdLX движения LX как в:
mvdLX = mvLX - mvpLX (этап S105 на фиг. 19).
Блок получения режима предиктора нормального вектора движения (нормальный AMVP): сторона декодирования
Далее со ссылкой на фиг. 25 будет описана процедура обработки режима предиктора нормального вектора движения на стороне декодирования. На стороне декодирования блок 421 получения кандидата пространственного предиктора вектора движения, блок 422 получения кандидата временного предиктора вектора движения, блок 423 получения кандидатов предикторов вектора движения на основании истории и пополнитель 425 кандидатов предикторов вектора движения индивидуально вычисляют векторы движения, используемые во межкадровом предсказании режима предиктора нормального вектора движения для каждого из L0 и L1 (этапы S201-S206 на фиг. 25). В частности, в случае, когда режимом PredMode предсказания целевого блока является межкадровое предсказание (MODE_INTER) и режимом межкадрового предсказания целевого блока является L0 предсказание (Pred_L0), вычисляется список mvpListL0 кандидатов предикторов вектора движения L0. Затем выбирается предиктор вектора mvpL0 движения и затем вычисляется вектор mvL0 движения L0. В случае, когда режимом межкадрового предсказания целевого блока является L1 предсказание (Pred_L1), вычисляется список mvpListL1 кандидатов предикторов вектора движения L1. Затем выбирается предиктор вектора mvpL1 движения и вычисляется вектор mvL1 движения L1. В случае, когда режимом межкадрового предсказания целевого блока является двунаправленное предсказание (Pred_BI), выполняются оба L0 предсказание и L1 предсказание. Вычисляется список mvpListL0 кандидатов предикторов вектора движения L0 и выбирается предиктор mvpL0 вектора движения L0 и затем вычисляется вектор mvL0 движения для L0. Наряду с этим вычислением вычисляется список mvpListL1 кандидатов предикторов вектора движения для L1 и вычисляется предиктор mvpL1 вектора движения для L1 и затем вычисляется вектор mvL1 движения для L1.
Аналогично стороне кодирования, сторона декодирования выполняет обработку вычисления вектора движения для каждого из L0 и L1, при этом обработка является общим процессом как для L0, так и для L1. Соответственно, L0 и L1 будут обозначаться как LX как общая процедура. LX представляет режим межкадрового предсказания, используемый для межкадрового предсказания целевого блока кодирования. X равен 0 в процессе вычисления вектора движения L0 и X равен 1 в процессе вычисления вектора движения L1. Дополнительно, в случае, когда информация о другом справочном списке упоминается вместо того же справочного списка, что и LX, который должен быть вычислен в процессе вычисления вектора движения LX, другой справочный список будет представлен как LY.
В случае, когда используется вектор mvLX движения для LX (ДА на этапе S202 на фиг. 25), вычисляются кандидаты предикторы вектора движения LX для составления списка mvpListLX кандидатов предикторов вектора движения для LX (этап S203 на фиг. 25). В блоке 401 получения режима предиктора нормального вектора движения, блоке 421 получения кандидата пространственного предиктора вектора движения, блоке 422 получения кандидата временного предиктора вектора движения, блоке 423 получения кандидата предиктора вектора движения на основании истории и пополнителе 425 кандидата предиктора вектора движения вычисляют множество кандидатов предикторов вектора движения и, тем самым, составляют список mvpListLX кандидатов предикторов вектора движения. Далее со ссылкой на фиг. 25 и с использованием блок-схемы алгоритма на фиг. 20 будет описана подробная процедура обработки этапа S203.
Затем селектор 426 кандидатов предиктора вектора движения извлекает кандидата предиктора mvpListLX [mvpIdxLX] вектора движения, соответствующего индексу mvpIdxLX предиктора вектора движения, декодированному и поставленному блоком 201 декодирования битовой строки из списка mvpListLX кандидатов предиктора вектора движения, как выбранный предиктор mvpLX вектора движения (этап S204 на фиг. 25).
Затем сумматор 427 векторов движения суммирует разность mvdLX векторов движения LX и предиктора mvpLX вектора движения LX, которые декодируются и поставляются блоком 201 декодирования битовых строк, и вычисляет вектор mvLX движения LX как в:
mvLX = mvpLX + mvdLX (этап S205 на фиг. 25).
Блок получения режима предиктора нормального вектора движения (нормальный AMVP): способ предсказания вектора движения
На фиг. 20 показана блок-схема алгоритма, иллюстрирующая процедуру обработки процесса получения режима предиктора нормального вектора движения, имеющего функцию, общую для блока 301 получения режима предиктора нормального вектора движения устройства для кодирования изображения и блока 401 получения режима предиктора нормального вектора движения устройства для декодирования изображения согласно варианту осуществления настоящего изобретения.
Каждый из блока 301 получения режима предиктора нормального вектора движения и блока 401 получения режима предиктора нормального вектора движения включает в себя список mvpListLX кандидатов предиктора вектора движения. Список mvpListLX кандидатов предиктора вектора движения имеет структуру списка и включает в себя область хранения, которая хранит в качестве элементов индекс предиктора вектора движения, указывающий местоположение в списке кандидатов предиктора вектора движения, и кандидата предиктора вектора движения, соответствующего этому индексу. Номер индекса предиктора вектора движения начинается с 0, и кандидаты предиктора вектора движения должны храниться в области хранения списка mvpListLX кандидатов предиктора вектора движения. В настоящем варианте осуществления предполагается, что список mvpListLX кандидатов предиктора вектора движения может регистрировать, по меньшей мере, два кандидата предиктора вектора движения (в качестве информации межкадрового предсказания). Кроме того, переменная numCurrMvpCand, указывающая количество кандидатов предиктора вектора движения, зарегистрированных в списке mvpListLX кандидатов предиктора вектора движения, устанавливается на 0.
Каждый из блоков 321 и 421 получения кандидата пространственного предиктора движения извлекает кандидат предиктора вектора движения из блоков в соседнем с левой стороны. Этот процесс выводит предиктор mvLXA вектора движения со ссылкой на информацию межкадрового предсказания блока в соседнем с левой стороны (A0 или A1 на фиг. 11), а именно флаг, указывающий, можно ли использовать кандидат предиктор вектора движения, вектор движения, опорный индекс или т.п., и добавляет полученный mvLXA к списку mvpListLX кандидатов предиктора вектора движения (этап S301 на фиг. 20). Обратите внимание, что X равен 0 в L0 предсказании и X равен 1 в L1 предсказании (аналогично применяется в дальнейшем). Затем блоки 321 и 421 получения кандидатов предиктора вектора движения извлекают кандидатов предиктора вектора движения из верхнего соседнего блока. Этот процесс выводит предиктор вектора mvLXB движения со ссылкой на информацию межкадрового предсказания верхнего соседнего блока (B0, B1 или B2 на фиг. 11), а именно, флаг, указывающий, можно ли использовать кандидат предиктора вектора движения, вектор движения, опорный индекс и т.п. Когда полученный mvLXA и полученный mvLXB не равны, mvLXB добавляется в список mvpListLX кандидатов предиктора вектора движения (этап S302 на фиг. 20). Процессы на этапах S301 и S302 на фиг. 20 представлены как общий процесс, за исключением того, что позиции и номера опорных соседних блоков различны, и флаг availableFlagLXN, указывающий, можно ли использовать кандидата предиктора вектора движения блока кодирования, и вектор mvLXN движения, опорный индекс refIdxN (N указывает A или B, аналогично применяется в дальнейшем) в этих процессах.
Затем каждый из блоков 322 и 422 получения кандидата временного предиктора вектора движения извлекает кандидата предиктора вектора движения из блока в изображении, имеющего временное отличие от целевого изображения. Этот процесс выводит флаг availableFlagLXCol, указывающий, можно ли использовать кандидат предиктора вектора движения блока кодирования изображения, имеющего временную разницу, и вектор mvLXCol движения, опорный индекс refIdxCol и справочный список listCol, и добавляет mvLXCol в список mvpListLX кандидатов предиктора вектора движения (этап S303 на фиг. 20).
Следует отметить, что предполагается, что процессы блоков 322 и 422 получения кандидата временного предиктора вектора движения могут быть опущены в блоках последовательности (SPS), изображения (PPS) или сегмента.
Затем блоки 323 и 423 получения кандидатов предиктора вектора движения на основании истории добавляют кандидаты предиктора вектора движения на основании истории, зарегистрированных в списке HmvpCandList кандидатов предиктора вектора движения на основании истории, в список mvpListLX кандидатов предиктора вектора движения. (Этап S304 на фиг. 20). Со ссылкой на блок-схему алгоритма на фиг. 29 далее будет приведено подробное описание процедуры обработки регистрации на этапе S304.
Затем пополнители 325 и 425 кандидатов предиктора вектора движения добавляют кандидата предиктора движения, имеющего предварительно определенное значение, такое как (0, 0), до тех пор, пока не будет удовлетворен список mvpListLX кандидатов предиктора вектора движения (S305 на фиг. 20).
Блок получение режима нормального слияния (normal merge)
Блок 302 получения режима нормального слияния на фиг. 18 включает в себя блок 341 получения кандидатов пространственного слияния, блок 342 получения кандидатов временного слияния, блок 344 получения кандидата усредненного слияния, блок 345 получения кандидатов слияния на основании истории, пополнитель 346 кандидатов слияния и селектор 347 кандидатов слияния.
Блок 402 получения режима нормального слияния на фиг. 24 включает в себя блок 441 получения кандидатов пространственного слияния, блок 442 получения кандидатов временного слияния, блок 444 получения кандидата усредненного слияния, блок 445 получения кандидатов слияния на основании истории и пополнитель 446 кандидатов слияния и селектор 447 кандидатов слияния.
На фиг. 21 показана блок-схема алгоритма, иллюстрирующая процедуру процесса получения режима нормального слияния, имеющего функцию, общую для блока 302 получения режима нормального слияния устройства для кодирования изображений и блока 402 получения режима нормального слияния устройства для декодирования изображений согласно к варианту осуществления настоящего изобретения.
В дальнейшем в этом документе будут поэтапно описаны различные процессы. Следующее описание представляет собой случай, когда тип slice_type сегмента является сегментом B, если не указано иное. Однако настоящее изобретение также может быть применено к случаю P-сегмента. Отметим, что существует только L0 предсказание (Pred_L0) в качестве режима межкадрового предсказания, L1 предсказания (Pred_L1) или двунаправленное предсказания (Pred_BI) в случае, когда тип slice_type сегмента представляет собой P-сегмент. Соответственно, в этом случае можно пропустить процесс, связанный с L1.
Блок 302 получения режима нормального слияния и блок 402 получения режима нормального слияния включают в себя список mergeCandList кандидатов слияния. Список mergeCandList кандидатов слияния имеет структуру списка и включает в себя область хранения, которая хранит в качестве элементов индекс слияния, указывающий местоположение в списке кандидатов слияния, и кандидата слияния, соответствующего этому индексу. Номер индекса слияния начинается с 0, и кандидат слияния сохраняется в области хранения списка mergeCandList кандидатов слияния. В последующей обработке кандидат слияния индекса i слияния, зарегистрированный в списке mergeCandList кандидатов слияния, будет представлен mergeCandList [i]. В настоящем варианте осуществления предполагается, что список mergeCandList кандидатов слияния может зарегистрировать, по меньшей мере, шесть кандидатов слияния (в качестве информации межкадрового предсказания). Кроме того, переменная numCurrMergeCand, указывающая количество кандидатов слияния, зарегистрированных в списке mergeCandList кандидатов слияния, устанавливается на 0.
Блок 341 получения кандидатов пространственного слияния и блок 441 получения кандидатов пространственного слияния выводят кандидата пространственного слияния каждого из блоков (B1, A1, B0, A0, B2 на фиг. 11) в соседнем блоке целевого блока в порядке B1, A1, B0, A0 и B2 из информации кодирования, хранящейся либо в памяти 111 хранения информации кодирования устройства для кодирования изображений, либо в памяти 205 хранения информации кодирования устройства для декодирования изображений, и затем регистрирует полученные кандидаты пространственного слияния в список mergeCandList кандидатов слияния (этап S401 на фиг. 21). Здесь будет определено N, обозначающее один из B1, A1, B0, A0, B2 или кандидата Col временного слияния. Элементы, которые должны быть выведены, включают в себя флаг availableFlagN, указывающий, может ли информация межкадрового предсказания блока N использоваться в качестве кандидата на пространственное слияние, опорный индекс refIdxL0N L0 и опорный индекс refIdxL1N L1 кандидата пространственного слияния N, флаг predFlagL0N L0 предсказания, указывающий, должно ли выполняться L0 предсказание, флаг predFlagL1N L1 предсказания, указывающий, должно ли выполняться L1 предсказание, вектор mvL0N движения L0 и вектор mvL1N движения L1. Однако так как кандидат слияния в настоящем варианте осуществления выводится без ссылки на информацию межкадрового предсказания блока, включенного в целевой блок кодирования, не может быть получен кандидат пространственного слияния, использующий информацию межкадрового предсказания блока, включенного в целевой блок кодирования.
Затем блок 342 получения кандидатов временного слияния и блок 442 получения кандидатов временного слияния выводят кандидатов временного слияния из изображений, имеющих временную разницу, и регистрируют полученные временные кандидаты слияния в списке mergeCandList кандидатов слияния (этап S402 на фиг. 21). Элементы, которые должны быть получены, включают в себя флаг availableFlagCol, указывающий, можно ли использовать кандидата временного слияния, флаг predFlagL0Col L0 предсказания, указывающий, должно ли выполняться L0 предсказание кандидата временного слияния, флаг predFlagL1Col L1-предсказания, указывающий, должно быть выполнено L1 предсказание, вектор mvL0Col движения L0 и вектор mvL1Col движения L1.
Отметим, что предполагается, что процессы блоков 342 и 442 получения кандидатов временного слияния могут быть опущены в блоках последовательности (SPS), изображения (PPS) или сегмента.
Затем блок 345 получения кандидатов слияния на основании истории и блок 445 получения кандидатов слияния на основании истории регистрируют кандидатов предиктора вектора движения на основании истории, зарегистрированных в списке HmvpCandList кандидатов предикторов вектора движения на основании истории, в списке list mergeCandList кандидатов слияния (этап S403 на фиг. 21).
В случае, когда количество кандидатов numCurrMergeCand слияния, зарегистрированных в списке mergeCandList кандидатов слияния, меньше, чем максимальное количество кандидатов MaxNumMergeCand слияния, получают кандидат слияния на основании истории с количеством кандидатов numCurrMergeCand слияния, зарегистрированных в списке mergeCandList кандидатов слияния, ограниченным максимальным количеством кандидатов MaxNumMergeCand слияния и затем регистрируется в списке mergeCandList кандидатов слияния.
Затем блок 344 получения кандидата усредненного слияния и блок 444 получения кандидата усредненного слияния выводят кандидата усредненного слияния из списка mergeCandList кандидатов слияния и добавляют полученный кандидат усредненного слияния в список mergeCandList кандидатов слияния (этап S404 на фиг. 21).
В случае, когда количество кандидатов numCurrMergeCand слияния, зарегистрированных в списке mergeCandList кандидатов слияния, меньше, чем максимальное количество кандидатов MaxNumMergeCand слияния, получают кандидат усредненного слияния с количеством кандидатов numCurrMergeCand слияния, зарегистрированных в списке mergeCandList кандидатов слияния, которое ограничено до максимального числа кандидатов MaxNumMergeCand слияния и затем зарегистрируют в списке mergeCandList кандидатов слияния.
Здесь кандидат усредненного слияния является новым кандидатом слияния, включающий в себя вектор движения, полученный посредством усреднения векторов движения первого кандидата слияния и второго кандидата слияния, зарегистрированных в списке mergeCandList кандидатов слияния для каждого из L0 предсказания и L1 предсказания.
Затем в пополнителе 346 кандидатов слияния и пополнителе 446 кандидатов слияния, в случае, когда количество numCurrMergeCand кандидатов слияния, зарегистрированных в списке mergeCandList кандидатов слияния, меньше, чем максимальное количество кандидатов MaxNumMergeCand слияния, получают дополнительный кандидат слияния с количеством кандидатов numCurrMergeCand слияния, зарегистрированных в списке mergeCandList кандидатов слияния, ограниченным максимальным количеством кандидатов MaxNumMergeCand слияния и затем регистрируют в списке mergeCandList кандидатов слияния (этап S405 на фиг. 21). В P-сегменте кандидат слияния, имеющий вектор движения значения (0, 0) и режим предсказания L0 предсказания (Pred_L0), добавляется с максимальным количеством кандидатов MaxNumMergeCand слияния в качестве верхнего предела. В B-сегменте добавляется кандидат слияния, имеющий режим предсказания с двунаправленным предсказанием (Pred_BI) и вектор движения значения (0, 0). Опорный индекс на момент добавления кандидата слияния отличается от опорного индекса, который уже был добавлен.
Затем селектор 347 кандидатов слияния и селектор 447 кандидатов слияния выбирают кандидата слияния из числа кандидатов слияния, зарегистрированных в списке mergeCandList кандидатов слияния. Селектор 347 кандидатов слияния на стороне кодирования вычисляет величину кода и величину искажения и, таким образом, выбирает кандидата слияния, и затем поставляет индекс слияния, указывающий выбранного кандидата слияния, и информацию межкадрового предсказания кандидата слияния в блок 306 предсказания компенсации движения через определитель 305 режима межкадрового предсказания. В отличие от этого селектор 447 кандидатов слияния на стороне декодирования выбирает кандидата слияния на основании декодированного индекса слияния и поставляет выбранного кандидата слияния в блок 406 предсказания компенсации движения.
Обновление списка кандидатов предиктора вектора движения на основании истории
Далее будет подробно описан способ инициализации и обновления списка HmvpCandList кандидатов предиктора вектора движения на основании истории, предоставленного в памяти 111 хранения информации кодирования на стороне кодирования и памяти 205 хранения информации кодирования на стороне декодирования. На фиг. 26 показана блок-схема алгоритма, иллюстрирующая процедуру инициализации/обновления списка кандидатов предиктора вектора движения на основании истории.
В настоящем варианте осуществления список HmvpCandList кандидатов предиктора вектора движения на основании истории обновляется в памяти 111 хранения информации кодирования и памяти 205 хранения информации кодирования. В качестве альтернативы в блоке 102 межкадрового предсказания и блоке 203 межкадрового предсказания может быть предусмотрен блок обновления списка кандидатов предиктора вектора движения на основании истории для обновления списка HmvpCandList кандидатов предиктора вектора движения на основании истории.
В заголовке сегмента выполняются начальные установки списка HmvpCandList кандидатов предиктора вектора движения на основании истории. На стороне кодирования список HmvpCandList кандидатов предиктора вектора движения на основании истории обновляется в случае, когда определитель 105 способа предсказания выбирает режим предиктора нормального вектора движения или режим нормального слияния. На стороне декодирования список HmvpCandList кандидатов предиктора вектора движения на основании истории обновляется в случае, когда информация предсказания, декодированная блоком 201 декодирования битовой строки, является режимом предиктора нормального вектора движения или режимом нормального слияния.
Информация межкадрового предсказания, используемая во время выполнения межкадрового предсказания в режиме предиктора нормального вектора движения или режиме нормального слияния, должна быть зарегистрирована в списке HmvpCandList кандидатов предиктора вектора движения на основании истории в качестве кандидата hMvpCand информации межкадрового предсказания. Кандидат hMvpCand информации межкадрового предсказания включает в себя опорный индекс refIdxL0 для L0 и опорный индекс refIdxL1 для L1, флаг predFlagL0 предсказания, указывающий, должно ли выполняться L0 предсказание, флаг predFlagL1 предсказания, указывающий, должно ли выполняться L1 предсказание, вектор mvL0 движения для L0 и вектор mvL1 движения для L1.
В случае наличия информации межкадрового предсказания, имеющей то же значение, что и кандидат hMvpCand информации межкадрового предсказания среди элементов (то есть информация межкадрового предсказания), зарегистрированных в списке HmvpCandList кандидатов предиктора вектора движения на основании истории, предоставленном в памяти 111 хранения информации кодирования на стороне кодирования и памяти 205 хранения информации кодирования на стороне декодирования, элемент будет удален из списка HmvpCandList кандидатов предиктора вектора движения на основании истории. Напротив, в случае отсутствия информации межкадрового предсказания, имеющей то же значение, что и кандидат hMvpCand информации межкадрового предсказания, элемент заголовка списка HmvpCandList кандидатов предиктора вектора движения на основании истории будет удален и кандидат hMvpCand информации межкадрового предсказания будет добавлен в конец списка HmvpCandList кандидатов предиктора вектора движения на основании истории.
Количество элементов списка HmvpCandList кандидатов предиктора вектора движения, предоставленных в памяти 111 хранения информации кодирования на стороне кодирования и в памяти 205 хранения информации кодирования на стороне декодирования настоящего изобретения, установлено равным шести.
Во-первый, список HmvpCandList кандидатов предиктора вектора движения на основании истории инициализируется в блоках сегментов (этап S2101 на фиг. 26). Все элементы списка HmvpCandList кандидатов предиктора вектора движения на основании истории очищаются в начале сегмента и количество NumHmvpCand (текущее количество кандидатов) кандидатов предиктора вектора движения на основании истории, зарегистрированных в списке HmvpCandList кандидатов предиктора вектора движения, установлено на 0.
Хотя инициализация списка HmvpCandList кандидатов предиктора вектора движения на основании истории должна выполняться в блоках сегментов (первый блок кодирования сегмента), инициализация может выполняться в блоках изображений, плиток или строк блока дерева.
Затем для каждого из блоков кодирования в сегменте повторно выполняется следующий процесс обновления списка HmvpCandList кандидатов предиктора вектора движения на основании истории (этапы S2102-S2107 на фиг. 26).
Прежде всего, в блоках кодирования выполняются начальные установка. Флаг identityCandExist, указывающий наличие идентичного кандидата, устанавливается в значение FALSE (ложно), целевой индекс removeIdx удаления, указывающий удаление целевого кандидата, устанавливается на 0 (этап S2103 на фиг. 26).
Определяется наличие кандидата hMvpCand информации межкадрового предсказания, который нужно зарегистрировать (этап S2104 на фиг. 26). В случае, когда определитель 105 способа предсказания на стороне кодирования определяет режим предиктора нормального вектора движения или режим нормального слияния или, когда блок 201 декодирования битовой строки на стороне декодирования выполняет декодирование как режим предиктора нормального вектора движения или режим нормального слияния, устанавливается соответствующая информация межкадрового предсказания как кандидат hMvpC информации межкадрового предсказания и подлежит регистрации. В случае, когда определитель 105 способа предсказания на стороне кодирования определяет режим внутрикадрового предсказания, режим предиктора вектора движения подблока или режим слияния подблоков или, в случае, когда блок 201 декодирования битовой строки на стороне декодирования выполняет декодирование как режиме внутрикадрового предсказания, в режиме предсказания вектора движения подблока или в режиме слияния подблоков не будет выполняться процесс обновления списка HmvpCandList кандидатов предиктора вектора движения на основании истории, и для регистрации не будет ни одного кандидата hMvpCand информации межкадрового предсказания. В случае отсутствия кандидата hMvpCand информации межкадрового предсказания, подлежащего регистрации, этапы S2105-S2106 будут пропущены (НЕТ на этапе S2104 на фиг. 26). В случае наличия кандидата hMvpCand информации межкадрового предсказания, который должен быть зарегистрирован, будет выполняться процесс этапа S2105 и более поздних (ДА на этапе S2104 на фиг. 26).
Затем определяется, включают ли в себя отдельные элементы списка HmvpCandList кандидатов предиктора вектора движения на основании истории элемент (информацию межкадрового предсказания), имеющий то же значение, что и кандидат hMvpCand информации межкадрового предсказания для регистрации, то есть существует ли идентичный элемент (этап S2105 на фиг. 26). На фиг. 27 показана блок-схема алгоритма процедуры обработки подтверждения идентичного элемента. В случае, когда значение количества кандидатов NumHmvpCand предиктора вектора движения на основании истории равно 0 (НЕТ на этапе этап S2121 на фиг. 27), список HmvpCandList кандидатов предиктора вектора движения на основании истории пуст, и идентичный кандидат отсутствует. Соответственно, этапы S2122-S2125 на фиг. 27 будут пропущены, что завершит процедуру обработки подтверждения идентичного элемента. В случае, когда значение числа NumHmvpCand кандидатов предиктора вектора движения на основании истории больше 0 (ДА на этапе S2121 на фиг. 27), процесс этапа S2123 будет повторяться с индекса hMvpIdx предиктора вектора движения на основании истории от 0 до NumHmvpCand-1 (этапы S2122-S2125 на фиг. 27). Сначала выполняется сравнение на предмет того, идентичен ли элемент hMvpIdx-th HmvpCandList [hMvpIdx], отсчитываемый от 0 в списке кандидатов предиктора вектора движения на основании истории, кандидату hMvpCand информации межкадрового предсказания (этап S2123 на фиг. 27). В случае, когда они идентичны (ДА на этапе S2123 на фиг. 27), флаг identityCandExist, указывающий наличие идентичного кандидата, устанавливается в значение TRUE, и целевой индекс removeIdx удаления, указывающий позицию удаляемого элемента, устанавливается в текущее значение индекса hMvpIdx предиктора вектора движения на основании истории, и обработка подтверждения идентичного элемента будет завершена. В случае, когда они не идентичны (НЕТ на этапе S2123 на фиг. 27), hMvpIdx увеличивается на единицу. В случае, когда индекс hMvpIdx предиктора вектора движения на основании истории меньше или равен NumHmvpCand-1, выполняется обработка на этапе S2123 и позже.
Возвращаясь к блок-схеме алгоритма на фиг. 26, выполняется процесс сдвига и добавления элементов списка HmvpCandList кандидатов предиктора вектора движения на основании истории (этап S2106 на фиг. 26). Фиг. 28 является блок-схемой алгоритма процедуры обработки сдвига/добавления элементов в списке HmvpCandList кандидатов предиктора вектора движения на основании истории на этапе S2106 на фиг. 26. Сначала определяется, следует ли добавлять новый элемент после удаления элемента, хранящегося в списке HmvpCandList кандидатов предиктора вектора движения на основании истории, или добавить новый элемент, не удаляя элемент. В частности, выполняется сравнение на предмет того, является ли флаг identityCandExist, указывающий наличие идентичного кандидата TRUE, или равен ли NumHmvpCand 6 (этап S2141 на фиг. 28). В случае, когда одно из условий, при которых флаг identityCandExist, указывающий наличие идентичного кандидата, имеет значение TRUE или то, что текущее количество кандидатов NumHmvpCand равно 6, выполняется (ДА на этапе S2141 на фиг. 28), элемент, сохраненный в списке HmvpCandList кандидатов предиктора вектора движения на основании истории удаляется, и после этого будет добавлен новый элемент. Начальное значение индекса i устанавливается на значение removeIdx + 1. Процесс сдвига элемента на этапе S2143 повторяется от этого начального значения до NumHmvpCand. (этапы S2142-S2144 на фиг. 28). Путем копирования элементов HmvpCandList [i] в HmvpCandList [i - 1] элементы сдвигаются вперед (этап S2143 на фиг. 28) и i увеличивается на единицу (этапы S2142-S2144 на фиг. 28). Затем кандидат hMvpCand информации межкадрового предсказания добавляется в (NumHmvpCand-1) HmvpCandList [NumHmvpCand-1], отсчитывая от 0, что соответствует концу списка кандидатов предиктора вектора движения на основании истории (этап S2145 на фиг. 28) и процесс сдвига/добавления элементов списка HmvpCandList кандидатов предиктора вектора движения на основании истории будет завершен. Напротив, в случае, когда ни одно из условий, при которых флаг identityCandExist, указывающий наличие идентичного кандидата, имеет значение TRUE и что NumHmvpCand равно 6, не удовлетворяется (НЕТ на этапе S2141 на фиг. 28), кандидат hMvpCand информации межкадрового предсказания будет добавлен в конец списка кандидатов предиктора вектора движения на основании истории без удаления элемента, хранящегося в списке HmvpCandList кандидатов предиктора вектора движения на основании истории (этап S2146 на фиг. 28). Здесь концом списка кандидатов предиктора вектора движения на основании истории является NumHmvpCand-th HmvpCandList [NumHmvpCand], отсчитываемый от 0. Более того, NumHmvpCand увеличивается на единицу и процесс сдвига и добавления элементов списка HmvpCandList кандидатов предиктора вектора движения на основании истории завершен.
На фиг. 31 показан вид, иллюстрирующий пример процесса обновления списка кандидатов предиктора вектора движения на основании истории. В случае, когда новый элемент должен быть добавлен в список HmvpCandList кандидатов предиктора вектора движения на основании истории, в котором уже зарегистрировано шесть элементов (информация межкадрового предсказания), список HmvpCandList кандидатов предиктора вектора движения на основании истории сравнивается с новой информацией межкадрового предсказания в порядке с начального элемента (фиг. 31A). Когда новый элемент имеет то же значение, что и третий элемент HMVP2 из заголовка списка HmvpCandList кандидатов предиктора вектора движения на основании истории, элемент HMVP2 удаляется из списка HmvpCandList кандидатов предиктора вектора движения на основании истории и элементы HMVP3-HMVP5 сдвигаются (копируются) один за другим вперед, и новый элемент добавляется в конец списка HmvpCandList кандидатов предиктора вектора движения на основании истории (фиг. 31B) для завершения обновления списка HmvpCandList кандидатов предиктора вектора движения на основании истории (фиг. 31C).
Процесс получения кандидатов предиктора вектора движения на основании истории
Далее будет подробно описан способ получения кандидата предиктора вектора движения на основании истории из списка HmvpCandList кандидатов предиктора вектора движения на основании истории. Это соответствует процедуре обработки этапа S304 на фиг. 20, касающейся общей обработки, выполняемой блоком 323 получения кандидата предиктора вектора движения на основании истории блока 301 получения режима предиктора нормального вектора движения на стороне кодирования и блоком 423 получения кандидата предиктора вектора движения на основании истории из блока 401 получения режима предиктора нормального вектора движения на стороне декодирования. Фиг. 29 является блок-схемой последовательности операций, иллюстрирующей процедуру обработки получения кандидата предиктора вектора движения на основании истории.
В случае, когда текущее количество кандидатов numCurrMvpCand предиктора вектора движения больше или равно максимальному количеству элементов списка mvpListLX кандидатов предиктора вектора движения (здесь 2) или количество кандидатов NumHmvpCand предиктора вектора движения на основании истории равно 0 (НЕТ на этапе S2201 на фиг. 29), процесс этапов S2202-S2209 на фиг. 29 будет опущен, и процедура обработки получения кандидата предиктора вектора движения на основании истории будет завершена. В случае, когда число numCurrMvpCand текущих кандидатов предиктора вектора движения меньше 2, что является максимальным числом элементов списка mvpListLX кандидатов предиктора вектора движения, и, в случае, когда значение числа NumHmvpCand кандидатов предиктора вектора движения на основании истории больше 0 (ДА на этапе S2201 на фиг. 29), будет выполняться процесс этапов S2202-S2209 на фиг. 29.
Затем процесс этапов S2203-S2208 на фиг. 29 повторяется до тех пор, пока индекс i не станет равным от 1 до меньшего значения из 4, или до числа кандидатов numCheckedHMVPCand предиктора вектора движения на основании истории (этапы S2202-S2209 на фиг. 29). В случае, когда текущее количество кандидатов numCurrMvpCand предиктора вектора движения больше или равно 2, что является максимальным количеством элементов списка mvpListLX кандидатов предиктора вектора движения (НЕТ на этапе S2203 на фиг. 29), этапы процесса S2204-S2209 на фиг. 29 будут опущены, и процедура обработки получения кандидата предиктора вектора движения на основании истории будет завершена. В случае, когда текущее количество кандидатов numCurrMvpCand предиктора вектора движения меньше 2, что является максимальным количеством элементов в списке mvpListLX кандидатов предиктора вектора движения (ДА на этапе S2203 на фиг. 29), будет выполняться процесс на этапе S2204 и позже на фиг. 29.
Затем процесс на этапах S2205-S2207 выполняется для случаев, когда Y равно 0, и Y равно 1 (L0 и L1) (этапы S2204-S2208 на фиг. 29). В случае, когда текущее количество кандидатов numCurrMvpCand предиктора вектора движения больше или равно 2, что является максимальным количеством элементов списка mvpListLX кандидатов предиктора вектора движения (НЕТ на этапе S2205 на фиг. 29), процесс этапов S2206-S2209 на фиг. 29 будут опущены, и процедура обработки получения кандидата предиктора вектора движения на основании истории будет завершена. В случае, когда текущее количество кандидатов numCurrMvpCand предиктора вектора движения меньше 2, что является максимальным количеством элементов в списке mvpListLX кандидатов предиктора вектора движения (ДА на этапе S2205 на фиг. 29), будет выполняться процесс на этапе S2206 и позже на фиг. 29.
Затем, в случае, когда список HmvpCandList кандидатов предиктора вектора движения на основании истории включает в себя элемент, имеющий тот же опорный индекс, что и опорный индекс refIdxLX целевого вектора движения кодирования/декодирования и который отличается от любого элемента списка mvpListLX предикторов вектора движения (ДА на этапе S2206 на фиг. 29), вектор движения LY кандидата HmvpCandList [NumHmvpCand-i] предиктора вектора движения на основании истории добавляется к numCurrMvpCand-ому элементу mvpListLX [numCurr] посчитывается от 0 в списке кандидатов предиктора вектора движения (этап S2207 на фиг. 29), и число numCurrMvpCand текущих кандидатов предиктора вектора движения увеличивается на единицу. В случае, когда в списке HmvpCandList кандидатов предиктора вектора движения на основании истории отсутствует элемент, который имеет тот же опорный индекс, что и опорный индекс refIdxLX целевого вектора движения кодирования/декодирования, и отличается от любого элемента списка mvpListLX предикторов вектора движения (НЕТ на этапе S2206 на фиг. 29), дополнительный процесс на этапе S2207 будет пропущен.
Процесс этапов S2205-S2207 на фиг. 29 выполняется как для L0, так и для L1 (этапы S2204-S2208 на фиг. 29). Индекс i увеличивается на единицу, и когда индекс i меньше или равен любому из меньшего значения 4 или количества кандидатов NumHmvpCand предиктора вектора движения на основании истории, процесс этапа S2203 и более поздних будет повторяться (этапы S2202-S2209 на фиг. 29).
Процесс получения кандидатов слияния на основании истории
Ниже приводится подробное описание способа получения кандидата слияния на основании истории из списка HmvpCandList кандидатов слияния на основании истории, процедуры процесса этапа S404 на фиг. 21, который является общим процессом блока 345 получения кандидатов слияния на основании истории из блока 302 получения режима нормального слияния на стороне кодирования, и блока 445 получения кандидатов слияния на основании истории блока 402 получения режима нормального слияния на стороне декодирования. На фиг. 30 показана блок-схема последовательности операций, иллюстрирующая процедуру обработки получения кандидатов слияния на основании истории.
Во-первых, выполняется процесс инициализации (этап S2301 на фиг. 30). Каждому из элементов от 0 до (numCurrMergeCand -1) isPruned [i] устанавливается значение FALSE, и переменная numOrigMergeCand устанавливается на значение numCurrMergeCand числа элементов, зарегистрированных в текущем списке кандидатов слияния.
Затем начальное значение индекса hMvpIdx устанавливается равным 1, и дополнительный процесс с этапа S2303 по этап S2310 на фиг. 30 повторяется от этого начального значения до NumHmvpCand (этапы S2302-S2311 на фиг. 30). Когда число numCurrMergeCand элементов, зарегистрированных в текущем списке кандидатов слияния, не меньше или равно (максимальное количество кандидатов слияния MaxNumMergeCand-1), кандидаты слияния были добавлены ко всем элементам в списке кандидатов слияния. Соответственно, процесс получения кандидатов слияния на основании истории будет завершен (НЕТ на этапе S2303 на фиг. 30). В случае, когда число numCurrMergeCand элементов, зарегистрированных в текущем списке кандидатов слияния, меньше или равно (максимальное количество кандидатов слияния MaxNumMergeCand-1), будет выполняться процесс этапа S2304 и позже. sameMotion устанавливается в значение FALSE (этап S2304 на фиг. 30). Затем начальное значение индекса i устанавливается на 0, и процесс этапов S2306 и S2307 на фиг. 30 выполняется от этого начального значения до numOrigMergeCand-1 (этапы S2305-S2308 на фиг. 30). Сравнение выполняется на предмет того, является ли (NumHmvpCand-hMvpIdx) элемент HmvpCandList [NumHmvpCand-hMvpIdx], отсчитываемый от 0 в списке кандидатов предиктора вектора движения на основании истории, тем же значением, что и i-ый элемент mergeCandList [i], отсчитываемый от 0 в списке кандидатов слияния (этап S2306 на фиг. 30).
Определяется, что кандидаты слияния имеют одинаковое значение в случае, когда все составляющие элементы (режим межкадрового предсказания, опорный индекс, вектор движения) кандидата слияния имеют одинаковое значение. В случае, когда кандидаты слияния имеют одинаковое значение и isPruned [i] установлен на FALSE (ДА на этапе S2306 на фиг. 30), для sameMotion и isPruned [i] будет установлено значение TRUE (этап S2307 на фиг. 30). В случае, если значения не совпадают (НЕТ на этапе S2306 на фиг. 30), процесс на этапе S2307 будет пропущен. После завершения обработки повторения с этапа S2305 по этап S2308 на фиг. 30 выполняется сравнение на предмет того, является ли sameMotion FALSE (этап S2309 на фиг. 30). В случае, когда sameMotion имеет значение FALSE (ДА на этап S2309 на фиг. 30), то есть (NumHmvpCand-hMvpIdx) элемент HmvpCandList [NumHmvpCand - hMvpIdx], который отсчитывается от 0 в списке кандидатов предиктора вектора движения на основании истории, отсутствует в mergeCandList и, следовательно, элемент HmvpCandList [NumHmvpCand - hMvpIdx], который является (NumHmvpCand - hMvpIdx) элементом, отсчитываемым от 0 в списке кандидатов предиктора вектора движения на основании истории, добавляется в mergeCandList [ngeumCurr], который является numCurrMergeCand в списке кандидатов слияния, и numCurrMergeCand увеличивается на единицу (этап S2310 на фиг. 30). Индекс hMvpIdx увеличивается на единицу (этап S2302 на фиг. 30), и процесс этапов S2302-S2311 на фиг. 30 повторяется.
После завершения подтверждения всех элементов в списке кандидатов предиктора вектора движения на основании истории или завершения добавления кандидатов слияния ко всем элементам в списке кандидатов слияния процесс получения кандидатов слияния на основании истории завершается.
Процесс получения кандидатов усредненного слияния
Ниже приводится подробное описание способа получения кандидата усредненного слияния, процедуры обработки этапа S403 на фиг. 21, который является общим процессом блока 344 получения кандидата усредненного слияния блока 302 получения режима нормального слияния на стороне кодирования, и блока 444 получения кандидата усредненного слияния блока 402 получения режима нормального слияния на стороне декодирования. На фиг. 38 показана блок-схема алгоритма, иллюстрирующая процедуру обработки получения кандидата усредненного слияния.
Сначала выполняется процесс инициализации (этап S1301 на фиг. 38). Переменная numOrigMergeCand устанавливается равной количеству элементов numCurrMergeCand, зарегистрированных в текущем списке кандидатов слияния.
Затем выполняется последовательное сканирование, начиная с начала списка кандидатов слияния для определения двух фрагментов информации движения. Индекс i, указывающий первую информацию движения, устанавливается таким образом, что индекс i = 0, и индекс j, указывающий вторую информацию движения, устанавливается таким образом, что индекс j=1. (Этапы S1302-S1303 на фиг. 38). Когда число numCurrMergeCand элементов, зарегистрированных в текущем списке кандидатов слияния, не меньше или равно (максимальное количество кандидатов MaxNumMergeCand-1 слияния), ко всем элементам в списке кандидатов слияния были добавлены кандидаты слияния. Соответственно, процесс получения кандидатов слияния на основании истории будет завершен (этап S1304 на фиг. 38). В случае, когда количество numCurrMergeCand элементов, зарегистрированных в текущем списке кандидатов слияния, меньше или равно (максимальное количество кандидатов MaxNumMergeCand-1 слияния), будет выполняться процесс этапа S1305 и более поздних.
Определяется, являются ли действительной как i-ая информация mergeCandList [i] движения из списка кандидатов слияния, так и j-ая информация mergeCandList [j] движения из списка кандидатов слияния (этап S1305 на фиг. 38). В случае, когда обе являются недействительными, процесс переходит к следующему элементу без получения кандидата усредненного слияния mergeCandList [i] и mergeCandList [j]. В случае, когда условие, что оба mergeCandList [i] и mergeCandList [j] являются недействительными, не удовлетворяется, следующий процесс повторяется с X, установленным на 0 и 1 (этапы S1306-S1314 на фиг. 38).
Определение, действительно ли LX предсказание mergeCandList [i] (этап S1307 на фиг. 38). В случае, когда LX предсказание mergeCandList [i] является действительным, выполняется определение, действительно ли LX предсказание mergeCandList [j] (этап S1308 на фиг. 38). В случае, когда LX предсказание mergeCandList [j] действительно, то есть в случае, когда действительны как LX предсказание mergeCandList [i], так и LX предсказание mergeCandList [j], получают вектор движения LX предсказания путем усреднения вектора движения предсказания LX для mergeCandList [i] и вектора движения предсказания LX для mergeCandList [j] и будет получен кандидат усредненного слияния предсказания LX, имеющий опорный индекс предсказания LX для mergeCandList [i], для установления LX предсказание как averageCand, и LX предсказание averageCand будет являться действительным (этап S1309 на фиг. 38). На этапе S1308 на фиг. 38, в случае, когда LX предсказание mergeCandList [j] недействительно, то есть в случае, когда LX предсказание mergeCandList [i] действительно и LX предсказание mergeCandList [j] недействительно, будут получены вектор движения LX предсказания mergeCandList [i] и кандидат усредненного слияния LX предсказания, имеющий опорный индекс, чтобы быть установленным как LX предсказание averageCand и LX предсказание meanCand будет действительным (этап S1310 на фиг. 38). В случае, когда LX предсказание mergeCandList [i] недействительно на этапе S1307 на фиг. 38, то выполняется определение относительно того, действительно ли LX предсказание mergeCandList [j] (этап S1311 на фиг. 38). В случае, когда LX предсказание mergeCandList [j] действительно, то есть в случае, когда LX предсказание mergeCandList [i] недействительно и LX предсказание mergeCandList [j] действительно, будут получены вектор движения LX предсказания mergeCandList [j], и кандидат усредненного слияния LX предсказания, имеющий опорный индекс, чтобы быть установленным как LX предсказание averageCand, и LX предсказание averageCand будет являться действительным (этап S1312 на фиг. 38). На этапе S1311 на фиг. 38, в случае, когда LX предсказание mergeCandList [j] недействительно, то есть в случае, когда LX предсказание mergeCandList [i] и LX предсказание mergeCandList [j] оба недействительны, LX предсказание averageCand будет недействительным (этап S1312 на фиг. 38).
Полученный таким образом кандидат averageCand усредненного слияния L0 предсказания, L1 предсказания или предсказания BI, добавляется к numCurrMergeCand-th mergeCandList [numCurrMergeCand] списка кандидатов слияния, и numCurrMergeCand увеличивается на единицу (этап S1315 на фиг. 38). На этом процесс получения кандидата усредненного слияния завершается.
Кандидат усреднённого слияния получается посредством усреднения по каждой из горизонтальной составляющей вектора движения и вертикальной составляющей вектора движения.
Процесс предсказания компенсации движения
Блок 306 предсказания компенсации движения получает позицию и размер блока, который в настоящее время подвергается обработке предсказания при кодировании. Дополнительно, блок 306 предсказания компенсации движения получает информацию межкадрового предсказания из определителя 305 режима межкадрового предсказания. Опорный индекс и вектор движения выводятся из полученной информации межкадрового предсказания и опорное изображение, указанное опорным индексом в памяти 104 декодированного изображения сдвигается из той же позиции, что и сигнал изображения целевого блока предсказания, который подвергается обработке с предсказанием, на величину вектора движения. После сдвига получают сигнал изображения этой позиции и после этого генерируется сигнал предсказания.
В случае, когда предсказание выполнено из сигнального опорного изображения, например, когда режим межкадрового предсказания в межкадровом предсказании является L0 предсказанием или L1 предсказанием, в качестве сигнала предсказания компенсации движения сигнал предсказания устанавливается сигнал предсказания, полученный из одного опорного изображения. В случае, когда предсказание выполняется из двух опорных изображений, например, когда режимом межкадрового предсказания является предсказание BI, в качестве сигнала предсказания компенсации движения устанавливается средневзвешенное значение сигналов предсказания, полученных из двух опорных изображений. Полученный сигнал предсказания компенсации движения подается в определитель 105 способа предсказания. Здесь отношение средневзвешенных значений при двунаправленном предсказании устанавливается равным 1:1. В качестве альтернативы, можно использовать другое отношение средневзвешенных значений. Например, коэффициент взвешенного усреднения может быть установлен таким образом, что чем короче интервал изображения между целевым изображением предсказания и опорным изображением, тем выше коэффициент взвешенного усреднения. Вычисление коэффициента взвешенного усреднения также может выполняться с использованием таблицы соответствия между комбинацией интервалов изображения и коэффициентов взвешенного усреднения.
Блок 406 предсказания компенсации движения имеет функцию, аналогичную блоку 306 предсказания компенсации движения на стороне кодирования. Блок 406 предсказания компенсации движения получает информацию межкадрового предсказания от блока 401 получения режима предиктора нормального вектора движения, блока 402 получения режима нормального слияния, блока 403 получения режима предиктора вектора движения подблока и блока 404 получения режима слияния подблока через переключатель 408. Блок 406 предсказания компенсации движения подает полученный сигнал предсказания компенсации движения в блок 207 наложения сигнала декодированного изображения.
Режим межкадрового предсказания
Процесс выполнения предсказания из одного опорного изображения определяется как однонаправленное предсказание. Однонаправленное предсказание выполняет предсказание L0 предсказания или L1 предсказания с использованием одного из двух опорных изображений, зарегистрированных в справочных списках L0 или L1.
На фиг. 32 показан случай однонаправленного предсказания, в котором опорное изображение (RefL0Pic) L0 происходит в тот момент до целевого изображения (CurPic). Фиг. 33 иллюстрирует случай однонаправленного предсказания, в котором опорное изображение L0 предсказания происходит в тот момент после целевого изображения. Точно так же, однонаправленное предсказание может быть выполнено путем замены L0 предсказания опорного изображения на фиг. 32 и фиг. 33 на опорное изображение (RefL1Pic) L1 предсказания.
Процесс выполнения предсказания из двух опорных изображений определяется как двунаправленное предсказание. Двунаправленное предсказание выполняет предсказание, выраженное как предсказание BI, с использованием как L0 предсказания, так и L1 предсказания. Фиг. 34 иллюстрирует случай двунаправленного предсказания, в котором L0 предсказание опорного изображения происходит в тот момент до целевого изображения и L1 предсказание опорного изображения происходит в тот момент после целевого изображения. Фиг. 35 иллюстрирует случай двунаправленного предсказания, в котором опорное изображение L0 предсказания и опорное изображение L1 предсказания происходит в тот момент до целевого изображения. Фиг. 36 иллюстрирует случай двунаправленного предсказания, в котором опорный кадр для L0 предсказания и опорное изображение L1 предсказания происходит в тот момент после целевого изображения.
Таким образом, можно использовать предсказание без ограничения взаимосвязи между типом предсказания L0/L1 и временем, так что L0 для прошлого направления и L1 для будущего направления. Более того, двунаправленное предсказание может выполнить каждое из L0 предсказание L1 предсказание, используя то же опорное изображение. Определение, следует ли выполнять предсказание компенсации движения при однонаправленном предсказании или двунаправленном предсказании, выполняется на основании информации (например, флага), указывающей, следует ли использовать L0 предсказание и следует ли использовать L1 предсказание.
Опорный индекс
В варианте осуществления настоящего изобретения, можно выбрать оптимальные опорное изображение из множества опорных изображений в предсказании компенсации движения для повышения точности предсказания компенсации движения. Таким образом, опорное изображение, используемое в предсказании компенсации движения должно быть использовано в качестве опорного индекса, и опорный индекс кодируется в битовом потоке вместе с разностью векторов движения.
Процесс компенсации движения на основании режима предиктора нормального вектора движения
Как проиллюстрировано в блоке 102 межкадрового предсказания на стороне кодирования на фиг. 16, в случае, когда в определителе 305 режима межкадрового предсказания была выбрана информация межкадрового предсказания блоком 301 получения режима предиктора нормального вектора движения, блок 306 предсказания компенсации движения получает эту информацию межкадрового предсказания из определителя 305 режима межкадрового предсказания и получает режим межкадрового предсказания, опорный индекс и вектор движения целевого блока и, таким образом, генерирует сигнал предсказания компенсации движения. Сформированный сигнал предсказания компенсации движения подается в определитель 105 способа предсказания.
Аналогично, как проиллюстрировано в блоке 203 межкадрового предсказания на стороне декодирования на фиг. 22, в случае, когда переключатель 408 подключен к блоку 401 получения режима предиктора нормального вектора движения во время процесса декодирования, блок 406 предсказания компенсации движения получает информацию межкадрового предсказания посредством блока 401 получения режима предиктора нормального вектора движения и получает режим межкадрового предсказания, опорный индекс и вектор движения целевого блока и, таким образом, генерирует сигнал предсказания компенсации движения. Сформированный сигнал предсказания компенсации движения подается в блок 207 наложения сигнала декодированного изображения.
Процесс компенсации движения на основании режима нормального слияния
Как проиллюстрировано в блоке 102 межкадрового предсказания на стороне кодирования на фиг. 16, в случае, когда в определителе 305 режима межкадрового предсказания была выбрана информация межкадрового предсказания блоком 302 получения режима нормального слияния, блок 306 предсказания компенсации движения получает эту информацию межкадрового предсказания из определителя 305 режима межкадрового предсказания и получает режим межкадрового предсказания, опорный индекс и вектор движения целевого блока, тем самым, генерируя сигнал предсказания компенсации движения. Сформированный сигнал предсказания компенсации движения подается в определитель 105 способа предсказания.
Аналогично, как проиллюстрировано в блоке 203 межкадрового предсказания на стороне декодирования на фиг. 22, в случае, когда переключатель 408 подключен к блоку 402 получения режима нормального слияния во время процесса декодирования, блок 406 предсказания компенсации движения получает информацию межкадрового предсказания блоком 402 получения режима нормального слияния и получает режим межкадрового предсказания, опорный индекс и вектор движения целевого блока, тем самым, генерируя сигнал предсказания компенсации движения. Сформированный сигнал предсказания компенсации движения подается в блок 207 наложения сигнала декодированного изображения.
Процесс компенсации движения на основании режима предиктора вектора движения подблока
Как проиллюстрировано в блоке 102 межкадрового предсказания на стороне кодирования на фиг. 16, в случае, когда в определителе 305 режима межкадрового предсказания была выбрана информация межкадрового предсказания блоком 303 получения режима предиктора вектора движения подблока, блок 306 предсказания компенсации движения получает эту информацию межкадрового предсказания из определителя 305 режима межкадрового предсказания и получает режим межкадрового предсказания, опорный индекс и вектор движения целевого блока, тем самым, генерируя сигнал предсказания компенсации движения. Сформированный сигнал предсказания компенсации движения подается в определитель 105 способа предсказания.
Аналогично, как проиллюстрировано в блоке 203 межкадрового предсказания на стороне декодирования на фиг. 22, в случае, когда переключатель 408 подключен к блоку 403 получения режима предиктора вектора движения подблока во время процесса декодирования, блок 406 предсказания компенсации движения получает информацию межкадрового предсказания посредством блока 403 получения режима предиктора вектора движения подблока и выводит режим межкадрового предсказания, опорный индекс и вектор движения целевого блока, тем самым, генерируя сигнал предсказания компенсации движения. Сформированный сигнал предсказания компенсации движения подается в блок 207 наложения сигнала декодированного изображения.
Процесс компенсации движения на основании режима слияния подблоков
Как проиллюстрировано в блоке 102 межкадрового предсказания на стороне кодирования на фиг. 16, в случае, когда в определителе 305 режима межкадрового предсказания была выбрана информация межкадрового предсказания блоком 304 получения режима слияния подблоков, блок 306 предсказания компенсации движения получает эту информацию межкадрового предсказания из определителя 305 режима межкадрового предсказания и выводит режим межкадрового предсказания, опорный индекс и вектор движения целевого блока, тем самым, генерируя сигнал предсказания компенсации движения. Сформированный сигнал предсказания компенсации движения подается в определитель 105 способа предсказания.
Аналогично, как проиллюстрировано в блоке 203 межкадрового предсказания на стороне декодирования на фиг. 22, в случае, когда переключатель 408 подключен к блоку 404 получения режима слияния подблоков во время процесса декодирования, блок 406 предсказания компенсации движения получает информацию межкадрового предсказания посредством блока 404 получения режима слияния подблоков и выводит режим межкадрового предсказания, опорный индекс и вектор движения целевого блока, тем самым, генерируя сигнал предсказания компенсации движения. Сформированный сигнал предсказания компенсации движения подается в блок 207 наложения сигнала декодированного изображения.
Процесс компенсации движения на основании предсказания аффинного преобразования
В режиме предиктора нормального вектора движения и режиме нормального слияния может использоваться компенсация движения с использованием аффинной модели на основании следующих флагов. Следующие флаги отражаются в следующих флагах на основании условий межкадрового предсказания, определенных определителем 305 режима межкадрового предсказания в процессе кодирования, и кодируются в битовом потоке. В процессе декодирования определяется, выполнять ли компенсацию движения с использованием аффинной модели на основании следующих флагов в битовом потоке.
sps_affine_enabled_flag указывает, может ли использоваться компенсация движения с использованием аффинной модели во межкадровом предсказании. Когда sps_affine_enabled_flag равен 0, процесс подавляется, чтобы не выполнять компенсацию движения с помощью аффинной модели в блоках последовательности. Более того, inter_affine_flag и cu_affine_type_flag не передаются в синтаксисе блока кодирования (CU) кодирующей видеопоследовательности. Когда sps_affine_enabled_flag равен 1, может использоваться компенсация движения с помощью аффинной модели в видеопоследовательности кодирования.
sps_affine_type_flag указывает, может ли использоваться компенсация движения с использованием 6-параметрической аффинной модели во межкадровом предсказании. Когда sps_affine_type_flag равен 0, процесс подавляется, чтобы не выполнять компенсацию движения с использованием 6-параметрической аффинной модели. Более того, cu_affine_type_flag не передается в синтаксисе CU кодирующей видеопоследовательности. Когда sps_affine_type_flag равен 1, в видеопоследовательности кодирования может использоваться компенсация движения на основании 6-параметрической аффинной модели. В случае отсутствия sps_affine_type_flag, должен быть равен 0.
В случае декодирования P- или B-сегмента, когда inter_affine_flag равен 1 в текущем CU, для генерирования сигнала предсказания компенсации движения текущего CU используется компенсация движения с использованием аффинной модели. Когда inter_affine_flag равен 0, аффинная модель не используется для текущего CU. В случае отсутствия inter_affine_flag, должен быть равен 0.
В случае декодирования P- или B-сегмента, когда cu_affine_type_flag равен 1 в текущем CU, для генерирования сигнала предсказания компенсации движения текущего CU используется компенсация движения с использованием 6-параметрической аффинной модели. Когда cu_affine_type_flag равен 0, для генерирования сигнала предсказания компенсации движения CU, обрабатываемого в данный момент, используется компенсация движения с использованием четырехпараметрической аффинной модели.
Опорный индекс и вектор движения выводятся в блоках подблоков в компенсации движения на основании аффинной модели. Соответственно, сигнал предсказания с компенсацией движения генерируется с использованием опорного индекса и вектора движения для обработки в подблоках.
Четырехпараметрическая аффинная модель представляет собой режим, в котором получают вектор движения подблока из четырех параметров горизонтального компонента и вертикального компонента каждого из векторов движения двух контрольных точек и компенсация движения выполняется в блоках подблоков.
Для предсказания компенсации движения раздела 0 используется информация движения однонаправленного предсказания, обозначенная индексом 0 слияния треугольников. Информация движения однонаправленного предсказания, обозначенная индексом 1 слияния треугольников, используется для предсказания компенсации движения раздела 1. Информация движения двунаправленного предсказания, объединенная с информацией движения однонаправленного предсказания, обозначенная индексом 0 слияния треугольников, и информации движения однонаправленного предсказания, обозначенная индексом 1 слияния треугольников, используется для предсказания компенсации движения раздела 2.
Внутриблочное копирование (IBC)
Действительная опорная область внутриблочного копирования будет описана со ссылкой на фиг.39. На фиг.39A показан примерный случай, когда действительная опорная область определяется при условии, что единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования. Блоки 500, 501, 502, 503 и 504 на фиг.39A являются блоками дерева кодирования, и блок 504 среди них является целевым блоком дерева кодирования. Блок 505 представляет собой целевой блок кодирования. Блоки дерева кодирования обрабатываются в порядке 500, 501, 502, 503 и 504. В этом случае все три блока 501, 502 и 503 дерева кодирования, которые обрабатываются непосредственно перед блоком 504 дерева кодирования, включая целевой блок 505 кодирования, устанавливаются как действительные опорные области целевого блока 505 кодирования. Блок дерева кодирования, который обрабатывается перед блоком 501 дерева кодирования, и области, включенные в блок 504 дерева кодирования, включая целевой блок 505 кодирования, устанавливаются все как недействительные опорные области независимо от того, завершена ли обработка перед целевым блоком 505 кодирования.
На фиг.39B показан примерный случай, когда действительная опорная область определяется при условии, что единица, полученная путем разделения на четыре части единицы блока дерева кодирования, используется в качестве стандартного блока внутриблочного копирования. На фиг.39B блоки 515 и 516 представляют собой блоки дерева кодирования, и блок 516 является целевым блоком дерева кодирования. Блок 515 дерева кодирования разделен на блоки 506, 507, 508 и 509, и блок 516 дерева кодирования разделен на блоки 510, 511, 512 и 513. Ссылочная позиция 514 обозначает целевой блок кодирования. Стандартные блоки внутриблочного копирования обрабатываются в порядке 506, 507, 508, 509, 510, 511, 512 и 513. В этом случае три стандартных блока 508, 509, 510 внутриблочного копирования обрабатываются непосредственно перед стандартным блоком 511 внутриблочного копирования, включая целевой блок 514 кодирования, задаются как действительные опорные области целевого блока 514 кодирования. Блок дерева кодирования, обработанный перед стандартным блоком 508 внутриблочного копирования, и вся область, включенная в стандартный блок 511 внутриблочного копирования, включая целевой блок 514 кодирования устанавливаются все как недействительные опорные области независимо от того, завершена ли обработка перед целевым блоком 514 кодирования.
Пространство памяти опорной области
Ниже будет описано пространство памяти для хранения обработанного изображения опорной области. На фиг.56 показано схематичное представление, иллюстрирующее пространство памяти опорной области, когда единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования. Блоки 500, 501, 502, 503, 504 и 505, показанные на фиг.56A, являются блоками дерева кодирования. Блок 503 дерева кодирования является целевым блоком дерева кодирования. Блок 500 дерева кодирования, блок 501 дерева кодирования, блок 502 дерева кодирования являются обработанными блоками дерева кодирования и соответствуют опорной области целевого блока 503 дерева кодирования. Блоки 504 и 505 дерева кодирования являются необработанными блоками дерева кодирования. На фиг.56A промежутки 600, 601, 602 и 603 представляют собой пространство памяти. Пространство памяти 600 хранит обработанное изображение блока кодирования дерева 500. Аналогичным образом, пространство памяти 601 хранит обработанное изображение блока 501 кодирования дерева, в то время как пространство памяти 602 хранит обработанное изображение блока 502 дерева кодирования. Пространство 603 памяти последовательно сохраняет обработанные изображения в соответствии с обработкой целевого блока 503 дерева кодирования. Когда обработка блока 503 дерева кодирования завершается, затем начинается обработка блока 504 дерева кодирования.
Процесс, выполняемый при завершении обработки блока 503 дерева кодирования, будет описан с использованием фиг.56B. На данном этапе блок 504 дерева кодирования будет целевым блоком дерева кодирования. Кроме того, блок 503 дерева кодирования будет опорной областью, и блок 500 дерева кодирования больше не будет опорной областью. На данном этапе обработанное изображение блока 503 дерева кодирования было сохранено в пространстве 603 памяти, которая последовательно хранила обработанное изображение блока 503 дерева кодирования. Так как блок 500 дерева кодирования больше не является опорной областью кодирования блока 504 дерева, обработанное изображение блока 500 дерева кодирования, сохраненное в пространстве 600 памяти, будет представлять собой ненужную информацию. Соответственно, обработанные изображения целевого блока 504 дерева кодирования будут последовательно сохраняться в пространстве 600 памяти. Когда обработка блока 504 дерева кодирования завершена, затем начинается обработка блока 505 дерева кодирования.
Аналогичным образом, пример завершения обработки блока 504 дерева кодирования показан на фиг.56C. На данном этапе блок 505 дерева кодирования будет целевым блоком дерева кодирования, и блок 504 дерева кодирования будет опорной областью. Блок 501 дерева кодирования больше не является опорной областью. Обработанные изображения целевого блока 504 дерева кодирования последовательно сохраняются в пространстве 601 памяти. Когда обработка блока 505 дерева кодирования завершена, начинается обработка следующего блока дерева кодирования.
На фиг.57 показано схематичное представление, иллюстрирующее пространство памяти опорной области, когда действительная опорная область определяется при предположении, что единица получена путем разделения на четыре части блока дерева кодирования, в качестве стандартного блока внутриблочного копирования. На фиг.57A 510 и 511 показаны блоки дерева кодирования. Блок 510 дерева кодирования является обработанным блоком дерева кодирования, и блок 511 дерева кодирования является целевым блоком дерева кодирования. Блок 510 дерева кодирования включает в себя блоки 500, 501, 502 и 503. Блок 511 дерева кодирования включает в себя блоки 504, 505, 506 и 507. Блок 504 является целевым блоком. Блоки 501, 502 и 503 являются обработанными блоками и соответствуют опорной области целевого блока 504. Блоки 505, 506, 507 являются необработанными блоками. Промежутки 600, 601, 602 и 603 на фиг.57A являются пространствами памяти. В пространстве 603 памяти хранится обработанное изображение блока 501. Аналогичным образом, в пространстве 602 памяти хранится обработанное изображение блока 502. В пространстве 603 памяти хранится обработанное изображение блока 503. В пространстве 600 памяти последовательно сохраняются обработанные изображения в соответствии с обработкой целевого блока 504. Когда обработка блока 504 завершена, затем начинается обработка блока 505.
Процесс, выполняемый при завершении обработки блока 504, будет описан с использованием фиг.57B. На данном этапе блок 505 будет целевым блоком дерева кодирования. Кроме того, блок 504 будет опорной областью, и блок 501 больше не будет опорной областью. На данном этапе обработанное изображение блока 504 сохраняется в пространстве 600 памяти, в котором последовательно сохраняется обработанное изображение блока 504. Так как блок 501 дерева кодирования больше не является опорной областью блока 505 дерева кодирования, обработанное изображение блока 501 дерева кодирования, сохраненное в пространстве 601 памяти, будет представлять собой ненужную информацию. Соответственно, обработанные изображения целевого блока 505 дерева кодирования будут последовательно сохраняться в пространстве 601 памяти. Когда обработка блока 505 завершена, затем начинается обработка блока 506 дерева кодирования.
Процесс, выполняемый при завершении обработки блока 504, будет описан с использованием фиг.57C. На данном этапе блок 506 будет целевым блоком. Кроме того, блок 505 будет опорной областью, и блок 502 дерева кодирования больше не будет опорной областью. Аналогично вышеприведенному примеру, обработанные изображения целевого блока 506 дерева кодирования будут последовательно сохраняться в пространстве 602 памяти.
Процесс, выполняемый при завершении обработки блока 505, будет описан со ссылкой на фиг.57D. На данном этапе блок 507 будет целевым блоком. Кроме того, блок 506 будет опорной областью, и блок 503 дерева кодирования больше не будет опорной областью. Аналогично вышеприведенному примеру, обработанные изображения целевого блока 507 дерева кодирования будут последовательно сохраняться в пространстве 603 памяти.
Внутриблочное копирование с предсказанием: сторона кодирования
Процедура обработки внутририблочного копирования с предсказанием на стороне кодирования будет описана со ссылкой на фиг.44.
Сначала детектор 375 блочного вектора обнаруживает блочный вектор mvL (этап S4500 на фиг.44). Затем блок 371 получения пространственного блочного вектора-кандидата IBC, блок 372 получения кандидата предиктора блочного вектора IBC на основе истории, пополнитель 373 кандидата предиктора блочного вектора IBC, селектор 376 кандидата предиктора блочного вектора IBC, вычитатель 378 блочного вектора вычисляют разность блочных векторов для блочного вектора, используемого в режиме предиктора блочного вектора (этапы S4501-S4503 на фиг.44).
Кандидаты предиктора блочного вектора вычисляются для составления списка mvpList кандидатов блочного вектора (этап S4501 на фиг.44). В блоке 352 предсказания внутририблочного копирования блок 371 получения пространственного блочного вектора-кандидата IBC, блок 372 получения блочного вектора-кандидата IBC на основе истории и пополнитель 373 кандидата предиктора блочного вектора IBC получают множество кандидатов предиктора блочного вектора и составляют список кандидатов предиктора блочного вектора mvpList. Подробная процедура обработки, выполняемой на этапе S4501 на фиг.44, будет описана ниже с использованием блок-схемы на фиг.47.
Затем селектор 376 кандидатов предиктора блочного вектора IBC выбирает предиктор mvpL блочного вектора из списка mvpListL кандидатов предиктора блочного вектора (этап S4502 на фиг.44). Вычисляется каждая разность блочных векторов, которая представляет собой разность между блочным вектором mvL и каждым из списка mvpListL[i] кандидатов предиктора блочного вектора, хранящихся в списке mvpListL кандидатов предиктора блочного вектора. Объем кода во время кодирования этих разностей блочных векторов вычисляется для каждого из элементов списка mvpListL кандидатов предиктора блочного вектора. Затем кандидат предиктора блочного вектора mvpListL[i], который минимизирует объем кода для каждого из кандидатов предиктора блочного вектора среди отдельных элементов, зарегистрированных в списке mvpListL кандидатов предиктора блочного вектора, выбирается в качестве предиктора блочного вектора mvpL, и получается его индекс i. В случае, когда существует множество кандидатов предиктора блочного вектора, имеющих минимальный выработанный объем кода в списке mvpListL кандидатов предиктора блочного вектора, кандидат предиктора блочного вектора mvpListL[i], имеющий индекс i в списке mvpListL кандидатов предиктора блочного вектора, представленный маленьким числом, выбирается в качестве оптимального предиктора блочного вектора mvpL, и получается его индекс i.
Затем вычитатель 378 блочных векторов вычитает выбранный предиктор блочного вектора mvpL из блочного вектора mvL и, таким образом, вычисляет разность mvdL блочных векторов в виде:
mvdL = mvL - mvpL (этап S4503 на фиг.44).
Внутриблочное копирование с предсказанием: сторона декодирования
Далее, процедура обработки режима нормального предиктора блочного вектора на стороне декодирования будет описана со ссылкой на фиг.45. На стороне декодирования блок 471 получения кандидата предиктора пространственного блочного вектора IBC, блок 472 получения блочного вектора-кандидата IBC на основе истории, и пополнитель 473 предиктора блочного вектора IBC вычисляют блочный вектор, используемый в режиме предиктора блочного вектора (этапы S4600-S4602 на фиг.45). В частности, вычисляется список mvpListL кандидатов предиктора блочного вектора, выбирается предиктор блочного вектора mvpL, и затем вычисляется блочный вектор mvL.
Кандидаты предиктора блочного вектора вычисляются для составления списка mvpListL кандидатов предиктора блочного вектора (этап S4601 на фиг.45). В блоке 362 предсказания внутририблочного копирования блок 471 получения пространственного блочного вектора-кандидата IBC, блок 472 получения блочного вектора-кандидата IBC на основе истории и пополнитель 473 предиктора блочного вектора IBC вычисляют множество кандидатов предиктора блочного вектора и составляют список mvpListL кандидатов предиктора блочного вектора. Описание подробной процедуры обработки, выполняемой на этапе S4601 на фиг.45, опущено. Затем селектор 476 кандидатов предиктора блочного вектора извлекает кандидата предиктора блочного вектора mvpListL[mvpIdxL], соответствующего индексу предиктора блочного вектора mvpIdxL, декодированному и предоставленному блоком 201 декодирования битовых строк, из списка mvpListL кандидатов предиктора блочного вектора, в качестве выбранного блочного вектора-предиктора mvpL (этап S4601 на фиг.45). Затем сумматор 478 блочных векторов суммирует разность mvdL блочных векторов и предиктора блочных векторов mvpL, декодированные и предоставленные блоком 201 декодирования битовых строк, и вычисляет (этап S4602 на фиг.45) блочный вектор mvL следующим образом:
mvL = mvpL + mvdL
Режим блочного вектора предсказания: способ предсказания блочного вектора
На фиг.47 показана блок-схема алгоритма, иллюстрирующая процедуру обработки предсказания процесса получения режима внутриблочного копирования, имеющего функцию, общую с блоком 352 предсказания внутририблочного копирования устройства для кодирования движущихся изображений и блоком 362 предсказания внутририблочного копирования устройства для декодирования движущихся изображений согласно варианту осуществления настоящего изобретения.
Каждый из блока 352 предсказания внутририблочного копирования и блока 362 предсказания внутририблочного копирования включает в себя список mvpListL кандидатов предиктора блочного вектора. Список mvpListL кандидатов предиктора блочного вектора имеет структуру списка и включает в себя область хранения, которая хранит в качестве элементов индекс предиктора блочного вектора, указывающий местоположение в списке кандидатов предиктора блочного вектора, и кандидата предиктора блочного вектора, соответствующего этому индексу. Номер индекса предиктора блочного вектора начинается с 0, и кандидаты предиктора блочного вектора должны храниться в области хранения списка mvpListL кандидатов предиктора блочного вектора. В настоящем варианте осуществления предполагается, что список mvpListL кандидатов предиктора блочного вектора может регистрировать трех кандидатов предиктора блочного вектора. Кроме того, переменная numCurrMvpIbcCand, указывающая количество кандидатов предиктора блочного вектора, зарегистрированных в списке mvpListL кандидатов предиктора блочного вектора, устанавливается на 0.
Блоки 371 и 471 получения пространственного блочного вектора-кандидата IBC получают кандидата предиктора блочного вектора из соседнего блока на левой стороне (этап S4801 на фиг.47). В этом процессе получаются флаг availableFlagLA, указывающий то, можно ли использовать кандидат предиктора блочного вектора соседнего блока (A0 или A1) с левой стороны, и блочный вектор mvLA, и полученный mvLA будет добавлен в список mvpListL кандидатов предиктора блочного вектора. Затем блоки 371 и 471 получения пространственного блочного вектора-кандидата IBC получают кандидата предиктора блочного вектора из соседнего блока (B0, B1 или B2) на верхней стороне (этап S4802 на фиг.47). Этот процесс получает флаг availableFlagLB, указывающий то, можно ли использовать кандидат предиктора вектора движения соседнего блока на верхней стороне, и блочный вектор mvLB. Когда mvLA и mvLB не равны, блочный вектор mvLB будет добавлен в список mvpListL кандидатов предиктора блочного вектора. Процессы на этапах S4801 и S4802 на фиг.47 представлены в виде общего процесса, за исключением того, что позиции и номера опорных соседних блоков являются различными. Эти процессы получают флаг availableFlagLN, указывающий то, можно ли использовать кандидат предиктора блочного вектора для блока кодирования, и вектор движения mvLN (N указывает A или B, аналогично применяется в дальнейшем).
Затем блоки 372 и 472 получения блочных векторов-кандидатов IBC на основе истории добавляют блочные векторы-кандидаты на основе истории, зарегистрированные в списке HmvpIbcCandList блочных векторов-кандидатов на основе истории, в список mvpListL кандидатов предиктора блочного вектора. (Этап S4803 на фиг.47). Для подробностей процедуры обработки регистрации на этапе S4803 достаточно выполнить операцию, аналогичную операции, показанной на блок-схеме на фиг.29, то есть операцию, когда вектор движения заменяется блочным вектором, список опорных индексов заменяется на L0, список HmvpCandList кандидатов предиктора вектора движения на основе истории заменяется список HmvpIbcCandList блочных векторов-кандидатов на основе истории, и, таким образом, их описание будет опущено.
Затем пополнители 373 и 473 предиктора блочного вектора IBC добавляют блочный вектор, имеющий предварительно определенное значение, такое как (0, 0), до тех пор, пока список mvpListL кандидатов предиктора блочного вектора не будет удовлетворен (S4804 на фиг.47).
Блок получения режима внутриблочного копирования со слиянием
Блок 352 предсказания внутририблочного копирования, показанный на фиг.42, включает в себя блок 371 получения пространственного блочного вектора-кандидата IBC, блок 372 получения блочного вектора-кандидата IBC на основе истории, пополнитель 373 предиктора блочного вектора IBC, блок 380 коррекции опорной позиции, блок 381 коррекции границы опорной области, селектор 374 кандидатов слияния IBC и определитель 377 режима предсказания IBC.
Блок 362 предсказания внутририблочного копирования на фиг.43 включает в себя блок 471 получения пространственного блочного вектора-кандидата IBC, блок 472 получения блочного вектора-кандидата IBC на основе истории, пополнитель 473 предиктора блочного вектора IBC, селектор 474 кандидатов слияния IBC, блок 480 коррекции опорной позиции, блок 481 коррекции границы опорной области и блок 477 блочного копирования.
На фиг.46 показана блок-схема, иллюстрирующая процесс получения режима внутриблочного копирования в режиме слияния, имеющий функцию, общую с блоком 352 предсказания внутририблочного копирования устройства для кодирования движущихся изображений и блоком 362 предсказания внутририблочного копирования устройства для декодирования движущихся изображений согласно варианту осуществления настоящего изобретения.
Блок 352 предсказания внутририблочного копирования и блок 362 предсказания внутририблочного копирования включают в себя список mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния. Список mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния имеет структуру списка и включает в себя: область хранения, в которой в качестве элементов хранится индекс слияния, указывающий местоположение внутри кандидата внутриблочного копирования в режиме слияния; и кандидат внутриблочного копирования в режиме слияния, соответствующий индексу. Номер индекса слияния начинается с 0, и кандидат внутриблочного копирования в режиме слияния сохраняется в области хранения списка mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния. В последующих процессах кандидат слияния индекса слияния, зарегистрированный в списке mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния, будет представлен как mergeIbcCandList [i]. В настоящем варианте осуществления предполагается, что список mergeCandList кандидатов слияния позволяет зарегистрировать по меньшей мере три кандидата внутриблочного копирования в режиме слияния. Более того, переменная numCurrMergeIbcCand, указывающая количество кандидатов внутриблочного копирования в режиме слияния, зарегистрированных в списке mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния, имеет значение 0.
Блок 371 получения пространственного блочного вектора-кандидата IBC и блок 471 получения пространственного блочного вектора-кандидата IBC получают кандидаты A и B пространственного слияния соседних блоков на левой и верхней сторонах целевого блока из информации кодирования, хранящейся в памяти 111 для хранения информации кодирования устройства для кодирования движущегося изображения или в памяти 205 для хранения информации кодирования устройства для декодирования движущегося изображения, и затем добавляют полученные кандидаты пространственного слияния в список mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния (этап S4701 на фиг.46). В данном документе будет определено N, обозначающее один из кандидатов A и B пространственного слияния. Получаются флаг availableFlagN и блочный вектор mvL, указывающие то, может ли информация предсказания внутририблочного копирования блока N использоваться в качестве кандидата N слияния пространственного блочного вектора. Однако в настоящем варианте осуществления кандидат слияния блочных векторов получается без ссылки на другие блоки кодирования, включенные в блок, включая целевой блок кодирования. Соответственно, не будет получаться кандидат слияния пространственного блочного вектора, включенный в блок, включающий в себя целевой блок кодирования.
Затем блок 372 получения кандидата блочного вектора IBC на основе истории и блок 472 получения блочного вектора-кандидата IBC на основе истории добавляют кандидаты предиктора блочного вектора на основе истории, зарегистрированные в списке HmvpIbcCandList кандидатов предиктора блочного вектора на основе истории, в список mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния (этап S4702 на фиг.46). В настоящем примере, в случае, когда блочный вектор, уже добавленный в mergeIbcCandList, и блочный вектор кандидата предиктора блочного вектора на основе истории имеют одинаковое значение, не будет выполняться добавление в mergeIbcCandList.
Затем в случае, когда количество кандидатов numCurrMergeIbcCand слияния, зарегистрированное в списке mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния меньше, чем максимальное количество кандидатов numCurrMergeIbcCand внутриблочного слияния, пополнитель 373 предиктора блочного вектора IBC и пополнитель 473 предиктора блочного вектора IBC получают дополнительный кандидат внутриблочного слияния таким образом, что количество кандидатов numCurrMergeIbcCand слияния, зарегистрированных в списке mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния, находится в пределах верхнего предела максимального количества кандидатов numCurrMergeIbcCand внутриблочного слияния, и добавляют полученный кандидат в список mergeIbcCandList3 кандидатов внутриблочного копирования в режиме слияния (фиг.46). Блочный вектор, имеющий значение (0,0), будет добавлен в список mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния в пределах верхнего предела максимального количества кандидатов numCurrMergeIbcCand внутриблочного слияния.
Затем селектор 374 кандидатов слияния IBC и селектор 474 кандидатов слияния IBC выбирают один из кандидатов внутриблочного слияния, зарегистрированных в списке mergeIbcCandList кандидатов внутриблочного копирования в режиме слияния (этап S4704 на фиг.46). Селектор 374 кандидатов слияния IBC получает декодированное изображение в опорной позиции из памяти 104 декодированных изображений, вычисляет объем кода и величину искажения, тем самым выбирая кандидат слияния, и затем подает индекс слияния, указывающий выбранный кандидат внутриблочного слияния, в определитель 377 режима предсказания IBC. Определитель 377 режима предсказания IBC вычисляет объем кода и количество искажений, тем самым выбирая режим слияния, и затем подает результат в определитель 105 способа предсказания. С другой стороны, селектор 474 кандидатов слияния IBC на стороне декодирования выбирает кандидата внутриблочного слияния на основе декодированного индекса слияния, и затем передает выбранный кандидат внутриблочного слияния в блок 480 коррекции опорной позиции.
Затем блок 380 коррекции опорной позиции и блок 480 коррекции опорной позиции выполняют процесс коррекции опорной позиции над кандидатом внутриблочного слияния (этап S4705 на фиг.46). Подробности процессов блока 380 коррекции опорной позиции и блока 480 коррекции опорной позиции будут описаны ниже.
Затем блок 381 коррекции границы опорной области и блок 481 коррекции границы опорной области выполняют процесс коррекции границы опорной области над кандидатом внутриблочного слияния (этап S4706 на фиг.46). Подробности процессов, выполняемых блоком 381 коррекции опорной позиции и блоком 481 коррекции опорной позиции, будут описаны ниже.
Блок 477 блочного копирования получает декодированное изображение в опорной позиции из памяти 208 декодированных изображений и передает полученное изображение в блок 207 наложения сигнала декодированного изображения. В данном документе блок 477 блочного копирования копирует компонент яркости и компонент цветового различия.
Вышеупомянутый блочный вектор mvL представляет блочный вектор яркости. Когда формат цветового различия равен 420, блочный вектор mvC цветового различия получается следующим образом:
mvC = ((mvL >> (3 + 2)) * 32
С помощью приведенного выше уравнения будет обработан каждый из компонентов x и y mvC.
Блок коррекции опорной позиции
На фиг.48 показана блок-схема, иллюстрирующая процесс, выполняемый блоком 380 коррекции опорной позиции и блоком 480 коррекции опорной позиции. В данном документе предполагается, что единицей стандартного блока внутриблочного копирования является блок дерева кодирования (CTU), и его размер не равен 128×128 выборок.
Сначала вычисляются верхняя левая и нижняя правая позиции опорного блока (S6001). Опорный блок относится к блоку, на который ссылается целевой блок кодирования с использованием блочного вектора. Когда в опорном блоке определено, что верхняя левая позиция имеет координаты (xRefTL, yRefTL), и нижняя правая позиция имеет координаты (xRefBR, yRefBR), будет получено следующее выражение:
(xRefTL, yRefTL) = (xCb + (mvL [0] >> 4), yCb + (mvL [1] >> 4))
(xRefBR, yRefBR) = (xRefTL + cbWidth - 1, yRefTL + cbHeight - 1)
В данном документе позиция целевого блока кодирования имеет координаты (xCb, yCb), блочный вектор – (mvL [0], mvL [1]), ширина целевого блока кодирования равна cbWidth, и высота равна cbHeight.
Затем определяется то, равен ли размер CTU 128×128 выборок (S6002). В данном документе, так как размер не равен 128×128 выборок (S6002: Нет), вычисляются верхнюю левую и нижнюю правую позиции области (S6003), на которую можно ссылаться. Когда верхняя левая позиции (xAvlTL, yAvlTL) и нижняя правая позиция (xAvlBR, yAvlBR) в области, на которую можно ссылаться, отдельные позиции будут получены следующим образом:
NL = Min (1, 7-CtbLog2SizeY) - (1 << ((7-CtbLog2SizeY) << 1))
(xAvlTL, yAvlTL) = (((xCb >> CtbLog2SizeY) + NL) << CtbLog2SizeY,
(yCb >> CtbLog2SizeY) << CtbLog2SizeY))
(xAvlBR, yAvlBR) = (((xCb >> CtbLog2SizeY) << CtbLog2SizeY) -1,
(((yCb >> CtbLog2SizeY) + 1) << CtbLog2SizeY) -1)
В данном документе размер CTU равен CtbLog2SizeY.
Затем определяется то, меньше ли опорная позиция опорного блока в направлении x, чем верхний левый участок области (S6004), на которую можно ссылаться. Когда определение является ложным (S6004: Нет), процесс переходит к следующему процессу (S6006). Напротив, когда определение является истинным (S6004: Да), опорная позиция в направлении x будет скорректирована в соответствии с верхним левым участком области (S6005), на которую можно ссылаться.
На фиг.49 показано схематичное представление, иллюстрирующее состояние коррекции опорной позиции. Ссылочная позиция 6001 обозначает целевой блок дерева кодирования, 6002 обозначает целевой блок кодирования, и 6003 обозначает область, на которую можно ссылаться. Теперь, при условии, что опорный блок r2 расположен в позиции 6011, опорная позиция в направлении x меньше, чем верхний левый участок области, на которую можно ссылаться (S6004: Да). Таким образом, опорная позиция корректируется перед позицией 6012, при условии, что xRefTL = xAvlTL (S6005). В данном документе, так как xRefBR = xRefTL + cbWidth-1 сохраняется, как в S6001, xRefBR также будет скорректирован совместно с скоррекцией xRefTL. При этой коррекции опорной позиции может быть скорректирован блочный вектор mvL [0]. То есть коррекция выполняется следующим образом:
mvL [0] = (xAvlTL - xCb) << 4.
Это удовлетворяет xRefTL = xAvlTL, что позволяет скорректировать опорную позицию.
Таким образом, в случае, когда опорный блок расположен за пределами области, на которую можно ссылаться, коррекция опорной позиции позволит ссылаться на опорный блок.
Теперь предполагается, что некоторые блочные векторы в списке блочных векторов-кандидатов, составленном блоком 352 предсказания внутририблочного копирования, находятся за пределами области, на которую можно ссылаться. В случае, когда опорная позиция не подлежит коррекции, на эти блочные вектора невозможно будет ссылаться, запрещая добавление этих блочных векторов к кандидатам для режима слияния IBC. Напротив, в случае, когда опорная позиция должна быть скорректирована в настоящем изобретении, все блочные векторы в составленном списке кандидатов блочных векторов будут находиться внутри области, на которую можно ссылаться. Это сделает все блочные векторы доступными для ссылок, что позволит добавить все блочные векторы к кандидатам для режима слияния IBC. Таким образом, селектор 374 режима слияния IBC может выбрать оптимальный режим предсказания из каждого из кандидатов режима слияния IBC, соответствующих всем блочным векторам, что приводит к повышению эффективности кодирования.
Теперь предполагается, что некоторые блочные векторы в списке блочных векторов-кандидатов, составленном блоком 362 предсказания внутририблочного копирования, находятся за пределами области, на которую можно ссылаться. В случае, когда опорная позиция не должна корректироваться, к этим блочным векторам будет невозможно обращаться, что приведет отключению декодирования в режиме слияния IBC с использованием этих блочных векторов. В устройстве кодирования, которое не является настоящим изобретением, индекс слияния указывает режим слияния IBC при условии, что эти блочные векторы действуют как некодированные. Однако такой индекс слияния может быть закодирован для выработки битового потока из-за сбоя операции или тому подобного. В других случаях часть битового потока может быть утеряна из-за потери пакета или тому подобного, и результатом декодирования может быть такой индекс слияния. При попытке декодировать такой неполный битовый поток существует возможность обращения к памяти декодированных изображений в неправильной позиции при попытке обратиться за пределами области, на которую можно ссылаться. Таким образом, результат декодирования отличается в зависимости от устройства декодирования, или процесс декодирования останавливается. Напротив, в случае, когда опорная позиция должна быть скорректирована в настоящем изобретении, все блочные векторы в составленном списке кандидатов блочных векторов будут находиться внутри области, на которую можно ссылаться. Таким образом, даже тогда, когда декодируется такой неполный битовый поток, опорная позиция будет скорректирована внутри области, на которую можно ссылаться, что позволяет ей быть опорной. Таким образом, коррекция опорной позиции позволяет гарантировать диапазон обращения к памяти. Это приводит к получению того же результата декодирования устройством декодирования, что позволяет продолжить процесс декодирования, что, в свою очередь, приводит к повышению устойчивости устройства декодирования.
Кроме того, в случае, когда блочный вектор должен быть скорректирован при коррекции опорной позиции, целью является блочный вектор яркости. В данном документе блочный вектор цветового различия вычисляется из блочного вектора яркости. То есть коррекция блочного вектора яркости также корректирует блочный вектор цветового различия. Таким образом, нет необходимости снова корректировать опорную позицию по цветовому различию. Объем обработки может быть уменьшен по сравнению со случаем, когда коррекция блочного вектора не выполняется и возникает необходимость определять, возможна ли ссылка на основе как яркости, так и цветового различия.
Кроме того, в случае, когда блочный вектор должен быть скорректирован при коррекции опорной позиции, скорректированный блочный вектор будет сохранен в памяти 111 для хранения информации кодирования или памяти 205 для хранения информации кодирования как блочный вектор целевого блока кодирования. То есть скорректированная опорная позиция и позиция, указанная блочным вектором, являются одинаковыми. В данном документе хранение результата декодирования в памяти декодированных изображений иногда включает в себя процесс фильтрации с удалением блочности. В этом процессе фильтрации управление мощностью фильтра осуществляется за счет разницы между блочными векторами двух блоков, находящихся перед границей блока. По сравнению со случаем, когда блочный вектор не скорректирован, и скорректированная опорная позиция отличается от позиции, которую указывает блочный вектор, можно получить дополнительную соответствующую мощность фильтра, которая приводит к повышению эффективности кодирования.
Затем определяется то, меньше ли опорная позиция опорного блока в направлении y, чем верхний левый участок области, на которую можно ссылаться (S6006). Когда определение является ложным (S6006: Нет), процесс переходит к следующему процессу (S6008). Напротив, когда определение является истинным (S6006: Да), опорная позиция в направлении y будет скорректирована в соответствии с верхним левым участком области (S6007), на которую можно ссылаться.
Теперь, при условии, что опорный блок r4 расположен в позиции 6021, опорная позиция в направлении y меньше верхнего левого участка области, на которую можно ссылаться (S6006: Да). Таким образом, опорная позиция корректируется перед позицией 6022, при условии, что yRefTL = yAvlTL (S6007). В данном документе, так как yRefBR = yRefTL + cbHeight-1 выполняется, как в S6001, yRefBR также будет скорректирован вместе с коррекцией yRefTL. При этой коррекции опорной позиции может быть скорректирован блочный вектор mvL [1]. То есть коррекция выполняется следующим образом:
mvL [1] = (yAvlTL - yCb) << 4
Это удовлетворяет yRefTL = yAvlTL, что позволяет корректировать опорную позицию.
Затем определяется то, больше ли опорная позиция опорного блока в направлении x, чем нижний правый участок области, на которую можно ссылаться (S6008). Когда определение является ложным (S6008: Нет), процесс переходит к следующему процессу (S6010). Напротив, когда определение является истинным (S6008: Да), опорная позиция в направлении x будет скорректирована в соответствии с нижним правым участком области, на которую можно ссылаться (S6009).
Теперь, при условии, что опорный блок r7 расположен в позиции 6031, опорная позиция в направлении x больше, чем нижний правый участок области, на которую можно ссылаться (S6008: Да). Таким образом, опорная позиция корректируется перед позицией 6032, при условии, что xRefBR = xAvlBR (S6009). В данном документе, так как xRefBR = xRefTL + cbWidth-1 выполняется, как в S6001, то есть выполняется xRefTL = xRefBR- (cbWidth-1), xRefTL также будет скорректирован вместе с коррекцией xRefBR. При этой коррекции опорной позиции может быть скорректирован блочный вектор mvL [0]. То есть коррекция выполняется следующим образом:
mvL [0] = (xAvlBR- (xCb + cbWidth-1)) << 4
Это удовлетворяет xRefBR = xAvlBR, что позволяет скорректировать опорную позицию.
Затем определяется то, больше ли опорная позиция опорного блока в направлении y, чем нижний правый участок области, на которую можно ссылаться (S6010). Когда определение является ложным (S6010: Нет), процесс заканчивается. Напротив, когда определение является истинным (S6010: Да), опорная позиция в направлении y будет скорректирована в соответствии с нижним правым участком области, на которую можно ссылаться (S6011).
Теперь, при условии, что опорный блок r5 расположен в позиции 6041, опорная позиция в направлении y больше правого нижнего участка области, на которую можно ссылаться (S6010: Да). Таким образом, опорная позиция корректируется перед позицией 6042, при условии, что yRefBR = yAvlBR (S6011). В данном документе, так как yRefBR = yRefTL + cbHeight-1 выполняется, как в S6001, то есть выполняется yRefTL = yRefBR- (cbHeight-1), yRefTL также будет скорректирован вместе с коррекцией yRefBR. При этой коррекции опорной позиции может быть скорректирован блочный вектор mvL [1]. То есть коррекция выполняется следующим образом:
mvL [1] = (yAvlBR- (yCb + cbHeitght-1)) << 4
Это удовлетворяет yRefBR = yAvlBR, что позволяет скорректировать опорную позицию.
В данном документе будет описан случай, когда опорный блок r1 расположен в позиции 6051. В этом случае опорная позиция в направлении x корректируется аналогично случаю, когда опорным блоком является r2. Кроме того, аналогично случаю, когда опорным блоком является r4, опорная позиция в направлении y корректируется. В результате опорный блок r1 будет расположен в позиции 6052 внутри области, на которую можно ссылаться.
В случае, когда опорный блок r3 расположен в позиции 6061, где опорный блок r6 расположен в позиции 6062, или где опорный блок r8 расположен в позиции 6063, опорная позиция в каждом из направлений x и y корректируется аналогично вышеуказанному случаю. В результате каждый опорный блок располагается внутри области, на которую можно ссылаться.
Вышеупомянутая процедура завершает процесс для случая, когда размер CTU не равен 128×128 выборок. Напротив, в случае, когда размер CTU составляет 128×128 выборок (S6002: Да), вычисляются верхняя левая и нижняя правая позиции, когда область, на которую можно ссылаться, является прямоугольной (S6012).
На фиг.50 показано схематичное представление, иллюстрирующее верхнюю левую и нижнюю правую позиции, когда область, на которую можно ссылаться, является прямоугольной. В случае, показанном на фиг.50A, целевой блок 6101 дерева кодирования разделен на четыре части, и целевой блок 6102 кодирования расположен сверху слева разделенных позиций. На данном этапе область, на которую можно ссылаться, имеет перевернутую L-образную форму, такую как заштрихованный участок в позиции 6103. В случае, когда область, на которую можно ссылаться, является прямоугольной, диапазоном будет диапазон прямоугольной области 6103. В случае, когда опорная область является прямоугольной, и когда верхняя левая часть опорного блока определена как (xRefTL, yRefTL), и его нижняя правая часть определена как (xRefBR, yRefBR), будет получено следующее выражение:
offset [4] = {0, 64, 128, 128}
NL = -offset [3-blk_idx], NR = offset [blk_idx]
(xAvlTL, yAvlTL) = ((xCb >> CtbLog2SizeY) << CtbLog2SizeY + NL,
(yCb >> CtbLog2SizeY) << CtbLog2SizeY))
(xAvlBR, yAvlBR) = (((xCb >> CtbLog2SizeY) << CtbLog2SizeY)-1 + NR,
(((yCb >> CtbLog2SizeY) + 1) << CtbLog2SizeY)-1).
Здесь blk_idx – индекс, указывающий позицию целевого блока кодирования. В случае, когда целевой блок кодирования расположен в верхней левой позиции после разделения на четыре части целевого блока дерева кодирования, параметр настройку будет представлять собой: blk_idx = 0. Аналогичным образом, в случае, когда целевые блоки кодирования расположены в верхней правой, нижней левой и нижней правой позициях, blk_idx будет установлен в 1, 2 и 3. На фиг.50A показано схематичное представление, иллюстрирующее случай, где blk_idx = 0. Аналогичным образом, на фиг.50B-50D показаны схематичные представления, иллюстрирующие случаи, когда blk_idx = 1 – blk_idx = 3, соответственно.
Затем корректируется опорная позиция непрямоугольной опорной области (S6013). На фиг.51 показана блок-схема алгоритма, иллюстрирующая процесс коррекции опорной позиции участка области, на которую можно ссылаться и которая не является прямоугольной. Сначала вычисляется (S6021) верхняя левая позиции области, на которую можно ссылаться. Так как область, на которую можно ссылаться, представляет собой заштрихованный участок на фиг.50, имеются две верхние левые позиции 6111 и 6112, за исключением случая, когда blk_idx = 3. Когда эти две точки имеют координаты (X1, Y1), (X2, Y2), соответственно, позиции рассчитываются следующим образом:
offset [4] = {64, 128, 64, 0}, NL = offset [blk_idx]
(X1, Y1) = (xAvlTL, yAvlTL + 64)
(X2, Y2) = (xAvlTL + NL, yAvlTL)
Затем определяется (S6022) то, должна ли быть скорректирована опорная позиция в соответствии с верхним левым участком области, на которую можно ссылаться. В этом определении определяется, что это истина будет в случае, когда blk_idx = 3 не удовлетворяется, и опорный блок расположен в области меньше, чем X2 и Y1 (S6022: Да). В случае ложного определения (S6022: Нет) процесс переходит к следующему процессу (S6026).
Затем определяется то, меньше ли разница между опорным блоком и областью, на которую можно ссылаться, в направлении x, чем разница между опорным блоком и областью, на которую можно ссылаться, в направлении y (S6023). В случае, когда определение является истинным (S6023: Да), будет скорректирована (S6024) опорная позиция в направлении x. Напротив, в случае, когда определение является ложным (S6023: Нет), будет скорректирована (S6025) опорная позиция в направлении y.
На фиг.52A показано схематичное представление, иллюстрирующее состояние коррекции опорной позиции на этапах S6024 и S6025. Теперь blk_idx = 0. При условии, что опорный блок r1 расположен в позиции 6201, blk_idx = 3 не удовлетворяется, и верхний левый опорный блок расположен в области меньше, чем X2 (направление x 6112) и Y1 (направление y 6111) (S6022: Да). Кроме того, разница между опорным блоком и областью, на которую можно ссылаться, в направлении x меньше, чем разница между опорным блоком и областью, на которую можно ссылаться, в направлении y (S6023: Да). Таким образом, опорная позиция в направлении x будет скорректирована перед позицией 6202, при условии, что xRefTL = xAvlTL + NL (S6024). В данном документе, так как xRefBR = xRefTL + cbWidth-1 сохраняется, как в S6001, xRefBR также будет скорректирован совместно с скоррекцией xRefTL. При этой коррекции опорной позиции может быть скорректирован блочный вектор mvL [0]. То есть коррекция выполняется следующим образом:
mvL [0] = (xAvlTL + NL-xCb) << 4
Это удовлетворяет xRefTL = xAvlTL + NL, что позволяет скорректировать опорную позицию.
Напротив, когда опорный блок r2 расположен в позиции 6203, blk_idx = 3 не удовлетворяется, и верхний левый участок опорного блока расположен в области меньше, чем X2 (6112 направление x) и Y1 (6111 направление y). (S6022: Да). Кроме того, разница между опорным блоком и областью, на которую можно ссылаться, в направлении x не меньше, чем разница между опорным блоком и областью, на которую можно ссылаться, в направлении y (S6023: Нет). Таким образом, опорная позиция в направлении y корректируется перед позицией 6204, при условии, что yRefTL = yAvlTL + 64 (S6025). В данном документе, так как yRefBR = yRefTL + cbHeight-1 выполняется, как в S6001, yRefBR также будет скорректирован вместе с коррекцией yRefTL. При этой коррекции опорной позиции может быть скорректирован блочный вектор mvL [0]. То есть коррекция выполняется следующим образом:
mvL [1] = (yAvlTL + 64-yCb) << 4
Это удовлетворяет yRefTL = yAvlTL + 64, что позволяет корректировать опорную позицию.
В данном документе предполагается, что опорный блок r3 расположен в позиции 6205. В этом случае разница между опорным блоком и областью, на которую можно ссылаться, в направлении x меньше, чем разница между опорным блоком и областью, на которую можно ссылаться, в направление y (S6023: Да). Соответственно, опорная позиция в направлении x корректируется аналогично опорному блоку r1, чтобы находиться в позиции 6206 (S6024). В этот момент контрольный блок находится за пределами области, на которую можно ссылаться. Однако опорная позиция в направлении y корректируется процессами S6006 и S6007, описанными ниже. Таким образом, опорный блок расположен внутри области, на которую можно ссылаться.
Затем вычисляется нижняя правая позиция области, на которую можно ссылаться (S6026). Так как область, на которую можно ссылаться, представляет собой заштрихованный участок на фиг.50, имеются две нижние правые позиции, 6113 и 6114, за исключением случая, когда blk_idx = 0. Когда эти две точки имеют координаты (X3, Y3) и (X4, Y4), соответственно, позиции рассчитываются следующим образом:
offset [4] = {0, 64, 128, 64}, NR = offset [blk_idx]
(X3, Y3) = (xAvlBR, yAvlBR-64)
(X4, Y4) = (xAvlBR-NR, yAvlBR)
Затем определяется, будет ли скорректирована опорная позиция в соответствии с нижним правым участком области, на которую можно ссылаться (S6027). В этом определении определяется, что это истина, когда blk_idx не равно 0 и опорный блок расположен в области, большей, чем X4 и Y3 (S6027: Да). В случае, когда определение является ложным (S6027: Нет), процесс завершается.
Затем определяется то, меньше ли разница между опорным блоком и областью, на которую можно ссылаться, в направлении x, чем разница между опорным блоком и областью, на которую можно ссылаться, в направлении y (S6028). В случае, когда определение является истинным (S6028: Да), опорная позиция будет скорректирована (S6029) в направлении x. Напротив, в случае, когда определение является ложным (S6028: Нет), опорная позиция будет скорректирована (S6030) в направлении y.
На фиг.52B показано схематичное представление, иллюстрирующее состояние коррекции опорной позиции на этапах S6029 и S6030. Теперь blk_idx = 3. При условии, что опорный блок r1 расположен в позиции 6211, blk_idx = 0 не удовлетворяется, и нижний правый участок опорного блока расположен в области больше, чем X4 (направление x 6114) и Y3 (направление y 6113) (S6027: Да). Кроме того, разница между опорным блоком и областью, на которую можно ссылаться, в направлении x меньше, чем разница между опорным блоком и областью, на которую можно ссылаться, в направлении y (S6028: Да). Таким образом, опорная позиция в направлении x корректируется перед позицией 6212, при условии, что xRefBR = xAvlBR (S6029). В данном документе, так как xRefBR = xRefTL + cbWidth-1 выполняется, как в S6001, то есть выполняется xRefTL = xRefBR- (cbWidth-1), xRefTL также будет скорректирован вместе с коррекцией xRefBR. При этой коррекции опорной позиции может быть скорректирован блочный вектор mvL [0]. То есть коррекция выполняется следующим образом:
mvL [0] = (xAvlBR-NR- (xCb + cbWitdh-1)) << 4
Это удовлетворяет xRefBR = xAvlBR, что позволяет скорректировать опорную позицию.
Напротив, если предположить, что опорный блок r2 расположен в позиции 6213, blk_idx = 0 не удовлетворяется, и нижний правый участок опорного блока, расположенный в области, больше, чем X4 (направление x 6114) и Y3 (направление y 6113) (S6027: Да). Кроме того, разница между опорным блоком и областью, на которую можно ссылаться, в направлении x не меньше, чем разница между опорным блоком и областью, на которую можно ссылаться, в направлении y (S6028: Нет). Таким образом, опорная позиция в направлении y корректируется перед позицией 6214, при условии, что yRefBR = yAvlBR (S6030). В данном документе, так как yRefBR = yRefTL + cbHeight-1 выполняется, как в S6001, то есть выполняется yRefTL = yRefBR- (cbHeight-1), yRefTL также будет скорректирован вместе с коррекцией yRefBR. При этой коррекции опорной позиции может быть скорректирован блочный вектор mvL [1]. То есть коррекция выполняется следующим образом:
mvL [1] = (yAvlBR-64- (yCb + cbHeight - 1)) << 4
Это удовлетворяет yRefBR = yAvlBR, что позволяет скорректировать опорную позицию.
В данном документе предполагается, что опорный блок r3 расположен в позиции 6215. В этом случае разница между опорным блоком и областью, на которую можно ссылаться, в направлении x не меньше, чем разница между опорным блоком и областью, на которую можно ссылаться, в направлении y (S6028: Нет). Соответственно, опорная позиция в направлении y корректируется аналогично опорному блоку r2, чтобы быть расположенной в позиции 6216 (S6030). В этот момент контрольный блок находится за пределами области, на которую можно ссылаться. Однако опорная позиция в направлении x корректируется процессами S6008 и S6009, описанными ниже. Таким образом, опорный блок расположен внутри области, на которую можно ссылаться.
На фиг.52 процесс коррекции опорной позиции был описан с использованием примерных случаев, когда blk_idx = 0 и blk_idx = 3. В случае, когда blk_idx = 1 или blk_idx = 2, процесс коррекции опорной позиции выполняется аналогично случаям, когда blk_idx = 0 и blk_idx = 3.
После процесса коррекции опорной позиции непрямоугольной области, на которую можно ссылаться (S6013), выполняются процессы S6004-S6011. Вышеупомянутая процедура завершает процесс для случая, когда размер CTU составляет 128×128 выборок.
Теперь предполагается, что в процессе коррекции опорной позиции непрямоугольной части области, на которую можно ссылаться (S6013), процесс коррекции опорной позиции в направлении x выполняется (S6024) в соответствии с верхним левым участком области, на которую можно ссылаться. В этом случае опорная позиция в направлении x опорного блока не станет меньше верхнего левого участка области, на которую можно ссылаться, и, таким образом, определение на этапе S6004 всегда является ложным (S6004: Нет). Таким образом, в случае, когда процесс S6024 был выполнен, процессы S6004 и S6005 могут быть исключены. Аналогичным образом, в случае, когда была выполнена обработка S6025, процессы S6006 и S6007 могут быть исключены. В случае, когда был выполнен процесс S6029, процессы S6008 и S6009 могут быть исключены. В случае, когда процесс S6030 был выполнен, процессы S6010 и S6011 могут быть исключены.
Кроме того, можно использовать конфигурацию, представленную в виде алгоритма, показанного на фиг.51, в котором процесс сравнения на этапе S6023 опущен, и этап S6024 выполняется всегда, или всегда выполняется этап S6025. Аналогичным образом, можно использовать конфигурацию, в которой процесс сравнения на этапе S6028 опущен, и этап S6029 выполняется всегда, или всегда выполняется этап S6030. В такой конфигурации опорную позицию можно скорректировать с помощью простого процесса.
На фиг.48 опорная позиция корректируется с использованием процессов S6012, S6013 и S6004-S6011 в случае, когда размер CTU составляет 128×128 выборок. Вместо этого, как показано на фиг.53, это также может быть реализовано посредством процесса разделения области, на которую можно ссылаться, на две области и последующей коррекции каждой из опорных позиций (S6101).
На фиг.54 показано схематичное представление, иллюстрирующее состояние разделения области, на которую можно ссылаться, на две области. В отличие от прямоугольной области, на которую можно ссылаться и которая показана на фиг.50, опорная область разделена на две на фиг.54. В случае, когда целевой блок (6102) кодирования расположен в верхней левой позиции после разделения на четыре части целевого блока дерева кодирования (6101 ), параметр настройка будет представлять собой: blk_idx = 0. Аналогичным образом, в случае, когда целевые блоки кодирования расположены в верхней правой, нижней левой и нижней правой позициях, blk_idx будет установлен в 1, 2 и 3. На фиг.54A показано схематичное представление, иллюстрирующее случай, когда blk_idx = 0. Аналогичным образом, на фиг.54B-54D показаны схематичные представления, иллюстрирующие случаи, когда blk_idx = 1, blk_idx = 2 и blk_idx = 3, соответственно. Кроме того, одна область, на которую можно ссылаться (6301), определена как область A, на которую можно ссылаться, и другая область (6302), на которую можно ссылаться, определена как область B, на которую можно ссылаться.
На фиг.55 показана блок-схема алгоритма, иллюстрирующая процесс (S6101) разделения области на две области, на которые можно ссылаться, и коррекции каждой из опорных позиций областей, на которые можно ссылаться. На фиг.55 тот же процесс, что и на фиг.48, обозначен теми же номерами этапов, и его описание будет опущено. Сначала вычисляются (S6111) верхняя левая и нижняя правая позиции области A, на которую можно ссылаться. Когда верхний левый участок области A, на которую можно ссылаться, определен как (xAvlTL, yAvlTL), и нижний правый участок определен как (xAvlBR, yAvlBR), получаются следующие выражения:
xOffsetTL [4] = {-128, -128, -64, 0}, yOffsetTL [4] = {64, 64, 64, 0}
xOffsetBR [4] = {0, 0, 0, 128}, yOffsetBR [4] = {128, 128, 128, 64}
(xAvlTL, yAvlTL) = ((xCb >> CtbLog2SizeY) << CtbLog2SizeY
+ xOffsetTL [blk_idx],
(yCb >> CtbLog2SizeY) << CtbLog2SizeY + yOffsetTL [blk_idx])
(xAvlBR, yAvlBR) = (((xCb >> CtbLog2SizeY) << CtbLog2SizeY) - 1
+ xOffsetBR [blk_idx],
(((yCb >> CtbLog2SizeY) + 1) << CtbLog2SizeY) - 1 + yOffsetBR [blk_idx])
Затем вычисление относительно того, находится ли опорный блок за пределами области A, на которую можно ссылаться, выполняется следующим образом (S6112):
out_xRefTL = xRefTL <xAvlTL
out_yRefTL = yRefTL <yAvlTL
out_xRefBR = xRefBR> xAvlBR
out_yRefBR = yRefBR> yAvlBR
Затем вычисляются верхняя левая и нижняя правая позиции области B, на которую можно ссылаться, (S6113). Когда верхний левый участок области B, на которую можно ссылаться, определен как (xAvlTL, yAvlTL), и нижний правый участок определен как (xAvlBR, yAvlBR), получаются следующие выражения:
xOffsetTL [4] = {-64, 0, 0, 0}, yOffsetTL [4] = {0, 0, 0, 0}
xOffsetBR [4] = {0, 64, 128, 64}, yOffsetBR [4] = {128, 64, 64, 128}
(xAvlTL, yAvlTL) = ((xCb >> CtbLog2SizeY) << CtbLog2SizeY
+ xOffsetTL [blk_idx],
(yCb >> CtbLog2SizeY) << CtbLog2SizeY + yOffsetTL [blk_idx])
(xAvlBR, yAvlBR) = (((xCb >> CtbLog2SizeY) << CtbLog2SizeY) - 1
+ xOffsetBR [blk_idx],
(((yCb >> CtbLog2SizeY) + 1) << CtbLog2SizeY) - 1 + yOffsetBR [blk_idx])
Затем определяется то, меньше ли опорная позиция опорного блока в направлении x, чем верхний левый участок области A, на которую можно ссылаться, и меньше ли опорная позиция опорного блока в направлении x, чем верхняя левая часть область B, на которую можно ссылаться, (S6114). Когда определение является ложным (S6114: Нет), процесс переходит к следующему процессу (S6116). Напротив, когда определение является истинным (S6114: Да), опорная позиция в направлении x будет скорректирована в соответствии с верхним левым участком области B, на которую можно ссылаться (S6005). Так как процесс S6005 уже был описан, его описание опускается.
Затем определяется то, меньше ли опорная позиция опорного блока в направлении y, чем верхний левый участок области A, на которую можно ссылаться, и меньше ли опорная позиция опорного блока в направлении y, чем верхний левый участок области B, на которую можно ссылаться (S6116). Когда определение является ложным (S6116: Нет), обработка переходит к следующему этапу (S6118). Напротив, когда определение является истинным (S6116: Да), опорная позиция в направлении y будет скорректирована в соответствии с верхним левым участком области B, на которую можно ссылаться (S6007). Так как процесс S6007 уже был описан, его описание опускается.
Затем определяется то, больше ли опорная позиция в направлении x опорного блока, чем нижний правый участок области A, на которую можно ссылаться, и больше ли опорная позиция опорного блока в направлении x, чем нижний правый участок области B, на которую можно ссылаться (S6118). Когда определение является ложным (S6118: Нет), процесс переходит к следующему процессу (S6120). Напротив, когда определение является истинным (S6118: Да), опорная позиция в направлении x будет скорректирована в соответствии с нижним правым участком области B, на которую можно ссылаться (S6009). Так как процесс S6009 уже был описан, его описание опускается.
Затем определяется то, больше ли опорная позиция опорного блока в направлении y, чем нижний правый участок области A, на которую можно ссылаться, и больше ли опорная позиция опорного блока в направлении y, чем нижняя правая области B, на которую можно ссылаться (S6120). Когда определение является ложным (S6120: Нет), процесс завершается. Напротив, когда определение является истинным (S6120: Да), опорная позиция в направлении y будет скорректирована в соответствии с нижним правым участком области B, на которую можно ссылаться (S6011). Так как процесс S6011 уже был описан, его описание опускается.
Как описано выше, даже в случае, когда опорный блок расположен за пределами области, на которую можно ссылаться, когда размер CTU составляет 128×128 выборок, опорная позиция может быть скорректирована и может стать опорной позицией, на которую можно ссылаться. Кроме того, упростить процесс и уменьшить объем вычислений можно путем разделения области, на которую можно ссылаться, на две части и коррекции каждой из опорных позиций. В данном документе одна область (6301), на которую можно ссылаться, определена как область A, на которую можно ссылаться, в то время как другая область (6302), на которую можно ссылаться, определена как область B, на которую можно ссылаться. В качестве альтернативы, область A, на которую можно ссылаться, и область B, на которую можно ссылаться, могут быть заменены, и одна область (6301), на которую можно ссылаться, может обрабатываться как область B, на которую можно ссылаться, в то время как другая опорная область (6302) может обрабатываться как область A, на которую можно ссылаться.
В данном примере определяется то, равен ли размер CTU 128×128 выборок (S6002), и процесс переключается соответствующим образом. Это определение может быть заменено определением того, предоставляется ли стандартный блок внутриблочного копирования в единице, полученной путем разделения на четыре части блока дерева кодирования, или определением того, превышает ли размер CTU максимальный размер блока кодирования.
Блок коррекции границы опорной области
На фиг.58 показана блок-схема алгоритма, иллюстрирующая процесс, выполняемый блоком 381 коррекции границы опорной области и блоком 481 коррекции границы опорной области.
Сначала определяется верхняя левая позиции опорного блока (этап S1401) следующим образом:
(xRefTL, yRefTL) = (xCb + (mvL [0] >> 4), yCb + (mvL [1] >> 4))
(xRefBR, yRefBR) = (xRefTL + cbWidth - 1, yRefTL + cbHeight - 1)
Так как эта процедура аналогична этапу S6001 на фиг.48, ее описание опускается.
Затем вычисляются верхняя левая и нижняя правая позиции областей A, B и C, на которые можно ссылаться (этапы S1402-S1403). Здесь предполагается, что область A, на которую можно ссылаться, представляет собой стандартный блок внутриблочного копирования, обрабатываемый непосредственно перед целевым стандартным блоком внутриблочного копирования, область B, на которую можно ссылаться, представляет собой стандартный блок внутриблочного копирования, обрабатываемый непосредственно перед областью A, на которую можно ссылаться, и область C, на которую можно ссылаться, представляет собой стандартный блок внутриблочного копирования, обработанный непосредственно перед областью B, на которую можно ссылаться. На фиг.56 показан пример, в котором единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования. В примере, показанном на фиг.56A, блок 503 дерева кодирования является целевым блоком дерева кодирования. На данном этапе блок 502 дерева кодирования соответствует области A, на которую можно ссылаться, блок 501 дерева кодирования соответствует области B, на которую можно ссылаться, и блок 500 дерева кодирования соответствует области C, на которую можно ссылаться. На фиг.57 показан пример использования единицы, полученной путем разделения на четыре части блока дерева кодирования, в качестве стандартного блока внутриблочного копирования. В примере, показанном на фиг.57A, блок 504 дерева кодирования является целевым стандартным блоком внутриблочного копирования. На данном этапе блок 503 дерева кодирования соответствует области A, на которую можно ссылаться, блок 502 дерева кодирования соответствует области B, на которую можно ссылаться, и блок 501 дерева кодирования соответствует области C, на которую можно ссылаться.
Верхние левые позиции областей A, B и C, на которые можно ссылаться, установлены на (xAvlATL, yAvlATL), (xAvlBTL, yAvlBTL) и (xAvlCTL, yAvlCTL), соответственно. Кроме того, нижние правые позиции областей A, B и C, на которые можно ссылаться, установлены на (xAvlABR, yAvlABR), (xAvlBBR, yAvlBBR) и (xAvlCBR, yAvlCBR), соответственно. Когда единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования, каждый из (xAvlATL, yAvlATL), (xAvlBTL, yAvlBTL), (xAvlCTL, yAvlCTL), (xAvlABR, yAvlABR), (xAvlBR), (xAvlBR), (xAvlBR), (xAvlBR), yAvlCBR) устанавливаются следующим образом:
(xAvlATL, yAvlATL) = ((xCb >> CtbLog2SizeY) << (CtbLog2SizeY) - (1 << CtbLog2SizeY),
(yCb >> CtbLog2SizeY) << (CtbLog2SizeY))
(xAvlABR, yAvlABR) = (xAvlATL + cbWidth - 1, yAvlATL + cbHeight - 1)
(xAvlATL, yAvlATL) = ((xCb >> CtbLog2SizeY) << (CtbLog2SizeY) - 2 * (1 << CtbLog2SizeY)),
(yCb >> CtbLog2SizeY) << (CtbLog2SizeY))
(xAvlBBR, yAvlBBR) = (xAvlBTL + cbWidth -1, yAvlBTL + cbHeight - 1)
(xAvlATL, yAvlATL) = ((xCb >> CtbLog2SizeY) << (CtbLog2SizeY) - 3 * (1 << CtbLog2SizeY),
(yCb >> CtbLog2SizeY) << (CtbLog2SizeY))
(xAvlCBR, yAvlCBR) = (xAvlCTL + cbWidth -1, yAvlCTL + cbHeight - 1)
Когда единица, полученная путем разделения на четыре части блока дерева кодирования, используется в качестве стандартного блока внутриблочного копирования, каждый из параметров (xAvlATL, yAvlATL), (xAvlBTL, yAvlBTL), (xAvlCTL, yAvlCTL) устанавливается следующим образом:
(xAvlATL, yAvlATL) = ((xCb >> (CtbLog2SizeY-1)) << (CtbLog2SizeY-1) - (1 << (CtbLog2SizeY-1)),
(yCb >> (CtbLog2SizeY-1)) << ((CtbLog2SizeY-1)) + (1 << (CtbLog2SizeY-1)))
(xAvlABR, yAvlABR) = (xAvlATL + cbWidth - 1, yAvlATL + cbHeight - 1)
(xAvlBTL, yAvlBTL) = ((xCb >> (CtbLog2SizeY-1)) << (CtbLog2SizeY-1) - (1 << (CtbLog2SizeY)),
(yCb >> (CtbLog2SizeY-1)) << ((CtbLog2SizeY-1)) + (1 << (CtbLog2SizeY-1)))
(xAvlBBR, yAvlBBR) = (xAvlBTL + cbWidth -1, yAvlBTL + cbHeight - 1)
(xAvlCTL, yAvlCTL) = ((xCb >> (CtbLog2SizeY-1)) << (CtbLog2SizeY-1) - (1 << (CtbLog2SizeY-1)),
(yCb >> (CtbLog2SizeY-1)) << ((CtbLog2SizeY-1)) + (1 << (CtbLog2SizeY-1)))
(xAvlCBR, yAvlCBR) = (xAvlCTL + cbWidth -1, yAvlCTL + cbHeight - 1)
Затем определяется область, на которую можно ссылаться, включающая в себя верхнюю левую позицию опорного блока (Этап S1405). В частности, верхняя левая и нижняя правая позиции областей A, B, C, на которые можно ссылаться, сравниваются с верхней левой позицией опорного блока, и затем область, на которую можно ссылаться, включающая в себя верхнюю левую позицию опорного блока, определяется как опорная область, включающая в себя опорный блок.
Затем определяется то, включает ли опорная область, включающая в себя верхнюю левую позицию опорного блока, нижнюю правую позицию опорного блока (этап S1406). В случае, когда опорная область, включающая в себя верхнюю левую позицию опорного блока, включает в себя нижнюю правую позицию опорного блока, алгоритм, показанный на фиг.58, заканчивается.
В случае, когда область, на которую можно ссылаться, включающая в себя верхнюю левую позицию опорного блока, не включает в себя нижнюю правую позицию опорного блока, опорный блок корректируется (этап S1407). Коррекция опорного блока будет описана со ссылкой на фиг.59. На фиг.59 показан пример, в котором единица блока дерева кодирования используется в качестве стандартного блока внутриблочного копирования. На фиг.59A показан случай, когда блочный вектор 507 установлен для целевого блока 505 кодирования. Область B (503), на которую можно ссылаться, включает в себя верхнюю левую позицию опорного блока и не включает в себя нижнюю правую позицию опорного блока. На данном этапе, как показано на фиг.59B, опорный блок 508 разделен на разделенный опорный блок 509 и разделенный опорный блок 510 в пространстве памяти. Разделенный опорный блок 509 представляет собой область, включенную в область B (503), на которую можно ссылаться, которая является областью, на которую можно ссылаться, включающей верхний левый участок опорного блока, в то время как разделенный опорный блок 510 является опорным блоком, включенным в опорную область, отличную от области B (503), на которую можно ссылаться. В данном примере при построении опорного изображения опорного блока 510 для каждой из области, соответствующей разделенному опорному блоку 509, и области, соответствующей разделенному опорному блоку 510, выполняется другой процесс. В частности, что касается области, соответствующей разделенному опорному блоку 509, опорное изображение создается на основе позиции, указанной блочным вектором. Напротив, что касается области, соответствующей разделенному опорному блоку 510, опорное изображение создается путем установки заданного значения без ссылки на пространство 600 памяти. В данном документе заданное значение будет равно MaxPixelValue/2, когда максимальное значение выборки равно MaxPixelValue. Однако, что касается области, соответствующей разделенному опорному блоку 510, можно принять конфигурацию, в которой опорное изображение строится из области 603 памяти, включающей в себя разделенный опорный блок 509, вместо заданного значения. Например, опорное изображение может быть построено путем выполнения копирования в горизонтальном направлении крайней правой выборки разделенного опорного блока 509.
На фиг.60 показан пример использования единицы, полученной путем разделения на четыре части блока дерева кодирования, в качестве стандартного блока внутриблочного копирования. На фиг.60A показан случай, когда блочный вектор 508 установлен для целевого блока 509 кодирования. Область C (501), на которую можно ссылаться, включает в себя верхнюю левую позицию опорного блока и не включает в себя нижнюю правую позицию опорного блока. На данном этапе, как показано на фиг.60B, опорный блок 510 разделен на разделенный опорный блок 511 и разделенный опорный блок 512 в пространстве памяти. Разделенный опорный блок 511 представляет собой область, включенную в область C (501), на которую можно ссылаться, которая является опорной областью, включающей в себя верхний левый участок опорного блока, в то время как разделенный опорный блок 512 является опорным блоком, включенным в опорную область, отличную от области C (501), на которую можно ссылаться. В данном примере при построении опорного изображения опорного блока 510 для каждой из области, соответствующей разделенному опорному блоку 511, и области, соответствующей разделенному опорному блоку 512, выполняется другой процесс. В частности, что касается области, соответствующей для разделенного опорного блока 511 опорное изображение создается на основе позиции, указанной блочным вектором. Напротив, для области, соответствующей разделенному опорному блоку 511, опорное изображение создается путем установки заданного значения без ссылки на пространство 602 памяти. В данном документе заданное значение будет равно MaxPixelValue/2, когда максимальное значение выборки равно MaxPixelValue. Однако, что касается области, соответствующей разделенному опорному блоку 512, допустимо использовать конфигурацию, в которой опорное изображение строится из области 601 памяти, включающей в себя опорный блок 511 разделения, вместо заданного значения. Например, опорное изображение может быть построено путем выполнения копирования в вертикальном направлении выборки, расположенной внизу разделенного опорного блока 511.
Используя эту конфигурацию, при определении опорного блока внутриблочного копирования можно избежать доступа к разделенному пространству памяти множество раз в случае, когда опорное изображение разделяется и размещается в пространстве памяти. Это позволяет сократить объем обработки при построении опорного блока внутриблочного копирования.
Во всех вариантах осуществления, описанных выше, многочисленные технологии могут быть объединены друг с другом.
Во всех вариантах осуществления, описанных выше, битовый поток, выводимый из устройства для кодирования изображений, имеет определенный формат данных, чтобы быть декодированным в соответствии со способом кодирования, используемым в варианте осуществления. Битовый поток может быть записан и предоставлен на машиночитаемом носителе записи, таком как HDD, SSD, флэш-память, оптический диск и т.п., или битовый поток может быть предоставлен с сервера через проводную или беспроводную сеть. Таким образом, независимо от того, как предоставляется битовый поток, устройство для декодирования изображений, соответствующее устройству для кодирования изображений, выполнено с возможностью декодировать битовый поток конкретного формата данных.
В случае, когда для обмена битовым потоком между устройством для кодирования изображения и устройством для декодирования изображения используется проводная или беспроводная сеть, битовый поток может быть преобразован в формат данных, подходящий для формы передачи канала связи при передаче. В этом случае предоставляется устройство передачи, которое преобразует выходной битовый поток из устройства для кодирования изображений в кодированные данные в формате данных, подходящем для формы передачи канала связи, и передает кодированные данные в сеть, и устройство приема, которое принимает кодированные данные из сети, которые необходимо восстановить в битовый поток, и подает битовый поток в устройство для декодирования изображений. Устройство передачи включает в себя память, которая буферизует битовый поток, выводимый из устройства для кодирования изображений, блок обработки пакетов, который пакетирует битовый поток, и передатчик, который передает пакетированные кодированные данные через сеть. Устройство приема включает в себя приемник, который принимает пакетированные кодированные данные через сеть, память, которая буферизует принятые кодированные данные, и блок обработки пакетов, который распаковывает кодированные данные для формирования битового потока и передает сформированный битовый поток в устройство для декодирования изображений.
В случае, когда проводная или беспроводная сеть используется для обмена битовым потоком между устройством для кодирования изображений и устройством для декодирования изображений, в дополнение к передающему устройству и приемному устройству может быть предусмотрено ретрансляционное устройство, которое принимает кодированные данные, переданные передающим устройством, и подает кодированные данные в приемное устройство. Ретрансляционное устройство включает в себя приемник, который принимает пакетированные кодированные данные, переданные передающим устройством, память, которая буферизует принятые кодированные данные, и передатчик, который передает пакетированные кодированные данные в сеть. Ретрансляционное устройство может дополнительно включать в себя блок обработки принимаемых пакетов, который пакетирует пакетированные кодированные данные для создания битового потока, носитель записи, который хранит битовый поток, и блок обработки переданных пакетов, который пакетирует битовый поток.
Более того, в качестве устройства отображения в конфигурацию может быть добавлен блок отображения, который отображает изображение, декодированное устройством для декодирования изображения. В этом случае блок отображения считывает сигнал декодированного изображения, сгенерированный блоком 207 наложения сигналов декодированного изображения и сохраненный в памяти 208 декодированного изображения, и отображает сигнал на экране.
Более того, в конфигурацию может быть добавлен блок формирования изображения, что позволит функционировать в качестве устройства формирования изображения, путем ввода захваченного изображения в устройство для кодирования изображения. В этом случае блок формирования изображения вводит сигнал захваченного изображения в блок 101 разделения блоков.
На фиг.37 показан пример конфигурации аппаратных средств устройства для кодирования-декодирования согласно настоящему варианту осуществления. Устройство для кодирования-декодирования включает в себя конфигурации устройства для кодирования изображений и устройства для декодирования изображений согласно вариантам осуществления настоящего изобретения. Устройство 9000 для кодирования-декодирования включает в себя CPU 9001, кодек IC 9002, интерфейс 9003 ввода/вывода, память 9004, привод 9005 оптических дисков, сетевой интерфейс 9006 и видеоинтерфейс 9009, в которых отдельные блоки соединены посредством шины 9010.
Кодер 9007 изображения и декодер 9008 изображения, как правило, реализуются как IC 9002 кодека. Процесс кодирования изображения устройства для кодирования изображения согласно вариантам осуществления настоящего изобретения выполняется кодером 9007 изображения. Процесс декодирования изображения в устройстве для декодирования изображения согласно варианту осуществления настоящего изобретения выполняется декодером 9008 изображения. Интерфейс 9003 ввода/вывода реализован, например, посредством интерфейса USB, и подключается к внешней клавиатуре 9104, мыши 9105 или подобному. CPU 9001 управляет устройством 9000 для кодирования-декодирования на основе ввода операции пользователя через интерфейс 9003 ввода/вывода для выполнения операции пользователя. Операции пользователя на клавиатуре 9104, мыши 9105 и т.п. включают в себя выбор выполняемой функции кодирования или декодирования, установка качества кодирования, назначение ввода/вывода битового потока, назначение ввода/вывода изображения или подобное, аналогичное, похожее.
В случае, когда пользователю требуется операция воспроизведения изображения, записанного на дисковом носителе 9100 записи, привод 9005 оптического диска считывает битовый поток со вставленного носителя 9100 записи диска и передает считанный битовый поток в декодер 9008 изображения кодека IC 9002 через шину 9010. Декодер 9008 изображения выполняет процесс декодирования изображения в устройстве для декодирования изображения согласно вариантам осуществления настоящего изобретения на входном битовом потоке и передает декодированное изображение на внешний монитор 9103 через видео интерфейс 9009. Устройство 9000 для кодирования-декодирования имеет сетевой интерфейс 9006 и может быть подключено к внешнему серверу 9106 распределения и мобильному оконечному устройству 9107 через сеть 9101. В случае, когда пользователь желает воспроизвести изображение, записанное при распределении, сервер 9106 или мобильное оконечное устройство 9107 вместо изображения, записанного на дисковом носителе 9100 записи, сетевой интерфейс 9006 получает битовый поток из сети 9101 вместо считывания битового потока с входного дискового носителя записи 9100. В случае, когда пользователь желает воспроизвести изображение, записанное в памяти 9004, обработка декодирования изображения выполняется устройством для декодирования изображения битового потока, записанного в памяти 9004 согласно вариантам осуществления в настоящем изобретении.
В случае, когда пользователь желает выполнить операцию кодирования изображения, захваченного внешней камерой 9102, и записи изображения в память 9004, видеоинтерфейс 9009 вводит изображение с камеры 9102 и передает изображение в кодер 9007 изображения кодека 9002 через шину 9010. Кодер 9007 изображения выполняет процесс кодирования изображения устройством для кодирования изображения согласно варианту осуществления настоящего изобретения на входе изображения через видеоинтерфейс 9009 и, тем самым, формирует битовый поток. Затем битовый поток передается в память 9004 через шину 9010. В случае, когда пользователь желает записать битовый поток на дисковый носитель 9100 записи вместо памяти 9004, дисковод 9005 оптического диска записывает битовый поток на вставленный диск носителя 9100.
Также возможно реализовать конфигурацию оборудования, имеющую устройство для кодирования изображения и не имеющую устройства для декодирования изображения, или конфигурацию оборудования, имеющую устройство для декодирования изображения и не имеющую устройства для кодирования изображения. Такая конфигурация оборудования реализуется путем замены IC 9002 кодека кодером 9007 изображения или декодером 9008 изображения.
Вышеописанный процесс, относящийся к кодированию и декодированию, естественно, может быть реализован как устройство передачи, хранения и приема с использованием оборудования, и, в качестве альтернативы, процесс может быть реализован с помощью встроенного программного обеспечения, хранимого в постоянном запоминающем устройстве (ROM), флэш-памяти или тому подобное, или с помощью программного обеспечения, предоставленного для компьютера или подобного. Программа микропрограмм и программное обеспечение могут быть предоставлены путем записи на носителе записи, читаемом компьютером и т.п., могут предоставляться с сервера через проводную или беспроводную сеть, или могут предоставляться посредством широковещательной передачи данных наземным или спутниковым цифровым способом.
Настоящее изобретение было описано со ссылкой на настоящие варианты осуществления. Вышеописанный вариант осуществления был описан только для иллюстративных целей. Скорее, специалисты в данной области техники могут легко понять, что различные примеры модификаций могут быть сделаны путем формирования различных комбинаций вышеописанных компонентов или процессов, которые также входят в технический объем настоящего изобретения.
Настоящее изобретение может использоваться для способов кодирования и декодирования изображений, которые разделяют изображение на блоки для выполнения предсказания.
100 – Устройство кодирования изображений
101 – Блок разделения блока
102 – Блок межкадрового предсказания
103 – Блок внутрикадрового предсказания
104 – Память декодированных изображений
105 – Определитель способа предсказания
106 – Блок выработки остатка
107 – Ортогональный преобразователь/квантователь
108 – Блок кодирования битовых строк
109 – Обратный квантователь/обратный ортогональный преобразователь
110 – Блок наложения сигнала декодированного изображения
111 – Память для хранения информации кодирования
200 – Устройство для декодирования изображений
201 – Блок декодирования битовых строк
202 – Блок разделения блока
203 – Блок межкадрового предсказания
204 – Блок внутрикадрового предсказания
205 – Память для хранения информации кодирования
206 – Обратный квантователь/обратный ортогональный преобразователь
207 – Блок наложения сигнала декодированного изображения
208 – Память декодированных изображений.