KR20220050227A - 인코딩 및 디코딩 방법, 장치 및 이의 기기 - Google Patents

인코딩 및 디코딩 방법, 장치 및 이의 기기 Download PDF

Info

Publication number
KR20220050227A
KR20220050227A KR1020227010788A KR20227010788A KR20220050227A KR 20220050227 A KR20220050227 A KR 20220050227A KR 1020227010788 A KR1020227010788 A KR 1020227010788A KR 20227010788 A KR20227010788 A KR 20227010788A KR 20220050227 A KR20220050227 A KR 20220050227A
Authority
KR
South Korea
Prior art keywords
motion vector
block
sub
value
current block
Prior art date
Application number
KR1020227010788A
Other languages
English (en)
Inventor
팡둥 천
Original Assignee
항조우 힉비젼 디지털 테크놀로지 컴퍼니 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 항조우 힉비젼 디지털 테크놀로지 컴퍼니 리미티드 filed Critical 항조우 힉비젼 디지털 테크놀로지 컴퍼니 리미티드
Publication of KR20220050227A publication Critical patent/KR20220050227A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/109Selection of coding mode or of prediction mode among a plurality of temporal predictive coding modes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • H04N19/122Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Discrete Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

본 발명은 인코딩 및 디코딩 방법, 장치 및 이의 기기를 제공하는 바, 만약 하기 조건들이 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하는 단계: 제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것; 현재 블록의 예측 모드는 일반 머지 모드이거나, 또는 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것; 현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것; 두 개의 참조 프레임의 가중된 가중치가 동일한 것; 두 개의 참조 프레임이 모두 단기 참조 프레임인 것; 현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것; 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및 만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 현재 블록에 대해 움직임 보상을 수행하는 단계를 포함한다. 본 발명은 인코딩 성능을 향상시킬 수 있다.

Description

