СПОСОБ И УСТРОЙСТВО КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ, ОБОРУДОВАНИЕ НА СТОРОНЕ КОДИРОВАНИЯ И ОБОРУДОВАНИЕ НА СТОРОНЕ ДЕКОДИРОВАНИЯ
METHOD AND DEVICE FOR ENCODING AND DECODING, EQUIPMENT ON THE ENCODING SIDE AND EQUIPMENT ON THE DECODING SIDE

Область техники, к которой относится изобретение
[01] Настоящая заявка относится к технологиям кодирования и декодирования, в частности, к способу и оборудованию кодирования и декодирования, устройству на стороне кодирования и устройству на стороне декодирования.
Уровень техники
[02] Для экономии пространства, передачу видеоизображений осуществляют после их кодирования, при этом способ полного кодирования видеоданных может включать в себя процессы предсказания, преобразования, квантования, энтропийного кодирования, фильтрации и т.п. Кодирование с предсказанием включает в себя межкадровое кодирование и внутрикадровое кодирование, причем при межкадровом кодировании по пикселям примыкающего закодированного изображения предсказывают пиксели текущего изображения согласно корреляции во временной области видеоданных для эффективного устранения избыточности видеоданных во временной области.
[03] В процессе межкадрового кодирования возможно применение вектора движения (ВД, англ. Motion Vector (MV)), отражающего относительное смещение между блоком текущего изображения видеоизображения текущего кадра и блоком опорного изображения видеоизображения опорного кадра. Например, при наличии сильной корреляции во временной области между видеоизображением A текущего кадра и видеоизображением B опорного кадра, если нужно передать блок A1 изображения (блок текущего изображения) видеоизображения A, можно выполнить поиск движения в видеоизображении B для обнаружения блока B1 изображения (т.е. блока опорного изображения), наилучшим образом совпадающего с блоком A1 изображения, и для определения относительного смещения между блоком A1 изображения и блок B1 изображения, при этом относительное смещение также представляет собой вектор движения блока A1 изображения.
[04] Сторона кодирования может отправлять стороне декодирования вектор движения вместо того, чтобы отправлять стороне декодирования блок A1 изображения. Сторона декодирования может получать блок A1 изображения на основе вектора движения и блока B1 изображения. Очевидно, что вышеуказанное решение позволяет сэкономить большое число бит, так как число бит, занимаемое вектором движения, меньше числа бит, занимаемого блоком A1 изображения.
[05] Согласно известному способу, если текущий блок является однонаправленным блоком, то после того, как будет получен вектор движения текущего блока (далее именуемый «исходный вектор движения»), исходный вектор движения можно скорректировать и осуществить кодирование/декодирование на основе скорректированного вектора движения, что позволяет улучшить показатели кодирования. При этом, если текущий блок является двунаправленным блоком, то в настоящее время отсутствует рациональное решение задачи, состоящей в том, как корректировать первый исходный вектор движения и второй исходный вектор движения после получения первого и второго исходных векторов движения текущего блока. То есть, в случае двунаправленного блока, возможны такие проблемы, как низкое качество предсказания, погрешность предсказания и т.п., приводящие к низким показателям кодирования.
Сущность изобретения
[06] В настоящей заявке предложены способ, оборудование и устройство кодирования и декодирования, позволяющие улучшить показатели кодирования.
[07] В настоящей заявке предложен способ кодирования и декодирования, включающий в себя этапы, на которых: если характеристическая информация текущего блока соответствует особому условию, определяют первый опорный блок, соответствующий текущему блоку, на основе первого исходного вектора движения текущего блока, и определяют второй опорный блок, соответствующий текущему блоку, на основе второго исходного вектора движения текущего блока; корректируют первый и второй исходные векторы движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; кодируют или декодируют текущий блок на основе первого и второго целевых векторов движения.
[08] В настоящей заявке предложено оборудование кодирования и декодирования, содержащее: определяющий модуль, выполненный с возможностью, если характеристическая информация текущего блока соответствует особому условию, определения первого опорного блока, соответствующего текущему блоку, на основе первого исходного вектора движения текущего блока, и определения второго опорного блока, соответствующего текущему блоку, на основе второго исходного вектора движения текущего блока; обрабатывающий модуль, выполненный с возможностью коррекции первого и второго исходных векторов движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; и кодирующий и декодирующий модуль, выполненный с возможностью кодирования или декодирования текущего блока на основе первого и второго целевых векторов движения.
[09] В настоящей заявке предложено устройство на стороне кодирования, содержащее процессор и машиночитаемый носитель данных, причем машиночитаемый носитель данных содержит сохраненные на нем машиноисполняемые инструкции, которые, при исполнении их процессором, инициируют выполнение набора операций, при которых: если характеристическая информация текущего блока соответствует особому условию, определяют первый опорный блок, соответствующий текущему блоку, на основе первого исходного вектора движения текущего блока, и определяют второй опорный блок, соответствующий текущему блоку, на основе второго исходного вектора движения текущего блока; корректируют первый и второй исходные векторы движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; и кодируют текущий блок на основе первого и второго целевых векторов движения.
[10] В настоящей заявке предложено устройство на стороне декодирования, содержащее процессор и машиночитаемый носитель данных, причем машиночитаемый носитель данных содержит сохраненные на нем машиноисполняемые инструкции, которые, при исполнении их процессором, инициируют выполнение набора операций, при которых: если характеристическая информация текущего блока соответствует особому условию, определяют первый опорный блок, соответствующий текущему блоку, на основе первого исходного вектора движения текущего блока, и определяют второй опорный блок, соответствующий текущему блоку, на основе второго исходного вектора движения текущего блока; корректируют первый и второй исходные векторы движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; и декодируют текущий блок на основе первого и второго целевых векторов движения.
[11] В настоящей заявке предложен способ декодирования, включающий в себя этапы, на которых: когда текущий блок допускает режим уточнения вектора движения, определяют значения предсказания субблоков текущего блока, и определяют значение предсказания текущего блока на основе значений предсказания субблоков текущего блока, причем для каждого субблока текущего блока определение значения предсказания субблока включает в себя следующее: получают информацию о движении текущего блока, содержащую первый исходный вектор движения и первый опорный кадр, второй исходный вектор движения и второй опорный кадр; определяют первый опорный блок, соответствующий субблоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий субблоку, на основе второго исходного вектора движения текущего блока; получают оптимальный вектор движения на основе значений пикселей первого опорного блока и значений пикселей второго опорного блока, причем получение оптимального вектора движения включает в себя следующее: принимают исходный вектор движения в качестве центра, выбирают векторы движения из векторов движения, содержащих исходный вектор движения и векторы движения, окружающие исходный вектор движения, и определяют выбранные векторы движения в качестве потенциальных векторов движения; причем исходный вектор движения представляет собой первый исходный вектор движения или второй исходный вектор движения; получают значение стоимости, соответствующее исходному вектору движения и значения стоимости, соответствующие потенциальным векторам движения, на основе значений пикселей первого опорного блока и значений пикселей второго опорного блока; выбирают вектор движения из исходного вектора движения и потенциальных векторов движения в качестве оптимального вектора движения на основе значения стоимости, соответствующего исходному вектору движения, и значений стоимости, соответствующих потенциальным векторам движения; корректируют первый исходный вектор движения и второй исходный вектор движения согласно оптимальному вектору движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; определяют значение предсказания субблока на основе первого целевого вектора движения и второго целевого вектора движения; причем определение значения предсказания субблока на основе первого целевого вектора движения и второго целевого вектора движения включает в себя следующее: определяют третий опорный блок, соответствующий субблоку, на основе первого целевого вектора движения, и определяют четвертый опорный блок, соответствующий субблоку, на основе второго целевого вектора движения; взвешивают значения пикселей третьего опорного блока и значения пикселей четвертого опорного блока для получения значения предсказания субблока.
[12] В качестве примера, этап, на котором принимают исходный вектор движения в качестве центра, выбирают векторы движения из векторов движения, содержащих исходный вектор движения и векторы движения, окружающие исходный вектор движения, и определяют выбранные векторы движения в качестве потенциальных векторов движения, включает в себя: принимают исходный вектор движения в качестве центра, выполняют поиск 25 векторов движения, содержащих исходный вектор движения в диапазоне поиска, равном 2, и определяют 25 векторов движения в качестве потенциальных векторов движения; причем последовательность поиска из 25 векторов движения является следующей: { Mv(-2, -2), Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(2, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-2, 2), Mv(-1, 2), Mv(0, 2), Mv(1, 2), Mv(2, 2) }.
[13] В качестве примера, этап, на котором получают значение стоимости, соответствующее исходному вектору движения и значения стоимости, соответствующие потенциальным векторам движения, на основе значений пикселей первого опорного блока и значений пикселей второго опорного блока, включает в себя следующее: получение значений стоимости, соответствующих потенциальным векторам движения, включает в себя: определяют первые опорные субблоки, соответствующие потенциальным векторам движения, на основе первого опорного блока, и определяют вторые опорные субблоки, соответствующие потенциальным векторам движения, на основе второго опорного блока; вычисляют сумму абсолютных разностей выборочных значений пиксельных точек в первых опорных субблоках и вторых опорных субблоках путем использования операции понижающей дискретизации, выполняемой по вертикали в 2 раза; определяют значения стоимости, соответствующие потенциальным векторам движения, на основе полученной суммы абсолютных разностей; получение значения стоимости, соответствующего исходному вектору движения, включает в себя: определяют первый опорный субблок, соответствующий исходному вектору движения, на основе первого опорного блока, и определяют второй опорный субблок, соответствующий исходному вектору движения, на основе второго опорного блока; вычисляют сумму абсолютных разностей выборочных значений пиксельных точек в первом опорном субблоке и втором опорном субблоке путем использования операции понижающей дискретизации, выполняемой по вертикали в 2 раза; определяют значение стоимости, соответствующее исходному вектору движения, на основе полученной суммы абсолютных разностей.
[14] В качестве примера, этап, на котором корректируют первый исходный вектор движения и второй исходный вектор движения согласно оптимальному вектору движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения, включает в себя: определяют первое целопиксельное значение коррекции вектора движения и второе целопиксельное значение коррекции вектора движения на основе оптимального вектора движения; корректируют первый исходный вектор движения согласно первому целопиксельному значению коррекции вектора движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения; и корректируют второй исходный вектор движения согласно второму целопиксельному значению коррекции вектора движения для получения второго целевого вектора движения, соответствующего второму исходному вектору движения.
[15] В качестве примера, этап, на котором определяют первое целопиксельное значение коррекции вектора движения и второе целопиксельное значение коррекции вектора движения на основе оптимального вектора движения, включает в себя: определяют первое целопиксельное значение коррекции вектора движения на основе оптимального вектора движения, причем первое целопиксельное значение коррекции вектора движения равно разности оптимального вектора движения и исходного вектора движения; определяют второе целопиксельное значение коррекции вектора движения на основе первого целопиксельного значения коррекции вектора движения; причем второе целопиксельное значение коррекции вектора движения и первое целопиксельное значение коррекции вектора движения противоположны друг другу.
[16] В качестве примера, этап, на котором корректируют первый исходный вектор движения согласно первому целопиксельному значению коррекции вектора движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения; и корректируют второй исходный вектор движения согласно второму целопиксельному значению коррекции вектора движения для получения второго целевого вектора движения, соответствующего второму исходному вектору движения, включает в себя: первый целевой вектор движения равен сумме первого исходного вектора движения и первого целопиксельного значения коррекции вектора движения; второй целевой вектор движения равен сумме второго исходного вектора движения и второго целопиксельного значения коррекции вектора движения.
[17] В качестве примера, этап, на котором корректируют первый исходный вектор движения и второй исходный вектор движения согласно оптимальному вектору движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения, включает в себя: определяют первое целопиксельное значение коррекции вектора движения, первое субпиксельное значение коррекции вектора движения, второе целопиксельное значение коррекции вектора движения и второе субпиксельное значение коррекции вектора движения на основе оптимального вектора движения; корректируют первый исходный вектор движения согласно первому целопиксельному значению коррекции вектора движения и первому субпиксельному значению коррекции вектора движения для получения первого целевого вектора движения субблока; и корректируют второй исходный вектор движения согласно второму целопиксельному значению коррекции вектора движения и второму субпиксельному значению коррекции вектора движения для получения второго целевого вектора движения субблока.
[18] В качестве примера, этап, на котором корректируют первый исходный вектор движения и второй исходный вектор движения согласно оптимальному вектору движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения, включает в себя: определяют первое целопиксельное значение коррекции вектора движения и первое субпиксельное значение коррекции вектора движения на основе оптимального вектора движения; получают оптимальный смещенный вектор движения согласно первому целопиксельному значению коррекции вектора движения и первому субпиксельному значению коррекции вектора движения; корректируют первый исходный вектор движения на основе оптимального смещенного вектора движения для получения первого целевого вектора движения; корректируют второй исходный вектор движения на основе значения, противоположного оптимальному смещенному вектору движения, для получения второго целевого вектора движения
[19] В качестве примера, этап, на котором определяют первое целопиксельное значение коррекции вектора движения и первое субпиксельное значение коррекции вектора движения на основе оптимального вектора движения, включает в себя: определяют первое целопиксельное значение коррекции вектора движения на основе оптимального вектора движения, причем первое целопиксельное значение коррекции вектора движения равно разности оптимального вектора движения и исходного вектора движения; определяют первое субпиксельное значение коррекции вектора движения на основе значения стоимости, соответствующего оптимальному вектору движения, и значений стоимости, соответствующих краевым векторам движения, соответствующим оптимальному вектору движения.
[20] В качестве примера, этап, на котором определяют первое субпиксельное значение коррекции вектора движения на основе значения стоимости, соответствующего оптимальному вектору движения, и значений стоимости, соответствующих краевым векторам движения, соответствующим оптимальному вектору движения, включает в себя: последовательно определяют значения стоимости 5 целопиксельных векторов движения, для которых оптимальный вектор движения принят в качестве центра; причем 5 целопиксельных векторов движения представляют собой 5 краевых векторов движения, полученных путем сдвига по горизонтали влево, по горизонтали вправо, по вертикали вверх и по вертикали вниз соответственно, когда оптимальный вектор движения принят в качестве центра.
[21] В качестве примера, первый целевой вектор движения равен сумме первого исходного вектора движения, первого целопиксельного значения коррекции вектора движения и первого субпиксельного значения коррекции вектора движения; второй целевой вектор движения равен сумме второго исходного вектора движения, второго целопиксельного значения коррекции вектора движения и второго субпиксельного значения коррекции вектора движения; причем второе целопиксельное значение коррекции вектора движения и первое целопиксельное значение коррекции вектора движения противоположны друг другу; второе субпиксельное значение коррекции вектора движения и первое субпиксельное значение коррекции вектора движения противоположны друг другу.
[22] В качестве примера, оптимальный вектор движения представляет собой вектор движения с меньшим значением стоимости, выбранный из исходного вектора движения и потенциальных векторов движения.
[23] В качестве примера, когда абсолютное значение первого целопиксельного значения коррекции вектора движения в вертикальном и/или горизонтальном направлении равно заданному значению, корректируют первый исходный вектор движения согласно первому целопиксельному значению коррекции вектора движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения.
[24] В качестве примера, когда абсолютное значение первого целопиксельного значения коррекции вектора движения в вертикальном и/или горизонтальном направлении не равно заданному значению, корректируют первый исходный вектор движения согласно первому целопиксельному значению коррекции вектора движения и первому субпиксельному значению коррекции вектора движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения.
[25] В качестве примера, когда значение стоимости, соответствующее исходному вектору движения, больше или равно заданного порога, выполняют этап выбора вектора движения из исходного вектора движения и потенциальных векторов движения в качестве оптимального вектора движения на основе значения стоимости, соответствующего исходному вектору движения, и значений стоимости, соответствующих потенциальным векторам движения; в ином случае, указанный этап не выполняют, причем заданный порог определяют на основе ширины и высоты субблока.
[26] В качестве примера, когда текущий блок содержит один субблок, указанный субблок и является текущим блоком.
[27] В качестве примера, первый опорный блок и второй опорный блок представляют собой блоки предсказания яркости, определенные на основе яркостной составляющей.
[28] В качестве примера, как значения пикселей первого опорного блока, так и значения пикселей второго опорного блока получают посредством билинейной интерполяции.
[29] В качестве примера, этап, на котором определяют первый опорный блок, соответствующий субблоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий субблоку, на основе второго исходного вектора движения текущего блока включает в себя: определяют первый опорный блок посредством билинейной интерполяции на основе первого исходного вектора движения и первого опорного кадра текущего блока; определяют второй опорный блок посредством билинейной интерполяции на основе второго исходного вектора движения и второго опорного кадра текущего блока; причем размер первого опорного блока равен размеру второго опорного блока, причем значение ширины первого опорного блока определяют на основе значения ширины субблока и диапазона поиска, значение высоты первого опорного блока определяют на основе значения высоты субблока и диапазона поиска.
[30] В качестве примера, этап, на котором определяют первый опорный блок, соответствующий субблоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий субблоку, на основе второго исходного вектора движения текущего блока, включает в себя: получают первый целопиксельный блок из первого опорного кадра текущего блока на основе первого исходного вектора движения, выполняют билинейную интерполяцию первого целопиксельного блока для получения первого опорного блока; получают второй целопиксельный блок из второго опорного кадра текущего блока на основе второго исходного вектора движения, выполняют билинейную интерполяцию второго целопиксельного блока для получения второго опорного блока; если W - это ширина субблока, H - это высота субблока, а SR - это диапазон поиска, то оба значения ширины первого опорного блока и второго опорного блока равны W+2*SR, оба значения высоты первого опорного блока и второго опорного блока равны H+2*SR, причем значение SR равно 2.
[31] В качестве примера, значения пикселей третьего опорного блока и значения пикселей четвертого опорного блока, когда взвешены, имеют один и тот же вес.
[32] В качестве примера, значения пикселей третьего опорного блока и значения пикселей четвертого опорного блока получают на основе интерполяции с помощью 8-отводного интерполяционного фильтра.
[33] В качестве примера, этап, на котором определяют третий опорный блок, соответствующий субблоку, на основе первого целевого вектора движения, и определяют четвертый опорный блок, соответствующий субблоку, на основе второго целевого вектора движения, включает в себя: определяют пятый опорный блок, соответствующий субблоку, из первого опорного кадра текучего блока на основе первого целевого вектора движения, и выполняют интерполяцию значений пикселей в пятом опорном блоке на основе 8-отводного интерполяционного фильтра для получения третьего опорного блока; определяют шестой опорный блок, соответствующий субблоку, из второго опорного кадра, на основе второго целевого вектора движения, и выполняют интерполяцию значений пикселей в шестом опорном блоке на основе 8-отводного интерполяционного фильтра для получения четвертого опорного блока; причем размер пятого опорного блока больше размера субблока, размер шестого опорного блока больше размера субблока, причем указанный размер включает в себя ширину и высоту.
[34] В качестве примера, субблок содержит яркостную составляющую, причем выполнение компенсации движения со взвешиванием субблока согласно первому целевому вектору движения и второму целевому вектору движения для получения взвешенного значения предсказания субблока, включает в себя: для яркостной составляющей субблока выполняют компенсацию движения со взвешиванием субблока согласно первому целевому вектору движения и второму целевому вектору движения для получения взвешенного значения предсказания яркости субблока.
[35] В качестве примера, субблок содержит цветностную составляющую, причем выполнение компенсации движения со взвешиванием субблока согласно первому целевому вектору движения и второму целевому вектору движения для получения взвешенного значения предсказания субблока включает в себя: для цветностной составляющей субблока выполняют компенсацию движения со взвешиванием субблока согласно первому целевому вектору движения и второму целевому вектору движения для получения взвешенного значения предсказания цветности субблока.
[36] В качестве примера, когда текущий блок допускает режим уточнения вектора движения, характеристическая информация текущего блока соответствует особым условиям, причем особые условия включают в себя режим предсказания информации о движении, соответствующий текущему блоку; атрибут информации о движении, соответствующий текущему блоку и информацию о размере текущего блока; причем, когда текущий блок допускает режим уточнения вектора движения, условия, которым соответствует текущий блок, включают в себя по меньшей мере следующее: для текущего блока не применен режим слияния для кодирования значений разности информации о движении (режим MMVD), для текущего блока применен режим слияния, размер текущего блока находится в пределах заданного диапазона, информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, и расстояния между текущим кадром и каждым из двух опорных кадров, соответствующих информации о движении в двух разных направлениях, являются одинаковыми.
[37] В качестве примера, если текущий блок не соответствует ни одному из следующих условий, текущий блок не допускает режим уточнения вектора движения: для текущего блока не применен режим слияния для кодирования значений разности информации о движении (режим MMVD), для текущего блока применен режим слияния, размер текущего блока находится в пределах заданного диапазона, информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, и расстояния между текущим кадром и каждым из двух опорных кадров, соответствующих информации о движении в двух разных направлениях, являются одинаковыми.
[38] В качестве примера, расстояние между текущим кадром текущего блока и первым опорным кадром равно расстоянию между текущим кадром текущего блока и вторым опорным кадром.
[39] В качестве примера, когда текущий блок содержит один субблок, указанный субблок и является текущим блоком, причем первый исходный вектор движения и второй исходный вектор движения являются исходными векторами движения текущего блока в двух разных направлениях.
[40] В качестве примера, когда текущий блок содержит множество субблоков, каждый из множества субблоков, первый исходный вектор движения и второй исходный вектор движения имеют общие исходные векторы движения текущего блока в двух разных направлениях.
[41] Согласно другому аспекту, в настоящей заявке предложен способ кодирования, включающий в себя этапы, на которых: когда текущий блок допускает режим уточнения вектора движения, определяют значения предсказания субблоков текущего блока, и определяют значение предсказания текущего блока на основе значений предсказания субблоков текущего блока, причем для каждого субблока текущего блока определение значения предсказания субблока включает в себя следующее: получают информацию о движении текущего блока, содержащую первый исходный вектор движения и первый опорный кадр, второй исходный вектор движения и второй опорный кадр; определяют первый опорный блок, соответствующий субблоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий субблоку, на основе второго исходного вектора движения текущего блока; получают оптимальный вектор движения на основе значений пикселей первого опорного блока и значений пикселей второго опорного блока, причем получение оптимального вектора движения включает в себя следующее: принимают исходный вектор движения в качестве центра, выбирают векторы движения из векторов движения, содержащих исходный вектор движения и векторы движения, окружающие исходный вектор движения, и определяют выбранные векторы движения в качестве потенциальных векторов движения; причем исходный вектор движения представляет собой первый исходный вектор движения или второй исходный вектор движения; получают значение стоимости, соответствующее исходному вектору движения и значения стоимости, соответствующие потенциальным векторам движения, на основе значений пикселей первого опорного блока и значений пикселей второго опорного блока; выбирают вектор движения из исходного вектора движения и потенциальных векторов движения в качестве оптимального вектора движения на основе значения стоимости, соответствующего исходному вектору движения, и значений стоимости, соответствующих потенциальным векторам движения; корректируют первый исходный вектор движения и второй исходный вектор движения согласно оптимальному вектору движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; определяют значение предсказания субблока на основе первого целевого вектора движения и второго целевого вектора движения; причем определение значения предсказания субблока на основе первого целевого вектора движения и второго целевого вектора движения включает в себя следующее: определяют третий опорный блок, соответствующий субблоку, на основе первого целевого вектора движения, и определяют четвертый опорный блок, соответствующий субблоку, на основе второго целевого вектора движения; взвешивают значения пикселей третьего опорного блока и значения пикселей четвертого опорного блока для получения значения предсказания субблока.
[42] Согласно другому аспекту, в настоящей заявке предложено оборудование декодирования, содержащее: процессор и машиночитаемый носитель данных, причем машиночитаемый носитель данных содержит сохраненные на нем машиноисполняемые инструкции, которые может исполнять процессор; причем процессор выполнен с возможностью его использования для исполнения машиноисполняемых инструкций для реализации вышеупомянутого способа.
[43] Согласно другому аспекту, в настоящей заявке предложено оборудование кодирования, содержащее: процессор и машиночитаемый носитель данных, причем машиночитаемый носитель данных содержит сохраненные на нем машиноисполняемые инструкции, которые может исполнять процессор; причем процессор выполнен с возможностью его использования для исполнения машиноисполняемых инструкций для реализации этапов, на которых: когда текущий блок допускает режим уточнения вектора движения, определяют значения предсказания субблоков текущего блока, и определяют значение предсказания текущего блока на основе значений предсказания субблоков текущего блока, причем для каждого субблока текущего блока определение значения предсказания субблока включает в себя следующее: получают информацию о движении текущего блока, содержащую первый исходный вектор движения и первый опорный кадр, второй исходный вектор движения и второй опорный кадр; определяют первый опорный блок, соответствующий субблоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий субблоку, на основе второго исходного вектора движения текущего блока; получают оптимальный вектор движения на основе значений пикселей первого опорного блока и значений пикселей второго опорного блока, причем получение оптимального вектора движения включает в себя следующее: принимают исходный вектор движения в качестве центра, выбирают векторы движения из векторов движения, содержащих исходный вектор движения и векторы движения, окружающие исходный вектор движения, и определяют выбранные векторы движения в качестве потенциальных векторов движения; причем исходный вектор движения представляет собой первый исходный вектор движения или второй исходный вектор движения; получают значение стоимости, соответствующее исходному вектору движения и значения стоимости, соответствующие потенциальным векторам движения, на основе значений пикселей первого опорного блока и значений пикселей второго опорного блока; выбирают вектор движения из исходного вектора движения и потенциальных векторов движения в качестве оптимального вектора движения на основе значения стоимости, соответствующего исходному вектору движения, и значений стоимости, соответствующих потенциальным векторам движения; корректируют первый исходный вектор движения и второй исходный вектор движения согласно оптимальному вектору движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; определяют значение предсказания субблока на основе первого целевого вектора движения и второго целевого вектора движения; причем определение значения предсказания субблока на основе первого целевого вектора движения и второго целевого вектора движения включает в себя следующее: определяют третий опорный блок, соответствующий субблоку, на основе первого целевого вектора движения, и определяют четвертый опорный блок, соответствующий субблоку, на основе второго целевого вектора движения; взвешивают значения пикселей третьего опорного блока и значения пикселей четвертого опорного блока для получения значения предсказания субблока.
[44] Согласно другому аспекту, в настоящей заявке предложено декодирующее устройство, выполненное с возможностью исполнения вышеупомянутого способа.
[45] Согласно другому аспекту, в настоящей заявке предложено кодирующее устройство, выполненное с возможностью исполнения этапов, на которых: когда текущий блок допускает режим уточнения вектора движения, определяют значения предсказания субблоков текущего блока, и определяют значение предсказания текущего блока на основе значений предсказания субблоков текущего блока, причем для каждого субблока текущего блока определение значения предсказания субблока включает в себя следующее: получают информацию о движении текущего блока, содержащую первый исходный вектор движения и первый опорный кадр, второй исходный вектор движения и второй опорный кадр; определяют первый опорный блок, соответствующий субблоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий субблоку, на основе второго исходного вектора движения текущего блока; получают оптимальный вектор движения на основе значений пикселей первого опорного блока и значений пикселей второго опорного блока, причем получение оптимального вектора движения включает в себя следующее: принимают исходный вектор движения в качестве центра, выбирают векторы движения из векторов движения, содержащих исходный вектор движения и векторы движения, окружающие исходный вектор движения, и определяют выбранные векторы движения в качестве потенциальных векторов движения; причем исходный вектор движения представляет собой первый исходный вектор движения или второй исходный вектор движения; получают значение стоимости, соответствующее исходному вектору движения и значения стоимости, соответствующие потенциальным векторам движения, на основе значений пикселей первого опорного блока и значений пикселей второго опорного блока; выбирают вектор движения из исходного вектора движения и потенциальных векторов движения в качестве оптимального вектора движения на основе значения стоимости, соответствующего исходному вектору движения, и значений стоимости, соответствующих потенциальным векторам движения; корректируют первый исходный вектор движения и второй исходный вектор движения согласно оптимальному вектору движения для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; определяют значение предсказания субблока на основе первого целевого вектора движения и второго целевого вектора движения; причем определение значения предсказания субблока на основе первого целевого вектора движения и второго целевого вектора движения включает в себя следующее: определяют третий опорный блок, соответствующий субблоку, на основе первого целевого вектора движения, и определяют четвертый опорный блок, соответствующий субблоку, на основе второго целевого вектора движения; взвешивают значения пикселей третьего опорного блока и значения пикселей четвертого опорного блока для получения значения предсказания субблока.
[46] Согласно другому аспекту, в настоящей заявке предложен долговременный машиночитаемый носитель данных, содержащий сохраненные на нем машиноисполняемые инструкции, которые может исполнять процессор, причем процессор выполнен с возможностью его использования для исполнения машиноисполняемых инструкций для реализации вышеупомянутого способа.
[47] Из указанных выше технических решений очевидно, что в варианте осуществления настоящей заявки первый и второй целевые векторы движения текущего блока можно определять на основе первого и второго исходных векторов движения, при этом текущий блок можно кодировать или декодировать на основе первого и второго целевых векторов движения вместо того, чтобы кодировать или декодировать текущий блок непосредственно на основе первого и второго исходных векторов движения, для решения таких проблем, как низкое качество предсказания, погрешность предсказания и т.п., а также улучшения показателей кодирования и повышения эффективности кодирования.
Краткое описание чертежей
[48] Для создания более ясного представления о техническом решении в варианте осуществления настоящей заявки или известного решения, ниже будут кратко описаны чертежи, предназначенные для применения в указанных вариантах осуществления и чертежи известного решения. Разумеется, представленные ниже чертежи предназначены только для некоторых вариантов осуществления настоящей заявки; при этом специалисты в данной области техники смогут получить и другие чертежи на основе этих чертежей.
[49] Фиг. 1A - принципиальная схема интерполяции по варианту осуществления настоящей заявки;
[50] Фиг. 1B - принципиальная схема инфраструктуры кодирования видеоданных по варианту осуществления настоящей заявки;
[51] Фиг. 2 - блок-схема способа кодирования и декодирования по варианту осуществления настоящей заявки;
[52] Фиг. 3 - блок-схема способа кодирования и декодирования по варианту осуществления настоящей заявки;
[53] Фиг. 4 - блок-схема способа кодирования и декодирования по варианту осуществления настоящей заявки;
[54] Фиг. 5 - принципиальная схема опорных пикселей по варианту осуществления настоящей заявки;
[55] Фиг. 6 - принципиальная схема итерации по вектору движения по варианту осуществления настоящей заявки;
[56] Фиг. 7A-7E - принципиальные схемы последовательности потенциальных точек по варианту осуществления настоящей заявки;
[57] Фиг.8 - принципиальная схема привязки в пространственной области текущего блока по варианту осуществления настоящей заявки;
[58] Фиг. 9 - структурная схема оборудования кодирования и декодирования по варианту осуществления настоящей заявки;
[59] Фиг. 10 - структурная схема аппаратных средств устройства на стороне декодирования по варианту осуществления настоящей заявки;
[60] Фиг. 11 - структурная схема аппаратных средств устройства на стороне кодирования по варианту осуществления настоящей заявки.
Осуществление изобретения
[61] Понятия, используемые в вариантах осуществления настоящей заявки, служат исключительно для их раскрытия и не предназначены для ограничения настоящей заявки. В ней, если не указано иначе и/или иное явно не следует из контекста, неопределенные артикли (англ. «a» или «an») означают «по меньшей мере один», а определенный артикль (англ. «the») означает «указанный по меньшей мере один». Следует понимать, что выражение «и/или» в настоящей заявке служит для обозначения всех возможных комбинаций одной или нескольких перечисленных позиций, к которым оно относится.
[62] Следует понимать, что, несмотря на возможность применения понятий «первый», «второй», «третий» и т.д. в отношении различных элементов, эти элементы не следует ограничивать данными понятиями. Они служат исключительно для проведения различия между элементами разных типов. Например, «первый» элемент также может именоваться «второй» элемент, а «второй» элемент, аналогичным образом, также может именоваться «первый» элемент без отступления от объема настоящей заявки. Слово «если» может иметь значение «при…», или «когда…», «в качестве реакции на определение», в зависимости от контекста.
[63] В варианте осуществления настоящей заявки предложен способ кодирования и декодирования, с которым могут быть связаны следующие понятия:
[64] Методики внутрикадрового предсказания и межкадрового предсказания: методика внутрикадрового предсказания состоит в применении пикселей закодированного блока текущего изображения для предсказания текущих пикселей согласно пространственной корреляции видеоданных для эффективного устранения избыточности видеоданных в пространственной области. Методика внутрикадрового предсказания предусматривает задание множества режимов предсказания, каждый из которых соответствует одному направлению текстуры (за исключением режима прямого кодирования), при этом сигнал предсказания текущего блока генерируют на основе значения граничного восстановленного пикселя блока, примыкающего к текущему блоку в направлении предсказания. Например, если текстура изображения ориентирована по горизонтали, информацию изображения лучше предсказывать путем выбора режима предсказания по горизонтали. Так как видеопоследовательность обычно имеет более сильную корреляцию во временной области, методика межкадрового предсказания должна предусматривать применение пикселей примыкающего закодированного изображения для предсказания текущих пикселей текущего изображения согласно корреляции во временной области видеоданных для эффективного устранения избыточности видеоданных во временной области. Раздел о междкадровом предсказании основного стандарта кодирования видеоданных предусматривает применение технологии поблочной компенсации движения, основной принцип которой состоит в получении оптимально совпадающего блока в ранее закодированном изображении для каждого блока пикселей текущего изображения, именуемом «оценка движения» (ОД, англ. Motion Estimation (ME)).
[65] Вектор движения (ВД): при межкадровом кодировании, векторы движения служат для указания относительного смещения между текущим кодируемым блоком и оптимально совпадающим блоком в соответствующем опорном изображении. Каждый поделенный блок имеет соответствующий вектор движения, который передают стороне декодирования, при этом на независимое кодирование и передачу вектора движения каждого блока, в частности, поделенного на мелкие блоки, расходуется значительное число бит. Для уменьшения числа бит для кодирования вектора движения применяют пространственную корреляцию между примыкающими блоками изображения для предсказания вектора движения кодируемого текущего блока согласно вектору движения примыкающего закодированного блока с последующей передачей предсказанной разности. Это позволяет эффективно уменьшить число бит, представляющих вектор движения. В процессе кодирования вектора движения текущего блока, вектор движения текущего блока предсказывают на основе вектора движения примыкающего закодированного блока с последующим кодированием разности векторов движения (РВД, англ. Motion Vector Difference (MVD)) между предсказанным вектором движения (ПВД, Motion Vector Prediction (MVP)) и фактическим оцененным значением вектора движения, что значительно уменьшает число кодируемых бит ВД.
[66] Информация о движении: так как вектор движения указывает смещение между блоком текущего изображения и определенным блоком опорного изображения, для сбора точной информации, указывающей на этот блок изображения, в дополнение к вектору движения необходима информация об индексе изображения опорного кадра для указания применяемого изображения опорного кадра. Технология кодирования видеоданных предусматривает возможность создания общего перечня изображений опорного кадра для изображения текущего кадра, при этом информация об индексе изображения опорного кадра указывает изображение опорного кадра в перечне изображений опорного кадра, принятое блоком текущего изображения. Кроме того, многие методики кодирования также допускают наличие нескольких перечней опорных изображений, в связи с чем также возможно применение значения индекса, могущего именоваться «опорное направление», для указания применяемого перечня опорных изображений. В технологии кодирования видеоданных, относящаяся к движению информация, например, вектор движения, индекс опорного кадра и опорное направление, может собирательно именоваться «информация о движении».
[67] Сигнал предсказания: сигнал предсказания - это значение пикселя, полученное на основе уже закодированного и декодированного пикселя, при этом остаток получают на основе разности исходного пикселя и предсказанного пикселя, с последующим преобразованием и квантованием остатка и кодированием коэффициентов. В частности, сигнал межкадрового предсказания относится к значению пикселя, полученному на основе опорного кадра (кадра из восстановленных пикселей) текущего блока, при этом окончательный предсказанный пиксель получают путем интерполяции из-за дискретного расположения пикселей. Чем ближе предсказанный пиксель к исходному пикселю, тем меньше остаточная энергия, получаемая путем вычитания предсказанного пикселя из исходного пикселя и тем лучше показатели сжатия при кодировании.
[68] Интерполяция: если точность текущего ВД не является целопиксельной, существующее значение пикселя нельзя непосредственно скопировать из соответствующего опорного кадра, при этом необходимое значение пикселя можно получить только путем интерполяции. На Фиг.1A показано, что если нужно получить значение пикселя Y1/2 со сдвигом 1/2 пикселя, то его получают путем интерполяции значений Х окружающих существующих пикселей. При применении интерполяционного фильтра с числом отводов N, интерполяцию осуществляют путем интерполяции N окружающих целочисленных пикселей.
[69] Компенсация движения: компенсация движения - это процесс получения всех значений пикселей текущего блока путем интерполяции или копирования.
[70] Инфраструктура кодирования видеоданных: как раскрыто на Фиг. 1B, последовательность обработки на стороне кодирования по варианту осуществления настоящей заявки можно реализовать с помощью инфраструктуры кодирования видеоданных, при этом принципиальная схема инфраструктуры декодирования видеоданных схожа со схемой на Фиг.1B, которая не раскрывается в настоящем параграфе, при этом последовательность обработки на стороне декодирования по варианту осуществления настоящей заявки можно реализовать с помощью инфраструктуры декодирования видеоданных. В частности, инфраструктура кодирования видеоданных и инфраструктура декодирования видеоданных включают в себя модули, например, внутрикадрового предсказания, оценки движения / компенсации движения, буферизации опорных изображений, внутриконтурной фильтрации, восстановления, преобразования, квантования, обратного преобразования, обратного квантования, энтропийного кодирования и т.п. Последовательность обработки на стороне кодирования может быть реализована путем взаимодействия между указанными модулями, при этом последовательность обработки на стороне декодирования может быть реализована путем взаимодействия этих модулей.
[71] В известном способе, если текущий блок является двунаправленным, то отсутствует рациональное решение задачи, состоящей в том, как корректировать первый и второй исходные векторы движения после получения первого и второго исходных векторов движения текущего блока. В варианте осуществления заявки, если текущий блок является двунаправленным блоком, то сначала оценивают, соответствует ли характеристическая информация текущего блока особому условию; если да, определяют первый опорный блок, соответствующий текущему блоку, на основе первого исходного вектора движения, определяют второй опорный блок на основе второго исходного вектора движения текущего блока, и корректируют первый и второй исходные векторы движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого и второго целевых векторов движения.
[72] Таким образом, первый и второй целевые векторы движения получают путем коррекции первого и второго исходных векторов движения, что позволяет кодировать или декодировать текущий блок на основе первого и второго целевых векторов движения, улучшить показатели кодирования и повысить эффективность кодирования.
[73] Ниже детально раскрыт способ кодирования и декодирования по настоящей заявке на примере нескольких частных вариантов осуществления.
[74] Вариант осуществления 1: на Фиг.2 представлена принципиальная схема последовательности способа кодирования и декодирования по варианту осуществления настоящей заявки, причем способ применим к стороне декодирования или стороне кодирования, при этом способ может включать в себя следующие этапы:
[75] На этапе 201, если характеристическая информация текущего блока соответствует особому условию, определяют первый опорный блок, соответствующий текущему блоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий текущему блоку, на основе второго исходного вектора движения текущего блока. Характеристическая информация включает в себя, помимо прочего, по меньшей мере одно из следующего: режим предсказания информации о движении, соответствующий текущему блоку; атрибут информации о движении, соответствующий текущему блоку; информацию о размере текущего блока.
[76] В одном примере, когда характеристическая информация представляет собой режим предсказания информации о движении, соответствующий текущему блоку, соответствие характеристической информации текущего блока особому условию может включать в себя, помимо прочего: если режим предсказания информации о движении, соответствующий текущему блоку, представляет собой стандартный режим слияния, определяют, что режим предсказания информации о движении, соответствующий текущему блоку, соответствует особому условию; или, если режим предсказания информации о движении, соответствующий текущему блоку, представляет собой режим слияния для генерирования нового значения предсказания путем объединения значения межкадрового предсказания и значения внутрикадрового предсказания, определяют, что режим предсказания информации о движении, соответствующий текущему блоку, соответствует особому условию.
[77] В одном примере, когда характеристическая информация представляет собой атрибут информации о движении, соответствующий текущему блоку, соответствие характеристической информации текущего блока особому условию может включать в себя, помимо прочего: если атрибут информации о движении, соответствующий текущему блоку, состоит в том, что информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, определяют, что атрибут информации о движении, соответствующий текущему блоку, соответствует особому условию; или, если атрибут информации о движении, соответствующий текущему блоку, состоит в том, что информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, а расстояния между текущим кадром и каждым из двух опорных кадров, соответствующих информации о движении в двух разных направлениях, являются одинаковыми, определяют, что атрибут информации о движении, соответствующий текущему блоку, соответствует особому условию; или, если атрибут информации о движении, соответствующий текущему блоку, состоит в том, что для текущего блока вновь используют информацию о движении окружающих блоков, определяют, что атрибут информации о движении, соответствующий текущему блоку, соответствует особому условию; или, если атрибут информации о движении, соответствующий текущему блоку, состоит в том, что информация о движении каждого субблока текущего блока является одинаковой, определяют, что атрибут информации о движении, соответствующий текущему блоку, соответствует особому условию.
[78] Например, то, что информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, означает: информация о движении текущего блока в двух разных направлениях относится соответственно к первому опорному кадру и второму опорному кадру, при этом первый опорный кадр расположен перед текущим кадром, в котором расположен текущий блок, а второй опорный кадр расположен за текущим кадром, в котором расположен текущий блок.
[79] В одном примере, когда характеристическая информация представляет собой информацию о размере текущего блока, информация о размере текущего блока может включать в себя значение ширины и значение высоты текущего блока, при этом соответствие характеристической информации текущего блока особому условию может включать в себя, помимо прочего: если значение ширины текущего блока находится в пределах первого интервала [первый порог, второй порог], определяют, что информация о размере текущего блока соответствует особому условию; или, если значение высоты текущего блока находится в пределах второго интервала [третий порог, четвертый порог], определяют, что информация о размере текущего блока соответствует особому условию; или, если площадь, полученная на основе значения ширины и значения высоты текущего блока, находится в пределах третьего интервала [пятый порог, шестой порог], определяют, что информация о размере текущего блока соответствует особому условию; или, если значение ширины находится в пределах первого интервала [первый порог, второй порог], значение высоты находится в пределах второго интервала [третий порог, четвертый порог], а площадь находится в пределах третьего интервала [пятый порог, шестой порог], определяют, что информация о размере текущего блока соответствует особому условию.
[80] Например, первый порог может быть меньше второго порога, при этом ни первый порог, ни второй порог не ограничен, например, первый порог может составлять 4, а второй порог может составлять 128. Третий порог может быть меньше четвертого порога, при этом ни третий порог, ни четвертый порог не ограничен, например, третий порог может составлять 8, а четвертый порог может составлять 128. Пятый порог может быть меньше шестого порога, при этом ни пятый порог, ни шестой порог не ограничен, например, при этом пятый порог может составлять 64, а шестой порог - 128*128.
[81] В одном примере, этап, на котором определяют первый опорный блок, соответствующий текущему блоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий текущему блоку, на основе второго исходного вектора движения текущего блока может включать в себя, помимо прочего, действия, состоящие в том, что: определяют первый опорный блок, соответствующий текущему блоку, из первого опорного кадра на основе первого исходного вектора движения текущего блока; и определяют второй опорный блок, соответствующий текущему блоку, из второго опорного кадра на основе второго исходного вектора движения текущего блока. Первое значение пикселя каждой пиксельной точки в первом опорном блоке получают путем интерполяции значений пикселей примыкающих пиксельных точек в первом опорном блоке или получают путем копирования значений пикселей примыкающих пиксельных точек в первом опорном блоке; второе значение пикселя каждой пиксельной точки во втором опорном блоке получают путем интерполяции значений пикселей примыкающих пиксельных точек во втором опорном блоке или получают путем копирования значений пикселей примыкающих пиксельных точек во втором опорном блоке. Размер первого опорного блока равен размеру второго опорного блока, при этом значение ширины первого опорного блока определяют по значению ширины текущего блока и диапазону поиска, а значение высоты первого опорного блока определяют по значению высоты текущего блока и диапазону поиска.
[82] На этапе 202 первый и второй исходные векторы движения корректируют согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения.
[83] В одном примере, если текущий блок содержит по меньшей мере один субблок, то для каждого субблока текущего блока первый и второй исходные векторы движения корректируют согласно первому и второму значениям пикселей для получения первого и второго целевых векторов движения субблока.
[84] В одном примере этап, на котором корректируют первый и второй исходные векторы движения согласно первому и второму значениям пикселей для получения первого и второго целевых векторов движения субблока, может включать в себя действия, состоящие в том, что можно определить первое и второе целопиксельные значения коррекции вектора движения субблока и/или первое и второе субпиксельные значения коррекции вектора движения субблока на основе первого и второго значений пикселей. Далее первый исходный вектор движения можно скорректировать согласно первому целопиксельному значению коррекции вектора движения и/или первому субпиксельному значению коррекции вектора движения для получения первого целевого вектора движения субблока. При этом второй исходный вектор движения можно скорректировать согласно второму целопиксельному значению коррекции вектора движения и/или второму субпиксельному значению коррекции вектора движения для получения второго целевого вектора движения субблока.
[85] В одном примере этап, на котором определяют первое и второе целопиксельные значения коррекции вектора движения субблока, первое и второе субпиксельные значения коррекции вектора движения субблока на основе первого и второго значений пикселей, может включать в себя действия, состоящие в том, что: определяют первый исходный вектор движения или второй исходный вектор движения в качестве центрального вектора движения; определяют краевой вектор движения, соответствующий центральному вектору движения; получают первое значение стоимости, соответствующее центральному вектору движения, и второе значение стоимости, соответствующее краевому вектору движения, на основе первого и второго значений пикселей; далее выбирают вектор движения из центрального вектора движения и краевого вектора движения в качестве оптимального вектора движения на основе первого значения стоимости и второго значения стоимости и оценивают, соблюдено ли конечное условие; если нет, определяют оптимальный вектор движения в качестве центрального вектора движения и повторно определяют краевой вектор движения, соответствующий центральному вектору движения; если да, определяют первое и второе целопиксельные значения коррекции вектора движения субблока на основе оптимального вектора движения; и определяют первое и второе субпиксельные значения коррекции вектора движения субблока на основе оптимального вектора движения.
[86] В одном примере на этапе, на котором определяют краевой вектор движения, соответствующий центральному вектору движения: сдвигают центральный вектор (x, y) движения в разных направлениях на S и последовательно получают краевой вектор (x, y+S) движения, краевой вектор (x, y-S) движения, краевой вектор (x+ S, y) движения, краевой вектор (x-S, y) движения и краевой вектор (x+ вправо, y+ вниз) движения в разных направлениях, либо сдвигают центральный вектор (x, y) движения в разных направлениях на S и последовательно получают краевой вектор (x, y-S) движения, краевой вектор (x, y+S) движения, краевой вектор (x-S, y) движения, краевой вектор (x+S, y) движения и краевой вектор (x+ вправо, y+ вниз) движения в разных направлениях. Используемое по умолчанию значение краевого вектора (x + вправо, y + вниз) движения составляет (x-S, y-S); если значение стоимости краевого вектора (x+S, y) движения меньше значения стоимости краевого вектора (x-S, y) движения, то значение «вправо» составляет S; если значение стоимости краевого вектора движения (x, y + S) меньше чем у краевого вектора (x, y-S) движения, то значение «вниз» составляет S; либо, если значение стоимости краевого вектора (x+S, y) движения меньше или равно значению стоимости краевого вектора (x-S, y) движения, то значение «вправо» составляет S; если значение стоимости краевого вектора движения (x, y + S) меньше или равно значению стоимости краевого вектора (x, y-S) движения, то значение «вниз» составляет S.
[87] В одном примере этап, на котором получают первое значение стоимости, соответствующее центральному вектору движения, и второе значение стоимости, соответствующее краевому вектору движения на основе первого и второго значений пикселей может включать в себя, помимо прочего, действия, состоящие в том, что: получают первое значение стоимости, соответствующее центральному вектору движения, и второе значение стоимости, соответствующее краевому вектору движения, на основе первого и второго значений пикселей без понижающей дискретизации; в качестве альтернативы, можно выполнить операцию понижающей дискретизации в отношении первого и второго значений пикселей; и получают первое значение стоимости, соответствующее центральному вектору движения, и второе значение стоимости, соответствующее краевому вектору движения, на основе первого и второго значений пикселей после понижающей дискретизации; в качестве альтернативы, можно выполнить сдвиг и операцию понижающей дискретизации в отношении первого значения пикселя и выполнить сдвиг и операцию понижающей дискретизации в отношении второго значения пикселя; и получают первое значение стоимости, соответствующее центральному вектору движения, и второе значение стоимости, соответствующее краевому вектору движения, на основе первого и второго значений пикселей после сдвига и понижающей дискретизации.
[88] В одном примере этап, на котором определяют первое и второе целопиксельные значения коррекции вектора движения субблока, первое и второе субпиксельные значения коррекции вектора движения субблока на основе первого и второго значений пикселей, может включать в себя действия, состоящие в том, что: принимают первый исходный вектор движения или второй исходный вектор движения в качестве центра, выбирают некоторые или все векторы движения из окружающих векторов движения и принимают выбранные векторы движения в качестве потенциальных векторов движения; получают третье значение стоимости, соответствующее первому исходному вектору движения или второму исходному вектору движения, и четвертое значение стоимости, соответствующее каждому из потенциальных векторов движения, на основе первого и второго значений пикселей; далее выбирают вектор движения из первого исходного вектора движения или второго исходного вектора движения и потенциального вектора движения в качестве оптимального вектора движения на основе третьего значения стоимости и четвертого значения стоимости; определяют первое и второе целопиксельные значения коррекции вектора движения субблока на основе оптимального вектора движения; и определяют первое и второе субпиксельные значения коррекции вектора движения субблока на основе оптимального вектора движения.
[89] Этап, на котором определяют первое и второе целопиксельные значения коррекции вектора движения субблока на основе оптимального вектора движения, может включать в себя, помимо прочего, действия, состоящие в том, что: определяют первое целопиксельное значение коррекции вектора движения субблока на основе оптимального вектора движения и первого исходного вектора движения и определяют второе целопиксельное значение коррекции вектора движения субблока согласно первому целопиксельному значению коррекции вектора движения.
[90] Этап, на котором определяют первое и второе субпиксельные значения коррекции вектора движения субблока на основе оптимального вектора движения, может включать в себя действия, состоящие в том, что: определяют первое субпиксельное значение коррекции вектора движения субблока на основе значения стоимости, соответствующего оптимальному вектору движения, и значения стоимости, соответствующего краевому вектору движения, соответствующему оптимальному вектору движения, и определяют второе субпиксельное значение коррекции вектора движения субблока на основе первого субпиксельного значения коррекции вектора движения.
[91] На этапе 203 текущий блок кодируют или декодируют на основе первого и второго целевых векторов движения. Например, если речь идет о стороне кодирования, то сторона кодирования может кодировать текущий блок на основе первого и второго целевых векторов движения; если речь идет о стороне декодирования, то сторона декодирования может декодировать текущий блок на основе первого и второго целевых векторов движения.
[92] В одном примере для каждого субблока текущего блока определяют третий опорный блок, соответствующий субблоку, на основе первого целевого вектора движения субблока и определяют четвертый опорный блок, соответствующий субблоку, на основе второго целевого вектора движения субблока; третье значение пикселя третьего опорного блока и четвертое значение пикселя четвертого опорного блока взвешивают для получения значения предсказания субблока; и определяют значение предсказания текущего блока на основе значения предсказания каждого субблока.
[93] В одном примере этап, на котором определяют третий опорный блок, соответствующий субблоку, на основе первого целевого вектора движения субблока и определяют четвертый опорный блок, соответствующий субблоку, на основе второго целевого вектора движения субблока может включать в себя действия, состоящие в том, что:
[94] Вариант реализации 1: определяют пятый опорный блок, соответствующий субблоку, из первого опорного кадра на основе первого целевого вектора движения субблока и интерполируют значения пикселей в пятом опорном блоке для получения третьего опорного блока. Определяют шестой опорный блок, соответствующий субблоку, из второго опорного кадра на основе второго целевого вектора движения субблока и интерполируют значения пикселей в шестом опорном блоке для получения четвертого опорного блока.
[95] Вариант реализации 2: определяют седьмой опорный блок, соответствующий субблоку, из первого опорного кадра на основе первого целевого вектора движения субблока, строят восьмой опорный блок на основе значений пикселей в седьмом опорном блоке и интерполируют значения пикселей в восьмом опорном блоке для получения третьего опорного блока; и определяют девятый опорный блок, соответствующий субблоку, из второго опорного кадра на основе второго целевого вектора движения субблока, строят десятый опорный блок на основе значений пикселей в девятом опорном блоке и интерполируют значения пикселей в десятом опорном блоке для получения четвертого опорного блока.
[96] В одном примере, после кодирования или декодирования текущего блока на основе первого и второго целевых векторов движения, первый и второй целевые векторы движения для текущего блока можно сохранить. Таким образом, первый и второй целевые векторы движения применяют для контурной фильтрации текущего кадра, первый и второй целевые векторы движения применяют для привязки во временной области последующих кадров и/или первый и второй целевые векторы движения применяют для привязки в пространственной области текущего кадра.
[97] Из раскрытых выше технических решений следует, что в варианте осуществления настоящей заявки первый и второй целевые векторы движения текущего блока можно определять на основе первого и второго исходных векторов движения, а текущий блок можно кодировать или декодировать на основе первого и второго целевых векторов движения вместо того, чтобы кодировать или декодировать его непосредственно на основе первого и второго исходных векторов движения, для решения таких проблем, как низкое качество предсказания, погрешность предсказания и т.п., улучшения показателей кодирования и повышения эффективности кодирования.
[98] Вариант осуществления 2: на Фиг.3 представлена принципиальная схема последовательности способа кодирования и декодирования по варианту осуществления настоящей заявки, причем способ кодирования и декодирования применим к стороне кодирования, при этом способ кодирования и декодирования может включать в себя следующие этапы:
[99] На этапе 301 сторона кодирования оценивает, соответствует ли характеристическая информация текущего блока особому условию. Если характеристическая информация текущего блока соответствует особому условию, выполняют этап 302; а если характеристическая информация текущего блока не соответствует особому условию, нет необходимости в применении способа коррекции вектора движения по настоящей заявке, при этом способ обработки не ограничен.
[100] В одном примере сторона кодирования может оценивать, соответствует ли характеристическая информация текущего блока особому условию, на основе закодированной информации. Если характеристическая информация текущего блока соответствует особому условию, это указывает на то, что информация о движении текущего блока недостаточно точна, в связи с чем включают (допускают) режим уточнения вектора движения и выполняют этап 302.
[101] Если характеристическая информация текущего блока не соответствует особому условию, это указывает на то, что информация о движении текущего блока достаточно точна, поэтому режим уточнения вектора движения не разрешают, и в режиме уточнения вектора движения по настоящей заявке нет необходимости.
[102] В одном примере характеристическая информация текущего блока включает в себя, помимо прочего, по меньшей мере одно из следующего: режим предсказания информации о движении, соответствующий текущему блоку; атрибут информации о движении, соответствующий текущему блоку; информацию о размере текущего блока.
[103] Варианты осуществления способа оценки соответствия характеристической информации текущего блока особому условию:
[104] На этапе 302 сторона кодирования определяет первый опорный блок, соответствующий текущему блоку, из первого опорного кадра на основе первого исходного вектора движения текущего блока; и определяет второй опорный блок, соответствующий текущему блоку, из второго опорного кадра на основе второго исходного вектора движения текущего блока. Значение пикселя каждой пиксельной точки в первом опорном блоке именуется «первое значение пикселя», а значение пикселя каждой пиксельной точки во втором опорном блоке именуется «второе значение пикселя» для проведения различия между ними.
[105] В одном примере, если текущий блок представляет собой блок, для которого применяют двунаправленное предсказание, то информация о движении текущего блока является двунаправленной с двумя опорными кадрами и двумя исходными векторами движения. Например, сторона кодирования может получать двунаправленную информацию о движении известным способом, который не ограничен. Двунаправленная информация о движении включает в себя первый опорный кадр и первый исходный вектор движения, второй опорный кадр и второй исходный вектор движения.
[106] Сторона кодирования может определять первый опорный блок, соответствующий текущему блоку, из первого опорного кадра на основе первого исходного вектора движения, при этом значение пикселя каждой пиксельной точки в первом опорном блоке может именоваться «первое значение пикселя».
[107] Сторона кодирования может определять второй опорный блок, соответствующий текущему блоку, из второго опорного кадра на основе второго исходного вектора движения, при этом значение пикселя каждой пиксельной точки во втором опорном блоке может именоваться «второе значение пикселя».
[108] В одном примере расстояние между текущим кадром, в котором расположен текущий блок, и первым опорным кадром и расстояние между вторым опорным кадром и текущим кадром, в котором расположен текущий блок, могут быть одинаковыми. Например, первый опорный кадр - это 1-й кадр, текущий кадр - это 5-й кадр, а второй опорный кадр - это 9-й кадр. Разумеется, выше приведен только один из примеров, и указанные два расстояния могут быть разными.
[109] Первый и второй исходные векторы движения зеркально симметричны друг другу, например, первый исходный вектор движения имеет координаты (4, 4), а второй исходный вектор движения имеет координаты (-4, -4); первый исходный вектор движения имеет координаты (2.5, 3.5), а второй исходный вектор движения имеет координаты (-2.5, -3.5). Разумеется, выше приведен только один из примеров, и между первым и вторым исходными векторами движения может не быть зеркальной симметрии.
[110] Варианты осуществления способа определения первого и второго опорных блоков:
[111] На этапе 303 для каждого субблока текущего блока: сторона кодирования корректирует первый исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения субблока; и сторона кодирования корректирует второй исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения второго целевого вектора движения субблока.
[112] В одном примере, если для текущего блока включен (разрешен) режим уточнения вектора движения, сторона кодирования может выполнить тонкую корректировку первого и второго исходных векторов движения с применением способа локального поиска по первому и второму значениям пикселей для получения более корректных первого целевого вектора движения и второго целевого вектора движения, а затем на их основе сгенерировать значение предсказания с меньшим искажением.
[113] В одном примере текущий блок может включать в себя по меньшей мере один субблок, при этом, если он включает в себя только один субблок, то этот субблок и является текущим блоком. Данный субблок соответствует первому и второму исходным векторам движения, а после их коррекции субблок соответствует первому и второму целевым векторам движения.
[114] Если текущий блок включает в себя субблок A и субблок B, то субблок A соответствует первому исходному вектору A1 движения и второму исходному вектору A2 движения, а после их коррекции субблок A соответствует первому целевому вектору A3 движения и второму целевому вектору A4 движения. Субблок B соответствует первому исходному вектору B1 движения и второму исходному вектору B2 движения, а после их коррекции субблок B соответствует первому целевому вектору B3 движения и второму целевому вектору B4 движения.
[115] Первый исходный вектор A1 движения, соответствующий субблоку A, и первый исходный вектор B1 движения, соответствующий субблоку B, могут быть одним и тем же и представлять собой первый исходный векторы движения текущего блока; второй исходный вектор A2 движения, соответствующий субблоку A, и второй исходный вектор B2 движения, соответствующий субблоку B, могут быть одним и тем же и представлять собой второй исходный вектор движения текущего блока.
[116] Так как первый исходный вектор движения каждого субблока корректируют по отдельности, первый целевой вектор A3 движения, соответствующий субблоку A, и первый целевой вектор B3 движения, соответствующий субблоку B, могут представлять собой один и тот же или разные векторы. Так как второй исходный вектор движения каждого субблока корректируют по отдельности, второй целевой вектор A4 движения, соответствующий субблоку A, и второй целевой вектор B4 движения, соответствующий субблоку B, могут представлять собой один и тот же или разные векторы.
[117] Варианты осуществления способа коррекции исходных векторов движения, которые не будут детально раскрыты в настоящем параграфе, см. ниже.
[118] На этапе 304 сторона кодирования выполняет компенсацию движения для каждого субблока текущего блока на основе первого и второго целевых векторов движения. Например, если текущий блок включает в себя субблок A и субблок B, первый и второй целевые векторы движения субблока A могут служить для выполнения компенсации движения для субблока A, а первый и второй целевые векторы движения субблока B могут служить для выполнения компенсации движения для субблока B.
[119] Варианты осуществления способа компенсации движения, которые не будут детально раскрыты в настоящем параграфе, см. ниже.
[120] На этапе 305 сторона кодирования сохраняет первый и второй целевые векторы движения каждого субблока текущего блока, при этом первый и второй целевые векторы движения применяют в качестве опорных для кодирования последующего блока.
[121] Реализацию кодирования с помощью опорных векторов см. в нижеследующих вариантах осуществления, которые не будут детально раскрыты в настоящем параграфе.
[122] Вариант осуществления 3: на Фиг.4 представлена принципиальная схема последовательности способа кодирования и декодирования по варианту осуществления настоящей заявки, причем способ кодирования и декодирования применим к стороне декодирования, при этом способ кодирования и декодирования может включать в себя следующие этапы:
[123] На этапе 401 сторона декодирования оценивает, соответствует ли характеристическая информация текущего блока особому условию. Если характеристическая информация текущего блока соответствует особому условию, то выполняют этап 402, а если характеристическая информация текущего блока не соответствует особому условию, то нет необходимости в применении способа коррекции вектора движения по настоящей заявке, при этом способ обработки не ограничен.
[124] В одном примере сторона декодирования выполнена с возможностью приема битового потока, отправленного стороной кодирования, и определения того, соответствует ли характеристическая информация текущего блока особому условию, на основе декодированной информации. Если характеристическая информация текущего блока соответствует особому условию, это указывает на то, что информация о движении текущего блока недостаточно точная, в связи с чем включают режим уточнения вектора движения и выполняют этап 402. Если характеристическая информация текущего блока не соответствует особому условию, это указывает на то, что информация о движении текущего блока достаточно точна, поэтому режим уточнения вектора движения не включают, и в режиме уточнения вектора движения по настоящей заявке нет необходимости.
[125] На этапе 402 сторона декодирования определяет первый опорный блок, соответствующий текущему блоку, из первого опорного кадра на основе первого исходного вектора движения текущего блока; и определяет второй опорный блок, соответствующий текущему блоку, из второго опорного кадра на основе второго исходного вектора движения текущего блока. Значение пикселя каждой пиксельной точки в первом опорном блоке именуется «первое значение пикселя», а значение пикселя каждой пиксельной точки во втором опорном блоке именуется «второе значение пикселя» для проведения различия между ними.
[126] На этапе 403 для каждого субблока текущего блока: сторона декодирования корректирует первый исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения субблока; и сторона декодирования корректирует второй исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения второго целевого вектора движения субблока.
[127] На этапе 404 сторона декодирования выполняет компенсацию движения для каждого субблока текущего блока на основе первого и второго целевых векторов движения субблока.
[128] На этапе 405 сторона декодирования сохраняет первый и второй целевые векторы движения каждого субблока текущего блока, при этом первый и второй целевые векторы движения применяют в качестве опорных для кодирования последующего блока.
[129] Вариант осуществления 4: на этапе 301 и этапе 401 оценивают, соответствует ли характеристическая информация текущего блока особому условию. В данном варианте осуществления, если характеристическая информация соответствует всем следующим условиям, определяют, что характеристическая информация текущего блока соответствует особому условию, и включают режим уточнения вектора движения. В ином случае режим уточнения вектора движения не включают.
[130] Атрибут информации о движении, соответствующий текущему блоку, включает в себя следующее: непосредственное мультиплексирование в текущем блоке информации о движении окружающих блоков без кодирования разности информации о движении. Атрибут информации о движении, соответствующий текущему блоку, включает в себя следующее: информация о движении каждого субблока текущего блока является одной и той же, т.е. без применения режима предсказания информации о движении субблока. Атрибут информации о движении, соответствующий текущему блоку, включает в себя следующее: информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях. Информация о размере текущего блока включает в себя: размер текущего блока находится в пределах определенного диапазона, как будет раскрыто в нижеследующих вариантах осуществления.
[131] Вариант осуществления 5: на этапе 301 и этапе 401 оценивают, соответствует ли характеристическая информация текущего блока особому условию. В данном варианте осуществления, если характеристическая информация соответствует всем следующим условиям, определяют, что характеристическая информация текущего блока соответствует особому условию, и включают режим уточнения вектора движения. В ином случае режим уточнения вектора движения не включают.
[132] Режим предсказания информации о движении, соответствующий текущему блоку, включает в себя стандартный режим слияния (англ. Regular merge mode) или режим CIIP (а именно режим слияния для генерирования нового значения предсказания путем объединения значения межкадрового предсказания и значения внутрикадрового предсказания); в качестве альтернативы, режим предсказания информации о движении, соответствующий текущему блоку, не включает в себя режим MMVD (т.е. режим слияния для кодирования значений разности информации о движении), режим слияния SB (т.е. режим слияния для применения информации о движении субблока) или режим TPM (т.е. режим слияния для предсказания по треугольнику).
[133] Атрибут информации о движении, соответствующий текущему блоку, включает в себя следующее: информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, при этом расстояния между текущим кадром и каждым из двух опорных кадров, соответствующих информации о движении в двух разных направлениях, являются одинаковыми. Информация о размере текущего блока включает в себя: размер текущего блока находится в пределах определенного диапазона.
[134] Следует отметить, что режим слияния включает в себя, помимо прочего, следующие типы режимов слияния: стандартный режим слияния (т.е. стандартный режим слияния); режим слияния для предсказания по треугольнику (режим TPM); режим слияния для кодирования значений разности информации о движении (режим MMVD); режим слияния для применения информации о движении субблока (режим слияния SB); и режим слияния для генерирования нового значения предсказания путем объединения значения межкадрового предсказания и значения внутрикадрового предсказания (режим CIIP).
[135] В одном примере стандартный режим слияния включает в себя стандартный режим слияния, в котором остатки не кодируют (т.е. режим пропуска) и стандартный режим слияния, в котором остатки кодируют. Режим MMVD включает в себя режим MMVD, в котором остаток не кодируют.
[136] Вариант осуществления 6: на этапе 301 и этапе 401 оценивают, соответствует ли характеристическая информация текущего блока особому условию. В данном варианте осуществления, если характеристическая информация соответствует всем следующим условиям, определяют, что характеристическая информация текущего блока соответствует особому условию, и включают режим уточнения вектора движения. В ином случае режим уточнения вектора движения не включают.
[137] Режим предсказания информации о движении, соответствующий текущему блоку, включает в себя стандартный режим слияния (т.е. стандартный режим слияния), режим CIIP (а именно режим слияния для генерирования нового значения предсказания путем объединения значения межкадрового предсказания и значения внутрикадрового предсказания) или режим TPM (т.е. режим слияния для предсказания по треугольнику); в качестве альтернативы, режим предсказания информации о движении, соответствующий текущему блоку, не включает в себя режим MMVD (т.е. режим слияния для кодирования значений разности информации о движении) или режим слияния SB (т.е. режим слияния для применения информации о движении субблока).
[138] Атрибут информации о движении, соответствующий текущему блоку, включает в себя следующее: информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, при этом расстояния между текущим кадром и каждым из двух опорных кадров, соответствующих информации о движении в двух разных направлениях, являются одинаковыми. Информация о размере текущего блока включает в себя: размер текущего блока находится в пределах определенного диапазона.
[139] Вариант осуществления 7: на этапе 301 и этапе 401 оценивают, соответствует ли характеристическая информация текущего блока особому условию. В данном варианте осуществления, если характеристическая информация соответствует всем следующим условиям, определяют, что характеристическая информация текущего блока соответствует особому условию, и включают режим уточнения вектора движения. В ином случае режим уточнения вектора движения не включают.
[140] Режим предсказания информации о движении, соответствующий текущему блоку, включает в себя стандартный режим слияния (т.е. стандартный режим слияния), режим CIIP (а именно режим слияния для генерирования нового значения предсказания путем объединения значения межкадрового предсказания и значения внутрикадрового предсказания), режим TPM (т.е. режим слияния для предсказания по треугольнику) или режим MMVD (т.е. режим слияния для кодирования значений разности информации о движении); в качестве альтернативы, режим предсказания информации о движении, соответствующий текущему блоку, не включает в себя режим слияния SB (т.е. режим слияния для применения информации о движении субблока).
[141] Атрибут информации о движении, соответствующий текущему блоку, включает в себя следующее: информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, при этом расстояния между текущим кадром и каждым из двух опорных кадров, соответствующих информации о движении в двух разных направлениях, являются одинаковыми. Информация о размере текущего блока включает в себя: размер текущего блока находится в пределах определенного диапазона.
[142] Вариант осуществления 8: на этапе 301 и этапе 401 оценивают, соответствует ли характеристическая информация текущего блока особому условию. В данном варианте осуществления, если характеристическая информация соответствует всем следующим условиям, определяют, что характеристическая информация текущего блока соответствует особому условию, и включают режим уточнения вектора движения. В ином случае режим уточнения вектора движения не включают.
[143] Режим предсказания информации о движении, соответствующий текущему блоку, включает в себя стандартный режим слияния или режим CIIP; режим предсказания информации о движении, соответствующий текущему блоку, не включает в себя режим MMVD, режим слияния SB или режим TPM; в качестве альтернативы, режим предсказания информации о движении, соответствующий текущему блоку, включает в себя стандартный режим слияния, режим CIIP или режим TPM; режим предсказания информации о движении, соответствующий текущему блоку, не включает в себя режим MMVD или режим слияния SB; в качестве альтернативы, режим предсказания информации о движении, соответствующий текущему блоку, включает в себя стандартный режим слияния, режим CIIP, или режим TPM, или режим MMVD; режим предсказания информации о движении, соответствующий текущему блоку, не включает в себя режим слияния SB.
[144] Атрибут информации о движении, соответствующий текущему блоку, включает в себя следующее: информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, при этом отсутствует ограничение, состоящее в том, что расстояния между текущим кадром и каждым из двух опорных кадров, соответствующих информации о движении в двух разных направлениях, являются одинаковыми, т.е. данное ограничивающее условие снято. Информация о размере текущего блока включает в себя: размер текущего блока находится в пределах определенного диапазона.
[145] Вариант осуществления 9: касательно того, что «размер текущего блока находится в пределах определенного диапазона» в раскрытых выше вариантах осуществления 4 - 8: если размер текущего блока соответствует следующему условию, определяют, что размер текущего блока находится в пределах определенного диапазона.
n
m
[146] Значение ширины текущего блока находится в пределах диапазона [первый порог, второй порог], причем первый порог может составлять 4, а второй порог может составлять 128. Высота текущего блока находится в пределах диапазона [третий порог, четвертый порог], причем третий порог может составлять 8, а четвертый порог может составлять 128. Например, каждый из первого порога, второго порога, третьего порога и четвертого порога может составлять 2, где n целое число не меньше 1. Площадь текущего блока находится в пределах диапазона [пятый порог, шестой порог], причем пятый порог может составлять 64, а шестой порог может составлять 128*128= 16384. Например, и пятый порог, и шестой порог могут составлять 4, где m целое число не меньше 1. В приведенном выше примере выражение [a, b] может представлять значение не меньше a и не больше b.
[147] Вариант осуществления 10: на этапе 302 и этапе 402 определяют первый опорный блок, соответствующий текущему блоку, из первого опорного кадра на основе первого исходного вектора движения, при этом значение пикселя каждой пиксельной точки в первом опорном блоке именуется «первое значение пикселя»; определяют второй опорный блок, соответствующий текущему блоку, из второго опорного кадра на основе второго исходного вектора движения, при этом значение пикселя каждой пиксельной точки во втором опорном блоке именуется «второе значение пикселя», как раскрыто ниже.
[148] Первое значение пикселя каждой пиксельной точки в первом опорном блоке получают путем интерполяции значений пикселей примыкающих пиксельных точек в первом опорном блоке или получают путем копирования значений пикселей примыкающих пиксельных точек в первом опорном блоке; второе значение пикселя каждой пиксельной точки во втором опорном блоке получают путем интерполяции значений пикселей примыкающих пиксельных точек во втором опорном блоке или получают путем копирования значений пикселей примыкающих пиксельных точек во втором опорном блоке. Размер первого опорного блока равен размеру второго опорного блока, значение ширины первого/второго опорного блока определяют по значению ширины текущего блока и диапазону поиска, а значение высоты первого/второго опорного блока определяют по значению высоты текущего блока и диапазону поиска.
[149] На Фиг.5, если текущий блок имеет ширину W и высоту H, то первый исходный вектор движения обозначают MV0, а второй исходный вектор движения обозначают MV1. Целопиксельный блок площадью (W+FS-1)*(H+FS-1) получают на основе соответствующего положения первого исходного вектора MV0 движения в первом опорном кадре, при этом целопиксельный блок обозначают как целопиксельный блок A. Целопиксельный блок площадью (W+FS-1)*(H+FS-1) получают на основе соответствующего положения второго исходного вектора MV1 движения во втором опорном кадре, при этом целопиксельный блок обозначают как целопиксельный блок B.
[150] В одном примере, на основе целопиксельного блока A площадью (W+FS-1)*(H+FS-1) можно получить исходный блок опорных пикселей размером (W +2*SR)*(H +2*SR) путем билинейной интерполяции, при этом исходный блок опорных пикселей можно обозначить «первый опорный блок». На основе целопиксельного блока B площадью (W+FS-1)*(H+FS-1) можно получить исходный блок опорных пикселей размером (W +2*SR)*(H +2*SR) путем билинейной интерполяции, при этом исходный блок опорных пикселей можно обозначить как «второй опорный блок».
[151] В другом примере на основе целопиксельного блока A площадью (W+FS-1)*(H+FS-1) можно получить исходный блок опорных пикселей размером (W +2*SR)*(H +2*SR) путем непосредственного копирования (без интерполяции), при этом исходный блок опорных пикселей можно обозначить как «первый опорный блок». На основе целопиксельного блока B площадью (W+FS-1)*(H+FS-1), можно получить исходный блок опорных пикселей размером (W +2*SR)*(H +2*SR) путем непосредственного копирования, при этом исходный блок опорных пикселей можно обозначить как «второй опорный блок».
[152] Например, только для яркостной составляющей (поскольку в последующем процессе поиска для упрощения будет происходить вычисление значения стоимости только по яркостной составляющей), можно получить исходные блоки опорных пикселей размером (W +2*SR)*(H +2*SR) на основе целопиксельных блоков (например, целопиксельного блока A и целопиксельного блока B) площадью (W+FS-1)*(H+FS-1), т.е. первый опорный блок (например, Pred_Inter0) и второй опорный блок (например, Pred_Inter1).
[153] В одном примере FS может представлять собой число отводов интерполяционного фильтра, например FS может составлять 8 и т.д.
[154] Получение первого/второго опорных блоков путем билинейной интерполяции состоит в том, что получают значение пикселя каждой пиксельной точки в первом/втором опорном блоке путем интерполяции значений пикселей примыкающих пиксельных точек в первом/втором опорном блоке, но не ограничено этим. Получение первого/второго опорных блоков путем копирования состоит в том, что значение пикселя каждой пиксельной точки в первом/втором опорном блоке получают путем копирования значений пикселей примыкающих пиксельных точек в первом/втором опорном блоке, но не ограничено этим.
[155] В вышеуказанном варианте осуществления первый опорный блок имеет площадь (W +2*SR)*(H +2*SR), второй опорный блок имеет площадь (W +2*SR)*(H +2*SR), то есть значение ширины первого/второго опорного блока составляет W +2*SR, а значение высоты первого/второго опорного блока составляет H +2*SR. W - это ширина текущего блока, H - это высота текущего блока, SR - диапазон поиска, т.е. число итераций в нижеследующих вариантах осуществления; таким образом, SR - это максимальная интерполяциях по горизонтальным/вертикальным компонентам целевого вектора движения и исходного вектора движения, например SR может составлять 2 и т.д.
[156] Первый и второй опорные блоки применяют для коррекции вектора движения в последующем процессе.
[157] Вариант осуществления 11: на этапе 303 и этапе 403 для каждого субблока текущего блока корректируют первый исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения субблока; при этом корректируют второй исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения второго целевого вектора движения субблока.
[158] В качестве примера, процесс коррекции исходного вектора движения раскрыт в виде процедуры обработки одного субблока (например, каждого субблока размером dx*dy текущего блока, например, субблока размером 16*16 или меньшего блока).
[159] На этапе a1 первый исходный вектор движения или второй исходный вектор движения определяют в качестве центрального вектора движения.
[160] Например, если первый исходный вектор движения имеет координаты (4, 4), а второй исходный вектор движения имеет координаты (-4, -4), то первый исходный вектор движения (4, 4) или второй исходный вектор движения (-4, -4) можно определить в качестве центрального вектора движения. Для удобства раскрытия, в качестве центрального вектора движения определяют, например, первый исходный вектор движения (4, 4), при этом методика определения второго исходного вектора движения (-4, -4) в качестве центрального вектора движения является аналогичной.
[161] На этапе a2 определяют краевой вектор движения, соответствующий центральному вектору движения.
[162] Например, центральный вектор (x, y) движения сдвигают в разных направлениях на S и последовательно получают краевой вектор (x, y+S) движения, краевой вектор (x, y-S) движения, краевой вектор (x+ S, y) движения, краевой вектор (x-S, y) движения и краевой вектор (x+ вправо, y+ вниз) движения в разных направлениях, причем значение «вправо» может составлять S или -S, а значение «вниз» может составлять S или -S, при этом определение значений «вправо» и «вниз» раскрыто в нижеследующих вариантах осуществления.
[163] На Фиг.6, например, если центральный вектор (x, y) движения принят в качестве центра, то есть центральный вектор движения имеет координаты (0, 0), S составляет 1, а значения «вправо» и «вниз» составляют 1, то в число краевых векторов движения, соответствующих центральному вектору (0, 0) движения, входят: краевой вектор (0, 1) движения, краевой вектор (0, -1) движения, краевой вектор (1, 0) движения, краевой вектор (-1, 0) движения и краевой вектор (1, 1) движения.
[164] На этапе a3 получают первое значение стоимости, соответствующее центральному вектору движения, и второе значение стоимости, соответствующее каждому краевому вектору движения, на основе первого значения пикселя первого опорного блока и второго значения пикселя второго опорного блока.
[165] Например, опорный субблок A1, соответствующий центральному вектору (0, 0) движения, получают путем копирования из первого опорного блока, при этом опорный субблок A1 представляет собой опорный субблок центрального вектора (0, 0) движения в первом опорном блоке. Размер опорного субблока A1 - это размер текущего блока, при этом опорный субблок A1 является наиболее близким к центру блоком W*H в первом опорном блоке.
[166] Опорный субблок B1, соответствующий центральному вектору (0, 0) движения, получают путем копирования из второго опорного блока, при этом опорный субблок B1 представляет собой опорный субблок центрального вектора (0, 0) движения во втором опорном блоке. Размер опорного субблока B1 - это размер текущего блока, при этом опорный субблок B1 является наиболее близким к центру блоком W*H во втором опорном блоке.
[167] Далее получают значение 1 стоимости, соответствующее центральному вектору (0, 0) движения, на основе первого значения пикселя опорного субблока A1 и второго значения пикселя опорного субблока B1; способ определения значения стоимости раскрыт в нижеследующих вариантах осуществления.
[168] Опорный субблок A2, (0, 1) движения получают путем копирования из первого опорного блока, при этом опорный субблок A2 представляет собой опорный субблок краевого вектора (0, 1) движения в первом опорном блоке. Размер опорного субблока A2 - это размер текущего блока, при этом опорный субблок A2 является наиболее близким к центру блоком W*H в первом опорном блоке.
[169] Опорный субблок B2, соответствующий вектору (0, -1) движения, симметричному краевому вектору (0, 1) движения, получают путем копирования из второго опорного блока, при этом опорный субблок B2 представляет собой опорный субблок симметричного вектора (0, -1) движения во втором опорном блоке. Размер опорного субблока B2, представляющего собой блок W*H во втором опорном блоке, это размер текущего блока, при.
[170] Далее получают значение стоимости 2, соответствующее краевому вектору (0, 1) движения, на основе первого значения пикселя опорного субблока A2 и второго значения пикселя опорного субблока B2, при этом способ определения значения стоимости раскрыт в нижеследующих вариантах осуществления.
[171] Согласно данному способу можно определить значение 2 стоимости, соответствующее краевому вектору (0, 1) движения, значение 3 стоимости, соответствующее краевому вектору (0, -1) движения, значение 4 стоимости, соответствующее краевому вектору (1, 0) движения, значение 5 стоимости, соответствующее краевому вектору (-1, 0) движения и значение 6 стоимости, соответствующее краевому вектору (1, 1) движения.
[172] На этапе a4: выбирают вектор движения из центрального вектора движения и краевого вектора движения в качестве оптимального вектора движения на основе первого значения стоимости и второго значения стоимости. Например, вектор движения с наименьшим значением стоимости может служить в качестве оптимального вектора движения. Например, если значение 2 стоимости, соответствующее краевому вектору (0, 1) движения, является минимальным, краевой вектор (0, 1) движения, соответствующий значению 2 стоимости, может служить в качестве оптимального вектора движения.
[173] На этапе a5: оценивают соответствие конечному условию; в случае несоответствия конечному условию, оптимальный вектор движения определяют в качестве центрального вектора движения, совершают возврат на этап a2 и его выполнение; в случае соответствия конечному условию, выполняют этап a6.
[174] В одном примере, при достижении порога числа итераций / диапазона поиска, имеет место соответствие конечному условию; если порог числа итераций / диапазона поиска не достигнут, имеет место несоответствие конечному условию. Например, если значение диапазона поиска (SR, англ. search range) составляет 2, т.е. значение порога составляет 2, разрешенное число итераций составляет два. Если число итераций / значение диапазона поиска достигнет 2, т.е. этапы a2 - a4 будут выполнены дважды, то имеет место соответствие конечному условию; в ином случае имеет место несоответствие конечному условию.
[175] В дополнительном примере, после выбора вектора движения из центрального вектора движения и краевых векторов движения в качестве оптимального вектора движения, если центральный вектор движения будет выбран в качестве оптимального вектора движения, то будет иметь место соответствие конечному условию.
[176] На этапе a6 определяют первое целопиксельное значение коррекции вектора движения (которое применяют для коррекции первого исходного вектора движения) и второе целопиксельное значение коррекции вектора движения (которое применяют для коррекции второго исходного вектора движения) на основе оптимального вектора движения.
[177] В одном примере первое целопиксельное значение коррекции вектора движения можно определять на основе оптимального вектора движения и первого исходного вектора движения, а второе целопиксельное значение коррекции вектора движения можно определять согласно первому целопиксельному значению коррекции вектора движения, причем второе целопиксельное значение коррекции вектора движения симметрично первому целопиксельному значению коррекции вектора движения.
[178] Например, если в процессе первой итерации оптимальный вектор движения - это краевой вектор (0, 1) движения, то вторую итерацию выполняют с краевым вектором (0, 1) движения в качестве центра, при этом в процессе второй итерации оптимальный вектор движения - это краевой вектор (0, 1) движения; если итеративный процесс на этом завершают, то первое целопиксельное значение коррекции вектора движения составляет (0, 2), то есть сумму краевого вектора (0, 1) движения и краевого вектора (0, 1) движения.
[179] С учетом вышесказанного, если первый исходный вектор движения имеет координаты (4, 4), то оптимальный вектор движения - это краевой вектор (0, 1) движения в процессе первой итерации, т.е. оптимальный вектор движения может соответствовать оптимальному вектору (4, 5) движения. При выполнении процесса второй итерации краевой вектор (0, 1) движения принимают в качестве центра, причем оптимальный вектор движения - это краевой вектор (0, 1) движения в процессе второй итерации, то есть оптимальный вектор движения может соответствовать оптимальному вектору (4, 6) движения.
[180] Таким образом, первое целопиксельное значение коррекции вектора движения определяют на основе оптимального вектора (4, 6) движения и первого исходного вектора движения (4, 4), при этом первое целопиксельное значение коррекции вектора движения представляет собой разность оптимального вектора (4, 6) движения и первого исходного вектора (4, 4) движения, т.е. первое целопиксельное значение коррекции вектора движения составляет (0, 2).
[181] Далее определяют второе целопиксельное значение коррекции вектора движения согласно первому целопиксельному значению коррекции вектора движения (0, 2), которое может составлять (0, -2), т.е. представлять собой значение, симметричное (0, 2).
[182] На этапе a7 определяют первое субпиксельное значение коррекции вектора движения (которое применяют для коррекции первого исходного вектора движения) и второе субпиксельное значение коррекции вектора движения (которое применяют для коррекции второго исходного вектора движения) на основе оптимального вектора движения.
[183] В одном примере первое субпиксельное значение коррекции вектора движения можно определить на основе значения стоимости, соответствующего оптимальному вектору движения, и значения стоимости, соответствующего краевому вектору движения, соответствующему оптимальному вектору движения, а затем определить второе субпиксельное значение коррекции вектора движения на основе первого субпиксельного значения коррекции вектора движения.
0
0
0
0
0
0
[184] Например, x=N*(E(-1,0) - E(1,0)) / (E(-1,0) + E(1,0) - 2* E(0,0)), y=N*(E(0,-1) - E(0,1)) / (E(0,-1) + E(0,1) -2* E(0,0)), и если пиксельная точность вектора движения составляет 1/2, 1/4, 1/8 и 1/16, то N =1, 2, 4 и 8 соответственно. Далее (x, y) назначают для deltaMv, SPMV = deltaMv/2N, и если пиксельная точность текущего вектора движения составляет 1/16, то SPMV составляет (x/16, y/16).
[185] В вышеприведенном уравнении SPMV - это первое субпиксельное значение коррекции вектора движения, а N связано с пиксельной точностью вектора движения, например, если пиксельная точность вектора движения составляет 1/2, то N составляет 1; если пиксельная точность вектора движения составляет 1/4, то N составляет 2; если пиксельная точность вектора движения составляет 1/8, то N составляет 4; если пиксельная точность вектора движения составляет 1/16, то N составляет 8.
[186] В вышеприведенном уравнении E(0,0) - значение стоимости оптимального вектора движения; E(-1,0) - это значение стоимости краевого вектора движения (-1,0) оптимального вектора (0,0) движения, если оптимальный вектор движения принят в качестве центра; E(1,0) - это значение стоимости краевого вектора (1,0) движения оптимального вектора (0,0) движения, если оптимальный вектор движения принят в качестве центра; E(0, -1) - это значение стоимости краевого вектора (0, -1) движения оптимального вектора (0,0) движения, если оптимальный вектор движения принят в качестве центра; E(0,1) - это значение стоимости краевого вектора (0,1) движения оптимального вектора (0,0) движения, если оптимальный вектор движения принят в качестве центра. Способ определения значения стоимости каждого вектора движения можно узнать из предыдущих вариантов осуществления, в связи с чем он не будет подробно раскрывать в настоящем параграфе.
[187] После определения первого субпиксельного значения коррекции вектора движения согласно раскрытому выше способу, можно определить второе субпиксельное значение коррекции вектора движения на основе первого субпиксельного значения коррекции вектора движения, причем второе субпиксельное значение коррекции вектора движения - это значение, симметричное первому субпиксельному значению коррекции вектора движения. Например, если первое субпиксельное значение коррекции вектора движения составляет (1, 0), то второе субпиксельное значение коррекции вектора движения составляет (-1, 0), т.е. значение, симметричное (1, 0).
[188] На этапе a8 корректируют первый исходный вектор движения согласно первому целопиксельному значению коррекции вектора движения и/или первому субпиксельному значению коррекции вектора движения для получения первого целевого вектора движения.
[189] Например, первый целевой вектор движения = первый исходный вектор движения + первое целопиксельное значение коррекции вектора движения + первое субпиксельное значение коррекции вектора движения. Разумеется, приведенный выше пример не является ограничивающим.
[190] На этапе a9 корректируют второй исходный вектор движения согласно второму целопиксельному значению коррекции вектора движения и/или второму субпиксельному значению коррекции вектора движения для получения второго целевого вектора движения.
[191] Например, второй целевой вектор движения = второй исходный вектор движения + второе целопиксельное значение коррекции вектора движения + второе субпиксельное значение коррекции вектора движения. Разумеется, приведенный выше пример не является ограничивающим.
[192] Вариант осуществления 12: на этапе 303 и этапе 403 для каждого субблока текущего блока корректируют первый исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения субблока; и корректируют второй исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения второго целевого вектора движения субблока.
[193] Процесс коррекции исходного вектора движения раскрыт в виде процедуры обработки одного субблока (например, каждого субблока размером dx*dy текущего блока, например, субблока размером 16*16 или меньшего блока). Первый исходный вектор движения обозначают Org_MV0, второй исходный вектор движения обозначают Org_MV1, первый целевой вектор движения, полученный после коррекции первого исходного вектора движения Org_MV0, обозначают Refined_MV0, а второй целевой вектор движения, полученный после коррекции второго исходного вектора движения Org_MV1, обозначают Refined_MV1.
[194] На этапе b1 выполняют итерации числом SR для получения оптимального целопиксельного смещения точки целопиксельного ВД, обозначаемого IntegerDeltaMV и представляющего собой первое целопиксельное значение коррекции вектора движения в раскрытых выше вариантах осуществления. Например, устанавливают начальное значение (0, 0) для IntegerDeltaMV, после чего выполняют обработку для каждой итерации следующим образом:
[195] На этапе b11 устанавливают значение (0, 0) для deltaMV. При выполнении первой итерации блок A1 значения предсказания (т.е. блок W*H в центре первого опорного блока) копируют на основе опорного пикселя первого исходного вектора движения в первом опорном блоке; блок B1 значения предсказания (т.е. блок W*H в центре второго опорного блока) копируют на основе опорного пикселя второго исходного вектора движения во втором опорном блоке. Получают исходное значение стоимости (исходное значение стоимости представляет собой САР (сумму абсолютных разностей, англ. sum of absolute differences (SAD)) на основе блока A1 значения предсказания и блока B1 значения предсказания) на основе блока A1 значения предсказания и блока B1 значения предсказания, при этом способ определения исходного значения стоимости раскрыт в нижеследующих вариантах осуществления. Если исходное значение стоимости меньше 4*dx*dy/2, где dx и dy - ширина и высота текущего субблока, последующий процесс поиска непосредственно пропускают, выполняют этап b2 и устанавливают значение «false» («ложно») для notZeroCost.
[196] На этапе b12 на Фиг.6 последовательно получают пять смещенных ВД (все они именуются «MVOffset») в последовательности {Mv(0,1), Mv(0,-1), Mv(1,0), Mv(-1,0), Mv(вправо, вниз)}, при этом вышеуказанная исходная точка принята в качестве центра, и выполняют процесс вычисления и сравнения значений стоимости указанных пяти смещенных ВД.
[197] Например, на основе определенного MVOffset (например, Mv(0, 1) и т.д.) в первом и втором опорных блоках получают два блока значения предсказания (например, блок W*H со смещением положения центра MVOffset в первом опорном блоке и блок W*H со смещением положения центра -MVOffset (противоположным MVOffset) во втором опорном блоке) на основе данного MVOffset и вычисляют, с понижающей дискретизацией, САР указанных двух блоков значения предсказания в качестве значения стоимости MVOffset.
[198] Далее MVOffset с минимальным значением стоимости резервируют, обновляют данное значение MVOffset до значения deltaMV и применяют в качестве новой точки смещения центра следующей итерации.
[199] Значение IntegerDeltaMV обновляют на основе deltaMV, причем обновленное IntegerDeltaMV = IntegerDeltaMV до обновления + deltaMV, т.е. прибавляют deltaMV на основе текущего IntegerDeltaMV.
[200] На этапе b13, после итерации, если оптимальный ВД все еще представляет собой исходный ВД (т.е. не MVOffset) или минимальное значение стоимости составляет 0, следующий процесс итеративного поиска не выполняют, выполняют этап b2 и устанавливают значение «false» для notZeroCost. В ином случае, если число итераций достигло SR, выполняют этап b2, а если число итераций не достигло SR, принимают оптимальный ВД в качестве центра и выполняют следующий процесс итеративного поиска, то есть совершают возврат на этап b11.
[201] После завершения процесса итеративного поиска, получают значение IntegerDeltaMV, а именно конечное значение IntegerDeltaMV, то есть первое целопиксельное значение коррекции вектора движения, далее обозначаемое как IntegerDeltaMV.
[202] На этапе b2 оптимальную точку целопиксельного ВД с этапа b1 принимают в качестве центра, далее получают оптимальный субпиксельный смещенный ВД, который обозначают как SPMV, при этом SPMV представляет собой первое субпиксельное значение коррекции вектора движения в раскрытых выше вариантах осуществления. Например, можно установить начальное значение (0, 0) для SPMV и выполнить последующую обработку следующим образом.
[203] На этапе b21 последующую обработку (а именно - получение SPMV) выполняют только в том случае, если notZeroCost не имеет значение «false», а deltaMV имеет значение (0, 0), в ином случае исходный вектор движения корректируют непосредственно с применением IntegerDeltaMV вместо применения IntegerDeltaMV и SPMV.
0
0
0
0
[204] На этапе b22 E(x, y) представлено как значение стоимости, соответствующее ВД смещения точки оптимального ВД (x, y), полученное на этапе b1 (значение стоимости, вычисленное на этапе b1). На основе E (x, y) пяти точек - центральной, верхней, нижней, левой и правой - может быть получено смещение (x, y) точки с наименьшим E(x, y) следующим образом: x = N*(E(-1,0) - E(1,0)) / (E(-1,0) + E(1,0) - 2* E(0,0)), y = N*(E(0,-1) - E(0,1)) / (E(0,-1) + E(0,1) - 2* E(0,0)).
0
0
0
0
[205] В одном примере, если пиксельная точность вектора движения составляет 1/2, 1/4, 1/8 и 1/16, то N =1, 2, 4 и 8 соответственно. Далее (x, y) назначают для deltaMv, SPMV = deltaMv/2N, и, если пиксельная точность текущего вектора движения составляет 1/16, то SPMV имеет значение (x/16, y/16).
[206] Если E(-1, 0) = E(0, 0), выполняют сдвиг на половину пикселя по горизонтали влево (deltaMv[0] = -N).
[207] Если E(1, 0) = E(0, 0), выполняют сдвиг на половину пикселя по горизонтали вправо (deltaMv[0] = N).
[208] Если E(0, -1) = E(0, 0), выполняют сдвиг на половину пикселя по вертикали вверх (deltaMv [1] = -N).
[209] Если E(0, 1) = E(0, 0), выполняют сдвиг на половину пикселя по вертикали вниз (deltaMv [1] = N).
[210] Вышеуказанная обработка позволяет получить значение SPMV, т.е. первое субпиксельное значение коррекции вектора движения.
[211] На этапе b3 получают оптимальный смещенный ВД на основе IntegrarteltaMV с целопиксельным смещением на этапе b1 и SPMV с субпиксельным смещением на этапе b2 и обозначают оптимальный смещенный ВД BestMVoffset. Также, BestMVoffset=IntegerDeltaMV+ SPMV.
[212] На основе BestMVoffset могут быть получены целевые векторы движения в двух направлениях: Refined_MV0= Org_MV0+BestMVoffset; Refined_MV1=Org_MV1-BestMVoffset.
[213] Следует отметить, что BestMVoffset=IntegerDeltaMV+SPMV, т.е. сумме первого целопиксельного значения коррекции вектора движения и первого субпиксельного значения коррекции вектора движения. Кроме того, -IntegerDeltaMV представляет собой значение, симметричное IntegerDeltaMV, т.е. второе целопиксельное значение коррекции вектора движения, а -SPMV - это значение, симметричное SPMV, т.е. второе субпиксельное значение коррекции вектора движения, таким образом, -BestMVoffset=(-IntegerDeltaMV)+(-SPMV), т.е. сумме второго целопиксельного значения коррекции вектора движения и второго субпиксельного значения коррекции вектора движения.
[214] Вариант осуществления 13: на этапе 303 и этапе 403 реализация коррекции первого и второго исходных векторов Org_MV0 и Org_MV1 движения до первого и второго целевых векторов Refined_MV0 и Refined_MV1 движения соответственно аналогична реализации в варианте осуществления 12, за исключением того, что:
[215] фразу «если исходное значение стоимости меньше 4*dx*dy/2, …, последующий процесс поиска непосредственно пропускают» на этапе b11 опускают, то есть даже если исходное значение стоимости меньше 4*dx*dy/2, то вместо того, чтобы «непосредственно пропустить последующий процесс поиска», последующий процесс поиска продолжают, то есть этап b12 должен быть выполнен.
[216] Вариант осуществления 14: на этапе 303 и этапе 403 реализация коррекции первого и второго исходных векторов Org_MV0 и Org_MV1 движения до первого и второго целевых векторов Refined_MV0 и Refined_MV1 движения соответственно аналогична реализации в варианте осуществления 12, за исключением того, что:
[217] фразу «если исходное значение стоимости меньше 4*dx*dy/2, последующий процесс поиска непосредственно пропускают» на этапе b11 опускают, то есть даже если исходное значение стоимости меньше 4*dx*dy/2, то вместо того, чтобы «непосредственно пропустить последующий процесс поиска», последующий процесс поиска продолжают, то есть этап b12 должен быть выполнен.
[218] фразу «если оптимальный ВД все еще представляет собой исходный ВД (т.е. не MVOffset) или минимальное значение стоимости составляет 0, следующий процесс итеративного поиска не выполняют» на этапе b13 опускают, то есть, даже если оптимальный ВД все еще представляет собой исходный ВД или минимальное значение стоимости составляет 0, следующий процесс итеративного поиска можно выполнить.
[219] Вариант осуществления 15: на этапе 303 и этапе 403 реализация коррекции первого и второго исходных векторов Org_MV0 и Org_MV1 движения до первого и второго целевых векторов Refined_MV0 и Refined_MV1 движения соответственно аналогична реализации в варианте осуществления 12, за исключением того, что:
[220] процесс корреляции «notZeroCost» опускают, то есть значение notZeroCost не устанавливают и не сохраняют на этапе b11 и этапе b13. На этапе b21 можно выполнить процесс вычисления субпиксельного смещения (т.е. этап b22), если deltaMV имеет значение (0, 0), а не только в том случае, если notZeroCost не имеет значение «false», а deltaMV имеет значение (0, 0).
[221] Вариант осуществления 16: на этапе 303 и этапе 403 реализация коррекции первого и второго исходных векторов Org_MV0 и Org_MV1 движения до первого и второго целевых векторов Refined_MV0 и Refined_MV1 движения соответственно аналогична реализации в варианте осуществления 12, за исключением того, что:
[222] фразу «последующую обработку выполняют только в том случае, если notZeroCost не имеет значение «false», а deltaMV имеет значение (0, 0), в ином случае исходный вектор движения корректируют непосредственно с применением IntegerDeltaMV» на этапе b21 видоизменяют на «последующую обработку выполняют только в том случае, если notZeroCost не имеет значение «false», при этом значения стоимости в четырех точках, расположенных соответственно сверху, снизу, слева и справа на расстоянии одного пикселя от текущего оптимального целочисленного пикселя, получают вычислением на этапе b1, в ином случае исходный вектор движения корректируют непосредственно с применением IntegerDeltaMV».
[223] В одном примере «последующая обработка» означает процесс вычисления субпиксельного смещения на этапе b22.
[224] В одном примере в процессе вычисления субпиксельного смещения на этапе b22 необходимо применять значения стоимости в четырех точках, расположенных соответственно сверху, снизу, слева и справа на расстоянии одного пикселя от текущего оптимального целочисленного пикселя, то есть вычисление «значений стоимости в четырех точках, расположенных соответственно сверху, снизу, слева и справа на расстоянии одного пикселя от текущего оптимального целочисленного пикселя» на этапе b1 является обязательным условием.
[225] Вариант осуществления 17: на этапе 303 и этапе 403 реализация коррекции первого и второго исходных векторов Org_MV0 и Org_MV1 движения до первого и второго целевых векторов Refined_MV0 и Refined_MV1 движения соответственно аналогична реализации в варианте осуществления 12, за исключением того, что:
[226] фразу «последующую обработку выполняют только в том случае, если notZeroCost не имеет значение «false», а deltaMV имеет значение (0, 0), в ином случае исходный вектор движения корректируют непосредственно с применением IntegerDeltaMV» на этапе b21 видоизменяют на «последующую обработку (т.е. процесс вычисления субпиксельного смещения) выполняют только в том случае, если значения стоимости в четырех точках, расположенных соответственно сверху, снизу, слева и справа на расстоянии одного пикселя от текущего оптимального целочисленного пикселя, получают вычислением на этапе b1, в ином случае исходный вектор движения корректируют непосредственно с применением IntegerDeltaMV».
[227] Вариант осуществления 18: на этапе 303 и этапе 403 реализация коррекции первого и второго исходных векторов Org_MV0 и Org_MV1 движения до первого и второго целевых векторов Refined_MV0 и Refined_MV1 движения соответственно аналогична реализации в варианте осуществления 12, за исключением того, что:
[228] фразу «последующую обработку выполняют только в том случае, если notZeroCost не имеет значение «false», а deltaMV имеет значение (0, 0), в ином случае исходный вектор движения корректируют непосредственно с применением IntegerDeltaMV» на этапе b21 видоизменяют на «последующую обработку (т.е. процесс вычисления субпиксельного смещения на этапе b22) выполняют, если значения стоимости в четырех точках, расположенных соответственно сверху, снизу, слева и справа на расстоянии одного пикселя от текущего оптимального целочисленного пикселя, получены на этапе b1, в ином случае выполняют этап b23».
[229] На этапе b23 в качестве текущей оптимальной целопиксельной точки MV_inter_org принимают ближайшую целопиксельную точку MV_inter_nearest, при этом значения стоимости в четырех точках, расположенных соответственно сверху, снизу, слева и справа на расстоянии одного пикселя от ближайшей целопиксельной точки, были получены на этапе b1. Далее выполняют процесс вычисления субпиксельного смещения на этапе b22 с центром в MV_inter_nearest, то есть получают SPMV с центром в MV_inter_nearest.
[230] Например, если значения стоимости в четырех точках, расположенных соответственно сверху, снизу, слева и справа на расстоянии одного пикселя от текущей оптимальной целопиксельной точки, не были получены в полном составе на этапе b1, одну целопиксельную точку MV_inter_nearest выбирают из области у границы оптимальной целопиксельной точки MV_inter_org, при этом значения стоимости в четырех точках, расположенных соответственно сверху, снизу, слева и справа от целопиксельной точки MV_inter_nearest получают на этапе b1.
[231] Далее целопиксельную точку MV_inter_nearest принимают в качестве текущей оптимальной целопиксельной точки и получают SPMV с центром в целопиксельной точке MV_inter_nearest, при этом конкретный процесс относится к этапу b22.
0
0
0
0
0
0
0
0
0
0
[232] В процессе получения SPMV с центром в целопиксельной точке MV_inter_nearest на этапе b22, вычисление xи y может быть ограничено диапазоном [-2N, 2N]. Если x/y больше 2N, x/y может быть присвоено значение 2N; если x/y меньше -2N, x/y может быть присвоено значение -2N. Если пиксельная точность вектора движения составляет 1/2, 1/4, 1/8 и 1/16, то N =1, 2, 4 и 8 соответственно.
[233] Вариант осуществления 19: в раскрытых выше вариантах осуществления необходимо определить краевые векторы движения, соответствующие центральному вектору движения, например, 5 краевых векторов движения. Например, центральный вектор (x, y) движения можно сдвигать на S в разных направлениях и последовательно получать краевой вектор (x, y+S) движения, краевой вектор (x, y-S) движения, краевой вектор (x+S, y) движения, краевой вектор (x-S, y) движения и краевой вектор (x+вправо, y+вниз) движения в разных направлениях. В качестве альтернативы, центральный вектор (x, y) движения можно сдвигать на S в разных направлениях и последовательно получать краевой вектор (x, y-S) движения, краевой вектор (x, y+S) движения, краевой вектор (x-S, y) движения, краевой вектор (x+S, y) движения и краевой вектор (x + вправо, y + вниз) движения в разных направлениях.
[234] Например, если (x, y) имеет значение (0, 0), а S составляет 1, то можно получить 5 краевых векторов движения в последовательности (0, 1), (0, -1), (1, 0), (-1, 0) и (вправо, вниз). В качестве альтернативы, можно получить 5 краевых векторов движения в последовательности (0, -1), (0, 1), (-1, 0), (1, 0) и (вправо, вниз).
[235] Вариант осуществления 20: в раскрытых выше вариантах осуществления используемое по умолчанию значение краевого вектора (x+вправо, y+вниз) движения составляет (x-S, y-S). Если значение стоимости краевого вектора (x+S, y) движения меньше значения краевого вектора (x-S, y) движения, то значение «вправо» составляет S (-S изменяют на S); если значение стоимости краевого вектора (x, y+S) движения меньше значения краевого вектора (x, y-S) движения, то значение «вниз» составляет S (-S изменяют на S). В качестве альтернативы, если значение стоимости краевого вектора (x+S, y) движения меньше или равно значению стоимости краевого вектора (x-S, y) движения, значение «вправо» составляет S (-S изменяют на S); если значение стоимости краевого вектора (x, y+S) движения меньше или равно значению стоимости краевого вектора (x, y-S) движения, значение «вниз» составляет S (-S изменяют на S).
[236] Например, 5 краевых векторов движения получают в последовательности (0, 1), (0, -1), (1, 0), (-1, 0), (вправо, вниз), при этом используемое по умолчанию значение (вправо, вниз) составляет (-1, -1). Если значение стоимости краевого вектора (1, 0) движения меньше значения стоимости краевого вектора (-1, 0) движения, значение «вправо» составляет 1; если значение стоимости краевого вектора (0, 1) движения меньше значения стоимости краевого вектора (0, -1) движения, значение «вниз» составляет 1. В качестве альтернативы, если значение стоимости краевого вектора (1, 0) движения меньше или равно значению стоимости краевого вектора (-1, 0) движения, значение «вправо» составляет 1; если значение стоимости краевого вектора (0, 1) движения меньше или равно значению стоимости краевого вектора (0, -1) движения, значение «вниз» составляет 1.
[237] Например, 5 краевых векторов движения получают в последовательности (0, -1), (0, 1), (-1, 0), (1, 0), (вправо, вниз), при этом используемое по умолчанию значение (вправо, вниз) составляет (-1, -1). Если значение стоимости краевого вектора (1, 0) движения меньше значения стоимости краевого вектора (-1, 0) движения, значение «вправо» составляет 1; если значение стоимости краевого вектора (0, 1) движения меньше значения стоимости краевого вектора (0, -1) движения, значение «вниз» составляет 1. В качестве альтернативы, если значение стоимости краевого вектора (1, 0) движения меньше или равно значению стоимости краевого вектора (-1, 0) движения, значение «вправо» составляет 1; если значение стоимости краевого вектора (0, 1) движения меньше или равно значению стоимости краевого вектора (0, -1) движения, значение «вниз» составляет 1.
[238] Вариант осуществления 21: на этапах 303 и 403, для каждого субблока текущего блока, корректируют первый исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения субблока; при этом корректируют второй исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения второго целевого вектора движения субблока.
[239] Процесс коррекции исходного вектора движения раскрыт в виде процедуры обработки одного субблока (например, каждого субблока размером dx*dy текущего блока, например, субблока размером 16*16 или меньшего блока).
[240] На этапе c1 первый исходный вектор движения или второй исходный вектор движения принимают в качестве центра, выбирают некоторые или все векторы движения из окружающих векторов движения и определяют выбранные векторы движения в качестве потенциальных векторов движения.
[241] Например, некоторые или все векторы движения можно выбрать из окружающих векторов движения в качестве потенциальных векторов движения, при этом первый исходный вектор движения принимают в качестве центра. Подробности раскрыты в нижеследующих вариантах осуществления.
[242] В нижеследующих вариантах осуществления первый исходный вектор движения принимают в качестве центрального вектора движения для удобства раскрытия.
[243] На этапе c2 получают третье значение стоимости, соответствующее первому исходному вектору движения, и четвертое значение стоимости, соответствующее каждому потенциальному вектору движения, согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока.
[244] Например, опорный субблок A1, соответствующий первому исходному вектору движения, получают путем копирования из первого опорного блока, при этом опорный субблок A1 представляет собой опорный субблок первого исходного вектора движения в первом опорном блоке, при этом размер опорного субблока A1 - это размер текущего блока. Опорный субблок B1, соответствующий второму исходному вектору движения, получают путем копирования из второго опорного блока, при этом опорный субблок B1 представляет собой опорный субблок второго исходного вектора движения во втором опорном блоке, при этом размер опорного субблока B1 - это размер текущего блока. Далее получают третье значение стоимости, соответствующее первому исходному вектору движения, согласно первому значению пикселя опорного субблока A1 и второму значению пикселя опорного субблока B1.
[245] Для каждого потенциального вектора движения получают опорный субблок A2, соответствующий потенциальному вектору движения, путем копирования из первого опорного блока, при этом опорный субблок A2 представляет собой опорный субблок потенциального вектора движения в первом опорном блоке, при этом размер опорного субблока A2 - это размер текущего блока. Получают опорный субблок B2, соответствующий вектору движения, симметричному потенциальному вектору движения, путем копирования из второго опорного блока, при этом размер опорного субблока B2 - это размер текущего блока. Получают четвертое значение стоимости, соответствующее потенциальному вектору движения, согласно первому значению пикселя опорного субблока A2 и второму значению пикселя опорного субблока B2.
[246] На этапе c3: выбирают вектор движения из первого исходного вектора движения и потенциальных векторов движения в качестве оптимального вектора движения на основе третьего значения стоимости и четвертого значения стоимости. Например, вектор движения с наименьшим значением стоимости (например, первый исходный вектор движения или любой из потенциальных векторов движения) применяют в качестве оптимального вектора движения.
[245] На этапе c4 определяют первое целопиксельное значение коррекции вектора движения (которое применяют для коррекции первого исходного вектора движения) и второе целопиксельное значение коррекции вектора движения (которое применяют для коррекции второго исходного вектора движения) на основе оптимального вектора движения. В одном примере первое целопиксельное значение коррекции вектора движения можно определять на основе оптимального вектора движения и первого исходного вектора движения, а второе целопиксельное значение коррекции вектора движения можно определять согласно первому целопиксельному значению коррекции вектора движения, причем второе целопиксельное значение коррекции вектора движения симметрично первому целопиксельному значению коррекции вектора движения.
[248] Например, если оптимальный вектор движения имеет координаты (4, 6), а первый исходный вектор движения имеет координаты (4, 4), то первое целопиксельное значение коррекции вектора движения определяют на основе оптимального вектора движения (4, 6) и первого исходного вектора движения (4, 4), при этом первое целопиксельное значение коррекции вектора движения представляет собой разность оптимального вектора (4, 6) движения и первого исходного вектора (4, 4) движения, т.е. первое целопиксельное значение коррекции вектора движения составляет (0, 2).
[249] Далее определяют второе целопиксельное значение коррекции вектора движения согласно первому целопиксельному значению коррекции вектора движения (0, 2), при этом второе целопиксельное значение коррекции вектора движения может составлять (0, -2), т.е. представлять собой значение, симметричное (0, 2).
[250] На этапе c5 определяют первое субпиксельное значение коррекции вектора движения (которое применяют для коррекции первого исходного вектора движения) и второе субпиксельное значение коррекции вектора движения (которое применяют для коррекции второго исходного вектора движения) на основе оптимального вектора движения.
[251] В одном примере первое субпиксельное значение коррекции вектора движения можно определить на основе значения стоимости, соответствующего оптимальному вектору движения, и значению стоимости, соответствующему краевому вектору движения, соответствующему оптимальному вектору движения, а затем можно определить второе субпиксельное значение коррекции вектора движения на основе первого субпиксельного значения коррекции вектора движения.
0
0
0
0
0
0
[252] Например, x=N*(E(-1,0) - E(1,0)) / (E(-1,0) + E(1,0) - 2* E(0,0)), y=N*(E(0,-1) - E(0,1)) / (E(0,-1) + E(0,1) - 2* E(0,0)), при этом если пиксельная точность вектора движения составляет 1/2, 1/4, 1/8 и 1/16, то N =1, 2, 4 и 8 соответственно. Далее (x, y) назначают для deltaMv, SPMV = deltaMv/2N, при этом если пиксельная точность текущего вектора движения составляет 1/16, то SPMV составляет (x/16, y/16).
[253] SPMV - это первое субпиксельное значение коррекции вектора движения. E(0,0) - значение стоимости оптимального вектора движения; E(-1,0) - значение стоимости краевого вектора (-1,0) движения оптимального вектора (0,0) движения, если оптимальный вектор движения принят в качестве центра; E(1,0) - значение стоимости краевого вектора (1,0) движения оптимального вектора (0,0) движения, если оптимальный вектор движения принят в качестве центра; E(0, -1) - значение стоимости краевого вектора (0, -1) движения оптимального вектора (0,0) движения, если оптимальный вектор движения принят в качестве центра; E(0,1) - значение стоимости краевого вектора (0,1) движения оптимального вектора (0,0) движения, если оптимальный вектор движения принят в качестве центра. Способ определения значения стоимости каждого вектора движения можно узнать из раскрытых выше вариантов осуществления.
[254] После определения первого субпиксельного значения коррекции вектора движения согласно раскрытому выше способу, можно определить второе субпиксельное значение коррекции вектора движения на основе первого субпиксельного значения коррекции вектора движения, причем второе субпиксельное значение коррекции вектора движения - это значение, симметричное первому субпиксельному значению коррекции вектора движения. Например, если первое субпиксельное значение коррекции вектора движения составляет (1, 0), то второе субпиксельное значение коррекции вектора движения составляет (-1, 0), т.е. представляет собой значение, симметричное (1, 0).
[255] На этапе c6 корректируют первый исходный вектор движения согласно первому целопиксельному значению коррекции вектора движения и/или первому субпиксельному значению коррекции вектора движения для получения первого целевого вектора движения.
[256] Например, первый целевой вектор движения = первый исходный вектор движения + первое целопиксельное значение коррекции вектора движения + первое субпиксельное значение коррекции вектора движения. Разумеется, приведенный выше пример не является ограничивающим.
[257] На этапе c7 корректируют второй исходный вектор движения согласно второму целопиксельному значению коррекции вектора движения и/или второму субпиксельному значению коррекции вектора движения для получения второго целевого вектора движения.
[258] Например, второй целевой вектор движения = второй исходный вектор движения + второе целопиксельное значение коррекции вектора движения + второе субпиксельное значение коррекции вектора движения. Разумеется, приведенный выше пример не является ограничивающим.
[259] Вариант осуществления 22: на этапе 303 и этапе 403 для каждого субблока текущего блока корректируют первый исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения субблока; и корректируют второй исходный вектор движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения второго целевого вектора движения субблока.
[260] Процесс коррекции исходного вектора движения раскрыт в виде процедуры обработки одного субблока (например, каждого субблока размером dx*dy текущего блока, например, субблока размером 16*16, или меньшего блока). Первый исходный вектор движения обозначают Org_MV0, второй исходный вектор движения обозначают Org_MV1, первый целевой вектор движения обозначают Refined_MV0, а второй целевой вектор движения обозначают Refined_MV1.
[261] На этапе d1 выбирают некоторые или все векторы движения из (2*SR+1)*(2*SR+1) точек вокруг первого исходного вектора движения, при этом первый исходный вектор движения принят в качестве центра. Например, если SR =2, то выбирают некоторые или все векторы движения из 25 точек вокруг первого исходного вектора движения в качестве потенциальных векторов движения. Далее определяют значение стоимости первого исходного вектора движения и определяют значение стоимости каждого потенциального вектора движения. Далее вектор движения с минимальным значением стоимости применяют в качестве оптимального вектора движения.
[262] В отличие от этапа b1 раскрытого выше варианта осуществления, на этапе d1 все подлежащие обработке потенциальные векторы движения могут быть выбраны одновременно без выполнения итеративного процесса вместо того, чтобы выбрать некоторые векторы движения в ходе первой итерации и выбрать другие векторы движения в ходе второй итерации итеративного процесса. Благодаря этому, все подлежащие обработке потенциальные векторы движения выбирают одновременно, чтобы потенциальные векторы движения можно было обработать параллельно для получения значения стоимости каждого потенциального вектора движения, что позволяет снизить вычислительную сложность и улучшить показатели кодирования.
[263] На этапе d2 определяют значение IntegerDeltaMV на основе оптимального вектора движения, причем конечное значение IntegerDeltaMV представляет собой первое целопиксельное значение коррекции вектора движения; способ определения не будет повторно раскрываться в настоящем параграфе.
[264] На этапе d3: оптимальный вектор движения принимают в качестве центра, получают оптимальный субпиксельный смещенный ВД, который обозначают SPMV, при этом SPMV - это первое субпиксельное значение коррекции вектора движения.
[265] С процессом реализации этапе d3 можно ознакомиться выше в описании этапа b2, поэтому он не будет раскрываться повторно в настоящем параграфе.
[266] На этапе d4 получают BestMVoffset на основе IntegerDeltaMV и SPMV. Например, BestMVoffset= IntegerDeltaMV+SPMV.
[267] Целевой вектор движения получают на основе BestMVoffset: Refined_MV0=Org_MV0+BestMVoffset; Refined_MV1=Org_MV1-BestMVoffset.
[268] Вариант осуществления 23: на этапе 303 и этапе 403 реализация коррекции первого и второго исходных векторов Org_MV0 и Org_MV1 движения до первого и второго целевых векторов Refined_MV0 и Refined_MV1 движения соответственно аналогична реализации в вариантах осуществления 21, 22.
[269] В данном варианте осуществления все векторы движения выбирают из (2*SR+1)*(2*SR+1) точек вокруг исходного вектора движения, при этом исходный вектор движения принят в качестве центра. Например, если SR =2, то все векторы движения выбирают из 25 точек вокруг исходного вектора движения, определяют значения стоимости этих векторов и определяют значение стоимости каждого вектора движения. Далее вектор движения с минимальным значением стоимости применяют в качестве оптимального вектора движения.
[270] Вариант осуществления 24: на этапе 303 и этапе 403 реализация коррекции первого и второго исходных векторов Org_MV0 и Org_MV1 движения до первого и второго целевых векторов Refined_MV0 и Refined_MV1 движения соответственно аналогична реализации в вариантах осуществления 21, 22. В данном варианте осуществления все подлежащие обработке потенциальные векторы движения выбирают одновременно, чтобы потенциальные векторы движения можно было обработать параллельно для получения значения стоимости каждого потенциального вектора движения, что позволяет снизить вычислительную сложность и улучшить показатели кодирования.
[271] В данном варианте осуществления некоторые из векторов движения со смещением не больше SR выбирают из (2*SR+1)*(2*SR+1) точек вокруг исходного вектора движения, при этом исходный вектор движения принят в качестве центра. Например, N (N не меньше 1 и не больше (2*SR+1)*(2*SR+1)) потенциальных точек выбирают из (2*SR+1)*(2*SR+1) точек, включающих исходный вектор движения. Определяют значения стоимости векторов движения, соответствующие указанным N точкам. Значения стоимости N точек просматривают в определенной последовательности и выбирают вектор движения с минимальным значением стоимости в качестве оптимального вектора движения. Если значения стоимости равны, предпочтительно выбирают потенциальные точки самого высокого порядка.
[272] В одном примере, если SR =2, число потенциальных точек может составлять 25, при этом последовательность потенциальных точек может быть слева направо и сверху вниз. На Фиг.7A последовательность потенциальных точек может быть: { Mv(-2, -2), Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(2, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-2, 2), Mv(-1, 2), Mv(0, 2), Mv(1, 2), Mv(2, 2) }.
[273] Определяют значения стоимости, соответствующие векторам движения 25 точек, выполняют просмотр в вышеуказанной последовательности, получают вектор движения с минимальным значением стоимости в виде оптимального смещенного ВД, с помощью которого можно определять целопиксельное значение коррекции вектора движения и субпиксельное значение коррекции вектора движения, при этом способы определения можно узнать из раскрытых выше вариантов осуществления.
[274] В другом примере, если SR =2, то число потенциальных точек может составлять 21, при этом последовательность потенциальных точек может быть слева направо и сверху вниз. На Фиг. 7B последовательность потенциальных точек может быть: {Mv(-1,-2), Mv(0,-2), Mv(1,-2), Mv(-2,-1), Mv(-1,-1), Mv(0,-1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-1, 2), Mv(0, 2), Mv(1, 2)}. Определяют значения стоимости, соответствующие векторам движения 21 точки, выполняют просмотр в вышеуказанной последовательности, получают вектор движения с минимальным значением стоимости в виде оптимального смещенного ВД, с помощью которого можно определять целопиксельное значение коррекции вектора движения и субпиксельное значение коррекции вектора движения, при этом способы определения можно узнать из раскрытых выше вариантов осуществления.
[275] В другом примере, если SR = 2, число потенциальных точек может составлять 25, при этом последовательность этих потенциальных точек представляет собой последовательность от области вблизи центра к области вдали от него, при этом вектор (0, 0) движения принят в качестве центра. На Фиг.7C последовательность потенциальных точек может быть: {Mv(0, 0) , Mv(-1, 0), Mv(0,-1), Mv(1, 0), Mv(0, 1), Mv(-1, 1), Mv(-1,-1), Mv(1,-1), Mv(1, 1), Mv(0, 2), Mv(-2, 0), Mv(0,-2), Mv(2, 0), Mv(1, 2), Mv(-1, 2), Mv(-2, 1), Mv(-2,-1), Mv(-1,-2), Mv(1,-2), Mv(2,-1), Mv(2, 1), Mv(-2, 2), Mv(-2,-2), Mv(2,-2), Mv(2, 2)}. Определяют значения стоимости, соответствующие векторам движения 25 точек, выполняют просмотр в вышеуказанной последовательности, получают вектор движения с минимальным значением стоимости в виде оптимального смещенного ВД, с помощью которого можно определять целопиксельное значение коррекции вектора движения и субпиксельное значение коррекции вектора движения, при этом способы определения можно узнать из раскрытых выше вариантов осуществления.
[276] В другом примере, если SR =2, число потенциальных точек может составлять 21, при этом последовательность этих потенциальных точек представляет собой последовательность от области вблизи центра к области вдали от него, при этом вектор (0, 0) движения принят в качестве центра. На Фиг.7D последовательность потенциальных точек представляет собой: { Mv(0,0), Mv(-1,0), Mv(0, -1), Mv(1,0), Mv(0,1), Mv(-1,1), Mv(-1, -1), Mv(1, -1), Mv(1,1), Mv(0,2), Mv(-2,0), Mv(0, -2), Mv(2,0), Mv(1, 2), Mv(-1,2), Mv(-2,1), Mv(-2, -1), Mv(-1, -2), Mv(1, -2), Mv(2, -1), Mv(2, 1) }.
[277] Определяют значения стоимости, соответствующие векторам движения 21 точки, выполняют просмотр в вышеуказанной последовательности, получают вектор движения с минимальным значением стоимости в виде оптимального смещенного ВД, с помощью которого можно определять целопиксельное значение коррекции вектора движения и субпиксельное значение коррекции вектора движения, при этом способы определения можно узнать из раскрытых выше вариантов осуществления.
[278] В другом примере, если SR =2, число потенциальных точек может составлять 13, при этом последовательность этих потенциальных точек представляет собой последовательность от области вблизи центра к области вдали от него, при этом вектор (0, 0) движения принят в качестве центра. На Фиг.7E последовательность потенциальных точек представляет собой: {Mv(0,0), Mv(-1,0), Mv(0,-1), Mv(1,0), Mv(0,1), Mv(-1,1), Mv(-1,-1), Mv(1,-1), Mv(1, 1), Mv(0, 2), Mv(-2, 0), Mv(0,-2), Mv(2, 0)}. Определяют значения стоимости, соответствующие векторам движения 13 точек, выполняют просмотр в вышеуказанной последовательности, получают вектор движения с минимальным значением стоимости в виде оптимального смещенного ВД, с помощью которого можно определять целопиксельное значение коррекции вектора движения и субпиксельное значение коррекции вектора движения, при этом способы определения можно узнать из раскрытых выше вариантов осуществления.
[279] Вариант осуществления 25: на этапе 303 и этапе 403 реализация коррекции первого и второго исходных векторов Org_MV0 и Org_MV1 движения до первого и второго целевых векторов Refined_MV0 и Refined_MV1 движения соответственно аналогична реализации в вариантах осуществления 21, 22. В данном варианте осуществления все подлежащие обработке потенциальные векторы движения выбирают одновременно, чтобы потенциальные векторы движения можно было обработать параллельно для получения значения стоимости каждого потенциального вектора движения, что позволяет снизить вычислительную сложность и улучшить показатели кодирования.
[280] В данном варианте осуществления некоторые из векторов движения со смещением не больше SR выбирают из (2*SR+1)*(2*SR+1) точек вокруг исходного вектора движения, при этом исходный вектор движения принят в качестве центра. Например, N (N не меньше 1 и не больше (2*SR+1)*(2*SR+1)) потенциальных точек выбирают из (2*SR+1)*(2*SR+1) точек, включающих исходный вектор движения. Определяют значения стоимости векторов движения, соответствующие указанным N точкам. Значения стоимости N точек просматривают в определенной последовательности и выбирают вектор движения с минимальным значением стоимости в качестве оптимального вектора движения. Если значения стоимости равны, предпочтительно выбирают потенциальные точки самого высокого порядка.
[281] Вариант осуществления 25 отличен от варианта осуществления 24 в том, что все положения потенциальных точек варианте осуществления 24 являются фиксированными, т.е. независимыми от исходного вектора движения, тогда как положения потенциальных точек в варианте осуществления 25 связаны с исходным вектором движения, несколько частных примеров чего описаны ниже.
[282] В одном примере, если SR =2, то число потенциальных точек может составлять 13, при этом последовательность этих потенциальных точек представляет собой последовательность от области вблизи центра к области вдали от него, при этом вектор (0, 0) движения принят в качестве центра. Кроме того, последовательность потенциальных точек первого слоя от центра не зависит от размера исходного вектора движения, а последовательность потенциальных точек второго слоя от центра зависит от размера исходного вектора движения. Последовательность потенциальных точек представляет собой: {Mv(0,0), Mv(-1,0), Mv(0,-1), Mv(1,0), Mv(0,1), Mv(-1,1), Mv(-1,-1), Mv(1,-1), Mv(1,1), Mv(sign_H*2,0), Mv(sign_H*2,sign_V*1), Mv(sign_H*1, sign_V *2), Mv(sign_H*1, sign_V *2)}. Первый исходный вектор движения обозначают MV0, горизонтальную составляющую - MV0_Hor, а вертикальную составляющую - MV0_Ver. Если MV0_Hor не меньше 0, то sign_H = 1; в ином случае sign_H = -1; если MV0_Ver не меньше 0, то sign_V = 1; в ином случае sign_V = -1.
[283] Определяют значения стоимости, соответствующие векторам движения 13 точек, выполняют просмотр в вышеуказанной последовательности, получают вектор движения с минимальным значением стоимости в виде оптимального смещенного ВД, с помощью которого можно определять целопиксельное значение коррекции вектора движения и субпиксельное значение коррекции вектора движения, при этом способы определения можно узнать из раскрытых выше вариантов осуществления.
[284] В другом примере, если SR =2, то число потенциальных точек может составлять 13, при этом последовательность этих потенциальных точек представляет собой последовательность от области вблизи центра к области вдали от него, при этом вектор (0, 0) движения принят в качестве центра. Кроме того, последовательность потенциальных точек первого слоя от центра не зависит от размера исходного вектора движения, а последовательность потенциальных точек второго слоя от центра зависит от размера исходного вектора движения. Последовательность потенциальных точек представляет собой: {Mv(0,0), Mv(-1,0), Mv(0,-1), Mv(1,0), Mv(0,1), Mv(-1,1), Mv(-1,-1), Mv(1,-1), Mv(1,1), Mv(sign_H*2,0), Mv(sign_H*2,sign_V*1), Mv(sign_H*1, sign_V *2), Mv(sign_H*1, sign_V *2)}. Первый исходный вектор движения обозначают MV0, горизонтальную составляющую - MV0_Hor, а вертикальную составляющую - MV0_Ver. Если MV0_Hor больше 0, то sign_H = 1; в ином случае sign_H = -1; если MV0_Ver больше 0, то sign_V = 1; в ином случае sign_V = -1.
[285] Определяют значения стоимости, соответствующие векторам движения 13 точек, выполняют просмотр в вышеуказанной последовательности, получают вектор движения с минимальным значением стоимости в виде оптимального смещенного ВД, с помощью которого можно определять целопиксельное значение коррекции вектора движения и субпиксельное значение коррекции вектора движения, при этом способы определения можно узнать из раскрытых выше вариантов осуществления.
[286] Вариант осуществления 26: в раскрытых выше вариантах осуществления первое значение стоимости, соответствующее центральному вектору движения, и второе значение стоимости, соответствующее краевому вектору движения, получают на основе первого значения пикселя первого опорного блока и второго значения пикселя второго опорного блока. Третье значение стоимости, соответствующее первому исходному вектору движения, и четвертое значение стоимости, соответствующее потенциальным векторам движения, получают на основе первого значения пикселя первого опорного блока и второго значения пикселя второго опорного блока.
[287] В одном примере первое значение стоимости, соответствующее центральному вектору движения, второе значение стоимости, соответствующее краевому вектору движения, третье значение стоимости, соответствующее первому исходному вектору движения, и четвертое значение стоимости, соответствующее потенциальному вектору движения, можно получать на основе первого значения пикселя без понижающей дискретизации и второго значения пикселя без понижающей дискретизации.
[288] В другом примере выполняют операцию понижающей дискретизации в отношении первого и второго значений пикселей; далее на основе первого и второго значений пикселей после понижающей дискретизации получают первое значение стоимости, соответствующее центральному вектору движения, второе значение стоимости, соответствующее краевому вектору движения, третье значение стоимости, соответствующее первому исходному вектору движения, и четвертое значение стоимости, соответствующий потенциальному вектору движения.
[289] В другом примере выполняют понижающую дискретизацию и операцию сдвига в отношении первого и второго значений пикселей, после чего на основе первого и второго значений пикселей после сдвига и понижающей дискретизации получают первое значение стоимости, соответствующее центральному вектору движения, второе значение стоимости, соответствующее краевому вектору движения, третье значение стоимости, соответствующее первому исходному вектору движения, и четвертое значение стоимости, соответствующее потенциальному вектору движения.
[290] Способ, включающий в себя определение значения стоимости, аналогичен для разных ситуаций. Например, для получения значения стоимости, соответствующего центральному вектору движения, опорный субблок A1, соответствующий центральному вектору движения, можно получать путем копирования из первого опорного блока, a опорный субблок B1, соответствующий вектору движения, симметричному центральному вектору движения, можно получать путем копирования из второго опорного блока, при этом значение стоимости, соответствующее центральному вектору движения, можно получать согласно первому значению пикселя опорного субблока A1 и второму значению пикселя опорного субблока B1. Для получения значения стоимости, соответствующего краевому вектору движения, опорный субблок A2, соответствующий краевому вектору движения, можно получать путем копирования из первого опорного блока, a опорный субблок B2, соответствующий вектору движения, симметричному краевому вектору движения, можно получать путем копирования из второго опорного блока, при этом значение стоимости, соответствующее краевому вектору движения, можно получать согласно первому значению пикселя опорного субблока A2 и второму значению пикселя опорного субблока B2, и т.п.
[291] Таким образом, для получения значения стоимости, соответствующего вектору движения, опорный субблок, соответствующий вектору движения, получают на основе первого опорного блока, опорный субблок, соответствующий вектору движения, симметричному указанному вектору движения, получают на основе второго опорного блока, после чего получают значение стоимости, соответствующее вектору движения, по значениям пикселей указанных двух опорных субблоков.
[292] Вариант осуществления 27: на основе варианта осуществления 26, получают значение стоимости, соответствующее вектору движения, на основе первого значения пикселя без понижающей дискретизации (т.е. значения пикселя без понижающей дискретизации для опорного субблока в первом опорном блоке) и второго значения пикселя без понижающей дискретизации (т.е. значения пикселя без понижающей дискретизации для опорного субблока во втором опорном блоке).
0
1
0
1
0
1
[293] В одном примере, предположим, что опорный субблок в первом опорном блоке – это pred,а опорный субблок во втором опорном блоке - это pred, значение стоимости определяют на основе САР всех значений пикселей опорных субблоков pred, pred, и нет необходимости выполнять понижающую дискретизацию по вертикали в отношении пикселей опорных субблоков pred, pred.
0
1
[294] На основе всех значений пикселей опорных субблоков pred, pred, формула вычисления значения стоимости представляет собой:
0
0
1
1
[295] В вышеприведенном уравнении «cost» - значение стоимости, W - значение ширины опорного субблока, H - значение высоты опорного субблока, pred(i,j) - значение пикселя вертикального ряда i и горизонтального ряда j опорного субблока pred, pred(i,j) - значение пикселя вертикального ряда i и горизонтального ряда j опорного субблока pred, а abs(x) представляет абсолютное значение x.
[296] Вариант осуществления 28: на основе варианта осуществления 26, можно выполнить операцию понижающей дискретизации в отношении первого и второго значений пикселей; значение стоимости, соответствующее вектору движения, получают на основе первого значения пикселя после понижающей дискретизации (т.е. значения пикселя после понижающей дискретизации для опорного субблока в первом опорном блоке) и второго значения пикселя после понижающей дискретизации (т.е. значения пикселя после понижающей дискретизации для опорного субблока во втором опорном блоке).
0 ,
1
0
1
0
1
[297] В одном примере предположим, что опорный субблок в первом опорном блоке – это predа опорный субблок во втором опорном блоке - это pred, значение стоимости определяют на основе САР всех значений пикселей опорных субблоков pred, pred. Если значение стоимости определяют на основе САР всех значений пикселей, можно выполнить операцию понижающей дискретизации по вертикали в отношении значений пикселей опорных субблоков pred, pred в N раз (N - целое число больше 0 и может составлять 2).
0
1
[298] На основе всех значений пикселей опорных субблоков pred, pred, формула вычисления значения стоимости представляет собой:
0
0
1
1
[299] В вышеприведенном уравнении «cost» - значение стоимости, W - значение ширины опорного субблока, H - значение высоты опорного субблока; N представляет параметр понижающей дискретизации и представляет собой целое число больше 0, могущее составлять 2; pred(1+N(i-1), j) - значение пикселя вертикального ряда 1+N(i-1) и горизонтального ряда j опорного субблока pred, pred(1+N(i-1), j) - значение пикселя вертикального ряда 1+N(i-1) и горизонтального ряда j опорного субблока pred, а abs(x) представляет абсолютное значение x.
[300] Вариант осуществления 29: на основе варианта осуществления 26 выполняют операцию понижающей дискретизации в отношении первого и второго значений пикселей, далее на основе первого и второго значений пикселей (значения пикселя после сдвига и понижающей дискретизации для опорного субблока в первом опорном блоке и значения пикселя после сдвига и понижающей дискретизации для опорного субблока во втором опорном блоке) после сдвига и понижающей дискретизации получают значения стоимости, соответствующие векторам движения.
0
1
0
1
0
1
[301] В одном примере предположим, что опорный субблок в первом опорном блоке - это pred, опорный субблок во втором опорном блоке - это pred, при этом и pred, и predсохранены в форме D бит, то есть каждое значение пикселя в predсохранено в D бит и каждое значение пикселя в predсохранено в D бит.
0
1
0
1
0
1
[302] Если D не больше 8, то значение стоимости определяют на основе САР всех значений пикселей опорных субблоков pred, pred. Если значение стоимости определяют на основе САР всех значений пикселей, можно выполнить операцию понижающей дискретизации по вертикали в отношении значений пикселей опорных субблоков pred, pred в N раз (N – целое число больше 0 и может составлять 2). На основе всех значений пикселей опорных субблоков pred, pred, уравнение вычисления значения стоимости имеет вид:
0
0
1
1
[303] В вышеприведенном уравнении «cost» - значение стоимости, W - значение ширины опорного субблока, H - значение высоты опорного субблока; N представляет параметр понижающей дискретизации и представляет собой целое число больше 0, могущее составлять 2; pred(1+N(i-1), j) - значение пикселя вертикального ряда 1+N(i-1) и горизонтального ряда j опорного субблока pred, pred(1+N(i-1), j) - значение пикселя вертикального ряда 1+N(i-1) и горизонтального ряда j опорного субблока pred, а abs(x) представляет абсолютное значение x. Из вышесказанного можно понять, что вычисляют только сумму абсолютных значений разности в горизонтальному ряду 1, N +1, 2N +1, … .
0
1
0
1
0_8bit(i, j)
1_8bit(i, j)
[304] Если D больше 8, все значения пикселей опорных субблоков pred, predсначала сдвигают на 8 бит для получения 8-битового predи 8-битового pred, обозначенных pred и pred.  Целью является уменьшение стоимости хранения данных вычисления САР, а хранение 8 бит позволяет повысить степень параллельности обработки данных.
0
1
[305] Далее можно выполнить операцию понижающей дискретизации по вертикали в отношении значений пикселей 8-битового predи 8-битового predв N раз (N - целое число больше 0 и может составлять 2), что позволяет вычислить значение стоимости следующим образом:
[306] Значения выражений в вышеприведенном уравнении приведены в раскрытых выше вариантах осуществления и не будут повторно приводиться в настоящем параграфе.
[307] Вариант осуществления 30: на этапе 304 и этапе 404 для каждого субблока текущего блока выполняют компенсацию движения в отношении субблока на основе первого целевого вектора движения субблока и второго целевого вектора движения субблока. В частности, определяют третий опорный блок, соответствующий субблоку, на основе первого целевого вектора движения субблока, и определяют четвертый опорный блок, соответствующий субблоку, на основе второго целевого вектора движения субблока. Третье значение пикселя третьего опорного блока и четвертое значение пикселя четвертого опорного блока взвешивают для получения значения предсказания субблока.
[308] Например, опорные блоки (т.е. третий и четвертый опорные блоки, включающие в себя трехкомпонентные значения предсказания, при этом необходима интерполяция, так как целевой вектор движения может быть субпиксельным) в двух направлениях получают путем интерполяции (например, с помощью 8-отводного интерполяционного фильтра) на основе двух целевых векторов движения субблока. Третье значение пикселя третьего опорного блока и четвертое значение пикселя четвертого опорного блока взвешивают для получения конечного значения предсказания (три компонента).
[309] В одном примере пятый опорный блок, соответствующий субблоку, можно определить из первого опорного кадра на основе первого целевого вектора движения субблока, а третий опорный блок можно получать путем интерполяции значений пикселей в пятом опорном блоке. Шестой опорный блок, соответствующий субблоку, можно определить из второго опорного кадра на основе второго целевого вектора движения субблока, а четвертый опорный блок можно получать путем интерполяции значений пикселей в шестом опорном блоке.
[310] Например, предположим, что размер текущего блока составляет W*H, пятый опорный блок размером A*B можно определить из первого опорного кадра на основе первого целевого вектора движения, размер A*B пятого опорного блока зависит от способа интерполяции, причем, без каких-либо ограничений, A больше W и B больше H. Третий опорный блок размером W*H можно получить путем интерполяции значений пикселей в пятом опорном блоке, причем способ интерполяции в данном случае не ограничен. Шестой опорный блок размером A*B можно определить из второго опорного кадра на основе второго целевого вектора движения, при этом размер A*B шестого опорного блока зависит от способа интерполяции, причем A больше W и B больше H. Четвертый опорный блок размером W*H можно получить путем интерполяции значений пикселей в шестом опорном блоке, причем способ интерполяции в данном случае не ограничен.
[311] В другом примере седьмой опорный блок, соответствующий субблоку, определяют из первого опорного кадра на основе первого целевого вектора движения субблока, восьмой опорный блок строят на основе значений пикселей в седьмом опорном блоке и интерполируют значения пикселей в восьмом опорном блоке для получения третьего опорного блока. Девятый опорный блок, соответствующий субблоку, определяют из второго опорного кадра на основе второго целевого вектора движения субблока, десятый опорный блок строят на основе значений пикселей в девятом опорном блоке и интерполируют значения пикселей в десятом опорном блоке для получения четвертого опорного блока.
[312] Например, предположим, что размер текущего блока составляет W*H, при этом седьмой опорный блок размером W*H можно определить из первого опорного кадра на основе первого целевого вектора движения. Восьмой опорный блок размером A*B строят на основе значения пикселей в седьмом опорном блоке, при этом способ построения не ограничен. Размер A*B восьмого опорного блока зависит от способа интерполяции, причем, без каких-либо ограничений, A больше W и B больше H. Значения пикселей в восьмом опорном блоке интерполируют для получения третьего опорного блока размером W*H, при этом способ интерполяции не ограничен.
[313] Например, предположим, что размер текущего блока составляет W*H, при этом девятый опорный блок размером W*H можно определить из второго опорного кадра на основе второго целевого вектора движения. Десятый опорный блок размером A*B строят на основе значения пикселей в девятом опорном блоке, при этом способ построения не ограничен. Размер A*B десятого опорного блока зависит от способа интерполяции, причем, без каких-либо ограничений, A больше W и B больше H. Значения пикселей в десятом опорном блоке интерполируют для получения четвертого опорного блока размером W*H, при этом способ интерполяции не ограничен.
[314] Вариант осуществления 31: после получения целевого вектора движения, на основе целевого вектора движения каждого субблока получают значения предсказания в двух направлениях (т.е. три компонента Y, U, V, т.е. значение предсказания третьего опорного блока и значение предсказания четвертого опорного блока) с помощью 8-отводного интерполяционного фильтра и взвешивают их для получения конечных значений предсказания. На Фиг. 5 значения пикселей черной области и белой области получают из опорного кадра, а значения пикселей серой области необязательно получают из опорного кадра, при этом их можно получить путем копирования значений примыкающих пикселей.
[315] В одном примере, сначала W+FS-1 значений пикселей в первом горизонтальном ряду белой зоны можно скопировать в значения пикселей в первых SR горизонтальных рядах серой области. W + FS-1 значений пикселей в последнем горизонтальном ряду белой зоны копируют в значения пикселей в последних SR горизонтальных рядах серой области. Далее H+FS-1 значений пикселей в первом вертикальном ряду белой зоны, а также SR значений пикселей серой области, полученных на верхней стороне, и SR значений пикселей серой области, полученных на нижней стороне, можно скопировать в значения пикселей в первых SR вертикальных рядах серой области. H+FS-1 значений пикселей в последнем вертикальном ряду белой зоны и SR значения пикселей серой области, полученных на верхней стороне, и SR значений пикселей серой области, полученных на нижней стороне, можно скопировать в значения пикселей в последних SR вертикальных рядах серой области.
[316] В другом примере сначала можно скопировать H+FS-1 значений пикселей в первом вертикальном ряду белой зоны в значения пикселей в первых SR вертикальных рядах серой области. H+FS-1 значений пикселей в последнем вертикальном ряду белой зоны копируют в значения пикселей в последних SR вертикальных рядах серой области. Далее W+FS-1 значений пикселей в первом горизонтальном ряду белой зоны, SR значений пикселей серой области, полученных на левой стороне, и SR значений пикселей серой области, полученных на правой стороне, можно скопировать в значения пикселей в первых SR горизонтальных рядах серой области. W+FS-1 значений пикселей в последнем горизонтальном ряду белой зоны, SR значений пикселей серой области, полученных на левой стороне, и SR значения пикселей серой области, полученных на правой стороне, можно скопировать в значения пикселей в последних SR горизонтальных рядах серой области.
[317] Вариант осуществления 32: после получения целевого вектора движения, на основе целевого вектора движения каждого субблока получают значения предсказания в двух направлениях (т.е. три компонента Y, U, V, т.е. значение предсказания третьего опорного блока и значение предсказания четвертого опорного блока) с помощью 8-отводного интерполяционного фильтра и взвешивают их для получения конечных значений предсказания. На Фиг. 5 значения пикселей черной области и белой области получают из опорного кадра, а значения пикселей серой области получают путем копирования непосредственно из соответствующей зоны опорного кадра, а не путем копирования значений примыкающих пикселей. Данный способ прост и обеспечивает более высокие показатели, однако при этом возрастает количество данных доступа к опорному кадру.
[318] Вариант осуществления 33: после получения целевого вектора движения, на основе целевого вектора движения каждого субблока получают значения предсказания в двух направлениях (т.е. три компонента Y, U, V, т.е. предсказанное значение третьего опорного блока и предсказанное значение четвертого опорного блока) с помощью билинейного интерполяционного фильтра (а не 8-отводного интерполяционного фильтра) и взвешивают их для получения конечных значений предсказания. На Фиг.5 значения пикселей черной области и белой области получают из опорного кадра. Так как число отводов относительно мало, нет необходимости в значениях пикселей серой области.
[319] Вариант осуществления 34: в вариантах осуществления с 30 по 33, после получения значений предсказания в двух направлениях, получают конечное значение предсказания в виде среднего арифметического взвешенного значения (т.е. значения предсказания в двух направлениях имеют одинаковый вес). В качестве альтернативы, после получения значений предсказания в двух направлениях, конечное предсказанное значение получают в виде средневзвешенного значения, при этом веса указанных двух значений предсказания могут быть разными. Например, соотношение весов двух значений предсказания может составлять 1:2, 1:3, 2:1 и т.д.
[320] Для стороны кодирования, таблица весов может включать в себя соотношение весов: 1:2, 1:3, 2:1 и т.д., при этом сторона кодирования может определять значение стоимости каждого соотношения весов и определять соотношение весов с минимальным значением стоимости, благодаря чему сторона кодирования может получать конечное значение предсказания в виде средневзвешенного значения на основе соотношения весов с минимальным значением стоимости.
[321] Когда сторона кодирования отправляет битовый поток кодирования стороне декодирования, битовый поток кодирования содержит значение индекса соотношения весов в таблице весов. Таким образом, сторона декодирования анализирует значение индекса битового потока кодирования, получает соотношение весов, соответствующее значению индекса, из таблицы весов и получает конечное значение предсказания в виде средневзвешенного значения на основе соотношения весов.
[322] В одном примере таблица весов может включать в себя, помимо прочего, {-2, 3, 4, 5, 10}. Вес «-2» указывает, что конечное значение предсказания = (значение предсказания 1*(-2) + значение предсказания 2*(8- (-2))), т.е. (-2*-значение предсказания 1 + 10*-значение предсказания 2) / 8. Вес «10» указывает, что соотношение весов составляет 10: -2, т.е. конечное значение предсказания = (значение предсказания 1*(10) + предсказанное значение 2*(-2)), т.е. (10*значение предсказания 1 - 2*значение предсказания 2) / 8. Вес «3» указывает соотношение весов 3: 5. Вес «5» указывает соотношение весов 5: 3. Вес «4» указывает соотношение весов 4: 4, т.е. вес «4» указывает, что веса являются одинаковыми.
[323] Вариант осуществления 35: на этапе 305 и этапе 405 должны быть сохранены первый и второй целевые векторы движения каждого субблока текущего блока, при этом первый и второй целевые векторы движения применяют в качестве опорных для кодирования и декодирования последующего блока. Например, первый и второй целевые векторы движения применяют для контурной фильтрации текущего кадра; первый и второй целевые векторы движения применяют для привязки во временной области последующих кадров; и/или первый и второй целевые векторы движения применяют для привязки в пространственной области текущего кадра.
[324] Например, первый и второй целевые векторы движения каждого субблока текущего блока можно применять для компенсации движения текущего блока, а также для привязки во временной области последующих кадров. В другом примере первый и второй целевые векторы движения каждого субблока текущего блока можно применять для компенсации движения текущего блока, для контурной фильтрации текущего блока и для привязки во временной области последующих кадров.
[325] В другом примере первый и второй целевые векторы движения каждого субблока текущего блока можно применять для компенсации движения текущего блока, для контурной фильтрации текущего блока, для привязки во временной области последующих кадров, а также для привязки в пространственной области текущего кадра, как будет раскрыто ниже.
[326] Первый и второй целевые векторы движения каждого субблока текущего блока можно применять для привязки в пространственной области блоков в пределах определенных НЕК (наибольших единиц кодирования, англ. Largest Coding units (НЕК)) в пространственной области. Так как кодирование осуществляют в последовательности сверху вниз и слева направо, вектор движения текущего блока может быть привязан к другим блокам в пределах текущей НЕК, а также к блокам в пределах последующей примыкающей НЕК. Учитывая большой объем вычислений, необходимых для получения целевого вектора движения, в случае привязки последующих блоков к целевому вектору движения текущего блока время ожидания будет долгим. Во избежание задержки по времени из-за слишком долгого ожидания, разрешено привязывать только малое число примыкающих блоков в пространственной области к целевому вектору движения текущего блока, а прочие блоки привязывают к исходному вектору движения текущего блока. На Фиг.8 указанное малое число блоков включает в себя субблоки, расположенные в наибольших единицах кодирования, расположенных ниже и ниже справа от нижней стороны текущей НЕК, при этом субблоки, расположенные в наибольших единицах кодирования, расположенных справа и ниже слева, могут не быть привязаны к целевому вектору движения текущего блока.
[327] Вариант осуществления 36: ниже раскрыт частный пример процесса коррекции вектора движения. Конкретные этапы коррекции вектора движения могут быть такими, как указано ниже, при этом «копирование» означает получение без интерполяции, т.е. если ВД представляет собой целопиксельное смещение, то его можно непосредственно скопировать из опорного кадра, а в ином случае необходима интерполяция.
[328] На этапе e1, в случае применения режима слияния или пропуска для текущего блока, выполняют последующую обработку.
[329] На этапе e2 готовят значения опорных пикселей (исходя из того, что ширина текущего блока составляет W, а высота составляет H).
[390] Готовят целопиксельный блок для этапа e3: на основе исходного вектора движения (исходный вектор движения list0 обозначают Org_MV0, исходный вектор движения list1 обозначают Org_MV1), целопиксельные блоки трех компонентов с двумя блоками площадью (W+FS-1) (H+FS-1) копируют в соответствующем положении соответствующих опорных кадров.
[331] Готовят целопиксельный блок для этапа e4: на основе целопиксельных блоков площадью (W+FS-1)*(H+FS-1) целопиксельные блоки трех компонентов площадью (W+FS-1) (H+FS-1) увеличивают вверх, вниз, влево и вправо на SR горизонтальных рядов/вертикальных рядов и получают, после увеличения, целопиксельные блоки трех компонентов площадью (W+FS-1+2*SR) * (H+FS-1+2*SR), обозначенные на Фиг.5 как Pred_Inter0, Pred_Inter1.
[332] Сначала выполняют компенсацию движения на основе информации о движении в двух разных направлениях. Например, для яркостной составляющей (поскольку для упрощения в последующем процессе поиска применяют только яркостную составляющую для вычисления значения стоимости), исходные значения предсказания опорных пикселей (обозначенных Pred_Bilinear0, Pred_Bilinear1) размером (W +2 SR)*((H +2 SR)) можно получать путем билинейной интерполяции на основе двух целопиксельных опорных блоков площадью (W+FS-1)*(H+FS-1). FS - это число отводов фильтра, по умолчанию составляющее 8, а SR - диапазон поиска, т.е. максимальной интерполяции горизонтальной/вертикальной составляющей целевого вектора движения и исходного вектора движения, по умолчанию составляющий 2. Pred_Bilinear0/Pred_Bilinea1 применяют на этапе e3.
[333] На этапе e3 для каждого субблока dx*dy (целого блока размером 16*16 или менее) текущего блока получают соответствующие целевые векторы движения (два целевых вектора движения обозначены соответственно Refined_MV0 и Refined_MV1).
[334] На этапе e31 выполняют SR итераций для получения оптимального целопиксельного смещения точки целопиксельного ВД, обозначаемого IntegerDeltaMV, при этом для IntegerDeltaMV устанавливают начальное значение (0, 0), и выполняют последующую обработку для каждой итерации:
[335] на этапе e311 устанавливают значение (0, 0) для deltaMV. При выполнении первой итерации два блока значения предсказания (т.е. наиболее близкий к центру блок W*H Pred_Bilinear0/1) получают путем копирования на основе исходных векторов движения в опорном пикселе Pred_Bilinear0/1; и получают исходное значение стоимости, т.е. САР после операции понижающей дискретизации, выполняемой по вертикали в отношении блоков значения предсказания в двух направлениях в 2 раза, на основе указанных двух блоков значения предсказания.
[336] Если исходное значение стоимости меньше 4*dx*dy/2, где dx и dy - ширина и высота текущего субблока, последующий процесс поиска непосредственно пропускают, выполняют этап e32, а для notZeroCost устанавливают значение «false».
[337] На этапе e312, как показано на Фиг.6, последовательно получают пять смещенных ВД (все они именуются MVOffset) в последовательности {Mv(0,1), Mv(0,-1), Mv(1,0), Mv(-1,0), Mv(вправо, вниз)}, при этом вышеуказанная исходная точка принята в качестве центра, и выполняют процесс вычисления и сравнения значений стоимости указанных пяти смещенных ВД.
[338] Например, на основе определенного MVOffset, в опорном пикселе Pred_Bilinear0/1 получают два блока значения предсказания (например, блок W*H со смещением положения центра MVOffset в Pred_Bilinear0 и блок W*H со смещением положения центра -MVOffset (противоположно list0) в Pred_Bilinear1) на основе данного MVOffset, выполняют понижающую дискретизацию САР указанных двух блоков и вычисляют значения предсказания в качестве значения стоимости MVOffset. Далее резервируют MVOffset (сохраняют в deltaMV) с минимальным значением стоимости, который применяют в качестве новой точки смещения центра следующей итерации.
[339] Используемое по умолчанию значение Mv(вправо, вниз) составляет (-1, -1), при этом, если значение стоимости Mv(1,0) меньше, чем значение Mv(-1, 0), то значение «вправо» составляет 1; если значение стоимости of Mv(0, 1) меньше значения Mv(0, -1), то значение «вниз» составляет 1.
[340] IntegerDeltaMV обновляют на основе значения deltaMV: IntegerDeltaMV:= IntegerDeltaMV + deltaMV.
[341] На этапе e313, после итерации, если оптимальный ВД все еще представляет собой исходный ВД или минимальное значение стоимости составляет 0, то следующий процесс итеративного поиска не выполняют, выполняют этап e32 и устанавливают значение «false» для notZeroCost. В ином случае, если число итераций достигло SR, выполняют этап e32, а если число итераций не достигло SR, оптимальный ВД принимают в качестве центра и выполняют следующий процесс итеративного поиска, то есть совершают возврат на этап e311.
[342] На этапе e32 принимают оптимальную точку целопиксельного ВД на этапе e31 в качестве центра, получают оптимальный субпиксельный смещенный ВД, который обозначают SPMV, устанавливают начальное значение (0, 0) для SPMV, а затем выполняют последующую процедуру:
[343] На этапе e321 последующую процедуру выполняют только в том случае, если notZeroCost не имеет значение «false», а deltaMV имеет значение (0, 0), в ином случае исходный вектор движения корректируют непосредственно с применением IntegerDeltaMV.
0
0
0
0
[344] На этапе e322 E(x, y) представлено как значение стоимости, соответствующее ВД смещения точки оптимального ВД (x, y), полученному на этапе e31 (значение стоимости, вычисленное на этапе e31). На основе E (x, y) центральной, верхней, нижней, левой и правой точек можно получить смещение (x, y) точки с наименьшим E(x, y) следующим образом: x=N*(E(-1,0)-E(1,0)) / (E(-1,0) + E(1,0)-2* E(0,0)), y =N*(E(0,-1)-E(0,1)) / (E(0,-1) + E(0,1)-2* E(0,0)).
0
0
0
0
[345] В одном примере, если пиксельная точность вектора движения составляет 1/2, 1/4, 1/8 и 1/16, то N =1, 2, 4 и 8 соответственно. Далее (x, y) назначают для deltaMv, SPMV = deltaMv/2N, а если пиксельная точность текущего вектора движения составляет 1/16, то SPMV может составлять (x/16, y/16).
[346] Если E(-1, 0) = E(0, 0), выполняют сдвиг на половину пикселя по горизонтали влево (deltaMv[0] = -N).
[347] Если E(1, 0) = E(0, 0), выполняют сдвиг на половину пикселя по горизонтали вправо (deltaMv[0] = N).
[348] Если E(0, -1) = E(0, 0), выполняют сдвиг на половину пикселя по вертикали вверх (deltaMv [1] = -N).
[349] Если E(0, -1) = E(0, 0), выполняют сдвиг на половину пикселя по вертикали вниз (deltaMv [1] = N).
[350] На этапе e33 получают оптимальный смещенный ВД на основе IntegrarteltaMV с целопиксельным смещением на этапе e31 и SPMV с субпиксельным смещением на этапе e32, который обозначают BestMVoffset. BestMVoffset=IntegerDeltaMV+ SPMV. На основе BestMVoffset можно получить целевые векторы движения в двух направлениях: Refined_MV0= Org_MV0+BestMVoffset; Refined_MV1=Org_MV1-BestMVoffset.
[351] На этапе e4 получают значения предсказания в двух направлениях с помощью 8-отводного интерполяционного фильтра на основе целевого вектора движения каждого субблока и взвешивают его для получения конечного значения предсказания (три компонента). Например, на основе целевых векторов движения Refined_MV0 и Refined_MV1 каждого субблока, в Pred_Inter0/1, полученном на этапе e2, получают соответствующий блок предсказания путем интерполяции (векторы движения могут быть субпиксельными, в связи с чем необходима интерполяция для получения соответствующего блока пикселей).
[352] На этапе e5 целевой вектор движения применяют для компенсации движения текущего блока и привязки во временной области последующего кадра.
[353] Вариант осуществления 37: вышеуказанные варианты осуществления можно реализовать по отдельности или в какой-либо комбинации. Например, варианты осуществления 13, 15, 24 и 29 можно реализовать по отдельности. Вариант осуществления 13 и вариант осуществления 15 реализуют в комбинации, вариант осуществления 13 и вариант осуществления 24 реализуют в комбинации, вариант осуществления 13 и вариант осуществления 29 реализуют в комбинации, вариант осуществления 15 и вариант осуществления 24 реализуют в комбинации, вариант осуществления 15 и вариант осуществления 29 реализуют в комбинации, вариант осуществления 24 и вариант осуществления 29 реализуют в комбинации, вариант осуществления 13, вариант осуществления 15 и вариант осуществления 24 реализуют в комбинации, вариант осуществления 13, вариант осуществления 15 и вариант осуществления 29 реализуют в комбинации, вариант осуществления 15, вариант осуществления 24 и вариант осуществления 29 реализуют в комбинации, вариант осуществления 13, вариант осуществления 15, вариант осуществления 24 и вариант осуществления 29 реализуют в комбинации и т.д. Разумеется, выше приведены только некоторые неограничивающие примеры. Все варианты осуществления настоящей заявки можно реализовать по отдельности или в комбинации.
[354] Вариант осуществления 38:
[355] На основе той же идеи, что лежит в основе способа, один из вариантов осуществления настоящей заявки также относится к оборудованию кодирования и декодирования с возможностью применения на стороне кодирования или стороне декодирования, как раскрыто на Фиг.9, представляющей собой структурную схему оборудования, причем оборудование включает в себя:
[356] определяющий модуль 91, выполненный с возможностью, если характеристическая информация текущего блока соответствует особому условию, определения первого опорного блока, соответствующего текущему блоку, на основе первого исходного вектора движения текущего блока и определения второго опорного блока, соответствующего текущему блоку, на основе второго исходного вектора движения текущего блока; обрабатывающий модуль 92, выполненный с возможностью коррекции первого и второго исходных векторов движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; и кодирующий и декодирующий модуль 93, выполненный с возможностью кодирования или декодирования текущего блока на основе первого и второго целевых векторов движения.
[357] Характеристическая информация включает в себя по меньшей мере одно из следующего: режим предсказания информации о движении, соответствующий текущему блоку; атрибут информации о движении, соответствующий текущему блоку; информацию о размере текущего блока.
[358] Если характеристическая информация представляет собой режим предсказания информации о движении, соответствующий текущему блоку, определяющий модуль 91 также выполнен с возможностью: определения того, что режим предсказания информации о движении, соответствующий текущему блоку, соответствует особому условию, если режим предсказания информации о движении, соответствующий текущему блоку, представляет собой стандартный режим слияния; или определения того, что режим предсказания информации о движении, соответствующий текущему блоку, соответствует особому условию, если режим предсказания информации о движении, соответствующий текущему блоку, представляет собой режим слияния для генерирования нового значения предсказания путем объединения значения межкадрового предсказания и значения внутрикадрового предсказания.
[359] Если характеристическая информация представляет собой атрибут информации о движении, соответствующий текущему блоку, определяющий модуль 91 также выполнен с возможностью: определения того, что атрибут информации о движении, соответствующий текущему блоку, соответствует особому условию, если атрибут информации о движении, соответствующий текущему блоку, состоит в том, что информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях; или определения того, что атрибут информации о движении, соответствующий текущему блоку, соответствует особому условию, если атрибут информации о движении, соответствующий текущему блоку, состоит в том, что информация о движении текущего блока включает в себя информацию о движении в двух разных направлениях, а расстояния между текущим кадром и каждым из двух опорных кадров, соответствующих информации о движении в двух разных направлениях, являются одинаковыми; или определения того, что атрибут информации о движении, соответствующий текущему блоку, соответствует особому условию, если атрибут информации о движении, соответствующий текущему блоку, состоит в том, что для текущего блока вновь используют информацию о движении окружающих блоков; или определения того, что атрибут информации о движении, соответствующий текущему блоку, соответствует особому условию, если атрибут информации о движении, соответствующий текущему блоку, состоит в том, что информация о движении каждого субблока текущего блока является одинаковой.
[360] Если характеристическая информация представляет собой информацию о размере текущего блока, при этом информация о размере текущего блока включает в себя значение ширины и значение высоты текущего блока, определяющий модуль 91 также выполнен с возможностью: определения того, что информация о размере текущего блока соответствует особому условию, если значение ширины текущего блока находится в пределах первого интервала [первый порог, второй порог]; или определения того, что информация о размере текущего блока соответствует особому условию, если значение высоты текущего блока находится в пределах второго интервала [третий порог, четвертый порог]; или определения того, что информация о размере текущего блока соответствует особому условию, если площадь, полученная на основе значения ширины и значения высоты текущего блока, находится в пределах третьего интервала [пятый порог, шестой порог]; или определения того, что информация о размере текущего блока соответствует особому условию, если значение ширины находится в пределах первого интервала [первый порог, второй порог], значение высоты находится в пределах второго интервала [третий порог, четвертый порог], а площадь находится в пределах третьего интервала [пятый порог, шестой порог].
[361] Определяющий модуль 91 выполнен с возможностью определения первого опорного блока, соответствующего текущему блоку, на основе первого исходного вектора движения текущего блока и определения второго опорного блока, соответствующего текущему блоку, на основе второго исходного вектора движения текущего блока, что, в частности, означает возможность: определения первого опорного блока, соответствующего текущему блоку, из первого опорного кадра на основе первого исходного вектора движения текущего блока; и определения второго опорного блока, соответствующего текущему блоку, из второго опорного кадра на основе второго исходного вектора движения текущего блока; причем первое значение пикселя каждой пиксельной точки в первом опорном блоке получают путем интерполяции значений пикселей примыкающих пиксельных точек в первом опорном блоке или получают путем копирования значений пикселей примыкающих пиксельных точек в первом опорном блоке; второе значение пикселя каждой пиксельной точки во втором опорном блоке получают путем интерполяции значений пикселей примыкающих пиксельных точек во втором опорном блоке или путем копирования значений пикселей примыкающих пиксельных точек во втором опорном блоке.
[362] Обрабатывающий модуль 92 выполнен с возможностью коррекции первого и второго исходных векторов движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения, что, в частности, означает возможность:
[363] коррекции первого и второго исходных векторов движения согласно первому и второму значениям пикселей для получения первого и второго целевых векторов движения субблока для каждого субблока текущего блока, если текущий блок содержит по меньшей мере один субблок.
[364] Например, определяют первое целопиксельное значение коррекции вектора движения и второе целопиксельное значение коррекции вектора движения субблока и/или первое субпиксельное значение коррекции вектора движения и второе субпиксельное значение коррекции вектора движения субблока на основе первого и второго значений пикселей; корректируют первый исходный вектор движения согласно первому целопиксельному значению коррекции вектора движения и/или первому субпиксельному значению коррекции вектора движения для получения первого целевого вектора движения субблока; и корректируют второй исходный вектор движения согласно второму целопиксельному значению коррекции вектора движения и/или второму субпиксельному значению коррекции вектора движения для получения второго целевого вектора движения субблока.
[365] Обрабатывающий модуль 92 выполнен с возможностью определения первого и второго целопиксельных значений коррекции вектора движения субблока, первого и второго субпиксельных значений коррекции вектора движения субблока на основе первого и второго значений пикселей, что, в частности, означает возможность:
[366] определения первого исходного вектора движения или второго исходного вектора движения в качестве центрального вектора движения;
[367] определения краевого вектора движения, соответствующего центральному вектору движения;
[368] получения первого значения стоимости, соответствующего центральному вектору движения, и второго значения стоимости, соответствующего краевому вектору движения, на основе первого и второго значений пикселей;
[369] выбора вектора движения из центрального вектора движения и краевого вектора движения в качестве оптимального вектора движения на основе первого значения стоимости и второго значения стоимости;
[370] оценки того, соблюдено ли конечное условие; если нет, то определения оптимального вектора движения в качестве центрального вектора движения и повторного определения краевого вектора движения, соответствующего центральному вектору движения;
[371] если да, то определения первого и второго целопиксельных значений коррекции вектора движения субблока на основе оптимального вектора движения; и определения первого и второго субпиксельных значений коррекции вектора движения субблока на основе оптимального вектора движения.
[372] Обрабатывающий модуль 92 выполнен с возможностью определения краевого вектора движения, соответствующего центральному вектору движения, что, в частности, означает возможность:
[373] сдвига центрального вектора (x, y) движения в разных направлениях на S и последовательного получения краевого вектора (x, y+S) движения, краевого вектора (x, y-S) движения, краевого вектора (x+ S, y) движения, краевого вектора (x-S, y) движения и краевого вектора (x+ вправо, y+ вниз) движения в разных направлениях; или
[374] сдвига центрального вектора (x, y) движения в разных направлениях на S и последовательного получения краевого вектора (x, y-S) движения, краевого вектора (x, y+S) движения, краевого вектора (x-S, y) движения, краевого вектора (x+S, y) движения и краевого вектора (x+ вправо, y+ вниз) движения в разных направлениях;
[375] причем используемое по умолчанию значение краевого вектора (x + вправо, y + вниз) движения составляет (x-S, y-S);
[376] если значение стоимости краевого вектора (x+S, y) движения меньше значения стоимости краевого вектора (x-S, y) движения, то значение «вправо» составляет S; если значение стоимости краевого вектора движения (x, y + S) меньше чем у краевого вектора (x, y-S) движения, то значение «вниз» составляет S; или, если значение стоимости краевого вектора (x+S, y) движения меньше или равно значению стоимости краевого вектора (x-S, y) движения, то значение «вправо» составляет S; если значение стоимости краевого вектора движения (x, y + S) меньше или равно значению стоимости краевого вектора (x, y-S) движения, то значение «вниз» составляет S.
[377] Обрабатывающий модуль 92 выполнен с возможностью получения первого значения стоимости, соответствующего центральному вектору движения, и второго значения стоимости, соответствующего краевому вектору движения, на основе первого и второго значений пикселей, что, в частности, означает возможность:
[378] получения первого значения стоимости, соответствующего центральному вектору движения, и второго значения стоимости, соответствующего краевому вектору движения, на основе первого и второго значений пикселей без понижающей дискретизации; или
[379] выполнения операции понижающей дискретизации в отношении первого и второго значений пикселей; и получения первого значения стоимости, соответствующего центральному вектору движения, и второго значения стоимости, соответствующего краевому вектору движения, на основе первого и второго значений пикселей после понижающей дискретизации; или
[380] выполнения сдвига и операции понижающей дискретизации в отношении первого значения пикселя и выполнения сдвига и операции понижающей дискретизации в отношении второго значения пикселя; и получения первого значения стоимости, соответствующего центральному вектору движения, и второго значения стоимости, соответствующего краевому вектору движения, на основе первого и второго значений пикселей после сдвига и понижающей дискретизации.
[381] Обрабатывающий модуль 92 выполнен с возможностью определения первого и второго целопиксельных значений коррекции вектора движения субблока, первого и второго субпиксельных значений коррекции вектора движения субблока на основе первого и второго значений пикселей, что, в частности, означает возможность:
[382] принятия первого исходного вектора движения или второго исходного вектора движения в качестве центра, выбора некоторых или всех векторов движения из окружающих векторов движения и определения выбранных векторов движения в качестве потенциальных векторов движения;
[383] получения третьего значения стоимости, соответствующего первому исходному вектору движения или второму исходному вектору движения, и четвертого значения стоимости, соответствующего каждому из потенциальных векторов движения, на основе первого и второго значений пикселей;
[384] выбора вектора движения из первого исходного вектора движения или второго исходного вектора движения и потенциального вектора движения в качестве оптимального вектора движения на основе третьего значения стоимости и четвертого значения стоимости;
[385] определения первого и второго целопиксельных значений коррекции вектора движения субблока на основе оптимального вектора движения; и определения первого и второго субпиксельных значений коррекции вектора движения субблока на основе оптимального вектора движения.
[386] Обрабатывающий модуль 92 выполнен с возможностью определения первого и второго целопиксельных значений коррекции вектора движения субблока на основе оптимального вектора движения, что, в частности, означает возможность: определения первого целопиксельного значения коррекции вектора движения субблока на основе оптимального вектора движения и первого исходного вектора движения и определения второго целопиксельного значения коррекции вектора движения субблока на основе первого целопиксельного значения коррекции вектора движения.
[387] Обрабатывающий модуль 92 выполнен с возможностью определения первого и второго субпиксельных значений коррекции вектора движения субблока на основе оптимального вектора движения, что, в частности, означает возможность: определения первого субпиксельного значения коррекции вектора движения субблока на основе значения стоимости, соответствующего оптимальному вектору движения, и значения стоимости, соответствующего краевому вектору движения, соответствующему оптимальному вектору движения, и определения второго субпиксельного значения коррекции вектора движения субблока на основе первого субпиксельного значения коррекции вектора движения.
[388] Кодирующий и декодирующий модуль 93 выполнен с возможностью кодирования или декодирования текущего блока на основе первого и второго целевых векторов движения, что, в частности, означает возможность: если текущий блок содержит по меньшей мере один субблок, определения, для каждого субблока текущего блока, третьего опорного блока, соответствующего субблоку, на основе первого целевого вектора движения субблока, и определения четвертого опорного блока, соответствующего субблоку, на основе второго целевого вектора движения субблока; взвешивания третьего значения пикселя третьего опорного блока и четвертого значения пикселя четвертого опорного блока для получения значения предсказания субблока; и определения значения предсказания текущего блока на основе значения предсказания каждого субблока.
[389] Кодирующий и декодирующий модуль 93 выполнен с возможностью определения третьего опорного блока, соответствующего субблоку, на основе первого целевого вектора движения субблока, и определения четвертого опорного блока, соответствующего субблоку, на основе второго целевого вектора движения субблока, что, в частности, означает возможность: определения пятого опорного блока, соответствующего субблоку, из первого опорного кадра на основе первого целевого вектора движения субблока и интерполяции значений пикселей в пятом опорном блоке для получения третьего опорного блока; определения шестого опорного блока, соответствующего субблоку, из второго опорного кадра на основе второго целевого вектора движения субблока и интерполяции значений пикселей в шестом опорном блоке для получения четвертого опорного блока.
[390] Кодирующий и декодирующий модуль 93 выполнен с возможностью определения третьего опорного блока, соответствующего субблоку, на основе первого целевого вектора движения субблока и определения четвертого опорного блока, соответствующего субблоку, на основе второго целевого вектора движения субблока, что, в частности, означает возможность: определения седьмого опорного блока, соответствующего субблоку, из первого опорного кадра на основе первого целевого вектора движения субблока, построения восьмого опорного блока на основе значений пикселей в седьмом опорном блоке и интерполяции значений пикселей в восьмом опорном блоке для получения третьего опорного блока; определения девятого опорного блока, соответствующего субблоку, из второго опорного кадра на основе второго целевого вектора движения субблока, построения десятого опорного блока на основе значений пикселей в девятом опорном блоке и интерполяции значений пикселей в десятом опорном блоке для получения четвертого опорного блока.
[391] Оборудование также включает в себя: сохраняющий модуль для сохранения первого и второго целевых векторов движения для текущего блока; причем первый и второй целевые векторы движения применяют для контурной фильтрации текущего кадра, первый и второй целевые векторы движения применяют для привязки во временной области последующих кадров и/или первый и второй целевые векторы движения применяют для привязки в пространственной области текущего кадра.
[392] Вариант осуществления 39:
[393] Устройство на стороне декодирования по варианту осуществления настоящей заявки на аппаратном уровне, со схемой аппаратной структуры которого можно ознакомиться, в частности, на Фиг.10. Устройство включает в себя: процессор 101 и машиночитаемый носитель 102 данных, причем машиночитаемый носитель 102 данных содержит сохраненные на нем машиноисполняемые инструкции, которые может исполнять процессор 101; процессор 101 выполнен с возможностью исполнения машиноисполняемых инструкций для реализации способов, раскрытых в приведенных выше примерах настоящей заявки. Например, процессор применяют для исполнения машиноисполняемых инструкций для реализации этапов, на которых:
[394] если характеристическая информация текущего блока соответствует особому условию, определяют первый опорный блок, соответствующий текущему блоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий текущему блоку, на основе второго исходного вектора движения текущего блока; корректируют первый и второй исходные векторы движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; и декодируют текущий блок на основе первого и второго целевых векторов движения.
[395] Устройство на стороне кодирования по варианту осуществления настоящей заявки на аппаратном уровне, со схемой аппаратной структуры которого можно ознакомиться, в частности, на Фиг.11. Устройство включает в себя: процессор 111 и машиночитаемый носитель 112 данных, причем машиночитаемый носитель 112 данных содержит сохраненные на нем машиноисполняемые инструкции, которые может исполнять процессор 111; процессор 111 выполнен с возможностью исполнения машиноисполняемых инструкций для реализации способов, раскрытых в приведенных выше примерах настоящей заявки. Например, процессор 111 применяют для исполнения машиноисполняемых инструкций для реализации этапов, на которых: если характеристическая информация текущего блока соответствует особому условию, определяют первый опорный блок, соответствующий текущему блоку, на основе первого исходного вектора движения текущего блока и определяют второй опорный блок, соответствующий текущему блоку, на основе второго исходного вектора движения текущего блока; корректируют первый и второй исходные векторы движения согласно первому значению пикселя первого опорного блока и второму значению пикселя второго опорного блока для получения первого целевого вектора движения, соответствующего первому исходному вектору движения, и второго целевого вектора движения, соответствующего второму исходному вектору движения; и кодируют текущий блок на основе первого и второго целевых векторов движения.
[396] На основе той же идеи, что лежит в основе способа, вариант осуществления настоящей заявки также относится к машиночитаемому носителю данных, причем машиночитаемый носитель данных содержит сохраненные на нем множество компьютерных инструкций, при этом, при исполнении компьютерных инструкций процессором, могут быть реализованы способы кодирования и декодирования, раскрытые в приведенных выше примерах настоящей заявки. Машиночитаемый носитель данных может представлять собой любое электронное, магнитное, оптическое или иное физическое устройство хранения, могущее содержать или хранить информацию, например, исполнимые инструкции, данные и т.п. Например, машиночитаемый носитель данных может представлять собой: оперативное запоминающее устройство (ОЗУ, англ. Random Access Memory (RAM)), энергозависимое запоминающее устройство, энергонезависимое запоминающее устройство, флэш-память, накопитель (например, жесткий диск), твердотельный накопитель, диск хранения любого типа (например, компактный диск, цифровой универсальный диск (DVD-диск, англ. Digital Versatile Disk) и т.п.), или аналогичный носитель данных, или их комбинацию.
[397] Системы, оборудование, модули или блоки, речь о которых шла в раскрытых выше вариантах осуществления, могут быть, в частности, реализованы посредством компьютерной микросхемы или объекта, либо реализованы посредством продукта с определенными функциями. Типичное устройство реализации представляет собой компьютер, который может быть выполнен в форме персонального компьютера, ноутбука, сотового телефона, камерофона, смартфона, карманного персонального компьютера, мультимедийного проигрывателя, навигационного устройства, устройства обмена сообщениями электронной почты, игровой приставки, планшетного компьютера, носимого устройства или их комбинации.
[398] Для упрощения описания, вышеуказанные устройство раскрыты по отдельности в составе различных блоков в соответствии с их функциями. Разумеется, при реализации настоящей заявки, функции каждого блока могут быть реализованы в одном или нескольких программных и/или аппаратных средствах.
[399] Специалистам в данной области техники будет понятно, что варианты осуществления настоящей заявки могут быть раскрыты применительно к способам, системам или компьютерным программным продуктам. Соответственно, настоящая заявка может быть составлена в форме варианта осуществления, полностью относящегося к аппаратной части, варианта осуществления, полностью относящегося к программной части, или варианта осуществления, сочетающего программные и аппаратные аспекты. Кроме того, варианты осуществления настоящей заявки могут представлять собой компьютерный программный продукт, реализованный на одном или нескольких пригодных для применения в компьютере носителях (в том числе, помимо прочих, на дисковом накопителе, постоянном запоминающем устройстве на компакт-диске (англ. Compact Disk Read-Only Memory (CD-ROM)), оптическом накопителе и т.п.), с выполненной в нем программой, пригодной для применения в компьютере.
[400] Варианты осуществления способов, устройств (систем) и компьютерных программных продуктов раскрыты в настоящей заявке на примерах, проиллюстрированных на схемах последовательности и/или блок-схемах. Следует понимать, что каждая иллюстрация в виде схемы последовательности, и/или блока схем последовательности, и/или блок-схем и комбинации схем последовательности, и/или блоков схем последовательностей и/или блок-схем может быть реализована посредством компьютерных программных инструкций. Компьютерные программные инструкции могут быть введены в процессор компьютера общего назначения, компьютера специального назначения, встраиваемый процессор или иное программируемое устройство обработки данных, в результате чего будет создана машина, за счет которой инструкции, исполняемые посредством процессора компьютера или иного программируемого устройства обработки данных, образуют оборудование для реализации функций, указанных в последовательности или последовательностях на схемах последовательности и/или в блоке или блоках блок-схем.
[401] Кроме того, компьютерные программные инструкции также можно хранить в машиночитаемом запоминающем устройстве, могущем побуждать компьютер или иное программируемое оборудование обработки данных к функционированию определенным образом, в связи с чем инструкции, хранимые в этом машиночитаемом запоминающем устройстве, образуют изделие, включающее в себя управляющее устройство, реализующее функцию, указанную в последовательности или последовательностях на схемах последовательности и/или в блоке или блоках блок-схем.
[402] Компьютерные программные инструкции также могут быть загружены в компьютер или иное программируемое устройство обработки данных для инициирования выполнения в компьютере или ином программируемом устройстве серии рабочих этапов с образованием компьютеризованного процесса, в котором инструкции, исполняемые в компьютере или ином программируемом устройстве, относятся к этапам реализации функций, указанных в последовательности или последовательностях на схемах последовательности и/или в блоке или блоках блок-схем.
[403] Выше раскрыт только один из вариантов осуществления настоящей заявки, не предназначенный для ограничения настоящей заявки. Специалистам в области техники, к которой относится настоящая заявка, могут прийти на ум разнообразные модификации и изменения. Любая модификация, эквивалентная замена, улучшение или нечто подобное без отступления от существа и принципа настоящей заявки входит в объем, определенный формулой изобретения по настоящей заявке.