ОКНО ДОСТУПА К ПАМЯТИ И ЗАПОЛНЕНИЕ ДЛЯ ДЕТАЛИЗАЦИИ ВЕКТОРА ДВИЖЕНИЯ И КОМПЕНСАЦИИ ДВИЖЕНИЯ
MEMORY ACCESS WINDOW AND FILLING FOR DETAILING OF MOTION VECTOR AND MOTION COMPENSATION

Варианты осуществления настоящего изобретения относятся к определению и детализации вектора движения, а также к определению предиктора для компенсации движения, который может использоваться во время кодирования и декодирования видеоинформации.
Уровень техники
Текущие гибридные видеокодеки используют кодирование с предсказанием. Изображение видеопоследовательности подразделяется на блоки пикселей и эти блоки затем кодируются. Вместо того, чтобы кодировать блок попиксельно, весь блок предсказывается, используя уже кодированные пиксели в пространственной или временной близости от блока. Кодер дополнительно обрабатывает только разности между блоком и его предсказанием. Дополнительная обработка обычно содержит преобразование блочных пикселей в коэффициенты в области преобразования. Коэффициенты могут затем дополнительно сжиматься посредством квантования и дополнительного уплотнения посредством статистического кодирования, чтобы сформировать битовый поток. Битовый поток дополнительно содержит любую сигнальную информацию, позволяющую декодеру декодировать кодированную видеоинформацию. Например, сигнализация может содержать установки, относящиеся к установкам кодера, таким как размер входного изображения, частота кадров, индикация шага квантования, предсказание, применяемые к блокам изображений, и т.п.
Временное предсказание использует временную корреляцию между изображениями, также называемыми кадрами, видеоинформации. Временное предсказание также вызывают межкадровым предсказанием, поскольку это предсказание, использующее зависимости между различными видеокадрами (межкадрами). Соответственно, кодируемый блок, также называемый текущим блоком, предсказывается исходя из одного или более ранее кодированного изображения(-ий), называемого опорным изображением(-ями). Опорное изображение не обязательно является изображением, предшествующим текущему изображению, в котором текущий блок располагается в порядке отображения видеопоследовательности. Кодер может кодировать изображения в порядке кодирования, отличающемся от порядка отображения. В качестве предсказания текущего блока, в опорном изображении может быть определен cовмещенный блок. Cовмещенный блок является блоком, который располагается в опорном изображении в той же самой позиции, что и текущий блок в текущем изображении. Такой предсказание является точным для областей неподвижного изображения, то есть, областей изображения без движения от одного изображения к другому.
Чтобы получить устройство предсказания, которое учитывает движение, то есть, предиктор с компенсацией движения оценка движения обычно используется при определении предсказания текущего блока. Соответственно, текущий блок предсказывается с помощью блока в опорном изображении, который располагается на расстоянии, задаваемом вектором движения относительно позиции совмещенного блока. Чтобы позволить декодеру определить такое же предсказание текущего блока, вектор движения может быть сообщен посредством сигнализации в битовом потоке. Чтобы дополнительно уменьшить издержки на сигнализацию, вызванные сигнализацией вектора движения для каждого из блоков, может быть оценен сам вектор движения. Оценка вектора движения может быть выполнена, основываясь на векторах движения соседних блоков в пространственной и/или во временной области.
Предсказание текущего блока может быть вычислено, используя одно опорное изображение или путем взвешивания предсказаний, полученных из двух или более опорных изображений. Опорное изображение может соседним изображением, то есть, изображением, непосредственно предшествующим, и/или изображением, следующим сразу после текущего изображения в порядке отображения, поскольку соседние изображения, наиболее вероятно, должны быть подобны текущему изображению. Однако, в целом, опорное изображение может также быть любым другим изображением, предшествующим или следующим после текущего изображения в порядке отображения и предшествующим текущему изображению в битовом потоке (в порядке декодирования). Это может обеспечить преимущества, например, в случае затемнений/или нелинейного движения в видеоконтенте. Идентификация опорного изображения может, таким образом, также передаваться посредством сигнализации в битовом потоке.
Специальный режим межкадрового предсказания является так называемым би-предсказанием, при котором два опорных изображения используются для формирования предсказания текущего блока. В частности, два предсказания, определенных в соответствующих двух опорных изображениях, объединяются в сигнал предсказания текущего блока. Би-предсказание может приводить в результате к более точному предсказанию текущего блока, чем уни-предсказание, то есть, предсказание, использующее только одно единственное опорное изображение. Более точное предсказание ведет к меньшим разностям между пикселями текущего блока и предсказанием (упоминаемым также как "остатки"), которые могут кодироваться более эффективно, то есть, сжиматься в более короткий битовый поток. В целом, для нахождения соответствующих более чем двух опорных блоков для предсказания текущего блока могут использоваться более двух опорных изображений, то есть, может применяться мультиопорное межкадровое предсказание. Термин "мультиопорное предсказание", таким образом, содержит би-предсказание, а также предсказания, использующие более двух опорных изображений.
Чтобы обеспечить более точную оценку движения, разрешающая способность опорного изображения может быть улучшена путем интерполяции выборок между пикселями. Дробная пиксельная интерполяция может выполняться путем взвешенного усреднения ближайших пикселей. В случае полупиксельной разрешающей способности, например, обычно используется билинейная интерполяция. Другие дробные пиксели вычисляются как среднее значение ближайших пикселей, взвешенных путем инверсии расстояния между соответствующими ближайшими пикселями и предсказываемым пикселем.
Оценка вектора движения в вычислительном отношении является сложной задачей, в которой вычисляется подобие между текущим блоком и соответствующими блоками предсказания (предикторами), на которые указывают возможные векторы движения в опорном изображении. Как правило, пространство поиска содержит М x М выборок изображения и каждая позиция выборки из М x М возможных позиций тестируется. Тест содержит вычисление меры подобия между N x N позиций опорного блока С и блоком R, расположенным в тестированной возможной позиции пространства поиска. Для упрощения, сумма абсолютных разностей (sum of absolute differences, SAD) является мерой, часто используемой с этой целью и представляемой в виде:
В приведенной выше формуле x и y определяют возможную позицию внутри пространства поиска, тогда как индексы i и j обозначают выборки внутри опорного блока C и возможного блока R. Возможная позиция часто упоминается как смещение или сдвиг блока, которые отражают представление сопоставления блоков как смещение опорного блока внутри пространства поиска и вычисление подобия между опорным блоком C и перекрывающимся участком пространства поиска. Чтобы уменьшить сложность, количество возможных векторов движения обычно уменьшается, ограничивая возможные векторы движения определенным пространством поиска. Пространство поиска может, например, определяться количеством и/или позициями пикселей, окружающих позицию в опорном изображении, соответствующем позиции текущего блока в текущем изображении. После вычисления SAD для всего М x М возможных позиций x и y, блок R с наилучшим сопоставлением является блоком в позиции, дающей в результате самый низкий SAD, соответствующий наибольшему подобию с опорным блоком C. С другой стороны, возможные векторы движения могут быть определены списком возможных векторов движения, образованным векторами движения соседних блоков.
Векторы движения обычно, по меньшей мере частично, определяются на стороне кодера и сообщаются декодеру посредством сигнализации внутри кодированного битового потока. Однако, векторы движения могут также быть получены в декодере. В таком случае, текущий блок не доступен декодеру и не может использоваться для вычисления подобия блоков, на которые возможные векторы движения указывают в опорном изображении. Поэтому вместо текущего блока используется шаблон, который создается из пикселей уже декодированных блоков ("сопоставление с шаблонами"). Например, могут использоваться уже декодированные пиксели, соседствующие с текущим блоком. Такая оценка движения обеспечивает преимущество сокращения объема сигнализации: вектор движения получают одним и тем же способам в кодере и в декодере и, таким образом, никакая сигнализация не требуется. С другой стороны, точность такой оценки движения может быть ниже.
В случае би-предсказания, альтернативно использованию шаблона может также использоваться сопоставление между возможными блоками кодирования в различных опорных изображениях, на которые указывают возможные векторы движения, ("двустороннее сопоставление"), как будет дополнительно уточнено ниже.
Чтобы обеспечить компромисс между точностью и издержками на сигнализацию, оценка вектора движения может быть разделена на два этапа: получение вектора движения и детализация вектора движения. Например, получение вектора движения может содержать выбор вектора движения из списка возможных кандидатов. Такой выбранный вектор движения может быть дополнительно детализирован, например, посредством поиска внутри пространства поиска. Поиск в пространстве поиска основан на вычислении функции стоимости для каждого возможного вектора движения, то есть, для каждого возможной позиции блока, на который указывает возможный вектор движения.
Документ JVET-D0029: Decoder-Side Motion Vector Refinement Based on Bilateral Template Matching, авторов X. Chen, J. An, J. Zheng (документ можно найти на сайте: <http://phenix.it-sudparis.eu/jvet/>) показывает детализацию вектора движения, при которой находят первый вектор движения с целочисленной пиксельной разрешающей способностью и дополнительно детализируют его посредством поиска с полупиксельной разрешающей способностью в пространства поиска вокруг первого вектора движения.
Чтобы выполнить детализацию вектора движения, необходимо сохранить в памяти, по меньшей мере, те выборки, которые необходимы для текущего блока, чтобы выполнить детализацию, то есть, выборки, соответствующие пространству поиска, и выборки, к которым можно получить доступ, когда выполняются сопоставление с шаблонами или двустороннее сопоставление в пространстве поиска.
Доступ к внешней памяти является важным параметром решения в настоящих реализациях аппаратной архитектуры и/или программного обеспечения. Это вызвано тем фактом, что доступ к внешней памяти замедляет обработку по сравнению с использованием внутренней памяти. С другой стороны, внутренняя память, выполненная на микросхеме, ограничена, например, из-за реализации размера кристалла.
Раскрытие сущности изобретения
Настоящее раскрытие основывается, например, на наблюдении, что детализация вектора движения, когда она реализуется в сочетании с дробной интерполяцией, может потребовать дополнительного увеличения размера внутренней памяти или даже доступа к внешней памяти. Оба варианта могут быть нежелательны. То же самое имеет место, когда интерполяция применяется для улучшения разрешающей способности предиктора посредством введения дробных позиций выборки.
С точки зрения вышеупомянутой проблемы, настоящее раскрытие обеспечивает предсказание вектора движения, которое позволяет учесть количество доступов к внешней памяти и количество выборок, которые необходимы для доступности к детализации вектора движения для кодируемого блока и вычисления предиктора для блока.
Это достигается путем заполнения (замены) значений, которые располагаются вне заданного окна доступа к памяти с целью детализации вектора движения и/или дробной интерполяции с помощью заменяющих значений, основываясь на одной или более выборках внутри окна доступа к памяти.
Это достигается признаками независимых пунктов формулы изобретения.
В соответствии с вариантом настоящего изобретения, обеспечивается устройство кодирования, определяющее предиктор для кодирования блока видеоизображения. Устройство кодирования содержит схему обработки, выполненную с возможностью получения начального вектора движения для блока, получения детализированного вектора движения для блока, основываясь на начальном векторе движения, и определения предиктора для блока, соответствующего детализированному вектору движения. Схема обработки выполнена с возможностью определения предиктора, соответствующего детализированному вектору движения, используя интерполяцию с помощью интерполяционного фильтра и используя по меньшей мере одно значение выборки для целочисленной позиции выборки, расположенной внутри окна, и заполненное значение выборки для целочисленной позиции выборки, расположенной вне окна для интерполяционной фильтрации, где заполненное значение выборки основано по меньшей мере на одном значении выборки, расположенной внутри окна.
Согласно другому варианту настоящего изобретения, обеспечивается устройство декодирования для определения предиктора для декодирования блока видеоизображения. Устройство декодирования содержит схему обработки, выполненную с возможностью получения, для блока, начального вектора движения, получения детализированного вектора движения для предиктора, основываясь на начальном векторе движения, и определения предиктора для блока в соответствии с детализированным вектором движения. Схема обработки выполнена с возможностью определения предиктора, соответствующего детализированному вектору движения, используя интерполяцию с помощью интерполяционного фильтра, и использования по меньшей мере одного значения выборки для целочисленной позиции выборки, расположенной внутри окна, и заполненного значения выборки для целочисленной позиции выборки, расположенной вне окна для интерполяционной фильтрации, где заполненное значение выборки основано по меньшей мере на одном значении выборки, расположенной внутри окна.
Согласно дополнительному варианту настоящего изобретения, обеспечивается способ кодирования для определения предиктора для кодирования блока видеоизображения. Способ кодирования содержит этапы, на которых получают начальный вектор движения для блока, получают детализированный вектор движения для блока, основываясь на начальном векторе движения, и определяют предиктор для блока, соответствующего детализированному вектору движения, где этап определения определяет предиктор, соответствующий детализированному вектору движения, используя интерполяцию с помощью интерполяционного фильтра, и использует по меньшей мере одно значение выборки целочисленной позиции выборки, расположенной внутри окна, и заполненное значения выборки для целочисленной позиции выборки, расположенной вне окна для интерполяционной фильтрации, где заполненное значение выборки основывается по меньшей мере на одном значении выборки для целочисленной выборки, расположенной внутри окна.
Согласно еще одному дополнительному варианту настоящего изобретения, обеспечивается способ декодирования для определения предиктора для декодирования блока видеоизображения. Способ декодирования содержит этапы, на которых получают начальный вектор движения для блока, получают детализированный вектор движения для блока предсказания, основываясь на начальном векторе движения, и определяют предиктор, соответствующий детализированному вектору движения, используя интерполяцию с помощью интерполяционного фильтра, используют по меньшей мере одно значение целочисленной позиции выборки, расположенной внутри окна, и значение заполненной выборки для целочисленной позиции выборки, расположенной вне окна для интерполяционной фильтрации, где значение заполненной выборки основано по меньшей мере на одном значении выборки для целочисленной выборки, расположенной внутри окна.
Такие способы и устройства обеспечивают преимущество в отношении ограничения количества выборок, которые должны быть доступны с целью определения предиктора путем интерполяционной фильтрации, в то же время также избегая дополнительных доступов к запоминающему устройств/(внешней) памяти, хранящей все опорные изображения.
В вариантах осуществления вышеупомянутых вариантов окно является окном для интерполяционной фильтрации.
В соответствии с вариантами осуществления, интерполяция может содержать доступ к значениям выборки в целочисленных позициях выборки внутри окна и/или заполнение по меньшей мере одного значения выборки для целочисленной позиции выборки, расположенной вне окна, посредством заполняющего значения, которое основано по меньшей мере на одной выборке внутри окна и/или на использовании значений целочисленных позиций, к которым получен доступ, а также на заполняющих значениях выборок для выполнения интерполяционной фильтрации.
Например, схема обработки может быть выполнена с возможностью определения детализации начального вектора движения, основываясь на пространстве поиска возможных векторов движения, и определения детализированного вектора движения, основываясь на начальном векторе движения и детализации.
Кроме того, например, схема обработки может быть выполнена с возможностью определения пространства поиска, основываясь на начальном векторе движения. Более конкретно, пространство поиска может быть расположено в позиции, определяемой начальным вектором движения. Например, пространство поиска может быть центрировано вокруг начального вектора движения. Более конкретно, в соответствии с примером, пространство поиска может содержать девять возможных векторов движения с целочисленной выборкой, то есть, начальный вектор движения и восемь возможных векторов движения, расположенных вокруг него.
В вариантах осуществления схема обработки дополнительно выполнена с возможностью реконструкции блока, основываясь на предикторе. Реконструкция может быть выполнена в устройстве декодирования, а также в контуре декодирования устройства кодирования. Варианты раскрытия, связанные со способом, могут содержать соответствующий этап реконструкции блока, основанный на предикторе.
Например, схема обработки может быть выполнена с возможностью получения разности между блоком и предиктором, также называемой "остатком". Более конкретно, схема обработки может быть выполнена с возможностью реконструкции блока, основываясь на предикторе и остатке, еще более конкретно, на сумме предиктора и остатка.
Например, значение заполненной выборки (заменяющее значение) определяется зеркальным отражением относительно оси интерполяционного фильтра значения соответственно используемой (оценочной) целочисленной позиции выборки. Интерполяционная фильтрация может быть одномерной или разделяемой двумерной фильтрацией.
В одной примерной реализации окно формируется всеми целочисленными позициями выборки, доступными для получения предиктора в позиции, указываемой начальным вектором движения.
Окно определяют, например, его вертикальным и/или горизонтальным размером относительно блока с размером блока, расположенного в позиции начального вектора движения, или позицией начального вектора движения, или длиной по вертикали и по горизонтали интерполяционного фильтра, который используется для определения предиктора. Определение блока, "располагающегося" в конкретной позиции, в вариантах осуществления, например, означает ссылку на позицию верхней-левой выборки для блока. Альтернативно, другая позиция выборки может делать ссылку на конкретную позицию или позиция блока может быть определена посредство центровки вокруг конкретной позиции. Схема обработки может быть выполнена с возможностью определения или характеризации позиции и/или размера окна, соответствующего позиции начального вектора движения, размера блока и/или длине по вертикали и по горизонтали интерполяционного фильтра, используемого для определения предиктора.
В качестве другого примера, заполненное значение выборки для целочисленной позиции вне окна определяют как равное значению выборки по меньшей мере одной используемой целочисленной позиции выборки, расположенной внутри окна, которая является ближайшей к целочисленной позиции выборки, расположенной вне окна. В конкретном примере, в случае одномерного интерполяционного фильтра заполненные значения выборки для многочисленных целочисленных позиций выборки, расположенных вне окна, используются для определения предиктора, используя интерполяцию с помощью интерполяционного фильтра и заполненные значения выборки для всех целочисленных позиций выборки вне окна определяются как равные значению выборки по меньшей мере одной используемой целочисленной позиции выборки, расположенной внутри окна, которая является ближайшей к целочисленным позициям выборки, расположенным вне окна.
В соответствии с вариантами осуществления, количество значений выборки, которые должны быть заполнены, зависит от разности между начальным вектором движения и детализированным вектором движения.
В соответствии с вариантами осуществления, схема обработки выполнена с возможностью определения детализации начального вектора движения путем сопоставления с шаблонами или билатерального сопоставления. Сопоставление с шаблонами или двустороннее сопоставление оценивает значения выборки в целочисленных позициях выборки внутри дополнительного окна. Дополнительное окно содержит пространство поиска и дополнительные целочисленные позиции выборки, доступные для сопоставления с шаблонами или билатерального сопоставления, причем сопоставление с шаблонами или двустороннее сопоставление дополнительно заполняет по меньшей мере одно значение выборки в целочисленной позиции выборки, расположенной за пределами дополнительного окна, посредством заполненного значения выборки (замены), которое основывается по меньшей мере на одной выборке внутри дополнительного окна и использует значения целочисленных позиций выборки, к которым получен доступ, а также заполненные значения выборки, чтобы выполнить сопоставление с шаблонами или двустороннее сопоставление.
В одном из вариантов осуществления упомянутое пространство поиска содержит по меньшей мере одну дробную позицию выборки со значением, полученным интерполяционной фильтрацией с помощью фильтра с заданным числом коэффициентов для умножения; и интерполяционная фильтрация использует упомянутые значения целочисленных позиций выборки с полученным доступом, и по меньшей мере одно значение замены (заполненная выборка), чтобы получить упомянутое по меньшей мере одно значение дробной позиции выборки.
Более конкретно, заполненное значение выборки, используемое при сопоставлении с шаблонами или при двустороннем сопоставлении, определяют посредством зеркального отражения относительно оси фильтра значения, соответствующего целочисленной позиции выборки, получившего доступ.
Альтернативно, заполненное значение выборки, используемое при сопоставлении с шаблонами или при билатеральном согласовании, определяют как равное значению в ближайших целочисленных позициях выборки с полученным доступом.
В соответствии с вариантами осуществления, дополнительное окно определяют его вертикальным и/или горизонтальным размерами относительно по меньшей мере одного размера пространства поиска, блока с размером блока, расположенного в позиции начального вектора движения, и позиции начального вектора движения.
Предпочтительно, дополнительное окно является таким же, как и основное окно.
В соответствии с вариантами осуществления, детализацию определяют двусторонним сопоставлением и схема обработки выполнена с возможностью получения, по меньшей мере, двух начальных векторов движения, указывающих позиции в различных опорных изображениях и формирующих пару начальных векторов движения.
В соответствии с другими вариантами осуществления, детализацию определяют сопоставлением с шаблонами и схема обработки дополнительно выполнена с возможностью получения шаблона для блока и определения детализации начального вектора движения посредством сопоставления с шаблоном в пространстве поиска.
В одном из вариантов осуществления упомянутое пространство поиска содержит по меньшей мере одну дробную позицию выборки со значением, полученным посредством интерполяционной фильтрации с помощью фильтра с заданным числом коэффициентов для умножения; и интерполяционная фильтрация использует упомянутые используемые значения целочисленных позиций выборки и по меньшей мере одно заполненное значение выборки, чтобы получить упомянутое по меньшей мере одно значение дробной позиции выборки.
В соответствии с вариантом изобретения обеспечивается энергонезависимый считываемый компьютером носитель, хранящий команды, которые, когда исполняются процессором/схемой обработки, выполняют этапы, соответствующие любому из вышеупомянутых вариантов или вариантов осуществления или их сочетаний.
В соответствии с дополнительным конкретным вариантом изобретения, обеспечивается устройство кодирования для кодирования видеоизображений, разделенных на блоки предсказания в битовом потоке, или, соответственно, для кодирования блоков предсказания видеоизображения в битовом потоке. Устройство кодирования содержит схему обработки для определения вектора движения для блока предсказания. Схема обработки выполнена с возможностью получения по меньшей мере одного начального вектора движения и определения детализации начального вектора движения на основе пространства поиска возможных векторов движения, с тем, чтобы получить детализированный вектор движения. Пространство поиска располагается в позиции, заданной начальным вектором движения. Устройство кодирования дополнительно содержит схему кодирования (которая может содержаться в схеме обработки) для кодирования разности между блоком предсказания и предиктором, задаваемым блоком предсказания, находящимся в позиции, основанной на определенном векторе движения, и для формирования битового потока, содержащего кодированную разность и начальный вектор движения. Устройство кодирования дополнительно содержит блок предсказания движения (который может содержаться в схеме обработки) для определения предиктора, соответствующего вектору движения, используя интерполяционную фильтрацию с помощью интерполяционного фильтра. Интерполяционная фильтрация получает доступ к значениям выборки в целочисленных позициях выборки внутри заданного окна, заменяет по меньшей мере одно значение выборки в целочисленной позиции выборки, расположенной вне окна, заменяющим значением, основанным по меньшей мере на одной выборке внутри окна, и использует значения выборки целочисленных позиций с полученным доступом доступ, а также заменяющие значения, чтобы выполнить интерполяционную фильтрацию.
В соответствии с еще одним другим конкретным вариантом изобретения, обеспечивается устройство декодирования для декодирования из битового потока видеоизображений, разделенных на блоки предсказания. Устройство декодирования содержит блок синтаксического анализа (который может содержаться в схеме обработки устройства декодирования) для анализа начального вектора движения из битового потока и кодированной разности между блоком предсказания и предиктором, заданным блоком предсказания в позиции, указываемой детализированным вектором движения. Устройство декодирования содержит схему обработки (например, схему обработки устройства декодирования) для определения вектора движения для блока предсказания. Схема обработки выполнена с возможностью получения по меньшей мере одного начального вектора движения и определения детализации начального вектора движения на основе пространства поиска возможных векторов движения, чтобы получить детализированный вектор движения. Пространство поиска располагается в позиции, заданной начальным вектором движения. Также дополнительно, устройство декодирования содержит схему декодирования (которая может содержаться в схеме обработки устройства декодирования) для реконструкции блока предсказания как суммы проанализированной разности и предиктора, заданного блоком предиктора в позиции, указанной детализированным вектором движения, определенным схемой обработки для определения вектора движения. Схема декодирования дополнительно выполнена с возможностью определения предиктора, соответствующего вектору движения, используя интерполяционную фильтрацию с помощью интерполяционного фильтра. Интерполяционная фильтрация получает доступ к значениям выборки в целочисленной позиции выборки внутри заданного окна, заменяет по меньшей мере одно значение выборки в целочисленной позиции выборки, расположенной вне окна, на заменяющее значение, которое основано по меньшей мере на одной выборке внутри окна, и использует значения целочисленных позиций выборки, к которым получен доступ, а также заменяющие значения, чтобы выполнить интерполяционную фильтрацию.
В соответствии с еще одним дополнительным вариантом изобретения, обеспечивается способ кодирования для кодирования видеоизображений в битовом потоке, разделенных на блоки предсказания. Способ кодирования содержит определение вектора движения для блока предсказания. Определение вектора движения содержит этапы, на которых получают по меньшей мере один начальный вектор движения и определяют детализацию начального вектора движения на основе пространства поиска возможных векторов движения, чтобы получить детализированный вектор движения. Пространство поиска располагается в позиции, задаваемой начальным вектором движения. Способ кодирования дополнительно содержит кодирование разности между блоком предсказания и предиктором, заданным блоком предсказания в позиции, основанной на определенном векторе движения и для формирования битового потока, содержащего кодированную разность и начальный вектор движения. Способ дополнительно содержит определение предиктора, соответствующего вектору движения, используя интерполяционную фильтрацию с помощью интерполяционного фильтра. Интерполяционная фильтрация получает доступ к значениям выборки в целочисленных позициях выборки внутри заданного окна, заменяет по меньшей мере одно значение выборки в целочисленной позиции выборки, расположенной за пределами окна, на значение замены, которое основано по меньшей мере на одной выборке внутри окна, и использует значения целочисленной позиции выборки с полученным доступом, а также заменяющие значения, чтобы выполнить интерполяционную фильтрацию.
В соответствии с еще одним дополнительным вариантом изобретения, обеспечивается способ декодирования для декодирования видеоизображений битового потока, разделенных на блоки предсказания. Декодирование содержит этапы синтаксического анализа начального вектора движения битового потока и кодированной разности между блоком предсказания и предиктором, задаваемым блоком предсказания в позиции, указываемой детализированным вектором движения. Способ дополнительно содержит определение вектора движения для блока предсказания. Определение вектора движения содержит этапы, на которых получают по меньшей мере один начальный вектор движения и определяют детализацию начального вектора движения на основе пространства поиска возможных векторов движения, чтобы получить детализированный вектор движения. Пространство поиска располагается в позиции, задаваемой начальным вектором движения. Способ декодирования дополнительно содержит реконструкцию блока предсказания как суммы проанализированной разности и предиктора, задаваемого блоком предсказания в позиции, указываемой детализированным вектором движения, определенным на этапе определения вектора движения. Кроме того, способ содержит определение предиктора, соответствующего вектору движения, используя интерполяционную фильтрацию с помощью интерполяционного фильтра. Интерполяционная фильтрация получает доступ к значениям выборки в целочисленных позициях выборки внутри заданного окна, заменяет по меньшей мере одно значение выборки в целочисленной позиции выборки внутри окна на заменяющее значение, которое основано по меньшей мере на одной выборке внутри окна, и использует значения целочисленных позиций выборки с полученным доступом, а также заменяющие значения для выполнения интерполяционной фильтрации.
Дополнительные преимущества и варианты осуществления настоящего изобретения изложены в зависимых пунктах формулы изобретения.
Краткое описание чертежей
Ниже примерные варианты осуществления описываются более подробно со ссылкой на прилагаемые чертежи, на которых:
Фиг. 1 - блок-схема примерной структуры кодера, в которой могут использоваться получение вектора движения и детализация;
Фиг. 2 - блок-схема примерной структуры декодера, в которой могут использоваться получение вектора движения и детализация;
Фиг. 3 – примерное сопоставление с шаблонами, пригодное для би-предсказания;
Фиг. 4 - примерное сопоставление с шаблонами, пригодное для уни- и би-предсказания;
Фиг. 5 - этапы получения вектора движения без предоставления начальных векторов движения, которые должны быть детализированы в битовом потоке;
Фиг. 6 - концепция двустороннего сопоставления;
Фиг. 7 - примерные аппаратные средства для реализации варианта осуществления изобретения;
Фиг. 8 – примерное окно для блока кодирования с выборками, которые должны иметься для получения доступа;
Фиг. 9 - пространство итеративного поиска;
Фиг. 10 - расширение окна доступа к памяти в горизонтальном направления за счет интерполяционной фильтрации;
Фиг. 11 – традиционная схема выполнения детализации вектора движения, основанная на пространстве поиска и получении предсказания посредством интерполяции;
Фиг. 12 - блок-схема последовательности выполнения операций получения вектора движения и получения предсказания согласно традиционному примеру, показанному на фиг. 11;
Фиг. 13 - схема выполнения детализации вектора движения, основываясь на пространстве поиска и получении предсказания посредством интерполяции в соответствии с примерными вариантами осуществления настоящего изобретения;
Фиг. 14 – заполнение двух выборок, чтобы позволить вычисление дробной позиции;
Фиг. 15 – заполнение четырех выборок, чтобы позволить сопоставление с шаблонами на границах пространства поиска;
Фиг. 16 – примерные дробные позиции, интерполяция которых не требует заполнения;
Фиг. 17 - блок-схема последовательности выполнения детализации вектора движения и получения предсказания в соответствии с примерными вариантами осуществления, показанными на фиг. 13;
Фиг. 18 - определение окна доступа к памяти в отношении блока предсказания;
Фиг. 19 – способ, соответствующий варианту осуществления;
Фиг. 20 - схема выполнения детализации вектора движения, основанная на пространстве поиска, и получения предсказания посредством интерполяции в соответствии с дополнительными примерными вариантами осуществления настоящего изобретения; и
Фиг. 21 - блок-схема последовательности выполнения детализации вектора движения и получения предсказания в соответствии с примерными вариантами осуществления, показанными на фиг. 20.
Осуществление изобретения
Настоящее раскрытие относится к регулированию количества выборок, которые должны быть доступны для выполнения детализации вектора движения и интерполяции, чтобы получить дробные позиции в опорном изображении, а также в предикторе.
Как упомянуто выше, доступ к внешней памяти является одним из важнейших факторов при проектировании сегодняшних архитектур аппаратных средств и программного обеспечения. Оценка вектора движения, особенно, когда она содержит сопоставление с шаблонами или двустороннее сопоставление, например, в случае детализации вектора движения, может также использоваться вместе с интерполяционной фильтрацией, чтобы получить дробные позиции пространства поиска. Использование интерполяционной фильтрации может потребовать увеличения количества выборок, к которым необходимо получать доступ из памяти. Однако, это может привести либо к увеличению дорогостоящей памяти на микросхемах, либо к увеличенному количеству доступов к внешней памяти, что, с другой стороны, замедляет реализацию. Особенно на стороне декодера эти проблемы могут привести к более дорогим или более медленным приложениям, который нежелательны.
Чтобы предотвратить такую ситуацию, настоящее раскрытие обеспечивает ограничение количества доступов внешней памяти к заданным окнам.
Окна могут иметь заданный размер. Например, при детализации вектора движения окно может содержать по меньшей мере все позиции пространства поиска. Выборки, к которым получен доступ, являются выборками, которые фактически используются для определенного блока и его пространства поиска, чтобы выполнить сопоставление с шаблонами или двустороннее сопоставление, например, все выборки, которые используются для вычисления функции стоимости с помощью функции стоимости для сопоставления с шаблонами или двустороннего сопоставления. Доступные выборки содержат, кроме того, выборки, к которым нет необходимости получать доступ во время конкретного сопоставления с шаблонами или двустороннего сопоставления для конкретного блока, например, потому что пространство поиска была итеративно определено, чтобы содержать различные выборки и сопоставление с шаблонами или двустороннее сопоставление на этих выборках не требуют всех доступных пикселей. Доступные выборки содержат также выборки, которые, возможно, могли бы быть результатом любого итеративно определенного пространства поиска (то есть, предполагая любой контент блоков), и, возможно, также выборки, к которым мог бы быть получен доступ для выполнения сопоставление с шаблонами в таких возможных пространствах поиска.
В случае формирования конечного предсказания с помощью интерполяционной фильтрации величина расширения требуемого окна доступа к памяти при традиционном подходе зависит от максимальной разности между определенным детализированным вектором движения и начальным вектором движения.
Заметим, что окно может быть определено меньшим, чем все доступные выборки. Такое определение окна позволяет поддерживать меньшее количество выборок, которые должны храниться во внутренней памяти микросхеме и извлекаться из внешней памяти. Настоящее раскрытие, таким образом, ограничивает количество целочисленных выборок, которые должны храниться/кэшироваться/буферироваться с целью операций, связанных с сопоставлением с шаблонами или двусторонним сопоставлением для конкретного блока. Это не означает, что другие выборки обычно не существуют/недоступны в другой памяти или в запоминающем устройстве. Как обсуждалось выше, обычно все опорные изображения могут храниться во внешней памяти. Однако, с целью сопоставления с шаблонами или двустороннего сопоставления, только их часть, а именно, выборки внутри окна, могут быть загружены и использоваться для сопоставления с шаблонами.
Обеспечение такого ограниченного окна содержит реализации, которые используют это и фактически загружают только выборки окна. Чтобы гарантировать подобную работу кодера и декодера, определение окна может быть задано заранее в стандарте или сообщаться в битовом потоке. Особенно, если детализированные векторы движения используются для формирования опорных изображений, то и кодер и декодер должны использовать один и тот же подход.
На фиг. 1 показан кодер 100, который содержит вход для приема выборок входного изображения кадров или изображений видеопотока и выход формирования кодированного битового видеопотока. Термин "кадр" в этом раскрытии используется как синоним изображения. Однако, следует заметить, что настоящее раскрытие также применимо к полям в случае, если применяется чередование. В целом, изображение содержит m раз по n пикселей. Это соответствует выборкам изображения и может содержать один или более цветовых компонент. Для простоты, последующее описание относится к пикселям, означающим выборки яркости. Однако, следует заметить, что поиск вектора движения согласно изобретению может быть применим к любому цветовому компоненту, содержащему цветность или компоненты пространства поиска, такие как RGB и т. п. С другой стороны, может быть предпочтительно выполнять оценку вектора движения только для одного компонента и применять определенный вектор движения к большему (или всем) количеству компонент.
Входные блоки, которые должны кодироваться, не обязательно должны иметь один и тот же размер. Одно изображение может содержать блоки различных размеров и растр блоков различных изображений также может различаться.
В поясняющей реализации кодер 100 выполнен с возможностью применения к видеопотоку предсказания, преобразования, квантования и статистического кодирования. Преобразование, квантование и статистическое кодирование выполняются, соответственно, блоком 106 преобразования, блоком 108 квантования и блоком 170 статистического кодирования с тем, чтобы сформировать в качестве выходного результата кодированный битовый видеопоток.
Видеопоток может содержать множество кадров, причем каждый кадр делится на блоки определенного размера, которые кодируются с внутрикадровым или межкадровым предсказанием. Блоки, например, первого кадра видеопотока кодируются с внутрикадровым предсказанием посредством блока 154 внутрикадрового предсказания. Кадр с внутрикадровым предсказанием кодируется, используя только информацию, содержащуюся внутри того же самого кадра, так чтобы он мог независимо декодироваться, и может обеспечить точку ввода в битовый поток для произвольного доступа. Блоки других кадров видеопотока могут кодироваться с межкадровым предсказанием посредством блока 144 межкадрового предсказания: информация от ранее кодированных кадров (опорных кадров) используется для уменьшения временной избыточности, так чтобы каждый блок кадра с межкадровым кодированием был предсказан из блока, содержащегося в опорном кадре. Блок 160 выбора режима выполнен с возможностью выбора, должен ли блок кадра обрабатываться блоком 154 внутрикадрового предсказания или блоком 144 межкадрового предсказания. Этот блок 160 выбора режима также управляет параметрами внутрикадрового или межкадрового предсказания. Чтобы позволить обновление информации об изображении, блоки с внутрикадровым кодированием могут обеспечиваться внутри кадров с межкадровым кодированием. Кроме того, кадры с внутрикадровым кодированием, которые содержат только блоки с внутрикадровым кодированием, могут регулярно вставляться в видеопоследовательность, чтобы обеспечить точки ввода для декодирования, то есть, точки, где декодер может начать декодирование, не имея информацию от ранее кодированных кадров.
Блок 152 внутрикадровой оценки и блок 154 внутрикадрового предсказания являются блоками, выполняющими внутрикадровое предсказание. В частности, блок 152 внутрикадровой оценки может получить режим предсказания, основываясь также на знании исходного изображения, тогда как блок 154 внутрикадрового предсказания обеспечивает соответствующее предиктор, то есть, выборки, предсказываемые, используя выбранный режим предсказания для кодирования разности. Чтобы выполнить пространственное или временное предсказание, кодированные блоки могут дополнительно обрабатываться блоком 110 обратного квантования и блоком 112 обратного преобразования. После реконструкции блока применяют блок 120 контурной фильтрации, чтобы дополнительно улучшить качество декодированного изображения. Отфильтрованные блоки затем формируют опорные кадры, которые далее сохраняются в буфере 130 декодированного изображения. Такой контур декодирования (декодер) на стороне кодера обеспечивает преимущество создания опорных кадров, которые являются такими же, как опорные изображения, реконструированные на стороне декодера. Соответственно, сторона кодера и декодера действуют соответствующим способом. Термин "реконструкция" здесь относится к получению реконструированного блока, добавляя к декодированному блоку остатка блок предсказания.
Блок 142 межкадровой оценки принимает в качестве входного сигнала блок текущего кадра или изображения, который должен быть межкадрово кодированным, и один или более опорных кадров из буфера 130 декодированного изображения. Оценка движения выполняется блоком 142 межкадровой оценки, при этом компенсация движения применяется блоком 144 межкадрового предсказания. Оценка движения используется для получения вектора движения и опорного кадра, основываясь на определенной функции стоимости, например, используя также исходное изображение, которое должно кодироваться. Например, блок 142 оценки движения может обеспечить оценку начального вектора движения. Начальный вектор движения может затем передаваться посредством сигнализации внутри битового потока в форме вектора напрямую или как индекс, ссылающийся на возможный вектор движения в рамках списка возможных векторов, созданного на основе заданного правила таким же образом, как в кодере и декодере. Компенсация движения затем получает предиктор текущего блока как преобразование блока, совмещенного с текущим блоком в опорном кадре, то есть, посредством вектора движения. Блок 144 межкадрового предсказания выводит блок предсказания для текущего блока, в котором упомянутый блок предсказания минимизирует функцию стоимости. Например, функция стоимости может быть разностью между текущим блоком, который должен кодироваться, и его блоком предсказания, то есть, функция стоимости минимизирует остаточный блок. Минимизация остаточного блока основывается, например, на вычислении суммы абсолютных разностей (sum of absolute differences, SAD) между всеми пикселями (выборками) текущего блока и возможным блоком в возможном опорном изображении. Однако, в целом, может использоваться любая другая метрика подобия, такая как среднеквадратичная погрешность (mean square error, MSE) или структурная метрика подобия (structural similarity metric, SSIM).
Однако, функция стоимости может также быть количеством битов, необходимых для кодирования такого межкадрового блока и/или искажения в результате такого кодирования. Таким образом, процедура оптимизации степени искажения может использоваться для принятия решения о выборе вектора движения и/или, в целом, о параметрах кодирования, таких как использовать ли для блока межкадровое или внутрикадровое предсказание и с какими установками.
Блок 152 внутрикадровой оценки и блок 154 внутрикадрового предсказания принимают в качестве входного сигнала блок текущего кадра или изображение, которое должно быть внутрикадрово кодированным, и одну или более опорных выборок из уже реконструированной области текущего кадра. Внутрикадровое предсказание затем описывает пиксели текущего блока текущего кадра с точки зрения функции опорных выборок текущего кадра. Блок 154 внутрикадрового предсказания выводит блок предсказания для текущего блока, где упомянутый блок предсказания предпочтительно минимизирует разность между текущим блоком, который должен быть кодирован, и его блоком предсказания, то есть, минимизирует остаточный блок. Минимизация остаточного блока может быть основана, например, на процедуре оптимизации степени искажения. В частности, блок предсказания получается в результате направленной интерполяции опорных выборок. Направление может быть определено оптимизацией степени искажения и/или вычислением меры подобия, как упомянуто выше, в сочетании с межкадровым предсказанием.
Блок 142 межкадровой оценки принимает в качестве входного сигнала блок или, более универсально, сформированную выборку изображения текущего кадра или изображения, которое должно быть межкадрово кодировано, и два или более уже декодированных изображений 231. Межкадровое предсказание затем описывает текущую выборку изображения текущего кадра с точки зрения векторов движения-опорных выборок изображения опорных изображений. Блок 142 межкадрового предсказания выводит один или более векторов движения для текущей выборки изображения, в которой упомянутые опорные выборки изображения, на которые указывают векторы движения, предпочтительно минимизируют разность между текущей выборкой изображения, которая должна быть кодирована, и ее опорными выборками изображения, то есть, минимизируют выборку остаточного изображения. Предиктор для текущего блока затем обеспечивается блоком 144 межкадрового предсказания для кодирования разности.
Разность между текущим блоком и его предсказанием, то есть, остаточным блоком 105, затем преобразуется блоком 106 преобразования. Коэффициенты 107 преобразования квантуются блоком 108 квантования и статистически кодируются блоком 170 статистического квантования. Сформированные таким образом кодированные данные 171 изображения, то есть, кодированный битовый видеопоток, содержат блоки с внутрикадровым кодированием и блоки с межкадровым кодированием и соответствующую сигнализацию (такую как индикация режима, индикация вектора движения и/или направление внутрикадрового предсказания). Блок 106 преобразования может применять линейное преобразование, такое как преобразование Фурье или дискретное косинусное преобразование (Fourier/Discrete Cosine Transformation, DFT/FFT или DCT). Такое преобразование в пространственной частотной области обеспечивает преимущество, состоящее в том, что результирующие коэффициенты 107 имеют обычно более высокие значения на более низких частотах. Таким образом, после эффективного сканирования коэффициентов (такого как зигзаг, zig-zag) и квантования результирующая последовательность значений обычно имеет некоторые большие значения в начале и в конце с прохождением нулей. Это позволяет иметь эффективное дополнительное кодирование. Блок 108 квантования 108 выполняет фактическое сжатие с потерями, снижая разрешающую способность значений коэффициентов. Блок 170 статистического кодирования затем назначает значениям коэффициентов двоичные кодовые слова, чтобы создать битовый поток. Блок 170 статистического кодирования также кодирует сигнальную информацию (не показано на фиг. 1).
На фиг. 2 показан видеодекодер 200. Видеодекодер 200 содержит, в частности, буфер 230 декодированного изображения, блок 244 межкадрового предсказания и блок 254 внутрикадрового предсказания, который является блоком предсказания блоков изображения. Буфер 230 декодированного изображения выполнен с возможностью хранения по меньшей мере одного (для уни-предсказания) или по меньшей мере два (для би-предсказания) опорных кадров, реконструированных из кодированного битового видеопотока, причем упомянутые опорные кадры отличаются от текущего кадра (текуще декодированного кадра) кодированного битового видеопотока. Блок 254 внутрикадрового предсказания выполнен с возможностью формирования блока предсказания, который является оценкой блока, который должен быть декодирован. Блок 254 внутрикадрового предсказания выполнен с возможностью формирования этого предсказания, основываясь на опорных выборках, которые получают из буфера 230 декодированного изображения.
Декодер 200 выполнен с возможностью декодирования кодированного битового видеопотока, сформированного видеокодером 100, и, предпочтительно, декодер 200 и кодер 100 вместе формируют идентичные предсказания для соответствующего блока, который должен кодироваться/декодироваться. Признаки буфера 230 декодированного изображения, реконструированного блока 215, буфера 216 и блока 254 внутрикадрового предсказания схожи с подобными признаками буфера 130 декодированного изображения, реконструированного блока 115, буфера 116 и блока 154 внутрикадрового предсказания, показанными на фиг. 1.
Видеодекодер 200 содержит дополнительные блоки, которые также присутствуют в видеокодере 100, как например, блок 210 обратного квантования, блок 212 обратного преобразования и блок 220 циклической фильтрации, которые соответственно схожи с блоком 110 обратного квантования, блоком 112 обратного преобразования и блоком 120 контурной фильтрации видеокодера 100.
Блок 204 статистического декодирования выполнен с возможностью декодирования принятого кодированного битового видеопотока и, соответственно, получения коэффициентов 209 преобразования квантованного остатка и информации сигнализации. Коэффициенты 209 преобразования квантованного остатка подаются на блок 210 обратного квантования и на блок 212 обратного преобразования, чтобы сформировать остаточный блок. Остаточный блок добавляется к блоку 265 предсказания и результат сложения подается на блок 220 контурной фильтрации, чтобы получить декодированную видеоинформацию. Кадры декодированной видеоинформации могут быть сохранены в буфере 230 декодированного изображения и служат в качестве декодированного изображения 231 для межкадрового предсказания.
В целом, блоки 154 и 254 внутрикадрового предсказания, показанные на фиг. 1 и 2, могут использовать опорные выборки из уже кодированной области, чтобы формировать сигналы предсказания для блоков, которые должны быть кодированы или должны быть декодированы.
Блок 204 статистического декодирования принимает в качестве своего входного сигнала кодированный битовый поток 171. В целом, битовый поток сначала синтаксически анализируется, то есть, параметры сигнализации и остатки извлекаются из битового потока. Как правило, синтаксис и семантика битового потока определяются стандартом, так чтобы кодеры и декодеры могли работать совместимым способом. Как описано выше в разделе "Уровень техники", кодированный битовый поток содержит не только остатки предсказания. В случае предсказания компенсации движения, индикация вектора движения также кодируется в битовом потоке и семантически анализируется в нем в декодере. Индикация вектора движения может задаваться посредством опорного изображения, в котором обеспечивается вектор движения, и посредством координат вектора движения. До этого момента было рассмотрено кодирование полных векторов движения. Однако, также может кодироваться только разность между текущим вектором движения и предыдущим вектором движения в битовом потоке. Этот подход позволяет воспользоваться избыточностью между векторами движения соседних блоков.
Чтобы эффективно кодировать опорное изображение, кодек H.265 (смотрите: сектор по стандартизации телекоммуникаций в составе Международного союза по телекоммуникациям (ITU-T), H265, Series H: Audiovisual and multimedia systems: High Efficient Video Coding) обеспечивает список опорных изображений, назначаемых для списка индексов соответствующих опорных кадров. Опорный кадр затем сообщается посредством сигнализации в битовом потоке, включая в него соответствующий назначенный индекс из списка. Такой список может определяться в стандарте или сообщаться посредством сигнализации в начале видеоинформации или набора из множества кадров. Следует заметить, что в стандарте H.265 имеется два списка определенных опорных изображений, называемых L0 и L1. Опорное изображение затем сообщается посредством сигнализации в битовом потоке, указывая список (L0 или L1) и указывая индекс в том списке, связанный с требуемым опорным изображением. Обеспечение двух или более списков может иметь преимущества для лучшего сжатия. Например, L0 может использоваться как для однонаправленных слоев с межкадровым предсказанием, так и для двунаправленных слоев с межкадровым предсказанием, тогда как L1 может использоваться только для двунаправленных слоев с межкадровым предсказанием. Однако, в целом, настоящее раскрытие не ограничивается никаким контентом списков L0 и L1.
Списки L0 и L1 могут быть определены в стандарте и фиксированы. Однако, большей гибкости при кодировании/декодировании можно достигнуть посредством их сигнализации в начале видеопоследовательности. Соответственно, кодер может конфигурировать списки L0 и L1 с конкретными опорными изображениями, упорядоченными согласно индексу. Списки L0 и L1 могут иметь один и тот же фиксированный размер. В целом, может иметься более двух списков. Вектор движения может сообщаться напрямую координатами в опорном изображении. Альтернативно, как также указано в H.265, список возможных векторов движения может быть создан и индекс, связанный в списке с конкретным вектором движения, может быть передан.
Векторы движения текущего блока обычно коррелируются с векторами движения соседних блоков в текущем изображении или в ранее кодированных изображениях. Причина в том, что соседние блоки, вероятно, должны соответствовать такому же движущемуся объекту с подобным движением, и движение объекта вряд ли резко изменяется во времени. Следовательно, использование векторов движения в соседних блоках в качестве предикторов уменьшает размер сообщаемой разности векторов движения. Предикторы векторов движения (Motion Vector Predictor, MVP) обычно получают из уже кодированных/декодированных векторов движения из пространственного соседства или временного соседства или из совмещенных блоков в опорном изображении. В стандарте H.264/AVC это делается, создавая разумную компонентную медиану из трех пространственно соседствующих векторов движения. Используя этот подход, не требуется никакой сигнализации предиктора. Временные MVP из совмещенного блока в опорном изображении рассматривают только в так называемом временном прямом режиме H.264/AVC. Прямые режимы H.264/AVC также используются для получения других данных движения, отличных от векторов движения. Следовательно, они больше связаны с концепцией слияния блоков в HEVC. В HEVC подход неявного получения MVP был заменен технологией, известной как конкуренция векторов движения, при которой явно сигнализируется, какой MVP от списка MVP используется для получения вектора движения. Переменная структура блока квадродерева кодирования в HEVC может привести в результате к одному блоку, имеющему несколько соседних блоков с векторами движения в качестве потенциально возможных MVP. Беря соседа с левой стороны в качестве примера, в худшем случае блок предсказания яркости 64x64 может иметь 16 блоков предсказания яркости 4x4 слева, когда блок дерева кодирования яркости 64x64 дополнительно не делится, и левый блок разделяется на максимальную глубину.
Детализированный предиктор вектора движения (Advanced Motion Vector Predictor, AMVP) был введен, чтобы модифицировать конкуренцию векторов движения для учета такой гибкой блочной структуры. Во время разработки HEVC начальный проект AMVP был значительно упрощен, чтобы обеспечить хорошее компромиссное решение между эффективностью кодирования и проектом, удобным для реализации. Начальный проект AMVP содержал пять MVP из трех различных классов предикторов: три вектора движения из пространственных соседей, медиана трех пространственных предикторов и масштабированный вектор движения из совмещенного, соседнего по времени блока. Дополнительно, список предикторов модифицировался посредством переупорядочивания, чтобы разместить предиктор наиболее вероятного движения в первой позиции, и посредством удаления избыточных кандидатов, чтобы гарантировать минимальные издержки на сигнализацию. Конечный проект построения возможного списка AMVP содержит следующие два возможных MVP: a) до двух пространственных возможных MVP, которые получают из пяти пространственных соседних блоков; b) один временный возможный MVP, получаемый из двух временных совмещенных блоков, когда оба возможных пространственных MVP недоступны или они идентичны; и c) нулевые векторы движения, когда пространственные, временные или оба возможных MVP недоступны. Подробности в отношении определения вектора движения можно найти в книге V. Sze и др., High Efficiency Video Coding (HEVC): Algorithms and Architectures, Springer, 2014, в частности, в главе 5, включенной сюда посредством ссылки.
Чтобы дополнительно улучшить оценку вектора движения без дополнительного увеличения издержек на сигнализацию, может быть выгодным дополнительно детализировать векторы движения, полученные на стороне кодера и обеспечиваемые в битовом потоке. Детализация вектора движения может быть выполнена в декодере без помощи со стороны кодера. Кодер в своем цикле декодера может использовать ту же самую детализацию, чтобы получить соответствующие векторы движения. Детализация вектора движения выполняется в пространства поиска, которое содержит целочисленные пиксельные позиции и дробные пиксельные позиции опорного изображения. Например, дробные пиксельные позиции могут быть полупиксельными позициями или четвертьпиксельными позициями или дополнительными дробными позициями. Дробные пиксельные позиции могут быть получены из целой (полнопиксельной) позиции путем интерполяции, такой как билинейная интерполяция. Однако, настоящее раскрытие одинаково применимо к пространствам поиска, не содержащим дробные пиксельные позиции.
При би-предсказании текущего блока два блока предсказания, полученные, используя соответствующий первый вектор движения из списка L0 и второй вектор движения из списка L1, объединяются в единый сигнал предсказания, который может обеспечить лучшую адаптацию к исходному сигналу, чем уни-предсказание, приводя в результате к меньшей остаточной информации и, возможно, к более эффективному сжатию.
Поскольку в декодере текущий блок недоступен, пока идет декодирование, для цели детализации вектора движения используется шаблон, который является оценкой текущего блока и который создан, основываясь на уже обработанной (то есть, кодированной на стороне кодера и декодированной на стороне декодера) части изображения.
Сначала, в качестве входного сигнала декодера 200 принимаются оценка первого вектора движения MV0 и оценка второго вектора движения MV1. На стороне 100 кодера вектор движения оценивает MV0 и MV1 может быть получен путем блочного сопоставления и/или поиска в списке кандидатов (таком как список слияния), формируемом векторами движения блоков, соседствующих с текущим блоком (в том же самом изображении или в соседних изображениях). MV0 и MV1 затем предпочтительно сообщаются стороне декодера внутри битового потока. Однако, заметим, что, в целом, первый этап определения в кодере может также быть выполнен посредством сопоставления с шаблонами, которое может обеспечить преимущество снижения издержек на сигнализацию.
На стороне 200 декодера векторы MV0 и MV1 движения предпочтительно получаются, основываясь на информации, содержащейся в битовом потоке. MV0 и MV1 либо сообщаются напрямую, либо сообщаются дифференцированно, и/или сообщается индекс в списке векторов движения (списке слияния). Однако, настоящее раскрытие не ограничивается сообщением векторов движения в битовом потоке. Скорее вектор движения может быть определен сопоставлением с шаблонами уже на первой стадии, соответственно операции кодера. Сопоставление с шаблонами на первой стадии (получение вектора движения) может быть выполнено, основываясь на пространстве поиска, отличающемся от пространства поиска второй стадии, стадии детализации. В частности, детализация может быть выполнена в пространстве поиска с более высокой разрешающей способностью (то есть, при более коротком расстоянии между позициями поиска).
Указание двух опорных изображений RefPic0 и RefPic1, на которые указывают соответствующие MV0 и MV1, обеспечивается также для декодера. Опорные изображения хранятся в буфере декодированного изображения на стороне кодера и на стороне декодера как результат предыдущей обработки, то есть, соответствующего кодирования и декодирования. Одно из этих опорных изображений выбирается для детализации вектора движения посредством поиска. Блок выбора опорного изображения кодера и декодера, соответственно, выполнен с возможностью выбора первого опорного изображения, на которое указывает MV0, и второго опорного изображения, на которое указывает MV1. После выбора блок выбора опорного изображения определяет, используются ли для выполнения детализации вектора движения первое опорное изображение или второе опорное изображение. Для выполнения детализации вектора движения область поиска в первом опорном изображении определяют вокруг возможной позиции, на которую указывает вектор движения MV0. Возможные позиции пространства поиска внутри области поиска анализируются, чтобы обнаружить блок, наиболее подобный шаблонному блоку, выполняя сопоставление с шаблонами внутри пространства поиска и определяя метрику подобия, такую как сумма абсолютных разностей (SAD). Позиции пространства поиска обозначают позиции, с которыми сопоставляется верхний левый угол шаблона. Как уже упоминалось выше, верхний левый угол является просто договоренностью и любая точка пространства поиска, такая как центральная точка, может обычно использоваться для обозначения соответствующей позиции.
В соответствии с вышеупомянутым документом JVET-D0029, детализация вектора движения на стороне декодера (decoder-side motion vector refinement, DMVR) имеет в качестве входного сигнала начальные векторы движения MV0 и MV1, которые указывают на два соответствующих опорных изображения RefPict0 и RefPict1. Эти начальные векторы движения используются для определения соответствующие пространств поиска в RefPict0 и RefPict1. Кроме того, используя векторы движения MV0 и MV1, шаблон создается, основываясь на соответствующих блоках (выборок) A и B, на которые указывают MV0 и MV1, следующим образом:
Шаблон = функция ((Блок A, Блок B)).
Функция может быть операцией обрезания выборки в сочетании с взвешенным суммированием, основанным на выборках. Шаблон затем используется, чтобы выполнить сопоставление с шаблонами в пространствах поиска, определенных, основываясь на MV0 и MV1 в соответствующих опорных изображениях 0 и 1. Функцией стоимости для определения наилучшего сопоставления с шаблонами в соответствующих пространствах поиска является SAD (шаблон, блок candA’), где блок candA’ является возможным блоком кодирования, на который указывает возможный MV в пространстве поиска, натянутом на позицию, заданную MV0. На фиг. 3 показано определение наилучшего блока А' и результирующего детализированного вектора движения MV0’. Соответственно, один и тот же шаблон используется для обнаружения наилучшего соответствия блока B’ и соответствующего вектора движения MV1’, который указывает на блок B’, как показано на фиг. 3. Другими словами, после того, как шаблон создан на основе блоков A и B, указанных начальными векторами движения MV0 и MV1, детализированные векторы движения MV0’ и MV1’ находятся посредством поиска на RefPic0 и RefPic1 с помощью шаблона.
Технологии получения вектора движения иногда также упоминаются как преобразование вверх частоты кадров (frame rate up-conversion, FRUC). Начальные векторы движения MV0 и MV1 могут обычно быть указываться в битовом потоке, чтобы гарантировать, что кодер и декодер могут использовать одну и ту же начальную точку для детализации вектора движения. Альтернативно, начальные векторы движения могут быть получены, обеспечивая список начальных кандидатов, содержащий одного или более начальных кандидатов. Для каждого из них определяют детализированный вектор движения и в конце выбирается детализированный вектор движения, уменьшающий функцию стоимости.
Дополнительно заметим, что настоящее изобретение не ограничивается сопоставлением с шаблонами, как описано выше со ссылкой на фиг. 3. На фиг. 4 показано альтернативное сопоставление с шаблонами, которое также применимо для уни-предсказания. Подробности можно найти в документе JVET-A1001, в частности, в разделе "2.4.6. Pattern matched motion vector derivation" документа JVET-A1001, озаглавленного "Algorithm Description of Joint Exploration Test Model 1", автор Джиэнл Чен и др., который доступен на сайте: http://phenix.it-sudparis.eu/jvet/. Шаблон при таком подходе сопоставления с шаблонами определяют как выборки, соседние с текущим блоком в текущем кадре. Как показано на фиг.1, могут быть получены уже реконструированные выборки, соседствующие с верхней и левой границей текущего блока и упоминаемые как "шаблон L-образной формы".
На фиг. 5 представлен другой тип получения вектора движения, который также может использоваться. Вход в процесс получения вектора движения обозначается флагом, который указывает, применяется ли получение вектора движения. Неявно, другой вход в процесс получения является вектором движения соседнего (во времени или пространственно) ранее кодированного/реконструированного блока. Векторы движения множества соседних блоков используются в качестве кандидатов на начальный этап поиска при получении вектора движения. Выходом процесса является MV0’ (возможно также MV1’, если используется би-предсказание) и соответствующие индексы опорного изображения refPict0 и, возможно, refPict1, соответственно. этап детализации вектора движения затем содержит сопоставление с шаблонами, как описано выше. После обнаружения детализированного одного (уни-предсказание) или более (би-предсказание/мультикадровое предсказание) векторов движения, создается предиктор текущего блока (для би-/мультипредсказания посредством взвешенного предсказания выборки, в противном случае, обращаясь к выборкам, на которые указывает детализированный MV).
Настоящее изобретение не ограничивается двумя способами сопоставления (примеры сопоставления с шаблонами), описанными выше. Как пример, для детализации вектора движения может также использоваться третий способ сопоставления, который называют двусторонним сопоставлением (также описанный в документе JVET-A1001), и изобретение применяется аналогично. Двустороннее сопоставление объясняется со ссылкой на фиг. 6.
В соответствии с двусторонним сопоставлением, поиск наилучшего соответствия ведется между двумя блоками вдоль траектории движения текущего блока в двух различных опорных изображениях. Как показано на фиг. 6, двустороннее сопоставление используется для получения информации о движении текущего блока, обнаруживая наилучшее соответствие между двумя блоками вдоль траектории движения текущего блока в двух различных опорных изображениях. При двустороннем сопоставлении может использоваться функция стоимости, такая как SAD (Block cand0’, Block cand1’), где на Block cand0’ указывает MV0 и на Block cand1’ указывает MV1.
Чтобы уменьшить затраты на вычисления, для выбора приемлемых кандидатов (пары кандидатов) векторов движения, для которых вычисляются и сравниваются функции стоимости, может иметь смысл рассмотреть выполнение следующего условия. Предполагая траекторию движения непрерывной, векторы движения MV0 и MV1, указывающие на два опорных блока, должны быть пропорциональны временным расстояниям, то есть, TD0 и TD1, между текущим изображением и двумя опорными изображениями. Как особый случай, когда текущее изображение временно находится между двумя опорными изображениями и временное расстояние от текущего изображения до двух опорных изображений является одинаковым, разности векторов движения между векторами движения многочисленных пар, относящихся к одному опорному изображению, и соответствующими векторами движения пар, относящимися к другому опорному изображению, должны зеркально отражать друг друга.
Схема 600 обработки показана на фиг. 7. Схема обработки может содержать любые аппаратные средства и конфигурация может быть реализована любым видом программирования или аппаратными средствами или сочетанием их обоих. Например, схема обработки может быть сформирована единым процессором, таким как универсальный процессор с соответствующим программным обеспечением, реализующим вышеупомянутые этапы. С другой стороны, схема обработки может быть реализована специализированными аппаратными средствами, такими как ASIC (Application-Specific Integrated Circuit, специализированная прикладная интегральная схема) или FPGA (Field-Programmable Gate Array, программируемая логическая интегральная схема) цифрового сигнального процессора (Digital Signal Processor, DSP) и т. п.
Схема обработки может содержать один или больше вышеупомянутых компонент аппаратных средств, соединенных друг с другом для получения вышеупомянутого вектора движения. Схема 600 обработки содержит вычислительную логику, реализующую две функциональные возможности: получение начального вектора движения (или множества начальных векторов движения, если используется би-/мультипредсказание) и шаблона, если используется сопоставление 610 с шаблонами и детализация 620 вектора движения. Эти две функциональные возможности могут быть реализованы на одной и той же части аппаратных средств или могут быть выполнены отдельными блоками аппаратных средств, такими как блок 610 определения начального вектора движения и шаблона и блок 620 детализации вектора движения. Схема 600 обработки может средствами связи соединяться с внешней памятью 650, в которой хранятся реконструированные выборки опорного изображения. Кроме того, схема 600 обработки может дополнительно содержать внутреннюю память 640, которая буферирует выборки в окне, передаваемые из внешней памяти и используемые для определения вектора движения для обработанного на данный момент блока. Схема обработки может быть реализована на единой микросхеме как интегральная схема.
Заметим, что схема обработки может реализовать дополнительные функции кодера и/или декодера, описанные со ссылкой на фиг. 1 и 2. Внутренняя память может быть памятью на микросхеме, такой как кэш или строчная память. Внутренняя память предпочтительно реализуется на микросхеме кодера/декодера, чтобы ускорить вычисления. Так как размер микросхемы ограничен, внутренняя память обычно мала. С другой стороны, внешняя память может быть очень большой по размеру, однако доступ к внешней памяти расходует больше энергии и доступ намного медленнее. Обычно перед выполнением вычислений вся необходимая информация передается из внешней памяти во внутреннюю память. Наихудший случай доступа к внешней памяти (или полоса пропускания, которую необходимо оговорить при проектировании шины памяти), означает наибольший объем передачи памяти между внешней памятью и микросхемой при декодировании кадра или кодировании блока. К памяти (особенно внешней памяти) обычно можно получать доступ только в заданных блочных единицах. Другими словами, обычно невозможно получить доступ к одиночному пикселю, вместо этого должен быть получен доступ к самому малому блоку (например, 8x8). Размер внутренней памяти является также важным соображением проекта, поскольку, чем больше внутренняя память, тем выше стоимость.
Другими словами, вышеупомянутое устройство может быть интегральной схемой, дополнительно содержащей: внутреннюю память, встроенную внутрь интегральной схемы, и блок доступа к памяти (интерфейс) для извлечения целочисленных выборок, расположенных внутри упомянутого окна, из внешней памяти во внутреннюю память.
Термин "блок предсказания", используемый выше, относится к текущему блоку, который должен быть предсказан. Это блок внутри изображения, который может быть получен путем подразделения изображения на блоки одинакового размера или разного размера (например, посредством иерархического разделения на части блока дерева кодирования, CTU в более мелких блоках). Блок может быть квадратным или, в более общем случае, прямоугольным, поскольку блоки являются типичными формами, также используемыми в текущих кодерах/декодерах. Однако, настоящее раскрытие не ограничивается никаким размером/формой блока.
Устройство, содержащее схему обработки, может быть кодером или декодером или даже устройством, содержащим такой кодер или декодер, например регистрирующим устройством и/или устройством воспроизведения.
Дробные позиции выборки являются позициями между реальными позициями выборки изображения, полученными путем реконструкции опорного изображения, которое было кодировано, как показано на фиг. 1. Таким образом, дробные позиции должны быть получены посредством интерполяции, основываясь на ближайших целочисленных позициях. Подробности интерполяционной фильтрации можно найти в разделе "5.3 Fractional Sample Interpolation” книги High Efficiency Video Coding (HEVC) авторов В. Же и др., Springer, 2014.
Интерполяционная фильтрация обычно, применяет различные фильтры, чтобы сформировать различные дробные позиции элемента растра (выборки). Как пример, применяются нижеследующие отдельные фильтры 1D, чтобы сформировать четвертные позиции и половинные позиции элемента растра в стандарте видеосжатия H.265:
Фаза
Коэффициенты фильтра яркости
1/4
[-1,4, -10,58, 17, -5,1]/64
1/2
[-1,4, -11,40, 40, -11,4, -1]/64
Как можно видеть из приведенной выше таблицы, интерполяционная фильтрация требует нескольких выборок вокруг дробной позиции элемента растра, соответствующей коэффициентам фильтра для умножения (количество коэффициентов в таблице). Используя приведенные выше примерные фильтры, чтобы сформировать половинную позицию элемента растра, требуются 4 целочисленных выборки с левой/верхней стороны и правой/нижней стороны. Следует заметить, что длина интерполяционного фильтра различна для четвертной позиции элемента растра (который имеет 7 коэффициентов для умножения) и половинной позиции выборки элемента растра (который имеет 8 коэффициентов для умножения). Термины выборка, элемент растра и пиксель используются взаимозаменяемо в этой заявке, обозначая выборку изображения (в одном или более цветовых компонентах) в заданный момент времени. Выборка, в принципе, является значением яркости.
В некоторых вариантах осуществления изобретения интерполяционный фильтр с заданным количеством коэффициентов для умножения оценивает целочисленные выборки только внутри окна, заданного целочисленными выборками, доступными для сопоставления с шаблонами в упомянутом пространстве поиска. Окно могло бы содержать намного больше выборок, чем те, которые фактически используются в вычислениях определенного блока предсказания. Причиной является тот факт, что операция поиска при детализации обычно реализуется, используя способ быстрого поиска (в отличие от способа принудительного поиска), согласно которому некоторые из выборок не оцениваются, в зависимости от постепенного прогресса операции поиска. В результате, количество итераций сопоставления с шаблонами, а также выборок, которые используются в вычислениях для операции поиска при детализации, может меняться для каждого блока предсказания.
На фиг. 8 показан блок кодирования (блок предсказания) и соответствующие выборки окна. Заметим, что выборки, показанные на фиг. 8, являются выборками опорного изображения и блок кодирования здесь является фактически блоком, по размеру и позиции соответствующим текущему блоку в текущем кадре, для которого должен быть получен вектор движения в опорном изображении. Таким образом, фактически, блок кодирования на фиг. 8 реально является блоком, совмещенным с блоком, для которого ищется предиктор. Однако, по причине упрощения, этот блок в дальнейшем упоминается как "блок кодирования".
В этом примере недетализированный вектор движения MV0 указывает на целочисленную позицию выборки. Гранулярность поиска при детализации вектора движения равна 1 целочисленной выборке, что означает, что поскольку начальной точкой является целочисленная выборка, ищутся только точки целочисленной выборки. В этом примере поиск выполняется в постепенно расширяющемся пространстве поиска. Это означает, что пространство поиска в каждой итерации продвигается вперед, добавляя новые позиции поиска в зависимости от наилучшего направления с точки зрения функции стоимости для ранее протестированных позиций.
Такой подход поясняется в упрощенном виде на фиг. 9. На фиг. 9 начальный вектор движения указывает на центральную точку 810. Пространство поиска постепенно создается вокруг позиции начального вектора движения. На первом этапе тестируются четыре позиции, непосредственно соседствующие с верхней, нижней, левой и правой границами позиции 810, указанной начальным вектором движения, а также позиции 810, указанной начальным вектором движения. Основываясь на направлении, которое приводит в результате к самому низкому значению функции стоимости для протестированных пяти точек, дополнительные позиции, которые должны быть протестированы, добавляются к пространству поиска. В этом примере самое низкое значение функции стоимости можно видеть в точке справа и, таким образом, пространство поиска на втором этапе было расширено на три дополнительные точки в горизонтальном направлении вправо. На втором этапе самое низкое значение функции стоимости можно видеть в точке справа (относительно точки с самым низким значением стоимости на первом этапе), что приводит к дальнейшему расширению пространства поиска на три точки в горизонтальном направлении вправо. На третьем этапе самое низкое значение функции стоимости наблюдается снова в точке справа относительно точки с самым низким значением стоимости на этапе 2 и приводит в результате к расширению пространства поиска еще на три точки в горизонтальном направлении вправо. Согласно примеру, показанному на фиг. 9, выполняются еще три этапа в направлениях вверх, вверх и вправо, в таком порядке. В примере для каждой итерации используется модель ромбовидной формы (состоящая из 5 точек поиска) и пространство поиска расширяется, чтобы завершить точки поиска отсутствия на каждом этапе.
В каждой итерации определения пространства поиска пространство поиска может возрастать на одну или более целочисленных позиций выборки. Возвращаемся теперь к примеру на фиг. 8, где максимальное количество итераций поиска равно 4. Поскольку максимально возможны 4 итерации, чтобы выполнить операцию поиска, все выборки, показанные слева, должны быть извлечены из памяти в случае, если постепенное развитие пространства поиска движется влево. Точно также, необходимо расширение вверх на 4 выборки. Таким образом, пространство поиска расширяется в обоих направлениях (влево-вправо и вверх-вниз), так как детализированный MV может перемещаться в любом направлении и реализации аппаратных средств требуют, чтобы все выборки, которые могут потребоваться, были извлечены из внешней памяти до применения поиска детализации. Если пространство поиска развивается в направлении вниз или вправо, необходимо расширение на 4 дополнительных выборки, поскольку сопоставлению с шаблонами для шаблона, соответствующего размеру блока кодирования (блока предсказания), нужно получить доступ к некоторым из этих выборок. Кроме того, угловые выборки (например, верхняя-правая) также должны быть извлечены из памяти, так как аппаратные реализации обычно не могут извлекать неправильные формы (доступ к прямоугольнику более выполним).
Заметим, что описанное выше итеративное развитие пространства поиска является только примером и правила и количество точек для расширения пространства поиска в каждой итерации могут различаться, то есть, определяться по-другому.
На фиг. 9 также показан сценарий, который может произойти благодаря правилам доступа к внешней памяти, описанным выше. Количество выборок, которые извлекаются из внешней памяти, намного больше, чем количество выборок, которые фактически используются на этапе вычисления. Предполагая, что шаблон здесь является только одной большой выборкой (с целью простоты), белые круги представляют выборки, которые извлекают из внешней памяти и затененные выборки представляют те выборки, которые фактически используются. Однако, такая избыточность необходима, если количество доступов к внешней памяти должно оставаться низким, поскольку, когда запускается обработка текущего блока, фактически необходимые выборки еще не известны.
Заметим, что пространство поиска может также быть определено по-другому, например как стабильная форма, расположенная в позиции, на которую указывает начальный вектор движения. Форма может быть любой формой, такой как квадрат, прямоугольник, ромб и т.п.
На фиг. 10 показан пример, в котором пространство поиска может также содержать дробные выборки. На фиг. 8 и 9 поиск вектора движения был выполнен на целочисленных выборках, приводя в результате к позициям, обозначенным окружностями сплошной линии, содержащимися в окне доступа. Если теперь поиск выполняется на выборке, которая обладает разрешающей способностью полуэлемента растра (меньшая окружность сплошной линии), чтобы сформировать дробную выборку, изображенную на левой стороне, необходимо также извлечь из памяти еще три столбца выборок, предполагая, что интерполяционный фильтр симметричен и имеет восемь коэффициентов для умножения. Кроме того, то же самое должно быть применено на левой стороне (расширение на 3 столбца пикселей) вследствие того факта, что операция поиска симметрична (может перемещаться итеративно влево и вправо), так что дробный пиксель мог располагаться на левой стороне окна.
В результате, благодаря интерполяционной фильтрации количество выборок, необходимых для извлечения из памяти, дополнительно увеличивается и обозначено пунктирной линией, теперь также содержащей пунктирные окружности, представляющие позиции, добавленные, благодаря дробной интерполяции. Аналогично, если позволить также искать половинные позиции в вертикальном направлении, окно выборок, к которым должен быть получен доступ из памяти, должно быть также расширено в вертикальном направлении (не показано в примере на фиг. 10) в верхнюю и нижнюю стороны.
Окно доступа к памяти определяют как прямоугольник, который содержит все выборки, которые должны быть извлечены из памяти, чтобы выполнить поиск вектора движения для блока предсказания (блока кодирования). Окно доступа к памяти содержит не только фактические выборки, которые требуются, но также и все остающиеся выборки, к которым имеется возможность получения доступа во время операции поиска вектора движения. В примере на фиг. 9 поиск вектора движения передвинулся вправо. Но он мог бы также передвинуться в направлении влево, что заранее неизвестно. Соответственно, чтобы не получать доступ к внешней памяти несколько раз, окно доступа к памяти (или окно доступа) содержит все выборки, пригодные для соответствующей обработки.
Чтобы достигнуть этого, настоящее раскрытие выполняет заполнение выборок, которые располагаются за пределами окна доступа к памяти, если они необходимы, например, для интерполяции дробных выборок.
Предоставление заменяющих выборок (заполняющих выборок) может быть дополнительно предпочтительным в связи с сопоставлением с шаблонами в пространствах поиска, которые также содержат дробные выборки. Другими словами, пространство поиска для блока предсказания может содержать по меньшей мере одну дробную позицию выборки со значением, полученным интерполяционной фильтрацией с помощью фильтра с заданным количеством коэффициентов для умножения. Интерполяционная фильтрация использует значения позиции выборки из окна и по меньшей мере одно заменяющее значение, чтобы получить по меньшей мере одно значение дробной позиции выборки.
На фиг. 11 представлены основные этапы известной схемы выполнения получения/детализации вектора движения, как она описана ранее. На первом этапе (этап 1) получают "пространство поиска" по меньшей мере для двух возможных векторов движения (в показанном примере существует девять возможных векторов движения). Как вариант, один из возможных векторов движения, образующих пространство поиска, может рассматриваться как начальный вектор движения (в соответствии с терминологией, используемой в настоящей заявке, также называется "анкерным" вектором движения или возможным анкерным вектором движения). Начальный или анкерный вектор движения может быть, например, вектором движения, который содержится в битовом потоке и явно или неявно сообщается декодеру.
На следующем этапе (этап 2) процесс сопоставления применяется в пространстве поиска, чтобы обнаружить наилучшую точку соответствия в пространстве поиска (другими словами, точку пространства поиска, минимизирующую функцию стоимости, соответствующую самому подходящему возможному вектору движения). В показанном примере применяется двустороннее сопоставление, однако, одинаково могут применяться и другие схемы сопоставления, такие как сопоставление с шаблонами.
На конечном этапе на чертеже (этап 3) конечное предсказание получается путем интерполяции на основе наиболее подходящего возможного вектора движения, выбранного в соответствии с процессом, представленным на этапе 2.
Концепция, представленная на фиг. 11, дополнительно описана на блок-схеме последовательности выполнения операций, показанной на фиг. 12. На фиг. 12 приведен пример специально для случая пары возможных векторов движения, то есть, для двустороннего сопоставления (также может применяться, когда сопоставление с шаблонами используется, например, при двунаправленном предсказании, как показано выше со ссылкой на фиг. 3).
На первом этапе (1310) создается пространство поиска пар возможных векторов движения. Этот этап соответствует этапу 1 на фиг. 11.
На следующем этапе (1320) создают предсказание, формируемое для каждой пары вектора движения в пространстве поиска, применяя интерполяционную фильтрацию. На следующем этапе (1330) для каждой пары векторов движения в пространстве поиска создают (получают) шаблон. Как объясняется выше, этот этап является необязательным, то есть, он необходим только в случае сопоставления с шаблонами, но не требуется для двустороннего сопоставления. На следующем этапе (1340) для каждой пары векторов движения в пространстве поиска вычисляется стоимость сопоставления с шаблонами (или стоимость двустороннего сопоставления), сравнивая блоки предсказания, на которые указывают два вектора движения пары (или блока предсказания одного возможного вектора движения и шаблона). На следующем этапе (1370) результирующая пара векторов движения, минимизирующая функцию стоимости для сопоставления с шаблонами или двустороннего сопоставления (более широко: наилучшего сопоставления, то есть, получаемую как наиболее пригодную посредством процесса сопоставления), выбирается и выводится как пара векторов движения для блока предсказания. В соответствии с терминологией, объясняемой выше, это может называться "детализированной парой векторов движения". Предшествующие этапы 1320, 1330, 1340 и 1370 соответствуют этапу 2 на фиг. 11.
Следующий этап (1380) формирует конечное предсказание с помощью интерполяции, используя пару векторов движения, выбранную на этапе 1370. Этот этап соответствует этапу 3 на фиг. 11.
На фиг. 13 представлена обработка для детализации вектора движения и формирования конечного предсказания в соответствии с примерными вариантами осуществления настоящего изобретения. Существенное различие между подходом, представленным на фиг. 13, и традиционным подходом, представленным на фиг. 11, состоит в том, что подход, соответствующий фиг. 13 настоящего изобретения, использует заполнение выборки как для детализации вектора движения, так и для конечного формирования предиктора, используя интерполяционную фильтрацию.
Использование заполненных выборок для детализации (необязательной) векторов движения показано на дополнительном этапе 2, который ниже будет описан более подробно со ссылкой на фиг. 14-18. Таким образом, даже в случае возможных векторов движения, имеющих дробные координаты (то есть, дробные координаты в пространстве поиска), требуемые возможные блоки для выполнения двустороннего сопоставления или сопоставления с шаблонами могут быть выполнены используя заданное окно с ограниченным доступом, такое же, как в случае пространства поиска, содержащего только целочисленные точки. Фактическое получение функции стоимости, применяя двустороннее сопоставление или сопоставление с шаблонами, выполняется на этапе 3, таком же, как этап 2 на фиг. 11.
Дополнительно, заполнение выборок (также или только) используется на конечном этапе 4 для выполнения фактического формирования предиктора. Этот этап обычно соответствует этапу 3 на фиг. 11, но отличается от него использованием концепции заполнения. Конкретно, в заданном примере к значениям выборки, расположенным в двух крайних правых столбцах и нижней строке, не получен доступ, но они заполняются значениями заполнения выборки, основанными на других доступных значениях выборки.
Количество выборок, которые должны заполняться (заменяться заменяющими значениями из-за недоступности), зависит от разности между окончательно выбранным ("детализированным") вектором движения и, упомянутым начальным ("анкерным") вектором движения. В показанном примере эта разность составляет два пикселя по вертикали и один пиксель по горизонтали. В соответствии с этим, для осуществляемой горизонтально и вертикально интерполяции пикселя в точке пересечения этих двух прямоугольников на этапе 5 на чертеже, значения выборки двух правых столбцов пикселей, а также нижнего ряда пикселей недоступны и должны быть заменены (заполнены) заменяющими значениями в соответствии с заданными правилами, как изложено выше и обсуждается ниже с дополнительными подробностями.
Предпочтительно, если заполнение используется также для поиска на этапе 2, а также используется одно и то же окно доступа для обеих операций интерполяционной фильтрации на этапе 2 и на этапе 4.
Предпочтительно, окна доступа к памяти, которые используются на этапе 2 и на этапе 4 на фиг. 13, определяются, основываясь на конкретном возможном векторе движения в пространстве поиска. Конкретный вектор движения (называемый анкерным вектором движения) может быть, например, вектором движения, который содержится в битовом потоке и явно или неявно сообщается декодеру. Определение для выбора анкерного вектора движения выполняется в соответствии с заданным правилом, которое известно кодеру и декодеру.
На фиг. 14 показано окно доступа к памяти с целью детализации вектора движения. Окно проходит вокруг точки 1010 в центре, который является позицией, на которую указывает начальный вектор движения. Кроме того, дробная позиция 1020 также принадлежит пространству поиска. Однако, дробная позиция 1020 должна интерполироваться с 6 коэффициентами для умножения, используя 3 целочисленных позиции выборки влево от дробной позиции и три целочисленных позиции вправо от дробной позиции. Поскольку дробная позиция 1020 располагается на одной строке с целочисленными позициями выборки, для интерполяции может применяться одномерный фильтр, например, такой, как показано в приведенном выше примере, описанном со ссылкой на фиг. 10. Как можно видеть на фиг. 14, чтобы интерполировать дробную выборку 1020, должны быть необходимы две дополнительных позиции 1030 выборки, которые располагаются вне окна. Чтобы избежать дополнительной загрузки этих выборок из внешней памяти, в соответствии с настоящим раскрытием значения внешних позиций 1030 заменяются значениями, которые получаются на основе выборок внутри окна.
На фиг. 14 показана дробная позиция 1020 выборки, которая находится в середине между двумя целочисленными позициями выборки и, таким образом, является полупиксельной позицией (половиной элемента растра). Однако, настоящее раскрытие может в равной степени быть применено к другим дробным позициям, таким как четвертная или 1/8-позиция. Кроме того, демонстрационная позиция 1020 располагается на горизонтальной линии, соответствующей строке целочисленных позиций выборки так, чтобы горизонталь 1D фильтрация могла использоваться для ее интерполяции. Однако, настоящее раскрытие не ограничивается такими дробными позициями. Скорее дробные позиции могут располагаться на вертикальной линии, соответствующей столбцу целочисленных позиций выборки, так чтобы вертикальная фильтрация 1D могла использоваться для их интерполяции. Кроме того, дробные позиции вообще не должны располагаться на той же самой строке пикселей, что и целочисленные выборки. В таком случае, чтобы интерполировать такие выборки, может использоваться двумерная фильтрация; такая двумерная фильтрация может разделяться на вертикальную и горизонтальную одномерные (1D) фильтрации.
Примеры различных дробных позиций показаны на фиг. 16. В частности, дробная позиция 1 является позицией, для интерполяции которой может применяться фильтрация по горизонтали и по вертикали, потому что она не располагается на линии со строками и столбцами целочисленных позиций выборки. Позиция 2 является позицией, для интерполяции которой используется только горизонтальная фильтрация, тогда как позиция 6 является позицией, для интерполяции которой используется только вертикальная фильтрация. Все дробные позиции, показанные на фиг. 16, могут быть получены, используя только целочисленные позиции внутри окна.
Окно для доступа к памяти может быть определено различными способами. На фиг. 18 показан пример, в котором окно доступа к памяти определяют как расширения EXT на левой/правой или верхней/нижней стороне блока кодирования (соответствующего расположению блока кодирования, заданного начальным вектором движения). Величины расширения могут зависеть от размера и формы блока кодирования или предсказания. На фиг. 18 расширение соответствует 4 выборками в длину в каждом направлении (вверх, вниз, влево, вправо). Однако, заметим, что EXT может также принимать различные значения для различных направлений, в зависимости от размера блока (который может иметь различные размеры в вертикальном и горизонтальном направлениях) и/или формы и размера пространства поиска.
Например, в соответствии с примером, окно определяют как N столбцов целочисленной выборки и М строк целочисленной выборки относительно начального вектора движения блока предсказания, где N и М - ненулевые целочисленные значения. На фиг. 18 N и М указаны, но имеют один и тот же размер. Как упомянуто выше, N и М может иметь различный размер. N и М являются целыми числами и по меньшей мере одно из них не равно нулю. Принятые параметры N и М определяют форму и размер шаблона и могут определять размер окна доступа. В частности, если шаблон имеет T1 строк и T2 столбцов, размер окна доступа к памяти может быть вычислен как (N+T1+N) строк и (M+T2+M) столбцов. Причина в том, что поиск может пройти N выборок слева и справа, давая в результате 2N выборок по горизонтали и М выборок вверх или вниз и, в результате, 2M выборок по вертикали. Кроме того, шаблон может соответствовать T1 x T2 выборок в любых из 2N x 2M позиций выборки.
С другой стороны, для конкретных подходов пространство поиска создает пространство поиска, описанное со ссылкой на фиг. 8 и 9, причем окно доступа к памяти может быть определено с точки зрения максимального количества итераций при детализации (итераций, создающих пространство поиска) и размер шага итерации (с точки зрения максимального расстояния выборки, доступного для каждой итерации), который может быть позже преобразован в максимальную величину смещения влево, вправо, вверх и вниз. Поэтому окно доступа к памяти определяют как максимальное смещение в каждом направлении. Например, 4 итерации, в которых каждая итерация может увеличивать пространство поиска максимум на одну целочисленную позицию выборки, приводит в результате к EXT=4.
Другими словами, в соответствии с этим примером, схема обработки выполнена с возможностью определения детализации начального вектора движения путем сопоставления с шаблонами, используя упомянутый шаблон в пространстве поиска, которое итеративно расширяется в направлении, задаваемом одной (или более) из наилучших позиций сопоставления пространства поиска самой последней итерации, окно определяют заданным количеством итераций. То же самое, с необходимыми изменениями, применяется к случаю двустороннего сопоставления.
Заметим, что, в целом, настоящее раскрытие не ограничивается никакой конкретной формой или видом определения пространства поиска. В другом примере пространство поиска является прямоугольным субокном или может быть равным окну. Определение окна доступа к памяти может быть пригодным, чтобы, по возможности, содержать соответствующий параметр сигнализации в битовом потоке (например, параметр EXT или параметры N и M). Однако, размер окна доступа к памяти может также быть определен в стандарте или получен на основе других параметров кодирования (таких как размер шаблона, размер блока предсказания, разрешающая способность изображения и т. д.). Возвращаясь к фиг. 14, в соответствии с вариантом осуществления, окно доступа к памяти для детализации определяют вокруг позиции, на которую указывает недетализированный вектор 1010 движения. Окно идентифицирует максимальное число пиксельных выборок, к которым необходимо получить доступ из памяти, чтобы выполнить поиск детализации вектора движения. Пространство поиска здесь соответствует окну доступа. Другими словами, для упрощения, в этом примере размер шаблона считается равным 1x1, но может и на практике обычно должен быть больше. Окно доступа к памяти обычно определяют как расширение вокруг блока кодирования. В этом примере имеются 4 выборки слева/справа и 4 выборки сверху/снизу. Если позиция пространства поиска, в настоящий момент тестируемая во время сопоставления с шаблонами или двустороннего сопоставления, требует выборки снаружи окна доступа к памяти, то выборки, необходимые для реконструкции блока кодирования, получаются путем заполнения. Это показано в случае, показанном на фиг. 14 для дробной позиции 1020. Если сопоставление с шаблонами должно выполняться в этой позиции или используя эту позицию, оно должно интерполироваться, используя дополнительные заполненные позиции 1030, расположенные вне окна.
Заполненные выборки могут быть сформированы, используя, например, один из следующих способов:
- ближайшая копия выборки;
- зеркальное отражение вдоль оси интерполяционной фильтрации;
В частности, ближайшая копия выборки относится к подходу, в котором заменяющее значение определяют как равное значению в ближайших из доступных целочисленных позиций выборки. Например, на фиг. 14, два пропущенных значения 1030 позиции должны быть заменены значением выборки, непосредственно соседствующим с правой частью дробной позиции 1020, которая должна быть интерполирована. Однако, следует заметить, что этот подход является только примером и настоящее раскрытие не ограничивается простой копией вышесказанного. Альтернативно, несколько ближайших позиций выборки могут использоваться, чтобы интерполировать отсутствующие выборки 1030. Например, три выборки на границе, ближайшей к отсутствующей выборке, могут использоваться, чтобы интерполировать отсутствующую выборку, например, посредством взвешенного усреднения с весами, установленными обратно пропорциональными расстоянию этих трех выборок от отсутствующей выборки.
Зеркальное отражение относится к подходу, в соответствии с которым заменяющее значение определяют зеркальным отражением значения соответствующей оцененной целочисленной позиции выборки относительно оси интерполяционного фильтра. Например, на фиг. 14, две отсутствующих выборки 1030 могут быть заменены значениями выборок слева от дробной позиции 1020. В частности, вторая выборка справа от дробной позиции 1020 заменяется значением позиции слева от дробной позиции 1020, тогда как третья выборка справа от дробной позиции 1020 заменяется значением третьей слева позиции от дробной позиции 1020.
Заметим, что может также применяться сочетание двух вышеупомянутых подходов, в которых отсутствующие выборки являются функцией зеркально отраженных выборок и ближайшей выборки.
В соответствии с вариантом осуществления, окно формируется всеми целочисленными позициями выборки, доступными для сопоставления с шаблонами или двустороннего сопоставления на целочисленных позициях выборки внутри упомянутого пространства поиска. Это, например, имеет место в случае, показанном на фиг. 14, где дополнительные выборки за пределами окна необходимы только для сопоставления с шаблонами в нецелых, дробных позициях выборки. Другими словами, на фиг. 14 в приведенном выше примере половинная координата элемента растра, которая должна быть найдена, требует выборки вне окна доступа к памяти. В результате, операция заполнения применяется для формирования недоступных выборок. Однако, настоящее изобретение этим не ограничивается.
На фиг. 15 показан альтернативный подход, при котором окно не содержит все целочисленные позиции выборки, доступные для сопоставления с шаблонами в целочисленных позициях выборки в пределах упомянутого пространства поиска. В предыдущих примерах размер блока кодирования для простоты составлял 1x1. На фиг. 15 размер имеет 4x4 целочисленных выборки. В этом примере, если координата поиска (позиция, в которой должно вычисляться сопоставление с шаблонами или двустороннее сопоставление) указывает на целочисленную выборку, заполнение может также быть применено, если некоторые из выборок в блоке лежат вне окна доступа к памяти. Этот подход позволяет еще больше ограничить размер окна.
Подробно: на фиг. 15 показано окно 1120, которое содержит некоторые из доступных выборок. Начальный вектор движения указывает позицию, которая отмечает верхний левый угол блока кодирования. Пространство поиска можно рассматривать здесь как равное окну. Однако, следует заметить, что оно, в принципе, может быть меньшим, чем окно, которое также может иметь смысл, поскольку, если шаблон будет больше, чем 1x1 целочисленных выборки, то обязательно выборки, кроме тех, которые содержатся в пространстве поиска, будут необходимы для выполнения сопоставления шаблонов. Тем не менее, если пространство поиска определяет размер окна, альтернативно, отсутствующие выборки могут быть заполнены. На фиг.15 показана примерная позиция поиска во второй строке и 10-ом столбце окна. Сопоставление с шаблонами с большим целочисленным шаблоном выборки 4х4 требует также пикселей вне окна. Эти выборки, таким образом, заполняются, то есть, заменяются значениями, определяемыми или вычисляемыми на основе выборок внутри окна. Вышеупомянутые подходы с заполнением, такие как ближайший сосед или зеркальное отражение, также могут быть применены.
Окно может быть определено его вертикальным и/или горизонтальным размером в отношении
- пространства поиска, или
- блока с размером блока предсказания, расположенного в позиции начального вектора движения, или
- позиции начального вектора движения.
Пример определения окна показан на фиг. 18 и описывается выше. Он соответствует определению размера окна, основанного на размере блока предсказания, расположенного в позиции начального вектора движения. Альтернативно, размер окна может быть определен в отношении позиции начального вектора в одном или обоих направлениях x и y. Например, окно может быть определено как расположенное вокруг позиции, на которую указывает начальный вектор движения и расширение на А целочисленных выборов в каждом из направлений верх, вниз, влево, вправо. Альтернативно, оно может быть расширено на А целочисленных выборок влево и вправо, соответственно, и на В целочисленных выборок вверх и вниз, соответственно. Возможны дополнительные определения.
Такое же определение размера окна также применимо к случаю заполнения для интерполяционной фильтрации при формировании предиктора. В частности, вертикальный и горизонтальный размеры (то есть, в направлениях х и у) определяются вертикальной и горизонтальной длиной интерполяционного фильтра, который используется для определения предиктора.
На фиг. 17 представлена блок-схема последовательности выполнения операций обработки, показанной на фиг. 13 более подробно. Блок-схема последовательности выполнения операций на фиг. 17 отличается от такой же блок-схемы на фиг. 12, показывающей традиционный процесс, тем, что этапы 1320 и 1380 заменяются этапами 1720 и 1780, соответственно. Эти этапы отличаются от соответствующих этапов на фиг. 12 тем, что для них обоих при интерполяционной фильтрации для формирования возможных блоков предсказания в опорном изображении(-ях), чтобы выполнить двустороннее сопоставление или сопоставление с шаблонами, и при интерполяционной фильтрации для формирования конечного предсказания, применяется заполнение с использованием заменяющих выборок.
Схема обработки, описанная со ссылкой на фиг. 7, может использоваться в кодере и/или декодере, как показано на фиг. 1 и 2.
В частности, может обеспечиваться устройство кодирования для кодирования видеоизображений, разделенных на блоки предсказания, в битовом потоке, причем устройство кодирования содержит: устройство для определения вектора движения для блока предсказания, как описано выше, содержащее схему обработки; и схема кодирования для кодирования разности между блоком предсказания и предиктором, заданным блоком предсказания в позиции, указанной определенным вектором движения, и для формирования битового потока, содержащего кодированную разность и начальный вектор движения.
Дополнительные блоки и функции кодера, описанные выше со ссылкой на фиг. 1, могут также обеспечиваться или реализовываться в схеме обработки.
Соответственно, может быть обеспечено устройство декодирования для декодирования из битового потока видеоизображений, разделенных на блоки предсказания, причем устройство декодирования содержит: блок синтаксического анализа для выбора из битового потока начального вектора движения и кодированной разности между блоком предсказания и предиктором, заданной блоком предсказания в позиции, указанной детализированным вектором движения; устройство для определения детализированного вектора движения для блока предсказания, как описано выше, содержащее схему обработки; и схему декодирования для реконструкции блока предсказания как суммы проанализированной разности и предиктора, заданного блоком предсказания в позиции, основанной на детализированном векторе движения. Например, предиктор может быть задан напрямую позицией детализированного вектора движения. Однако, могут быть дополнительные этапы обработки для получения вектора движения текущего блока предсказания, которые могут дополнительно изменять вектор движения (такие как фильтрация, отсечение, дополнительная детализация и т. п.).
Дополнительные блоки и функции декодера, описанного выше со ссылкой на фиг. 2, могут также быть обеспечены или реализованы в схеме обработки.
Более того, варианты осуществления изобретения были описаны с точки зрения устройства со схемой обработки, чтобы выполнить детализацию вектора движения. Однако, настоящее раскрытие этим не ограничивается, а также обеспечивает соответствующие способы, которые содержат этапы обработки, соответствующие им, для выполнения которых конфигурирована описанная выше схема обработки.
Коэффициенты для умножения соответствуют коэффициентам фильтра. Коэффициенты для умножения соответствуют порядку фильтра. Здесь, предполагается, что фильтр является линейным фильтром. В некоторых примерах фильтр может быть симметричным, то есть, имеющим симметричные коэффициенты. Однако, настоящее раскрытие не ограничивается симметричными фильтрами или линейными фильтрами или фильтрами любого рода. В целом, дробные позиции могут быть получены любым способом, основываясь на соседних выборках.
Способ, соответствующий варианту осуществления, определяет вектор движения для блока предсказания со следующими этапами, показанными на фиг. 19. На этапе 1410 получают начальный вектор движения и шаблон для блока предсказания, сопровождаемые определением детализации начального вектора движения посредством сопоставления с упомянутым шаблоном в пространстве поиска. Пространство поиска располагается в позиции, задаваемой начальным вектором движения. На этапе 1420 определяют окно доступа к памяти. Заметим, что это не должно выполняться явно. Окно доступа к памяти может быть определено заранее и быть известно. Таким образом, этот этап служит, чтобы указать, что знание размера окна доступа к памяти известно. Затем на этапах 1430-1490 выполняется сопоставление с шаблонами.
Сопоставление с шаблонами или двустороннее сопоставление получает доступ к целочисленным позициям выборки внутри заданного окна, причем заданное окно содержит упомянутое пространство поиска и дополнительные целочисленные позиции выборки, доступные для сопоставления с шаблонами или двустороннего сопоставления; и заменяет по меньшей мере одну целочисленную позицию выборки, расположенную за пределами окна, заменяющим значением, основанным по меньшей мере на одной выборке внутри упомянутого окна. Значения целочисленных позиций выборки, к которым получен доступ, а также заменяющие значения используются для выполнения сопоставления с шаблонами. Это показано на фиг. 19: сопоставление с шаблонами или двустороннее сопоставление выполняются для всех позиций в пространства поиска. На этапе 1430 тестируется, требуют ли сопоставление с шаблонами или двустороннее сопоставление в текущей позиции выборки или выборок, которые находятся за пределами окна доступа к памяти. Если ответ утвердительный ("да" на этапе 1430), то заполнение, как оно описано выше, выполняется для выборки или выборок вне окна на этапе 1440. После этого этапа сопоставление с шаблонами или двустороннее сопоставление (то есть, поиск) выполняется на этапе 1450 в текущей позиции, используя заполненные выборки. Альтернативно, если ни одна из необходимых выборок не находится вне окна ("нет" на этапе 1430), сопоставление с шаблонами или двустороннее сопоставление (то есть, поиск) выполняются на этапе 1450 в текущей позиции, используя доступные выборки. Если текущая позиция является последней позицией в пространстве поиска, которая должна быть тестирована ("да" на этапе 1460), то сопоставление с шаблонами заканчивается. В противном случае ("нет" на этапе 1460), на этапе 1470 получают следующую позицию и сопоставление с шаблонами продолжается на этапе 1430, как описано выше, для новой позиции.
После окончания сопоставления с шаблонами идентифицируется позиция наилучшего сопоставления (например, как сохраненная позиция с наименьшей стоимостью).
На фиг. 20 показан альтернативный примерный подход к детализации вектора движения и формированию предиктора, применимый в рамках инфраструктуры вариантов осуществления настоящего изобретения. Разница между этим подходом и подходом, показанным на фиг. 13, состоит в том, что в случае, показанном на фиг. 20, интерполяционная фильтрация с заполнением применяется только для конечного формирования предиктора, используя детализированный вектор движения (пару). Это является этапом 5 на фиг. 20, соответствующим этапу 4 на фиг. 13.
С другой стороны, никакая интерполяционная фильтрация с заполнением не применяется к детализации (поиску) вектора движения, то есть, к этапу 2 на фиг. 13. Вместо этого, подход, показанный на фиг. 20, выполняет операцию округления, чтобы округлить координату, относящуюся к ближайшей целочисленной точки, в случае начального вектора движения (или множества возможных начальных векторов движения, формирующих начальное пространство поиска) до ближайшей целочисленной точки (этап 2 на фиг. 20). Эта операция округления эквивалентна сдвигу с заданным вектором, обозначенным как MV_round_diff, который описывает направление округления. Характеристики операции округления гарантируют, что пространство поиска модифицируется, чтобы получить модифицированное пространство поиска, имеющее только точки с целочисленными координатами. Как следствие, следующий этап 3 получения наилучшей целочисленной точки сопоставления с помощью двустороннего сопоставления (или сопоставления с шаблонами) может быть выполнен на целочисленных координатах, так чтобы никакая интерполяционная фильтрация не была необходимой для формирования предсказаний для сопоставления с шаблонами/двустороннего сопоставления.
Дополнительно, этап 20 содержит этап 4. Этот этап является необязательным. На этапе 4 после того, как на этапе 3 была получена наилучшая целочисленная точка сопоставления в модифицированном пространстве поиска, применение округления идет в обратном направлении, чтобы получить конечный детализированный вектор движения в (начальном) пространстве поиска. Другими словами, вектор сдвига, противоположный вектору сдвига на этапе 2, применяется к наилучшему сопоставленному (детализированному) вектору движения, полученному в результате этапа 3. Если используется необязательный этап 4, конечное предсказание затем получают на основе детализированного вектора движения, полученного в результате этапа 4. Альтернативно, этап 3 пропускается и этап 5 напрямую применяется к вектору движения, полученному в результате этапа 3. Также альтернативно, на основе заданного условия можно принять решение, включить ли или пропустить этап 4.
Блок-схема последовательности выполнения операций, соответствующая подходу, показанному на фиг. 20, представлена на фиг. 21. Опять же, блок-схема последовательности выполнения операций была построена для случая пар векторов движения, а не одиночных векторов движения, которые используются с целью упрощения на фиг. 20.
Начальный этап 1310 является таким же, как на фиг. 20. Следующий этап 2115 соответствует операции округления на этапе 2 на фиг. 20. Обработка, показанная здесь, является, в некоторой степени, обобщением, поскольку изменение начального пространства поиска не ограничивается операцией округления, но здесь, более широко, упоминается, что для каждой пары векторов движения в начальном пространстве поиска формируется представительная пара векторов движения. Операция округления, показанная на фиг. 20, является особым случаем этого отображения начальных векторов движения в пространстве поиска в представительные векторные пары.
Следующие этапы, 2130 (необязательный для сопоставления с шаблонами) и 2140, являются такими же, как на фиг. 17, с единственной разницей, что соответствующие операции выполняются с представительными векторами движения в модифицированном пространстве поиска. Этапы 2150 и 2160 соответствуют этапу 4 на фиг. 20. Этап 2150 описывает установку представительной пары векторов движения, минимизирующую стоимость сопоставления с шаблонами (или стоимость двустороннего сопоставления), как Pair_best_rep.
Этап 2160 (необязательный) соответствует возвращению в прежнее состояние операции округления, показанной на этапе 4 на фиг. 20. На следующем этапе (1370), вектор движения (пара) исходного пространства поиска выводится как вектор движения для блока предсказания. Этапы 1370 и 1780 являются такими же, как на фиг. 17.
Кроме того, способ кодирования обеспечивается для кодирования в битовом потоке видеоизображений, разделенных на блоки предсказания, причем способ кодирования содержит этапы определения вектора движения для блока предсказания, соответствующие любому из способов, описанных выше; а также этап кодирования разности между блоком предсказания и предиктором, заданным блоком предсказания в позиции, основанной на полученном векторе движения, и формирования битового потока, содержащего кодированную разность и начальный вектор движения.
Способ кодирования может дополнительно содержать этапы, описанные со ссылкой на функции блоков, показанных на фиг. 1.
Также дополнительно, обеспечивается способ декодирования для декодирования из битового потока видеоизображений, разделенных на блоки предсказания, причем упомянутый способ декодирования содержит этапы, на которых: синтаксически анализируют из битового потока начальный вектор движения и кодированную разность между блоком предсказания и предиктором, заданным блоком предсказания в позиции, определяемой детализированным вектором движения; определяют детализированный вектор движения для блока предсказания, соответствующего любому из способов, упомянутых выше; и реконструируют блок предсказания как сумму синтаксически проанализированной разности и предиктора, заданного блоком предсказания в позиции, определяемой детализированным вектором движения.
Способ декодирования может дополнительно содержать этапы, описанные со ссылкой на функции блоков, показанных на фиг. 2.
Однако заметим, что фиг. 1 и 2 не должны ограничивать настоящее раскрытие. Они представляют просто не создающий ограничений пример реализации настоящего изобретения в рамках существующих кодера и/или декодера.
Определение вектора движения с помощью заполнения выборки, как описано выше, может быть реализовано как часть кодирования и/или декодирования видеосигнала (движущегося изображения). Однако, определение вектора движения может также без ограничения использоваться для других целей при обработке изображений, таких как обнаружение движения, анализ движения и т. п., при применении для кодирования/декодирования.
Определение вектора движения может быть реализовано устройством. Такое устройство может быть сочетанием программного и аппаратного обеспечения. Например, определение вектора движения может выполняться микросхемой, такой как универсальный процессор или цифровой сигнальный процессор (digital signal processor, DSP) или программируемая логическая интегральная схема (field programmable gate array, FPGA) и т. п. Однако, настоящее изобретение не ограничивается реализацией на программируемых аппаратных средствах. Оно может быть реализовано на специализированной прикладной интегральной схеме (application-specific integrated circuit, ASIC) или сочетанием вышеупомянутых аппаратных компонент.
Определение вектора движения может также быть реализовано программными командами, хранящимися на считываемом компьютером носителе. Программа, когда она исполняется, заставляет компьютер выполнять этапы описанных выше способов. Считываемый компьютерный носитель может быть любым носителем, на котором хранится программа, таким как DVD, CD, USB (флэш-память), жесткий диск, запоминающее устройство на сервере, доступное через сеть, и т. д.
Кодер и/или декодер могут быть реализованы в различных устройствах, в том числе, в телевизоре, телевизионной приставке, персональном компьютере, планшете, смартфоне, и т. п., то есть, с помощью любого записывающего, кодирующего, транскодирующего, декодирующего или воспроизводящего устройства. Это может быть программное обеспечение или приложение, реализующие этапы способа и хранящиеся/действующие на процессоре, содержащемся в электронном устройстве, таком как те, которые упомянуты выше.
Подводя итог, настоящее раскрытие относится к определению вектора движения, используя сопоставление с шаблонами или двустороннее сопоставление и формирование предиктора, основываясь на векторе движения. Сопоставление с шаблонами или двустороннее сопоставление и/или формирование предиктора используют интерполяционную фильтрацию. Операция интерполяционной фильтрации получает доступ к целочисленным позициям выборки внутри окна, причем окно содержит упомянутое пространство поиска и дополнительные целочисленные позиции выборки, доступные для сопоставления с шаблонами, заполняет по меньшей мере одну целочисленную позицию выборки, расположенную вне окна, заполненным значением выборки, которое основывается по меньшей мере на одной выборке внутри упомянутого окна, и использует оцененные значения целочисленных позиций выборки, а также заполненные значения выборки, чтобы выполнить сопоставление с шаблонами или формирование предиктора и/или двустороннее сопоставление.
Далее представляются дополнительные варианты осуществления настоящего изобретения. Следует заметить, что нумерация, используемая в следующем разделе, не обязательно должна совпадать с нумерацией, используемой в предыдущих разделах.
Вариант 1 осуществления. Устройство кодирования для кодирования блока предсказания видеоизображения в битовый поток (171), причем устройство кодирования содержит:
схему (600) обработки, выполненную с возможностью
определения вектора движения для блока (165) предсказания с помощью:
получения по меньшей мере одного начального вектора движения; и
определения детализации начального вектора движения на основе пространства поиска возможных векторов движения, чтобы получить детализированный вектор движения, где упомянутое пространство поиска располагается в позиции (810), задаваемой начальным вектором движения;
кодирования разности (105) между блоком предсказания и предиктором, заданным блоком предсказания в позиции, основанной на определенном векторе движения и для формирования битового потока (171), содержащего кодированную разность и начальный вектор движения; и
определения предиктора, соответствующего вектору движения, используя интерполяционную фильтрацию с помощью интерполяционного фильтра, где упомянутая интерполяционная фильтрация
- получает доступ к значениям выборки в целочисленных позициях выборки в пределах заданного окна,
- заменяет по меньшей мере одно значение выборки в целочисленной позиции выборки, расположенной вне окна, заменяющим значением, которое основано по меньшей мере на одной выборке внутри упомянутого окна, и
- использует значения целочисленных позиций выборки, к которым получен доступ, в качестве заменяющих значений, чтобы выполнить интерполяционную фильтрацию.
Вариант 2 осуществления. Устройство декодирования для декодирования из битового потока (171) видеоизображений, разделенных на блоки предсказания, причем устройство декодирования содержит схему обработки, выполненную с возможностью:
синтаксического анализа из битового потока начального вектора движения и кодированной разности между блоком предсказания и предиктором, задаваемым блоком предсказания в позиции, определяемой детализированным вектором движения;
определения вектора движения для блока предсказания посредством:
получения по меньшей мере одного начального вектора движения; и
определения детализации начального вектора движения на основе пространства поиска возможных векторов движения, чтобы получить детализированный вектор движения, где упомянутое пространство поиска располагается в позиции (810), задаваемой данный начальным вектором движения; и
реконструкции блока предсказания как суммы проанализированной разности и предиктора, задаваемого блоком предсказания в позиции, определенной детализированным вектором движения, определенным схемой (600) обработки для определения вектора движения;
в котором упомянутая схема обработки дополнительно выполнена с возможностью определения предиктора, соответствующего детализированному вектору движения, используя интерполяцию с помощью интерполяционного фильтра, в котором упомянутая интерполяция
- получает доступ к значениям выборки в целочисленных позициях выборки в пределах заданного окна,
- заменяет по меньшей мере одно значение выборки в целочисленной позиции выборки, расположенной вне окна, на заменяющее значение, которое основано по меньшей мере на одной выборке внутри упомянутого окна, и
- использует значения целочисленных позиций выборки, к которым получен доступ, в качестве заменяющих значений, чтобы выполнить интерполяцию.
Вариант 3 осуществления. Устройство по варианту 1 или 2 осуществления, в котором заменяющее значение определяют посредством зеркального отражения относительно оси интерполяционного фильтра значения соответствующей оцененной целочисленной позиции выборки.
Вариант 4 осуществления. Устройство по любому из вариантов 1-3 осуществления, в котором интерполяционный фильтр является одномерным или разделяемым двумерным фильтром.
Вариант 5 осуществления. Устройство по любому из вариантов 1-4 осуществления, в котором окно формируется всеми целочисленными позициями выборки, доступными для получения предиктора, задаваемого блоком предсказания в позиции, определяемой начальным вектором движения.
Вариант 6 осуществления. Устройство по любому из вариантов 1-5 осуществления, в котором окно определяют его вертикальным и/или горизонтальным размером относительно по меньшей мере одного из следующего:
- блок с размером блока предсказания, расположенного в позиции начального вектора движения,
- позиция начального вектора движения, и
- вертикальная и горизонтальная длина интерполяционного фильтра, используемого для определения предиктора.
Вариант 7 осуществления. Устройство по любому из вариантов 1, 2 или 4-6 осуществления, в котором заменяющее значение определяют как равное значению в ближайшей из целочисленных позиций выборки, к которым получен доступ.
Вариант 8 осуществления. Устройство по любому из вариантов 1-7 осуществления, в котором количество значений выборки, которые должны быть заменены, зависит от разности между начальным вектором движения и детализированным вектором движения.
Вариант 9 осуществления. Устройство по любому из предшествующих вариантов осуществления, в котором упомянутая схема (600) обработки выполнена с возможностью определения детализации начального вектора движения посредством сопоставления с шаблонами или двустороннего сопоставления, в котором
- упомянутое сопоставление с шаблонами или двустороннее сопоставление содержит:
- получение доступа к значениям выборки в целочисленных позициях выборки внутри дополнительного заданного окна (1120), причем дополнительное заданное окно (1120) содержит упомянутое пространство поиска и дополнительные целочисленные позиции выборки, доступные для сопоставления с шаблонами или двустороннего сопоставления,
- замена по меньшей мере одного значения (1030) выборки в целочисленной позиции выборки, расположенной вне дополнительного окна, заменяющим значением, которое основано по меньшей мере на одной выборке внутри упомянутого дополнительного окна, и
- использование получивших доступ значений целочисленных позиций выборки в качестве заменяющих значений, для выполнения сопоставления с шаблонами или двустороннего сопоставления.
Вариант 10 осуществления. Устройство по варианту 9 осуществления, в котором
упомянутое пространство поиска содержит по меньшей мере одну дробную позицию выборки (1, 2, 6) со значением, полученным интерполяционной фильтрацией с помощью фильтра с заданными коэффициентами для умножения; и
интерполяционная фильтрация использует упомянутые получившие доступ значения целочисленных позиций выборки и по меньшей мере одно заменяющее значение, чтобы получить упомянутое по меньшей мере одно значение дробной позиции выборки.
Вариант 11 осуществления. Устройство по варианту 10 осуществления, в котором заменяющее значение, используемое при сопоставлении с шаблонами или при двустороннем согласовании, определяют зеркальным отражением относительно оси фильтра значения соответствующей получившей доступ целочисленной позиции выборки.
Вариант 12 осуществления. Устройство по варианту 9 или 10 осуществления, в котором заменяющее значение, используемое при сопоставлении с шаблонами или при двустороннем согласовании, определяют как равное значению в ближайшей из получивших доступ целочисленных позиций выборки.
Вариант 13 осуществления. Устройство по любому из вариантов 9–12 осуществления, в котором дополнительное заданное окно (1120) определяют его вертикальным и/или горизонтальным размером относительно по меньшей мере одного из:
- пространства поиска,
- блока с размером блока предсказания, расположенного в начальной позиции вектора движения,
- начальная позиция вектора движения.
Вариант 14 осуществления. Устройство по любому из вариантов 9-13 осуществления, в котором упомянутое дополнительное заданное окно (1120) является таким же, как упомянутое заданное окно.
Вариант 15 осуществления. Устройство по любому из вариантов 1-14 осуществления, в котором упомянутую детализацию определяют двусторонним сопоставлением и упомянутая схема обработки выполнена с возможностью получения по меньшей мере двух начальных векторов движения, указывающих позиции в различных опорных изображениях (Ref0, Ref1) и формирующих пару начальных векторов движения (Pair_0, Pair_1, …, Pair_N).
Вариант 16 осуществления. Устройство по любому из вариантов 1-14 осуществления, в котором упомянутую детализацию определяют сопоставлением с шаблонами, причем упомянутая схема обработки дополнительно выполнена с возможностью
получения шаблона для блока предсказания и
определения детализации начального вектора движения посредством сопоставления с упомянутым шаблоном в упомянутом пространстве поиска.
Вариант 17 осуществления. Способ кодирования для кодирования видеоизображений, разделенных на блоки предсказания, в битовом потоке, причем упомянутый способ кодирования содержит этапы, на которых:
определяют вектор движения для блока предсказания, где упомянутое определение содержит этапы, на которых
получают (1310, 1410) по меньшей мере один начальный вектор движения; и
определяют (1320, 1330, 1340, 1720; 2115, 2120, 2130, 2140, 2150, 2160) детализацию начального вектора движения на основе пространства поиска возможных векторов движения, чтобы получить детализированный вектор движения, где упомянутое пространство поиска располагается в позиции, заданной начальным вектором движения;
кодируют разность между блоком предсказания и предиктором, заданным блоком предсказания в позиции, основанной на определенном векторе движения, и формируют битовый поток, содержащий кодированную разность и начальный вектор движения; и
определяют (1780) предиктор, соответствующий вектору движения, используя интерполяционную фильтрацию с помощью интерполяционного фильтра, где упомянутая интерполяционная фильтрация
- получает доступ к значениям выборки в целочисленных позициях выборки в пределах заданного окна,
- заменяет по меньшей мере одно значение выборки в целочисленной позиции выборки, расположенной вне окна, заменяющим значением, основанным по меньшей мере на одной выборке внутри упомянутого окна, и
- использует получившие доступ значения целочисленных позиций выборки, а также заменяющие значения, для выполнения интерполяционной фильтрации.
Вариант 18 осуществления. Способ декодирования для декодирования из битового потока видеоизображений, разделенных на блоки предсказания, причем упомянутое декодирование содержит этапы, на которых
синтаксически анализируют из битового потока начальный вектор движения и кодированную разность между блоком предсказания и предиктором, заданным блоком предсказания, в позиции, определяемой детализированным вектором движения;
определяют вектор движения для блока предсказания, где упомянутое определение содержит этапы, на которых
получают (1310, 1410) по меньшей мере один начальный вектор движения; и
определяют (1320, 1330, 1340, 1720; 2115, 2120, 2130, 2140, 2150, 2160) детализацию начального вектора движения на основе пространства поиска возможных векторов движения, чтобы получить детализированный вектор движения, где упомянутое пространство поиска располагается в позиции, задаваемой начальным вектором движения;
реконструируют блок предсказания как сумму проанализированной разности и предиктора, задаваемого блоком предсказания, в позиции, определенной детализированным вектором движения, определяемым этапом определения вектора движения; и
определяют (1780) предиктор, соответствующий детализированному вектору движения, используя интерполяцию с помощью интерполяционного фильтра, где упомянутая интерполяция
- получает доступ к значениям выборки в целочисленных позициях выборки внутри заданного окна,
- заменяет по меньшей мере одно значение выборки в целочисленной позиции выборки, расположенной вне окна, заменяющим значением, основанным по меньшей мере на одной выборке внутри упомянутого окна, и
- использует получившие доступ значения целочисленных позиций выборки, а также заменяющие значения для выполнения интерполяции.
Вариант 19 осуществления. Способ по варианту 17 или 18 осуществления, в котором заменяющее значение определяют посредством зеркального отражения относительно оси интерполяционного фильтра значения соответствующей оцененной целочисленной позиции выборки.
Вариант 20 осуществления. Способ по любому из вариантов 17–19 осуществления, в котором интерполяционный фильтр является одномерным или разделяемым двумерным фильтром.
Вариант 21 осуществления. Способ по любому из вариантов 17-20 осуществления, в котором окно формируется всеми целочисленными позициями выборки, доступными для получения предиктора, задаваемого блоком предсказания, в позиции, определяемой начальным вектором движения.
Вариант 22 осуществления. Способ по любому из вариантов 17-21 осуществления, в котором окно определяют его вертикальным и/или горизонтальным размером относительно по меньшей мере одного из следующего:
- блок с размером блока предсказания, расположенного в начальной позиции вектора движения,
- начальная позиция вектора движения, и
- вертикальная и горизонтальная длина интерполяционного фильтра, который используется для определения предиктора.
Вариант 23 осуществления. Способ по любому из вариантов 17, 18 или 20–22 осуществления, в котором заменяющее значение определяют как равное значению в ближайшей из целочисленных позиций выборки, к которым получен доступ.
Вариант 24 осуществления. Способ по любому из вариантов 17–23 осуществления, в котором количество значений выборки, которые должны быть заменены, зависит от разности между начальным вектором движения и детализированным вектором движения.
Вариант 25 осуществления. Способ по любому из вариантов 17-24 осуществления, в котором упомянутый этап (1320, 1330, 1340, 1720; 2115, 2120, 2130, 2140, 2150, 2160) определения детализации определяет детализацию начального вектора движения посредством сопоставления с шаблоном или двустороннего сопоставления, в котором
- упомянутое сопоставление с шаблоном или двустороннее сопоставление:
- получает доступ к значениям выборки в целочисленных позициях выборки внутри дополнительного заданного окна, причем дополнительное заданное окно содержит упомянутое пространство поиска и дополнительные целочисленные позиции выборки, доступные для сопоставления с шаблонами или двустороннего сопоставления,
- заменяет (1440) по меньшей мере одно значение выборки в целочисленной позиции выборки, расположенной вне дополнительного окна, заменяющим значением, которое основано по меньшей мере на одной выборке внутри упомянутого дополнительного окна, и
- использует (1450) значения целочисленных позиций выборки, к которым получен доступ, а также заменяющие значения, чтобы выполнить сопоставление с шаблонами или двустороннее сопоставление.
Вариант 26 осуществления. Способ по варианту 25 осуществления, в котором
упомянутое пространство поиска содержит по меньшей мере одну дробную позицию выборки со значением, полученным посредством интерполяционной фильтрации с помощью фильтра с заданным значением коэффициентов для умножения;
и интерполяционная фильтрация использует упомянутые значения с полученным доступом к целочисленным позициям выборки и по меньшей мере одно заменяющее значение, чтобы получить упомянутое по меньшей мере одно значение дробной позиции выборки.
Вариант 27 осуществления. Способ по варианту 26 осуществления, в котором заменяющее значение, используемое при сопоставлении с шаблонами или при двустороннем сопоставлении, определяют путем зеркального отражения относительно оси фильтра значения соответствующей оцененной целочисленной позиции выборки.
Вариант 28 осуществления. Способ по варианту осуществления 26 или 27, в котором заменяющее значение, используемое при сопоставлении с шаблонами или при двустороннем сопоставлении определяют как равное значению, ближайшему к целочисленной позиции выборки, к которой получен доступ.
Вариант 29 осуществления. Способ по любому из вариантов 25-28 осуществления, в котором дополнительное заданное окно определяют его вертикальным и/или горизонтальным размером относительно по меньшей мере одного из:
- пространства поиска,
- блока с размером блока предсказания, расположенного в позиции начального вектора движения,
- позиции начального вектора движения.
Вариант 30 осуществления. Способ по любому из вариантов 25-29 осуществления, в котором упомянутое дополнительное заданное окно является таким же, как и упомянутое заданное окно.
Вариант 31 осуществления. Способ по любому из вариантов 17-30 осуществления, в котором упомянутая детализация определяют двусторонним сопоставлением и на упомянутом этапе получения получают по меньшей мере два начальных вектора движения, указывающих позиции в различных опорных изображениях и формирующих пару начальных векторов движения.
Вариант 32 осуществления. Способ по любому из вариантов 17-31 осуществления, в котором упомянутая детализация определяют сопоставлением с шаблонами и упомянутый этап определения вектора движения дополнительно содержит этапы, на которых
получают (1330; 2130) шаблон для блока предсказания и
определяют (1340; 2140) детализацию начального вектора движения посредством сопоставления с упомянутым шаблоном в упомянутом пространстве поиска.
Вариант 33 осуществления. Считываемый компьютером носитель для хранения команд, которые, когда исполняются процессором, заставляют процессор выполнять способ, соответствующий любому из вариантов 17-32 осуществления.