인코딩 및 디코딩 방법, 장치 및 이의 기기
본 발명은 인코딩 및 디코딩 기술분야에 관한 것으로, 특히 인코딩 및 디코딩 방법, 장치 및 이의 기기에 관한 것이다.
공간 절약의 목적을 달성하기 위해, 비디오 이미지는 모두 인코딩된 후 전송되며, 완전한 비디오 인코딩 방법은 예측, 변환, 양자화, 엔트로피 부호화, 필터링 등 과정을 포함할 수 있다. 여기서, 예측 인코딩은 인트라 프레임 인코딩 및 인터 프레임 인코딩을 포함하는데, 인터 프레임 인코딩은 비디오 시간 영역(time domain)의 관련성을 이용하고, 인코딩된 이미지에 이웃한 픽셀을 사용하여 현재 이미지의 픽셀을 예측함으로써, 쓸데없는 비디오 시간 영역을 효과적으로 제거하는 목적을 달성한다. 인터 프레임 인코딩에서, 움직임 벡터(Motion Vector, MV)를 사용하여 현재 프레임의 현재 블록과 참조 프레임의 참조 블록 사이의 상대 변위를 표시할 수 있다. 예를 들어, 만약 현재 프레임 A와 참조 프레임 B 사이에 매우 강한 시간 영역 관련성이 존재하면, 현재 프레임 A의 현재 블록 A1을 전송해야 할 경우, 참조 프레임 B에서 움직임 검색을 수행하여, 현재 블록 A1에 가장 매칭되는 블록 B1(즉 참조 블록)을 찾고, 현재 블록 A1과 참조 블록 B1 사이의 상대 변위를 결정할 수 있으며, 상기 상대 변위가 바로 현재 블록 A1의 움직임 벡터이다. 인코딩단은 현재 블록 A1을 디코딩단에 송신하는 것이 아니라, 움직임 벡터를 디코딩단에 송신할 수 있고, 디코딩단은 움직임 벡터 및 참조 블록 B1에 따라 현재 블록 A1을 획득할 수 있다. 당연히, 움직임 벡터가 차지하는 비트 수가 현재 블록 A1이 차지하는 비트 수보다 작기 때문에, 대량의 비트를 절약할 수 있다.
관련 기술에서, 현재 블록이 단방향 블록일 경우, 현재 블록의 움직임 벡터(이하, 원시 움직임 벡터라고 함)를 획득한 후, 원시 움직임 벡터를 조정하고, 조정된 움직임 벡터에 기반하여 인코딩/디코딩을 수행함으로써, 인코딩 성능을 향상시킬 수 있다. 그러나 현재 블록이 양방향 블록일 경우, 현재 블록의 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 획득한 후, 어떻게 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 조정하겠는가 하는 것은 현재로서는 합리적인 해결수단이 없으며, 다시 말해서, 양방향 블록의 시나리오의 경우, 낮은 예측 품질, 예측 오류 등 문제가 존재하므로 인코딩 성능이 떨어진다.
본 발명은 인코딩 성능을 향상시킬 수 있는, 인코딩 및 디코딩 방법, 장치 및 이의 기기를 제공한다.
본 발명은 인코딩 및 디코딩 방법을 제공하고, 상기 방법은,
만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하는 단계:
제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및
만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 상기 현재 블록에 대해 움직임 보상을 수행하는 단계를 포함한다.
본 발명은 인코딩 및 디코딩 장치를 제공하고, 상기 장치는,
만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하기 위한 결정 모듈:
제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및
만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 현재 블록에 대해 움직임 보상을 수행하기 위한 움직임 보상 모듈을 포함한다.
본 발명은 프로세서 및 기계 판독 가능 저장 매체를 포함하는 인코딩단 기기를 제공하고, 상기 기계 판독 가능 저장 매체에는 상기 프로세서에 의해 실행 가능한 기계 실행 가능 명령어가 저장되어 있으며;
상기 프로세서는 기계 실행 가능 명령어를 실행하여,
만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하는 단계:
제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및
만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 상기 현재 블록에 대해 움직임 보상을 수행하는 단계를 구현한다.
본 발명은 프로세서 및 기계 판독 가능 저장 매체를 포함하는 디코딩단 기기를 제공하고, 상기 기계 판독 가능 저장 매체에는 상기 프로세서에 의해 실행 가능한 기계 실행 가능 명령어가 저장되어 있으며;
상기 프로세서는 기계 실행 가능 명령어를 실행하여,
만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하는 단계:
제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및
만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 상기 현재 블록에 대해 움직임 보상을 수행하는 단계를 구현한다.
상기 기술적 해결수단으로부터, 본 발명의 실시예에서는 만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터에 따라 예측 값을 결정하는 것이 아니라, 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터에 따라 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 획득하고, 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터에 따라 예측 값을 결정함으로써, 낮은 예측 품질, 예측 오류 등 문제를 해결하여, 인코딩 성능 및 인코딩 효율을 향상시킴을 알 수 있다.
도 1a는 본 발명의 일 실시형태의 보간의 모식도이다.
도 1b는 본 발명의 일 실시형태의 비디오 인코딩 프레임워크의 모식도이다.
도 2는 본 발명의 일 실시형태의 인코딩 및 디코딩 방법의 흐름도이다.
도 3은 본 발명의 일 실시형태의 인코딩 및 디코딩 방법의 흐름도이다.
도 4는 본 발명의 일 실시형태의 인코딩 및 디코딩 방법의 흐름도이다.
도 5는 본 발명의 일 실시형태에서 획득된 참조 블록의 모식도이다.
도 6은 본 발명의 일 실시형태의 움직임 벡터 반복의 모식도이다.
도 7a 내지 도 7g는 본 발명의 일 실시형태의 후보 포인트의 순서 모식도이다.
도 8은 본 발명의 일 실시형태의 참조 블록을 확장한 모식도이다.
도 9a는 본 발명의 일 실시형태의 인코딩 및 디코딩 장치의 구조도이다.
도 9b는 본 발명의 일 실시형태의 디코딩단 기기의 하드웨어 구조도이다.
도 9c는 본 발명의 일 실시형태의 인코딩단 기기의 하드웨어 구조도이다.
본 발명의 실시예에서 사용되는 용어는 특정 실시예의 목적을 설명하기 위한 것일 뿐, 본 발명의 실시예를 제한하기 위함이 아니다. 문맥상 명확하게 다른 의미를 나타내지 않는 한, 본 발명의 실시예 및 특허청구범위에 사용된 홀수 형식의 “하나”, “상기”, 및 “상기”는 복수 형식도 포함한다. 또한, 본 명세서에서 사용된 용어 “및/또는"은 하나 또는 다수의 연관되는 나열된 항목을 포함하는 임의의 또는 모든 가능한 조합을 의미함을 이해해야 한다. 본 발명의 실시예에서 용어 제1, 제2, 제3 등을 사용하여 다양한 정보를 설명할 수도 있는바, 이러한 정보는 이러한 용어에 제한되어서는 아니됨을 이해해야 한다. 이러한 용어는 동일한 유형의 정보를 서로 구별하기 위해서만 사용된다. 예를 들어, 본 발명의 범위를 벗어나지 않으면서, 제1 정보를 제2 정보라고도 할 수 있으며, 유사하게, 제2 정보를 제1 정보라고 할 수도 있다. 문맥에 따라, 여기서 사용된 단어 “만약”은 “... ... 경우”, “... ...때" 또는 “... ...결정에 응답하여”로 해석될 수 있다.
본 발명의 실시예에서는 인코딩 및 디코딩 방법, 장치 및 이의 기기를 제공하며, 하기와 같은 개념들이 언급될 수 있다.
인트라 프레임 예측과 인터 프레임 예측(intra prediction and inter prediction) 기술: 인트라 프레임 예측은 비디오 공간 영역의 관련성을 이용하고, 현재 이미지의 인코딩된 블록의 픽셀을 사용하여 현재 픽셀을 예측하여, 쓸데없는 비디오 공간 영역을 제거하는 목적을 달성하는 것을 의미한다. 인터 프레임 예측은 비디오 시간 영역의 관련성을 이용하고, 비디오 시퀀스에는 일반적으로 강한 시간 영역 관련성이 포함되기 때문에, 인코딩된 이미지에 이웃한 픽셀을 사용하여 현재 이미지의 픽셀을 예측함으로써, 쓸데없는 비디오 시간 영역을 효과적으로 제거하는 목적을 달성할 수 있다. 주요한 비디오 인코딩 표준 인터 프레임 예측 부분은 모두 블록 기반 움직임 보상 기술을 사용하며, 주요한 원리는 현재 이미지의 각각의 픽셀 블록에 대해, 이전의 인코딩된 이미지에서 하나의 최적의 매칭 블록을 찾는 것이며, 상기 과정을 움직임 추정이라고 한다.
움직임 벡터(Motion Vector, MV): 인터 프레임 인코딩에서, 움직임 벡터를 사용하여 현재 블록과 그 참조 이미지 중의 최적의 매칭 블록 사이의 상대 변위를 표시할 수 있다. 각각의 분할된 블록에는 모두 디코딩단으로 전송되는 상응한 움직임 벡터가 구비되며, 만약 각각의 블록의 움직임 벡터에 대해 독립적인 인코딩 및 전송을 수행하면, 특히 작은 사이즈의 블록으로 분할될 경우, 상당히 많은 비트를 소모해야 한다. 움직임 벡터를 인코딩하기 위한 비트 수를 줄이기 위해, 인접 이미지 블록 사이의 공간 관련성을 이용하고, 인접한 인코딩된 블록의 움직임 벡터에 따라, 현재 블록의 움직임 벡터를 예측한 다음, 예측 차이를 인코딩함으로써, 움직임 벡터를 나타내는 비트 수를 효과적으로 줄인다. 현재 블록의 움직임 벡터를 인코딩할 경우, 인접한 인코딩된 블록의 움직임 벡터를 사용하여 현재 블록의 움직임 벡터를 예측하고, 움직임 벡터의 예측 값(MVP, Motion Vector Prediction)과 움직임 벡터의 실제 추정 값 사이의 차이 값(MVD, MotionVector Difference)을 인코딩하여, 인코딩 비트 수를 효과적으로 줄인다.
움직임 정보(Motion Information): 움직임 벡터가 현재 블록과 특정 참조 블록 사이의 위치 오프셋을 나타내기 때문에, 이미지 블록을 가리키는 정보를 정확하게 획득하기 위해서는, 움직임 벡터 이외에도, 어느 참조 프레임 이미지를 사용하였는지를 나타내기 위한 참조 프레임 이미지의 인덱스 정보도 필요하다. 현재 프레임 이미지의 경우, 하나의 참조 프레임 이미지 리스트를 셋업할 수 있고, 참조 프레임 이미지 인덱스 정보는 현재 블록이 참조 프레임 이미지 리스트 중의 몇 번째 참조 프레임 이미지를 사용하였는지 나타낸다. 많은 인코딩 기술은 또한 복수의 참조 이미지 리스트를 지원하므로, 하나의 인덱스 값을 사용하여 어느 참조 이미지 리스트를 사용하였는지 표시할 수 있고, 이 인덱스 값을 참조 방향이라고 한다. 움직임 벡터, 참조 프레임 인덱스, 참조 방향 등 움직임에 관련되는 정보를 총칭하여 움직임 정보라고 할 수 있다.
보간(Interpolation): 만약 현재 움직임 벡터가 비정수 픽셀 정밀도이면, 현재 블록에 대응하는 참조 프레임으로부터 기존 픽셀 값을 직접 복사할 수 없으며, 현재 블록의 필요한 픽셀 값은 보간을 통해서만 획득될 수 있다. 도 1a를 참조하면, 만약 오프셋이 1/2 픽셀인 픽셀 값 Y1/2를 획득해야 할 경우, 주변의 기존 픽셀 값 X를 보간하여 획득할 수 있다. 예시적으로, 만약 탭 수가 N인 보간 필터를 사용하면, 주변의 N개 정수 픽셀 보간을 통해 획득해야 한다.
움직임 보상: 움직임 보상은 보간 또는 복사를 통해 현재 블록의 모든 픽셀 값을 획득하는 과정이다.
머지 모드(Merge mode): 일반 머지 모드(즉 Normal Merge 모드, regular Merge 모드라고도 함), 서브 블록 머지 모드(서브 블록 움직임 정보를 사용한 머지 모드, Subblock 머지 모드라고 할 수 있음), MMVD 모드(움직임 차이를 인코딩한 머지 모드, merge with MVD 모드라고 할 수 있음), CIIP 모드(인터 프레임 인트라 프레임 예측이 연합되어 새로운 예측 값을 생성하는 머지 모드, combine inter intra prediciton mode라고 할 수 있음), TPM 모드(삼각 예측을 위한 머지 모드, triangular prediction mode라고 할 수 있음), GEO 모드(임의의 기하학적 분할 형상에 기반한 머지 모드, Geometrical Partitioning라고 할 수 있음)를 포함한다.
스킵 모드(skip mode): 스킵 모드는 하나의 특수한 머지 모드로서, 스킵 모드가 머지 모드와 상이한 점은 스킵 모드는 잔차를 인코딩할 필요가 없다는 것이다. 만약 현재 블록이 스킵 모드이면, CIIP 모드는 기본 값이 오프이며, 일반 머지 모드, 서브 블록 머지 모드, MMVD 모드, TPM 모드, GEO 모드는 여전히 적용될 수 있다.
예시적으로, 일반 머지 모드, 서브 블록 머지 모드, MMVD 모드, CIIP 모드, TPM 모드, GEO 모드 등에 기반하여, 어떻게 예측 값을 생성할 것인지 결정할 수 있다. 예측 값이 생성된 후, 머지 모드의 경우, 예측 값 및 잔차 값을 이용하여 재구성 값을 획득할 수 있고; 스킵 모드의 경우, 잔차 값이 존재하지 않으므로, 직접 예측 값을 이용하여 재구성 값을 획득한다.
시퀀스 파라미터 세트(SPS, sequence parameter set): 시퀀스 파라미터 세트에는 전체 시퀀스에서 일부 도구의 스위칭이 허용되는지 여부를 결정하는 플래그 비트가 존재한다. 만약 플래그 비트가 1이면, 비디오 시퀀스에서 상기 플래그 비트에 대응하는 도구가 활성화되는 것을 허용하고; 만약 플래그 비트가 0이면, 비디오 시퀀스에서 상기 플래그 비트에 대응하는 도구가 인코딩 과정에서 활성화되는 것을 허용하지 않는다.
일반 머지 모드: 후보 움직임 정보 리스트에서 하나의 움직임 정보를 선택하고, 상기 움직임 정보에 기반하여 현재 블록의 예측 값을 생성하며, 상기 후보 움직임 정보 리스트는 공간 영역 인접 블록 후보 움직임 정보, 시간 영역 인접 블록 후보 움직임 정보, 공간 영역 비인접 블록 후보 움직임 정보, 기존 움직임 정보에 기반하여 조합하여 획득된 움직임 정보, 디폴트 움직임 정보 등을 포함한다.
MMVD 모드: 일반 머지 모드의 후보 움직임 정보 리스트에 기반하여, 일반 머지 모드의 후보 움직임 정보 리스트에서 하나의 움직임 정보를 선택하여 기준 움직임 정보로 간주하고, 테이블 조회 방법으로 움직임 정보 차이를 획득한다. 기준 움직임 정보 및 움직임 정보 차이에 기반하여 최종의 움직임 정보를 획득하고, 상기 최종의 움직임 정보에 기반하여 현재 블록의 예측 값을 생성한다.
CIIP 모드: 인트라 프레임 예측 값 및 인터 프레임 예측 값을 결합하여 현재 블록의 새로운 예측 값을 획득한다.
서브 블록 머지 모드: 서브 블록 머지 모드는 Affine 머지 모드 및 서브 블록 TMVP 모드를 포함한다.
Affine(어파인) 머지 모드도 일반 머지 모드와 유사하게, 후보 움직임 정보 리스트에서 하나의 움직임 정보를 선택하고, 상기 움직임 정보에 기반하여 현재 블록의 예측 값을 생성한다. 일반 머지 모드와 상이한 점은, 일반 머지 모드의 후보 움직임 정보 리스트 중의 움직임 정보는 2-파라미터의 병진(translation) 움직임 벡터이고, Affine 머지 모드의 후보 움직임 정보 리스트 중의 움직임 정보는 4-파라미터의 Affine 움직임 정보이거나, 또는, 6-파라미터의 Affine 움직임 정보인 것이다.
서브 블록 TMVP(subblock-based temporal motion vector prediction) 모드는, 시간 영역 참조 프레임에서 특정 블록 움직임 정보를 직접 멀티플렉싱하여 현재 블록의 예측 값을 생성하는 데에 사용하고, 상기 블록 내의 각 서브 블록의 움직임 정보는 상이할 수 있다.
TPM 모드: 하나의 블록을 두 개의 삼각 서브 블록(45도 및 135도의 두 가지 삼각 서브 블록이 존재함)으로 나누고, 이 두 개의 삼각 서브 블록은 상이한 단방향 움직임 정보를 가지며, TPM 모드는 예측 과정에만 사용되고, 후속되는 변환, 양자화 과정에 영향을 미치지 않으며, 여기서의 단방향 움직임 정보도 직접 후보 움직임 정보 리스트에서 획득된 것이다.
GEO 모드: GEO 모드는 TPM 모드와 유사하지만 분할 형상이 상이하다. GEO 모드는 하나의 사각형 블록을 임의의 형상의 두 개의 서브 블록(TPM의 두 개의 삼각 서브 블록의 형상을 제외한 임의의 다른 형상)으로 나누고, 예컨대 하나의 삼각 서브 블록, 하나의 오각형 서브 블록으로 나누거나; 또는, 하나의 삼각 서브 블록, 하나의 사각형 서브 블록으로 나누거나; 또는, 두 개의 사다리꼴 서브 블록으로 나누며, 이 분할 형상에 대해 제한하지 않는다. GEO 모드에 의해 분할된 이 두 개의 서브 블록은 상이한 단방향 움직임 정보를 갖는다.
상기 예로부터 본 실시예에 관한 머지 모드 및 스킵 모드는 후보 움직임 정보 리스트에서 하나의 움직임 정보를 직접 선택하여, 현재 블록의 예측 값을 생성하는 유형의 예측 모드를 의미함을 알 수 있고, 이러한 예측 모드는 인코딩단에서 움직임 검색 과정을 수행할 필요 없으며, MMVD 모드를 제외하고, 다른 모드들은 움직임 정보 차이를 인코딩할 필요가 없다.
비디오 인코딩 프레임워크: 도 1b를 참조하면, 비디오 인코딩 프레임워크를 사용하여 본 발명의 실시예의 인코딩단 처리 프로세스를 구현할 수 있고, 이 밖에, 비디오 디코딩 프레임워크의 모식도는 도 1b와 유사하므로, 여기에서 더 이상 설명하지 않으며, 또한, 비디오 디코딩 프레임워크를 사용하여 본 발명의 실시예의 디코딩단 처리 프로세스를 구현할 수 있다. 구체적으로, 비디오 인코딩 프레임워크 및 비디오 디코딩 프레임워크에는 인트라 프레임 예측, 움직임 추정/움직임 보상, 참조 이미지 버퍼, 인-루프(in loop) 필터링, 재구성, 변환, 양자화, 역변환, 역양자화, 엔트로피 인코더 등 모듈이 포함된다. 인코딩단에서는 이러한 모듈 사이의 협력을 통해 인코딩단 처리 프로세스를 구현할 수 있고, 디코딩단에서는 이러한 모듈 사이의 협력을 통해 디코딩단 처리 프로세스를 구현할 수 있다.
관련 기술에서, 현재 블록이 양방향 블록일 경우, 현재 블록의 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 획득한 후, 어떻게 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 조정하겠는가 하는 것은 현재로서는 합리적인 해결수단이 없다.
본 발명의 실시예에서는, 현재 블록이 양방향 블록일 경우, 두 개의 상이한 방향의 움직임 벡터 사이에 거울 대칭 관계가 종종 존재하는 경우를 고려하면, 상기 특징에 기반하여 쓸데없는 것을 추가적으로 제거할 수 있으며, 예를 들어, 한 가지 움직임 벡터 조정 모드를 제공할 수 있으며, 움직임 벡터 조정 모드에서, 원시 움직임 벡터에 기초하여 획득된 예측 값에 기반하여, 디코딩단 국부 검색 방법을 통해 움직임 벡터를 미세하게 조정함으로써, 더 나은 움직임 벡터를 획득하여 왜곡이 적은 예측 값을 생성한다.
예시적으로, 만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 현재 블록의 각각의 서브 블록에 대해, 상기 서브 블록의 제1 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고, 상기 서브 블록의 제2 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제2 참조 블록을 결정하며, 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 조정하여, 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 획득할 수 있고, 계속하여 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터에 따라 상기 서브 블록의 예측 값을 획득할 수 있으며, 상기 방식은 낮은 예측 품질, 예측 오류 등 문제를 해결하고, 또한 인코딩 성능 및 인코딩 효율을 향상시킬 수 있다.
이하, 몇 개의 구체적인 실시예를 결합하여, 본 발명의 인코딩 및 디코딩 방법을 상세하게 설명하기로 한다.
실시예 1: 도 2를 참조하면, 이는 본 발명의 실시예에서 제공되는 인코딩 및 디코딩 방법의 흐름 모식도이고, 상기 인코딩 및 디코딩 방법은 디코딩단 또는 인코딩단에 응용될 수 있으며, 상기 인코딩 및 디코딩 방법은 하기와 같은 단계를 포함할 수 있다.
단계 201에서, 만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정한다:
제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것; 및
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것.
일 가능한 실시형태에서,
제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것; 및
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 중 어느 하나의 조건이 만족되지 않으면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작하지 않음을 결정한다.
상기 실시예에서는 7개의 조건이 제공되었고, 상기 7개의 조건에 기반하여 현재 블록에 대해 움직임 벡터 조정 모드를 시작하는지 여부를 결정한다. 실제 응용에서는 상기 7개의 조건 중 일부 조건을 선택하고, 선택된 일부 조건에 기반하여 현재 블록에 대해 움직임 벡터 조정 모드를 시작하는지 여부를 결정할 수도 있다. 예를 들어, 상기 7개의 조건 중 5개의 조건을 선택하고, 이 선택 방식에 대해 제한하지 않으며, 임의의 5개의 조건일 수 있고, 만약 선택된 5개의 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하고; 선택된 5개의 조건 중 어느 하나의 조건이 만족되지 않으면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작하지 않음을 결정한다. 물론, 상기 7개의 조건 중 다른 수량의 조건을 선택할 수도 있으며, 이에 대해 제한하지 않는다.
상기 실시예에서, 머지 모드 또는 스킵 모드는 일반 머지 모드, 서브 블록 머지 모드, MMVD 모드, CIIP 모드, TPM 모드, GEO 모드를 포함한다. 현재 블록의 예측 모드가 일반 머지 모드를 제외한 다른 모드가 아닌 것은, 예측 모드가 서브 블록 머지 모드, MMVD 모드, CIIP 모드, TPM 모드, GEO 모드 등이 아님을 의미한다.
예를 들어, 현재 블록의 예측 모드가 머지 모드 또는 스킵 모드일 때, 현재 블록의 예측 모드는 MMVD 모드가 아니고, 현재 블록의 예측 모드는 CIIP 모드도 아니다.
현재 블록의 예측 모드가 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드가 MMVD 모드가 아니며, 현재 블록의 예측 모드가 CIIP 모드도 아니고, 현재 블록의 예측 모드가 서브 블록 머지 모드도 아니며, 현재 블록의 예측 모드가 TPM 모드도 아니고, 현재 블록의 예측 모드가 GEO 모드도 아닌 것이 결정될 때, 현재 블록의 예측 모드가 일반 머지 모드를 제외한 다른 모드가 아님을 결정할 수 있다. 즉, 배제법으로 현재 블록의 예측 모드가 일반 머지 모드임을 결정한다.
상기 실시예에서, 현재 블록의 예측 값이 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득된다는 것은, 현재 블록이 양방향 예측 모드를 사용하는 바, 즉 현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득된다는 것을 의미한다.
상기 실시예에서, 현재 블록은 두 개의 리스트의 움직임 정보에 대응될 수 있고, 제1 움직임 정보 및 제2 움직임 정보로 표기되며, 제1 움직임 정보는 제1 참조 프레임 및 제1 원시 움직임 벡터를 포함하고, 제2 움직임 정보는 제2 참조 프레임 및 제2 원시 움직임 벡터를 포함하며, 상기 두 개의 참조 프레임은 제1 참조 프레임 및 제2 참조 프레임일 수 있다. 두 개의 참조 프레임의 디스플레이 순서가 각각 현재 프레임의 앞과 뒤에 위치한다는 것은, 제1 참조 프레임이 현재 블록이 위치한 현재 프레임의 앞에 위치하고, 제2 참조 프레임이 현재 프레임의 뒤에 위치한다는 것을 의미한다. 예시적으로, 제1 참조 프레임을 전향 참조 프레임이라고도 할 수 있고, 전향 참조 프레임은 제1 리스트(예컨대, list0)에 위치하며, 제2 참조 프레임을 후향 참조 프레임이라고도 할 수 있고, 후향 참조 프레임은 제2 리스트(예컨대, list1)에 위치한다.
상기 실시예에서, 현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것은, 너비가 제1 임계값보다 크거나 같고, 높이가 제2 임계값보다 크거나 같으며, 면적이 제3 임계값보다 크거나 같은 것; 또는, 너비가 제1 임계값보다 크거나 같고, 높이가 제2 임계값보다 크거나 같으며, 면적이 제4 임계값보다 큰 것을 포함한다. 예시적으로, 상기 제3 임계값은 상기 제4 임계값보다 클 수 있다. 예를 들어, 제1 임계값은 8일 수 있고, 제2 임계값은 8일 수 있으며, 제3 임계값은 128일 수 있고, 제4 임계값은 64일 수 있다. 물론, 상기 수치는 몇 개의 예시일 뿐, 이에 대해 제한하지 않는다.
상기 실시예에서, 제어 정보가 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것은, 시퀀스 레벨 제어 정보(예컨대, 복수의 프레임의 이미지의 제어 정보)가 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것; 및/또는, 프레임 레벨 제어 정보(예컨대, 하나의 프레임의 이미지의 제어 정보)가 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것을 포함할 수 있으나, 이에 제한되지 않는다.
단계 202에서, 만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 현재 블록에 대해 움직임 보상을 수행한다.
일 가능한 실시형태에서, 만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 현재 블록에 포함된 적어도 하나의 서브 블록 중의 각각의 서브 블록에 대해: 상기 서브 블록의 제1 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고, 상기 서브 블록의 제2 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제2 참조 블록을 결정하며; 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 조정하여, 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터 및 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득하고; 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터에 따라 상기 서브 블록의 예측 값을 결정한다. 각각의 서브 블록의 예측 값이 획득된 후, 각각의 서브 블록의 예측 값에 따라 현재 블록의 예측 값을 결정할 수 있다.
예시적으로, 상기 서브 블록의 제1 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고, 상기 서브 블록의 제2 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제2 참조 블록을 결정하는 단계는 하기와 같은 단계를 포함할 수 있으나 이에 제한되지 않는다:
상기 서브 블록의 제1 원시 움직임 벡터에 기반하여, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고; 상기 제1 참조 블록 중 각각의 픽셀 포인트의 픽셀 값은 상기 제1 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 보간하여 획득되거나, 또는, 상기 제1 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 복사하여 획득된다.
상기 서브 블록의 제2 원시 움직임 벡터에 기반하여, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제2 참조 블록을 결정하고; 상기 제2 참조 블록 중 각각의 픽셀 포인트의 픽셀 값은 상기 제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 보간하여 획득되거나, 또는, 상기 제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 복사하여 획득된다.
예시적으로, 제1 참조 블록의 사이즈는 제2 참조 블록의 사이즈와 동일하고, 제1 참조 블록의 너비는 상기 서브 블록의 너비와 검색 범위에 기초하여 결정되며, 제1 참조 블록의 높이 값은 상기 서브 블록의 높이와 검색 범위에 기초하여 결정된다.
예시적으로, 현재 블록에 포함된 각각의 서브 블록에 대해: 상기 서브 블록에 대응하는 제1 참조 블록의 제1 픽셀 값 및 상기 서브 블록에 대응하는 제2 참조 블록의 제2 픽셀 값에 따라, 상기 서브 블록의 제1 원시 움직임 벡터 및 상기 서브 블록의 제2 원시 움직임 벡터를 조정하여, 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터 및 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터, 즉 상기 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 획득한다.
일 가능한 실시형태에서, 초기 움직임 벡터를 중심으로, 상기 초기 움직임 벡터 주변의 상기 초기 움직임 벡터가 포함되는 움직임 벡터에서 일부 또는 전부의 움직임 벡터를 선택하고, 선택된 움직임 벡터를 후보 움직임 벡터로 결정할 수 있으며; 상기 초기 움직임 벡터는 제1 원시 움직임 벡터 또는 제2 원시 움직임 벡터이다. 다음, 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 상기 초기 움직임 벡터 및 각 후보 움직임 벡터에서 하나의 움직임 벡터를 선택하여 최적의 움직임 벡터로 간주할 수 있다. 다음, 최적의 움직임 벡터에 따라 제1 원시 움직임 벡터를 조정하여, 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터를 획득하고, 최적의 움직임 벡터에 따라 제2 원시 움직임 벡터를 조정하여, 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득할 수 있다.
예시적으로, 상기 최적의 움직임 벡터에 따라 제1 원시 움직임 벡터를 조정하여, 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터를 획득하고, 최적의 움직임 벡터에 따라 제2 원시 움직임 벡터를 조정하여, 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득하는 단계는, 최적의 움직임 벡터에 따라, 서브 블록의 제1 정수 픽셀 움직임 벡터 조정 값, 제2 정수 픽셀 움직임 벡터 조정 값, 제1 서브 픽셀 움직임 벡터 조정 값 및 제2 서브 픽셀 움직임 벡터 조정 값을 결정하는 단계; 제1 정수 픽셀 움직임 벡터 조정 값 및 제1 서브 픽셀 움직임 벡터 조정 값에 따라, 제1 원시 움직임 벡터를 조정하여, 서브 블록의 제1 목표 움직임 벡터를 획득하는 단계; 및 제2 정수 픽셀 움직임 벡터 조정 값 및 제2 서브 픽셀 움직임 벡터 조정 값에 따라, 제2 원시 움직임 벡터를 조정하여, 서브 블록의 제2 목표 움직임 벡터를 획득하는 단계를 포함할 수 있다.
예시적으로, 현재 블록에 포함된 적어도 하나의 서브 블록 중의 각각의 서브 블록에 대해: 상기 서브 블록의 제1 목표 움직임 벡터 및 상기 서브 블록의 제2 목표 움직임 벡터에 따라 상기 서브 블록의 예측 값을 결정할 수 있으며, 이 과정에 대해 더 이상 설명하지 않는다.
일 가능한 실시형태에서, 만약 최적의 움직임 벡터와 초기 움직임 벡터가 동일하면, 상기 서브 블록의 제1 목표 움직임 벡터에 기반하여, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제3 참조 블록을 결정하고; 상기 서브 블록의 제2 목표 움직임 벡터에 기반하여, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제4 참조 블록을 결정할 수 있다. 다음, 상기 제3 참조 블록의 픽셀 값 및 상기 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득할 수 있다.
다른 가능한 실시형태에서, 만약 최적의 움직임 벡터와 초기 움직임 벡터가 상이하면, 제1 참조 프레임에서 제5 참조 블록을 결정하고, 상기 제5 참조 블록을 확장하여 제6 참조 블록을 획득하며; 다음, 상기 서브 블록의 제1 목표 움직임 벡터에 기반하여, 상기 제6 참조 블록에서 상기 서브 블록에 대응하는 제3 참조 블록을 선택할 수 있다. 또한, 제2 참조 프레임에서 제7 참조 블록을 결정하고, 상기 제7 참조 블록을 확장하여 제8 참조 블록을 획득하며; 상기 서브 블록의 제2 목표 움직임 벡터에 기반하여, 상기 제8 참조 블록에서 상기 서브 블록에 대응하는 제4 참조 블록을 선택할 수 있다. 다음, 상기 제3 참조 블록의 픽셀 값 및 상기 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득할 수 있다.
상기 실시예에서, 제3 참조 블록의 픽셀 값 및 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득하는 단계는, 제3 참조 블록의 픽셀 값, 제3 참조 블록의 픽셀 값에 대응하는 제1 가중치, 제4 참조 블록의 픽셀 값, 제4 참조 블록의 픽셀 값에 대응하는 제2 가중치에 대해 가중 처리를 수행하여, 상기 서브 블록의 예측 값을 획득하는 단계를 포함할 수 있으나 이에 제한되지 않고; 예시적으로, 제1 가중치와 제2 가중치는 동일할 수 있다.
예시적으로, 각각의 서브 블록의 예측 값이 획득된 후, 각각의 서브 블록의 예측 값을 하나로 조합하여, 현재 블록의 예측 값을 획득할 수 있고, 이 현재 블록의 예측 값의 결정 과정에 대해 제한하지 않는다.
상기 기술적 해결수단으로부터, 본 발명의 실시예에서는 만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터에 따라 예측 값을 결정하는 것이 아니라, 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터에 따라 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 획득하고, 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터에 따라 예측 값을 결정함으로써, 낮은 예측 품질, 예측 오류 등 문제를 해결하여, 인코딩 성능 및 인코딩 효율을 향상시킴을 알 수 있다.
실시예 2: 상기 방법과 동일한 구상에 기반하여, 도 3을 참조하면, 이는 본 발명의 실시예에서 제공되는 다른 인코딩 및 디코딩 방법의 흐름 모식도이고, 상기 방법은 인코딩단에 응용될 수 있으며, 상기 방법은 하기와 같은 단계를 포함할 수 있다.
단계 301에서, 인코딩단이 현재 블록에 대해 움직임 벡터 조정 모드를 시작하는지 여부를 결정한다. 만약 시작함이 결정되면, 단계 302를 수행하고, 그렇지 않으면, 본 발명에서 제공한 움직임 벡터 조정 방식을 사용할 필요가 없으며, 이 경우의 처리에 대해 제한하지 않는다.
일 예에서, 만약 인코딩단이 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하면, 현재 블록의 움직임 정보가 충분히 정확하지 않음을 설명하므로, 현재 블록에 대해 움직임 벡터 조정 모드(즉 본 발명의 기술적 해결수단)를 시작하고, 단계 302를 수행한다.
만약 인코딩단이 현재 블록에 대해 움직임 벡터 조정 모드를 시작하지 않음을 결정하면, 현재 블록의 움직임 정보가 이미 충분히 정확함을 설명하므로, 현재 블록에 대해 움직임 벡터 조정 모드를 시작하지 않고, 본 발명에서 제공한 움직임 벡터 조정 방식을 사용하지 않을 수 있다.
단계 302에서, 현재 블록에 포함된 적어도 하나의 서브 블록 중의 각각의 서브 블록에 대해: 인코딩단이 상기 서브 블록의 제1 원시 움직임 벡터에 따라, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고; 상기 서브 블록의 제2 원시 움직임 벡터에 따라, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제2 참조 블록을 결정한다. 구분의 편리를 위해, 제1 참조 블록 중 각각의 픽셀 포인트의 픽셀 값을 제1 픽셀 값이라고 칭하고, 제2 참조 블록 중 각각의 픽셀 포인트의 픽셀 값을 제2 픽셀 값이라고 칭한다.
일 예에서, 만약 현재 블록이 양방향 예측을 사용한 블록이면, 현재 블록의 각각의 서브 블록에 대해, 양방향 움직임 정보가 존재할 수 있는바, 이 양방향 움직임 정보는 두 개의 참조 프레임 및 두 개의 원시 움직임 벡터를 포함할 수 있고, 상기 양방향 움직임 정보는 제1 참조 프레임과 제1 원시 움직임 벡터, 제2 참조 프레임과 제2 원시 움직임 벡터를 포함할 수 있다.
제1 원시 움직임 벡터에 기반하여, 인코딩단이 제1 참조 프레임에서 서브 블록에 대응하는 제1 참조 블록을 결정하고, 제1 참조 블록 중 각각의 픽셀 포인트의 픽셀 값을 제1 픽셀 값이라고 칭한다. 제2 원시 움직임 벡터에 기반하여, 인코딩단이 제2 참조 프레임에서 서브 블록에 대응하는 제2 참조 블록을 결정하고, 제2 참조 블록 중 각각의 픽셀 포인트의 픽셀 값을 제2 픽셀 값이라고 칭한다.
일 예에서, 현재 블록이 소재하는 현재 프레임과 제1 참조 프레임 사이의 거리와, 제2 참조 프레임과 현재 블록이 소재하는 현재 프레임 사이의 거리는 동일할 수 있다. 예를 들어, 제1 참조 프레임은 제1 프레임이고, 현재 프레임은 제5 프레임이며, 제2 참조 프레임은 제9 프레임이다.
일 예에서, 제1 원시 움직임 벡터와 제2 원시 움직임 벡터에는 거울 대칭 관계가 존재할 수 있는데, 예를 들어, 제1 원시 움직임 벡터가 (4, 4)이고, 제2 원시 움직임 벡터가 (-4, -4)이며; 제1 원시 움직임 벡터가 (2.5, 3.5)이고, 제2 원시 움직임 벡터가 (-2.5, -3.5)이다. 물론, 이는 단지 하나의 예시일 뿐, 이에 대해 제한하지 않는다.
제1 참조 블록 및 제2 참조 블록을 결정하는 방식은 후속되는 실시예를 참조할 수 있으며, 여기에서 더 이상 설명하지 않는다.
단계 303에서, 인코딩단이 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터를 조정하여, 서브 블록의 제1 목표 움직임 벡터를 획득하고; 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제2 원시 움직임 벡터를 조정하여, 서브 블록의 제2 목표 움직임 벡터를 획득한다.
일 예에서, 만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작하면, 인코딩단은 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 기반하여, 국부 검색 방법을 통해 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 미세하게 조정함으로써, 더 나은 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 획득하고, 나아가 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 이용하여 왜곡이 적은 예측 값을 생성할 수 있다.
일 예에서, 현재 블록은 적어도 하나의 서브 블록을 포함할 수 있으며, 만약 현재 블록이 하나의 서브 블록만 포함하면, 상기 서브 블록이 바로 현재 블록 자체이다. 현재 블록의 각각의 서브 블록에 대해, 상기 서브 블록은 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터에 대응될 수 있고, 조정을 수행한 후, 상기 서브 블록은 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터에 대응될 수 있다.
예시적으로, 만약 현재 블록이 서브 블록 A 및 서브 블록 B를 포함하면, 서브 블록 A에 대해, 서브 블록 A는 제1 원시 움직임 벡터 A1 및 제2 원시 움직임 벡터 A2에 대응되고, 조정을 수행한 후, 서브 블록 A는 제1 목표 움직임 벡터 A3 및 제2 목표 움직임 벡터 A4에 대응된다. 서브 블록 B에 대해, 서브 블록 B는 제1 원시 움직임 벡터 B1 및 제2 원시 움직임 벡터 B2에 대응되고, 조정을 수행한 후, 서브 블록 B는 제1 목표 움직임 벡터 B3 및 제2 목표 움직임 벡터 B4에 대응된다.
예시적으로, 서브 블록 A에 대응하는 제1 원시 움직임 벡터 A1과 서브 블록 B에 대응하는 제1 원시 움직임 벡터 B1은 동일할 수 있고, 모두 현재 블록의 제1 원시 움직임 벡터이며; 서브 블록 A에 대응하는 제2 원시 움직임 벡터 A2와 서브 블록 B에 대응하는 제2 원시 움직임 벡터 B2는 동일할 수 있으며, 모두 현재 블록의 제2 원시 움직임 벡터이다.
각각의 서브 블록의 제1 원시 움직임 벡터에 대해 각각 조정을 수행하기 때문에, 서브 블록 A에 대응하는 제1 목표 움직임 벡터 A3과 서브 블록 B에 대응하는 제1 목표 움직임 벡터 B3은 동일할 수도 있고, 상이할 수도 있다.
각각의 서브 블록의 제2 원시 움직임 벡터에 대해 각각 조정을 수행하기 때문에, 서브 블록 A에 대응하는 제2 목표 움직임 벡터 A4와 서브 블록 B에 대응하는 제2 목표 움직임 벡터 B4는 동일할 수 있고, 상이할 수도 있다.
원시 움직임 벡터의 조정 방식은 후속되는 실시예를 참조할 수 있으며, 여기에서 더 이상 설명하지 않는다.
단계 304에서, 인코딩단이 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터에 따라 서브 블록의 예측 값을 결정한다.
단계 305에서, 인코딩단이 각각의 서브 블록의 예측 값에 따라 현재 블록의 예측 값을 결정한다.
예를 들어, 만약 현재 블록이 서브 블록 A 및 서브 블록 B를 포함하면, 서브 블록 A의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 이용하여 서브 블록 A의 예측 값을 결정하고, 서브 블록 B의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 이용하여 서브 블록 B의 예측 값을 결정할 수 있으며, 서브 블록 A의 예측 값 및 서브 블록 B의 예측 값이 바로 현재 블록의 예측 값이다.
예시적으로, 인코딩단이 현재 블록의 각각의 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 저장하거나, 또는, 현재 블록의 각각의 서브 블록의 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 저장하거나, 또는, 현재 블록의 각각의 서브 블록의 제1 원시 움직임 벡터, 제2 원시 움직임 벡터, 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 저장한다.
실시예 3: 상기 방법과 동일한 구상에 기반하여, 도 4를 참조하면, 이는 본 발명의 실시예에서 제공되는 다른 인코딩 및 디코딩 방법의 흐름 모식도이고, 상기 방법은 디코딩단에 응용될 수 있으며, 상기 방법은 하기와 같은 단계를 포함할 수 있다.
단계 401에서, 디코딩단이 현재 블록에 대해 움직임 벡터 조정 모드를 시작하는지 여부를 결정한다. 만약 시작함이 결정되면, 단계 402를 수행하고, 그렇지 않으면, 본 발명에서 제공한 움직임 벡터 조정 방식을 사용할 필요가 없으며, 이 경우의 처리에 대해 제한하지 않는다.
일 예에서, 디코딩단이 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하면, 현재 블록의 움직임 정보가 충분히 정확하지 않음을 설명하므로, 현재 블록에 대해 움직임 벡터 조정 모드(즉 본 발명의 기술적 해결수단)를 시작하고, 단계 402를 수행한다.
만약 디코딩단이 현재 블록에 대해 움직임 벡터 조정 모드를 시작하지 않음을 결정하면, 현재 블록의 움직임 정보가 이미 충분히 정확함을 설명하므로, 현재 블록에 대해 움직임 벡터 조정 모드를 시작하지 않고, 본 발명에서 제공한 움직임 벡터 조정 방식을 사용하지 않을 수 있다.
단계 402에서, 현재 블록에 포함된 적어도 하나의 서브 블록 중의 각각의 서브 블록에 대해: 디코딩단이 상기 서브 블록의 제1 원시 움직임 벡터에 따라, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고; 상기 서브 블록의 제2 원시 움직임 벡터에 따라, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제2 참조 블록을 결정한다. 구분의 편리를 위해, 제1 참조 블록 중 각각의 픽셀 포인트의 픽셀 값을 제1 픽셀 값이라고 칭하고, 제2 참조 블록 중 각각의 픽셀 포인트의 픽셀 값을 제2 픽셀 값이라고 칭한다.
단계 403에서, 디코딩단이 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터를 조정하여, 서브 블록의 제1 목표 움직임 벡터를 획득하고; 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제2 원시 움직임 벡터를 조정하여, 서브 블록의 제2 목표 움직임 벡터를 획득한다.
단계 404에서, 디코딩단이 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터에 따라 서브 블록의 예측 값을 결정한다.
단계 405에서, 디코딩단이 각각의 서브 블록의 예측 값에 따라 현재 블록의 예측 값을 결정한다.
예시적으로, 디코딩단이 현재 블록의 각각의 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 저장하거나, 또는, 현재 블록의 각각의 서브 블록의 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 저장하거나, 또는, 현재 블록의 각각의 서브 블록의 제1 원시 움직임 벡터, 제2 원시 움직임 벡터, 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 저장한다.
예시적으로, 단계 401 내지 단계 405는 단계 301 내지 단계 305를 참조할 수 있고, 여기에서 더 이상 설명하지 않는다.
실시예 4: 상기 실시예에서, 현재 블록에 대해 움직임 벡터 조정 모드를 시작하는지 여부는 아래에서 설명하기로 한다.
일 가능한 실시형태에서, 하기와 같은 시작 조건이 주어질 수 있으며, 물론, 이러한 시작 조건은 단지 하나의 예시일 뿐, 실제 응용에서 하기와 같은 시작 조건들은 임의로 조합될 수 있으며, 이에 대해 제한하지 않는다. 예시적으로, 하기와 같은 시작 조건 중 모든 시작 조건이 모두 만족될 때, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정한다.
1. 제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것이다.
예시적으로, 상기 제어 정보는 시퀀스 레벨 제어 정보 및/또는 프레임 레벨 제어 정보를 포함할 수 있으나 이에 제한되지 않는다.
일 가능한 실시형태에서, 시퀀스 레벨(예컨대, 멀티 프레임의 이미지) 제어 정보는 제어 플래그 비트(예컨대, sps_cur_tool_enabled_flag)를 포함할 수 있고, 프레임 레벨(예컨대, 하나의 프레임의 이미지) 제어 정보는 제어 플래그 비트(예컨대, pic_cur_tool_disabled_flag)를 포함할 수 있다. sps_cur_tool_enabled_flag가 제1 값이고, pic_cur_tool_disabled_flag가 제2 값이면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, sps_cur_tool_enabled_flag는 시퀀스 중의 모든 이미지가 움직임 벡터 조정 모드를 사용하도록 허용하는지 여부를 나타낸다. pic_cur_tool_disabled_flag는 현재 이미지 내의 각 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않는지 여부를 나타낸다. sps_cur_tool_enabled_flag가 제1 값일 때, 시퀀스 중의 모든 이미지가 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다. pic_cur_tool_disabled_flag가 제2 값일 때, 현재 이미지 내의 각 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, sps_cur_tool_enabled_flag가 제2 값 및/또는 pic_cur_tool_disabled_flag가 제1 값일 때, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않는 것이다.
다른 가능한 실시형태에서, 시퀀스 레벨(예컨대, 멀티 프레임의 이미지) 제어 정보는 제어 플래그 비트(예컨대, sps_cur_tool_disabled_flag)를 포함할 수 있고, 프레임 레벨(예컨대, 하나의 프레임의 이미지) 제어 정보는 제어 플래그 비트(예컨대, pic_cur_tool_disabled_flag)를 포함할 수 있다. sps_cur_tool_disabled_flag가 제2 값이고, 또한 pic_cur_tool_disabled_flag가 제2 값이면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, sps_cur_tool_disabled_flag는 시퀀스 중의 모든 이미지가 움직임 벡터 조정 모드를 사용하도록 허용하지 않는지 여부를 나타낸다. pic_cur_tool_disabled_flag는 현재 이미지 내의 각 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않는지 여부를 나타낸다. sps_cur_tool_disabled_flag가 제2 값일 때, 시퀀스 중의 모든 이미지가 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다. pic_cur_tool_disabled_flag가 제2 값일 때, 현재 이미지 내의 각 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, sps_cur_tool_disabled_flag가 제1 값 및/또는 pic_cur_tool_disabled_flag가 제1 값일 때, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않는 것이다.
다른 가능한 실시형태에서, 시퀀스 레벨(예컨대, 멀티 프레임의 이미지) 제어 정보는 제어 플래그 비트(예컨대, sps_cur_tool_enabled_flag)를 포함할 수 있고, 프레임 레벨(예컨대, 하나의 프레임의 이미지) 제어 정보는 제어 플래그 비트(예컨대, pic_cur_tool_enabled_flag)를 포함할 수 있다. sps_cur_tool_enabled_flag가 제1 값이고, pic_cur_tool_enabled_flag가 제1 값이면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, sps_cur_tool_enabled_flag는 시퀀스 중의 모든 이미지가 움직임 벡터 조정 모드를 사용하도록 허용하는지 여부를 나타낸다. pic_cur_tool_enabled_flag는 현재 이미지 내의 각 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는지 여부를 나타낸다. sps_cur_tool_enabled_flag가 제1 값일 때, 시퀀스 중의 모든 이미지가 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다. pic_cur_tool_enabled_flag가 제1 값일 때, 현재 이미지 내의 각 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, sps_cur_tool_enabled_flag가 제2 값 및/또는 pic_cur_tool_enabled_flag가 제2 값일 때, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않는 것이다.
다른 가능한 실시형태에서, 시퀀스 레벨(예컨대, 멀티 프레임의 이미지) 제어 정보는 제어 플래그 비트(예컨대, sps_cur_tool_disabled_flag)를 포함할 수 있고, 프레임 레벨(예컨대, 하나의 프레임의 이미지) 제어 정보는 제어 플래그 비트(예컨대, pic_cur_tool_enabled_flag)를 포함할 수 있다. sps_cur_tool_disabled_flag가 제2 값이고, pic_cur_tool_enabled_flag가 제1 값이면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, sps_cur_tool_disabled_flag는 시퀀스 중의 모든 이미지가 움직임 벡터 조정 모드를 사용하도록 허용하지 않는지 여부를 나타낸다. pic_cur_tool_enabled_flag는 현재 이미지 내의 각 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는지 여부를 나타낸다. sps_cur_tool_disabled_flag가 제2 값일 때, 시퀀스 중의 모든 이미지가 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다. pic_cur_tool_enabled_flag가 제1 값일 때, 현재 이미지 내의 각 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, sps_cur_tool_disabled_flag가 제1 값 및/또는 pic_cur_tool_enabled_flag가 제2 값일 때, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않는 것이다.
상기 실시예에서, 제1 값은 1일 수 있고, 제2 값은 0일 수 있으며, 또는, 제1 값은 0일 수 있고, 제2 값은 1일 수 있는바, 물론, 이는 단지 예시일 뿐, 이에 대해 제한하지 않는다.
예시적으로, 본 명세서의 프레임은 이미지와 동일하고, 예컨대, 현재 프레임은 현재 이미지를 나타내며, 참조 프레임은 참조 이미지를 나타낸다.
2. 현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아니다.
일 가능한 실시형태에서, 만약 현재 블록의 예측 모드(예컨대, 인터 프레임 예측 모드)가 머지 모드 또는 스킵 모드이고, 또한 현재 블록의 예측 모드가 일반 머지 모드를 제외한 다른 모드(예컨대, 서브 블록 머지 모드, MMVD 모드, CIIP 모드, TPM 모드, GEO 모드 등)가 아니면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다. 예를 들어, 현재 블록의 예측 모드가 머지 모드 또는 스킵 모드일 때, 현재 블록의 예측 모드가 MMVD 모드가 아니고, 현재 블록의 예측 모드가 CIIP 모드도 아닐 때, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, 만약 현재 블록의 예측 모드가 머지 모드가 아니고, 현재 블록의 예측 모드가 스킵 모드가 아니면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 2가 만족되지 않는다.
예시적으로, 만약 현재 블록의 예측 모드가 머지 모드 또는 스킵 모드이고, 또한 현재 블록의 예측 모드가 일반 머지 모드를 제외한 다른 모드(예컨대, 서브 블록 머지 모드, MMVD 모드, CIIP 모드, TPM 모드, GEO 모드 등)이면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 2가 만족되지 않는다.
다른 가능한 실시형태에서, 만약 현재 블록의 예측 모드가 일반 머지 모드(예컨대, regular merge 모드)이면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다. 예시적으로, 일반 머지 모드는, 현재 블록 움직임 정보 리스트 중의 특정 움직임 정보를 현재 블록의 움직임 정보로 멀티플렉싱하여, 현재 블록의 예측 값을 생성하는 것이다.
예시적으로, 만약 현재 블록의 예측 모드가 일반 머지 모드가 아니면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 2가 만족되지 않는다.
3. 현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일하다. 현재 블록의 예측 값이 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득된다는 것은, 현재 블록이 양방향 예측 모드를 사용하는 바, 즉 현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득된다는 것을 의미한다. 예시적으로, 현재 블록은 두 개의 리스트의 움직임 정보에 대응될 수 있고, 제1 움직임 정보 및 제2 움직임 정보로 표기되며, 제1 움직임 정보는 제1 참조 프레임 및 제1 원시 움직임 벡터를 포함하고, 제2 움직임 정보는 제2 참조 프레임 및 제2 원시 움직임 벡터를 포함한다. 두 개의 참조 프레임의 디스플레이 순서가 각각 현재 프레임의 앞과 뒤에 위치한다는 것은, 제1 참조 프레임이 현재 블록이 위치한 현재 프레임의 앞에 위치하고, 제2 참조 프레임이 현재 프레임의 뒤에 위치한다는 것을 의미한다.
일 가능한 실시형태에서, 만약 현재 블록에 두 개의 리스트(예컨대, list0 및 list1)의 움직임 정보(예컨대, 두 개의 참조 프레임 및 두 개의 움직임 벡터)가 존재하고, 두 개의 참조 프레임의 디스플레이 순서가 각각 현재 프레임의 앞과 뒤에 위치하며, 또한 두 개의 참조 프레임에서 현재 프레임까지의 거리가 동일하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
두 개의 참조 프레임의 디스플레이 순서가 각각 현재 프레임의 앞과 뒤에 위치하고, 또한 두 개의 참조 프레임에서 현재 프레임까지의 거리가 동일하면, 현재 프레임의 디스플레이 순서 번호 POC_Cur, list0의 참조 프레임의 디스플레이 순서 번호 POC_0, list1의 참조 프레임의 디스플레이 순서 번호 POC_1의 상대적 관계를 통해 나타낼 수 있는바, 즉, (POC_0-POC_Cur)은 (POC_Cur-POC_0)와 완전히 같다.
예시적으로, 현재 블록이 양방향 예측을 사용하고, 현재 블록에 대응하는 두 개의 참조 프레임은 상이한 방향에서 비롯되는 바, 다시 말해서, 현재 블록에 대응하는 하나의 참조 프레임은 현재 프레임의 앞에 위치하고, 현재 블록에 대응하는 다른 참조 프레임은 현재 프레임의 뒤에 위치한다.
예시적으로, 상기 조건 "현재 블록에 두 개의 참조 프레임이 존재하고, 또한 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 또한 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것”은 하기와 같은 내용으로 표현될 수 있다.
예시적으로, 만약 현재 블록에 하나의 참조 프레임만 존재하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 3이 만족되지 않는다. 또는, 만약 현재 블록에 두 개의 참조 프레임이 존재하지만, 두 개의 참조 프레임의 디스플레이 순서가 모두 현재 프레임의 앞에 위치하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 3이 만족되지 않는다. 또는, 만약 현재 블록에 두 개의 참조 프레임이 존재하지만, 두 개의 참조 프레임의 디스플레이 순서가 모두 현재 프레임의 뒤에 위치하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 3이 만족되지 않는다. 또는, 만약 현재 블록에 두 개의 참조 프레임이 존재하고, 두 개의 참조 프레임의 디스플레이 순서가 각각 현재 프레임의 앞과 뒤에 위치하지만, 두 개의 참조 프레임과 현재 프레임 사이의 거리가 상이하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 3이 만족되지 않는다.
4. 현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일하다.
일 가능한 실시형태에서, 만약 현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다. 예시적으로, 만약 두 개의 참조 프레임의 프레임 레벨 가중된 가중치가 동일하면, 예컨대, 참조 프레임 refIdxL0의 휘도 가중된 가중치(luma_weight_l0_flag[ refIdxL0])가 참조 프레임 refIdxL1의 휘도 가중된 가중치(luma_weight_l1_flag[ refIdxL1])와 같을 수 있으면, 현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일함을 나타낸다. 또는, 만약 두 개의 참조 프레임의 블록 레벨 가중된 가중치가 동일하면, 예컨대, 현재 블록의 블록 레벨 가중치의 인덱스 BcwIdx[xCb][yCb]가 0이면, 현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일함을 나타낸다. 또는, 만약 두 개의 참조 프레임의 프레임 레벨 가중된 가중치가 동일하고, 두 개의 참조 프레임의 블록 레벨 가중된 가중치가 동일하면, 현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일함을 나타낸다.
예시적으로, 만약 현재 블록의 두 개의 참조 프레임의 가중된 가중치가 상이하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 4가 만족되지 않는다. 예를 들어, 만약 두 개의 참조 프레임의 프레임 레벨 가중된 가중치가 상이하면, 현재 블록의 두 개의 참조 프레임의 가중된 가중치가 상이함을 나타낸다. 또는, 만약 두 개의 참조 프레임의 블록 레벨 가중된 가중치가 상이하면, 현재 블록의 두 개의 참조 프레임의 가중된 가중치가 상이함을 나타낸다. 또는, 만약 두 개의 참조 프레임의 프레임 레벨 가중된 가중치가 상이하고, 또한 두 개의 참조 프레임의 블록 레벨 가중된 가중치가 상이하면, 현재 블록의 두 개의 참조 프레임의 가중된 가중치가 상이함을 나타낸다.
예시적으로, 현재 블록의 두 개의 참조 프레임의 가중된 가중치는 양방향 가중 보상 시 사용되는 가중치를 의미한다. 예를 들어, 현재 블록의 각각의 서브 블록에 대해, 상기 서브 블록의 두 개의 예측 값(획득 과정은 후속되는 실시예를 참조)이 획득된 후, 이 두 개의 예측 값을 가중하여, 상기 서브 블록의 최종 예측 값을 획득해야 한다. 이 두 개의 예측 값을 가중할 경우, 이 두 개의 예측 값에 대응하는 가중치가 현재 블록의 두 개의 참조 프레임의 가중된 가중치인 바, 즉 이 두 개의 예측 값에 대응하는 가중치는 동일하다.
5. 현재 블록의 두 개의 참조 프레임은 모두 단기 참조 프레임이다. 또는 현재 블록의 두 개의 참조 프레임은 모두 장기 참조 프레임이 아니라고 한다.
일 가능한 실시형태에서, 만약 현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임이면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다. 단기 참조 프레임은 현재 프레임과 가까운 참조 프레임을 나타내고, 일반적으로는 실제 이미지 프레임이다.
예시적으로, 만약 현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임이 아니면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 5가 만족되지 않는다. 또는, 만약 현재 블록의 하나의 참조 프레임이 단기 참조 프레임이 아니면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 5가 만족되지 않는다. 또는, 만약 현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임이 아니면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 5가 만족되지 않는다.
다른 가능한 실시형태에서, 만약 현재 블록의 두 개의 참조 프레임이 모두 장기 참조 프레임이 아니면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다. 장기 참조 프레임의 표시 번호 POC는 실질적인 의미가 없으며, 장기 참조 프레임은 현재 프레임과 멀리 떨어진 참조 프레임을 나타내거나, 또는 몇 개의 프레임의 실제 이미지를 합성한 이미지 프레임을 나타낸다.
예시적으로, 만약 현재 블록의 하나의 참조 프레임이 장기 참조 프레임이면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 5가 만족되지 않는다. 또는, 만약 현재 블록의 두 개의 참조 프레임이 모두 장기 참조 프레임이면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 5가 만족되지 않는다.
6. 현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내에 있다.
일 가능한 실시형태에서, 만약 현재 블록의 너비 cbWidth가 제1 임계값(예컨대, 8)보다 크거나 같고, 현재 블록의 높이 cbHeight가 제2 임계값(예컨대, 8)보다 크거나 같으며, 현재 블록의 면적(cbHeight*cbWidth)이 제3 임계값(예컨대, 128)보다 크거나 같으면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, 만약 현재 블록의 너비 cbWidth가 제1 임계값보다 작으면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 6이 만족되지 않는다. 또는, 만약 현재 블록의 높이 cbHeight가 제2 임계값보다 작으면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 6이 만족되지 않는다. 또는, 만약 현재 블록의 면적이 제3 임계값보다 작으면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 6이 만족되지 않는다.
다른 가능한 실시형태에서, 만약 현재 블록의 너비 cbWidth가 제1 임계값(예컨대, 8)보다 크거나 같고, 현재 블록의 높이 cbHeight가 제2 임계값(예컨대, 8)보다 크거나 같으며, 현재 블록의 면적(cbHeight*cbWidth)이 제4 임계값(예컨대, 64)보다 크면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, 만약 현재 블록의 너비 cbWidth가 제1 임계값보다 작으면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 6이 만족되지 않는다. 또는, 만약 현재 블록의 높이 cbHeight가 제2 임계값보다 작으면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 6이 만족되지 않는다. 또는, 만약 현재 블록의 면적이 제4 임계값보다 작거나 같으면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 6이 만족되지 않는다.
7. 현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 동일하다.
일 가능한 실시형태에서, 만약 list0의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 동일하면, 예를 들어, list0의 참조 프레임의 너비와 현재 프레임의 너비가 동일하고, list0의 참조 프레임의 높이와 현재 프레임의 높이가 동일하며, 또한, list1의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 동일하면, 예를 들어, list1의 참조 프레임의 너비와 현재 프레임의 너비가 동일하며, list1의 참조 프레임의 높이와 현재 프레임의 높이가 동일하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용함을 나타낸다.
예시적으로, 만약 현재 블록의 두 개의 참조 프레임 중의 적어도 하나의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 상이하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타내는 바, 즉 시작 조건 7이 만족되지 않는다. 예를 들어, 만약 list0의 참조 프레임의 너비와 현재 프레임의 너비가 상이하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타낸다. 또는, 만약 list0의 참조 프레임의 높이와 현재 프레임의 높이가 상이하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타낸다. 또는, 만약 list1의 참조 프레임의 너비와 현재 프레임의 너비가 상이하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타낸다. 또는, 만약 list1의 참조 프레임의 높이와 현재 프레임의 높이가 상이하면, 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하지 않음을 나타낸다.
실시예 5: 상기 실시예에서, 현재 블록의 각각의 서브 블록에 대해, 상기 서브 블록의 제1 원시 움직임 벡터에 따라, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고, 제1 참조 블록 중 각각의 픽셀 포인트의 픽셀 값을 제1 픽셀 값이라고 칭하며; 상기 서브 블록의 제2 원시 움직임 벡터에 따라, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제2 참조 블록을 결정하고, 제2 참조 블록 중 각각의 픽셀 포인트의 픽셀 값을 제2 픽셀 값이라고 칭하는 것에 대하여, 아래에서 설명하기로 한다.
제1 참조 블록 중의 각각의 픽셀 포인트의 제1 픽셀 값은, 제1 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 보간하여 획득되거나, 또는, 제1 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 복사하여 획득된다.
제2 참조 블록 중의 각각의 픽셀 포인트의 제2 픽셀 값은, 제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 보간하여 획득되거나, 또는, 제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 복사하여 획득된다.
제1 참조 블록의 사이즈와 제2 참조 블록의 사이즈는 동일하고, 제1 참조 블록/제2 참조 블록의 너비는 서브 블록의 너비와 검색 범위에 기초하여 결정되며, 제1 참조 블록/제2 참조 블록의 높이는 서브 블록의 높이와 검색 범위에 의해 결정된다.
예를 들어, 현재 블록의 각각의 dx*dy의 서브 블록(예컨대, 16*16의 서브 블록, 또는 더 작은 서브 블록, 또는 더 큰 서브 블록, 여기서, 더 작은 서브 블록은 8*8일 수 있고, 더 큰 서브 블록은 32*32일 수 있으며, 이에 대해 제한하지 않고, 예시적으로, 서브 블록의 크기는 현재 블록의 크기와 동일할 수 있으며, 즉 서브 블록이 현재 블록이고, 예를 들어, 현재 블록이 8*16일 때, 현재 블록은 하나의 서브 블록만 포함하고, 상기 서브 블록의 크기는 8*16이며, 서브 블록의 크기는 현재 블록의 크기와 상이할 수도 있고, 예를 들어, 현재 블록이 8*32일 때, 현재 블록은 두 개의 8*16의 서브 블록을 포함할 수 있으며, 물론 이는 단지 예시일 뿐, 설명의 편리를 위해, 후속적으로 16*16의 서브 블록을 예로 들어 설명함)에 대해, 서브 블록의 너비는 dx이고, 서브 블록의 높이는 dy이며, 제1 원시 움직임 벡터는 MV0으로 표기되고, 제2 원시 움직임 벡터는 MV1로 표기된다.
제1 원시 움직임 벡터 MV0이 제1 참조 프레임에서의 대응 위치로부터, 면적이 (dx+filtersize-1)*(dy+filtersize-1)인 정수 픽셀 블록을 획득하고, 이 정수 픽셀 블록을 정수 픽셀 블록 A로 표기할 수 있다.
제2 원시 움직임 벡터 MV1이 제2 참조 프레임에서의 대응 위치로부터, 면적이 (dx+filtersize-1)*(dy+filtersize-1)인 정수 픽셀 블록을 획득하고, 이 정수 픽셀 블록을 정수 픽셀 블록 B로 표시할 수 있다.
일 가능한 실시형태에서, 면적이 (dx+filtersize-1)*(dy+filtersize-1)인 정수 픽셀 블록 A에 기반하여, 이중 선형 보간법으로 사이즈가 (dx+2*IterNum)*(dy+2*IterNum)인 초기 참조 픽셀 블록을 획득할 수 있고, 이 초기 참조 픽셀 블록을 제1 참조 블록으로 표기할 수 있다. 면적이 (dx+filtersize-1)*(dy+filtersize-1)인 정수 픽셀 블록 B에 기반하여, 이중 선형 보간법으로 사이즈가 (dx+2*IterNum)*(dy+2*IterNum)인 초기 참조 픽셀 블록을 획득할 수 있고, 이 초기 참조 픽셀 블록을 제2 참조 블록으로 표기할 수 있다.
다른 가능한 실시형태에서, 면적이 (dx+filtersize-1)*(dy+filtersize-1)인 정수 픽셀 블록 A에 기반하여, 직접 복사(보간이 필요하지 않음) 방법으로 사이즈가 (dx+2*IterNum)*(dy+2*IterNum)인 초기 참조 픽셀 블록을 획득하고, 이 초기 참조 픽셀 블록을 제1 참조 블록으로 표기한다. 면적이 (dx+filtersize-1)*(dy+filtersize-1)인 정수 픽셀 블록 B에 기반하여, 직접 복사 방법으로 사이즈가 (dx+2*IterNum)*(dy+2*IterNum)인 초기 참조 픽셀 블록을 획득할 수 있고, 이 초기 참조 픽셀 블록을 제2 참조 블록으로 표기한다.
예시적으로, 휘도 컴포넌트(후속되는 검색 과정에서 휘도 컴포넌트만 사용하여 비용 값(cost value)을 계산함으로써, 복잡성을 감소시키기 때문임)에만 대해, 면적이 (dx+filtersize-1)*(dy+filtersize-1)인 정수 픽셀 블록(예컨대, 정수 픽셀 블록 A 및 정수 픽셀 블록 B)에 기반하여, 사이즈가 (dx+2*IterNum)*(dy+2*IterNum)인 초기 참조 픽셀 블록을 획득할 수 있고, 상기 초기 참조 픽셀 블록은 제1 참조 블록(예컨대, Pred_Inter0) 및 제2 참조 블록(예컨대, Pred_Inter1)이다.
일 예에서, filtersize는 보간 필터의 탭 수일 수 있고, 예컨대, 8 등일 수 있으며, 이에 대해 제한하지 않는다.
일 예에서, 이중 선형 보간을 통해 제1 참조 블록/제2 참조 블록을 획득하는 것은, 제1 참조 블록/제2 참조 블록 중 각각의 픽셀 포인트의 픽셀 값이, 제1 참조 블록/제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 보간하여 획득되는 것을 의미한다. 복사를 통해 제1 참조 블록/제2 참조 블록을 획득하는 것은, 제1 참조 블록/제2 참조 블록 중 각각의 픽셀 포인트의 픽셀 값이, 제1 참조 블록/제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 복사하여 획득되는 것을 의미한다.
상기 실시예를 참조하면, 제1 참조 블록의 면적은 (dx+2*IterNum)*(dy+2*IterNum)인바, 제2 참조 블록의 면적은 (dx+2*IterNum)*(dy+2*IterNum)이며, 예를 들어, 제1 참조 블록/제2 참조 블록의 너비 값은 dx+2*IterNum이고, 제1 참조 블록/제2 참조 블록의 높이 값은 dy+2*IterNum이다. dx는 서브 블록의 너비이고, dy는 서브 블록의 높이이며, IterNum는 검색 범위 SR일 수 있는바, 예를 들면, 후속되는 실시예의 반복 횟수이며, IterNum는 목표 움직임 벡터와 원시 움직임 벡터의 최대 수평/연직 컴포넌트 보간일 수 있는바, 예컨대 IterNum는 2 등 일 수 있다.
도 5를 참조하면, 16*16의 서브 블록에 대해, 제1 원시 움직임 벡터 MV0이 제1 참조 프레임에서의 대응 위치에 기반하여, 면적이 23(즉 16+8-1)*23인 정수 픽셀 블록 A를 획득한다. 면적이 23*23인 정수 픽셀 블록 A에 기반하여, 이중 선형 보간법으로 사이즈가 20(즉 16+2*2)*20인 제1 참조 블록을 획득할 수 있다. 마찬가지로, 16*16의 서브 블록에 대해, 제2 원시 움직임 벡터 MV1이 제2 참조 프레임에서의 대응 위치에 기반하여, 면적이 23*23인 정수 픽셀 블록 B를 획득한다. 면적이 23*23인 정수 픽셀 블록 B에 기반하여, 사이즈가 20*20인 제2 참조 블록을 획득한다.
제1 참조 블록 및 제2 참조 블록은 후속되는 과정에서 움직임 벡터 조정에 사용된다.
실시예 6: 상기 실시예에서, 현재 블록의 각각의 서브 블록에 대해, 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터를 조정하여, 서브 블록의 제1 목표 움직임 벡터를 획득하고; 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제2 원시 움직임 벡터를 조정하여, 서브 블록의 제2 목표 움직임 벡터를 획득하는 것에 관하여, 하나의 서브 블록(예컨대, 현재 블록의 각각의 dx*dy 크기의 서브 블록)의 처리 과정을 예로 들어 원시 움직임 벡터의 조정 과정을 소개한다.
단계 a1에서, 제1 원시 움직임 벡터 또는 제2 원시 움직임 벡터를 중심 움직임 벡터로 결정한다.
예를 들어, 제1 원시 움직임 벡터가 (4, 4)이고, 제2 원시 움직임 벡터가 (-4, -4)이라고 가정하면, 제1 원시 움직임 벡터 (4, 4) 또는 제2 원시 움직임 벡터 (-4, -4)를 중심 움직임 벡터로 결정한다.
설명의 편리를 위해, 후속적으로 제1 원시 움직임 벡터 (4, 4)를 중심 움직임 벡터로 결정하는 것을 예로 들며, 제2 원시 움직임 벡터 (-4, -4)를 중심 움직임 벡터로 결정하는 프로세스도 유사하므로, 여기에서 더 이상 설명하지 않는다.
단계 a2에서, 중심 움직임 벡터에 대응하는 가장자리 움직임 벡터를 결정한다.
예를 들어, 중심 움직임 벡터 (x, y)를 상이한 방향으로 S만큼 오프셋하여, 상이한 방향의 가장자리 움직임 벡터 (x, y+S), 가장자리 움직임 벡터 (x, y-S), 가장자리 움직임 벡터 (x+S, y), 가장자리 움직임 벡터 (x-S, y), 가장자리 움직임 벡터 (x+right, y+down)를 획득할 수 있다. 예시적으로, right는 S 또는 -S일 수 있고, down은 S 또는 -S일 수 있으며, right 및 down의 결정 방식은 후속되는 실시예를 참조할 수 있다. 도 6을 참조하면, 중심 움직임 벡터 (x, y)를 중심으로 하는 바, 즉 중심 움직임 벡터는 (0, 0)이며, S가 1이고, right 및 down이 모두 1인 것을 예로 들면, 중심 움직임 벡터 (0, 0)에 대응하는 가장자리 움직임 벡터는 가장자리 움직임 벡터 (0, 1), 가장자리 움직임 벡터 (0, -1), 가장자리 움직임 벡터 (1, 0), 가장자리 움직임 벡터 (-1, 0), 가장자리 움직임 벡터 (1, 1)를 포함한다.
단계 a3에서, 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 중심 움직임 벡터에 대응하는 제1 비용 값, 각각의 가장자리 움직임 벡터에 대응하는 제2 비용 값을 획득한다.
예를 들어, 제1 참조 블록에서 중심 움직임 벡터 (0, 0)에 대응하는 서브 참조 블록 A1을 복사하여 획득하고, 서브 참조 블록 A1은 제1 참조 블록에서의 중심 움직임 벡터 (0, 0)의 서브 참조 블록이다. 제2 참조 블록에서 중심 움직임 벡터 (0, 0)에 대응하는 서브 참조 블록 B1을 복사하여 획득하고, 서브 참조 블록 B1은 제2 참조 블록에서의 중심 움직임 벡터 (0, 0)의 서브 참조 블록이다. 다음, 서브 참조 블록 A1의 제1 픽셀 값 및 서브 참조 블록 B1의 제2 픽셀 값을 이용하여, 중심 움직임 벡터 (0, 0)에 대응하는 비용 값 1을 획득하고, 비용 값의 결정 방식은 후속되는 실시예를 참조할 수 있다.
제1 참조 블록에서 가장자리 움직임 벡터 (0, 1)에 대응하는 서브 참조 블록 A2를 복사하여 획득하고, 서브 참조 블록 A2는 제1 참조 블록에서의 가장자리 움직임 벡터 (0, 1)의 서브 참조 블록이다. 제2 참조 블록에서 가장자리 움직임 벡터 (0, 1)의 대칭 움직임 벡터 (0, -1)에 대응하는 서브 참조 블록 B2를 복사하여 획득하고, 서브 참조 블록 B2는 제2 참조 블록에서의 대칭 움직임 벡터 (0, -1)의 서브 참조 블록이다. 서브 참조 블록 A2의 제1 픽셀 값 및 서브 참조 블록 B2의 제2 픽셀 값을 이용하여, 가장자리 움직임 벡터 (0, 1)에 대응하는 비용 값 2를 획득하고, 비용 값의 결정 방식은 후속되는 실시예를 참조할 수 있다.
가장자리 움직임 벡터 (0, 1)에 대응하는 비용 값 2의 결정 방식에 기반하여, 가장자리 움직임 벡터 (0, -1)에 대응하는 비용 값 3, 가장자리 움직임 벡터 (1, 0)에 대응하는 비용 값 4, 가장자리 움직임 벡터 (-1, 0)에 대응하는 비용 값 5, 가장자리 움직임 벡터 (1, 1)에 대응하는 비용 값 6을 결정할 수 있고, 여기에서 더 이상 반복 설명하지 않는다.
단계 a4에서, 제1 비용 값 및 제2 비용 값에 따라, 중심 움직임 벡터 및 가장자리 움직임 벡터 중 하나의 움직임 벡터를 선택하여 최적의 움직임 벡터로 간주한다. 예를 들어, 비용 값이 가장 작은 움직임 벡터를 최적의 움직임 벡터로 할 수 있다.
예를 들어, 가장자리 움직임 벡터 (0, 1)에 대응하는 비용 값 2가 가장 작다고 가정하면, 비용 값 2에 대응하는 가장자리 움직임 벡터 (0, 1)를 최적의 움직임 벡터로 할 수 있다. 물론, 이는 단지 하나의 예시일 뿐, 이에 대해 제한하지 않는다.
단계 a5에서, 종료 조건을 만족하는지 여부를 판정한다. 만족하지 않으면, 상기 최적의 움직임 벡터를 중심 움직임 벡터로 결정하고, 단계 a2로 돌아갈 수 있다. 만족하면, 단계 a6을 수행할 수 있다.
일 예에서, 만약 반복 횟수/검색 범위가 임계값에 도달하면, 종료 조건을 만족하고; 만약 반복 횟수/검색 범위가 임계값에 도달하지 않으면, 종료 조건을 만족하지 않는다. 예를 들어, SR가 2라고 가정할 경우, 즉 임계값이 2라고 가정하면, 만약 반복 횟수/검색 범위가 이미 2회에 도달하면, 즉 단계 a2 내지 단계 a4가 이미 2회 수행되면, 종료 조건을 만족하고; 그렇지 않으면, 종료 조건을 만족하지 않는다.
다른 예에서, 중심 움직임 벡터 및 가장자리 움직임 벡터 중 하나의 움직임 벡터를 선택하여 최적의 움직임 벡터로 간주한 후, 만약 중심 움직임 벡터를 선택하여 최적의 움직임 벡터로 간주하면, 종료 조건을 만족할 수 있다.
단계 a6에서, 최적의 움직임 벡터에 따라 제1 정수 픽셀 움직임 벡터 조정 값(제1 원시 움직임 벡터의 조정에 사용) 및 제2 정수 픽셀 움직임 벡터 조정 값(제2 원시 움직임 벡터의 조정에 사용)을 결정한다.
일 예에서, 최적의 움직임 벡터 및 제1 원시 움직임 벡터에 따라 제1 정수 픽셀 움직임 벡터 조정 값을 결정하고, 또한 제1 정수 픽셀 움직임 벡터 조정 값에 따라 제2 정수 픽셀 움직임 벡터 조정 값을 결정할 수 있으며, 예시적으로, 제2 정수 픽셀 움직임 벡터 조정 값은 제1 정수 픽셀 움직임 벡터 조정 값과 대칭될 수 있다.
예를 들어, 첫 번째 반복 과정의 경우, 최적의 움직임 벡터는 가장자리 움직임 벡터 (0, 1)이고, 가장자리 움직임 벡터 (0, 1)를 중심으로 두 번째 반복을 수행하며, 두 번째 반복 과정의 경우, 최적의 움직임 벡터는 가장자리 움직임 벡터 (0, 1)이며, 여기까지 반복 과정이 완료되었다고 가정하면, 제1 정수 픽셀 움직임 벡터 조정 값은 (0, 2)인바 바, 즉 가장자리 움직임 벡터 (0, 1)와 가장자리 움직임 벡터 (0, 1)의 합이다. 이에 기반하여, 제1 원시 움직임 벡터가 (4, 4)라고 가정하면, 첫 번째 반복 과정의 경우, 최적의 움직임 벡터는 가장자리 움직임 벡터 (0, 1)인 바, 즉 최적의 움직임 벡터는 최적의 움직임 벡터 (4, 5)에 대응될 수 있다. 가장자리 움직임 벡터 (0, 1)를 중심으로 두 번째 반복을 수행하고, 두 번째 반복 과정의 경우, 최적의 움직임 벡터는 가장자리 움직임 벡터 (0, 1)인바, 즉 최적의 움직임 벡터는 최적의 움직임 벡터 (4, 6)에 대응될 수 있다. 요약하면, 최적의 움직임 벡터 (4, 6) 및 제1 원시 움직임 벡터 (4, 4)에 따라 제1 정수 픽셀 움직임 벡터 조정 값을 결정하고, 제1 정수 픽셀 움직임 벡터 조정 값은 최적의 움직임 벡터 (4, 6)와 제1 원시 움직임 벡터 (4, 4)의 차이인바, 즉 제1 정수 픽셀 움직임 벡터 조정 값은 (0, 2)이다. 제1 정수 픽셀 움직임 벡터 조정 값 (0, 2)에 따라 제2 정수 픽셀 움직임 벡터 조정 값을 결정하고, 제2 정수 픽셀 움직임 벡터 조정 값은 (0, -2)일 수 있는바, 즉 (0, 2)의 대칭 값이다.
단계 a7에서, 최적의 움직임 벡터에 따라 제1 서브 픽셀 움직임 벡터 조정 값(제1 원시 움직임 벡터의 조정에 사용) 및 제2 서브 픽셀 움직임 벡터 조정 값(제2 원시 움직임 벡터의 조정에 사용)을 결정한다.
일 예에서, 최적의 움직임 벡터에 대응하는 비용 값과, 최적의 움직임 벡터에 대응하는 가장자리 움직임 벡터에 대응하는 비용 값에 따라, 제1 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있고, 다음, 상기 제1 서브 픽셀 움직임 벡터 조정 값에 따라 제2 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있다. 예를 들어, x0 = N*(E(-1, 0)-E(1, 0))/(E(-1, 0)+E(1, 0)-2*E(0, 0)), y0=N*(E(0, -1)-E(0, 1))/(E(0, -1)+E(0, 1)-2*E(0, 0))이고, 1/2, 1/4, 1/8 및 1/16의 움직임 벡터 픽셀 정밀도의 경우, N=1, 2, 4 및 8이다. 다음, (x0, y0)을 deltaMv에 할당하고, SPMV=deltaMv/2N이며, 만약 현재 1/16의 움직임 벡터 픽셀 정밀도이면, SPMV는 (x0/16, y0/16)이다.
상기 수학식에서, SPMV는 제1 서브 픽셀 움직임 벡터 조정 값일 수 있고, N은 움직임 벡터 픽셀 정밀도와 관련이 있을 수 있는바, 예를 들어, 움직임 벡터 픽셀 정밀도는 1/2이고 N은 1이며, 움직임 벡터 픽셀 정밀도는 1/4이고 N은 2이며, 움직임 벡터 픽셀 정밀도는 1/8이고 N은 4이며, 움직임 벡터 픽셀 정밀도는 1/16이고 N은 8일 수 있다.
상기 수학식에서, E(0, 0)는 최적의 움직임 벡터의 비용 값을 나타내고; E(-1, 0)는 최적의 움직임 벡터를 중심으로 하는, 최적의 움직임 벡터 (0, 0)의 가장자리 움직임 벡터 (-1, 0)의 비용 값이며; E(1, 0)는 최적의 움직임 벡터를 중심으로 하는, 최적의 움직임 벡터 (0, 0)의 가장자리 움직임 벡터 (1, 0)의 비용 값이고; E(0, -1)는 최적의 움직임 벡터를 중심으로 하는, 최적의 움직임 벡터 (0, 0)의 가장자리 움직임 벡터 (0, -1)의 비용 값이며; E(0, 1)는 최적의 움직임 벡터를 중심으로 하는, 최적의 움직임 벡터 (0, 0)의 가장자리 움직임 벡터 (0, 1)의 비용 값이다. 각 움직임 벡터의 비용 값에 대한 결정 방식은 상기 예시를 참조하며, 여기에서 더 이상 설명하지 않는다.
상기 방식으로 제1 서브 픽셀 움직임 벡터 조정 값을 결정한 후, 제1 서브 픽셀 움직임 벡터 조정 값에 따라 제2 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있고, 제2 서브 픽셀 움직임 벡터 조정 값은 제1 서브 픽셀 움직임 벡터 조정 값의 대칭 값이다. 예를 들어, 만약 제1 서브 픽셀 움직임 벡터 조정 값이 (1, 0)이면, 제2 서브 픽셀 움직임 벡터 조정 값은 (-1, 0)일 수 있는 바, 즉 제1 서브 픽셀 움직임 벡터 조정 값 (1, 0)의 대칭 값이다.
단계 a8에서, 제1 정수 픽셀 움직임 벡터 조정 값 및/또는 제1 서브 픽셀 움직임 벡터 조정 값에 따라, 제1 원시 움직임 벡터를 조정하여, 제1 목표 움직임 벡터를 획득한다. 예를 들어, 제1 목표 움직임 벡터=제1 원시 움직임 벡터+제1 정수 픽셀 움직임 벡터 조정 값+제1 서브 픽셀 움직임 벡터 조정 값이다.
단계 a9에서, 제2 정수 픽셀 움직임 벡터 조정 값 및/또는 제2 서브 픽셀 움직임 벡터 조정 값에 따라, 제2 원시 움직임 벡터를 조정하여, 제2 목표 움직임 벡터를 획득한다. 예를 들어, 제2 목표 움직임 벡터=제2 원시 움직임 벡터+제2 정수 픽셀 움직임 벡터 조정 값+제2 서브 픽셀 움직임 벡터 조정 값이다.
실시예 7: 상기 실시예에서, 현재 블록의 각각의 서브 블록에 대해, 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터를 조정하여, 서브 블록의 제1 목표 움직임 벡터를 획득하고; 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제2 원시 움직임 벡터를 조정하여, 서브 블록의 제2 목표 움직임 벡터를 획득하는 것에 관하여, 하나의 서브 블록(예컨대, 현재 블록의 각각의 dx*dy 크기의 서브 블록)의 처리 과정을 예로 들어 원시 움직임 벡터의 조정 과정을 소개한다.
본 실시예에서, 제1 원시 움직임 벡터를 Org_MV0으로 표기하고, 제2 원시 움직임 벡터를 Org_MV1로 표기하며, 제1 원시 움직임 벡터 Org_MV0을 조정한 후 획득된 제1 목표 움직임 벡터를 Refined_MV0으로 표기하고, 제2 원시 움직임 벡터Org_MV1을 조정한 후 획득된 제2 목표 움직임 벡터를 Refined_MV1로 표기한다.
단계 b1에서, SR회 반복하여, 최적의 정수 픽셀 MV 포인트의 정수 픽셀 오프셋을 획득하고, 이를 IntegerDeltaMV로 표기하며, IntegerDeltaMV는 상기 실시예 중의 제1 정수 픽셀 움직임 벡터 조정 값이다. 예를 들어, 먼저 IntegerDeltaMV를 (0, 0)으로 초기화하고, 매 회의 반복은 하기와 같은 과정을 수행한다:
단계 b11에서, deltaMV를 (0, 0)로 설정한다. 만약 첫 번째 반복이면, 제1 참조 블록에서의 제1 원시 움직임 벡터의 참조 픽셀에 기반하여, 예측 값 블록 A1(즉 제1 참조 블록의 제일 중심의 dx*dy의 블록)을 복사하여 획득하고; 제2 참조 블록에서의 제2 원시 움직임 벡터의 참조 픽셀에 기반하여, 예측 값 블록 B1(즉 제2 참조 블록의 제일 중심의 dx*dy의 블록)을 복사하여 획득한다. 예측 값 블록 A1 및 예측 값 블록 B1에 기반하여 초기 비용 값 cost(초기 비용 값은 예측 값 블록 A1 및 예측 값 블록 B1에 기반한 SAD(절댓값 차이의 합, sum of abstract distortion)이고, 결정 방식은 후속되는 실시예를 참조)를 획득한다. 만약 상기 초기 비용 값 cost가 dx*dy보다 작고, dx 및 dy가 현재 서브 블록의 너비와 높이이면, 후속되는 검색 과정을 직접 건너뛰고 단계 b2를 수행하며, notZeroCost를 false로 설정한다.
단계 b12에서, 도 6에 도시된 바와 같이, 상기 초기 포인트를 중심으로, {Mv(0, 1), Mv(0, -1), Mv(1, 0), Mv(-1, 0), Mv(right, down)}의 순서에 따라 5개의 오프셋 MV(이 5개의 오프셋 MV를 모두 MVOffset이라고 칭함)를 획득하고, 이 5개의 오프셋 MV의 비용 값의 계산 및 비교 과정을 수행한다. 예를 들어, 특정 MVOffset(예컨대, Mv(0, 1) 등)에 기반하여, 제1 참조 블록 및 제2 참조 블록에서, 이 MVOffset를 통해 두 개의 예측 값 블록(예컨대, 제1 참조 블록에서 중심 위치 오프셋 MVOffset이 수행된 dx*dy 블록, 제2 참조 블록에서 중심 위치 오프셋 -MVOffset(MVOffset와 반대)이 수행된 dx*dy 블록)을 획득하고, 이 두 개의 예측 값 블록의 다운 샘플링 SAD를 계산하여 MVOffset의 비용 값으로 간주한다.
다음, 비용 값이 가장 작은 MVOffset을 보류하고, 비용 값이 가장 작은MVOffset을 deltaMV의 값으로 업데이트하며, 또한 비용 값이 가장 작은 MVOffset를 다음 번 반복의 새로운 중심 오프셋 포인트로 간주한다.
deltaMV에 기반하여 IntegerDeltaMV의 값을 업데이트하고, 업데이트된 IntegerDeltaMV=업데이트 전의 IntegerDeltaMV+deltaMV인바, 즉 현재 IntegerDeltaMV의 기초하에 deltaMV를 가한다.
단계 b13에서, 반복을 거친 후, 만약 최적의 MV가 여전히 초기 MV(즉 MVOffset이 아님)이거나 또는 가장 작은 비용 값이 0이면, 다음 번 반복 검색 과정을 수행하지 않고, 단계 b2를 수행하며, notZeroCost를 false로 설정한다.
그렇지 않으면, 만약 반복 횟수가 SR에 도달하면, 단계 b2를 수행하고, 만약 반복 횟수가 SR에 도달하지 않으면, 최적의 MV를 중심으로, 다음 번 반복 검색 과정을 수행할 수 있는바, 즉 단계 b11로 돌아간다.
반복 검색 과정이 종료된 후, IntegerDeltaMV의 값을 획득하는 바, 즉 IntegerDeltaMV의 최종 값은 제1 정수 픽셀 움직임 벡터 조정 값이고, 후속적으로 IntegerDeltaMV로 표기된다.
단계 b2에서, 단계 b1의 최적의 정수 픽셀 MV 포인트를 중심으로, 최적의 서브 픽셀 오프셋 MV를 획득할 수 있고, SPMV로 표기하며, SPMV는 상기 실시예의 제1 서브 픽셀 움직임 벡터 조정 값이다.
예를 들어, 먼저 SPMV를 (0, 0)로 초기화한 다음, 하기와 같은 과정을 수행할 수 있다:
단계 b21에서, notZeroCost가 false가 아니고, 또한 deltaMV가 (0, 0)일 때에만 후속 처리(즉 SPMV를 획득해야 함)를 수행할 수 있고, 그렇지 않으면, IntegerDeltaMV 및 SPMV를 이용하여 원시 움직임 벡터를 조정하는 것이 아니라, 직접 IntegerDeltaMV를 이용하여 원시 움직임 벡터를 조정할 수 있다.
단계 b22에서, E(x, y)를 단계 b1에서 획득된 최적의 MV포인트가 (x, y)만큼 오프셋된 MV에 대응하는 비용 값(단계 b1에서 계산된 비용 값)으로 나타낸다. 중심 및 상, 하, 좌, 우의 5개의 포인트의 E(x, y)에 기초하여, E(x, y) 가장 작은 포인트의 오프셋 (x0, y0)이 x0=N*(E(-1, 0)-E(1, 0))/(E(-1, 0)+E(1, 0)-2*E(0, 0)), y0=N*(E(0, -1)-E(0, 1))/(E(0, -1)+E(0, 1)-2*E(0, 0))임을 획득할 수 있다. 일 예에서, 1/2, 1/4, 1/8 및 1/16의 움직임 벡터 픽셀 정밀도의 경우, N=1, 2, 4 및 8이다. 다음, (x0, y0)을 deltaMv에 할당할 수 있고, SPMV=deltaMv/2N이며, 만약 현재 1/16의 움직임 벡터 픽셀 정밀도이면, SPMV는 (x0/16, y0/16)일 수 있다.
만약 E(-1, 0)=E(0, 0)이면, 수평 방향으로 좌측으로 절반의 픽셀만큼 오프셋된다(deltaMv[0]=-N).
만약 E(1, 0)= E(0, 0)이면, 수평 방향으로 우측으로 절반의 픽셀만큼 오프셋된다(deltaMv[0]=N).
만약 E(0, -1)= E(0, 0)이면, 수직 방향으로 상측으로 절반의 픽셀만큼 오프셋된다(deltaMv[1]=-N).
만약 E(0, 1)= E(0, 0)이면, 수직 방향으로 하측으로 절반의 픽셀만큼 오프셋된다(deltaMv[1]=N).
상기 처리에 기반하여, SPMV의 값, 즉 제1 서브 픽셀 움직임 벡터 조정 값을 획득할 수 있다.
단계 b3에서, 단계 b1의 정수 픽셀 오프셋 IntegerDeltaMV 및 단계 b2의 서브 픽셀 오프셋 SPMV에 기초하여, 최적의 오프셋 MV를 획득하고, 이 최적의 오프셋 MV를 BestMVoffset으로 표기할 수 있다. 또한, BestMVoffset=IntegerDeltaMV+SPMV이다. BestMVoffset에 기초하여 두 개 방향의 목표 움직임 벡터: Refined_MV0=Org_MV0+BestMVoffset; Refined_MV1=Org_MV1-BestMVoffset를 획득할 수 있다.
분명한 것은, BestMVoffset=IntegerDeltaMV+SPMV인 바, 즉 제1 정수 픽셀 움직임 벡터 조정 값과 제1 서브 픽셀 움직임 벡터 조정 값의 합이다. 또한, -IntegerDeltaMV는 IntegerDeltaMV의 대칭 값인 바, 즉 제2 정수 픽셀 움직임 벡터 조정 값이며, -SPMV는 SPMV의 대칭 값인 바, 즉 제2 서브 픽셀 움직임 벡터 조정 값이므로, -BestMVoffset=(-IntegerDeltaMV)+(-SPMV)일 때, 제2 정수 픽셀 움직임 벡터 조정 값과 제2 서브 픽셀 움직임 벡터 조정 값의 합이다.
실시예 8: 일 예에서, 제1 원시 움직임 벡터 Org_MV0 및 제2 원시 움직임 벡터 Org_MV1을 제1 목표 움직임 벡터 Refined_MV0 및 제2 목표 움직임 벡터Refined_MV1로 조정하기 위해, 구현 형태는 실시예 7과 유사하며, 구별되는 점은 단계 b11의 “만약 상기 초기 비용 값 cost가 dx*dy보다 작으면, 후속되는 검색 과정을 직접 건너뛰는"것을 제거하는 것이며, 다시 말해서, 초기 비용 값 cost가 dx*dy보다 작더라도, “후속되는 검색 과정을 직접 건너뛰지” 않고, 후속되는 검색 과정을 계속하며, 즉 단계 b12를 수행해야 한다.
실시예 9: 제1 원시 움직임 벡터 Org_MV0 및 제2 원시 움직임 벡터 Org_MV1을 제1 목표 움직임 벡터 Refined_MV0 및 제2 목표 움직임 벡터 Refined_MV1로 조정하기 위해, 구현 형태는 실시예 7과 유사하며, 구별되는 점은 단계 b11의 “만약 상기 초기 비용 값 cost가 dx*dy보다 작으면, 후속되는 검색 과정을 직접 건너뛰는"것을 제거하는 것이며, 다시 말해서, 초기 비용 값 cost가 dx*dy보다 작더라도, “후속되는 검색 과정을 직접 건너뛰지” 않고, 후속되는 검색 과정을 계속하며, 즉 단계 b12를 수행해야 한다. 단계 b13의 “만약 최적의 MV가 여전히 초기 MV(즉 MVOffset이 아님)이거나 또는 가장 작은 비용 값이 0이면, 다음 번 반복 검색 과정을 수행하지 않는"것을 제거하는 바, 다시 말해서, 최적의 MV가 여전히 초기 MV이거나 또는 가장 작은 비용 값이 0이더라도, 다음 번 반복 검색 과정을 수행할 수 있다.
실시예 10: 일 예에서, 제1 원시 움직임 벡터 Org_MV0 및 제2 원시 움직임 벡터 Org_MV1을 제1 목표 움직임 벡터 Refined_MV0 및 제2 목표 움직임 벡터 Refined_MV1로 조정하기 위해, 구현 형태는 실시예 7과 유사하며, 구별되는 점은 “notZeroCost"의 관련 과정을 제거하는 것이며, 다시 말해서, 단계 b11 및 단계 b13에서, notZeroCost의 값을 설정하고 저장하지 않는다. 단계 b21에서, deltaMV가 (0, 0)이기만 하면 서브 픽셀 오프셋 계산 과정(즉 단계 b22)을 수행할 수 있고, notZeroCost가 false가 아니고 deltaMV이 (0, 0)일 때에만 서브 픽셀 오프셋 계산 과정을 수행할 수 있는 것이 아니다.
실시예 11: 일 예에서, 제1 원시 움직임 벡터 Org_MV0 및 제2 원시 움직임 벡터 Org_MV1을 제1 목표 움직임 벡터 Refined_MV0 및 제2 목표 움직임 벡터 Refined_MV1로 조정하기 위해, 구현 형태는 실시예 7과 유사하며, 구별되는 점은 단계 b21의 “notZeroCost가 false가 아니고, 또한 deltaMV가 (0, 0)일 때에만 후속 처리를 수행하고, 그렇지 않으면, 직접 IntegerDeltaMV를 이용하여 원시 움직임 벡터를 조정”하는 것을, “notZeroCost가 false가 아니고, 또한 현재 최적의 정수 픽셀의 상, 하, 좌, 우에서 1개 정수 픽셀만큼 이격된 4개의 포인트의 비용 값이 이미 단계 b1에서 계산되어 획득될 때에만 후속 처리를 수행하고, 그렇지 않으면, 직접 IntegerDeltaMV를 이용하여 원시 움직임 벡터를 조정”하는 것으로 수정한 것이다. 일 예에서, “후속 처리”는 단계 b22의 서브 픽셀 오프셋 계산 과정을 의미한다.
일 예에서, 단계 b22의 서브 픽셀 오프셋의 계산 과정은 최적의 정수 픽셀의 상, 하, 좌, 우에서 1개 정수 픽셀만큼 이격된 4개의 포인트의 비용 값을 사용해야 하므로, 단계 b1에서 “최적의 정수 픽셀의 상, 하, 좌, 우에서 1개 정수 픽셀만큼 이격된 4개의 포인트의 비용 값”이 이미 계산되어 획득되는 것은 하나의 필수 조건일 수 있다.
실시예 12: 제1 원시 움직임 벡터 Org_MV0 및 제2 원시 움직임 벡터 Org_MV1을 제1 목표 움직임 벡터 Refined_MV0 및 제2 목표 움직임 벡터 Refined_MV1로 조정하기 위해, 구현 형태는 실시예 7과 유사하며, 구별되는 점은 단계 b21의 “notZeroCost가 false가 아니고, 또한 deltaMV가 (0, 0)일 때에만 후속 처리를 수행하고, 그렇지 않으면, 직접 IntegerDeltaMV를 이용하여 원시 움직임 벡터를 조정”하는 것을, “현재 최적의 정수 픽셀의 상, 하, 좌, 우에서 1개 정수 픽셀만큼 이격된 4개의 포인트의 비용 값이 이미 단계 b1에서 계산되어 획득될 때에만 후속 처리(즉 서브 픽셀 오프셋 계산 과정)를 수행하고, 그렇지 않으면, IntegerDeltaMV를 이용하여 원시 움직임 벡터를 조정”하는 것으로 수정한 것이다.
실시예 13: 제1 원시 움직임 벡터 Org_MV0 및 제2 원시 움직임 벡터 Org_MV1을 제1 목표 움직임 벡터 Refined_MV0 및 제2 목표 움직임 벡터 Refined_MV1로 조정하기 위해, 구현 형태는 실시예 7과 유사하며, 구별되는 점은 단계 b21의 “notZeroCost가 false가 아니고, 또한 deltaMV가 (0, 0)일 때에만 후속 처리를 수행하고, 그렇지 않으면, 직접 IntegerDeltaMV를 이용하여 원시 움직임 벡터를 조정”하는 것을, “현재 최적의 정수 픽셀의 상, 하, 좌, 우에서 1개 정수 픽셀만큼 이격된 4개의 포인트의 비용 값이 이미 단계 b1에서 계산되어 획득될 때에만 후속 처리(단계 b22의 서브 픽셀 오프셋 계산 과정)를 수행하고, 그렇지 않으면, 단계 b23을 사용하여 처리”하는 것으로 수정한 것이다.
단계 b23에서, 현재 최적의 정수 픽셀 포인트 MV_inter_org를 거리가 가장 가깝고, 또한 주변의 상, 하, 좌, 우에서 1개 정수 픽셀만큼 이격된 4개의 포인트의 비용 값이 이미 단계 b1에서 계산되어 획득된 정수 픽셀 포인트 MV_inter_nearest로 설정한다. 다음, MV_inter_nearest를 중심으로, 단계 b22의 서브 픽셀 오프셋 계산 과정을 수행하고, 다시 말해서, MV_inter_nearest를 중심으로 SPMV를 획득한다. 예를 들어, 만약 현재 최적의 정수 픽셀 포인트 MV_inter_org의 상, 하, 좌, 우에서 1개 정수 픽셀만큼 이격된 4개의 포인트의 비용 값이 단계 b1에서 모두 계산되어 획득되지 못하면, 최적의 정수 픽셀 포인트 MV_inter_org의 주변에서 하나의 정수 픽셀 포인트 MV_inter_nearest를 선택하고, 또한 정수 픽셀 포인트 MV_inter_nearest의 상, 하, 좌, 우에서 1개 정수 픽셀만큼 이격된 4개의 포인트의 비용 값은 모두 단계 b1에서 이미 계산되어 획득되었다.
다음, 정수 픽셀 포인트 MV_inter_nearest를 현재의 최적의 정수 픽셀 포인트로 하고, 또한 정수 픽셀 포인트 MV_inter_nearest를 중심으로 SPMV를 획득할 수 있으며, 구체적인 획득 방식은 단계 b22를 참조한다. 정수 픽셀 포인트 MV_inter_nearest를 중심으로 SPMV를 획득할 경우, 단계 b22를 참조하고, x0 및 y0를 계산할 경우, x0 및 y0은 [-2N, 2N] 범위 내에 한정될 수 있다. 만약 x0/y0이 2N보다 크면, x0/y0에2N을 할당할 수 있고; 만약 x0/y0이 -2N보다 작으면, x0/y0에 -2N을 할당할 수 있다. 1/2, 1/4, 1/8 및 1/16의 움직임 벡터 픽셀 정밀도의 경우, N=1, 2, 4 및 8이다.
실시예 14: 상기 실시예에서, 중심 움직임 벡터에 대응하는 가장자리 움직임 벡터를 결정해야 한다. 예컨대, 중심 움직임 벡터 (x, y)를 상이한 방향으로 S만큼 오프셋하여, 상이한 방향의 가장자리 움직임 벡터 (x, y+S), 가장자리 움직임 벡터 (x, y-S), 가장자리 움직임 벡터 (x+S, y), 가장자리 움직임 벡터 (x-S, y), 가장자리 움직임 벡터 (x+right, y+down)를 순서대로 획득한다. 또는, 중심 움직임 벡터 (x, y)를 상이한 방향으로 S만큼 오프셋하여, 상이한 방향의 가장자리 움직임 벡터 (x, y-S), 가장자리 움직임 벡터 (x, y+S), 가장자리 움직임 벡터 (x-S, y), 가장자리 움직임 벡터 (x+S, y), 가장자리 움직임 벡터 (x+right, y+down)를 순서대로 획득한다. 예를 들어, (x, y)가 (0, 0)이고, S가 1이라고 가정하면, (0, 1), (0, -1), (1, 0), (-1, 0), (right, down)의 순서에 따라, 5개의 가장자리 움직임 벡터를 획득한다. 또는, (0, -1), (0, 1), (-1, 0), (1, 0), (right, down)의 순서에 따라, 5개의 가장자리 움직임 벡터를 획득한다.
실시예 15: 상기 실시예에서, 가장자리 움직임 벡터 (x+right, y+down)의 디폴트 값은 (x-S, y-S)이다. 만약 가장자리 움직임 벡터 (x+S, y)의 비용 값이 가장자리 움직임 벡터 (x-S, y)의 비용 값보다 작으면, right는 S(-S에서 S로 수정됨)이고; 만약 가장자리 움직임 벡터 (x, y+S)의 비용 값이 가장자리 움직임 벡터 (x, y-S)의 비용 값보다 작으면, down는 S(-S에서 S로 수정됨)이다. 또는, 만약 가장자리 움직임 벡터 (x+S, y)의 비용 값이 가장자리 움직임 벡터 (x-S, y)의 비용 값보다 작거나 같으면, right는 S(-S에서 S로 수정됨)이고; 만약 가장자리 움직임 벡터 (x, y+S)의 비용 값이 가장자리 움직임 벡터 (x, y-S)의 비용 값보다 작거나 같으면, down는 S(-S에서 S로 수정됨)이다.
(0, 1), (0, -1), (1, 0), (-1, 0), (right, down)의 순서에 따라, 5개의 가장자리 움직임 벡터를 획득하고, (right, down)의 디폴트 값은 (-1, -1)이다. 만약 가장자리 움직임 벡터 (1, 0)의 비용 값이 가장자리 움직임 벡터 (-1, 0)의 비용 값보다 작으면, right는 1이고; 만약 가장자리 움직임 벡터 (0, 1)의 비용 값이 가장자리 움직임 벡터 (0, -1)의 비용 값보다 작으면, down는 1이다. 또는, 만약 가장자리 움직임 벡터 (1, 0)의 비용 값이 가장자리 움직임 벡터 (-1, 0)의 비용 값보다 작거나 같으면, right는 1이고; 만약 가장자리 움직임 벡터 (0, 1)의 비용 값이 가장자리 움직임 벡터 (0, -1)의 비용 값보다 작거나 같으면, down는 1이다. 예를 들어, (0, -1), (0, 1), (-1, 0), (1, 0), (right, down)의 순서에 따라, 5개의 가장자리 움직임 벡터를 획득하고, (right, down)의 디폴트 값은 (-1, -1)이다. 만약 가장자리 움직임 벡터 (1, 0)의 비용 값이 가장자리 움직임 벡터 (-1, 0)의 비용 값보다 작으면, right는 1이고; 만약 가장자리 움직임 벡터 (0, 1)의 비용 값이 가장자리 움직임 벡터 (0, -1)의 비용 값보다 작으면, down는 1이다. 또는, 만약 가장자리 움직임 벡터 (1, 0)의 비용 값이 가장자리 움직임 벡터 (-1, 0)의 비용 값보다 작거나 같으면, right는 1이고; 만약 가장자리 움직임 벡터 (0, 1)의 비용 값이 가장자리 움직임 벡터 (0, -1)의 비용 값보다 작거나 같으면, down는 1이다.
실시예 16: 상기 실시예에서, 현재 블록의 각각의 서브 블록에 대해, 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터를 조정하여, 서브 블록의 제1 목표 움직임 벡터를 획득하고; 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제2 원시 움직임 벡터를 조정하여, 서브 블록의 제2 목표 움직임 벡터를 획득하는 것에 관하여, 하나의 서브 블록(예컨대, 현재 블록의 각각의 dx*dy 크기의 서브 블록)의 처리 과정을 예로 들어 원시 움직임 벡터의 조정 과정을 소개한다.
단계 c1에서, 초기 움직임 벡터를 중심으로, 초기 움직임 벡터 주변의 상기 초기 움직임 벡터가 포함되는 움직임 벡터에서 일부 또는 전부의 움직임 벡터를 선택하고, 선택된 움직임 벡터를 후보 움직임 벡터로 간주한다. 예시적으로, 초기 움직임 벡터는 제1 원시 움직임 벡터 또는 제2 원시 움직임 벡터일 수 있다. 예를 들어, 제1 원시 움직임 벡터를 중심으로, 제1 원시 움직임 벡터 주변의 제1 원시 움직임 벡터가 포함되는 움직임 벡터에서 일부 또는 전부의 움직임 벡터를 선택하여, 후보 움직임 벡터로 할 수 있고, 이 선택 방식은 후속되는 실시예를 참조한다. 또는, 제2 원시 움직임 벡터를 중심으로, 제2 원시 움직임 벡터 주변의 제2 원시 움직임 벡터가 포함되는 움직임 벡터에서 일부 또는 전부의 움직임 벡터를 선택하여 후보 움직임 벡터로 할 수 있고, 이 선택 방식은 후속되는 실시예를 참조한다. 설명의 편리를 위해, 후속되는 실시예에서, 계속하여 제1 원시 움직임 벡터를 중심으로 하는 것을 예로 드는 바, 즉 초기 움직임 벡터는 제1 원시 움직임 벡터이다.
예시적으로, 초기 움직임 벡터를 중심으로, 상기 초기 움직임 벡터 주변의 상기 초기 움직임 벡터가 포함되는 (2*SR+1)*(2*SR+1)개의 움직임 벡터에서, 일부 또는 전부의 움직임 벡터를 선택하고, 선택된 움직임 벡터를 후보 움직임 벡터로 결정할 수 있으며; 여기서, 상기 SR는 검색 범위이다. 초기 움직임 벡터 주변의 상기 초기 움직임 벡터가 포함되는 (2*SR+1)*(2*SR+1)개의 움직임 벡터에서, 일부 또는 전부의 움직임 벡터를 선택하고, 선택된 움직임 벡터를 후보 움직임 벡터로 결정할 경우, 움직임 벡터의 검색 순서는 좌측에서 우측, 상측에서 하측을 포함할 수 있다.
SR가 2일 때, 초기 움직임 벡터 주변의 초기 움직임 벡터가 포함되는 25개의 움직임 벡터에서 전부의 움직임 벡터를 선택하고, 선택된 움직임 벡터를 후보 움직임 벡터로 결정하며; 움직임 벡터의 검색 순서는 차례대로: {Mv(-2, -2), Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(2, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-2, 2), Mv(-1, 2), Mv(0, 2), Mv(1, 2), Mv(2, 2)}이다. 또는, {Mv(0, 0), Mv(-2, -2), Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(2, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-2, 2), Mv(-1, 2), Mv(0, 2), Mv(1, 2), Mv(2, 2)}이다.
SR가 2일 때, 초기 움직임 벡터 주변의 초기 움직임 벡터가 포함되는 21개의 움직임 벡터에서 일부 움직임 벡터를 선택하고, 선택된 움직임 벡터를 후보 움직임 벡터로 결정하며; 움직임 벡터의 검색 순서는 차례대로: {Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-1, 2), Mv(0, 2), Mv(1, 2) }이다. 또는, {Mv(0, 0), Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-1, 2), Mv(0, 2), Mv(1, 2)}이다.
단계 c2에서, 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터(즉 초기 움직임 벡터)에 대응하는 제3 비용 값, 각 후보 움직임 벡터에 대응하는 제4 비용 값을 획득한다.
예를 들어, 제1 참조 블록에서 제1 원시 움직임 벡터에 대응하는 서브 참조 블록 A1을 복사하여 획득할 수 있고, 상기 서브 참조 블록 A1은 상기 제1 원시 움직임 벡터가 제1 참조 블록에서의 서브 참조 블록일 수 있다. 다음, 제2 참조 블록에서 제2 원시 움직임 벡터에 대응하는 서브 참조 블록 B1을 복사하여 획득할 수 있고, 상기 서브 참조 블록 B1은 상기 제2 원시 움직임 벡터가 제2 참조 블록에서의 서브 참조 블록이다. 다음, 서브 참조 블록 A1의 제1 픽셀 값 및 서브 참조 블록 B1의 제2 픽셀 값을 이용하여, 제1 원시 움직임 벡터에 대응하는 제3 비용 값을 획득할 수 있다. 각각의 후보 움직임 벡터에 대해, 제1 참조 블록에서 후보 움직임 벡터에 대응하는 서브 참조 블록 A2를 복사하여 획득할 수 있고, 상기 서브 참조 블록 A2는 후보 움직임 벡터가 제1 참조 블록에서의 서브 참조 블록이다. 다음, 제2 참조 블록에서 후보 움직임 벡터의 대칭 움직임 벡터에 대응하는 서브 참조 블록 B2를 복사하여 획득하고, 상기 서브 참조 블록 B2은 대칭 움직임 벡터가 제2 참조 블록에서의 서브 참조 블록이다. 서브 참조 블록 A2의 제1 픽셀 값 및 서브 참조 블록 B2의 제2 픽셀 값을 이용하여, 후보 움직임 벡터에 대응하는 제4 비용 값을 획득한다.
단계 c3에서, 제3 비용 값 및 제4 비용 값에 따라, 제1 원시 움직임 벡터 및 각 후보 움직임 벡터에서 하나의 움직임 벡터를 선택하고, 선택된 움직임 벡터를 최적의 움직임 벡터로 결정한다. 예를 들어, 비용 값이 가장 작은 움직임 벡터(예컨대, 제1 원시 움직임 벡터, 또는 임의의 하나의 후보 움직임 벡터)를 최적의 움직임 벡터로 할 수 있다.
단계 c4에서, 최적의 움직임 벡터에 따라 제1 정수 픽셀 움직임 벡터 조정 값(제1 원시 움직임 벡터의 조정에 사용) 및 제2 정수 픽셀 움직임 벡터 조정 값(제2 원시 움직임 벡터의 조정에 사용)을 결정한다. 예컨대, 최적의 움직임 벡터 및 제1 원시 움직임 벡터에 따라 제1 정수 픽셀 움직임 벡터 조정 값을 결정하고, 제1 정수 픽셀 움직임 벡터 조정 값에 따라 제2 정수 픽셀 움직임 벡터 조정 값을 결정하며, 제2 정수 픽셀 움직임 벡터 조정 값과 제1 정수 픽셀 움직임 벡터 조정 값은 대칭된다.
예를 들어, 최적의 움직임 벡터가 (4, 6)이고, 제1 원시 움직임 벡터가 (4, 4)라고 가정하면, 최적의 움직임 벡터 (4, 6) 및 제1 원시 움직임 벡터 (4, 4)에 따라, 제1 정수 픽셀 움직임 벡터 조정 값을 결정하고, 제1 정수 픽셀 움직임 벡터 조정 값은 최적의 움직임 벡터 (4, 6)와 제1 원시 움직임 벡터 (4, 4)의 차이인바, 즉 제1 정수 픽셀 움직임 벡터 조정 값은 (0, 2)이다. 다음, 제1 정수 픽셀 움직임 벡터 조정 값 (0, 2)에 따라 제2 정수 픽셀 움직임 벡터 조정 값을 결정하고, 제2 정수 픽셀 움직임 벡터 조정 값은 (0, -2)일 수 있는바, 즉 (0, 2)의 대칭 값이다.
단계 c5에서, 최적의 움직임 벡터에 따라 제1 서브 픽셀 움직임 벡터 조정 값(제1 원시 움직임 벡터의 조정에 사용) 및 제2 서브 픽셀 움직임 벡터 조정 값(제2 원시 움직임 벡터의 조정에 사용)을 결정한다. 예컨대, 최적의 움직임 벡터에 대응하는 비용 값과, 최적의 움직임 벡터에 대응하는 가장자리 움직임 벡터에 대응하는 비용 값에 따라, 제1 서브 픽셀 움직임 벡터 조정 값을 결정하고, 다음, 상기 제1 서브 픽셀 움직임 벡터 조정 값에 따라 제2 서브 픽셀 움직임 벡터 조정 값을 결정한다.
예를 들어, x0=N*(E(-1, 0)-E(1, 0))/(E(-1, 0)+E(1, 0)-2*E(0, 0)), y0=N*(E(0, -1)-E(0, 1))/(E(0, -1)+E(0, 1)-2*E(0, 0))이고, 1/2, 1/4, 1/8 및 1/16의 움직임 벡터 픽셀 정밀도의 경우, N=1, 2, 4 및 8이다. 다음, (x0, y0)을 deltaMv에 할당하고, SPMV=deltaMv/2N이며, 만약 현재가 1/16의 움직임 벡터 픽셀 정밀도이면, SPMV는 (x0/16, y0/16)이다. SPMV는 제1 서브 픽셀 움직임 벡터 조정 값이다. E(0, 0)는 최적의 움직임 벡터의 비용 값을 나타내고; E(-1, 0)는 최적의 움직임 벡터를 중심으로 하는, 최적의 움직임 벡터 (0, 0)의 가장자리 움직임 벡터 (-1, 0)의 비용 값이며; E(1, 0)는 최적의 움직임 벡터를 중심으로 하는, 최적의 움직임 벡터 (0, 0)의 가장자리 움직임 벡터 (1, 0)의 비용 값이고; E(0, -1)는 최적의 움직임 벡터를 중심으로 하는, 최적의 움직임 벡터 (0, 0)의 가장자리 움직임 벡터 (0, -1)의 비용 값이며; E(0, 1)는 최적의 움직임 벡터를 중심으로 하는, 최적의 움직임 벡터 (0, 0)의 가장자리 움직임 벡터 (0, 1)의 비용 값이다. 각 움직임 벡터의 비용 값에 대한 결정 방식은 상기 예시를 참조한다. 상기 방식으로 제1 서브 픽셀 움직임 벡터 조정 값을 결정한 후, 제1 서브 픽셀 움직임 벡터 조정 값에 따라 제2 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있고, 제2 서브 픽셀 움직임 벡터 조정 값은 제1 서브 픽셀 움직임 벡터 조정 값의 대칭 값이다. 예를 들어, 만약 제1 서브 픽셀 움직임 벡터 조정 값이 (1, 0)이면, 제2 서브 픽셀 움직임 벡터 조정 값은 (-1, 0)인 바, 즉 (1, 0)의 대칭 값이다.
단계 c6에서, 제1 정수 픽셀 움직임 벡터 조정 값 및/또는 제1 서브 픽셀 움직임 벡터 조정 값에 따라, 제1 원시 움직임 벡터를 조정하여, 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터를 획득한다. 예를 들어, 제1 목표 움직임 벡터=제1 원시 움직임 벡터+제1 정수 픽셀 움직임 벡터 조정 값+제1 서브 픽셀 움직임 벡터 조정 값이다.
단계 c7에서, 제2 정수 픽셀 움직임 벡터 조정 값 및/또는 제2 서브 픽셀 움직임 벡터 조정 값에 따라, 제2 원시 움직임 벡터를 조정하여, 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득한다. 예를 들어, 제2 목표 움직임 벡터=제2 원시 움직임 벡터+제2 정수 픽셀 움직임 벡터 조정 값+제2 서브 픽셀 움직임 벡터 조정 값이다.
실시예 17: 상기 실시예에서, 현재 블록의 각각의 서브 블록에 대해, 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터를 조정하여, 서브 블록의 제1 목표 움직임 벡터를 획득하고; 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제2 원시 움직임 벡터를 조정하여, 서브 블록의 제2 목표 움직임 벡터를 획득하는 것에 관하여, 하나의 서브 블록(예컨대, 현재 블록의 각각의 dx*dy 크기의 서브 블록)의 처리 과정을 예로 들어 원시 움직임 벡터의 조정 과정을 소개한다.
제1 원시 움직임 벡터를 Org_MV0으로 표기하고, 제2 원시 움직임 벡터를 Org_MV1로 표기하며, 제1 목표 움직임 벡터를 Refined_MV0으로 표기하고, 제2 목표 움직임 벡터를 Refined_MV1로 표기할 수 있다.
단계 d1에서, 제1 원시 움직임 벡터를 중심으로, 제1 원시 움직임 벡터 주변의 제1 원시 움직임 벡터가 포함되는 (2*SR+1)*(2*SR+1)개의 포인트에서, 일부 또는 전부의 움직임 벡터를 선택한다. 예를 들어, 만약 SR=2이면, 제1 원시 움직임 벡터 주변의 제1 원시 움직임 벡터가 포함되는 25개의 포인트에서 일부 또는 전부의 움직임 벡터를 선택하고, 선택된 이러한 움직임 벡터를 후보 움직임 벡터로 간주한다. 제1 원시 움직임 벡터의 비용 값을 결정하고, 각각의 후보 움직임 벡터의 비용 값을 결정한다. 비용 값이 가장 작은 움직임 벡터를 최적의 움직임 벡터로 간주한다. 상기 실시예의 단계 b1에 비해, 단계 d1에서는 반복 과정을 통해 첫 번째 반복에서 일부 움직임 벡터를 선택하고, 두 번째 반복에서 다시 일부 움직임 벡터를 선택하는 것이 아니라, 반복 과정을 수행할 필요없이, 한번에 모든 처리될 후보 움직임 벡터를 선택할 수 있다. 이에 기반하여, 모든 처리할 후보 움직임 벡터를 한번에 선택할 수 있기 때문에, 이러한 후보 움직임 벡터에 대해 병행 처리를 수행하여, 각각의 후보 움직임 벡터의 비용 값을 획득할 수 있으므로, 계산 복잡성을 낮추고 인코딩 성능을 향상시킬 수 있다.
단계 d2에서, 최적의 움직임 벡터에 따라 IntegerDeltaMV의 값을 결정하고, IntegerDeltaMV의 최종 값은 제1 정수 픽셀 움직임 벡터 조정 값이며, 이 결정 과정에 대해 더 이상 설명하지 않으며, 상기 실시예를 참조할 수 있다.
단계 d3에서, 최적의 움직임 벡터를 중심으로, 최적의 서브 픽셀 오프셋 MV를 획득하고, 최적의 서브 픽셀 오프셋을 SPMV로 표기하며, SPMV의 값은 제1 서브 픽셀 움직임 벡터 조정 값이다.
단계 d3의 구현 과정은 상기 단계 b2를 참조할 수 있으며, 여기에서 더 이상 반복 설명하지 않는다.
단계 d4에서, IntegerDeltaMV 및 SPMV에 기반하여, BestMVoffset를 획득한다. 예를 들어, BestMVoffset=IntegerDeltaMV+SPMV이다. 다음, BestMVoffset에 기반하여 목표 움직임 벡터: Refined_MV0=Org_MV0+BestMVoffset; Refined_MV1=Org_MV1-BestMVoffset를 획득할 수 있다.
실시예 18: 제1 원시 움직임 벡터 Org_MV0 및 제2 원시 움직임 벡터 Org_MV1을 제1 목표 움직임 벡터 Refined_MV0 및 제2 목표 움직임 벡터 Refined_MV1로 조정하기 위해, 구현 방식은 실시예 16, 실시예 17과 유사하다. 본 실시예에서는, 원시 움직임 벡터를 중심으로, 원시 움직임 벡터 주변의 상기 원시 움직임 벡터가 포함되는 총 (2*SR+1)*(2*SR+1)개의 포인트에서, 전부의 움직임 벡터를 선택할 수 있다. 예를 들어, 만약 SR=2이면, 원시 움직임 벡터 주변의 상기 원시 움직임 벡터가 포함되는 25개의 포인트에서 전부의 움직임 벡터를 선택하고, 이러한 움직임 벡터의 비용 값을 결정하며, 또한 각각의 움직임 벡터의 비용 값을 결정할 수 있다. 비용 값이 가장 작은 움직임 벡터를 최적의 움직임 벡터로 간주한다.
실시예 19: 제1 원시 움직임 벡터 Org_MV0 및 제2 원시 움직임 벡터 Org_MV1을 제1 목표 움직임 벡터 Refined_MV0 및 제2 목표 움직임 벡터 Refined_MV1로 조정하기 위해, 구현 형태는 실시예 16, 실시예 17과 유사하다. 본 실시예에서는 모든 처리할 후보 움직임 벡터를 한번에 선택할 수 있기 때문에, 이러한 후보 움직임 벡터에 대해 병행 처리를 수행하여, 각각의 후보 움직임 벡터의 비용 값을 획득할 수 있으므로, 계산 복잡성을 낮추고 인코딩 성능을 향상시킬 수 있다. 본 실시예에서는 원시 움직임 벡터를 중심으로, 원시 움직임 벡터 주변의 원시 움직임 벡터가 포함되는 총 (2*SR+1)*(2*SR+1)개의 포인트에서, 오프셋이 SR 범위를 초과하지 않는 일부 움직임 벡터를 선택한다.
예를 들어, 원시 움직임 벡터가 포함되는 (2*SR+1)*(2*SR+1)개의 포인트에서, N개(N은 1보다 크거나 같고, (2*SR+1)*(2*SR+1)보다 작거나 같음)의 후보 포인트를 선택한다. 다음, 이 N개의 포인트에 대응하는 움직임 벡터의 비용 값을 결정한다. 예시적으로, 일정한 순서에 따라 이 N개 포인트의 비용 값을 스캔하여, 가장 작은 비용 값의 움직임 벡터를 선택하여 최적의 움직임 벡터로 할 수 있다. 만약 비용 값이 동일하면, 순서가 앞에 위치하는 후보 포인트를 우선적으로 선택한다. 예시적으로, 비용 값의 결정 방식은, 후보 움직임 벡터에 의해 획득된 두 개의 예측 값의 다운 샘플링 SAD에 기반하여 비용 값을 결정하는 것일 수 있다.
일 예에서, SR=2라고 가정하면, 후보 포인트는 25개 일 수 있고, 이러한 후보 포인트의 순서에 대해, 좌측에서 우측, 상측에서 하측의 순서를 사용할 수 있다. 도 7a를 참조하면, 이러한 후보 포인트의 순서는: {Mv(-2, -2), Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(2, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-2, 2), Mv(-1, 2), Mv(0, 2), Mv(1, 2), Mv(2, 2)}일 수 있다. 또는, 도 7b를 참조하면, 이러한 후보 포인트의 순서는: {Mv(0, 0), Mv(-2, -2), Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(2, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-2, 2), Mv(-1, 2), Mv(0, 2), Mv(1, 2), Mv(2, 2)}일 수 있다.
이 25개 포인트의 움직임 벡터에 대응하는 비용 값을 결정하고, 상기 순서에 따라 스캔하여, 비용 값이 가장 작은 움직임 벡터를 획득하여 최적의 오프셋 MV로 간주하며, 최적의 오프셋 MV를 이용하여 정수 픽셀 움직임 벡터 조정 값 및 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있고, 결정 방식은 상기 실시예를 참조하며, 여기에서 더 이상 반복 설명하지 않는다.
다른 예에서, SR=2라고 가정하면, 후보 포인트는 21개 일 수 있고, 이러한 후보 포인트의 순서에 대해, 좌측에서 우측, 상측에서 하측의 순서를 사용할 수 있다. 도 7c를 참조하면, 이러한 후보 포인트의 순서는: {Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-1, 2), Mv(0, 2), Mv(1, 2)}일 수 있다. 또는, 도 7d을 참조하면, 이러한 후보 포인트의 순서는: {Mv(0, 0), Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(0, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-1, 2), Mv(0, 2) , Mv(1, 2)}이다.
이 21개 포인트의 움직임 벡터에 대응하는 비용 값을 결정하고, 상기 순서에 따라 스캔하여, 비용 값이 가장 작은 움직임 벡터를 획득하여 최적의 오프셋 MV로 간주하며, 최적의 오프셋 MV를 이용하여 정수 픽셀 움직임 벡터 조정 값 및 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있고, 결정 방식은 상기 실시예를 참조하며, 여기에서 더 이상 반복 설명하지 않는다.
다른 예에서, SR=2라고 가정하면, 후보 포인트는 25개 일 수 있고, 이러한 후보 포인트의 순서에 대해, 움직임 벡터 (0, 0)를 중심으로, 중심까지의 거리가 가까운 것에서 먼 것으로의 순서를 사용한다. 도 7e를 참조하면, 이러한 후보 포인트의 순서는: {Mv(0, 0), Mv(-1, 0), Mv(0, -1), Mv(1, 0), Mv(0, 1) , Mv(-1, 1) , Mv(-1, -1), Mv(1, -1), Mv(1, 1), Mv(0, 2), Mv(-2, 0), Mv(0, -2), Mv(2, 0), Mv(1, 2), Mv(-1, 2), Mv(-2, 1), Mv(-2, -1), Mv(-1, -2), Mv(1, -2), Mv(2, -1) , Mv(2, 1) , Mv(-2, 2), Mv(-2, -2), Mv(2, -2), Mv(2, 2)}일 수 있다. 이 25개 포인트의 움직임 벡터에 대응하는 비용 값을 결정하고, 상기 순서에 따라 스캔하여, 비용 값이 가장 작은 움직임 벡터를 획득하여 최적의 오프셋 MV로 간주하며, 최적의 오프셋 MV를 이용하여 정수 픽셀 움직임 벡터 조정 값 및 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있고, 결정 방식은 상기 실시예를 참조하며, 여기에서 더 이상 반복 설명하지 않는다.
다른 예에서, SR=2라고 가정하면, 후보 포인트는 21개 일 수 있고, 이러한 후보 포인트의 순서에 대해, 움직임 벡터 (0, 0)를 중심으로, 중심까지의 거리가 가까운 것에서 먼 것으로의 순서를 사용한다. 도 7f를 참조하면, 이러한 후보 포인트의 순서는: {Mv(0, 0), Mv(-1, 0), Mv(0, -1), Mv(1, 0), Mv(0, 1), Mv(-1, 1), Mv(-1, -1), Mv(1, -1), Mv(1, 1), Mv(0, 2), Mv(-2, 0), Mv(0, -2), Mv(2, 0), Mv(1, 2), Mv(-1, 2), Mv(-2, 1), Mv(-2, -1), Mv(-1, -2), Mv(1, -2), Mv(2, -1), Mv(2, 1)}이다. 이 21개 포인트의 움직임 벡터에 대응하는 비용 값을 결정하고, 또한 상기 순서에 따라 스캔하여, 비용 값이 가장 작은 움직임 벡터를 획득하여 최적의 오프셋 MV로 간주하며, 최적의 오프셋 MV를 이용하여 정수 픽셀 움직임 벡터 조정 값 및 서브 픽셀 움직임 벡터 조정 값을 결정하고, 결정 방식은 상기 실시예를 참조한다.
다른 예에서, SR=2라고 가정하면, 후보 포인트는 13개 일 수 있고, 이러한 후보 포인트의 순서에 대해, 움직임 벡터 (0, 0)를 중심으로, 중심까지의 거리가 가까운 것에서 먼 것으로의 순서를 사용한다. 도 7g를 참조하면, 이러한 후보 포인트의 순서는: {Mv(0, 0), Mv(-1, 0), Mv(0, -1), Mv(1, 0), Mv(0, 1), Mv(-1, 1), Mv(-1, -1), Mv(1, -1), Mv(1, 1), Mv(0, 2), Mv(-2, 0), Mv(0, -2), Mv(2, 0)}이다. 이 13개 포인트의 움직임 벡터에 대응하는 비용 값을 결정하고, 상기 순서에 따라 스캔하여, 비용 값이 가장 작은 움직임 벡터를 획득하여 최적의 오프셋 MV로 간주하며, 최적의 오프셋 MV를 이용하여 정수 픽셀 움직임 벡터 조정 값 및 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있고, 결정 방식은 상기 실시예를 참조한다.
상기 실시예에서, 첫 번째 후보 움직임 벡터가 Mv(0, 0)일 때, 첫 번째 후보 움직임 벡터 Mv(0, 0)의 비용 SAD(0, 0)에 대해 SAD(0, 0)=SAD(0, 0)-SAD(0, 0)/4와 같은 처리를 수행하는 바, 즉 강제적으로 1/4을 줄이고, 다른 후보 움직임 벡터의 비용 SAD에 대해 상기 처리를 수행하지 않는다.
일 가능한 실시형태에서, 상기 후보 움직임 벡터의 확인 과정에서, 하기와 같은 조기 종료 메커니즘이 존재한다.
만약 첫 번째 후보 움직임 벡터 (Mv(0, 0))의 비용 SAD(0, 0)이 임계값 dx*dy보다 작으면, 후속되는 후보 움직임 벡터의 확인을 수행하지 않는 바, 즉 서브 블록의 최적의 정수 픽셀 오프셋은 Mv(0, 0)이다.
만약 특정 후보 움직임 벡터의 비용이 0이면, 후속되는 후보 움직임 벡터의 확인을 수행하지 않고, 현재의 후보 움직임 벡터를 최적의 정수 픽셀 오프셋으로 간주한다.
만약 상기 후보 움직임 벡터의 확인 과정에서 상기 어느 하나의 조기 종료 상황이 존재하면, 후속되는 서브 픽셀 오프셋의 계산 과정을 수행하지 않고, 직접 정수 픽셀 오프셋을 통해 서브 블록의 목표 움직임 벡터를 획득한다.
실시예 20: 제1 원시 움직임 벡터 Org_MV0 및 제2 원시 움직임 벡터 Org_MV1을 제1 목표 움직임 벡터 Refined_MV0 및 제2 목표 움직임 벡터 Refined_MV1로 조정하기 위해, 구현 형태는 실시예 16, 실시예 17과 유사하다. 본 실시예에서는 모든 처리할 후보 움직임 벡터를 한번에 선택할 수 있기 때문에, 이러한 후보 움직임 벡터에 대해 병행 처리를 수행하여, 각각의 후보 움직임 벡터의 비용 값을 획득할 수 있으므로, 계산 복잡성을 낮추고 인코딩 성능을 향상시킬 수 있다. 본 실시예에서는 원시 움직임 벡터를 중심으로, (2*SR+1)*(2*SR+1)개의 포인트에서, 오프셋이 SR 범위를 초과하지 않는 일부 움직임 벡터를 선택한다. 예를 들어, 원시 움직임 벡터가 포함되는 (2*SR+1)*(2*SR+1)개의 포인트에서, N개(N은 1보다 크거나 같고, (2*SR+1)*(2*SR+1)보다 작거나 같음)의 후보 포인트를 선택한다. 이 N개의 포인트에 대응하는 움직임 벡터의 비용 값을 결정한다. 일정한 순서에 따라 이 N개 포인트의 비용 값을 스캔하여, 가장 작은 비용 값의 움직임 벡터를 선택하여 최적의 움직임 벡터로 간주한다. 만약 비용 값이 동일하면, 순서가 앞에 위치하는 후보 포인트를 우선적으로 선택한다.
실시예 19와 상이한 점은, 실시예 19의 후보 포인트의 위치는 모두 고정된 것인바, 즉 원시 움직임 벡터와 무관하고, 실시예 20의 후보 포인트의 위치는 원시 움직임 벡터와 관련이 있으며, 이하, 몇 개의 구체적인 예를 결합하여 설명한다.
일 예에서, SR=2라고 가정하면, 후보 포인트는 13개 일 수 있고, 이러한 후보 포인트의 순서에 대해, 움직임 벡터 (0, 0)를 중심으로, 중심까지의 거리가 가까운 것에서 먼 것으로의 순서를 사용한다. 또한, 중심으로부터의 제1 레이어 후보 포인트의 순서는 원시 움직임 벡터의 크기와 무관하며, 중심으로부터의 제2 레이어 후보 포인트의 순서는 원시 움직임 벡터의 크기와 관련이 있다. 이러한 후보 포인트의 순서는: {Mv(0, 0), Mv(-1, 0), Mv(0, -1), Mv(1, 0), Mv(0, 1), Mv(-1, 1), Mv(-1, -1), Mv(1, -1), Mv(1, 1), Mv(sign_H*2, 0), Mv(sign_H*2, sign_V*1), Mv(0, sign_V*2), Mv(0, sign_V*2)}이다. 제1 원시 움직임 벡터를 MV0으로, 수평 컴포넌트를 MV0_Hor로, 수직 컴포넌트를 MV0_Ver로 기록한다. 만약 MV0_Hor이 0보다 크거나 같으면, sign_H=1이고; 그렇지 않으면 sign_H=-1이며; 만약 MV0_Ver이 0보다 크거나 같으면, sign_V=1이고; 그렇지 않으면 sign_V=-1이다. 이 13개 포인트의 움직임 벡터에 대응하는 비용 값을 결정하고, 상기 순서에 따라 스캔하여, 비용 값이 가장 작은 움직임 벡터를 획득하여 최적의 오프셋 MV로 간주하며, 최적의 오프셋 MV를 이용하여 정수 픽셀 움직임 벡터 조정 값 및 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있고, 결정 방식은 상기 실시예를 참조한다
다른 예에서, SR=2라고 가정하면, 후보 포인트는 13개 일 수 있고, 이러한 후보 포인트의 순서에 대해, 움직임 벡터 (0, 0)를 중심으로, 중심까지의 거리가 가까운 것에서 먼 것으로의 순서를 사용한다. 또한, 중심으로부터의 제1 레이어 후보 포인트의 순서는 원시 움직임 벡터의 크기와 무관하며, 중심으로부터의 제2 레이어 후보 포인트의 순서는 원시 움직임 벡터의 크기와 관련이 있고, 이러한 후보 포인트의 순서는: {Mv(0, 0), Mv(-1, 0), Mv(0, -1), Mv(1, 0), Mv(0, 1), Mv(-1, 1), Mv(-1, -1), Mv(1, -1), Mv(1, 1), Mv(sign_H*2, 0), Mv(sign_H*2, sign_V*1), Mv(0, sign_V*2), Mv(0, sign_V*2)}이다. 제1 원시 움직임 벡터를 MV0으로, 수평 컴포넌트를 MV0_Hor로, 수직 컴포넌트를 MV0_Ver로 기록한다. 만약 MV0_Hor이 0보다 크면, sign_H =1이고; 그렇지 않으면 sign_H=-1이며; 만약 MV0_Ver이 0보다 크면, sign_V=1이고; 그렇지 않으면 sign_V=-1이다. 이 13개 포인트의 움직임 벡터에 대응하는 비용 값을 결정하고, 상기 순서에 따라 스캔하여, 비용 값이 가장 작은 움직임 벡터를 획득하여 최적의 오프셋 MV로 간주하며, 최적의 오프셋 MV를 이용하여 정수 픽셀 움직임 벡터 조정 값 및 서브 픽셀 움직임 벡터 조정 값을 결정할 수 있고, 결정 방식은 상기 실시예를 참조한다.
실시예 21: 상기 실시예에서, 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 중심 움직임 벡터에 대응하는 제1 비용 값, 가장자리 움직임 벡터에 대응하는 제2 비용 값을 획득한다. 제1 참조 블록의 제1 픽셀 값 및 제2 참조 블록의 제2 픽셀 값에 따라, 제1 원시 움직임 벡터에 대응하는 제3 비용 값, 후보 움직임 벡터에 대응하는 제4 비용 값을 획득한다. 일 예에서, 다운 샘플링되지 않은 제1 픽셀 값 및 다운 샘플링되지 않은 제2 픽셀 값에 따라, 중심 움직임 벡터에 대응하는 제1 비용 값, 가장자리 움직임 벡터에 대응하는 제2 비용 값, 제1 원시 움직임 벡터에 대응하는 제3 비용 값, 후보 움직임 벡터에 대응하는 제4 비용 값을 획득한다. 또는, 제1 픽셀 값에 대해 다운 샘플링 조작을 수행하고, 제2 픽셀 값에 대해 다운 샘플링 조작을 수행하며; 다운 샘플링된 제1 픽셀 값 및 다운 샘플링된 제2 픽셀 값에 따라, 중심 움직임 벡터에 대응하는 제1 비용 값, 가장자리 움직임 벡터에 대응하는 제2 비용 값, 제1 원시 움직임 벡터에 대응하는 제3 비용 값, 후보 움직임 벡터에 대응하는 제4 비용 값을 획득한다. 또는, 제1 픽셀 값에 대해 시프팅 및 다운 샘플링 조작을 수행하고, 제2 픽셀 값에 대해 시프팅 및 다운 샘플링 조작을 수행하며; 다음, 조작된 후의 제1 픽셀 값 및 조작된 후의 제2 픽셀 값에 따라, 중심 움직임 벡터에 대응하는 제1 비용 값, 가장자리 움직임 벡터에 대응하는 제2 비용 값, 제1 원시 움직임 벡터에 대응하는 제3 비용 값, 후보 움직임 벡터에 대응하는 제4 비용 값을 획득한다.
상이한 상황에서, 비용 값을 결정하는 방식은 유사하다. 예를 들어, 중심 움직임 벡터에 대응하는 비용 값을 획득하기 위해, 제1 참조 블록에서 중심 움직임 벡터에 대응하는 서브 참조 블록 A1을 복사하여 획득하고, 제2 참조 블록에서 중심 움직임 벡터의 대칭 움직임 벡터에 대응하는 서브 참조 블록 B1을하여 획득하며, 서브 참조 블록 A1의 제1 픽셀 값 및 서브 참조 블록 B1의 제2 픽셀 값을 이용하여, 중심 움직임 벡터에 대응하는 비용 값을 획득할 수 있다. 가장자리 움직임 벡터에 대응하는 비용 값을 획득하기 위해, 제1 참조 블록에서 가장자리 움직임 벡터에 대응하는 서브 참조 블록 A2를 복사하여 획득하고, 제2 참조 블록에서 가장자리 움직임 벡터의 대칭 움직임 벡터에 대응하는 서브 참조 블록 B2를 복사하여 획득하며, 서브 참조 블록 A2의 제1 픽셀 값 및 서브 참조 블록 B2의 제2 픽셀 값을 이용하여, 가장자리 움직임 벡터에 대응하는 비용 값을 획득할 수 있다.
요약하면, 움직임 벡터에 대응하는 비용 값을 획득하기 위해, 제1 참조 블록에서 상기 움직임 벡터에 대응하는 서브 참조 블록을 획득하고, 제2 참조 블록에서 상기 움직임 벡터의 대칭 움직임 벡터에 대응하는 서브 참조 블록을 획득한 다음, 두 개의 서브 참조 블록의 픽셀 값을 이용하여 상기 움직임 벡터에 대응하는 비용 값을 획득할 수 있으며, 이 과정에 대해 더 이상 설명하지 않는다.
실시예 22: 실시예 21을 토대로, 다운 샘플링되지 않은 제1 픽셀 값(즉 제1 참조 블록 중의 서브 참조 블록의 다운 샘플링되지 않은 픽셀 값) 및 다운 샘플링되지 않은 제2 픽셀 값(즉 제2 참조 블록 중의 서브 참조 블록의 다운 샘플링되지 않은 픽셀 값)에 따라, 움직임 벡터에 대응하는 비용 값을 획득한다. 예를 들어, 제1 참조 블록 중의 서브 참조 블록이 pred0이고, 제2 참조 블록 중의 서브 참조 블록이 pred1이라고 가정하면, 서브 참조 블록 pred0 및 서브 참조 블록 pred1의 모든 픽셀 값의 SAD에 따라 비용 값을 결정하고, 서브 참조 블록 pred0 및 서브 참조 블록 pred1의 픽셀에 대해 수직 다운 샘플링을 수행할 필요가 없다.
서브 참조 블록 pred0 및 서브 참조 블록 pred1의 모든 픽셀 값에 기반하여, 비용 값 계산 수학식은 하기와 같다.
Figure pct00001
상기 수학식에서, cost는 비용 값을 표시할 수 있고, W는 서브 참조 블록의 너비 값일 수 있으며, H는 서브 참조 블록의 높이 값일 수 있고, pred0(i, j)는 서브 참조 블록 pred0의 제i열 제j행의 픽셀 값을 표시할 수 있으며, pred1(i, j)는 서브 참조 블록 pred1의 제i열 제j행의 픽셀 값을 표시할 수 있고, abs(x)는 x의 절댓값을 표시할 수 있다.
실시예 23: 실시예 21을 토대로, 제1 픽셀 값에 대해 다운 샘플링 조작을 수행하고, 제2 픽셀 값에 대해 다운 샘플링 조작을 수행할 수 있으며; 다운 샘플링된 제1 픽셀 값(즉 제1 참조 블록 중의 서브 참조 블록의 다운 샘플링된 픽셀 값) 및 다운 샘플링된 제2 픽셀 값(즉 제2 참조 블록 중의 서브 참조 블록의 다운 샘플링된 픽셀 값)에 따라, 움직임 벡터에 대응하는 비용 값을 획득할 수 있다. 예를 들어, 제1 참조 블록 중의 서브 참조 블록이 pred0이고, 제2 참조 블록 중의 서브 참조 블록이 pred1이라고 가정하면, 서브 참조 블록 pred0 및 서브 참조 블록 pred1의 모든 픽셀 값의 SAD에 따라 비용 값을 결정한다. 모든 픽셀 값의 SAD를 이용하여 비용 값을 결정할 경우, 서브 참조 블록 pred0 및 서브 참조 블록 pred1의 픽셀 값에 대해 수직 N배(N은 0보다 큰 정수이고, 2일 수 있음) 다운 샘플링을 수행한다.
서브 참조 블록 pred0 및 서브 참조 블록 pred1의 모든 픽셀 값에 기반하여, 비용 값 계산 수학식은 하기와 같다:
Figure pct00002
상기 수학식에서, cost는 비용 값을 표시할 수 있고, W는 서브 참조 블록의 너비 값일 수 있으며, H는 서브 참조 블록의 높이 값일 수 있고, N은 다운 샘플링의 파라미터를 표시할 수 있으며, 0보다 큰 정수이며 2일 수 있고, pred0(1+N(i-1), j)는 서브 참조 블록 pred0의 제1+N(i-1)열 제j행의 픽셀 값을 표시할 수 있으며, pred1(1+N(i-1), j)는 서브 참조 블록 pred1의 제1+N(i-1)열 제j행의 픽셀 값을 표시할 수 있고, abs(x)는 x의 절댓값을 표시할 수 있다.
실시예 24: 실시예 21을 토대로, 제1 픽셀 값에 대해 시프팅 및 다운 샘플링 조작을 수행하고, 제2 픽셀 값에 대해 시프팅 및 다운 샘플링 조작을 수행하며; 조작된 후의 제1 픽셀 값(제1 참조 블록 중의 서브 참조 블록의 시프팅 및 다운 샘플링된 픽셀 값) 및 조작된 후의 제2 픽셀 값(제2 참조 블록 중의 서브 참조 블록의 시프팅 및 다운 샘플링된 픽셀 값)에 따라, 움직임 벡터에 대응하는 비용 값을 획득한다. 예를 들어, 제1 참조 블록 중의 서브 참조 블록이 pred0이고, 제2 참조 블록 중의 서브 참조 블록이 pred1이라고 가정하면, pred0 및 pred1 모두 D 비트의 저장 방식을 사용하는 바, 즉 pred0 중의 각각의 픽셀 값은 모두 D 비트를 사용하여 저장되며, pred1 중의 각각의 픽셀 값은 모두 D 비트를 사용하여 저장된다.
만약 D가 8보다 작거나 같으면, 서브 참조 블록 pred0 및 서브 참조 블록 pred1의 모든 픽셀 값의 SAD에 따라 비용 값을 결정한다. 모든 픽셀 값의 SAD를 이용하여 비용 값을 결정할 경우, 서브 참조 블록 pred0 및 서브 참조 블록 pred1의 픽셀 값에 대해 수직 N배(N은 0보다 큰 정수이고, 2일 수 있음) 다운 샘플링을 수행한다. 서브 참조 블록 pred0 및 서브 참조 블록 pred1의 모든 픽셀 값에 기반하여, 비용 값 계산 수학식은 하기와 같다:
Figure pct00003
상기 수학식에서, cost는 비용 값을 나타내고, W는 서브 참조 블록의 너비 값이며, H는 서브 참조 블록의 높이 값이고, N은 다운 샘플링의 파라미터를 나타내며, 0보다 큰 정수이며 2일 수 있고, pred0(1+N(i-1), j)는 서브 참조 블록 pred0의 제1+N(i-1)열 제j행의 픽셀 값을 나타내며, pred1(1+N(i-1), j)는 서브 참조 블록 pred1의 제1+N(i-1)열 제j행의 픽셀 값을 나타내고, abs(x)는 x의 절댓값을 나타내며, 요약하면, 제1행, 제N+1행, 제2N+1행 ...의 차이의 절댓값의 합만 계산함을 알 수 있다.
만약 D가 8보다 크면, 먼저 서브 참조 블록 pred0 및 서브 참조 블록 pred1의 모든 픽셀 값을 8 비트로 시프팅하여, 8 비트의 pred0 및 8 비트의 pred1을 획득하며, pred0-8bit(i, j) 및 pred1-8bit(i, j)로 표기한다. 그 목적은 SAD 계산의 저장 비용을 절약하기 위함이고, 8 비트의 저장은 더 높은 병행성을 구현할 수 있다.
Figure pct00004
다음, 8 비트의 pred0 및 8 비트의 pred1의 픽셀 값에 대해 수직 N배(N은 0보다 큰 정수이고, 2일 수 있음) 다운 샘플링을 수행하고, 이와 같이, 비용 값의 계산 수학식은 하기와 같을 수 있다:
Figure pct00005
상기 수학식에서, 각 수식의 의미는 상기 실시예를 참조하고, 여기서 더 이상 반복 설명하지 않는다.
실시예 25: 상기 실시예에서, 현재 블록의 각각의 서브 블록에 대해, 상기 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터에 따라, 상기 서브 블록의 예측 값을 결정하고, 각각의 서브 블록의 예측 값에 따라 현재 블록의 예측 값을 결정한다. 예를 들어, 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터에 기반하여, 보간(예컨대, 8-탭 보간)을 통해 두 개 방향의 참조 블록(즉 제3 참조 블록 및 제4 참조 블록, 3개 컴포넌트의 예측 값을 포함할 수 있고, 목표 움직임 벡터가 서브 픽셀일 수 있기 때문에 보간이 필요함)을 획득한다. 다음, 제3 참조 블록의 제3 픽셀 값 및 제4 참조 블록의 제4 픽셀 값에 따라 가중하여, 최종의 예측 값(예컨대, 3개 컴포넌트의 예측 값)을 획득한다.
일 가능한 실시형태에서, 만약 최적의 움직임 벡터와 초기 움직임 벡터(즉 제1 원시 움직임 벡터 또는 제2 원시 움직임 벡터)가 동일하면, 서브 블록의 제1 목표 움직임 벡터에 기반하여, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제3 참조 블록을 결정하고; 상기 서브 블록의 제2 목표 움직임 벡터에 기반하여, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제4 참조 블록을 결정한다. 상기 제3 참조 블록의 픽셀 값 및 상기 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득한다.
예를 들어, 서브 블록의 크기가 dx*dy라고 가정하면, 제1 목표 움직임 벡터에 기반하여 제1 참조 프레임에서 크기가 dx*dy인 제3 참조 블록을 결정한다. 예를 들어, 제1 참조 프레임에서 크기가 A*B인 참조 블록을 결정하고, A*B의 크기는 보간 방식과 관련이 있으며, 예컨대 A는 dx보다 크고, B는 dy보다 크며, 이에 대해 제한하지 않는다. 상기 참조 블록 중의 픽셀 값을 보간함으로써, 크기가 dx*dy인 제3 참조 블록을 획득할 수 있고, 이 보간 방식에 대해 제한하지 않는다. 제2 목표 움직임 벡터에 기반하여 제2 참조 프레임에서 크기가 dx*dy인 제4 참조 블록을 결정한다. 예를 들어, 제2 참조 프레임에서 크기가 A*B인 참조 블록을 결정하고, A*B의 크기는 보간 방식과 관련이 있으며, 예컨대 A는 dx보다 크고, B는 dy보다 크며, 이에 대해 제한하지 않는다. 상기 참조 블록 중의 픽셀 값을 보간함으로써, 크기가 dx*dy인 제4 참조 블록을 획득할 수 있고, 이 보간 방식에 대해 제한하지 않는다.
다른 가능한 실시형태에서, 만약 최적의 움직임 벡터와 초기 움직임 벡터가 상이하면, 제1 참조 프레임에서 제5 참조 블록을 결정하고, 상기 제5 참조 블록을 확장하여 제6 참조 블록을 획득하며; 다음, 상기 서브 블록의 제1 목표 움직임 벡터에 기반하여, 상기 제6 참조 블록에서 상기 서브 블록에 대응하는 제3 참조 블록을 선택할 수 있다. 또한, 제2 참조 프레임에서 제7 참조 블록을 결정하고, 상기 제7 참조 블록을 확장하여 제8 참조 블록을 획득하며; 상기 서브 블록의 제2 목표 움직임 벡터에 기반하여, 상기 제8 참조 블록에서 상기 서브 블록에 대응하는 제4 참조 블록을 선택할 수 있다. 다음, 상기 제3 참조 블록의 픽셀 값 및 상기 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득할 수 있다.
예를 들어, 서브 블록의 크기가 dx*dy라고 가정하면, 제1 원시 움직임 벡터에 기반하여 제1 참조 프레임에서 크기가 dx*dy인 제5 참조 블록을 결정한다. 예를 들어, 제1 참조 프레임에서 크기가 A*B인 참조 블록을 결정하고, A*B의 크기는 보간 방식과 관련이 있으며, 예컨대 A는 dx보다 크고, B는 dy보다 크며, 이에 대해 제한하지 않는다. 상기 참조 블록 중의 픽셀 값을 보간함으로써, 크기가 dx*dy인 제5 참조 블록을 획득할 수 있고, 이 보간 방식에 대해 제한하지 않는다. 다음, 제5 참조 블록을 확장하여 제6 참조 블록을 획득하고, 예를 들어, 인접 값 복사 방식을 통해, 제5 참조 블록에 대해 상, 하, 좌, 우의 채우기(filling)를 수행하며, 채워진 참조 블록을 제6 참조 블록으로 간주하고, 제6 참조 블록의 크기는 dx*dy보다 클 수 있다. 다음, 서브 블록의 제1 목표 움직임 벡터에 기반하여, 제6 참조 블록에서 서브 블록에 대응하는 크기가 dx*dy인 제3 참조 블록을 선택한다.
서브 블록의 크기가 dx*dy라고 가정하면, 제2 원시 움직임 벡터에 기반하여 제2 참조 프레임에서 크기가 dx*dy인 제7 참조 블록을 결정한다. 예를 들어, 제2 참조 프레임에서 크기가 A*B인 참조 블록을 결정하고, A*B의 크기는 보간 방식과 관련이 있으며, 예컨대 A는 dx보다 크고, B는 dy보다 크며, 이에 대해 제한하지 않는다. 상기 참조 블록 중의 픽셀 값을 보간함으로써, 크기가 dx*dy인 제7 참조 블록을 획득할 수 있고, 이 보간 방식에 대해 제한하지 않는다. 다음, 제7 참조 블록을 확장하여 제8 참조 블록을 획득할 수 있고, 예를 들어, 인접 값 복사 방법을 통해, 제7 참조 블록에 대해 상, 하, 좌, 우의 채우기를 수행하며, 채워진 참조 블록을 제8 참조 블록으로 간주하고, 제8 참조 블록의 크기는 dx*dy보다 클 수 있다. 다음, 서브 블록의 제2 목표 움직임 벡터에 기반하여, 제8 참조 블록에서 서브 블록에 대응하는 크기가 dx*dy인 제4 참조 블록을 선택한다.
실시예 26: 목표 움직임 벡터가 획득된 후, 각각의 서브 블록의 목표 움직임 벡터에 기반하여, 8-탭 보간 필터를 통해 두 개 방향의 예측 값(즉 YUV 3개 컴포넌트, 즉 상기 제3 참조 블록의 예측 값 및 제4 참조 블록의 예측 값)을 획득되고, 최종의 예측 값은 가중하여 획득한다. 또는, 각각의 서브 블록의 목표 움직임 벡터에 기반하여, 이중 선형 보간 필터(여기서는 더 이상 8-탭 보간 필터가 아님)를 통해 두 개 방향의 예측 값(즉 YUV 3개 컴포넌트, 즉 상기 제3 참조 블록의 예측 값 및 제4 참조 블록의 예측 값)을 획득하고, 최종의 예측 값은 가중하여 획득된다.
실시예 27: 두 개 방향의 예측 값이 획득된 후, 평균값 가중 평균(즉 두 개 방향의 예측 값의 가중치가 동일함)을 통해, 최종의 예측 값을 획득한다. 또는, 두 개 방향의 예측 값이 획득된 후, 가중 평균을 통해 최종의 예측 값을 획득하고, 두 개의 예측 값의 가중치는 상이할 수 있다. 예를 들어, 두 개의 예측 값의 가중치 비율은 1:2, 1:3, 2:1 등일 수 있다. 인코딩단의 경우, 가중치 테이블에는 1:2, 1:3, 2:1 등 가중치 비율이 포함될 수 있고, 인코딩단은 각각의 가중치 비율의 비용 값을 결정하고, 비용 값이 가장 작은 가중치 비율을 결정할 수 있으며, 이런 방법으로, 인코딩단은 비용 값이 가장 작은 가중치 비율에 기반하여, 가중 평균을 통해 최종의 예측 값을 획득할 수 있다. 인코딩단이 디코딩단에 인코딩 비트 스트림을 송신할 때, 상기 인코딩 비트 스트림은 가중치 테이블에서의 가중치 비율의 인덱스 값을 휴대(carry)된다. 이런 방법으로, 디코딩단은 인코딩 비트 스트림의 인덱스 값을 해석하여, 가중치 테이블에서 상기 인덱스 값에 대응하는 가중치 비율을 획득하고, 가중치 비율에 기반하여 가중 평균을 통해 최종의 예측 값을 획득한다.
일 예에서, 가중치 테이블은 {-2, 3, 4, 5, 10}을 포함할 수 있으나 이에 제한되지 않는다. 예시적으로, 두 개의 가중치의 합은 8일 수 있고, 각각의 가중치에 대해, 가중치는 음의 값일 수 있으며, 두 개의 가중치의 합이 8이면 된다.
예를 들어, 가중치 "-2"는 하나의 음의 값이고, 하나의 예측 값의 가중치가 -2일 때, 다른 예측 값의 가중치는 10인바, 즉 두 개의 가중치의 합이 8이고, 이 경우, 최종 예측 값=(예측 값 1*(-2)+예측값 2*(8-(-2)))이다.
또 예를 들어, 가중치 "10"은 하나의 예측 값의 가중치가 10임을 나타내고, 다른 예측 값의 가중치는 -2인바, 즉 두 개의 가중치의 합이 8이고, 이 경우, 최종 예측 값=(예측 값 1*(10)+예측값 2*(-2))이다.
또 예를 들어, 가중치 "3"은 하나의 예측 값의 가중치가 3임을 나타내고, 다른 예측 값의 가중치는 5인바, 즉 두 개의 가중치의 합이 8이고, 이 경우, 최종 예측 값=(예측 값 1*(3)+예측값 2*(5))이다.
또 예를 들어, 가중치 "5"는 하나의 예측 값의 가중치가 5임을 나타내고, 다른 예측 값의 가중치는 3인바, 즉 두 개의 가중치의 합이 8이고, 이 경우, 최종 예측 값=(예측 값 1*(5)+예측값 2*(3))이다.
또 예를 들어, 가중치 "4"는 하나의 예측 값의 가중치가 4임을 나타내고, 다른 예측 값의 가중치는 4인바, 즉 두 개의 가중치의 합이 8이고, 이 경우, 최종 예측 값=(예측 값 1*(4)+예측값 2*(4))이다.
일 가능한 실시형태에서, 현재 블록의 각각의 서브 블록에 대해, 상기 실시예를 참조하면, 제3 참조 블록의 제3 픽셀 값 및 제4 참조 블록의 제4 픽셀 값을 획득할 수 있고, 다음, 제3 참조 블록의 제3 픽셀 값 및 제4 참조 블록의 제4 픽셀 값에 따라 가중하여 최종의 예측 값을 획득한다. 예를 들어, 제3 픽셀 값, 제3 픽셀 값에 대응하는 제1 가중치, 제4 픽셀 값, 제4 픽셀 값에 대응하는 제2 가중치에 대해 가중 처리를 수행하여, 상기 서브 블록의 예측 값을 획득한다. 만약 평균값 가중 평균(즉 두 개의 가중치가 동일함)을 통해 최종의 예측 값을 획득할 경우, 제1 가중치와 제2 가중치는 동일하다.
실시예 28: 상기 실시예에서, 현재 블록의 각각의 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 저장하거나, 또는, 현재 블록의 각각의 서브 블록의 제1 원시 움직임 벡터 및 제2 원시 움직임 벡터를 저장하거나, 또는, 현재 블록의 각각의 서브 블록의 제1 원시 움직임 벡터, 제2 원시 움직임 벡터, 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 저장할 수 있다. 저장된 움직임 벡터에 대해, 이러한 움직임 벡터는 후속되는 블록의 인코딩/디코딩 참조에 사용될 수 있다.
예를 들어, 현재 블록의 각각의 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터를 저장하는 것을 예로 들어 설명하면, 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터는 현재 프레임의 루프 필터링에 사용되고; 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터는 후속 프레임의 시간 영역 참조에 사용되며; 및/또는, 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터는 현재 프레임의 공간 영역 참조에 사용된다. 예를 들어, 현재 블록의 각각의 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터는 현재 블록의 움직임 보상에 사용될 수 있고, 후속 프레임의 시간 영역 참조에 사용될 수도 있다. 또 예를 들어, 현재 블록의 각각의 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터는 현재 블록의 움직임 보상에 사용될 수 있고, 현재 블록의 루프 필터링 과정에 사용될 수도 있으며, 후속 프레임의 시간 영역 참조에 사용될 수도 있다. 또 예를 들어, 현재 블록의 각각의 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터는 현재 블록의 움직임 보상에 사용될 수 있고, 현재 블록의 루프 필터링 과정에 사용될 수도 있으며, 후속 프레임의 시간 영역 참조에 사용될 수도 있고, 현재 프레임의 공간 영역 참조에 사용될 수도 있으며, 아래에서는 이에 대해 설명하기로 한다.
현재 블록의 각각의 서브 블록의 제1 목표 움직임 벡터 및 제2 목표 움직임 벡터는 공간 영역 중 일부 LCU(Largest Coding Unit, 최대 코딩 유닛) 내의 블록의 공간 영역 참조에 사용될 수 있다. 인코딩 및 디코딩 순서가 위에서 아래로, 왼쪽에서 오른쪽으로 이기 때문에, 현재 블록의 움직임 벡터는 현재 LCU 내의 다른 블록에 의해 참조될 수 있고, 후속되는 인접 LCU 내의 블록에 의해 참조될 수도 있다. 획득된 목표 움직임 벡터에 필요한 계산량이 크기 때문에, 만약 후속 블록이 현재 블록의 목표 움직임 벡터를 참조하면, 긴 시간동안 대기해야 한다. 긴 시간동안 대기함으로 인한 시간 지연을 방지하기 위해, 소수의 공간 영역 인접 블록만 현재 블록의 목표 움직임 벡터를 참조하도록 허용하고, 다른 블록은 현재 블록의 원시 움직임 벡터를 참조하게 한다.
예시적으로, 이러한 소수의 블록은 현재 LCU 하측에 위치하는 하측 LCU 및 우측 하단 LCU 내의 서브 블록을 포함하고, 우측 LCU 및 좌측 LCU 내에 위치하는 서브 블록은 현재 블록의 목표 움직임 벡터를 참조할 수 없다.
실시예 29: 이하, 하나의 구체적인 예를 결합하여, 움직임 벡터의 조정 과정을 설명한다. 움직임 벡터 조정의 구체적인 단계는 하기와 같을 수 있고, 아래 내용에서의 “복제”는 보간이 필요없이 획득될 수 있음을 설명하며, MV(즉 움직임 벡터)가 정수 픽셀 오프셋인 경우, 참조 프레임으로부터 직접 복제하여 획득할 수 있고, 그렇지 않으면 보간하여 획득해야 한다.
단계 e1에서, 만약 현재 블록에 대해 움직임 벡터 조정 모드가 시작되면, 하기와 같은 과정을 수행한다.
단계 e2에서, 참조 픽셀 값(현재 블록의 너비가 W이고, 높이가 H라고 가정함)을 준비한다.
단계 e3을 위한 정수 픽셀 블록을 준비한다: 원시 움직임 벡터(list0의 원시 움직임 벡터는 Org_MV0으로 표기되고, list1의 원시 움직임 벡터는 Org_MV1로 표기됨)에 기반하여, 대응하는 참조 프레임의 대응하는 위치에서 면적이 (W+FS-1)*(H+FS-1)인 3개 컴포넌트의 정수 픽셀 블록을 두 개 복제한다. 이 밖에, 단계 e4를 위한 정수 픽셀 블록을 준비한다. 상기 (W+FS-1)*(H+FS-1)의 정수 픽셀 블록을 토대로, (W+FS-1)*(H+FS-1)의 3개 컴포넌트의 정수 픽셀 블록에 대해 상, 하, 좌, 우로 각각 SR행/열의 확장을 수행하고, 확장 후 면적이 (W+FS-1+2*SR)*(H+FS-1+2*SR)인 3개 컴포넌트의 정수 픽셀 블록을 획득하여 Pred_Inter0 및 Pred_Inter1로 표기하며, 도 8을 참조한다. 예시적으로, 내층 검은 색 영역의 사이즈는 현재 블록의 사이즈이고, 바깥으로 확장된 흰색 영역은 원시 움직임 벡터에 대해 8-탭 필터 보간을 수행하는 데에 필요한 별도의 참조 픽셀이며, 외층 검은 색 영역은 목표 움직임 벡터에 대해 8-탭 필터 보간을 수행하는 데에 필요한 별도의 참조 픽셀이다.
내층의 W*H의 검은 색 영역 및 흰색 영역은 참조 프레임에서 획득된 픽셀 값이고, 외층 검은 색 영역의 픽셀 값은 참조 프레임에서 획득할 필요없이, 인접 픽셀 값을 복사하는 방법으로 획득할 수 있다. 일 예에서, 흰색 영역의 제1행의 W+FS-1개의 픽셀 값을 외층 검은색 영역의 앞의 SR행의 픽셀 값에 복제한다. 흰색 영역의 마지막 행의 W+FS-1개의 픽셀 값을 외층 검은색 영역의 마지막 SR행의 픽셀 값에 복제한다. 다음, 흰색 영역의 제1열의 H+FS-1개의 픽셀 값 및 상, 하의 각 SR개의 이미 획득된 외층 검은색 영역의 픽셀 값을 외층 검은색 영역의 앞의 SR열의 픽셀 값에 복제한다. 흰색 영역의 마지막 열의 H+FS-1개의 픽셀 값 및 상, 하의 각 SR개의 이미 획득된 외층 검은색 영역의 픽셀 값을 외층 검은색의 마지막 SR열의 픽셀 값에 복제한다. 다른 예에서, 흰색 영역의 제1열의 H+FS-1개의 픽셀 값을 외층 검은색 영역의 앞의 SR열의 픽셀 값에 복제한다. 흰색 영역의 마지막 열의 H+FS-1개의 픽셀 값을 외층 검은색 영역의 마지막 SR열의 픽셀 값에 복제한다. 다음, 흰색 영역의 제1행의 W+FS-1개의 픽셀 값 및 좌, 우의 각 SR개의 이미 획득된 외층 검은색 영역의 픽셀 값을 외층 검은색 영역의 앞의 SR행의 픽셀 값에 복제한다. 흰색 영역의 마지막 행의 W+FS-1개의 픽셀 값 및 좌, 우의 각 SR개의 이미 획득된 외층 검은색 영역의 픽셀 값을 외층 검은색 영역의 마지막 SR행의 픽셀 값에 복제한다.
두 개의 상이한 방향의 움직임 정보에 기반하여 첫 번째 움직임 보상을 수행한다. 예컨대, 휘도 컴포넌트(후속되는 검색 과정에서 휘도 컴포넌트를 사용하여 비용 값을 계산하기 때문임)에 대해, 면적이 (W+FS-1)*(H+FS-1)인 두 개의 정수 픽셀 참조 블록에 기반하여, 이중 선형 보간법을 통해 두 개의 사이즈가 (W +2*SR)*(H+2*SR)인 초기 참조 예측 값(Pred_Bilinear0 및 Pred_Bilinear1로 표기됨)을 획득하고, FS는 필터 탭 수이며, 기본 값은 8이고, SR은 검색 범위인 바, 즉 목표 움직임 벡터와 원시 움직임 벡터 최대 수평/연직 컴포넌트 보간은 기본 값이 2이다. Pred_Bilinear0/1은 단계 e3의 사용에 사용된다.
단계 e3에서, 현재 블록의 각각의 dx*dy 서브 블록에 대해, 목표 움직임 벡터(두 개 방향의 목표 움직임 벡터는 각각 Refined_MV0 및 Refined_MV1로 표기됨)를 각각 획득한다.
단계 e31에서, SR회 반복하여, 최적의 정수 픽셀 MV포인트의 정수 픽셀 오프셋을 획득하고, IntegerDeltaMV로 표기하며, IntegerDeltaMV를 (0, 0)으로 초기화하고, 매 회의 반복은 하기와 같은 과정을 수행한다:
단계 e311에서, deltaMV를 (0, 0)로 설정한다. 만약 첫 번째 반복 과정이면, 원시 움직임 벡터에 기반하여, 참조 픽셀 Pred_Bilinear0/1에서 두 개의 예측 값 블록(사실상 Pred_Bilinear0/1의 제일 중심의 W* H의 블록임)을 복사하여 획득하고, 이 두 개의 예측 값 블록에 기반하여, 초기 비용 값을 획득하는 바, 즉 두 개 방향의 예측 값 블록의 수직 2배 다운 샘플링된 SAD을 획득한다. 만약 상기 초기 비용 값이 dx*dy보다 작고, dx 및 dy가 현재 서브 블록의 너비와 높이이면, 후속되는 검색 과정을 직접 건너뛰고 단계 e32를 수행하며, notZeroCost를 false로 설정한다.
단계 e312에서, 상기 초기 포인트를 중심으로, {Mv(-2, -2), Mv(-1, -2), Mv(0, -2), Mv(1, -2), Mv(2, -2), Mv(-2, -1), Mv(-1, -1), Mv(0, -1), Mv(1, -1), Mv(2, -1), Mv(-2, 0), Mv(-1, 0), Mv(1, 0), Mv(2, 0), Mv(-2, 1), Mv(-1, 1), Mv(0, 1), Mv(1, 1), Mv(2, 1), Mv(-2, 2), Mv(-1, 2), Mv(0, 2), Mv(1, 2), Mv(2, 2)}의 순서에 따라 24개의 오프셋 MV(이 27개의 오프셋 MV를 모두 MVOffset이라고 함)를 획득하고, 이러한 오프셋 MV의 비용 값의 계산 및 비교 과정을 수행한다. 예를 들어, 특정 MVOffset에 기반하여, 참조 픽셀 Pred_Bilinear0/1에서, MVOffset를 통해 두 개의 예측 값 블록(즉 Pred_Bilinear0에서 중심 위치 오프셋 MVOffset이 수행된 W*H의 블록, Pred_Bilinear1에서 중심 위치 오프셋 -MVOffset(list0와 반대)이 수행된 W*H의 블록)을 획득하고, 이 두 개의 블록의 다운 샘플링 SAD을 계산하여 MVOffset의 비용 값으로 간주한다. 비용 값이 가장 작은 MVOffset를 보류(deltaMV에 저장)한다.
deltaMV값에 기반하여 IntegerDeltaMV를 업데이트한다. IntegerDeltaMV=deltaMV.
단계 e313에서, 1회의 반복을 거친 후, 만약 최적의 MV가 여전히 초기 MV이거나 가장 작은 비용 값이 0이면, 다음 번 반복 검색 과정을 수행하지 않고, 단계 e32를 수행하며, notZeroCost를 false로 설정한다.
단계 e32에서, 단계 e31의 최적의 정수 픽셀 MV 포인트를 중심으로, 최적의 서브 픽셀 오프셋 MV를 획득할 수 있고, SPMV(즉 subMV)로 표기하며, SPMV를 (0, 0)으로 초기화 한 다음, 하기와 같은 과정을 수행한다.
단계 e321에서, 오직 notZeroCost가 false가 아니고, deltaMV가 (0, 0)일 때에만 후속 처리를 수행하고, 그렇지 않으면, 직접 IntegerDeltaMV를 이용하여 원시 움직임 벡터를 조정한다.
단계 e322에서, E(x, y)를 단계 e31에서 획득된 최적의 MV포인트가 (x, y)만큼 오프셋된 MV에 대응하는 비용 값(단계 e31에서 계산된 비용 값)으로 나타낸다. 중심 및 상, 하, 좌, 우의 5개의 포인트의 E(x, y)에 기반하여, E(x, y)이 가장 작은 포인트의 오프셋 (x0, y0)이 x0=N*(E(-1, 0)-E(1, 0))/(E(-1, 0)+E(1, 0)-2*E(0, 0)), y0=N*(E(0, -1)-E(0, 1))/(E(0, -1)+E(0, 1)-2*E(0, 0))임을 획득할 수 있다. 일 예에서, 1/2, 1/4, 1/8 및 1/16의 움직임 벡터 픽셀 정밀도의 경우, N=1, 2, 4 및 8이다. 다음, (x0, y0)을 deltaMv에 할당할 수 있고, SPMV=deltaMv/2N이며, 만약 현재가 1/16의 움직임 벡터 픽셀 정밀도이면, SPMV는 (x0/16, y0/16)일 수 있다.
만약 E(-1, 0)=E(0, 0)이면, 수평 방향에서 좌측으로 절반의 픽셀만큼 오프셋된다(deltaMv[0]=-N).
만약 E(1, 0)= E(0, 0)이면, 수평 방향에서 우측으로 절반의 픽셀만큼 오프셋된다(deltaMv[0]=N).
만약 E(0, -1)= E(0, 0)이면, 수직 방향에서 상측으로 절반의 픽셀만큼 오프셋된다(deltaMv[1]=-N).
만약 E(0, 1)= E(0, 0)이면, 수직 방향에서 하측으로 절반의 픽셀만큼 오프셋된다(deltaMv[1]=N).
단계 e33에서, 단계 e31의 정수 픽셀 오프셋 IntegerDeltaMV 및 단계 e32의 서브 픽셀 오프셋 SPMV에 기반하여, 최적의 오프셋 MV를 획득하고, 이 최적의 오프셋 MV를 BestMVoffset로 표기한다. BestMVoffset=IntegerDeltaMV+SPMV이다. BestMVoffset에 기반하여 두 개 방향의 목표 움직임 벡터: Refined_MV0=Org_MV0+BestMVoffset; Refined_MV1=Org_MV1-BestMVoffset를 획득할 수 있다.
단계 e4에서, 각각의 서브 블록의 목표 움직임 벡터에 기반하여, 8-탭 보간을 수행하여 두 개 방향의 3개 컴포넌트의 예측 값을 획득하고, 최종의 예측 값(예컨대, 3개 컴포넌트의 예측 값)을 가중하여 획득한다. 예를 들어, 각각의 서브 블록의 목표 움직임 벡터 Refined_MV0 및 Refined_MV1에 기반하여, 단계 e2에서 준비한 Pred_Inter0/1에서, 보간을 통해 대응하는 예측 블록(움직임 벡터는 서브 픽셀일 수 있고, 보간해야만 대응하는 픽셀 블록을 획득할 수 있음)을 획득한다.
단계 e5에서, 목표 움직임 벡터는 현재 블록의 움직임 보상(즉 각각의 서브 블록의 예측 값 및 현재 블록의 예측 값을 획득) 및 후속 프레임의 시간 영역 참조에 사용되고, 현재 프레임의 루프 필터링 사용 및 공간 영역 참조에 사용되지 않는다.
실시예 30: 실시예 29과 구별되는 점은, 참조 픽셀의 준비 과정이 각각의 dx*dy의 서브 블록으로 이동되어 수행되는 것이다. 참조 픽셀을 준비할 경우, (dx+(filtersize-1))*(dy+(filtersize-1))의 픽셀 블록만 준비하고, 만약 검색하여 획득된 최적의 움직임 벡터가 원시 움직임 벡터가 아니면, 참조 픽셀의 확장을 수행하고, 그렇지 않으면 확장을 수행하지 않는다. 현재 블록의 각각의 dx*dy의 서브 블록에 대해, 목표 움직임 벡터를 각각 획득하고, 목표 움직임 벡터에 기반하여 움직임 보상을 수행하며, 최종의 예측 값을 가중하여 획득하고, 아래 과정은 현재 블록의 각각의 dx*dy의 서브 블록에 대한 것이다.
단계 f1에서, 만약 현재 블록에 대해 움직임 벡터 조정 모드가 시작되면, 하기와 같은 과정을 수행한다.
단계 f2에서, 단계 f3을 위한 정수 픽셀 블록을 준비한다. 예를 들어, 휘도 컴포넌트에만 대해 하기 단계를 수행한다: 원시 움직임 벡터(list0의 원시 움직임 벡터는 Org_MV0으로 표기되고, list1의 원시 움직임 벡터는 Org_MV1로 표기됨)에 기반하여, 대응하는 참조 프레임의 대응 위치에서 면적이 (dx+(filtersize-1))*(dy+(filtersize-1))인 정수 픽셀 블록을 두 개 획득한다.
예시적으로, filtersize는 필터 탭 수일 수 있고, 기본 값이 8이다.
단계 f3에서, 현재 블록의 각각의 dx*dy 서브 블록에 대해, 목표 움직임 벡터(두 개 방향의 목표 움직임 벡터는 각각 Refined_MV0 및 Refined_MV1로 표기됨)를 각각 획득한다.
예시적으로, 단계 f3의 구현 과정은 단계 e3을 참조할 수 있고, 여기에서 더 이상 상세하게 설명하지 않는다.
예를 들어, 원시 움직임 벡터에 기반하여 첫 번째 움직임 벡터 보상을 수행한다. 휘도 컴포넌트에만 대해, bilinear 보간에 기반하여 사이즈가 (dx2*IterNum)*(dy+2*IterNum)인 초기 예측 값을 획득하고, IterNum의 기본 값은 2이며, IterNum는 검색 범위 SR일 수 있고, IterNum는 목표 움직임 벡터와 원시 움직임 벡터의 최대 수평/연직 컴포넌트 보간일 수 있다. 상기 획득된 원시 움직임 벡터의 초기 예측 값은 m_cYuvPredTempL0/1에 저장된다.
25개 포인트의 비용 값 계산을 수행하여, 최적의 정수 픽셀 MV 포인트의 정수 픽셀 오프셋을 획득한다. 만약 첫 번째 포인트(MV오프셋(0, 0))이면, 초기 cost(cost는 두 개 방향의 예측 값의 수직 2배 다운 샘필링된 SAD임)를 획득하고, 만약 상기 cost가 dx*dy보다 작으면, 후속되는 검색 과정(notZeroCost는 false로 설정됨)을 직접 건너뛴다. 상기 초기 포인트를 중심으로, 24개 포인트의 cost 계산 및 비교를 수행하고, cost가 가장 작은 포인트를 보류하여, 다음 단계의 새로운 중심 포인트로 간주한다. 최적의 정수 픽셀 MV 포인트를 중심으로, 최적의 1/16 픽셀의 서브 픽셀 오프셋을 획득한다. 정수 픽셀 오프셋 및 서브 픽셀 오프셋에 기반하여, 최적의 오프셋 MV를 획득하고, 최적의 오프셋 MV를 BestMVoffset로 표기한다. BestMVoffset=IntegerDeltaMV+SPMV이다. BestMVoffset에 기반하여 두 개 방향의 목표 움직임 벡터: Refined_MV0=Org_MV0+BestMVoffset; Refined_MV1=Org_MV1-BestMVoffset를 획득할 수 있다.
단계 f4에서, 만약 최적의 오프셋 MV가 (0, 0)이면, 이하 단계(즉 원시 움직임 벡터 사용 시 별도의 확장을 수행하지 않음)를 수행하지 않는다. 만약 최적의 오프셋 MV가 (0, 0)이 아니면, 정수 픽셀(상기 단계에서 참조 픽셀 확장을 수행하지 않았기 때문에, 오프셋된 후 필요한 참조 픽셀은 상기 단계에서 획득된 참조 픽셀의 범위를 초과함)을 다시 획득하며, 하기와 같은 단계를 수행한다:
list0의 참조 프레임 및 list1의 참조 프레임에 대해, U/V컴포넌트에 대해 각각 하기와 같은 단계를 수행한다(단계 f2에서 휘도 컴포넌트를 획득하였기 때문임): 참조 프레임에서 (dxc+(filtersizeC-1))*(dyc+(filtersizeC-1))의 정수 픽셀 값을 획득하고, dxc 및 dyc은 샘플링 레이트(sampling rate)와 관련이 있으며, YUV가 420 샘플링 레이트일 때, dxc=dx/2이고, dyc=dy/2이며, 물론 이는 단지 예시일 뿐, 이 dxc 및 dyc에 대해 제한하지 않는다. filtersizeC는 4일 수 있고, 물론 이는 단지 예시일 뿐, 이 filtersizeC에 대해 제한하지 않는다. 또 예를 들어, 참조 프레임에서 dx*dy의 정수 픽셀 값을 직접 획득할 수 있고, 이에 대해 제한하지 않는다.
list0의 참조 프레임 및 list1의 참조 프레임에 대해, 3개 컴포넌트에 대해 각각 채우기를 수행한다. 예를 들어, 인접 값 복사 방법을 통해, 상기 단계에서 획득된 정수 픽셀 값(예컨대 (dxc+(filtersizeC-1))*(dyc+(filtersizeC-1))의 정수 픽셀 값)을 토대로, 상, 하, 좌, 우의 채우기(예컨대, 너비 휘도 컴포넌트는 2로, 420의 색도 컴포넌트는 1로 채움)를 수행한다. 예시적으로, 여기에서는 현재 블록 주변(현재 CU 블록 내)의 사용 가능한 정수 픽셀 값을 사용하지 않았다.
단계 f5에서, 각각의 서브 블록의 목표 움직임 벡터 및 두 개의 참조 픽셀 블록(단계 f4에서 획득)에 기반하여, 8-탭 보간을 수행하여 두 개 방향의 3개 컴포넌트의 예측 값을 획득하고, 최종의 예측 값(예컨대, 3개 컴포넌트의 예측 값)을 가중하여 획득한다.
실시예 31: 상기 실시예는 단독으로 구현될 수 있고, 임의로 조합되어 구현될 수도 있으며, 이에 대해 제한하지 않는다.
예를 들어, 실시예 4는 실시예 2와 조합되어 구현될 수 있고; 실시예 4는 실시예 3과 조합되어 구현될 수 있다.
실시예 5는 실시예 2와 조합되어 구현될 수 있고; 실시예 5는 실시예 2, 실시예 4와 조합되어 구현될 수 있으며; 실시예 5는 실시예 3과 조합되어 구현될 수 있고; 실시예 5는 실시예 3, 실시예 4와 조합되어 구현될 수 있다.
실시예 6은 단독으로 구현될 수 있고, 실시예 7은 단독으로 구현될 수 있으며, 실시예 8은 실시예 7과 조합되어 구현될 수 있고; 실시예 9는 실시예 7과 조합되어 구현될 수 있으며; 실시예 10은 실시예 7과 조합되어 구현될 수 있고; 실시예 11은 실시예 7과 조합되어 구현될 수 있으며; 실시예 12는 실시예 7과 조합되어 구현될 수 있고; 실시예 13은 실시예 7과 조합되어 구현될 수 있으며; 실시예 14는 실시예 7과 조합되어 구현될 수 있고; 실시예 15는 실시예 7과 조합되어 구현될 수 있다.
실시예 16은 단독으로 구현될 수 있고, 실시예 17은 단독으로 구현될 수 있으며, 실시예 18은 실시예 17과 조합되어 구현될 수 있고; 실시예 19는 실시예 17과 조합되어 구현될 수 있으며; 실시예 20은 실시예 17과 조합되어 구현될 수 있다.
실시예 21은 실시예 6과 조합되어 구현될 수 있고, 실시예 21은 실시예 16과 조합되어 구현될 수 있으며, 실시예 21은 실시예 7과 조합되어 구현될 수 있고, 실시예 21은 실시예 17과 조합되어 구현될 수 있으며, 실시예 22는 실시예 21과 조합되어 구현될 수 있고, 실시예 23은 실시예 21과 조합되어 구현될 수 있으며, 실시예 24는 실시예 21과 조합되어 구현될 수 있다.
실시예 25는 실시예 2와 조합되어 구현될 수 있고; 실시예 25는 실시예 2, 실시예 4와 조합되어 구현될 수 있으며; 실시예 25는 실시예 3과 조합되어 구현될 수 있고; 실시예 25는 실시예 3, 실시예 4와 조합되어 구현될 수 있다.
실시예 26는 실시예 25와 조합되어 구현될 수 있고; 실시예 27은 실시예 25와 조합되어 구현될 수 있다.
실시예 28은 실시예 2와 조합되어 구현될 수 있고; 실시예 28은 실시예 2, 실시예 4와 조합되어 구현될 수 있으며; 실시예 28은 실시예 3과 조합되어 구현될 수 있고; 실시예 28은 실시예 3, 실시예 4와 조합되어 구현될 수 있다.
실시예 29는 단독으로 구현될 수 있고, 실시예 29는 실시예 4와 조합되어 구현될 수 있다. 실시예 30은 단독으로 구현될 수 있고, 실시예 30은 실시예 4와 조합되어 구현될 수 있다. 물론, 이들은 본 발명의 몇 가지 예시일 뿐, 이에 대해 제한하지 않으며, 본 발명에 관한 모든 실시예들은 모두 단독으로 구현되거나 조합되어 구현될 수 있으며, 이에 대해 더 이상 설명하지 않는다.
실시예 32:
상기 방법과 동일한 발명 구상에 기반하여, 본 발명의 실시예는 인코딩단 또는 디코딩단에 응용되는 인코딩 및 디코딩 장치를 더 제공하고, 도 9a에 도시된 바와 같이, 이는 상기 장치의 구조도이며, 상기 장치는,
만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하기 위한 결정 모듈(911):
제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및
만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 현재 블록에 대해 움직임 보상을 수행하기 위한 움직임 보상 모듈(912)을 포함한다.
상기 움직임 보상 모듈(912)은 구체적으로, 상기 현재 블록에 포함된 적어도 하나의 서브 블록 중의 각각의 서브 블록에 대해:
상기 서브 블록의 제1 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고, 상기 서브 블록의 제2 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제2 참조 블록을 결정하며; 상기 제1 참조 블록의 제1 픽셀 값 및 상기 제2 참조 블록의 제2 픽셀 값에 따라, 상기 제1 원시 움직임 벡터 및 상기 제2 원시 움직임 벡터를 조정하여, 상기 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터 및 상기 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득하고; 상기 제1 목표 움직임 벡터 및 상기 제2 목표 움직임 벡터에 따라 상기 서브 블록의 예측 값을 결정하며;
각각의 서브 블록의 예측 값에 따라 상기 현재 블록의 예측 값을 결정한다.
상기 결정 모듈(911)은 또한, 제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 중 어느 하나의 조건이 만족되지 않으면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작하지 않음을 결정한다.
상기 제어 정보가 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것은, 시퀀스 레벨 제어 정보가 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것; 및/또는, 프레임 레벨 제어 정보가 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것을 포함한다.
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것은, 너비가 제1 임계값보다 크거나 같고, 높이가 제2 임계값보다 크거나 같으며, 면적이 제3 임계값보다 크거나 같은 것; 또는, 너비가 제1 임계값보다 크거나 같고, 높이가 제2 임계값보다 크거나 같으며, 면적이 제4 임계값보다 큰 것을 포함하고; 여기서 상기 제3 임계값은 상기 제4 임계값보다 크다.
상기 제1 임계값은 8이고, 상기 제2 임계값은 8이며, 상기 제3 임계값은 128이고, 상기 제4 임계값은 64이다.
상기 움직임 보상 모듈(912)은, 상기 서브 블록의 제1 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고, 상기 서브 블록의 제2 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제2 참조 블록을 결정할 경우, 구체적으로,
상기 서브 블록의 제1 원시 움직임 벡터에 기반하여, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고; 상기 제1 참조 블록 중 각각의 픽셀 포인트의 픽셀 값은 제1 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 보간하여 획득되거나, 또는, 제1 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 복사하여 획득되며;
상기 서브 블록의 제2 원시 움직임 벡터에 기반하여, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제2 참조 블록을 결정하고; 상기 제2 참조 블록 중 각각의 픽셀 포인트의 픽셀 값은 제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 보간하여 획득되거나, 또는, 제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 복사하여 획득된다.
상기 움직임 보상 모듈(912)은, 상기 제1 참조 블록의 제1 픽셀 값 및 상기 제2 참조 블록의 제2 픽셀 값에 따라, 상기 제1 원시 움직임 벡터 및 상기 제2 원시 움직임 벡터를 조정하여, 상기 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터 및 상기 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득할 경우, 구체적으로,
초기 움직임 벡터를 중심으로, 상기 초기 움직임 벡터 주변의 상기 초기 움직임 벡터가 포함되는 움직임 벡터에서 일부 또는 전부의 움직임 벡터를 선택하고, 선택된 움직임 벡터를 후보 움직임 벡터로 결정하며; 여기서, 상기 초기 움직임 벡터는 상기 제1 원시 움직임 벡터 또는 상기 제2 원시 움직임 벡터이고;
상기 제1 참조 블록의 제1 픽셀 값 및 상기 제2 참조 블록의 제2 픽셀 값에 따라, 상기 초기 움직임 벡터 및 각 후보 움직임 벡터에서 하나의 움직임 벡터를 선택하여 최적의 움직임 벡터로 간주하며;
상기 최적의 움직임 벡터에 따라 상기 제1 원시 움직임 벡터를 조정하여, 상기 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터를 획득하고, 상기 최적의 움직임 벡터에 따라 상기 제2 원시 움직임 벡터를 조정하여, 상기 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득한다.
상기 움직임 보상 모듈(912)은, 상기 최적의 움직임 벡터에 따라 상기 제1 원시 움직임 벡터를 조정하여, 상기 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터를 획득하고, 상기 최적의 움직임 벡터에 따라 상기 제2 원시 움직임 벡터를 조정하여, 상기 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득할 경우, 구체적으로,
상기 최적의 움직임 벡터에 따라 상기 서브 블록의 제1 정수 픽셀 움직임 벡터 조정 값, 제2 정수 픽셀 움직임 벡터 조정 값, 제1 서브 픽셀 움직임 벡터 조정 값 및 제2 서브 픽셀 움직임 벡터 조정 값을 결정하고;
상기 제1 정수 픽셀 움직임 벡터 조정 값 및 상기 제1 서브 픽셀 움직임 벡터 조정 값에 따라, 상기 제1 원시 움직임 벡터를 조정하여, 상기 서브 블록의 제1 목표 움직임 벡터를 획득하며;
상기 제2 정수 픽셀 움직임 벡터 조정 값 및 상기 제2 서브 픽셀 움직임 벡터 조정 값에 따라, 상기 제2 원시 움직임 벡터를 조정하여, 상기 서브 블록의 제2 목표 움직임 벡터를 획득한다.
만약 상기 최적의 움직임 벡터와 상기 초기 움직임 벡터가 동일하면, 상기 움직임 보상 모듈(912)은, 상기 제1 목표 움직임 벡터 및 상기 제2 목표 움직임 벡터에 따라 상기 서브 블록의 예측 값을 결정할 경우, 구체적으로,
상기 서브 블록의 제1 목표 움직임 벡터에 기반하여, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제3 참조 블록을 결정하고;
상기 서브 블록의 제2 목표 움직임 벡터에 기반하여, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제4 참조 블록을 결정하며;
제3 참조 블록의 픽셀 값 및 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득한다.
만약 상기 최적의 움직임 벡터와 상기 초기 움직임 벡터가 상이하면, 상기 움직임 보상 모듈(912)은, 상기 제1 목표 움직임 벡터 및 상기 제2 목표 움직임 벡터에 따라 상기 서브 블록의 예측 값을 결정할 경우, 구체적으로,
제1 참조 프레임에서 제5 참조 블록을 결정하고, 상기 제5 참조 블록을 확장하여 제6 참조 블록을 획득하며; 상기 서브 블록의 제1 목표 움직임 벡터에 기반하여, 상기 제6 참조 블록에서 상기 서브 블록에 대응하는 제3 참조 블록을 선택하고;
제2 참조 프레임에서 제7 참조 블록을 결정하고, 상기 제7 참조 블록을 확장하여 제8 참조 블록을 획득하며; 상기 서브 블록의 제2 목표 움직임 벡터에 기반하여, 상기 제8 참조 블록에서 상기 서브 블록에 대응하는 제4 참조 블록을 선택하고;
제3 참조 블록의 픽셀 값 및 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득한다.
상기 움직임 보상 모듈(912)은, 제3 참조 블록의 픽셀 값 및 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득할 경우, 구체적으로, 상기 제3 참조 블록의 픽셀 값, 상기 제3 참조 블록의 픽셀 값에 대응하는 제1 가중치, 상기 제4 참조 블록의 픽셀 값, 상기 제4 참조 블록의 픽셀 값에 대응하는 제2 가중치에 대해 가중 처리를 수행하여, 상기 서브 블록의 예측 값을 획득하고; 여기서, 상기 제1 가중치와 상기 제2 가중치는 동일하다.
본 발명의 실시예에 의해 제공되는 디코딩단 기기의 하드웨어 관점에서, 그 하드웨어 아키텍처 모식도는 구체적으로 도 9b에 도시된 것을 참조할 수 있다. 프로세서(921) 및 기계 판독 가능 저장 매체(922)를 포함하고, 상기 기계 판독 가능 저장 매체(922)에는 상기 프로세서(921)에 의해 실행 가능한 기계 실행 가능 명령어가 저장되어 있으며; 상기 프로세서(921)는 기계 실행 가능 명령어를 실행하여, 본 발명의 상기 예시에서 시작된 방법을 구현한다. 예를 들어, 프로세서는 기계 실행 가능 명령어를 실행하여, 하기와 같은 단계:
만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하는 단계:
제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및
만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 상기 현재 블록에 대해 움직임 보상을 수행하는 단계를 구현한다.
본 발명의 실시예에 의해 제공되는 인코딩단 기기의 하드웨어 관점에서, 그 하드웨어 아키텍처 모식도는 구체적으로 도 9c에 도시된 것을 참조할 수 있다. 프로세서(931) 및 기계 판독 가능 저장 매체(932)를 포함하고, 상기 기계 판독 가능 저장 매체(932)에는 상기 프로세서(931)에 의해 실행 가능한 기계 실행 가능 명령어가 저장되어 있으며; 상기 프로세서(931)는 기계 실행 가능 명령어를 실행하여, 본 발명의 상기 예시에서 개시된 방법을 구현한다. 예를 들어, 프로세서는 기계 실행 가능 명령어를 실행하여, 하기와 같은 단계:
만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하는 단계:
제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및
만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 상기 현재 블록에 대해 움직임 보상을 수행하는 단계를 구현한다.
상기 방법과 동일한 발명 구상에 기반하여, 본 발명의 실시예는 기계 판독 가능 저장 매체를 더 제공하고, 상기 기계 판독 가능 저장 매체에는 다수의 컴퓨터 명령어가 저장되어 있으며, 상기 컴퓨터 명령어가 프로세서에 의해 실행될 경우, 본 발명의 상기 예시에서 개시된 인코딩 및 디코딩 방법이 구현될 수 있다. 여기서, 상기 기계 판독 가능 저장 매체는 실행 가능 명령어, 데이터 등과 같은 정보를 포함하거나 저장할 수 있는 임의의 전기적, 자기적, 광학적 또는 다른 물리 저장 장치일 수 있다. 예를 들어, 기계 판독 가능 저장 매체는 RAM(Radom Access Memory, 랜덤 액세스 메모리), 휘발성 메모리, 비휘발성 메모리, 플래시 메모리, 메모리 드라이버(예컨대, 하드디스크 드라이버), 솔리드 스테이트 하드디스크, 임의의 유형의 메모리 디스크(예컨대, CD, dvd 등), 또는 유사한 저장 매체, 또는 이들의 조합일 수 있다.
상기 방법과 동일한 발명 구상에 기반하여, 본 발명의 실시예는 컴퓨터 프로그램 제품을 더 제공하고, 상기 컴퓨터 프로그램 제품은 컴퓨터 명령어를 포함하며, 상기 컴퓨터 명령어가 프로세서에 의해 실행될 경우, 본 발명의 상기 예시에서 개시된 인코딩 및 디코딩 방법이 구현될 수 있다.
상기 방법과 동일한 발명 구상에 기반하여, 본 발명의 실시예는 인코딩 및 디코딩 시스템을 더 제공하고, 상기 인코딩 및 디코딩 시스템은 프로세서 및 기계 판독 가능 저장 매체를 포함하며, 상기 기계 판독 가능 저장 매체에는 상기 프로세서에 의해 실행 가능한 기계 실행 가능 명령어가 저장되어 있다. 상기 기계 실행 가능 명령어가 프로세서에 의해 실행될 경우, 본 발명의 상기 예시에서 시작된 인코딩 및 디코딩 방법이 구현될 수 있다.
상기 실시예에서 설명된 시스템, 장치, 모듈 또는 유닛은 구체적으로 컴퓨터 칩 또는 엔티티에 의해 구현될 수 있거나, 또는 특정 기능이 있는 제품에 의해 구현될 수 있다. 전형적인 구현 기기는 컴퓨터이고, 컴퓨터의 구체적인 형태는 개인용 컴퓨터, 랩톱 컴퓨터, 셀룰러폰, 카메라폰, 스마트폰, 개인 휴대 정보 단말기, 멀티미디어 플레이어, 내비게이션 기기, 전자 메일 송수신 기기, 게임 콘솔, 태블릿 컴퓨터, 웨어러블 기기 또는 이러한 기기 중 어느 몇 가지 기기의 조합일 수 있다. 설명의 편리를 위해, 상기 장치를 설명할 때 기능을 다양한 유닛으로 나누어 각각 설명한다. 물론, 본 발명을 구현할 때 각 유닛의 기능을 동일한 하나 또는 복수의 소프트웨어 및/또는 하드웨어에서 구현할 수 있다.
본 기술분야의 통상의 기술자라면 본 발명의 실시예가 방법, 시스템, 또는 컴퓨터 프로그램 제품으로서 제공될 수 있음을 이해해야 한다. 따라서, 본 발명은 하드웨어 실시예, 소프트웨어 실시예, 또는 소프트웨어와 하드웨어를 결합한 실시예 형태를 사용할 수 있다. 또한, 본 발명의 실시예는 컴퓨터 사용 가능 프로그램 코드가 포함된 하나 또는 복수의 컴퓨터 사용 가능 저장 매체(자기 디스크 메모리, CD-ROM 및 광 메모리 등을 포함하지만 이에 제한되지 않음)에서 구현되는 컴퓨터 프로그램 제품의 형태를 사용할 수 있다. 본 발명은 본 발명의 실시예에 따른 방법, 기기(시스템), 및 컴퓨터 프로그램 제품의 흐름도 및/또는 블록도를 참조하여 설명된다. 컴퓨터 프로그램 명령어에 의해 흐름도 및/또는 블록도의 각 흐름 및/또는 블록, 및 흐름도 및/또는 블록도의 흐름 및/또는 블록의 조합이 구현될 수 있음을 이해해야 한다. 이러한 컴퓨터 프로그램 명령어는 범용 컴퓨터, 특수 목적 컴퓨터, 임베디드 프로세서 또는 다른 프로그래밍 가능 데이터 처리 기기의 프로세서에 제공되어 하나의 기계를 생성할 수 있음으로써, 컴퓨터 또는 다른 프로그래머블 데이터 처리 기기의 프로세서에 의해 실행되는 명령어를 통해, 흐름도의 하나 또는 복수의 흐름 및/또는 블록도의 하나 또는 다수의 블록에 지정된 기능을 구현하는 장치가 생성되도록 한다.
또한, 이러한 컴퓨터 프로그램 명령어는 컴퓨터 또는 다른 프로그래머블 데이터 처리 기기가 특정된 방식으로 작업하도록 하는 컴퓨터 판독 가능 메모리에 저장될 수도 있음으로써, 상기 컴퓨터 판독 가능 메모리에 저장된 명령어가 흐름도의 하나의 흐름 또는 복수의 흐름 및/또는 블록도의 하나의 블록 또는 복수의 블록에 지정된 기능을 구현하는 명령어 장치를 포함하는 제조품을 생성하도록 한다. 이러한 컴퓨터 프로그램 명령어는 또한 컴퓨터 또는 다른 프로그래머블 데이터 처리 기기에 로딩되어, 컴퓨터 또는 다른 프로그래밍 가능 기기에서 일련의 조작의 단계가 수행되도록 하여, 컴퓨터에 의해 구현되는 프로세스가 생성되도록 함으로써, 컴퓨터 또는 다른 프로그래머블 기기에서 실행되는 명령어가 흐름도의 하나의 흐름 또는 다수의 흐름 및/또는 블록도의 하나의 블록 또는 다수의 블록에 지정된 기능을 구현하는 단계를 제공한다.
전술한 내용은 단지 본 발명의 바람직한 실시예일 뿐, 본 발명을 제한하기 위함이 아니다. 본 기술분야의 통상의 기술자는 본 발명에 대해 다양한 변경 및 변형을 진행할 수 있다. 본 발명의 사상 및 원칙 내에서 이루어지는 임의의 수정, 등가적 대체, 개선 등은 모두 본 발명의 특허청구범위 내에 포함되어야 한다.

