СПОСОБ И УСТРОЙСТВО ДЛЯ КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ ВЕКТОРА ДВИЖЕНИЯ НА ОСНОВАНИИ СОКРАЩЕННЫХ ПРЕДСКАЗАТЕЛЕЙ-КАНДИДАТОВ ВЕКТОРА ДВИЖЕНИЯ
METHOD AND DEVICE FOR CODING AND DECODING THE MOTION VECTOR BASED ON THE REDUCED PREDICTORS-CANDIDATES OF THE MOTION VECTOR

Область техники
[1] Устройства и способы, в соответствии с иллюстративными вариантами осуществления, относятся к кодированию и декодированию вектора движения и, в частности, к предсказательному кодированию и декодированию вектора движения текущего блока.
Уровень техники
[2] В таком кодеке, как «усовершенствованное кодирование видеосигнала» MPEG-4 H.264/MPEG-4 (AVC), векторы движения ранее закодированных блоков, соседствующих с текущим блоком, можно использовать для предсказания вектора движения текущего блока. Медиана векторов движения ранее закодированных блоков, соседствующих с левой стороной, верхней стороной и правой верхней стороной текущего блока используется в качестве предсказателя вектора движения текущего блока. Вектор движения текущего блока непосредственно не кодируется а, вместо этого, кодируется разность между вектором движения и предсказателем вектора движения.
Раскрытие изобретения
Решение проблемы
[3] Один или более иллюстративных вариантов осуществления предусматривают способ и устройство для предсказательного кодирования и декодирования вектора движения, и машиночитаемый носитель записи, на котором записана компьютерная программа для выполнения способа.
Преимущественные результаты изобретения
[4] Согласно иллюстративному варианту осуществления, когда предсказатели-кандидаты вектора движения используются для предсказательного кодирования и декодирования вектора движения, количество предсказателей-кандидатов вектора движения можно уменьшить для предсказательного кодирования и декодирования вектора движения. Соответственно, информацию, необходимую для указания предсказателя вектора движения, используемого для предсказания вектора движения текущего блока из предсказателей-кандидатов вектора движения, можно кодировать с минимальным числом битов, благодаря чему коэффициент сжатия кодирования/декодирования вектора движения увеличивается что позволяет повышать коэффициент сжатия при кодировании/декодировании изображения.
Краткое описание чертежей
[5] Вышеперечисленные и другие признаки и преимущества станут ясны из подробного описания иллюстративных вариантов осуществления со ссылкой на прилагаемые чертежи, в которых:
[6] фиг. 1 - блок-схема устройства для кодирования изображения, согласно иллюстративному варианту осуществления;
[7] фиг. 2 - блок-схема устройства для декодирования изображения, согласно иллюстративному варианту осуществления;
[8] фиг. 3 иллюстрирует иерархические единицы кодирования согласно иллюстративному варианту осуществления;
[9] фиг. 4 - блок-схема кодера изображения на основе единицы кодирования, согласно иллюстративному варианту осуществления;
[10] фиг. 5 - блок-схема декодера изображения на основе единицы кодирования, согласно иллюстративному варианту осуществления;
[11] фиг. 6 иллюстрирует максимальную единицу кодирования, единицу кодирования более низкого уровня и единицу предсказания, согласно иллюстративному варианту осуществления;
[12] фиг. 7 иллюстрирует единицу кодирования и единицу преобразования, согласно иллюстративному варианту осуществления;
[13] фиг. 8a – 8d иллюстрируют формы разделения единицы кодирования, единицы предсказания и единицы преобразования, согласно иллюстративному варианту осуществления;
[14] фиг. 9 - блок-схема устройства для кодирования вектора движения, согласно иллюстративному варианту осуществления;
[15] фиг. 10a и 10b иллюстрируют предсказатели-кандидаты вектора движения, согласно иллюстративному варианту осуществления;
[16] фиг. 10c-10e иллюстрируют блоки различных размеров, которые соседствуют с текущим блоком, согласно иллюстративному варианту осуществления;
[17] фиг. 11a-11c иллюстрируют предсказатели-кандидаты вектора движения, согласно другому иллюстративному варианту осуществления;
[18] фиг. 12 иллюстрирует способ уменьшения количества предсказателей-кандидатов вектора движения, согласно иллюстративному варианту осуществления;
[19] фиг. 13a-13d иллюстрируют местоположение текущего блока, включенного в единицу кодирования заранее определенного размера, согласно иллюстративному варианту осуществления;
[20] фиг. 14 - блок-схема устройства для декодирования вектора движения, согласно иллюстративному варианту осуществления;
[21] фиг. 15 - блок-схема, иллюстрирующая способ кодирования вектора движения, согласно иллюстративному варианту осуществления; и
[22] фиг. 16 - блок-схема, иллюстрирующая способ декодирования вектора движения, согласно иллюстративному варианту осуществления.
Предпочтительные варианты осуществления изобретения
[23] Согласно аспекту иллюстративного варианта осуществления, предусмотрен способ кодирования вектора движения, причем способ включает в себя этапы, на которых: генерируют информацию о векторе движения на основании вектора движения текущего блока и предсказателя вектора движения текущего блока путем оценивания вектора движения текущего блока и определения первого предсказателя-кандидата вектора движения из множества предсказателей-кандидатов вектора движения в качестве предсказателя вектора движения текущего блока на основании результата оценивания; генерируют виртуальный вектор движения с использованием второго предсказателя-кандидата вектора движения из множества предсказателей-кандидатов вектора движения и информации о векторе движения, генерируют векторные разности между виртуальным вектором движения и множеством предсказателей-кандидатов вектора движения, сравнивают векторные разности с информацией о векторе движения, и выборочно исключают второй предсказатель-кандидат вектора движения из множества предсказателей-кандидатов вектора движения; и кодируют информацию о векторе движения и информацию о предсказателе вектора движения текущего блока.
[24] Согласно аспекту другого иллюстративного варианта осуществления, предусмотрен способ декодирования вектора движения, причем способ включает в себя этапы, на которых: декодируют информацию о векторе движения текущего блока; генерируют виртуальный вектор движения с использованием заранее определенного предсказателя-кандидата вектора движения из множества предсказателей-кандидатов вектора движения и декодированной информации о векторе движения, генерируют векторные разности между виртуальным вектором движения и множеством предсказателей-кандидатов вектора движения, сравнивают сгенерированные векторные разности с декодированной информацией о векторе движения, и выборочно исключают заранее определенный предсказатель-кандидат вектора движения из множества предсказателей-кандидатов вектора движения; и определяют предсказатель вектора движения предсказателей-кандидатов вектора движения, которые не исключаются из множества предсказателей-кандидатов вектора движения, в качестве предсказателя вектора движения текущего блока и восстанавливают вектор движения текущего блока на основании определенного предсказателя вектора движения и декодированной информации о векторе движения.
[25] Согласно аспекту другого иллюстративного варианта осуществления, предусмотрено устройство для кодирования вектора движения, причем устройство включает в себя: блок оценки вектора движения, который генерирует информацию о векторе движения на основании вектора движения текущего блока и предсказателя вектора движения текущего блока путем оценивания вектора движения текущего блока и определяет первый предсказатель-кандидат вектора движения из множества предсказателей-кандидатов вектора движения в качестве предсказателя вектора движения текущего блока на основании результата оценивания; блок определения кандидата, который генерирует виртуальный вектор движения с использованием второго предсказателя-кандидата вектора движения из множества предсказателей-кандидатов вектора движения и информации о векторе движения, генерирует векторные разности между виртуальным вектором движения и множеством предсказателей-кандидатов вектора движения, сравнивает векторные разности с информацией о векторе движения, и выборочно исключает второй предсказатель-кандидат вектора движения из множества предсказателей-кандидатов вектора движения; и кодер вектора движения, который кодирует информацию о векторе движения и информацию о предсказателе вектора движения текущего блока.
[26] Согласно аспекту другого иллюстративного варианта осуществления, предусмотрено устройство для декодирования вектора движения, причем устройство включает в себя: декодер вектора движения, который декодирует информацию о векторе движения текущего блока; блок определения кандидата, который генерирует виртуальный вектор движения с использованием заранее определенного предсказателя-кандидата вектора движения из множества предсказателей-кандидатов вектора движения и декодированной информации о векторе движения, генерирует векторные разности между виртуальным вектором движения и множеством предсказателей-кандидатов вектора движения, сравнивает сгенерированные векторные разности с декодированной информацией о векторе движения, и выборочно исключает заранее определенный предсказатель-кандидат вектора движения из множества предсказателей-кандидатов вектора движения; и блок восстановления вектора движения, который определяет предсказатель-кандидат вектора движения предсказателей-кандидатов вектора движения, которые не исключаются из множества предсказателей-кандидатов вектора движения, в качестве предсказателя вектора движения текущего блока и восстанавливает вектор движения текущего блока на основании определенного предсказателя вектора движения и декодированной информации о векторе движения.
[27] Согласно аспекту другого иллюстративного варианта осуществления, предусмотрен машиночитаемый носитель записи, в котором содержится компьютерная программа для выполнения способов кодирования и декодирования вектора движения.
Варианты осуществления изобретения
[28] Далее, один или более иллюстративных вариантов осуществления будет описан более полно со ссылкой на прилагаемые чертежи. Такие выражения, как “по меньшей мере, один из”, предшествующие списку элементов, изменяют список элементов в целом и не изменяют отдельные элементы списка.
[29] Далее, 'изображение' может обозначать неподвижное изображение для видео или движущееся изображение, то есть само видео.
[30] на фиг. 1 показана блок-схема устройства 100 для кодирования изображения, согласно иллюстративному варианту осуществления.
[31] Согласно фиг. 1, устройство 100 для кодирования изображения включает в себя блок 110 разделения на максимальные единицы кодирования, блок 120 определения глубины кодирования, кодер 130 данных изображения, и кодер 140 информации кодирования.
[32] Блок 110 разделения на максимальные единицы кодирования может делить текущий кадр или срез на основе максимальной единицы кодирования, то есть единицы кодирования наибольшего размера. Таким образом, блок 110 разделения на максимальные единицы кодирования может делить текущий кадр или срез на по меньшей мере одну максимальную единицу кодирования.
[33] Согласно иллюстративному варианту осуществления, единицу кодирования можно представлять с использованием максимальной единицы кодирования и глубины. Как описано выше, максимальная единица кодирования указывает единицу кодирования, имеющую наибольший размер из единиц кодирования текущего кадра, и глубина указывает степень иерархического снижения единицы кодирования. С увеличением глубины, единица кодирования может уменьшаться от максимальной единицы кодирования до минимальной единицы кодирования, причем глубина максимальной единицы кодирования определяется как минимальная глубина, и глубина минимальной единицы кодирования определяется как максимальная глубина. Поскольку размер единицы кодирования уменьшается от максимальной единицы кодирования с увеличением глубины, единица кодирования более низкого уровня k-й глубины может включать в себя множество единиц кодирования более низкого уровня (k+n)-й глубины (k и n - целые числа, большие или равные 1).
[34] Согласно увеличению размера кадра, подлежащего кодированию, кодирование изображения в более крупной единице кодирования может приводить к более высокому коэффициенту сжатия изображения. Однако если более крупная единица кодирования фиксирована, эффективное кодирование изображения, отражающее непрерывно изменяющиеся характеристики изображения, может оказаться невозможным.
[35] Например, при кодировании гладкой области, например, моря или неба, чем больше единица кодирования, тем больше можно повысить коэффициент сжатия. Однако при кодировании сложной области, например, людей или зданий, чем меньше единица кодирования, тем больше можно повысить коэффициент сжатия.
[36] Соответственно, согласно иллюстративному варианту осуществления, для каждого кадра или среза можно устанавливать разную максимальную единицу кодирования и разную максимальную глубину. Поскольку максимальная глубина обозначает максимальное число раз, в которое может уменьшаться единица кодирования, размер каждой минимальной единицы кодирования, включенной в максимальную единицу кодирования, можно устанавливать по-разному согласно максимальной глубине.
[37] Блок 120 определения глубины кодирования определяет максимальную глубину. Максимальную глубину можно определять на основании вычисления издержек «скорость-искажение» (RD). Максимальную глубину можно определять по-разному для каждого кадра или среза или для каждой максимальной единицы кодирования. Определенная максимальная глубина поступает на кодер 140 информации кодирования, и данные изображения согласно максимальным единицам кодирования поступают на кодер 130 данных изображения.
[38] Максимальная глубина может обозначать единицу кодирования наименьшего размера, которая может быть включена в максимальную единицу кодирования, то есть минимальную единицу кодирования. Другими словами, максимальная единица кодирования может делиться на единицы кодирования более низкого уровня, имеющие разные размеры согласно разным глубинам, что будет описано ниже со ссылкой на фиг. 8a и 8b. Кроме того, единицы кодирования более низкого уровня, имеющие разные размеры, которые включены в максимальную единицу кодирования, можно предсказывать или преобразовывать на основе единиц обработки, имеющих разные размеры. Преобразование осуществляется для преобразования пиксельных значений пространственной области в коэффициенты частотной области и может представлять собой дискретное косинусное преобразование или преобразование Карунена-Лоэва (KLT). Другими словами, устройство 100 для кодирования изображения может осуществлять множество операций обработки для кодирования изображения на основе единиц обработки, имеющих различные размеры и различные формы. Для кодирования данных изображения осуществляются, такие операции обработки, как по меньшей мере одно из предсказание, преобразование и статистическое кодирование, причем для каждой операции можно использовать единицы обработки, имеющие одинаковый размер или разные размеры.
[39] Например, устройство 100 для кодирования изображения может выбирать единицу обработки, которая отличается от единицы кодирования для предсказания единицы кодирования.
[40] Когда размер единицы кодирования равен 2N×2N (где N - положительное целое число), единицами обработки для предсказания могут быть 2N×2N, 2N×N, N×2N и N×N. Другими словами, предсказание движения может осуществляться на основе единицы обработки, имеющей такую форму, что по меньшей мере одна из высоты и ширины единицы кодирования делится на две равные части. В дальнейшем, единица обработки, являющаяся основой предсказания, определяется как ‘единица предсказания’.
[41] Режим предсказания может представлять собой по меньшей мере одно из внутреннего режима, внешнего режима и режима пропуска, и конкретный режим предсказания может осуществляться только для единицы предсказания, имеющей конкретный размер или конкретную форму. Например, внутренний режим может осуществляться только для единицы предсказания, размерами 2Nx2N и NxN и квадратной формы. Кроме того, режим пропуска может осуществляться только для единицы предсказания размером 2Nx2N. Если в единице кодирования существует множество единиц предсказания, то после осуществления предсказания для каждой единицы предсказания можно выбрать режим предсказания с наименьшими ошибками кодирования.
[42] Альтернативно, устройство 100 для кодирования изображения может осуществлять преобразование данных изображения на основе единицы обработки, отличающейся размером от единицы кодирования. Для преобразования в единице кодирования, преобразование может осуществляться на основе единицы обработки, размер которой меньше или равен размеру единицы кодирования. В дальнейшем, единица обработки, являющаяся основой преобразования, определяется как ‘единица преобразования’.
[43] Блок 120 определения глубины кодирования может определять единицы кодирования более низкого уровня, включенные в максимальную единицу кодирования, с использованием оптимизации RD на основании множителя Лагранжа. Другими словами, блок 120 определения глубины кодирования может определять форму множественных единиц кодирования более низкого уровня, полученных разделением максимальной единицы кодирования, причем множество единиц кодирования более низкого уровня имеют различные размеры согласно их глубинам. Кодер 130 данных изображения выводит битовый поток путем кодирования максимальной единицы кодирования на основании форм разделения, определенных блоком 120 определения глубины кодирования.
[44] Кодер 140 информации кодирования кодирует информацию о режиме кодирования максимальной единицы кодирования, определенной блоком 120 определения глубины кодирования. Другими словами, кодер 140 информации кодирования выводит битовый поток, кодируя информацию о форме разделения максимальной единицы кодирования, информацию о максимальной глубине и информацию о режиме кодирования единицы кодирования более низкого уровня для каждой глубины. Информация о режиме кодирования единицы кодирования более низкого уровня может включать в себя информацию о единице предсказания единицы кодирования более низкого уровня, информацию о режиме предсказания для каждой единицы предсказания и информацию о единице преобразования единицы кодирования более низкого уровня.
[45] Информация о форме разделения максимальной единицы кодирования может представлять собой информацию, указывающую, делится ли каждая единица кодирования. Например, когда максимальная единица кодирования делится и кодируется, информация, указывающая, делится ли максимальная единица кодирования, кодируется. Кроме того, когда единица кодирования более низкого уровня, полученная делением максимальной единицы кодирования, делится и кодируется, информация, указывающая делится ли единица кодирования более низкого уровня, кодируется. Информация, указывающая, делится ли единица кодирования более низкого уровня, может представлять собой информацию флага.
[46] Поскольку единицы кодирования более низкого уровня, имеющие разные размеры, существуют для каждой максимальной единицы кодирования, и информацию о режиме кодирования нужно определять для каждой единицы кодирования более низкого уровня, информацию о по меньшей мере одном режиме кодирования можно определять для одной максимальной единицы кодирования.
[47] Устройство 100 для кодирования изображения может генерировать единицы кодирования более низкого уровня путем деления на две равные части высоту и ширину максимальной единицы кодирования согласно увеличению глубины. Таким образом, когда размер единицы кодирования k-й глубины равен 2N×2N, размер единицы кодирования (k+1)-й глубины равен N×N.
[48] Соответственно, устройство 100 для кодирования изображения может определять оптимальную форму разделения для каждой максимальной единицы кодирования на основании размеров максимальных единиц кодирования и максимальной глубины с учетом характеристик изображения. Гибко регулируя размер максимальной единицы кодирования с учетом характеристик изображения, и кодируя изображение путем разделения максимальной единицы кодирования на единицы кодирования более низкого уровня разных глубин, можно более эффективно кодировать изображения, имеющие различные разрешения.
[49] На фиг. 2 показана блок-схема устройства 200 для декодирования изображения, согласно иллюстративному варианту осуществления.
[50] Согласно фиг. 2, устройство 200 для декодирования изображения включает в себя блок 210 получения данных изображения, блок 220 выделения информации кодирования и декодер 230 данных изображения.
[51] Блок 210 получения данных изображения получает данные изображения согласно максимальным единицам кодирования, анализируя битовый поток, принятый устройством 200 для декодирования изображения, и выводит данные изображения на декодер 230 данных изображения. Блок 210 получения данных изображения может выделять информацию о максимальной единице кодирования текущего кадра или среза из заголовка текущего кадра или среза. Другими словами, блок 210 получения данных изображения делит битовый поток в максимальной единице кодирования, что позволяет декодеру 230 данных изображения декодировать данные изображения согласно максимальным единицам кодирования.
[52] Блок 220 выделения информации кодирования выделяет информацию о максимальной единице кодирования, максимальной глубине, форме разделения максимальной единицы кодирования, режиме кодирования единиц кодирования более низкого уровня из заголовка текущего кадра, анализируя битовый поток, принятый устройством 200 для декодирования изображения. Информация о форме разделения и информация о режиме кодирования поступают на декодер 230 данных изображения.
[53] Информация о форме разделения максимальной единицы кодирования может включать в себя информацию о единицах кодирования более низкого уровня, имеющих разные размеры согласно глубинам и включенных в максимальную единицу кодирования, и может представлять собой информацию (например, информацию флага), указывающую, делится ли каждая единица кодирования. Информация о режиме кодирования может включать в себя информацию о единице предсказания согласно единицам кодирования более низкого уровня, информацию о режиме предсказания и информацию о единице преобразования.
[54] Декодер 230 данных изображения восстанавливает текущий кадр, декодируя данные изображения каждой максимальной единицы кодирования на основании информации, выделяемой блоком 220 выделения информации кодирования.
[55] Декодер 230 данных изображения может декодировать единицы кодирования более низкого уровня, включенные в максимальную единицу кодирования, на основании информации о форме разделения максимальной единицы кодирования. Процесс декодирования может включать в себя процесс внешнего предсказания, включающий в себя внутреннее предсказание и компенсацию движения, и процесс обратного преобразования.
[56] Декодер 230 данных изображения может осуществлять внутреннее предсказание или внешнее предсказание на основании информации о единице предсказания согласно единицам кодирования более низкого уровня и информации о режиме предсказания для предсказания единицы кодирования более низкого уровня. Декодер 230 данных изображения также может осуществлять обратное преобразование для каждой единицы кодирования более низкого уровня на основании информации о единице преобразования единицы кодирования более низкого уровня.
[57] Фиг. 3 иллюстрирует иерархические единицы кодирования согласно иллюстративному варианту осуществления.
[58] Согласно фиг. 3, иерархические единицы кодирования могут включать в себя единицы кодирования, для которых ширина×высота составляет 64×64, 32×32, 16×16, 8×8 и 4×4. Помимо этих единиц кодирования, имеющих правильную квадратную форму, также могут существовать единицы кодирования, для которых ширина×высота составляет 64×32, 32×64, 32×16, 16×32, 16×8, 8×16, 8×4 и 4×8.
[59] На фиг. 3, для данных 310 изображения с разрешением 1920×1080, размер максимальной единицы кодирования задан равным 64×64, и максимальная глубина задана равной 2.
[60] Для данных изображения 320 с разрешением 1920×1080, размер максимальной единицы кодирования задан равным 64×64, и максимальная глубина задана равной 3. Для данных 330 изображения с разрешением 352×288, размер максимальной единицы кодирования задан равным 16×16, и максимальная глубина задана равной 2.
[61] При высоком разрешении или большом объеме данных, максимальный размер единицы кодирования может быть относительно велик, чтобы повышать коэффициент сжатия и точно отражать характеристики изображения. Соответственно, для данных 310 и 320 изображения, имеющих более высокое разрешение, чем данные 330 изображения, в качестве размера максимальной единицы кодирования можно выбирать 64×64.
[62] Максимальная глубина указывает суммарное количество уровней в иерархических единицах кодирования. Поскольку максимальная глубина данных 310 изображения равна 2, единица 315 кодирования данных 310 изображения может включать в себя максимальную единицу кодирования, размер которой по длинной оси равен 64, и единицы кодирования более низкого уровня, размеры которых по длинной оси равны 32 и 16, согласно увеличению глубины.
[63] С другой стороны, поскольку максимальная глубина данных 330 изображения равна 2, единица 335 кодирования данных 330 изображения может включать в себя максимальную единицу кодирования, размер которой по длинной оси равен 16, и единицы кодирования, размеры которых по длинной оси равны 8 и 4, согласно увеличению глубины.
[64] Однако, поскольку максимальная глубина данных изображения 320 равна 4, единица 325 кодирования данных изображения 320 может включать в себя максимальную единицу кодирования, размер которой по длинной оси равен 64, и единицы кодирования более низкого уровня, размеры которых по длинной оси равны 32, 16, 8 и 4, согласно увеличению глубины. Поскольку изображение кодируется на основе меньшей единицы кодирования более низкого уровня с увеличением глубины, иллюстративный вариант осуществления пригоден для кодирования изображения, включающего в себя больше малых сцен.
[65] На фиг. 4 показана блок-схема кодера 400 изображения на основе единицы кодирования, согласно иллюстративному варианту осуществления.
[66] Блок 410 внутреннего предсказания осуществляет внутреннее предсказание на единицах предсказания внутреннего режима в текущем кадре 405, и блок 420 оценки движения и блок 425 компенсации движения осуществляют внешнее предсказание и компенсацию движения на единицах предсказания внешнего режима с использованием текущего кадра 405 и опорного кадра 495.
[67] Остаточные значения генерируются на основании единиц предсказания, выводимых из блока 410 внутреннего предсказания, блока 420 оценки движения и блока 425 компенсации движения, и сгенерированные остаточные значения выводятся как квантованные коэффициенты преобразования посредством пропускания через преобразователь 430 и блок 440 квантования.
[68] Квантованные коэффициенты преобразования восстанавливаются к остаточным значениям путем пропускания через блок 460 обратного квантования и обратный преобразователь 470, и восстановленные остаточные значения подвергаются последующей обработке посредством пропускания через блок 480 устранения разделения на блоки и блок 490 контурной фильтрации и выводятся в качестве опорного кадра 495. Квантованные коэффициенты преобразования могут выводиться в качестве битового потока 455 путем пропускания через статистический кодер 450.
[69] Для осуществления кодирования на основании способа кодирования согласно иллюстративному варианту осуществления, компоненты кодера 400 изображения, т.е. блок 410 внутреннего предсказания, блок 420 оценки движения, блок 425 компенсации движения, преобразователь 430, блок 440 квантования, статистический кодер 450, блок 460 обратного квантования, обратный преобразователь 470, блок 480 устранения разделения на блоки и блок 490 контурной фильтрации, осуществляют процессы кодирования изображения на основе максимальной единицы кодирования, единицы кодирования более низкого уровня согласно глубинам, единицы предсказания и единицы преобразования.
[70] На фиг. 5 показана блок-схема декодера 500 изображения на основе единицы кодирования, согласно иллюстративному варианту осуществления.
[71] Согласно фиг. 5, битовый поток 505 проходит через анализатор 510, что позволяет декодировать кодированные данные изображения и анализировать информацию кодирования, используемую для декодирования. Кодированные данные изображения выводятся в качестве обратно-квантованных данных путем пропускания через статистический декодер 520 и блок 530 обратного квантования и восстанавливаются до остаточных значений путем пропускания через обратный преобразователь 540. Остаточные значения восстанавливаются согласно единицам кодирования путем суммирования с результатом внутреннее предсказание блока 550 внутреннего предсказания или результатом компенсации движения блока 560 компенсации движения. Восстановленные единицы кодирования используются для предсказания следующих единиц кодирования или следующего кадра путем пропускания через блок 570 устранения разделения на блоки и блок 580 контурной фильтрации.
[72] Для осуществления декодирования на основании способа декодирования согласно иллюстративному варианту осуществления, компоненты декодера 500 изображения, т.е. анализатор 510, статистический декодер 520, блок 530 обратного квантования, обратный преобразователь 540, блок 550 внутреннего предсказания, блок 560 компенсации движения, блок 570 устранения разделения на блоки и блок 580 контурной фильтрации, осуществляют процессы декодирования изображения на основе максимальной единицы кодирования, единицы кодирования более низкого уровня согласно глубинам, единицы предсказания и единицы преобразования.
[73] В частности, блок 550 внутреннего предсказания и блок 560 компенсации движения определяют единицу предсказания и режим предсказания в единице кодирования более низкого уровня с учетом максимальной единицы кодирования и глубины, и обратный преобразователь 540 осуществляет обратное преобразование с учетом размера единицы преобразования.
[74] Фиг. 6 иллюстрирует максимальную единицу кодирования, единицу кодирования более низкого уровня и единицу предсказания, согласно иллюстративному варианту осуществления.
[75] Устройство 100 для кодирования изображения, проиллюстрированное на фиг. 1, и устройство 200 для декодирования изображения, проиллюстрированное на фиг. 2, используют иерархические единицы кодирования для осуществления кодирования и декодирования с учетом характеристик изображения. Максимальная единица кодирования и максимальная глубина могут адаптивно устанавливаться согласно характеристикам изображения или переменно устанавливаться согласно требованиям пользователя.
[76] На фиг. 6, структура 600 иерархических единиц кодирования имеет максимальную единицу 610 кодирования, высота и ширина которой составляют 64, и максимальная глубина которой равна 4. Глубина увеличивается по вертикальной оси структуры 600 иерархических единиц кодирования, и с увеличением глубины, значения высоты ширины единиц 620 - 650 кодирования более низкого уровня уменьшаются. Единицы предсказания максимальной единицы 610 кодирования и единицы 620 - 650 кодирования более низкого уровня показаны вдоль горизонтальной оси структуры 600 иерархических единиц кодирования.
[77] Максимальная единица 610 кодирования имеет глубину 0 и размер единицы кодирования, т.е. высоту и ширину, 64×64. Глубина увеличивается по вертикальной оси, и существуют единица 620 кодирования более низкого уровня размером 32×32 и глубиной 1, единица 630 кодирования более низкого уровня размером 16×16 и глубиной 2, единица 640 кодирования более низкого уровня размером 8x8 и глубиной 3, и единица 650 кодирования более низкого уровня размером 4×4 и глубиной 4. Единица 650 кодирования более низкого уровня размером 4×4 и глубиной 4 является минимальной единицей кодирования.
[78] Согласно фиг. 6, примеры единицы предсказания показаны вдоль горизонтальной оси согласно каждой глубине. Таким образом, единица предсказания максимальной единицы 610 кодирования, глубина которой равна 0, может представлять собой единицу предсказания такого же размера, как единица 610 кодирования, т.е. 64×64, или единица 612 предсказания размером 64×32, единица 614 предсказания размером 32×64 или единица 616 предсказания размером 32×32, размер которой меньше, чем у единицы 610 кодирования размером 64×64.
[79] Единица предсказания единицы 620 кодирования, глубина которой равна 1 и размер равен 32×32, может представлять собой единицу предсказания такого же размера, как единица 620 кодирования, т.е. 32×32, или единица 622 предсказания размером 32×16, единица 624 предсказания размером 16×32 или единица 626 предсказания размером 16×16, размер которой меньше, чем у единицы 620 кодирования размером 32×32.
[80] Единица предсказания единицы 630 кодирования, глубина которой равна 2 и размер равен 16×16, может представлять собой единицу предсказания такого же размера, как единица 630 кодирования, т.е. 16×16, или единица 632 предсказания размером 16×8, единица 634 предсказания размером 8×16 или единица 636 предсказания размером 8×8, размер которой меньше, чем у единицы 630 кодирования размером 16×16.
[81] Единица предсказания единицы 640 кодирования, глубина которой равна 3 и размер равен 8×8, может представлять собой единицу предсказания такого же размера, как единица 640 кодирования, т.е. 8×8, или единица 642 предсказания размером 8×4, единица 644 предсказания размером 4×8 или единица 646 предсказания размером 4×4, размер которой меньше, чем у единицы 640 кодирования размером 8×8.
[82] Наконец, единица 650 кодирования, глубина которой равна 4 и размер равен 4×4, является единицей кодирования максимальной глубины, и единица предсказания единицы 650 кодирования может представлять собой единицу предсказания 650 размером 4×4. Однако единица кодирования максимальной глубины не всегда может иметь такой же размер, как единица предсказания. Аналогично единицам 610 - 650 кодирования, единица кодирования максимальной глубины может делиться на единицы предсказания, имеющие меньшие размеры, чем единица кодирования, и может осуществлять предсказание.
[83] Фиг. 7 иллюстрирует единицу кодирования и единицу преобразования, согласно иллюстративному варианту осуществления.
[84] Устройство 100 для кодирования изображения, проиллюстрированное на фиг. 1, и устройство 200 для декодирования изображения, проиллюстрированное на фиг. 2, осуществляют кодирование и декодирование с самой максимальной единицей кодирования или с единицами кодирования более низкого уровня, которые меньше или равны максимальной единице кодирования, полученными разделением максимальной единицы кодирования. В процессе кодирования и декодирования, размер единицы преобразования для преобразования выбираются так, чтобы обеспечивать наибольший коэффициент сжатия независимо от единицы кодирования и единицы предсказания. Например, согласно фиг. 7, когда текущая единица 710 кодирования имеет размер 64×64, преобразование может осуществляться с использованием единицы 720 преобразования размером 32×32.
[85] Фиг. 8a – 8d иллюстрируют формы разделения единицы 810 кодирования, единицы 860 предсказания и единицы 870 преобразования, согласно иллюстративному варианту осуществления.
[86] Фиг. 8a и 8b иллюстрируют единицу 810 кодирования и единицу 860 предсказания, согласно иллюстративному варианту осуществления.
[87] На фиг. 8a показана форма разделения, выбранная устройством 100 для кодирования изображения, проиллюстрированного на фиг. 1, для кодирования максимальной единицы 810 кодирования. Устройство 100 для кодирования изображения делит максимальную единицу 810 кодирования на различные формы, осуществляет кодирование и выбирает оптимальную форму разделения, сравнивая результаты кодирования различных форм разделения друг с другом на основании издержек RD. Когда оптимально кодировать максимальную единицу 810 кодирования как есть, максимальную единицу 810 кодирования можно кодировать без разделения максимальной единицы 810 кодирования как проиллюстрировано на фиг. 8a – 8d.
[88] Согласно фиг. 8b, максимальная единица 810 кодирования, глубина которой равна 0, кодируется путем ее разделения на единицы кодирования более низкого уровня, глубины которых больше или равны 1. Таким образом, максимальная единица 810 кодирования делится на 4 единицы кодирования более низкого уровня глубины которых равны 1, и все или некоторые из единиц кодирования более низкого уровня, глубины которых равны 1, делятся на единицы кодирования более низкого уровня, глубины которых равны 2.
[89] Единица кодирования более низкого уровня, расположенная на верхней правой стороне, и единица кодирования более низкого уровня, расположенная на нижней левой стороне, из единиц кодирования более низкого уровня, глубины которых равны 1, делятся на единицы кодирования более низкого уровня, глубины которых больше или равны 2. Некоторые из единиц кодирования более низкого уровня, глубины которых больше или равны 2, могут делиться на единицы кодирования более низкого уровня, глубины которых больше или равны 3.
[90] На фиг. 8b показана форма разделения единицы 860 предсказания для максимальной единицы 810 кодирования.
[91] Согласно фиг. 8B, единица 860 предсказания для максимальной единицы 810 кодирования может делиться иначе, чем максимальная единица 810 кодирования. Другими словами, единица предсказания для каждой из единиц кодирования более низкого уровня, может быть меньше соответствующей единицы кодирования более низкого уровня.
[92] Например, единица предсказания для единицы 854 кодирования более низкого уровня, расположенной на нижней правой стороне, из единиц кодирования более низкого уровня, глубины которых равны 1, может быть меньше единицы 854 кодирования более низкого уровня. Кроме того, единицы предсказания для некоторых единиц 814, 816, 850 и 852 кодирования более низкого уровня из единиц 814, 816, 818, 828, 850 и 852 кодирования более низкого уровня, глубины которых равны 2, могут быть меньше единиц 814, 816, 850 и 852 кодирования более низкого уровня, соответственно.
[93] Кроме того, единицы предсказания для единиц 822, 832 и 848 кодирования более низкого уровня, глубины которых равны 3, могут быть меньше единиц 822, 832 и 848 кодирования более низкого уровня, соответственно. Единицы предсказания могут иметь форму, при которой соответствующие единицы кодирования более низкого уровня делятся на две равные части в направлении высоты или ширины или иметь форму, при которой соответствующие единицы кодирования более низкого уровня делятся на четыре равные части в направлениях высоты и ширины.
[94] Фиг. 8c и 8d иллюстрируют единицу 860 предсказания и единицу 870 преобразования, согласно иллюстративному варианту осуществления.
[95] На фиг. 8c показана форма разделения единицы 860 предсказания для максимальной единицы 810 кодирования, показанной на фиг. 8b, и на фиг. 8d показана форма разделения единицы 870 преобразования максимальной единицы 810 кодирования.
[96] Согласно фиг. 8d, форму разделения единицы 870 преобразования можно устанавливать иначе, чем для единицы 860 предсказания.
[97] Например, хотя единица предсказания для единицы кодирования 854, глубина которой равна 1, выбирается с формой, при которой высота единицы кодирования 854 делится на две равные части, единицу преобразования можно выбирать такого же размера, как единица кодирования 854. Аналогично, хотя единицы предсказания для единиц 814 и 850 кодирования, глубины которых равны 2 выбираются с формой, при которой высота каждой из единиц 814 и 850 кодирования делится на две равные части, единицу преобразования можно выбирать такого же размера, как первоначальный размер каждой из единиц 814 и 850 кодирования.
[98] Единицу преобразования можно выбирать с меньшим размером, чем единица предсказания. Например, когда единица предсказания для единицы 852 кодирования, глубина которой равна 2, выбирается с формой, при которой ширина единицы 852 кодирования делится на две равные части, единицу преобразования можно выбирать с формой, при которой единица 852 кодирования делится в направлениях высоты и ширины на четыре равные части, которые имеют меньший размер, чем форма единицы предсказания.
[99] На фиг. 9 показана блок-схема устройства 900 для кодирования вектора движения, согласно иллюстративному варианту осуществления.
[100] Устройство 900 для кодирования вектора движения может входить в состав устройства 100 для кодирования изображения, проиллюстрированного на фиг. 1, или кодера 400 изображения, проиллюстрированного на фиг. 4, подробно изображено на фиг. 9. Согласно фиг. 9, устройство 900 для кодирования вектора движения включает в себя блок 910 оценки вектора движения, блок 920 определения кандидата и кодер 930 вектора движения.
[101] Для декодирования кодированных блоков с использованием внешнего предсказания, т.е. временного предсказания, требуется информация о векторе движения, которая указывает относительную разность местоположений между текущим блоком и аналогичным блоком в опорном изображении. Соответственно, информация о векторе движения кодируется с одновременным кодированием изображения и внедряется в битовый поток. При непосредственном кодировании и внедрении информации о векторе движения, служебная нагрузка, используемая для кодирования информации о векторе движения, увеличивается, и, таким образом, коэффициент сжатия данных изображения снижается.
[102] Соответственно, при кодировании изображения, предсказывается вектор движения текущего блока, и кодированию и внедрению подвергается только разность первоначального вектора движения между предсказателем вектора движения, сгенерированным в результате предсказания, и первоначальным вектором движения, что позволяет сжимать информацию о векторе движения.
[103] В предсказательном кодировании вектора движения, могут существовать явный режим и неявный режим.
[104] В таком кодеке, как «усовершенствованное кодирование видеосигнала» MPEG-4 H.264/MPEG-4 (AVC), векторы движения ранее закодированных блоков, соседствующих с текущим блоком, можно использовать для предсказания вектора движения текущего блока. Медиана векторов движения ранее закодированных блоков, соседствующих с левой стороной, верхней стороной и правой верхней стороной текущего блока, используется в качестве предсказателя вектора движения текущего блока. Поскольку векторы движения всех блоков, закодированных с использованием внешнего предсказания, предсказываются с использованием одного и того же способа, информация о предсказателе вектора движения текущего блока может не кодироваться отдельно. Однако, устройство 100 для кодирования изображения или кодер 400 изображения согласно одному или более иллюстративным вариантам осуществления использует как неявный режим, в котором информация о предсказателе вектора движения не кодируется отдельно, так и явный режим, в котором информация о предсказателе вектора движения не кодируется, для точного предсказания вектора движения. В явном режиме, информация о предсказателе вектора движения, используемом в качестве предсказателя вектора движения текущего блока из множества предсказателей-кандидатов вектора движения, кодируется и внедряется в битовый поток в качестве параметра последовательности, параметра среза или параметра блока.
[105] Фиг. 9 иллюстрирует устройство, которое осуществляет предсказательное кодирование, в то время как вектор движения кодируется согласно явному режиму.
[106] Блок 910 оценки вектора движения оценивает вектор движения текущего блока. Поиск блока, аналогичного или идентичного текущему блоку, осуществляется в по меньшей мере одном опорном изображении, и, в результате поиска, оценивается вектор движения, который является относительной разностью местоположений между текущим блоком и искомым опорным изображением. Поиск блока, аналогичного или идентичного текущему блоку, осуществляется на основании вычисления суммы абсолютной разности (SAD), и, в результате поиска, можно оценивать вектор движения текущего блока.
[107] Кроме того, блок 910 оценки вектора движения предсказывает вектор движения текущего блока на основании векторов движения блоков, включенных в ранее закодированную область, соседствующую с текущим блоком. Другими словами, векторы движения блоков, включенных в ранее закодированную область, соседствующую с текущим блоком, задаются как предсказатели-кандидаты вектора движения, и определяется предсказатель-кандидат вектора движения, который наиболее аналогичен оцененному вектору движения текущего блока из предсказателей-кандидатов вектора движения.
[108] В таком кодеке, как MPEG-4 H.264/MPEG-4 AVC, медиана векторов движения ранее закодированных блоков, соседствующих с левой стороной, верхней стороной и правой верхней стороной текущего блока используется в качестве предсказателя вектора движения текущего блока. Поскольку вектор движения закодированного блока предсказывается с использованием векторов движения ранее закодированных блоков, и используется только один предсказатель вектора движения, информация о предсказателе вектора движения, может не кодироваться отдельно. Другими словами, количество предсказателей вектора движения блока, закодированного с использованием внешнего предсказания, равно единице.
[109] Однако, когда вектор движения текущего блока точно предсказан, вектор движения можно кодировать с высоким коэффициентом сжатия. В связи с этим, согласно иллюстративному варианту осуществления, один из множества предсказателей-кандидатов вектора движения выбирается и используется в качестве предсказателя вектора движения текущего блока, что позволяет кодировать вектор движения текущего блока с высоким коэффициентом сжатия. Далее, будет подробно описан способ кодирования вектора движения текущего блока с использованием множества предсказателей-кандидатов вектора движения.
[110] Фиг. 10a и 10b иллюстрируют предсказатели-кандидаты вектора движения, согласно иллюстративному варианту осуществления.
[111] Согласно фиг. 10a, согласно способу предсказания вектора движения, один из векторов движения ранее закодированных блоков, соседствующих с текущим блоком, можно использовать в качестве предсказателя вектора движения текущего блока.
[112] Из блоков, соседствующих с верхней стороной текущего блока, все векторы движения блока a0 на самой левой стороне, блок b0 на самой верхней стороне, соседствующей с левой стороной, блок c, соседствующий с правой верхней стороной, блок d, соседствующий с левой верхней стороной, и блок e, соседствующий с левой нижней стороной, можно использовать в качестве предсказателей-кандидатов вектора движения текущего блока.
[113] Согласно способу кодирования и декодирования изображения согласно одному или более иллюстративным вариантам осуществления, кодирование и декодирование изображения осуществляются на основе единиц кодирования, имеющих различные размеры, и отличающихся глубинами, и, таким образом, вектор движения блока, соседствующего с левой нижней стороной, можно использовать в качестве кандидата в предсказатели вектора движения.
[114] Согласно фиг. 10b, векторы движения всех блоков, соседствующих с текущим блоком, можно использовать в качестве предсказателей-кандидатов вектора движения. Другими словами, векторы движения не только блока a0 на самой левой стороне из блоков, соседствующих с верхней стороной, но и все блоки a0 - aN, соседствующие с верхней стороной, можно использовать в качестве предсказателей-кандидатов вектора движения. Кроме того, векторы движения не только блока b0 на самой верхней стороне из блоков, соседствующих с левой стороной, но и все блоки b0 - bN, соседствующие с левой стороной, можно использовать в качестве предсказателей-кандидатов вектора движения.
[115] Кроме того, медиану векторов движения соседних блоков можно использовать в качестве предсказателей-кандидатов вектора движения. Другими словами, медиану mv_a0, mv_b0 или mv_c можно использовать в качестве кандидата в предсказатели вектора движения текущего блока. Здесь, mv_a0 это вектор движения блока a0, mv_b0 это вектор движения блока b0, и mv_c это вектор движения блока c.
[116] Однако предсказатели-кандидаты вектора движения текущего блока могут быть ограничены согласно размерам текущего блока и соседних блоков, что будет подробно описано со ссылкой на фиг. 10c-10e.
[117] Фиг. 10c-10e иллюстрируют блоки различных размеров, которые соседствуют с текущим блоком, согласно иллюстративному варианту осуществления.
[118] Как описано выше, согласно способу кодирования и декодирования изображения согласно одному или более иллюстративным вариантам осуществления, единицы кодирования и единица предсказания, имеющие различные размеры, определенные согласно глубинам, можно использовать для кодирования изображения. Соответственно, поскольку блоки, соседствующие с текущим блоком, могут иметь различные размеры, когда размер текущего блока и размеры некоторых соседних блоков, значительно отличаются друг от друга, векторы движения некоторых соседних блоков можно не использовать в качестве предсказателей-кандидатов вектора движения.
[119] Согласно фиг. 10c, блоки 1014-1018, соседствующие с верхней стороной текущего блока 1010 меньше текущего блока 1010. Поскольку вектор движения блока 1012, соседствующего с текущим блоком 1010 и имеющего такой же размер, как текущий блок 1010, может быть идентичен или аналогичен вектору движения текущего блока 1010, блок 910 оценки вектора движения может использовать только вектор движения блока 1012 в качестве кандидата в предсказатели вектора движения.
[120] Хотя размеры не одинаковы, в качестве предсказателей-кандидатов вектора движения можно использовать только векторы движения соседних блоков, имеющих заранее определенные размеры или более. Например, в качестве предсказателей-кандидатов вектора движения можно использовать только векторы движения блоков 1012 и 1018, размеры которых составляют 1/4 размера текущего блока 1010 или более.
[121] Согласно фиг. 10d, размер блока 1022, соседствующего с левой стороной текущего блока 1020, превышает размер текущего блока 1020 в 16 раз, в связи с чем, существует большая разница в размерах. Вследствие этого большого различия, вектор движения блока 1022, соседствующего с левой стороной, может не быть идентичным или аналогичным вектору движения текущего блока 1020. Соответственно, вектор движения блока 1022, соседствующего с левой стороной, не используется в качестве предсказателя-кандидата вектора движения текущего блока 1020, и в качестве предсказателей-кандидатов вектора движения можно использовать только векторы движения блока 1024, соседствующего с верхней стороной, и блока 1026, соседствующего с левой верхней стороной.
[122] Согласно фиг. 10e, размер текущего блока 1030 превышает размеры всех соседних блоков 1031-1037. Здесь, когда векторы движения всех соседних блоков 1031-1037 используются в качестве предсказателей-кандидатов вектора движения текущего блока 1030, количество предсказателей-кандидатов вектора движения текущего блока 1030 может быть велико. При увеличении различия в размерах между текущим блоком 1030 и соседними блоками 1031-1037, количество предсказателей-кандидатов вектора движения также увеличивается. Соответственно, блок 910 оценки вектора движения может не использовать векторы движения некоторых блоков из соседних блоков в качестве предсказателей-кандидатов вектора движения текущего блока 1030.
[123] Например, на фиг. 10e, векторы движения блока 1031, соседствующего с левой нижней стороной, и блока 1037, соседствующего с правой верхней стороной, можно не использовать в качестве предсказателей-кандидатов вектора движения текущего блока 1030.
[124] В более общем случае, когда размер текущего блока 1030 превышает заранее определенный размер, векторы движения блоков, соседствующих в конкретном направлении, из соседних блоков, можно не использовать в качестве предсказателей-кандидатов вектора движения текущего блока 1030.
[125] Фиг. 11a-11c иллюстрируют предсказатели-кандидаты вектора движения, согласно другому иллюстративному варианту осуществления.
[126] Фиг. 11a иллюстрирует способ определения предсказателя-кандидата вектора движения изображения с двусторонним предсказанием (изображения B). Когда текущее изображение, включающее в себя текущий блок, является изображением B, которое осуществляет двустороннее предсказание, вектор движения, генерируемый на основании временного расстояния, может быть предсказателем кандидатом вектора движения.
[127] Предсказатель-кандидат вектора движения mv_temporal текущего блока 1100 текущего изображения 1110 можно определять с использованием вектора движения блока 1120, находящегося рядом с текущим блоком 1100 изображения 1112, которое предшествует по времени текущему изображению 1110. Например, когда вектор движения mv_colA блока 1120 находящегося рядом с текущим блоком 1100, генерируется по отношению к искомому блоку 1122 изображения 1114, которое следует по времени после текущего изображения 1110, mv_L0A и mv_L1A, которые являются предсказателями кандидатами вектора движения текущего блока 1100, можно определить следующим образом:
[128] mv_L1A=(t1/t2)*mv_colA
[129] mv_L0A=mv_L1A-mv_colA
[130] Здесь, mv_L0A обозначает предсказатель-кандидат вектора движения текущего блока 1110 по отношению к изображению 1112, которое предшествует по времени текущему изображению 1110, и mv_L1A обозначает предсказатель-кандидат вектора движения текущего блока 1100 по отношению к изображению 1114, которое следует по времени после текущего изображения 1110.
[131] На фиг. 11a, текущее изображение 1110, которое является изображением B, вставлено между изображением 1112, которое предшествует по времени текущему изображению 1110, и изображением 1114, которое следует по времени после текущего изображения 1110. Здесь, когда вектор движения mv_colA блока 1120, находящегося рядом с текущим блоком 1100, генерируется по отношению к изображению 1114, которое следует по времени после текущего изображения 1110, вектор движения текущего блока 1100 можно точно предсказывать на основании mv_L1A. Другими словами, вектор движения текущего блока 1100 можно более точно предсказывать, когда mv_colA является вектором движения в направлении, проиллюстрированном на фиг. 11a, по сравнению со случаем, когда mv_colA является вектором движения, направление которого противоположно направлению, проиллюстрированному на фиг. 11a, то есть когда mv_colA генерируется по отношению к другому изображению до изображения 1112, которое предшествует по времени текущему изображению 1110.
[132] Соответственно, когда направление от текущего блока 1110 к блоку 1120, находящемуся рядом с текущим блоком 1100, является List0, вектор движения mv_colA должен быть ориентирован в направлении List1, и, таким образом, текущее изображение 1110 может быть вставлено между изображением 1112 и изображением 1114, как проиллюстрировано на фиг. 11a, что позволяет точно предсказывать вектор движения текущего блока 1100 на основании mv_colA.
[133] Кроме того, изображения 1110 - 1114, проиллюстрированные на фиг. 11a, представлены согласно временному порядку, и, таким образом, предсказатель-кандидат вектора движения mv_temporal текущего блока может генерироваться на основании порядкового номера изображения (POC). Изображение, ссылка на которое обеспечивается текущим блоком, может быть изображением, отличным от соседних изображений 1112 и 1114, проиллюстрированных на фиг. 11a, и, таким образом, предсказатель-кандидат вектора движения текущего блока генерируется на основании POC.
[134] Например, когда POC текущего изображения равен CurrPOC, и POC изображения, ссылка на которое обеспечивается текущим изображением, равен CurrRefPOC, предсказатель-кандидат вектора движения текущего блока может генерироваться следующим образом:
[135] Scale=(CurrPOC-CurrRefPOC)/(ColPOC-ColRefPOC)
[136] mv_temporal=Scale*mv_colA
[137] Здесь, ColPOC это POC изображения 1112, которое предшествует по времени текущему изображению 1110 и включает в себя блок 1120 и ColRefPOC это POC изображения 1114, которое следует по времени после текущего изображения 1110 и включает в себя блок 1122, ссылка на который обеспечивается блоком 1120.
[138] Фиг. 11b иллюстрирует другой способ генерации предсказателя-кандидата вектора движения изображения B. Способ, представленный на фиг. 11b, отличается от способа, представленного на фиг. 11a тем, что изображение 1114, которое следует по времени после текущего изображения 1110, включает в себя блок, находящийся рядом с текущим блоком 1100.
[139] Согласно фиг. 11b, предсказатель-кандидат вектора движения текущего блока 1100 текущего изображения 1110 может генерироваться с использованием вектора движения блока 1130, находящегося рядом с текущим блоком 1100 изображения 1114, которое следует по времени после текущего изображения 1110. Например, когда вектор движения mv_colB блока 1130, находящегося рядом с текущим блоком 1100, генерируется по отношению к искомому блоку 1132 изображения 1112, которое предшествует по времени текущему изображению 1110, mv_L0B и mv_L1B, которые являются предсказателями кандидатами вектора движения текущего блока 1100, можно определить следующим образом:
[140] mv_L0B=(t3/t4)*mv_colB
[141] mv_L1B=mv_L0B-mv_colB
[142] Здесь, mv_L0B обозначает предсказатель-кандидат вектора движения текущего блока 1110 по отношению к изображению 1112, которое предшествует по времени текущему изображению 1110, и mv_L1B обозначает предсказатель-кандидат вектора движения текущего блока 1100 по отношению к изображению 1114, которое следует по времени после текущего изображения 1110.
[143] Аналогично фиг. 11a, на фиг. 11b, текущее изображение 1110, которое является изображением B, вставлено между изображением 1112, которое предшествует по времени текущему изображению 1110, и изображением 1114, которое следует по времени после текущего изображения 1110. Соответственно, когда вектор движения mv_colB блока 1130, находящегося рядом с текущим блоком 1100, генерируется по отношению к изображению 1112, которое предшествует по времени текущему изображению 1110, вектор движения текущего блока 1100 можно точно предсказывать на основании mv_L0B. Другими словами, вектор движения текущего блока 1100 можно более точно предсказывать, когда mv_colB это вектор движения в направлении, проиллюстрированном на фиг. 11b, по сравнению со случаем, когда mv_colB является вектором движения, направление которого противоположно направлению, проиллюстрированному на фиг. 11b, то есть, когда mv_colB генерируется по отношению к другому изображению после изображения 1114, которое следует по времени после текущего изображения 1110.
[144] Соответственно, когда направление от текущего блока 1110 к блоку 1130, находящемуся рядом с текущим блоком 1100, является List1, вектор движения mv_colB блока 1130 должен быть ориентирован в направлении List0 и, таким образом, текущее изображение 1110 может быть вставлено между изображением 1112 и изображением 1114, как проиллюстрировано на фиг. 11b, что позволяет точно предсказывать вектор движения текущего блока 1100 на основании mv_colB.
[145] Кроме того, изображение, ссылка на которое обеспечивается текущим блоком, может быть изображением, отличным от соседних изображений 1112 и 1114, проиллюстрированных на фиг. 11b, и, таким образом, предсказатель-кандидат вектора движения текущего блока генерируется на основании POC.
[146] Например, когда POC текущего изображения равен CurrPOC, и POC изображения, ссылка на которое обеспечивается текущим изображением, равен CurrRefPOC, предсказатель-кандидат вектора движения текущего блока может генерироваться следующим образом:
[147] Scale=(CurrPOC-CurrRefPOC)/(ColPOC-ColRefPOC)
[148] mv_temporal=Scale*mv_colB
[149] Здесь, ColPOC это POC изображения 1114, которое следует по времени после текущего изображения 1110 и включает в себя блок 1130, и ColRefPOC это POC изображения 1112, которое предшествует по времени текущему изображению 1110 и включает в себя блок 1132, ссылка на который обеспечивается блоком 1130.
[150] Фиг. 11c иллюстрирует предсказатель-кандидат вектора движения предсказательного изображения (изображения P).
[151] Согласно фиг. 11c, предсказатель-кандидат вектора движения текущего блока 1100 текущего изображения 1110 можно определять с использованием вектора движения блока 1140, находящегося рядом с текущим блоком 1100 изображения 1112, которое предшествует по времени текущему изображению 1110. Например, когда вектор движения mv_colC блока 1140 находящегося рядом с текущим блоком 1100, генерируется по отношению к искомому блоку 1142 изображения 1116, которое предшествует по времени текущему изображению 1110, mv_L0C, который является предсказателем кандидатом вектора движения текущего блока 1100, можно определить следующим образом:
[152] mv_L0C=(t6/t5)*mv_colC
[153] Как описано в связи с фиг. 11a и 11b, mv_L0C можно определять на основании POC. mv_L0C можно определять на основании POC текущего изображения 1110, POC изображения, ссылка на которое обеспечивается текущим изображением 1110, POC изображения 1112, которое предшествует по времени текущему изображению 1110, и POC изображения 1116, которое предшествует по времени текущему изображению 1110.
[154] Поскольку текущее изображение 1110 является изображением P, определяется только один предсказатель-кандидат вектора движения текущего блока 1100, в отличие от фиг. 11a и 11b.
[155] Кроме того, для использования предсказателя-кандидата вектора движения, генерируемого на основании временного расстояния на фиг. 11A и 11B для предсказания вектора движения текущего блока, также можно кодировать информацию, указывающую, какой блок из блоков 1120 и 1130, находящихся рядом с текущим блоком 1100, используется для генерации предсказателя вектора движения. Такая информация может входить в состав заголовка среза или заголовка последовательности в качестве параметра среза или параметра последовательности.
[156] В целом, группа C предсказателей-кандидатов вектора движения согласно фиг. 10A, 10b и 11a-11c может иметь следующий вид:
[157] C={median(mv_a0, mv_b0, mv_c), mv_a0, mv_a1, …, mv_aN, mv_b0, mv_b1, …, mv_bN, mv_c, mv_d, mv_e, mv_temporal}
[158] Кроме того, группа C может представлять собой группу с уменьшенным количеством предсказателей-кандидатов вектора движения:
[159] C={median(mv_a', mv_b', mv_c'), mv_a', mv_b', mv_c', mv_temporal}
[160] Здесь, mv_x обозначает вектор движения блока x, median() обозначает среднее значение, и mv_temporal обозначает предсказатели-кандидаты вектора движения, генерируемые с использованием временного расстояния, описанного в связи с фиг. 11A-11C. mv_a' обозначает первый эффективный вектор движения из mv_a0, mv_a1, …, и mv_aN. Например, когда блок a0 кодируется с использованием внутреннего предсказания и указывает текущий блок и другое изображение, вектор движения mv_a0 блока a0 не является эффективным, и, таким образом, mv_a'=mv_a1. Кроме того, когда вектор движения блока a1 не является эффективным, mv_a'=mv_a2. Аналогично, mv_b' является первым эффективным вектором движения из mv_b0, mv_b1, …, и mv_bN и mv_c' является первым эффективным вектором движения из mv_c, mv_d и mv_e.
[161] Вектор движения блока, который указывает изображение, отличное от текущего блока из векторов движения блоков, соседствующих с текущим блоком, может неэффективно предсказывать вектор движения текущего блока. Соответственно, вектор движения блока, который указывает изображение, отличное от текущего блока можно исключить из группы C предсказателей-кандидатов вектора движения.
[162] Когда устройство 900 для кодирования вектора движения кодирует вектор движения согласно явному режиму, устройство 900 также кодирует информацию, указывающую, какой предсказатель-кандидат вектора движения в группе C используется для предсказания вектора движения текущего блока. Другими словами, когда устройство 900 для кодирования вектора движения кодирует вектор движения, устройство 900 присваивает двоичные числа соответствующим элементам группы C, то есть предсказателям кандидатам вектора движения, и кодирует двоичные числа, соответствующие предсказателю кандидату вектора движения, используемому для предсказания вектора движения текущего блока.
[163] Для указания одного из элементов в группе C, присваиваются и выводятся двоичные числа, каждое из которых соответствует предсказателям кандидатам вектора движения. Таким образом, по мере уменьшения количества элементов в группе C, элементы в группе C можно указывать двоичными числами с меньшим количеством битов.
[164] Соответственно, при наличии перекрывающихся предсказателей-кандидатов вектора движения в группе C, двоичные числа могут присваиваться после исключения перекрывающихся предсказателей-кандидатов вектора движения из группы C. Например, когда группа C является C={median(mv_a', mv_b', mv_c'), mv_a', mv_b', mv_c', mv_temporal}, как описано выше, и mv_a', mv_b' и mv_c' совпадают друг с другом, можно определить, что в группе C существует два элемента, а именно, C={mv_a', mv_temporal} и двоичные числа могут присваиваться. Когда пять элементов в группе C можно указывать с использованием 3 битов до исключения перекрывающихся предсказателей-кандидатов вектора движения, два элемента можно указывать с использованием 1 бита после исключения перекрывающихся предсказателей-кандидатов вектора движения.
[165] Для повышения вероятности определения перекрывающегося предсказателя-кандидата вектора движения в качестве предсказателя вектора движения текущего блока, вместо исключения перекрывающегося предсказателя-кандидата вектора движения, ему можно присваивать заранее определенный вес. Как описано выше, поскольку mv_a', mv_b' и mv_c' совпадают друг с другом и только mv_a' включен в группу C, mv_a' присваивается заранее определенный вес, и, таким образом, вероятность того, что mv_a' используется для предсказания вектора движения текущего блока, может увеличиваться.
[166] Кроме того, при наличии одного предсказателя-кандидата вектора движения, двоичное число, используемое для указания одного из предсказателей-кандидатов вектора движения, может не кодироваться. Например, когда группа C является C={median(mv_a0, mv_b0, mv_c), mv_a0, mv_a1, …, mv_aN, mv_b0, mv_b1, …, mv_bN, mv_c, mv_d, mv_e, mv_temporal}, и блоки a0-aN, блоки b0-bN, блок c, блок d и блок e все подлежат внешнему предсказанию, группа C является C={mv_temporal} и, таким образом, по существу, включает в себя один элемент. Соответственно, в этом случае, устройство 900 для кодирования вектора движения может не кодировать двоичное число, используемое для указания одного из предсказателей-кандидатов вектора движения.
[167] Специалисту в данной области техники очевидно, что векторы движения, отличные от вышеописанных предсказателей-кандидатов вектора движения, можно использовать в качестве предсказателей-кандидатов вектора движения.
[168] Кроме того, согласно другому иллюстративному варианту осуществления, блок 920 определения кандидата может уменьшать количество предсказателей-кандидатов вектора движения на основании оценки результата кодирования.
[169] Как описано выше, отдельная информация кодируется и включается в битовый поток для указания предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока из множества предсказателей-кандидатов вектора движения. Соответственно, по мере уменьшения количества элементов в группе C, информацию, необходимую для указания предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока в группе C, можно кодировать с малым числом битов. В связи с этим, блок 920 определения кандидата может выборочно исключать заранее определенные предсказатели-кандидаты вектора движения из всех предсказателей-кандидатов вектора движения с использованием заранее определенной оценочной функции, которая будет подробно описана со ссылкой на фиг. 12.
[170] Фиг. 12 иллюстрирует способ уменьшения количества предсказателей-кандидатов вектора движения, согласно иллюстративному варианту осуществления.
[171] На фиг. 12, предполагается, что существует три элемента MVP1, MVP2 и MVP3 в группе C, и вектор движения текущего блока обозначается MV. Поскольку предсказатель-кандидат вектора движения, который наиболее аналогичен вектору движения текущего блока, используется для предсказания вектора движения текущего блока, MVP3, который наиболее аналогичен MV, используется для предсказания вектора движения текущего блока.
[172] Соответственно, векторная разность (далее именуемая ‘разностью первоначального вектора движения’) между вектором движения текущего блока и предсказателем кандидатом вектора движения, используемым для предсказания вектора движения текущего блока, равна (2,0). Поскольку MV равен (5,0), и MVP3 равен (3,0), разность первоначального вектора движения равна (2,0).
[173] Блок 920 определения кандидата выборочно исключает по меньшей мере один предсказатель-кандидат вектора движения из всех предсказателей-кандидатов вектора движения с использованием разности первоначального вектора движения и заранее определенной оценочной функции. В частности, разность первоначального вектора движения и заранее определенный предсказатель-кандидат вектора движения используются для генерации виртуального вектора движения, и разности (далее именуемые ‘разности виртуального вектора движения’) между сгенерированным виртуальным вектором движения и всеми предсказателями кандидатами вектора движения генерируются по отношению ко всем кандидатам. Разность первоначального вектора движения и заранее определенный предсказатель-кандидат вектора движения суммируются друг с другом для генерации виртуального вектора движения, и вычисляются разности виртуального вектора движения между сгенерированным виртуальным вектором движения и всеми предсказателями кандидатами вектора движения. Сравнивая разность первоначального вектора движения с разностями виртуального вектора движения, вычисленными по отношению ко всем кандидатам, заранее определенный предсказатель-кандидат вектора движения можно выборочно исключать из всех предсказателей-кандидатов вектора движения.
[174] Согласно фиг. 12, блок 920 определения кандидата определяет, исключается ли MVP1, один из предсказателей-кандидатов вектора движения, из общего количества кандидатов.
[175] Когда разность виртуального вектора движения, сгенерированная вычитанием предсказателя-кандидата вектора движения из виртуального вектора движения на основании MVP1, меньше разности первоначального вектора движения, MVP1 можно не использовать для предсказания вектора движения текущего блока. Например, когда разность виртуального вектора движения, сгенерированная вычитанием MVP3 из виртуального вектора движения, генерируемого суммированием MVP1 и разности первоначального вектора движения, меньше разности первоначального вектора движения, MVP3 предсказывает виртуальный вектор движения точнее, чем MVP1, и в этом случае, MVP1 не может быть предсказателем вектора движения.
[176] На фиг. 12, когда MVP1 и разность первоначального вектора движения суммируются друг с другом, виртуальный вектор движения на основании MVP1 равен (2,0). Соответственно, когда виртуальный вектор движения генерируется на основании MVP1, разность виртуального вектора движения для MVP2 равна (2,0), и разность виртуального вектора движения для MVP3 равна (-1,0). Здесь, поскольку разность виртуального вектора движения (-1,0) для MVP3 меньше разности первоначального вектора движения (2,0), MVP1 может не быть предсказателем вектора движения текущего блока. Соответственно, MVP1 можно исключить из всех предсказателей-кандидатов вектора движения. Другими словами, предсказатель-кандидат вектора движения, который соответствует MVP1, можно исключить из группы C.
[177] Здесь, сама по себе разность виртуального вектора движения, вычисленная для MVP1, равна (2,0) и всегда идентичная разности первоначального вектора движения, поэтому разность виртуального вектора движения может не быть меньше разности первоначального вектора движения. Соответственно, когда разности виртуального вектора движения вычисляются для всех предсказателей-кандидатов вектора движения, саму по себе разность виртуального вектора движения для MVP1 можно не вычислять.
[178] По завершении определения исключается ли MVP1, блок 920 определения кандидата определяет, исключается ли MVP2 из всех предсказателей-кандидатов вектора движения. Когда MVP2 и разность первоначального вектора движения суммируются друг с другом, виртуальный вектор движения на основании MVP2 равен (2,0). Соответственно, разность виртуального вектора движения для MVP1 равна (2,0), и разность виртуального вектора движения для MVP3 равна (-1,0). Поскольку разность виртуального вектора движения для MVP3 меньше разности первоначального вектора движения, MVP2 можно исключить из всех предсказателей-кандидатов вектора движения, как и в случае MVP1. При определении, исключается ли MVP2, разность виртуального вектора движения для MVP1 можно выборочно сравнивать с разностью первоначального вектора движения. Поскольку уже определено, что MVP1 должен быть исключен, разности виртуального вектора движения для кандидатов, отличных от MVP1, можно сравнивать с разностью первоначального вектора движения.
[179] Кроме того, блок 920 определения кандидата определяет, исключается ли MVP3. Виртуальный вектор движения на основании MVP3 идентичен первоначальному вектору движения текущего блока. Хотя другой предсказатель-кандидат вектора движения (то есть MVP1 или MVP2) вычитается из первоначального вектора движения, разность виртуального вектора движения, которая меньше разности первоначального вектора движения, может не генерироваться. Таким образом, MVP3 не исключается из предсказателей-кандидатов вектора движения. Кроме того, согласно другому иллюстративному варианту осуществления, поскольку MVP3, согласно результату определения, подлежащий использованию для предсказания вектора движения текущего блока, не исключается из предсказателей вектора движения, блок 920 определения кандидата может пропустить определение, исключается ли MVP3, предсказатель-кандидат вектора движения, используемый для предсказания вектора движения текущего блока.
[180] Короче говоря, когда блок 920 определения кандидата определяет, исключается ли второй предсказатель-кандидат вектора движения, один из предсказателей-кандидатов вектора движения, второй предсказатель-кандидат вектора движения и разность первоначального вектора движения суммируются друг с другом для генерации виртуального вектора движения, и разности между виртуальным вектором движения и другими предсказателями кандидатами вектора движения вычисляются для всех кандидатов для генерации множества разностей виртуального вектора движения. Когда существует по меньшей мере одна разность виртуального вектора движения, которая меньше разности первоначального вектора движения, из множества разностей виртуального вектора движения, второй предсказатель-кандидат вектора движения не является предсказателем вектора движения текущего блока и исключается из предсказателей-кандидатов вектора движения.
[181] Кроме того, блок 920 определения кандидата повторяющимся образом осуществляет определение исключения для предсказателей-кандидатов вектора движения, что позволяет уменьшить количество предсказателей-кандидатов вектора движения, то есть элементов группы C. Согласно порядку размещения предсказателей-кандидатов вектора движения группы C, необходимость исключения определяется по порядку. Например, когда C={median(mv_a', mv_b', mv_c'), mv_a', mv_b', mv_c', mv_temporal}, определяется необходимость исключения median(mv_a', mv_b', mv_'), и по завершении определения, определяется необходимость исключения mv_a'. Затем определяется необходимость исключения mv_b'. Согласно порядку размещения группы C, определение исключения повторяется до mv_temporal.
[182] Когда определение осуществляется повторяющимся образом, сравнение между разностью виртуального вектора движения и разностью первоначального вектора движения для кандидатов, уже исключенных при определении, можно опустить, как описано в связи с исключением MVP2.
[183] Кроме того, группу C можно переупорядочить согласно заранее определенному критерию, что будет описано ниже со ссылкой на фиг. 13A-13D. Когда группа C переупорядочена, определение исключения повторяется согласно переупорядоченному порядку.
[184] Сравнение между разностью виртуального вектора движения и разностью первоначального вектора движения, описанное в связи с фиг. 12, можно применять не только к одномерному вектору движения, но и к двухмерному вектору движения. Другими словами, абсолютная величина разности виртуального вектора движения, заданного x-координатами и y-координатами, сравнивается с абсолютной величиной разности первоначального вектора движения, и, таким образом, заранее определенный предсказатель вектора движения можно выборочно исключать из общего количества кандидатов.
[185] Однако абсолютная величина, используемая для сравнения разности виртуального вектора движения с разностью первоначального вектора движения, приведена только в качестве примера, и для сравнения разности виртуального вектора движения с разностью первоначального вектора движения можно использовать различные критерии. Когда оценочная функция, которая генерирует значение для разности виртуального вектора движения и значение для разности первоначального вектора движения на основании заранее определенного критерия, равна ‘A’, разность виртуального вектора движения можно сравнивать с разностью первоначального вектора движения согласно нижеследующему уравнению 1:
[186] (уравнение 1)
[187] A(mvx+MVD-mvy)<A(MVD)
[188] Блок 920 определения кандидата определяет, существует ли по меньшей мере один 'mvy' во всех кандидатах, для определения, исключается ли 'mvx', один из предсказателей-кандидатов вектора движения, из предсказателей-кандидатов вектора движения. В уравнении 1, 'MVD' обозначает разность первоначального вектора движения. Для определения необходимости исключения 'mvx', 'A(mvx+MVD-mvy)', которое является значением, полученным путем оценивания 'mvx+MVD-mvy', то есть разности виртуального вектора движения между 'mvx+MVD', виртуальным вектором движения на основании 'mvx', и 'mvy', другим предсказателем кандидатом вектора движения, вычисляется с использованием заранее определенной оценочной функции ‘A’, и значения, генерируемые в результате вычисления, сравниваются с 'A(MVD)', значением для разности первоначального вектора движения. Предсказатели-кандидаты вектора движения, отличные от 'mvx' из всех кандидатов, повторяющимся образом подставляются вместо 'mvy', и определяется, существует ли в общем количестве кандидатов по меньшей мере один 'mvy', который удовлетворяет уравнению 1.
[189] Как описано выше, разность виртуального вектора движения и разность первоначального вектора движения, оцененные согласно ‘A’, могут задаваться x-координатами и y-координатами. В этом случае, оценочная функция может задаваться суммой оценочного значения x-координат и оценочного значения y-координат, согласно нижеследующему уравнению 2:
[190] (уравнение 2)
[191] A(p, q)=f(p)+f(q)
[192] Когда разность виртуального вектора движения или разность первоначального вектора движения задается x-координатами ‘p’ и y-координатами ‘q’, каждое значение координаты вводится в заранее определенную функцию ‘f’, и оценочная функция ‘A’ задается суммой, полученной посредством подстановки.
[193] Согласно иллюстративному варианту осуществления, оценочная функция ‘A’ в уравнении 1 и уравнении 2, может быть оценочной функцией, которая оценивает результат, полученный путем статистического кодирования разности виртуального вектора движения, и результат, полученный путем статистического кодирования разности первоначального вектора движения. Блок 920 определения кандидата оценивает результат, полученный путем статистического кодирования разности виртуального вектора движения и разности первоначального вектора движения на основании оценочной функции ‘A’, и количество предсказателей-кандидатов вектора движения можно уменьшить на основании результата оценивания. Это подробно описано со ссылкой на нижеследующее уравнение 3:
[194] (уравнение 3)
[195] Length=1;
[196] Temp=(val<=0) ? (-val<<1)+1: (val<<1);
[197] while ( 1 != Temp) {
[198] Temp>>=1;
[199] Length += 2;
[200] }
[201] f(val)=Length
[202] Функция ‘f’, которая оценивает результат, полученный путем статистического кодирования по отношению к значению x-координаты или значениям y-координаты, может задаваться согласно уравнению 3. Когда 'val', значение x-координаты или y-координаты, вводится в функцию ‘f’, которая оценивает кодирование переменной длины, результат (например, универсальное кодирование переменной длины), 'Length' вычисляется согласно уравнению 3.
[203] Уравнение 3 можно представить следующим образом:
[204]
[205] Значение x-координаты или y-координаты может быть значением x-координаты или y-координаты разности виртуального вектора движения или разности первоначального вектора движения.
[206] Согласно уравнению 3, когда 'val' является отрицательным числом или ‘0’, 'val' становится положительным числом и затем умножается на ‘2’ путем сдвига влево на 1 бит. И прибавляется ‘1’, что позволяет сохранить результат в 'Temp'. Когда 'val' является положительным числом, 'val' умножается на ‘2’ путем сдвига влево на 1 бит, что позволяет сохранить результат в 'Temp'.
Затем циклы 'while' повторяются, пока 'Temp' не станет равной 1, и вычисляется 'Length'.
[207] Например, когда разность виртуального вектора движения или разность первоначального вектора движения равна (2,0), A(2,0)=f(2)+f(0).
[208] f(2) вычисляется следующим образом. Значение ‘2’ f(2) является положительным числом и, таким образом, сдвигается влево на 1 бит, вследствие чего 'Temp' устанавливается равным ‘4’. В первом цикле 'while' 'Temp' равна ‘4’, то есть не равна ‘1’, и, таким образом, '4' умножается на '1/2' путем сдвига вправо, вследствие чего 'Temp' устанавливается равным ‘2’. Поскольку начальное значение 'Length' задано равным ‘1’, 'Length' в первом цикле 'while' равна '3'.
[209] Во втором цикле 'while' 'Temp' равна ‘2’, то есть не равна ‘1’, и, таким образом '2' умножается на '1/2' путем сдвига вправо, вследствие чего 'Temp' устанавливается равным ‘1’. Поскольку текущее значение 'Length' равно 3, во втором цикле 'while' 'Length' равна '5'. Третий цикл 'while' не осуществляется, поскольку 'Temp' равна ‘1’, и f(2) равна '5'.
[210] f(0) вычисляется следующим образом. Поскольку входное значение координаты f(0) равно ‘0’, '0' сдвигается влево на 1 бит, и прибавляется ‘1’, вследствие чего 'Temp' устанавливается равным ‘1’. Соответственно, циклы 'while' не осуществляются. f(0) равна ‘1’ согласно начальному значению 'Length'.
[211] Заранее определенная оценочная функция ‘f’, описанная в связи с уравнением 3, это функция для оценивания результата статистического кодирования с использованием кодирования переменной длины. Соответственно, блок 920 определения кандидата оценивает результат, полученный путем кодирования переменной длины разностей виртуального вектора движения с использованием оценочной функции ‘A’, для определения, исключается ли 'mvx' из предсказателей-кандидатов вектора движения. В результате оценивания, когда существует по меньшей мере одна разность виртуального вектора движения, согласно оценке, подлежащая кодированию на меньшую длину, чем разность первоначального вектора движения, 'mvx' исключается из всех предсказателей-кандидатов вектора движения.
[212] Однако специалисту в данной области техники очевидно, что результат статистического кодирования оценивается с использованием способов, отличных от результата кодирования переменной длины. Например, для оценивания и сравнения результата статистического кодирования разности виртуального вектора движения и результата статистического кодирования разности первоначального вектора движения, можно использовать другую оценочную функцию ‘h’. Здесь, ‘h’ может быть функцией, которая оценивает результат контекстно-адаптивного двоичного арифметического кодирования.
[213] Кроме того, согласно другому иллюстративному варианту осуществления, для повышения точности результата оценивания на основании заранее определенной оценочной функции, результат, полученный путем оценивания информации индекса, также можно оценивать. Информация индекса используется для указания заранее определенного предсказателя-кандидата вектора движения из всех предсказателей-кандидатов вектора движения. Это подробно описано со ссылкой на уравнение 4:
[214] (уравнение 4)
[215] A(mvx+MVD-mvy, mvyIdx)<A(MVD, mvxIdx)
[216] Блок 920 определения кандидата определяет, существует ли в общем количестве кандидатов по меньшей мере один 'mvy', который удовлетворяет уравнению 4, для определения, исключается ли 'mvx', один из предсказателей-кандидатов вектора движения, из предсказателей-кандидатов вектора движения. В уравнении 4, 'MVD' обозначает разность первоначального вектора движения, и mvxIdx и mvyIdx обозначают информацию индекса, используемую для указания ‘mvx’ и 'mvy', соответственно, из всех предсказателей-кандидатов вектора движения. Для определения необходимости исключения 'mvx', 'mvx+MVD-mvy', то есть разность виртуального вектора движения между 'mvx+MVD', виртуальным вектором движения на основании 'mvx', и 'mvy', другим предсказателем кандидатом вектора движения, и информация индекса для указания ‘mvy’ из всех кандидатов оценивается с использованием заранее определенной оценочной функции ‘A’. Кроме того, разность первоначального вектора движения и информация индекса для указания ‘mvx’ из общего количества кандидатов оценивается с использованием заранее определенной оценочной функции ‘A’. В результате оценивания определяется, существует ли по меньшей мере один 'mvy' в общем количестве кандидатов.
[217] Как описано выше, разность виртуального вектора движения и разность первоначального вектора движения оцененная согласно ‘A’ могут быть заданы x-координатами и y-координатами и могут задаваться согласно нижеследующему уравнению 5:
[218] (уравнение 5)
[219] A(mvx+MVD-mvy, mvyIdx)=f(p1)+f(q1)+g(mvyIdx)
[220] A(MVD, mvxIdx)=f(p2)+f(q2)+g(mvxIdx)
[221] По сравнению с уравнением 2, A(mvx+MVD-mvy) в левой стороне уравнения 2 оценивает только разность виртуального вектора движения, тогда как A(mvx+MVD-mvy, mvyIdx) уравнения 5 оценивает разность виртуального вектора движения и информацию для указания 'mvy' из всех предсказателей-кандидатов вектора движения. Оценочная функция ‘A’ может быть функцией для оценивания результата статистического кодирования. Здесь, функция ‘f’ может быть функцией для оценивания результата статистического кодирования на основании значения x-координат или значения y-координат разности виртуального вектора движения, как описано в связи с уравнением 2, и функция ‘g’ может быть функцией для оценивания результата статистического кодирования 'mvxIdx'. Когда значение x-координат и значение y-координат 'mvx+MVD-mvy' равны 'p1' и 'q1', соответственно, A(mvx+MVD-mvy, mvxIdx) можно вычислять согласно уравнению 5.
[222] A(MVD) в правой стороне уравнения 2 оценивает только разность первоначального вектора движения, тогда как A(MVD, mvxIdx) уравнения 5 оценивает разность первоначального вектора движения и информацию для указания 'mvx' из всех предсказателей-кандидатов вектора движения. Функция ‘f’ может быть функцией для оценивания результата статистического кодирования на основании значения x-координат или значения y-координат разности первоначального вектора движения, как описано в связи с уравнением 2, и функция ‘g’ может быть функцией для оценивания результата статистического кодирования 'mvxIdx'. Когда значение x-координат и значение y-координат 'MVD' равны 'p2' и 'q2', соответственно, A(MVD, mvxIdx) можно вычислять согласно уравнению 5.
[223] Определение исключения согласно уравнениям 4 и 5 можно дополнительно использовать при определении исключения согласно уравнению 2. Другими словами, исключается ли 'mvx' из всех предсказателей-кандидатов вектора движения, сначала определяется на основании уравнений 2, и исключение можно снова определять согласно уравнениям 4 и 5. Например, в результате определения согласно уравнению 2, когда ‘A(mvx+MVD-mvy)’ больше или равна ‘A(MVD)’, и ‘A(mvx+MVD-mvy)’ не меньше ‘A(MVD)’, ‘mvx’ не исключается из всех предсказателей-кандидатов вектора движения согласно уравнению 2. Однако, хотя ‘A(mvx+MVD-mvy)’ и ‘A(MVD)’ одинаковы, ‘mvx’ можно исключить из всех предсказателей-кандидатов вектора движения на основании результата определения согласно уравнениям 4 и 5.
[224] Когда блок 920 определения кандидата определяет исключение для предсказателей-кандидатов вектора движения на основании уравнений 1-5, определение исключения для предсказателей-кандидатов вектора движения повторяющимся образом осуществляется согласно порядку размещения группы C. Согласно другому иллюстративному варианту осуществления, блок 920 определения кандидата переупорядочивает группу C согласно заранее определенному критерию, и определение исключения может повторяться согласно переупорядоченному порядку. Это подробно описано со ссылкой на фиг. 13a-13d.
[225] Фиг. 13a-13d иллюстрируют местоположение текущего блока, включенного в единицу кодирования заранее определенного размера, согласно иллюстративному варианту осуществления.
[226] Когда все предсказатели-кандидаты вектора движения образуют C={median(mv_a', mv_b', mv_c'), mv_a', mv_b', mv_c', mv_temporal}, каждое из двоичных чисел присваивается предсказателям кандидатам вектора движения группы C, и, таким образом, можно указывать предсказатель-кандидат вектора движения, используемый для предсказания вектора движения текущего блока, из предсказателей-кандидатов вектора движения, как описано выше.
[227] Здесь, двоичные числа присваиваются согласно порядку размещения предсказателей-кандидатов вектора движения, включенных в группу C, и могут представлять собой код переменной длины на основе кода Хаффмана. Соответственно, малое число битов могут присваиваться предсказателям кандидатам вектора движения, расположенным спереди в порядке размещения группы C. Например, бит '0' может присваиваться 'median(mv_a', mv_b', mv_c')', бит '00' может присваиваться mv_a', и бит '01' может присваиваться mv_b'. Соответственно, блок 920 определения кандидата организует предсказатели-кандидаты вектора движения согласно заранее определенному порядку, благодаря чему, предсказатель вектора движения, с высокой вероятностью используемый в предсказании вектора движения текущего блока из предсказателей-кандидатов вектора движения, располагается спереди в группе C.
[228] Предсказатель вектора движения, с высокой вероятностью используемый в предсказании вектора движения текущего блока, можно определять согласно местоположению текущего блока в единице кодирования. Местоположение текущего блока можно выразить с использованием индекса разбиения текущего блока. Индексы разбиения присваиваются блокам в единице кодирования согласно заранее определенному порядку. Таким образом, предсказатель вектора движения, с высокой вероятностью используемый в предсказании вектора движения текущего блока, можно определять согласно индексу разбиения текущего блока. Согласно фиг. 13a, когда текущий блок располагается на нижней стороне единицы кодирования, вектор движения текущего блока может быть идентичен или аналогичен вектору движения блока, соседствующему с левой стороной единицы кодирования, или вектору движения блока, соседствующему с нижней левой стороной единицы кодирования. Соответственно, порядок размещения можно, при необходимости, изменить так, чтобы предсказатель-кандидат вектора движения, который соответствует вектору движения блока, соседствующего с левой стороной, или вектору движения блока, соседствующего с нижней левой стороной, располагался спереди в группе C. Поскольку mv_b' из предсказателей-кандидатов вектора движения в группе C является предсказателем кандидатом вектора движения, который соответствует вектору движения блока, соседствующего с левой стороной, порядок mv_b' и median(mv_a', mv_b', mv_c') изменяется в группе C, что позволяет переупорядочить группу C в виде C={mv_b', mv_a', median(mv_a', mv_b', mv_c'), mv_c', mv_temporal}.
[229] Аналогично, когда текущий блок располагается на левой стороне единицы кодирования, как показано на фиг. 13b, предсказатель-кандидат вектора движения, который соответствует вектору движения блока, соседствующему с левой стороной единицы кодирования, и вектору движения блока, соседствующему с верхней стороной единицы кодирования, можно использовать для предсказания вектора движения текущего блока. Поскольку mv_b' из предсказателей-кандидатов вектора движения в группе C является предсказателем кандидатом вектора движения, который соответствует вектору движения блока, соседствующего с левой стороной, порядок mv_b' и median(mv_a', mv_b', mv_c') изменяется в группе C, что позволяет переупорядочить группу C в виде C={mv_b', mv_a', median(mv_a', mv_b', mv_c'), mv_c', mv_temporal}.
[230] Согласно фиг. 13c, когда текущий блок располагается на верхней стороне единицы кодирования, предсказатель-кандидат вектора движения, который соответствует вектору движения блока, соседствующему с левой стороной единицы кодирования и вектору движения блока, соседствующему с верхней стороной единицы кодирования, можно использовать в качестве предсказателя вектора движения текущего блока. Поскольку mv_a' из предсказателей-кандидатов вектора движения в группе C является предсказателем кандидатом вектора движения, который соответствует вектору движения блока, соседствующего с верхней стороной, порядок mv_a' и median(mv_a', mv_b', mv_c') изменяется в группе C, что позволяет переупорядочить группу C в виде C={mv_a', median(mv_a', mv_b', mv_c'), mv_b', mv_c', mv_temporal}.
[231] Согласно фиг. 13d, когда текущий блок располагается на правой стороне единицы кодирования, предсказатель-кандидат вектора движения, который соответствует вектору движения блока, соседствующему с верхней стороной единицы кодирования, можно использовать для предсказания вектора движения текущего блока. Поскольку mv_c' из предсказателей-кандидатов вектора движения в группе C является предсказателем кандидатом вектора движения, который соответствует вектору движения блока, соседствующему с верхней правой стороной, порядок mv_c' и median(mv_a', mv_b', mv_c') изменяется в группе C, что позволяет переупорядочивать группу C в виде C={mv_c', mv_a', mv_b', median(mv_a', mv_b', mv_c'), mv_temporal}.
[232] Местоположение текущего блока в единице кодирования в качестве критерия, используемого для переупорядочивания предсказателей-кандидатов вектора движения, приведено в порядке примера. Другими словами, для переупорядочивания предсказателей-кандидатов вектора движения можно использовать различные критерии. Различные критерии, используемые для размещения предсказателя-кандидата вектора движения, который с высокой вероятностью аналогичен вектору движения текущего блока, спереди в группе C, можно использовать в качестве критериев для переупорядочивания предсказателей-кандидатов вектора движения. Предсказатель-кандидат вектора движения, который с высокой вероятностью аналогичен вектору движения текущего блока, определяется на основании заранее определенной информации, относящейся к другим блокам, закодированным до текущего блока, и группу C можно переупорядочить согласно определению.
[233] Кроме того, предсказатель-кандидат вектора движения, который с высокой вероятностью аналогичен вектору движения текущего блока, определяется на основании другой информации, кодированной или декодированной по отношению к текущему блоку, до кодирования вектора движения текущего блока, и группу C можно переупорядочить согласно определению.
[234] Кроме того, группу C можно переупорядочить путем исключения перекрывающихся предсказателей-кандидатов вектора движения. При наличии перекрывающихся предсказателей-кандидатов вектора движения во всех предсказателях кандидатах вектора движения, перекрывающиеся предсказатели-кандидаты вектора движения исключаются в первую очередь, и необходимость исключения предсказателей-кандидатов вектора движения можно определять согласно уравнениям 1-5.
[235] Возвращаясь к фиг. 9, кодер 930 вектора движения кодирует информацию о векторе движения и информацию о предсказателе вектора движения. Информация о векторе движения является разностью первоначального вектора движения между первоначальным вектором движения текущего блока и первоначальным предсказателем вектора движения. Информация о предсказателе вектора движения это информация для указания предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока среди предсказателей-кандидатов вектора движения, из которых исключен по меньшей мере один предсказатель вектора движения. Другими словами, информация для указания предсказателя вектора движения текущего блока среди предсказателей-кандидатов вектора движения, которые не исключаются на блоке 920 определения кандидата, кодируется как информация о предсказателе вектора движения.
[236] Разность первоначального вектора движения принимается от блока 910 оценки вектора движения и кодируется согласно заранее определенному способу статистического кодирования. Кроме того, кодируется информация для указания предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока из предсказателей-кандидатов вектора движения, определенных путем выборочного исключения по меньшей мере одного предсказателя-кандидата вектора движения на блоке 920 определения кандидата.
[237] Когда блок 920 определения кандидата определяет предсказатели-кандидаты вектора движения путем исключения по меньшей мере одного предсказателя-кандидата вектора движения из всех предсказателей-кандидатов вектора движения согласно уравнениям 1-5, кодируется информация для указания предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока из определенных предсказателей-кандидатов вектора движения. Кодер 930 вектора движения может индексировать каждый из предсказателей-кандидатов вектора движения, которые не исключаются на блоке 920 определения кандидата, и статистически кодирует информацию индекса как информацию о предсказателе вектора движения. Индексирование означает присвоение заранее определенных двоичных чисел каждому из предсказателей-кандидатов вектора движения, и информация о предсказателе вектора движения означает двоичное число, присваиваемое предсказателю кандидату вектора движения, используемому для предсказания вектора движения текущего блока. Когда один предсказатель-кандидат вектора движения остается после того, как блок 920 определения кандидата выборочно исключает по меньшей мере один предсказатель-кандидат вектора движения, информация о предсказателе вектора движения может не кодироваться отдельно на кодере 930 вектора движения, поскольку предсказатель-кандидат вектора движения, подлежащий использованию для предсказания вектора движения текущего блока, неявно определяется.
[238] Кроме того, как описано в связи с фиг. 13a-13d, блок 920 определения кандидата может индексировать каждый из предсказателей-кандидатов вектора движения, генерируемый путем переупорядочивания всех предсказателей-кандидатов вектора движения согласно заранее определенному критерию и путем выборочного исключения по меньшей мере одного предсказателя вектора движения из всех переупорядоченных предсказателей-кандидатов вектора движения, и может статистически кодировать информацию индекса.
[239] В результате переупорядочивания, осуществляемого блоком 920 определения кандидата, двоичные числа с наименьшим количеством битов могут присваиваться предсказателю кандидату вектора движения, с высокой вероятностью используемому для предсказания вектора движения текущего блока, и, таким образом, информацию о предсказателе вектора движения можно кодировать с высоким коэффициентом сжатия.
[240] На фиг. 14 показана блок-схема устройства 1400 для декодирования вектора движения, согласно иллюстративному варианту осуществления.
[241] Устройство 1400 для декодирования вектора движения, показанное на фиг. 14, включено в устройство 200 для декодирования изображения, показанное на фиг. 2, или декодер 500 изображения, показанный на фиг. 5. Согласно фиг. 14, устройство 1400 для декодирования вектора движения включает в себя декодер 1410 вектора движения, блок 1420 определения кандидата и блок 1430 восстановления вектора движения.
[242] Устройство 1400 для декодирования вектора движения декодирует вектор движения текущего блока, когда вектор движения текущего блока кодируется согласно явному режиму из вышеописанных явного режима и неявного режима.
[243] Декодер 1410 вектора движения принимает битовый поток для вектора движения текущего блока и декодирует принятый битовый поток. Информация о векторе движения, включенная в битовый поток, декодируется. Декодируется разность первоначального вектора движения текущего блока. Разность первоначального вектора движения можно декодировать согласно заранее определенному способу статистического декодирования. Разность первоначального вектора движения это векторная разность между вектором движения текущего блока и предсказателем кандидатом вектора движения, используемым для предсказания вектора движения текущего блока. Согласно способу декодирования вектора движения согласно иллюстративному варианту осуществления по меньшей мере один предсказатель-кандидат вектора движения исключается из всех предсказателей-кандидатов вектора движения согласно уравнениям 1-5, и определяются предсказатели-кандидаты вектора движения. Предсказатели-кандидаты вектора движения не являются фиксированными и декодируются поблочно, благодаря чему, предсказатели-кандидаты вектора движения могут непрерывно изменяться. Соответственно, хотя информация о предсказателях кандидатах вектора движения одинакова, если предсказатели-кандидаты вектора движения не определены, предсказатель-кандидат вектора движения, используемый для предсказания вектора движения текущего блока, может восстанавливаться неточно.
[244] Таким образом, блок 1420 определения кандидата определяет предсказатели-кандидаты вектора движения до определения предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока. По меньшей мере, один предсказатель-кандидат вектора движения из всех векторов кандидатов движения выборочно исключается согласно уравнениям 1 - 5, и определяются предсказатели-кандидаты вектора движения. Предсказатель-кандидат вектора движения, который не используется для предсказания вектора движения текущего блока, из всех кандидатов, определенных на основании векторов движения блоков, включенных в ранее закодированную область, соседствующую с текущим блоком, исключается на основании заранее определенной оценочной функции.
[245] Виртуальный вектор движения генерируется на основании заранее определенного вектора движения и из всех предсказателей-кандидатов вектора движения и информации о предсказателе вектора движения, декодированной на декодере вектора движения, и разности виртуального вектора движения, которые являются разностями между сгенерированным виртуальным вектором движения и другим предсказателем кандидатом вектора движения, вычисляются для всех кандидатов. Вычисленные разности виртуального вектора движения сравниваются с информацией о векторе движения, декодированной на декодере 1410 вектора движения, которая является информацией о разности первоначального вектора движения, и заранее определенный предсказатель-кандидат вектора движения выборочно исключается. Результат, полученный путем статистического кодирования разностей виртуального вектора движения, сравнивается с результатом, полученным путем статистического кодирования разности первоначального вектора движения, что позволяет определить необходимость исключения заранее определенного предсказателя-кандидата вектора движения. Кроме того, для повышения точности оценки результата статистического кодирования, результат, полученный путем статистического кодирования информация индекса, также оценивается и используется при определении исключения. Способ исключения предсказателей-кандидатов вектора движения описан в связи с уравнениями 1-5.
[246] Кроме того, согласно другому иллюстративному варианту осуществления, блок 1420 определения кандидата переупорядочивает все предсказатели-кандидаты вектора движения согласно заранее определенному критерию, повторяющимся образом осуществляет определение исключения для всех переупорядоченных предсказателей-кандидатов вектора движения согласно уравнениям 1-5, и может выборочно исключать по меньшей мере один предсказатель-кандидат вектора движения. Перекрывающиеся предсказатели-кандидаты вектора движения можно исключить из всех переупорядоченных предсказателей-кандидатов вектора движения, и определение исключения можно повторяющимся образом осуществлять согласно уравнениям 1-5.
[247] Когда множество предсказателей-кандидатов вектора движения из всех предсказателей-кандидатов вектора движения остается после того, как блок 1420 определения кандидата исключает по меньшей мере один предсказатель-кандидат вектора движения из всех предсказателей-кандидатов вектора движения, декодер 1410 вектора движения декодирует информацию о предсказателе вектора движения. Информация о предсказателе вектора движения декодируется согласно заранее определенному способу статистического декодирования. Информация о предсказателе вектора движения это информация для указания предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока из предсказателей-кандидатов вектора движения, из которых исключен по меньшей мере один предсказатель-кандидат вектора движения. Информация для указания предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока из предсказателей-кандидатов вектора движения, которые не исключаются на блоке 1420 определения кандидата, декодируется.
[248] Когда один предсказатель-кандидат вектора движения остается после того, как блок 1420 определения кандидата исключает по меньшей мере один предсказатель-кандидат вектора движения из всех предсказателей-кандидатов вектора движения, оставшийся предсказатель-кандидат вектора движения используется для предсказания вектора движения текущего блока, и, таким образом, декодер 1410 вектора движения может не выборочно декодировать информацию о предсказателе кандидате вектора движения.
[249] Блок 1430 восстановления вектора движения восстанавливает вектор движения текущего блока на основании информации о векторе движения, декодированной на декодере 1410 вектора движения. Разность первоначального вектора движения, декодированная на декодере 1410 вектора движения, и предсказатель-кандидат вектора движения, используемый для предсказания вектора движения текущего блока, суммируются друг с другом для восстановления вектора движения текущего блока. Предсказатель-кандидат вектора движения, подлежащий использованию в предсказании вектора движения текущего блока, определяется из предсказателей-кандидатов вектора движения, определенных на блоке 1420 определения кандидата, и определенный предсказатель-кандидат вектора движения прибавляется к разности первоначального вектора движения. Когда в результате исключения на блоке 1420 определения кандидата остается не один предсказатель-кандидат вектора движения, а множество предсказателей-кандидатов вектора движения, предсказатели-кандидаты вектора движения, используемые для предсказания вектора движения текущего блока, можно определять на основании информации о предсказателе вектора движения, декодированной на декодере 1410 вектора движения.
[250] Поскольку предсказатели-кандидаты вектора движения определяются блоком 1420 определения кандидата, даже если декодированная информация о предсказателе вектора движения одинакова, предсказатели-кандидаты вектора движения, используемые для предсказания вектора движения текущего блока, могут представлять собой векторы движения соседних блоков в разных положениях.
[251] На фиг. 15 показана логическая блок-схема, иллюстрирующая способ кодирования вектора движения, согласно иллюстративному варианту осуществления.
[252] Согласно фиг. 15, в операции 1510, устройство для кодирования вектора движения оценивает вектор движения текущего блока и определяет предсказатель-кандидат вектора движения, используемый для предсказания вектора движения текущего блока, из всех предсказателей-кандидатов вектора движения. Поиск блока, идентичного или аналогичного текущему блоку осуществляется на множестве опорных изображений и, в результате поиска, оценивается вектор движения, который представляет собой относительную разность местоположений между текущим блоком и опорным блоком.
[253] Затем вектор движения текущего блока предсказывается на основании векторов движения блоков, включенных в ранее закодированную область, соседствующую с текущим блоком. Другими словами, векторы движения блоков, включенных в ранее закодированную область, соседствующую с текущим блоком, задаются как предсказатели-кандидаты вектора движения, и определяется предсказатель-кандидат вектора движения, который наиболее аналогичен вектору движения оцененного текущего блока из предсказателей-кандидатов вектора движения. Генерируется векторная разность между вектором движения текущего блока и определенным предсказателем кандидатом вектора движения, который является разностью первоначального вектора движения.
[254] В операции 1520, устройство для кодирования изображения выборочно исключает по меньшей мере один предсказатель-кандидат вектора движения из всех предсказателей-кандидатов вектора движения. Предсказатель-кандидат вектора движения, который не используется для предсказания вектора движения текущего блока исключается из всех предсказателей-кандидатов вектора движения.
[255] Устройство для кодирования изображения генерирует виртуальный вектор движения с использованием заранее определенного предсказателя-кандидата вектора движения из всех предсказателей-кандидатов вектора движения и разности первоначального вектора движения, сгенерированной в операции 1510. Сгенерированный виртуальный вектор движения и другой предсказатель-кандидат вектора движения используются для генерации разности виртуального вектора движения. Генерируются разности виртуального вектора движения для каждого из всех предсказателей-кандидатов вектора движения, и сгенерированные разности виртуального вектора движения сравниваются с разностью первоначального вектора движения, что позволяет выборочно исключить заранее определенный предсказатель-кандидат вектора движения.
[256] Процесс генерации виртуального вектора движения и выборочного исключения предсказателя-кандидата вектора движения в операции 1520 повторяющимся образом осуществляется для всех кандидатов, и, таким образом по меньшей мере один предсказатель-кандидат вектора движения можно исключить из всех кандидатов. При осуществлении процесса исключения повторяющимся образом, вычисляются разности виртуального вектора движения для предсказателей-кандидатов вектора движения, отличных от предсказателей вектора движения, которые уже исключены, и вычисленные разности виртуального вектора движения можно сравнивать с разностью первоначального вектора движения.
[257] Разность виртуального вектора движения и разность первоначального вектора движения можно оценивать и сравнивать друг с другом на основании заранее определенной оценочной функции, причем заранее определенная оценочная функция может быть функцией, которая оценивает результат статистического кодирования. Разность виртуального вектора движения и разность первоначального вектора движения можно сравнивать друг с другом на основании функции, которая оценивает результат, полученный путем статистического кодирования разности виртуального вектора движения, и результат, полученный путем статистического кодирования разности первоначального вектора движения. Кроме того, для повышения точности оценивания, результат, полученный путем кодирования информация индекса, также можно оценивать и использовать при определении исключения. Способ исключения по меньшей мере одного предсказателя-кандидата вектора движения из всех предсказателей-кандидатов вектора движения описан в связи с уравнениями 1-5.
[258] Кроме того, как описано в связи с фиг. 13a-13d, устройство для кодирования вектора движения может переупорядочивать все предсказатели-кандидаты вектора движения согласно заранее определенному критерию и выборочно исключать по меньшей мере один предсказатель-кандидат вектора движения из всех переупорядоченных предсказателей-кандидатов вектора движения. Кроме того, устройство для кодирования вектора движения может исключать перекрывающиеся предсказатели-кандидаты вектора движения из всех переупорядоченных предсказателей-кандидатов вектора движения и повторяющимся образом осуществлять определение исключения согласно уравнениям 1-5.
[259] В операции 1530, устройство для кодирования вектора движения кодирует информацию о векторе движения и информацию о предсказателе вектора движения. Информация о разности первоначального вектора движения и информация для указания предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока, кодируются. Информация о предсказателе вектора движения может представлять собой информацию для указания предсказателя-кандидата вектора движения, используемого для предсказания вектора движения текущего блока, из предсказателей-кандидатов вектора движения, которые не исключаются в операциях 1520 и 1530.
[260] Когда один предсказатель-кандидат вектора движения остается после исключения по меньшей мере одного предсказателя-кандидата вектора движения из всех предсказателей-кандидатов вектора движения, информация о предсказателе вектора движения, может не кодироваться.
[261] Фиг. 16 это логическая блок-схема, иллюстрирующая способ декодирования вектора движения, согласно иллюстративному варианту осуществления.
[262] Согласно фиг. 16, устройство для декодирования вектора движения декодирует информацию о векторе движения текущего блока из принятого битового потока, в операции 1610. Информация о векторе движения может представлять собой разность первоначального вектора движения между вектором движения текущего блока и предсказателем вектора движения текущего блока.
[263] В операции 1620, устройство для декодирования вектора движения генерирует виртуальный вектор движения на основании информации о векторе движения, декодированной в операции 1610, и одного предсказателя-кандидата вектора движения из предсказателей-кандидатов вектора движения.
[264] При генерации виртуального вектора движения, устройство для декодирования вектора движения исключает по меньшей мере один предсказатель-кандидат вектора движения из всех предсказателей-кандидатов вектора движения. Все предсказатели-кандидаты вектора движения определяются на основании векторов движения блоков, включенных в ранее декодированную область, соседствующую с текущим блоком. Устройство для декодирования вектора движения может выборочно исключать по меньшей мере один предсказатель-кандидат вектора движения из всех предсказателей-кандидатов вектора движения. Разность виртуального вектора движения и разность первоначального вектора движения, декодированные в операции 1610, оцениваются на основании заранее определенной оценочной функции для выборочного исключения заранее определенного предсказателя-кандидата вектора движения. Способ исключения предсказателя-кандидата вектора движения из всех кандидатов такой же, как в операции 1530 и описан выше со ссылкой на уравнения 1-5.
[265] Процесс генерации виртуального вектора движения и выборочного исключения предсказателя-кандидата вектора движения в операции 1620 повторяющимся образом осуществляется для всех кандидатов, и, таким образом по меньшей мере один предсказатель-кандидат вектора движения можно исключить из всех кандидатов.
[266] Кроме того, как описано в связи с фиг. 13a-13d, устройство для декодирования вектора движения может переупорядочивать все предсказатели-кандидаты вектора движения согласно заранее определенному критерию и выборочно исключать по меньшей мере один предсказатель-кандидат вектора движения из всех переупорядоченных предсказателей-кандидатов вектора движения. Кроме того, устройство для декодирования вектора движения может исключать перекрывающиеся предсказатели-кандидаты вектора движения из всех переупорядоченных предсказателей-кандидатов вектора движения и повторяющимся образом осуществлять определение исключения согласно уравнениям 1-5.
[267] Когда в результате исключения остается множество предсказателей-кандидатов вектора движения, информация о предсказателе вектора движения декодируется, и когда остается один предсказатель-кандидат вектора движения, информация о предсказателе вектора движения не декодируется.
[268] В операции 1630, устройство для декодирования вектора движения определяет предсказатель вектора движения, используемый для предсказания вектора движения текущего блока, из предсказателей-кандидатов вектора движения, которые не исключаются в операции 1620.
[269] Предсказатель-кандидат вектора движения, используемый для предсказания вектора движения текущего блока, из предсказателей-кандидатов вектора движения, можно определять на основании информации о предсказателе вектора движения текущего блока. Когда в результате исключения в операции 1620 остается один предсказатель-кандидат вектора движения, один оставшийся предсказатель-кандидат вектора движения определяется в качестве предсказателя вектора движения используемый для предсказания вектора движения текущего блока.
[270] Когда предсказатель-кандидат вектора движения определен, вектор движения текущего блока восстанавливается суммированием определенного предсказателя-кандидата вектора движения и разности первоначального вектора движения, декодированной в операции 1610.
[271] Согласно иллюстративному варианту осуществления, когда предсказатели-кандидаты вектора движения используются для предсказательного кодирования и декодирования вектора движения, количество предсказателей-кандидатов вектора движения можно уменьшить для предсказательного кодирования и декодирования вектора движения. Соответственно, информацию, необходимую для указания предсказателя вектора движения, используемого для предсказания вектора движения текущего блока из предсказателей-кандидатов вектора движения, можно кодировать с минимальным числом битов, благодаря чему коэффициент сжатия кодирования/декодирования вектора движения увеличивается, что позволяет повышать коэффициент сжатия при кодировании/декодировании изображения.
[272] Хотя выше конкретно показаны и описаны иллюстративные варианты осуществления, специалисты в данной области техники могут предложить различные изменения, касающиеся формы и деталей, не выходящие за рамки сущности и объема идеи настоящего изобретения, определенной в нижеследующей формуле изобретения.
[273] Иллюстративные варианты осуществления также могут быть реализованы в виде машиночитаемых кодов на машиночитаемом носителе записи.
[274] Например, устройство для кодирования изображения, устройство для декодирования изображения, кодер вектора движения, и вектор движения согласно иллюстративным вариантам осуществления могут включать в себя шину, подключенную к каждому элементу, включенному в устройства на фиг. 1, 2, 4, 5, 9 и 14 и по меньшей мере один процессор, объединенный с шиной. Кроме того, устройства могут включать в себя память, подключенную к по меньшей мере одному процессору для выполнения команд за счет объединения с шиной для хранения команд, принятых сообщений или генерированных сообщений.
[275] Машиночитаемый носитель записи представляет собой любое устройство хранения данных, на котором могут храниться данные, которые впоследствии могут считываться компьютерной системой. Примеры машиночитаемого носителя записи включают в себя постоянную память (ПЗУ), оперативную память (ОЗУ), диски CD-ROM, магнитные ленты, флоппи-диски и оптические устройства хранения данных. Машиночитаемый носитель записи также может быть распределен по компьютерным системам, соединенным в сеть, благодаря чему становится возможным распределенные хранение и выполнение машиночитаемого кода.