Claims (15)

  1. 인코딩 및 디코딩 방법으로서,
    만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하는 단계:
    제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
    현재 블록의 예측 모드는 일반 머지(merge) 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
    현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임 중 하나의 참조 프레임은 현재 프레임의 앞에 위치하며, 상기 두 개의 참조 프레임 중 다른 하나의 참조 프레임은 상기 현재 프레임의 뒤에 위치하고, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
    현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
    현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
    현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
    현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및
    만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 상기 현재 블록에 대해 움직임 보상을 수행하는 단계를 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  2. 제1항에 있어서,
    상기 현재 블록에 대해 움직임 보상을 수행하는 단계는,
    상기 현재 블록에 포함된 적어도 하나의 서브 블록 중의 각각의 서브 블록에 대해:
    상기 서브 블록의 제1 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고, 상기 서브 블록의 제2 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제2 참조 블록을 결정하며; 상기 제1 참조 블록의 제1 픽셀 값 및 상기 제2 참조 블록의 제2 픽셀 값에 따라, 상기 제1 원시 움직임 벡터 및 상기 제2 원시 움직임 벡터를 조정하여, 상기 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터 및 상기 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득하고; 상기 제1 목표 움직임 벡터 및 상기 제2 목표 움직임 벡터에 따라 상기 서브 블록의 예측 값을 결정하는 단계;
    각각의 서브 블록의 예측 값에 따라 상기 현재 블록의 예측 값을 결정하는 단계를 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  3. 제1항에 있어서,
    제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
    현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
    현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임의 디스플레이 순서는 각각 현재 프레임의 앞과 뒤에 위치하며, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
    현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
    현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
    현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것; 및
    현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 중 어느 하나의 조건이 만족되지 않으면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작하지 않음을 결정하는 단계를 더 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  4. 제1항 또는 제3항에 있어서,
    상기 제어 정보가 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것은, 프레임 레벨 제어 정보가 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것을 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  5. 제1항 또는 제3항에 있어서,
    현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것은,
    너비가 제1 임계값보다 크거나 같고, 높이가 제2 임계값보다 크거나 같으며, 면적이 제3 임계값보다 크거나 같은 것을 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  6. 제5항에 있어서,
    상기 제1 임계값은 8이고, 상기 제2 임계값은 8이며, 상기 제3 임계값은 128인
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  7. 제2항에 있어서,
    상기 서브 블록의 제1 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제1 참조 블록을 결정하고, 상기 서브 블록의 제2 원시 움직임 벡터에 따라 상기 서브 블록에 대응하는 제2 참조 블록을 결정하는 단계는,
    상기 서브 블록의 제1 원시 움직임 벡터에 기반하여, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제1 참조 블록을 결정하는 단계; 상기 제1 참조 블록 중 각각의 픽셀 포인트의 픽셀 값은 제1 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 보간하여 획득되거나, 또는, 제1 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 복사하여 획득하는 단계;
    상기 서브 블록의 제2 원시 움직임 벡터에 기반하여, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제2 참조 블록을 결정하는 단계; 상기 제2 참조 블록 중 각각의 픽셀 포인트의 픽셀 값은 제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 보간하여 획득되거나, 또는, 제2 참조 블록 중의 인접 픽셀 포인트의 픽셀 값을 복사하여 획득되는 단계를 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  8. 제2항 또는 제7항에 있어서,
    상기 제1 참조 블록의 제1 픽셀 값 및 상기 제2 참조 블록의 제2 픽셀 값에 따라, 상기 제1 원시 움직임 벡터 및 상기 제2 원시 움직임 벡터를 조정하여, 상기 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터 및 상기 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득하는 단계는,
    초기 움직임 벡터를 중심으로, 상기 초기 움직임 벡터 주변의 상기 초기 움직임 벡터가 포함되는 움직임 벡터에서 일부 또는 전부의 움직임 벡터를 선택하고, 선택된 움직임 벡터를 후보 움직임 벡터로 결정하는 단계 - 상기 초기 움직임 벡터는 상기 제1 원시 움직임 벡터 또는 상기 제2 원시 움직임 벡터임 -;
    상기 제1 참조 블록의 제1 픽셀 값 및 상기 제2 참조 블록의 제2 픽셀 값에 따라, 상기 초기 움직임 벡터 및 각 후보 움직임 벡터에서 하나의 움직임 벡터를 선택하여 최적의 움직임 벡터로 간주하는 단계; 및
    상기 최적의 움직임 벡터에 따라 상기 제1 원시 움직임 벡터를 조정하여, 상기 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터를 획득하고, 상기 최적의 움직임 벡터에 따라 상기 제2 원시 움직임 벡터를 조정하여, 상기 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득하는 단계를 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  9. 제8항에 있어서,
    상기 최적의 움직임 벡터에 따라 상기 제1 원시 움직임 벡터를 조정하여, 상기 제1 원시 움직임 벡터에 대응하는 제1 목표 움직임 벡터를 획득하고, 상기 최적의 움직임 벡터에 따라 상기 제2 원시 움직임 벡터를 조정하여, 상기 제2 원시 움직임 벡터에 대응하는 제2 목표 움직임 벡터를 획득하는 단계는,
    상기 최적의 움직임 벡터에 따라 상기 서브 블록의 제1 정수 픽셀(integer pixel) 움직임 벡터 조정 값, 제2 정수 픽셀 움직임 벡터 조정 값, 제1 서브 픽셀 움직임 벡터 조정 값 및 제2 서브 픽셀 움직임 벡터 조정 값을 결정하는 단계;
    상기 제1 정수 픽셀 움직임 벡터 조정 값 및 상기 제1 서브 픽셀 움직임 벡터 조정 값에 따라, 상기 제1 원시 움직임 벡터를 조정하여, 상기 서브 블록의 제1 목표 움직임 벡터를 획득하는 단계; 및
    상기 제2 정수 픽셀 움직임 벡터 조정 값 및 상기 제2 서브 픽셀 움직임 벡터 조정 값에 따라, 상기 제2 원시 움직임 벡터를 조정하여, 상기 서브 블록의 제2 목표 움직임 벡터를 획득하는 단계를 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  10. 제8항에 있어서,
    만약 상기 최적의 움직임 벡터와 상기 초기 움직임 벡터가 동일하면, 상기 제1 목표 움직임 벡터 및 상기 제2 목표 움직임 벡터에 따라 상기 서브 블록의 예측 값을 결정하는 단계는,
    상기 서브 블록의 제1 목표 움직임 벡터에 기반하여, 제1 참조 프레임에서 상기 서브 블록에 대응하는 제3 참조 블록을 결정하는 단계;
    상기 서브 블록의 제2 목표 움직임 벡터에 기반하여, 제2 참조 프레임에서 상기 서브 블록에 대응하는 제4 참조 블록을 결정하는 단계; 및
    상기 제3 참조 블록의 픽셀 값 및 상기 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득하는 단계를 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  11. 제8항에 있어서,
    만약 상기 최적의 움직임 벡터와 상기 초기 움직임 벡터가 상이하면, 상기 제1 목표 움직임 벡터 및 상기 제2 목표 움직임 벡터에 따라 상기 서브 블록의 예측 값을 결정하는 단계는,
    제1 참조 프레임에서 제5 참조 블록을 결정하고, 상기 제5 참조 블록을 확장하여 제6 참조 블록을 획득하며; 상기 서브 블록의 제1 목표 움직임 벡터에 기반하여, 상기 제6 참조 블록에서 상기 서브 블록에 대응하는 제3 참조 블록을 선택하는 단계;
    제2 참조 프레임에서 제7 참조 블록을 결정하고, 상기 제7 참조 블록을 확장하여 제8 참조 블록을 획득하며; 상기 서브 블록의 제2 목표 움직임 벡터에 기반하여, 상기 제8 참조 블록에서 상기 서브 블록에 대응하는 제4 참조 블록을 선택하는 단계; 및
    제3 참조 블록의 픽셀 값 및 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득하는 단계를 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  12. 제10항 또는 제11항에 있어서,
    상기 제3 참조 블록의 픽셀 값 및 제4 참조 블록의 픽셀 값을 가중하여, 상기 서브 블록의 예측 값을 획득하는 단계는,
    상기 제3 참조 블록의 픽셀 값, 상기 제3 참조 블록의 픽셀 값에 대응하는 제1 가중치, 상기 제4 참조 블록의 픽셀 값, 상기 제4 참조 블록의 픽셀 값에 대응하는 제2 가중치에 대해 가중 처리를 수행하여, 상기 서브 블록의 예측 값을 획득하는 단계를 포함하되, 상기 제1 가중치와 상기 제2 가중치는 동일한
    것을 특징으로 하는 인코딩 및 디코딩 방법.
  13. 인코딩 및 디코딩 장치로서,
    만약 하기 조건들이 모두 만족되면, 현재 블록에 대해 움직임 벡터 조정 모드를 시작함을 결정하기 위한 결정 모듈:
    제어 정보는 현재 블록이 움직임 벡터 조정 모드를 사용하도록 허용하는 것인 것;
    현재 블록의 예측 모드는 일반 머지 모드이거나; 또는, 현재 블록의 예측 모드는 머지 모드 또는 스킵 모드이고, 현재 블록의 예측 모드는 일반 머지 모드를 제외한 다른 모드가 아닌 것;
    현재 블록의 예측 값은 두 개의 참조 프레임에서 비롯된 참조 블록의 가중을 통해 획득되고, 상기 두 개의 참조 프레임 중 하나의 참조 프레임은 현재 프레임의 앞에 위치하며, 상기 두 개의 참조 프레임 중 다른 하나의 참조 프레임은 상기 현재 프레임의 뒤에 위치하고, 상기 두 개의 참조 프레임과 현재 프레임 사이의 거리가 동일한 것;
    현재 블록의 두 개의 참조 프레임의 가중된 가중치가 동일한 것;
    현재 블록의 두 개의 참조 프레임이 모두 단기 참조 프레임인 것;
    현재 블록의 너비, 높이 및 면적이 모두 한정된 범위 내인 것;
    현재 블록의 두 개의 참조 프레임의 사이즈와 현재 프레임의 사이즈가 모두 동일한 것; 및
    만약 현재 블록에 대해 움직임 벡터 조정 모드를 시작함이 결정되면, 현재 블록에 대해 움직임 보상을 수행하기 위한 움직임 보상 모듈을 포함하는
    것을 특징으로 하는 인코딩 및 디코딩 장치.
  14. 인코딩단 기기로서,
    프로세서 및 기계 판독 가능 저장 매체를 포함하고, 상기 기계 판독 가능 저장 매체에는 상기 프로세서에 의해 실행 가능한 기계 실행 가능 명령어가 저장되어 있으며;
    상기 프로세서는 기계 실행 가능 명령어를 실행하여, 제1항 내지 제12항 중 어느 한 항에 따른 인코딩 및 디코딩 방법을 구현하는
    것을 특징으로 하는 인코딩단 기기.
  15. 디코딩단 기기로서,
    프로세서 및 기계 판독 가능 저장 매체를 포함하고, 상기 기계 판독 가능 저장 매체에는 상기 프로세서에 의해 실행 가능한 기계 실행 가능 명령어가 저장되어 있으며;
    상기 프로세서는 기계 실행 가능 명령어를 실행하여, 제1항 내지 제12항 중 어느 한 항에 따른 인코딩 및 디코딩 방법을 구현하는
    것을 특징으로 하는 디코딩단 기기.
KR1020227010788A 2019-11-05 2020-10-28 인코딩 및 디코딩 방법, 장치 및 이의 기기 KR20220050227A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201911072766.X 2019-11-05
CN201911072766.XA CN112770113A (zh) 2019-11-05 2019-11-05 一种编解码方法、装置及其设备
PCT/CN2020/124304 WO2021088695A1 (zh) 2019-11-05 2020-10-28 一种编解码方法、装置及其设备

Publications (1)

Publication Number Publication Date
KR20220050227A true KR20220050227A (ko) 2022-04-22

Family

ID=74036798

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227010788A KR20220050227A (ko) 2019-11-05 2020-10-28 인코딩 및 디코딩 방법, 장치 및 이의 기기

Country Status (5)

Country Link
US (1) US20240073437A1 (ko)
JP (2) JP2022550592A (ko)
KR (1) KR20220050227A (ko)
CN (3) CN112770113A (ko)
WO (1) WO2021088695A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220353500A1 (en) * 2021-04-26 2022-11-03 Tencent America LLC Geometry partition mode and merge mode with motion vector difference signaling
CN113411581B (zh) * 2021-06-28 2022-08-05 展讯通信(上海)有限公司 视频序列的运动补偿方法、系统、存储介质及终端
CN113938690B (zh) * 2021-12-03 2023-10-31 北京达佳互联信息技术有限公司 视频编码方法、装置、电子设备及存储介质

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101039424B (zh) * 2002-07-15 2010-05-26 株式会社日立制作所 动态图像编码方法
TWI254571B (en) * 2004-12-07 2006-05-01 Sunplus Technology Co Ltd Method for fast multiple reference frame motion estimation
CN101299799B (zh) * 2008-06-13 2011-11-09 北京中星微电子有限公司 图像检测、修复方法和图像检测、修复装置
CN102387360B (zh) * 2010-09-02 2016-05-11 乐金电子(中国)研究开发中心有限公司 视频编解码帧间图像预测方法及视频编解码器
US8736767B2 (en) * 2010-09-29 2014-05-27 Sharp Laboratories Of America, Inc. Efficient motion vector field estimation
KR20120118780A (ko) * 2011-04-19 2012-10-29 삼성전자주식회사 다시점 비디오의 움직임 벡터 부호화 방법 및 장치, 그 복호화 방법 및 장치
CN104427345B (zh) * 2013-09-11 2019-01-08 华为技术有限公司 运动矢量的获取方法、获取装置、视频编解码器及其方法
CN105338362B (zh) * 2014-05-26 2018-10-19 富士通株式会社 运动目标检测方法和运动目标检测装置
CN105578197B (zh) * 2015-12-24 2019-04-30 福州瑞芯微电子股份有限公司 一种实现帧间预测主控系统
WO2017147765A1 (en) * 2016-03-01 2017-09-08 Mediatek Inc. Methods for affine motion compensation
US10271062B2 (en) * 2016-03-18 2019-04-23 Google Llc Motion vector prediction through scaling
CN106101716B (zh) * 2016-07-11 2019-05-07 北京大学 一种视频帧率上变换方法
US10291928B2 (en) * 2017-01-10 2019-05-14 Blackberry Limited Methods and devices for inter-prediction using motion vectors for video coding
CN109089119B (zh) * 2017-06-13 2021-08-13 浙江大学 一种运动矢量预测的方法及设备
CN109391814B (zh) * 2017-08-11 2023-06-06 华为技术有限公司 视频图像编码和解码的方法、装置及设备
CN111201795B (zh) * 2017-10-09 2022-07-26 华为技术有限公司 存储访问窗口和用于运动矢量修正的填充
CN109996081B (zh) * 2017-12-31 2023-09-12 华为技术有限公司 图像预测方法、装置以及编解码器
US11212551B2 (en) * 2018-01-09 2021-12-28 Sharp Kabushiki Kaisha Motion vector derivation apparatus, video decoding apparatus, and video coding apparatus
CN110324623B (zh) * 2018-03-30 2021-09-07 华为技术有限公司 一种双向帧间预测方法及装置
CN109495746A (zh) * 2018-11-07 2019-03-19 建湖云飞数据科技有限公司 一种基于运动矢量调整的视频编码方法
CN112866699B (zh) * 2019-03-11 2022-11-01 杭州海康威视数字技术股份有限公司 一种编解码方法、装置及其设备
CN117440170A (zh) * 2019-06-21 2024-01-23 华为技术有限公司 编码器、解码器及对应方法
CN110213590B (zh) * 2019-06-25 2022-07-12 浙江大华技术股份有限公司 时域运动矢量获取、帧间预测、视频编码的方法及设备

Also Published As

Publication number Publication date
CN112135126A (zh) 2020-12-25
WO2021088695A1 (zh) 2021-05-14
JP2024081785A (ja) 2024-06-18
CN112135127A (zh) 2020-12-25
CN112135126B (zh) 2021-09-21
CN112770113A (zh) 2021-05-07
CN112135127B (zh) 2021-09-21
JP2022550592A (ja) 2022-12-02
US20240073437A1 (en) 2024-02-29

Similar Documents

Publication Publication Date Title
CA3131447C (en) Encoding and decoding method and device, encoder side apparatus and decoder side apparatus
KR20220050227A (ko) 인코딩 및 디코딩 방법, 장치 및 이의 기기
KR20220050228A (ko) 인코딩 및 디코딩 방법, 장치 및 이의 기기

Legal Events

Date Code Title Description
A201 Request for examination