KR101597278B1 - 차분 움직임 벡터의 해상도를 고려한 움직임 벡터 부호화/복호화 방법 및 장치, 및 그를 위한 영상처리 장치 및 방법 - Google Patents
차분 움직임 벡터의 해상도를 고려한 움직임 벡터 부호화/복호화 방법 및 장치, 및 그를 위한 영상처리 장치 및 방법 Download PDFInfo
- Publication number
- KR101597278B1 KR101597278B1 KR1020140063303A KR20140063303A KR101597278B1 KR 101597278 B1 KR101597278 B1 KR 101597278B1 KR 1020140063303 A KR1020140063303 A KR 1020140063303A KR 20140063303 A KR20140063303 A KR 20140063303A KR 101597278 B1 KR101597278 B1 KR 101597278B1
- Authority
- KR
- South Korea
- Prior art keywords
- motion vector
- resolution
- differential
- region
- vector
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods 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/136—Incoming video signal characteristics or properties
- H04N19/137—Motion inside a coding unit, e.g. average field, frame or block difference
- H04N19/139—Analysis of motion vectors, e.g. their magnitude, direction, variance or reliability
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/59—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial sub-sampling or interpolation, e.g. alteration of picture size or resolution
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/103—Selection of coding mode or of prediction mode
- H04N19/105—Selection 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/172—Methods 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 picture, frame or field
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/174—Methods 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 slice, e.g. a line of blocks or a group of blocks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/176—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/53—Multi-resolution motion estimation; Hierarchical motion estimation
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
본 발명은, 영상의 영역마다 적응적으로 결정되는 움직임 벡터 해상도 또는 차분 움직임 벡터 해상도에 따라 현재 블록의 움직임 벡터를 결정하는 단계; 주변 블록의 움직임 벡터로부터 상기 현재 블록의 예측 움직임 벡터를 결정하는 단계; 상기 현재 블록의 움직임 벡터와 상기 예측 움직임 벡터로부터 차분 움직임 벡터를 결정하고 상기 차분 움직임 벡터를 부호화하는 단계; 및 상기 움직임 벡터 해상도 또는 차분 움직임 벡터 해상도가 디폴트 해상도를 갖는지 여부에 따라 적응적으로 상기 움직임 벡터 해상도 또는 차분 움직임 벡터 해상도에 대한 정보를 부호화하는 단계를 포함하는 움직임 벡터 부호화 방법 및 이에 대응되는 영상 복호화 방법을 제공한다.
본 발명에 의하면, 영상을 소정의 영역 단위로 움직임 벡터 해상도를 적응적으로 변경하여 인터 예측 부호화함으로써, 영상을 효율적으로 부호화할 수 있다.
본 발명에 의하면, 영상을 소정의 영역 단위로 움직임 벡터 해상도를 적응적으로 변경하여 인터 예측 부호화함으로써, 영상을 효율적으로 부호화할 수 있다.
Description
본 발명은 차분 움직임 벡터의 해상도(정밀도)를 고려한 움직임 벡터 부호화/복호화 방법 및 장치, 및 그를 위한 영상처리 장치 및 방법에 관한 것이다. 더욱 상세하게는, 움직임 추정을 통해 결정되는 움직임 벡터를 부호화하는 데 있어서, 임의의 크기 영역 단위로 차분 움직임 벡터의 해상도를 적응적으로 결정하여 차분 움직임 벡터를 부호화함으로써 움직임 벡터의 부호화 효율과 영상의 압축 효율을 향상시키는 방법 및 장치에 관한 것이다. 또한, 이와 같은 움직임벡터 부호화 장치로부터 비트스트림을 수신하며, 움직임 벡터 부호화 장치에 의해 결정된 차분 움직임 벡터의 해상도에 따라 상응적으로 차분 움직임 벡터를 복호화함으로써 영상의 복원 효율을 향상시키는 방법 및 장치에 관한 것이다.
이 부분에 기술된 내용은 단순히 본 발명의 실시예에 대한 배경 정보를 제공할 뿐 종래기술을 구성하는 것은 아니다.
동영상에 대한 데이터의 부호화는 인트라 예측 부호화와 인터 예측 부호화로 성립되어 있다. 이러한 인트라 예측 부호화 또는 인터 예측 부호화는 데이터 간에 존재하는 상관도(Correlation)를 줄일 수 있는 효과적인 방법으로 다양한 데이터의 압축에 널리 사용된다. 특히, 인터 예측 부호화에서 현재 부호화하고자 하는 현재 블록의 움직임을 추정하여 결정되는 현재 블록의 움직임 벡터는 주변 블록의 움직임 벡터와 밀접한 상관 관계가 있기 때문에, 주변 블록의 움직임 벡터로부터 현재 블록의 움직임 벡터에 대한 예측값(PMV: Predicted Motion Vector, 이하 '예측 움직임 벡터'라 칭함)을 계산한 후 현재 블록의 움직임 벡터의 값 자체를 부호화하지 않고 예측값에 대한 차분값(DMV: Differential Motion Vector, 이하 '차분 벡터'라 칭함)만을 부호화함으로써 부호화해야 할 비트량을 상당히 줄일 수 있으며 그에 따라 부호화 효율을 높일 수 있다.
즉, 인터 예측 부호화를 수행하는 경우, 부호화기는 이전에 부호화되고 복호화되어 복원된 참조 프레임에서 현재 블록의 움직임을 추정하여 결정한 예측 움직임 벡터와 현재 움직임 벡터와의 차분값인 차분 벡터만을 부호화하여 전송한다. 복호화기도 미리 복호화된 주위의 블록의 움직임 벡터를 이용하여 현재 블록의 움직임 벡터를 예측하여 전송된 차분 벡터와 예측 움직임 벡터를 더하여 현재 움직임 벡터를 복원한다.
또한, 인터 예측 부호화를 수행할 때, 참조 프레임을 보간하여 해상도를 일괄적으로 높인 후, 현재 블록의 움직임을 추정하여 결정한 예측 움직임 벡터와 현재 움직임 벡터와의 차분값인 차분 벡터를 부호화하여 전송할 수 있다. 이때, 참조 프레임의 영상 즉, 참조 영상의 해상도를 커지면 더욱 정확한 인터 예측이 가능하여 원 영상과 예측 영상 간의 잔차 신호를 부호화하여 발생하는 비트량은 줄어 들지만, 움직임 벡터의 해상도도 커지므로 차분 벡터를 부호화하여 발생하는 비트량도 커진다. 반대로, 참조 영상의 해상도가 작아지면 잔차 신호를 부호화하여 발생하는 비트량은 커지지만, 움직임 벡터의 해상도도 작아지므로 차분 벡터를 부호화하여 발생하는 비트량도 작아진다.
그런데, 통상적인 인터 예측 부호화에서는 영상의 모든 블록, 코딩 유닛, 슬라이스, 픽처 등과 같은 부호화 단위의 영상에 대해 동일한 해상도로 보간하고 동일한 해상도의 움직임 벡터를 이용하여 인터 예측하기 때문에, 움직임 벡터가 커지게 되면 잔차 신호도 커지게 되고 그에 따라 효율적인 부호화가 어려워 압축 효율이 저하되는 문제점이 있다.
또한, 인터 예측 복호화는 인터 예측 부호화에 상응적으로 동작하기 때문에, 인터 예측 부호화의 압축 효율이 저하된 상태에서는 인터 예측 복호화의 고효율을 기대하기 어렵다는 문제점이 있다.
전술한 문제점을 해결하기 위해 본 발명은, 임의의 크기 영역 단위로 차분 움직임 벡터의 해상도를 적응적으로 결정하여 차분 움직임 벡터를 부호화함으로써 움직임 벡터의 부호화 효율과 영상의 압축 효율을 향상시키는 데 주된 목적이 있다.
또한, 임의의 크기 영역 단위로 적응적으로 움직임 벡터 해상도가 부호화된경우, 비트스트림을 복호화하여 상응적으로 차분 움직임 벡터의 해상도를 복원하고 복원되는 차분 움직임 벡터의 해상도를 기초로 움직임 벡터를 복원함으로써, 영상의 복원 효율을 향상시키는 데 주된 목적이 있다.
전술한 목적을 달성하기 위한 본 발명의 실시예에 따른 움직임 벡터를 부호화하는 방법에 있어서, 영상의 영역마다 적응적으로 결정되는 움직임 벡터 해상도 또는 차분 움직임 벡터 해상도에 따라 현재 블록의 움직임 벡터를 결정하는 단계; 주변 블록의 움직임 벡터로부터 상기 현재 블록의 예측 움직임 벡터를 결정하는 단계; 상기 현재 블록의 움직임 벡터와 상기 예측 움직임 벡터로부터 차분 움직임 벡터를 결정하고 상기 차분 움직임 벡터를 부호화하는 단계; 및 상기 움직임 벡터 해상도 또는 차분 움직임 벡터 해상도가 디폴트 해상도를 갖는지 여부에 따라 적응적으로 상기 움직임 벡터 해상도 또는 차분 움직임 벡터 해상도에 대한 정보를 부호화하는 단계를 포함하는 것을 특징으로 하는 움직임 벡터 부호화 방법을 제공한다.
전술한 목적을 달성하기 위하여 본 발명의 일 실시예에 따른 영상 복호화 장치에서 움직임 벡터를 복호화하는 방법에 있어서, 영상의 영역마다 비트스트림으로부터 현재블록의 움직임 벡터 해상도 또는 차분 움직임벡터 해상도를 나타내는 정보를 적응적으로 복원하는 단계; 상기 복원된 정보에 따라 상기 비트스트림으로부터 상기 현재블록의 차분 움직임 벡터를 복원하는 단계; 및 주변 블록의 움직임 벡터로부터 상기 현재블록의 예측 움직임 벡터를 결정하고, 상기 복원된 차분 움직임 벡터 및 상기 예측 움직임 벡터를 이용하여 상기 현재블록의 움직임 벡터를 복원하는 단계를 포함하는 것을 특징으로 하는 영상 복호화 방법을 제공한다.
이상에서 설명한 바와 같이 본 발명의 실시예에 의하면, 임의의 크기 영역 단위로 차분 움직임 벡터의 해상도를 적응적으로 결정하여 차분 움직임 벡터를 부호화함으로써 움직임 벡터의 부호화 효율과 영상의 압축 효율을 향상시킬 수 있다.
또한, 임의의 크기 영역 단위로 적응적으로 움직임 벡터 해상도가 부호화된경우, 비트스트림을 복호화하여 차분 움직임 벡터의 해상도를 복원하고 복원되는 차분 움직임 벡터의 해상도를 기초로 움직임 벡터를 복원함으로써, 영상의 복원 효율을 향상시킬 수 있다.
도 1은 영상 부호화 장치를 간략하게 나타낸 블록 구성도,
도 2는 참조 픽처를 보간하는 과정을 설명하기 위한 예시도,
도 3은 예측 움직임 벡터를 결정하는 과정을 설명하기 위한 예시도,
도 4는 최대값 T가 10인 절삭형 단항 코드를 나타낸 예시도이고, 도 5는 0차, 1차 및 2차의 지수 골룸 코드를 나타낸 예시도,
도 5는 0차, 1차 및 2차의 지수 골룸 코드를 나타낸 예시도,
도 6은 최대값 T는 9이며 K는 3인 경우의 절삭형 단항/K차 지수 골룸 결합형 코드를 나타낸 예시도,
도 7은 지그재그 스캔 순서를 나타낸 예시도,
도 8은 영상 복호화 장치를 간략하게 나타낸 블록 구성도,
도 9는 본 발명의 일 실시예에 따른 영상 부호화 장치를 간략하게 나타낸 블록 구성도,
도 10은 본 발명의 일 실시예에 따라 움직임 벡터 해상도를 쿼드 트리 구조로 계층적으로 표현한 예시도,
도 11은 본 발명의 일 실시예에 따라 쿼드 트리 구조로 계층적으로 표현된 움직임 벡터 해상도를 부호화하는 과정을 설명하기 위한 예시도,
도 12는 본 발명의 일 실시예에 따라 결정된 영역의 움직임 벡터 해상도를 나타낸 예시도,
도 13은 본 발명의 일 실시예에 따라 움직임 벡터 해상도를 테그 트리 구조로 계층적으로 표현한 예시도,
도 14는 본 발명의 일 실시예에 따라 테그 트리 구조로 계층적으로 표현된 움직임 벡터 해상도를 부호화한 결과를 나타낸 예시도,
도 15는 본 발명의 일 실시예에 따라 영역의 주위 화소들을 이용하여 움직임 벡터 해상도를 결정하는 과정을 설명하기 위한 예시도,
도 16은 본 발명의 일 실시예에 따라 예측 움직임 벡터를 예측하는 과정을 설명하기 위한 예시도,
도 17은 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 방법을 설명하기 위한 순서도,
도 18은 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 장치를 간략하게 나타낸 블록 구성도,
도 19는 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 방법을 설명하기 위한 순서도이다.
도 20은 본 발명의 일 실시예에 따라 노드를 하위 계층으로 분할하는 다른 방식을 나타낸 예시도,
도 21은 본 발명의 일 실시예에 따라 움직임 벡터 해상도에 따른 심볼별로 할당되는 이진화 비트열을 나타낸 예시도,
도 22는 움직임 벡터의 해상도를 결정하는 과정을 설명하기 위하여 주변 블록 및 현재블록의 최적 움직임 벡터를 예시한 도면,
도 23은 움직임 벡터 해상도에 따른 변환식을 도시한 도면,
도 24는 주변 블록의 움직임 벡터의 해상도를 현재 부호화할 블록의 해상도로 변환한 표를 예시한 도면,
도 25는 움직임 벡터 해상도에 따른 차분 움직임 벡터의 부호 번호 테이블을 도시한 도면,
도 26은 차분 움직임 벡터의 해상도를 결정하는 과정을 설명하기 위하여 주변 블록 및 현재블록의 최적 움직임 벡터를 예시한 도면,
도 27은 차분 움직임벡터 해상도에 따른 차분 움직임 벡터 부호 번호 테이블을 도시한 도면,
도 28은 현재 블록의 움직임 벡터와 주변 블록의 기준 움직임 벡터를 예시한 도면,
도 29는 차분 움직임 벡터 해상도에 따른 차분 기준 움직임 벡터의 부호 번호 테이블을 예시한 도면,
도 30은 현재 픽처와 참조 픽처 간의 거리를 기준으로 참조 픽처를 인덱싱하고 부호화하는 예를 나타낸 도면,
도 31은 참조픽처 번호 및 해상도에 따른 참조픽처 인덱스를 예시한 도면,
도 32는 본 발명의 다른 실시예에 따른 적응적 움직임 벡터를 이용한 영상 부호화 장치를 개략적으로 도시한 도면,
도 33은 지정된 해상도가 1/2, 1/4인 경우에 해상도 식별 플래그를 예시한 도면,
도 34는 현재 블록의 주변 블록을 예시한 도면,
도 35는 조건에 따른 확률 모델을 예시한 도면,
도 36은 지정된 해상도가 1/2, 1/4, 1/8인 경우에 해상도 식별 플래그를 예시한 도면,
도 37은 조건에 다른 확률 모델의 다른 예를 나타낸 도면,
도 38 및 도 39는 현재 픽처와 참조 픽처 간의 거리에 따른 적응성 정도를 예시한 도면,
도 40은 소정의 해상도 세트마다 다른 참조픽처 인덱스 번호를 저장하는 경우의 예를 나타낸 도면,
도 41은 참조픽처들이 부호화되는 구조를 예시한 도면,
도 42는 해상도 세트가 1/2, 1/4로 지정된 경우 참조 픽처별 해상도 세트를 예시한 도면,
도 43은 현재 블록의 해상도와 주변 블록의 해상도를 예시한 도면,
도 44는 현재 블록의 해상도와 주변 블록의 해상도의 다른 예를 나타낸 도면,
도 45는 해상도에 따른 해상도 식별 플래그를 예시한 도면,
도 46은 현재 블록의 해상도와 주변 블록의 해상도를 예시한 도면,
도 47은 본 발명의 다른 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 방법을 나타낸 도면,
도 48은 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 장치를 개략적으로 도시한 도면,
도 49는 현재 블록의 주변 움직임 벡터를 예시한 도면,
도 50은 현재 해상도에 따른 주변 움직임 벡터의 변환된 값을 예시한 도면,
도 51은 본 발명의 다른 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 방법을 나타낸 순서도,
도 52는 본 발명의 일 실시예에 따른 움직임 벡터 부호화 장치를 간략하게 나타낸 블록 구성도,
도 53 내지 도 57은 본 발명의 일 실시예에 따라 차분 움직임 벡터를 부호화하기 위한 부호 번호 테이블을 나타낸 예시도,
도 58은 본 발명의 일 실시예에 따른 움직임 벡터 부호화 방법을 설명하기 위한 순서도,
도 59는 본 발명의 일 실시예에 따른 움직임 벡터 복호화 장치를 간략하게 나타낸 블록 구성도,
도 60은 본 발명의 일 실시예에 따른 움직임 벡터 복호화 방법을 설명하기 위한 순서도,
도 61은 차분 움직임 벡터의 해상도 식별 플래그를 이용하는 예를 설명하기 위해 도시한 차분 움직임 벡터의 부호 번호 테이블의 예를 나타낸 도면,
도 62는 예측 움직임 벡터 해상도 식별 플래그를 이용하는 예를 설명하기 위해 도시한 주변 블록의 예를 나타낸 도면,
도 63은 도 62에서 현재 블록의 해상도가 1/4일 때의 차분 움직임 벡터 부호번호 테이블의 예를 나타낸 도면,
도 64는 도 62에서 현재 블록의 해상도가 1/8일 때의 차분 움직임 벡터 부호번호 테이블의 예를 나타낸 도면, 그리고
도 65는 예측 움직임 벡터 해상도 식별 플래그를 이용하는 다른 예를 설명하기 위해 도시한 주변 블록의 예를 나타낸 도면이다.
도 2는 참조 픽처를 보간하는 과정을 설명하기 위한 예시도,
도 3은 예측 움직임 벡터를 결정하는 과정을 설명하기 위한 예시도,
도 4는 최대값 T가 10인 절삭형 단항 코드를 나타낸 예시도이고, 도 5는 0차, 1차 및 2차의 지수 골룸 코드를 나타낸 예시도,
도 5는 0차, 1차 및 2차의 지수 골룸 코드를 나타낸 예시도,
도 6은 최대값 T는 9이며 K는 3인 경우의 절삭형 단항/K차 지수 골룸 결합형 코드를 나타낸 예시도,
도 7은 지그재그 스캔 순서를 나타낸 예시도,
도 8은 영상 복호화 장치를 간략하게 나타낸 블록 구성도,
도 9는 본 발명의 일 실시예에 따른 영상 부호화 장치를 간략하게 나타낸 블록 구성도,
도 10은 본 발명의 일 실시예에 따라 움직임 벡터 해상도를 쿼드 트리 구조로 계층적으로 표현한 예시도,
도 11은 본 발명의 일 실시예에 따라 쿼드 트리 구조로 계층적으로 표현된 움직임 벡터 해상도를 부호화하는 과정을 설명하기 위한 예시도,
도 12는 본 발명의 일 실시예에 따라 결정된 영역의 움직임 벡터 해상도를 나타낸 예시도,
도 13은 본 발명의 일 실시예에 따라 움직임 벡터 해상도를 테그 트리 구조로 계층적으로 표현한 예시도,
도 14는 본 발명의 일 실시예에 따라 테그 트리 구조로 계층적으로 표현된 움직임 벡터 해상도를 부호화한 결과를 나타낸 예시도,
도 15는 본 발명의 일 실시예에 따라 영역의 주위 화소들을 이용하여 움직임 벡터 해상도를 결정하는 과정을 설명하기 위한 예시도,
도 16은 본 발명의 일 실시예에 따라 예측 움직임 벡터를 예측하는 과정을 설명하기 위한 예시도,
도 17은 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 방법을 설명하기 위한 순서도,
도 18은 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 장치를 간략하게 나타낸 블록 구성도,
도 19는 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 방법을 설명하기 위한 순서도이다.
도 20은 본 발명의 일 실시예에 따라 노드를 하위 계층으로 분할하는 다른 방식을 나타낸 예시도,
도 21은 본 발명의 일 실시예에 따라 움직임 벡터 해상도에 따른 심볼별로 할당되는 이진화 비트열을 나타낸 예시도,
도 22는 움직임 벡터의 해상도를 결정하는 과정을 설명하기 위하여 주변 블록 및 현재블록의 최적 움직임 벡터를 예시한 도면,
도 23은 움직임 벡터 해상도에 따른 변환식을 도시한 도면,
도 24는 주변 블록의 움직임 벡터의 해상도를 현재 부호화할 블록의 해상도로 변환한 표를 예시한 도면,
도 25는 움직임 벡터 해상도에 따른 차분 움직임 벡터의 부호 번호 테이블을 도시한 도면,
도 26은 차분 움직임 벡터의 해상도를 결정하는 과정을 설명하기 위하여 주변 블록 및 현재블록의 최적 움직임 벡터를 예시한 도면,
도 27은 차분 움직임벡터 해상도에 따른 차분 움직임 벡터 부호 번호 테이블을 도시한 도면,
도 28은 현재 블록의 움직임 벡터와 주변 블록의 기준 움직임 벡터를 예시한 도면,
도 29는 차분 움직임 벡터 해상도에 따른 차분 기준 움직임 벡터의 부호 번호 테이블을 예시한 도면,
도 30은 현재 픽처와 참조 픽처 간의 거리를 기준으로 참조 픽처를 인덱싱하고 부호화하는 예를 나타낸 도면,
도 31은 참조픽처 번호 및 해상도에 따른 참조픽처 인덱스를 예시한 도면,
도 32는 본 발명의 다른 실시예에 따른 적응적 움직임 벡터를 이용한 영상 부호화 장치를 개략적으로 도시한 도면,
도 33은 지정된 해상도가 1/2, 1/4인 경우에 해상도 식별 플래그를 예시한 도면,
도 34는 현재 블록의 주변 블록을 예시한 도면,
도 35는 조건에 따른 확률 모델을 예시한 도면,
도 36은 지정된 해상도가 1/2, 1/4, 1/8인 경우에 해상도 식별 플래그를 예시한 도면,
도 37은 조건에 다른 확률 모델의 다른 예를 나타낸 도면,
도 38 및 도 39는 현재 픽처와 참조 픽처 간의 거리에 따른 적응성 정도를 예시한 도면,
도 40은 소정의 해상도 세트마다 다른 참조픽처 인덱스 번호를 저장하는 경우의 예를 나타낸 도면,
도 41은 참조픽처들이 부호화되는 구조를 예시한 도면,
도 42는 해상도 세트가 1/2, 1/4로 지정된 경우 참조 픽처별 해상도 세트를 예시한 도면,
도 43은 현재 블록의 해상도와 주변 블록의 해상도를 예시한 도면,
도 44는 현재 블록의 해상도와 주변 블록의 해상도의 다른 예를 나타낸 도면,
도 45는 해상도에 따른 해상도 식별 플래그를 예시한 도면,
도 46은 현재 블록의 해상도와 주변 블록의 해상도를 예시한 도면,
도 47은 본 발명의 다른 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 방법을 나타낸 도면,
도 48은 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 장치를 개략적으로 도시한 도면,
도 49는 현재 블록의 주변 움직임 벡터를 예시한 도면,
도 50은 현재 해상도에 따른 주변 움직임 벡터의 변환된 값을 예시한 도면,
도 51은 본 발명의 다른 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 방법을 나타낸 순서도,
도 52는 본 발명의 일 실시예에 따른 움직임 벡터 부호화 장치를 간략하게 나타낸 블록 구성도,
도 53 내지 도 57은 본 발명의 일 실시예에 따라 차분 움직임 벡터를 부호화하기 위한 부호 번호 테이블을 나타낸 예시도,
도 58은 본 발명의 일 실시예에 따른 움직임 벡터 부호화 방법을 설명하기 위한 순서도,
도 59는 본 발명의 일 실시예에 따른 움직임 벡터 복호화 장치를 간략하게 나타낸 블록 구성도,
도 60은 본 발명의 일 실시예에 따른 움직임 벡터 복호화 방법을 설명하기 위한 순서도,
도 61은 차분 움직임 벡터의 해상도 식별 플래그를 이용하는 예를 설명하기 위해 도시한 차분 움직임 벡터의 부호 번호 테이블의 예를 나타낸 도면,
도 62는 예측 움직임 벡터 해상도 식별 플래그를 이용하는 예를 설명하기 위해 도시한 주변 블록의 예를 나타낸 도면,
도 63은 도 62에서 현재 블록의 해상도가 1/4일 때의 차분 움직임 벡터 부호번호 테이블의 예를 나타낸 도면,
도 64는 도 62에서 현재 블록의 해상도가 1/8일 때의 차분 움직임 벡터 부호번호 테이블의 예를 나타낸 도면, 그리고
도 65는 예측 움직임 벡터 해상도 식별 플래그를 이용하는 다른 예를 설명하기 위해 도시한 주변 블록의 예를 나타낸 도면이다.
이하, 본 발명의 일부 실시예들을 예시적인 도면을 통해 상세하게 설명한다. 각 도면의 구성요소들에 참조부호를 부가함에 있어서, 동일한 구성요소들에 대해서는 비록 다른 도면상에 표시되더라도 가능한 한 동일한 부호를 가지도록 하고 있음에 유의해야 한다. 또한, 본 발명을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략한다.
또한, 본 발명의 구성 요소를 설명하는 데 있어서, 제 1, 제 2, A, B, (a), (b) 등의 용어를 사용할 수 있다. 이러한 용어는 그 구성 요소를 다른 구성 요소와 구별하기 위한 것일 뿐, 그 용어에 의해 해당 구성 요소의 본질이나 차례 또는 순서 등이 한정되지 않는다. 어떤 구성 요소가 다른 구성요소에 "연결", "결합" 또는 "접속"된다고 기재된 경우, 그 구성 요소는 그 다른 구성요소에 직접적으로 연결되거나 접속될 수 있지만, 각 구성 요소 사이에 또 다른 구성 요소가 "연결", "결합" 또는 "접속"될 수도 있다고 이해되어야 할 것이다.
이하에서 후술할 영상 부호화 장치(Video Encoding Apparatus), 영상 복호화 장치(Video Decoding Apparatus)는 개인용 컴퓨터(PC: Personal Computer), 노트북 컴퓨터, 개인 휴대 단말기(PDA: Personal Digital Assistant), 휴대형 멀티미디어 플레이어(PMP: Portable Multimedia Player), 플레이스테이션 포터블(PSP: PlayStation Portable), 무선 통신 단말기(Wireless Communication Terminal), TV(Television) 등일 수 있으며, 각종 기기 또는 유무선 통신망과 통신을 수행하기 위한 통신 모뎀 등의 통신 장치, 영상을 부호화하거나 복호화하기 위한 각종 프로그램과 데이터를 저장하기 위한 메모리, 프로그램을 실행하여 연산 및 제어하기 위한 마이크로프로세서 등을 구비하는 다양한 장치를 의미한다.
또한, 영상 부호화 장치에 의해 비트스트림으로 부호화된 영상은 실시간 또는 비실시간으로 인터넷, 근거리 무선 통신망, 무선랜망, 와이브로망, 이동통신망 등의 유무선 통신망 등을 통하거나 케이블, 범용 직렬 버스(USB: Universal Serial Bus) 등의 통신 인터페이스를 통해 영상 복호화 장치로 전송되어 영상 복호화 장치에서 복호화되어 영상으로 복원되고 재생될 수 있다.
또한, 영상 부호화 장치와 영상 복호화 장치에는 인터 예측뿐만 아니라 인트라 예측을 수행하기 위한 기능이 구비될 수 있지만, 본 발명의 실시예와 직접적인 관계가 없기 때문에, 혼란을 방지하기 위해 상세한 설명을 생략한다.
통상적으로 동영상은 일련의 픽처(Picture)로 구성되어 있으며, 각 픽처들은 블록(Block)과 같은 소정의 영역으로 분할된다. 영상의 영역이 블록으로 분할되는 경우에는 분할된 블록은 부호화 방법에 따라 크게 인트라 블록(Intra Block), 인터 블록(Inter Block)으로 분류된다. 인트라 블록은 인트라 예측 부호화(Intra Prediction Coding) 방식을 사용하여 부호화되는 블록을 뜻하는데, 인트라 예측 부호화란 현재 부호화를 수행하는 현재 픽처 내에서 이전에 부호화되고 복호화되어 복원된 블록들의 화소를 이용하여 현재 블록의 화소를 예측함으로써 예측 블록을 생성하고 현재 블록의 화소와의 차분값을 부호화하는 방식이다. 인터 블록은 인터 예측 부호화(Inter Prediction Coding)를 사용하여 부호화되는 블록을 뜻하는데, 인터 예측 부호화란 하나 이상의 과거 픽처 또는 미래 픽처를 참조하여 현재 픽처 내의 현재 블록을 예측함으로써 예측 블록을 생성하고 현재 블록과의 차분값을 부호화하는 방식이다. 여기서, 현재 픽처를 부호화하거나 복호화하는데 참조되는 픽처를 참조 픽처(Reference Picture)라고 한다.
이하에서는 영상을 블록 단위로 부호화하고 복호화하는 장치에 대해 도 1 내지 도 8을 통해 예를 들어 설명한다. 여기서, 블록은 MxN 크기의 매크로블록이나 OxP 크기의 서브블록 또는 하위 블록일 수 있는데, 블록 단위로 부호화하고 복호화하는 것은 예시적인 것이며, 영상을 블록과 같이 정형화된 영역 또는 비정형화된 영역으로 부호화하고 복호화할 수도 있을 것이다.
도 1은 영상 부호화 장치를 간략하게 나타낸 블록 구성도이다.
영상 부호화 장치(100)는 예측기(Predictor, 110), 감산기(Subtracter, 120), 변환기(Transformer, 130), 양자화기(Quantizer, 140), 부호화기(Encoder, 150), 역 양자화기(Inverse Quantizer, 160), 역 변환기(Inverse Transformer, 170), 가산기(Adder, 180) 및 메모리(190)를 포함할 수 있다.
예측기(110)는 현재 블록(Current Block)을 인터 예측(Inter Prediction)하여 예측 블록(Predicted Block)을 생성한다. 즉, 예측기(110)는 입력 영상(Input Picture)에서 현재 부호화하고자 하는 블록 즉, 현재 블록이 입력되면, 현재 블록의 화소(Pixels)의 원 화소값(Original Pixel Values)을 움직임 추정을 통해 결정되는 현재 블록의 움직임 벡터를 이용하여 예측하여 예측 화소값(Predicted Pixel Values)을 가지는 예측 블록을 생성하여 출력한다.
감산기(120)는 현재 블록과 예측 블록을 감산하여 현재 블록의 잔차 블록(Residual Block)을 생성한다. 여기서, 출력되는 잔차 블록은 잔차 신호(Residual Signal)를 포함하는데, 잔차 신호는 현재 블록의 원 화소값에서 예측 블록의 예측 화소값을 뺀 값을 가진다.
변환기(130)는 잔차 블록을 변환하여 변환 블록(Transformed Block)을 생성한다. 즉, 변환기(130)는 감산기(120)로부터 출력되는 잔차 블록의 잔차 신호를 주파수 영역(Frequency Domain)으로 변환하여 변환 계수(Transform Coefficient)를 가지는 변환 블록을 생성하여 출력한다. 여기서, 잔차 신호를 주파수 영역으로 변환 방법으로서는 이산 코사인 변환(DCT: Discrete Cosine Transform) 기반 변환 또는 하다마드 변환(Hadamard Transform) 등이 이용될 수도 있지만, 반드시 이에 한정되지 않고 DCT 변환을 개량 및 변형한 기법과 같은 다양한 변환 기법을 이용될 수 있으며, 이를 이용하여 잔차 신호가 주파수 영역으로 변환되어 변환 계수로 변환된다.
양자화기(140)는 변환 블록을 양자화하여 양자화된 변환 블록을 생성한다. 즉, 양자화기(140)는 변환기(130)로부터 출력되는 변환 블록의 변환 계수들을 양자화하여 양자화된 변환 계수를 가지는 양자화된 변환 블록(Quantized Transform Coefficient Block)을 생성하여 출력한다. 여기서, 양자화 방법으로서는 데드존 균일 경계 양자화(DZUTQ: Dead Zone Uniform Threshold Quantization) 또는 양자화 가중치 매트릭스(Quantization Weighted Matrix) 등이 이용될 수 있지만 이를 개량한 양자화 등 다양한 양자화 방법이 이용될 수 있다.
부호화기(150)는 양자화된 변환 블록을 부호화하여 비트스트림을 출력할 수 있다. 즉, 부호화기(150)는 양자화기(140)로부터 출력되는 양자화된 변환 블록의 양자화된 변환 계수를 지그재그 스캔 등 다양한 스캔 방식으로 스캔한 주파수 계수열을 엔트로피 부호화(Entropy Encoding) 등 다양한 부호화 기법을 이용하여 부호화하고 해당 블록을 복호화하는 데 필요한 부가적인 정보들(예를 들면, 예측 모드에 대한 정보, 양자화 계수(Quantization Parameter), 움직임 벡터(Motion Vector) 등)을 함께 포함하는 비트스트림을 생성하고 출력할 수 있다.
역 양자화기(160)는 양자화된 변환 블록을 역 양자화한다. 즉, 역 양자화기(160)는 양자화기(140)로부터 출력되는 양자화된 변환 블록의 양자화 변환 계수들을 역 양자화하여 출력한다.
역 변환기(170)는 역 양자화된 변환 블록을 역 변환한다. 즉, 역 변환기(170)는 역 양자화기(160)에 의해 역 양자화된 변환 계수를 역 변환하여 복원된 잔차 계수를 가지는 잔차 블록을 복원한다.
가산기(180)는 예측기(110)에 의해 예측된 예측 블록과 역 변환기(170)에 의해 역 변환되어 복원된 잔차 블록을 가산하여 현재 블록을 복원한다. 복원된 현재 블록은 메모리(190)에 저장되고, 메모리(190)에 저장된 복원된 현재 블록은 블록 단위로 또는 픽처 단위로 누적되어 픽처 단위로 예측기(110)로 전달되어 다음 블록 또는 다음 픽처 등 다른 블록을 예측하는 데 활용될 수 있다.
한편, 예측기(110)는 메모리(190)에 저장된 참조 픽처를 이용하여 현재 블록의 움직임을 추정함으로써 현재 블록의 움직임 벡터를 결정하는데, 메모리(190)에 저장된 참조 픽처를 보간하여 참조 픽처의 해상도를 높여 움직임 추정을 수행할 수 있다.
도 2는 참조 픽처를 보간하는 과정을 설명하기 위한 예시도이다.
도 2에는 메모리(190)에 저장된 참조 픽처의 화소들과 부화소로 보간된 화소들을 나타내었다. 참조 픽처의 이미 복원된 화소 A~U를 보간 필터(Interpolation Filter)로 필터링하면 부화소 a~s를 생성될 수 있으며, 부화소 a~s를 도시된 바와 같이 이미 복원된 화소들 사이에 보간되어 참조 픽처의 해상도가 4배 이상 높아 질 수 있다.
움직임 추정(Motion Estimation)은 보간된 참조 픽처에서 현재 블록과 가장 유사한 부분을 찾아서 해당 부분의 블록과 해당 블록을 가리키는 움직임 벡터를 출력하는 과정이다. 이 과정에서 찾은 예측 블록은 감산기(120)에서 현재 블록과 감산되며, 그를 통해 잔차 신호를 가지는 잔차 블록이 생성된다. 또한, 움직임 벡터는 부호화기(160)에서 부호화된다.
부호화기(160)는 움직임 벡터를 부호화할 때, 현재 블록과 인접한 블록들의 움직임 벡터를 이용하여 현재 블록의 움직임 벡터를 예측하고 예측된 움직임 벡터 즉, 예측 움직임 벡터를 이용하여 움직임 벡터를 부호화할 수 있다.
도 3은 예측 움직임 벡터를 결정하는 과정을 설명하기 위한 예시도이다.
도 3을 참조하면, 현재 블록이 X이고, 현재 블록의 왼쪽에 있는 인접 블록 A의 움직임 벡터가 MV_A(x성분: MVx_A, y성분: MVy_A)이며, 현재 블록의 위쪽에 있는 인접 블록 B의 움직임 벡터가 MV_B(x성분: MVx_B, y성분: MVy_B)이며, 현재 블록의 위쪽 오른쪽에 있는 인접 블록 C의 움직임 벡터가 MV_C(x성분: MVx_C, y성분: MVy_C)라고 가정하면, 현재 블록 X의 예측 움직임 벡터 MV_pred_X(x성분: MVx_pred_X, y성분: MVy_pred_X)의 각 성분은 수학식 1과 같이 현재 블록의 인접 블록의 움직임 벡터의 각 성분마다의 중간값(Median Value)으로 결정될 수 있다. 한편, 본 발명에서 움직임 벡터 예측 방법이 여기서 소개되는 방법에 한정되지는 않는다.
부호화기(160)는 예측 움직임 벡터와 움직임 벡터의 차이값을 가지는 차분 벡터를 부호화할 수 있는데, 차분 벡터를 부호화하는 부호화 방식으로서는 예를 들어, 범용 가변 길이 부호화(UVLC: Universal Variable Length Coding, 이하 'UVLC'라 칭함)와 문맥 기반 이진 산술 부호화(CABAC: Context-Adaptive Binary Arithmetic Coding, 이하 'CABAC'라 칭함) 등과 같은 엔트로피 부호화(Entropy Coding) 방식이 이용될 수 있다. 한편, 본 발명에서 부호화기(160)에서의 부호화 방법이 여기서 소개되는 방법에 한정되지는 않는다.
UVLC를 이용하여 차분 벡터가 부호화되는 경우에는, 차분 벡터는 K차 지수 골룸 코드(K-th Order Exp-Golomb Code)를 이용하여 부호화될 수 있다. 이때, K의 값은 '0' 또는 다른 어떠한 값이 될 수 있다. K차 지수 골룸 코드의 접두어는 에 해당하는 절삭형 단항 코드(Truncated Unary Code)를 가지며, 접미어는 의 길이를 가지는 값의 이진화된 비트열로 표현될 수 있다.
도 4는 최대값 T가 10인 절삭형 단항 코드를 나타낸 예시도이고, 도 5는 0차, 1차 및 2차의 지수 골룸 코드를 나타낸 예시도이다.
또한, CABAC를 이용하여 차분 벡터가 부호화되는 경우에는, 차분 벡터는 절삭형 단항/K차 지수 골룸 결합형 코드(Concatenated Truncated Unary/K-th Order Exp-Golomb Code)의 부호 비트를 이용하여 부호화될 수 있다.
절삭형 단항/K차 지수 골룸 결합형 코드에서 최대값 T는 9이며 K는 3이 될 수 있다. 도 6은 최대값 T는 9이며 K는 3인 경우의 절삭형 단항/K차 지수 골룸 결합형 코드를 나타낸 예시도이다.
도 7은 지그재그 스캔 순서를 나타낸 예시도이다.
양자화기(140)에서 양자화된 양자화 주파수 계수는 부호화기(160)에서 스캔되어 양자화 주파수 계수열의 형태로 부호화될 수 있는데, 블록 형태의 양자화 주파수 계수는 도 7에 도시한 바와 같이 지그재그 순서로 스캔될 수도 있지만, 이외의 다양한 스캔 순서로 스캔될 수도 있다.
도 8은 영상 복호화 장치를 간략하게 나타낸 블록 구성도이다.
영상 복호화 장치(800)는 복호화기(Decoder, 810), 역 양자화기(820), 역 변환기(830), 예측기(840), 가산기(850) 및 메모리(860)를 포함할 수 있다.
복호화기(810)는 비트스트림을 복호화하여 양자화된 변환 블록을 추출한다. 즉, 복호화기(810)는 입력되는 비트스트림으로부터 추출된 비트열을 복호화하고 역 스캐닝하여 양자화된 변환 계수를 가지는 양자화된 변환 블록을 복원한다. 이때, 복호화기(810)는 영상 부호화 장치(100)의 부호화기(160)에서 이용한 엔트로피 부호화와 같은 부호화 기법을 이용하여 복호화할 수 있다.
또한, 복호화기(810)에서는 비트스트림으로부터 부호화된 차분 벡터를 추출하여 복호화하여 차분 벡터를 복원하고, 현재 블록의 움직임 벡터를 예측하여 예측 움직임 벡터와 복원된 차분 벡터를 가산하여 현재 블록의 움직임 벡터를 복원할 수 있다.
역 양자화기(820)는 양자화된 변환 블록을 역 양자화한다. 즉, 역 양자화기(820)는 복호화기(810)로부터 출력되는 양자화된 변환 블록의 양자화된 변환 계수를 역 양자화한다. 이때, 역 양자화기(820)는 영상 부호화 장치(100)의 양자화기(140)에서 이용한 양자화 기법을 역으로 수행하여 역 양자화한다.
역 변환기(830)는 역 양자화기(820)로부터 출력되는 역 양자화된 변환 블록을 역 변환하여 잔자 블록을 복원한다. 즉, 역 변환기(830)는 역 양자화기(820)로부터 출력되는 역 양자화된 변환 블록의 역 양자화된 변환 계수를 역 변환함으로써 복원된 잔차 신호를 가지는 잔차 블록을 복원하는데, 영상 부호화 장치(100)의 변환기(130)에서 이용한 변환 기법을 역으로 수행하여 역 변환한다.
예측기(840)는 비트스트림으로부터 추출되고 복호화되어 복원된 현재 블록의 움직임 벡터를 이용하여 현재 블록을 예측하여 예측 블록을 생성한다.
가산기(850)는 예측 블록과 복원된 잔차 블록을 가산하여 현재 블록을 복원한다. 즉, 가산기(850)는 예측기(840)로부터 출력되는 예측 블록의 예측 화소값과 역 변환기(830)로부터 출력되는 복원된 잔차 블록의 복원된 잔차 신호를 가산하여 현재 블록의 복원 화소값을 가산함으로써, 현재 블록을 복원한다.
가산기(850)에 의해 복원된 현재 블록은 메모리(860)에 저장되고 블록 단위로 저장되거나 픽처 단위로 참조 픽처로서 저장되어, 예측기(840)가 다음 블록을 예측하는데 사용될 수 있다.
이와 같이 도 1 내지 도 8을 통해 전술한 영상 부호화 장치(100)와 영상 복호화 장치(800)는 참조 픽처를 부화소 단위로 보간하여 참조 픽처와 움직임 벡터의 해상도를 높여 인터 예측 부호화 및 인터 예측 복호화를 수행할 수 있는데, 픽처 단위 또는 픽처 그룹(GOP: Group of Picture) 단위로 동일한 해상도로 참조 픽처를 보간하고 움직임 벡터의 해상도를 높일 수 있었다.
하지만, 이 경우 참조 픽처의 해상도를 높여 인터 예측을 수행함으로써 예측이 더욱 정확해지고 그에 따라 잔차 신호를 부호화하여 발생하는 비트량을 감소시킬 수 있지만, 움직임 벡터의 해상도도 함께 높아져서 움직임 벡터를 부호화하여 발생하는 비트량이 일괄적으로 증가하게 되므로, 결과적으로 참조 픽처의 해상도를 높여 인터 예측 부호화를 하는 경우에도 부호화 효율이 크게 증가하지 못하거나 영상에 따라 오히려 부호화 효율이 저하될 수 있다.
이하에서는 영상의 특성에 따라 픽처 단위, 슬라이스 단위, 코딩유닛 단위, 블록 단위 등 영상의 정형 또는 비정형의 임의의 크기를 가지는 영역 단위로 적응적으로 참조 픽처의 해상도를 높여서 인터 예측 부호화함으로써, 영상이 복잡하거나 움직임이 작은 영역에서는 해상도를 높여 인터 예측 부호화하고 복호화하며, 영상이 복잡하지 않거나 움직임이 큰 영역에서는 해상도를 낮추어 인터 예측 부호화하고 복호화하는 방법 및 장치에 대해 설명한다.
도 9는 본 발명의 제1 실시예에 따른 영상 부호화 장치를 간략하게 나타낸 블록 구성도이다.
본 발명의 제1 실시예에 따른 적응적 움직임 벡터를 이용한 영상 부호화 장치(900)는 영상을 영역 단위로 부호화하는 장치로서, 인터 예측 부호화기(Inter Prediction Encoder, 910), 해상도 변경 플래그 생성기(Resolution Change Flag Encoder, 920), 해상도 결정기(Resolution Determiner, 930), 해상도 부호화기(Resolution Encoder, 940) 및 차분 벡터 부호화기(Differential Vector Encoder, 950)를 포함하여 구성될 수 있다. 한편, 해상도 변경 플래그 생성기(920) 및 해상도 부호화기(940), 차분 벡터 부호화기(950)는 반드시 모두가 영상 부호화 장치(900)에 포함되어야 하는 것은 아니며, 구현 방식에 따라 선택적으로 포함될 수 있다.
인터 예측 부호화기(910)는 영상의 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도(Motion Vector Resolution)에 따른 움직임 벡터를 이용하여 영상을 영역 단위로 인터 예측 부호화(Inter Prediction Encoding)한다. 이러한 인터 예측 부호화기(910)는 도 1을 통해 전술한 영상 부호화 장치(100)로 구현될 수 있다. 여기서, 도 9의 해상도 부호화기(940) 및 차분 벡터 부호화기(950) 중에서 하나 이상의 구성요소가 추가로 포함되는 경우 추가로 포함되는 구성요소의 기능과 인터 예측 부호화기(910) 내의 부호화기(150)의 기능이 중복되는 경우 부호화기(150)에서는 그 중복되는 기능이 생략될 수 있다. 또한, 해상도 부호화기(940) 및 차분 벡터 부호화기(950) 중에서 추가되는 하나 이상의 구성요소는 도 9와 같이 인터 예측 부호화기(910)와 별개의 구성요소로 구성될 수도 있지만 인터 예측 부호화기(910) 내의 부호화기(150)와 일체로 구성될 수도 있다. 또한, 해상도 변경 플래그 생성기(920)에서 발생한 플래그 정보는 해상도 변경 플래그 생성기(920)에서 비트스트림으로 변환할 수도 있지만 비트스트림으로 변환하는 기능은 인터 예측 부호화기(910) 내의 부호화기(150)가 담당할 수도 있다.
다만, 도 1을 통해 전술한 영상 부호화 장치(100)는 영상을 블록 단위로 부호화하는 것으로 설명했지만, 인터 예측 부호화기(910)는 영역을 매크로블록 또는 서브블록과 같은 블록이나 슬라이스, 픽처 등과 같은 다양한 형태와 크기의 영역으로 분할하여 임의의 크기를 가지는 영역 단위로 부호화할 수 있다. 이러한 소정의 영역은 16X16 크기의 매크로블록이 될 수도 있지만, 이에 한정하지 않고 64X64 크기의 블록, 32X16 크기의 블록 등과 같은 다양한 크기의 코딩유닛 형태의 블록이 될 수도 있다.
또한, 도 1을 통해 전술한 영상 부호화 장치(100)는 영상의 모든 블록에 대해 동일한 움직임 벡터 해상도를 가지는 움직임 벡터로 인터 예측 부호화하지만, 인터 예측 부호화기(910)는 영역마다 다르게 결정되는 움직임 벡터 해상도를 가지는 움직임 벡터로 각 영역을 인터 예측 부호화할 수 있다. 여기서 움직임 벡터 해상도가 달리 결정될 수 있는 영상 영역은 픽처(프레임 또는 필드), 슬라이스 또는 소정 크기의 이미지 블록이 될 수 있다.
즉, 인터 예측 부호화기(910)는 소정의 영역을 인터 예측 부호화할 때, 이미 부호화되고 복호화되어 복원된 참조 픽처를 보간하여 해상도를 높인 후, 움직임 추정을 수행한다. 참조 픽처를 보간하기 위한 보간 필터로는 위너 필터(Winner Filter), 양선형 필터(Bilinear Filter), 칼만 필터(Kalman Filter) 등과 같은 다양한 필터가 사용될 수 있으며, 보간을 위한 해상도로는 2/1 화소, 1/1 화소, 1/2 화소, 1/4 화소, 1/8 화소 단위 등과 같은 다양한 분수 화소 및 정수 화소 단위의 해상도가 적용될 수 있다. 또한, 이러한 다양한 해상도에 따라 서로 다른 필터 계수를 사용하거나 필터 계수의 개수를 다르게 할 수도 있다. 예를 들면, 해상도가 1/2 화소 단위인 경우 위너 필터를 사용하여 보간하고, 1/4 화소 단위인 경우 칼만 필터를 사용하여 보간할 수 있다. 또한, 각 해상도를 보간할 때 필터 탭의 개수를 달리 할 수도 있다. 예를 들면, 해상도가 1/2 화소 단위인 경우 8탭 위너 필터를 사용하여 보간하고, 1/4 화소 단위인 경우 6탭 위너 필터를 사용하여 보간 할 수 있다.
또한, 인터 예측 부호화기(910)는 현재 부호화할 픽처와 참조픽처간의 에러가 최소가 되는 최적의 필터 계수를 각 움직임 벡터 해상도마다 결정하여 필터 계수를 부호화할 수 있다. 이때, 필터는 위너 필터, 칼만 필터 등 어떠한 필터를 사용할 수 있고, 각 필터 탭의 개수도 여러 개가 될 수 있으며, 각 해상도마다 필터와 필터 탭의 개수가 다를 수도 있다.
또한, 인터 예측 부호화기(910)는 영역 또는 움직임 벡터의 해상도에 따라 다른 필터를 이용하여 보간한 참조 픽처를 이용하여 인터 예측할 수 있다. 예를 들면, 수학식 2와 같이, 현재 부호화 할 픽처와 참조 픽처간의 SSD(Sum of Squared Difference)가 최소가 되는 최적의 필터를 계산하기 위해, 위너 필터를 이용하여 각 해상도마다 최적의 필터 탭을 계산할 수 있다.
수학식 2에서, S는 현재 픽처의 화소를 나타내고, hsp는 화소 도메인의 필터 계수를 나타내며, P는 참조 픽처의 화소를 나타내며, eSP는 에러를 나타내고, x, y는 현재 화소의 위치를 나타낸다.
즉, 인터 예측 부호화기(910)는 수학식 2와 같은 위너 호프 방정식을 이용하여 필터 계수를 각 해상도마다 계산하여 각 해상도마다 최적의 필터 계수를 부호화하여 비트스트림에 포함시키고, 참조 픽처에 대해 보간 필터링을 수행 후 각 해상도마다의 참조 픽처를 만들어 부호화할 수 있다. 이때, 1/2 해상도에는 6탭 위너 필터의 필터를, 1/4해상도에는 8탭 칼만 필터를, 1/8 해상도에는 선형 필터의 필터 계수를 계산하여 필터 계수를 부호화하여 비트스트림에 포함시키고, 각 해상도 마다의 참조 픽처를 보간하여 부호화할 수 있다. 이때, 인터 예측 부호화기(910)는 현재 영역 또는 움직임 벡터의 해상도가 1/2 해상도인경우 6탭 위너 필터로 보간된 참조 픽처를 이용하여 부호화하고, 1/4 해상도인 경우 8탭 칼만 필터로 보간된 참조 픽처를 이용하여 부호화할 수 있다.
해상도 변경 플래그 생성기(920)는 영상의 영역 또는 움직임 벡터마다 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도를 결정하는지 여부를 나타내는 해상도 변경 플래그를 생성하여 비트스트림에 포함시킬 수 있다. 해상도 변경 플래그에 의해서 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도를 변경하는 영역은 블록, 매크로블록, 블록을 묶은 그룹, 매크로블록을 묶은 그룹, MxN과 같이 임의의 크기를 가지는 영역 등이 될 수 있다. 즉, 해상도 변경 플래그 생성기(920)는 영상의 모든 영역 또는 일부 영역 내의 하위 영역들에 대해 기설정된 디폴트 움직임 벡터 해상도를 가지는 움직임 벡터를 이용하여 인터 예측 부호화할지 또는 영역(또는 움직임 벡터)마다 움직임 벡터 해상도를 결정하여 결정된 움직임 벡터 해상도를 가지는 움직임 벡터를 이용하여 인터 예측 부호화하고 기설정된 디폴트 해상도를 가지는 차분 움직임 벡터를 생성할지 여부를 나타내는 해상도 변경 플래그를 생성하여 비트스트림에 포함시킬 수 있다. 이러한 해상도 변경 플래그는 사용자에 의해 입력되는 설정 정보에 따라 결정되어 생성되거나 부호화할 영상을 분석하여 소정의 판단 기준에 따라 결정되어 생성될 수 있다. 이러한 해상도 변경 플래그는 비트스트림의 헤더에 포함될 수 있는데, 헤더는 픽처 파라미터 셋(Picture Parameter Set), 시퀀스 파라미터 셋(Sequence Parameter Set), 슬라이스 헤더(Slice Header), 코딩 유닛 파라미터 셋(Coding Unit Parameter Set) 등이 될 수 있다.
해상도 변경 플래그 생성기(920)에 의해 생성되는 해상도 변경 플래그가 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 기설정된 디폴트 값을 갖는 것으로 나타내는 경우, 인터 예측 부호화기(910)는 헤더에서 정의된 하위 영역에 대해 고정되어 설정된 움직임 벡터 해상도를 가지는 각 영역의 움직임 벡터를 이용하여 각 영역을 인터 예측 부호화한다. 예를 들어, 어느 슬라이스의 슬라이스 헤더에 포함된 해상도 변경 플래그가 움직임 벡터 해상도가 고정되는 것을 나타내는 경우, 해당 슬라이스의 영상에 대해 율-왜곡 비용이 최소인 움직임 벡터 해상도를 결정하고 해당 슬라이스의 모든 영역에 대해서는 해당 움직임 벡터 해상도를 가지는 각 영역의 움직임 벡터를 이용하여 인터 예측 부호화할 수 있다.
또한, 해상도 변경 플래그가 영역 또는 움직임 벡터마다 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 적응적으로 변경되는 것으로 나타내는 경우, 인터 예측 부호화기(910)는 해상도 결정기(930)에 의해 결정되는 각 영역의 움직임 벡터 해상도를 가지는 각 영역의 움직임 벡터를 이용하여 각 영역을 인터 예측 부호화한다. 예를 들어, 어느 슬라이스의 슬라이스 헤더에 포함된 해상도 변경 플래그가 영역 또는 움직임 벡터마다 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 적응적으로 변경되는 것을 나타내는 경우, 해상도 결정기(910)에 의해 슬라이스 내의 각 영역에 대해 결정되는 움직임 벡터 해상도를 가지는 각 영역의 움직임 벡터를 이용하여 각 슬라이스 내의 영역을 인터 예측 부호화할 수 있다. 또 다른 예를 들면, 어느 슬라이스의 슬라이스 헤더에 포함된 해상도 변경 플래그가 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 움직임 벡터마다 적응적으로 변경되는 것을 나타내는 경우, 해상도 결정기(930)에 의해 슬라이스 내의 움직임 벡터마다 결정되는 움직임 벡터 해상도를 이용하여 인터 예측 부호화할 수 있다.
해상도 결정기(930)는 해상도 변경 플래그 생성기(920)에 의해 영역 또는 움직임 벡터마다 적응적으로 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 변경됨을 나타내는 플래그가 생성되는 경우, 영역 단위 또는 움직임 벡터 단위로 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도를 변경하면서 율-왜곡 비용(RD Cost: Rate-Distortion Cost) 등과 같은 소정의 비용 함수를 이용하여 최적의 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도를 결정한다. 여기서, 최적의 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도란 소정의 비용 함수를 이용하여 결정되는 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도를 나타내는 것일 뿐, 이와 같이 결정되는 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 항상 최적의 성능을 가진다는 것을 의미하는 것은 아니다. 소정의 비용 함수가 율-왜곡 비용인 경우에는 율-왜곡 비용이 최소가 되는 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 최적의 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 될 수 있다.
해상도 부호화기(940)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도를 부호화할 수 있다. 즉, 해상도 부호화기(940)는 해상도 결정기(930)에 의해 결정되는 각 영역의 움직임 벡터 해상도를 나타내는 움직임 벡터 해상도 식별 플래그 및/또는 차분 움직임 벡터의 해상도를 나타내는 차분 움직임 벡터의 해상도 식별 플래그를 부호화하여 비트스트림에 포함시킬 수 있다. 움직임 벡터 해상도 식별 플래그 및/또는 차분 움직임 벡터의 해상도 식별 플래그의 구현은 다양한 방식으로 가능하다. 여기서, 해상도 식별 플래그 또는 해상도 정보가 나타내는 해상도는 움직임 벡터 해상도 또는 차분 움직임 벡터의 해상도이거나 움직임 벡터 해상도와 차분 움직임 벡터의 해상도에 동시에 사용될 수도 있다.
차분 벡터 부호화기(950)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도에 따른 움직임 벡터와 예측 움직임 벡터(Predicted Motion Vector) 간의 차이인 차분 움직임 벡터를 부호화할 수 있다. 여기서 차분 움직임 벡터는 차분 움직임 벡터의 해상도에 따라 부호화될 수 있다.
움직임 벡터 해상도를 나타내는 해상도 식별 플래그 또는 해상도 정보는 움직임 벡터의 x 컴포넌트(Componenet)와 y 컴포넌트를 모두 나타내거나 각각의 해상도를 나타낼 수도 있다. 즉, 영상을 촬영하는 카메라가 이동하거나 영상 내의 물체가 이동하는 경우 등과 같은 때에는, 해상도 결정기(930)는 움직임 추정을 위한 움직임 벡터의 x 컴포넌트와 y 컴포넌트의 해상도를 서로 다르게 결정할 수 있다. 예를 들어, 해상도 결정기는 어느 영역의 움직임 벡터의 x 컴포넌트에 대해서는 1/8 화소 단위의 해상도로 결정하고, y 컴포넌트에 대해서는 1/2 화소 단위의 해상도로 결정할 수 있으며, 이에 따라 인터 예측 부호화기(910)는 해당 영역의 움직임 벡터에 대해서는 x 컴포넌트와 y 컴포넌트별로 다른 해상도로 움직임 벡터를 결정하고 결정된 움직임 벡터를 이용하여 움직임 추정 및 움직임 보상함으로써 해당 영역을 인터 예측 부호화할 수 있다.
도 22는 해상도 결정기(930)에서 움직임 벡터의 해상도를 결정하는 과정을 설명하기 위하여 주변 블록 및 현재블록의 최적 움직임 벡터를 예시한 도면이다.
해상도 변경 플래그 생성기(920)에 의해 영역 또는 움직임 벡터마다 적응적으로 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 변경됨을 나타내는 플래그가 생성되는 경우(제2 실시예에서는 해상도 지정 플래그 생성기(3220)가 생성하는 해상도 지정 플래그에 의해서 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도가 변경되는지 고정되는지 여부가 설정될 수 있음), 현재 블록 및 주변 블록의 해상도의 종류가 1/2, 1/4, 1/8이고 도 22와 같이 최적의 해상도가 결정된 경우를 가정한다. 이때, 블록 A의 해상도는 1/2이고 움직임 벡터는(4/2, -8/2)이고, 블록 B의 해상도는 1/4이고 움직임 벡터는 (36/4, -28/4)이고, 블록 C의 해상도는 1/8이고 움직임 벡터는 (136/8, -104/8)이고, 현재 블록 X의 해상도는 1/4이고 움직임 벡터는 (16/4, 20/4)이다. 이러한 경우 예측 움직임 벡터는 현재 움직임 벡터의 해상도에 따를 수 있다. 이러한 경우 예측 움직임 벡터를 계산하기 위해 주변 움직임 벡터의 해상도가 현재 움직임 벡터의 해상도와 동일해 지도록 해상도 변환 과정이 수행될 수 있다.
도 23은 움직임 벡터 해상도에 따른 변환식을 도시한 도면이고, 도 24는 주변 블록의 움직임 벡터의 해상도를 현재 부호화할 블록 X의 해상도로 변환한 표를 예시한 도면이다.
예측 움직임 벡터는 주변의 움직임 벡터를 이용해서 구할 수 있으며, 주변의 움직임 벡터가 각각의 해상도에 따라 저장되어 있다면 주변 움직임 벡터가 현재 움직임 벡터와 해상도가 다른 경우 곱셈, 나눗셈을 이용하여 변환할 수 있다. 또한, 이러한 경우 해상도 변환 과정은 예측 움직임 벡터를 구할 때 수행할 수 있다. 또는 주변 움직임 벡터가 최고 해상도를 기준으로 저장되어 있다면 현재 움직임 벡터가 최고 해상도가 아닌 경우 나눗셈을 이용하여 변환할 수 있다. 또한, 이러한 경우 해상도 변환 과정은 부호화된 움직임 벡터를 저장하는 경우 최고 해상도가 아닌 경우 최고 해상도로 변환하는 해상도 변환 과정을 수행할 수 있다. 또는 주변 움직임 벡터가 임의의 해상도를 기준으로 저장되어 있다면 현재 움직임 벡터가 주변 움직임 벡터들이 저장되어 있는 기준 해상도와 다른 경우 곱셈, 나눗셈을 이용하여 변환할 수 있다. 또한, 이러한 경우 해상도 변환 과정은 부호화된 움직임 벡터를 저장하는 경우 움직임 벡터를 저장할 때 움직임 벡터의 해상도가 기준 해상도가 아닌 경우 기준 해상도로 변환하는 해상도 변환 과정을 수행할 수 있다. 나눗셈을 하는 경우, 반올림, 올림, 내림 등을 할 수 있으며, 도 23 및 도 24에 도시하듯이, 예시에서는 반올림을 사용한다. 또한 예시에서는 각각의 해상도에 따라 저장된 주변 움직임 벡터를 사용한다.
도 23의 표를 참조해서 예측 움직임 벡터를 구할 수 있다. 여기서 예측 움직임 벡터는 메디안(Median)을 이용하여 구할 수 있으며, 각각의 컴포넌트 별로 메디안을 구할 수 있다.
MVPx = median(16/4, 36/4, 32/4) = 32/4
MVPy = median(-32/4, -28/4, -28/4) = -28/4
따라서 예측 움직임 벡터는 (32/4, -28/7)이 된다. 이렇게 구한 예측 움직임 벡터를 이용해서 차분 움직임 벡터를 구한다. 차분 움직임 벡터는 수학식 3과 같이 움직임 벡터와 예측 움직임 벡터의 차이로 구할 수 있다.
[수학식 3]
MVD(-16/4, 48/4) = MV(16/4, 20/4) - MVP(32/4, -28/4)
따라서 차분 움직임 벡터는 (-16/4, 48/4) = (-4, 12)가 된다.
도 25는 움직임 벡터 해상도에 따른 차분 움직임 벡터의 부호 번호 테이블을 도시한 도면이다.
차분 벡터 부호화기(950)가 차분 움직임 벡터를 부호화 할 때는 도 25와 같은 움직임 벡터 해상도에 따른 차분 움직임 벡터의 부호 번호 테이블을 이용하여 각 해상도별로 움직임 벡터값에 대하여 차분 움직임 벡터를 부호화 할 수 있다.
또한 예측 움직임 벡터는 도 22의 예시를 이용하여 다음과 같이 구할 수도 있다. 여기서 주변의 움직임 벡터를 현재 해상도에 따라 변환하지 않고 각각의 컴포넌트 별로 메디안을 구할 수 있다.
MVPx = median(4/2, 36/4, 136/8) = 36/4
MVPy = median(-8/2, -28/4, -104/8) = -104/8
따라서 예측 움직임 벡터는 (36/4, -104/8)이 된다. 이렇게 구한 예측 움직임 벡터를 이용해서 차분 움직임 벡터를 구한다. 차분 움직임 벡터는 수학식 4와 같이 움직임 벡터와 예측 움직임 벡터의 차이로 구할 수 있다.
[수학식 4]
MVD(-20/4, 72/4) = MV(16/4, 20/4) - MVP(36/4, -104/8)
따라서 차분 움직임 벡터는 (-20/4, 72/4) = (-5, 18)가 된다.
차분 벡터 부호화기 (950)가 차분 움직임 벡터를 부호화 할 때는 도 25와 같은 움직임 벡터 해상도에 따른 차분 움직임 벡터의 부호 번호 테이블을 이용하여 각 해상도 별로 움직임 벡터 값에 대하여 차분 움직임 벡터를 부호화 할 수 있다.
또한 예측 움직임 벡터는 도 22의 예시를 이용하여 다음과 같이 구할 수도 있다. 여기서 주변의 움직임 벡터를 현재 해상도에 따라 변환하지 않고 각각의 컴포넌트 별로 메디안을 구한 뒤에 현재 해상도에 따라 변환할 수 있다.
MVPx = median(4/2, 36/4, 136/8) = 36/4
MVPy = median(-8/2, -28/4, -104/8) = -104/8
따라서 예측 움직임 벡터는 도 23을 참조하여 (36/4, -52/4)이 된다. 이렇게 구한 예측 움직임 벡터를 이용해서 차분 움직임 벡터를 구한다. 차분 움직임 벡터는 수학식 5와 같이 움직임 벡터와 예측 움직임 벡터의 차이로 구할 수 있다.
[수학식 5]
MVD(-20/4, 72/4) = MV(16/4, 20/4) - MVP(36/4, -52/4)
따라서 차분 움직임 벡터는 (-20/4, 72/4) = (-5, 18)가 된다.
차분 벡터 부호화기 (950)가 차분 움직임 벡터를 부호화 할 때는 도 25와 같은 움직임 벡터 해상도에 따른 차분 움직임 벡터의 부호 번호 테이블을 이용하여 각 해상도 별로 움직임 벡터 값에 대하여 차분 움직임 벡터를 부호화 할 수 있다.
또한 예측 움직임 벡터는 도 22의 예시를 이용하여 다음과 같이 구할 수도 있다. 현재 움직임 벡터의 해상도와 동일한 주변의 움직임 벡터만으로 메디안을 구할 수도 있다. 도 22에서는 현재 움직임 벡터의 해상도와 동일한 주변 움직임 벡터는 블록 B 뿐이므로 예측 움직임 벡터는 (36/4, -28/4)이 된다. 이렇게 구한 예측 움직임 벡터를 이용해서 차분 움직임 벡터를 구한다. 차분 움직임 벡터는 수학식 6와 같이 움직임 벡터와 예측 움직임 벡터의 차이로 구할 수 있다.
[수학식 6]
MVD(-20/4, 48/4) = MV(16/4, 20/4) - MVP(36/4, -28/4)
따라서 차분 움직임 벡터는 (-20/4, 48/4) = (-5, 12)가 된다.
차분 벡터 부호화기 (950)가 차분 움직임 벡터를 부호화 할 때는 도 25와 같은 움직임 벡터 해상도에 따른 차분 움직임 벡터의 부호 번호 테이블을 이용하여 각 해상도 별로 움직임 벡터 값에 대하여 차분 움직임 벡터를 부호화 할 수 있다.
또한 주변 움직임 벡터가 1/8의 해상도를 기준으로 저장되어 있는 경우 예측 움직임 벡터는 도 22의 예시를 이용하여 다음과 같이 구할 수 있다. 도 23 및 도 24를 참조하면 예측 움직임 벡터는 (32/4, -28/4) 이 된다. 이렇게 구한 예측 움직임 벡터를 이용해서 차분 움직임 벡터를 구한다. 차분 움직임 벡터는 수학식 3과 같이 움직임 벡터와 예측 움직임 벡터의 차이로 구할 수 있다. 따라서 차분 움직임 벡터는 (-16/4, 48/4) = (-4, 12)가 된다.
한편, 해상도 부호화기(940)는 헤더에 해상도 변경 플래그와 해상도의 종류를 부호화할 수 있으며(제2 실시예에서는 해상도 지정 플래그를 의미), 이때, 최적으로 결정된 해상도 식별 플래그 또는 해상도 정보를 1/4로 부호화하고, 차분 벡터 부호화기(950)는 해상도 결정기(930)에 의해 결정된 해상도에 따라 변환된 주변 움직임 벡터를 이용하여 계산된 예측 움직임 벡터를 이용하여 구한 차분 움직임 벡터를 부호화할 수 있다.
도 26은 해상도 결정기(930)에서 차분 움직임 벡터의 해상도를 결정하는 과정을 설명하기 위하여 주변 블록 및 현재블록의 최적 움직임 벡터를 예시한 도면이다.
도 26에 도시한 바와 같이 주변 블록 및 현재 블록의 움직임벡터 해상도가 1/8인 경우 예측 움직임 벡터는 수학식 7과 같이 계산될 수 있다.
[수학식 7]
PMVx = median(7/8, 1/8, 2/8) = 2/8
PMVy = median(-6/8, 1/8, -2/8) = -2/8
따라서 PMV = (2/8, -2/8) = (1/4, -1/4)이 된다. 차분 움직임 벡터는 수학식 8과 같이 구할 수 있다.
[수학식 8]
MVD (-1/8, -2/8) = MV(1/8, -4/8) - PMV(1/4, -1/4)
따라서 차분 움직임 벡터 식별 플래그를 MVDx는 1/8로 부호화 하고, MVDy는 1/4로 부호화 할 수 있다.
도 27은 차분 움직임 벡터 해상도에 따른 차분 움직임 벡터 부호 번호 테이블을 도시한 도면이다.
도 27에 도시하듯이, 차분 움직임 벡터의 부호 번호 테이블에 따라 차분 움직임 벡터의 부호 번호는 (1, 1)이 된다. 따라서 해상도 부호화기(940)는 차분 움직임 벡터 해상도 식별 플래그를 (1/8, 1/4)로 x, y 컴포넌트 별로 부호화하고, 차분 움직임 벡터의 부호 번호는 (1, 1)으로 부호화 하고, 차분 움직임 벡터의 x, y 컴포넌트 별로 기호(sign)는 따로 부호화 할 수 있다.
한편, 차분 벡터 부호화기(950)가 차분 움직임 벡터를 부호화 하는 경우, 기준 해상도를 정하고, 기준 해상도가 아닌 해상도를 갖는 움직임 벡터는 기준 해상도를 갖는 움직임 벡터로 변환하고 주변 블록의 기준 움직임 벡터로부터 구한 기준 예측 움직임 벡터를 이용하여 차분 움직임 벡터를 산출한다. 만일, 움직임 벡터가 기준 해상도 이외의 해상도인 경우에는 기준 해상도 플래그를 추가로 부호화 하는 방법을 사용할 수 있다. 여기서 기준 해상도 플래그는 같은 기준 해상도와 같은 해상도인 여부를 나타내는 데이터와 실제 움직임 벡터의 위치를 나타내는 데이터를 포함할 수 있다.
한편, 기준 해상도는 헤더에 정의할 수 있으며, 픽처 파라미터 셋(Picture Parameter Set), 시퀀스 파라미터 셋(Sequence Parameter Set), 슬라이스 헤더(Slice Header), 코딩 유닛 파라미터 셋(Coding Unit Parameter Set) 등이 될 수 있다.
도 28은 현재 블록 X의 움직임 벡터와 주변 블록의 기준 움직임 벡터를 예시한 도면이다.
해상도 변경 플래그(제2 실시예에서는 해상도 지정 플래그를 의미)가 단일 해상도가 아님을 나타내고, 해상도의 종류가 1/2, 1/4, 1/8이고 기준 해상도는 1/4이고, 도 28과 같이 최적의 해상도가 결정된 경우에 현재 블록의 움직임 벡터(4/8, 5/8)를 기준 해상도 1/4를 이용하여 기준 움직임 벡터(Ref_MV)로 수학식 9로 변환한다.
[수학식 9]
Ref_MVx = 2/4
Ref_MVy = 3/4
현재 블록의 움직임 벡터의 해상도가 기준 움직임 벡터의 해상도와 다른 경우 곱셈, 나눗셈을 이용하여 변환할 수 있다. 나눗셈을 하는 경우, 반올림, 올림, 내림 등을 사용할 수 있으며, 본 실시예에서는 반올림을 사용한다. 따라서 기준 움직임 벡터는 (2/4, 3/4)이 되고, 기준 해상도 이외의 해상도를 갖는 실제 움직임 벡터의 위치는 기준 해상도 플래그로 나타낼 수 있다. 여기서, 현재 블록의 움직임 벡터와 기준 움직임 벡터와의 차이는 (0, 1/8)이며, 기준 해상도 플래그의 값은 예를 들어 (0, 1)과 같은 위치정보를 포함할 수 있다. 예시한 위치정보 (0, 1)에서 0은 기준 움직임 벡터와 움직임 벡터가 같음을 나타내고, 1은 기준 움직임 벡터에서 -1/8만큼 작은 움직임 벡터를 나타낸다.
한편, 기준 움직임 벡터의 차분 벡터는 주변 블록의 기준 움직임 벡터의 중간(Median) 값인 예측 기준 움직임 벡터를 이용하여 계산한다. 예측 기준 움직임 벡터는 수학식 10으로 구할 수 있다.
[수학식 10]
Ref_PMVx = median(9/4, 1, 2/4) = 1
Ref_PMVy = median(-7/4, -1, -1) = -1
따라서, 예측 기준 움직임 벡터(Ref_PMV)는(1, -1)이고 차분 기준 움직임 벡터(Ref_MVD)는 (Ref_MV(2/4, 3/4) - Ref_PMV(1, -1))을 적용하면 (-2/4, 7/4)가 된다. 따라서, 부호화기는 Ref_MVD(-2/4, 7/4)를 부호화 하고, 움직임 벡터의 위치를 나타내는 기준해상도 플래그 (0, 1)을 부호화 한다.
도 29는 차분 움직임 벡터 해상도에 따른 차분 기준 움직임 벡터의 부호 번호 테이블을 예시한 도면이다.
따라서, 도 29를 참조하면 본 실시예에서처럼 기준 해상도가 1/4이고, 차분 기준 움직임 벡터의 값이 2/4인 경우에 부호 번호는 2가 되고 차분 기준 움직임 벡터의 값이 3/4인 경우에 부호 번호는 3이 되며, 차분 기준 움직임 벡터의 각 성분별 부호 번호를 기준 해상도 플래그에 포함시킨다.
해상도 부호화기(940)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도를 다양하게 부호화할 수 있다. 이하에서는 도 10 내지 도 14를 통해 움직임 벡터 해상도 또는 차분 움직임 벡터의 해상도를 부호화하는 다양한 예에 대해 설명한다. 이하의 설명에서 움직임 벡터 해상도를 부호화하는 예만 설명하나 차분 움직임 벡터의 해상도도 움직임 벡터 해상도와 동일한 방법으로 부호화될 수 있으므로 차분 움직임 벡터의 해상도를 부호화 하는 예는 생략한다.
해상도 부호화기(940)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 동일한 움직임 벡터 해상도를 가지는 인접 영역끼리 통합하여 상기 통합된 영역 단위로 해상도 식별 플래그 또는 해상도 정보를 생성할 수 있다. 예컨대, 쿼드 트리(Quadtree) 구조로 계층적으로 해상도 식별 플래그 또는 해상도 정보를 생성할 수 있다. 이때, 해상도 부호화기(940)는 쿼드 트리 계층의 최대 개수 및 쿼드 트리 계층의 최하위 노드가 가리키기는 영역 크기를 나타내는 식별자를 부호화여 비트스트림의 해당 영역에 대한 헤더에 포함시킬 수 있다.
도 52는 본 발명의 일 실시예에 따른 움직임 벡터 부호화 장치를 간략하게 나타낸 블록 구성도이다.
본 발명의 일 실시예에 따른 움직임 벡터 부호화 장치(5200)는 움직임 벡터를 부호화하는 장치로서, 차분 움직임 벡터의 해상도를 결정하고 결정된 차분 움직임 벡터의 해상도를 부호화하는 해상도 부호화기(Precision Encoder, 5210) 및 움직임 벡터와 예측 움직임 벡터 간의 차인 차분 움직임 벡터를 부호화하는 차분 움직임 벡터 부호화기(Differential Motion Vector Encoder, 5220)를 포함하여 구성될 수 있다.
움직임 벡터 부호화 장치(5200)는 임의 크기의 영역 또는 움직임 벡터마다 움직임 벡터의 해상도를 결정하여 부호화하는 경우, 차분 움직임 벡터의 해상도는 움직임 벡터의 해상도보다 같거나 낮은 해상도로 결정하여 부호화한다. 또한, 움직임 벡터 부호화 장치(5200)는 움직임 벡터의 해상도를 부호화한 임의 크기의 영역의 하위 영역에서 차분 움직임 벡터의 해상도를 결정하여 부호화할 수도 있다. 예를 들어, 움직임 벡터 부호화 장치(5200)는 비트스트림의 헤더에 매크로블록마다 움직임 벡터의 해상도를 결정하여 부호화하고 움직임 벡터의 각 컴포넌트마다 최적의 차분 움직임 벡터를 결정하여 부호화하며 매크로블록내의 블록이 4개로 나누어져 부호화할 움직임 벡터가 4개이고 현재 매크로블록의 움직임 벡터의 해상도가 1/8인 경우, 각 차분 움직임 벡터의 컴포넌트의 해상도는 1/8보다 같거나 낮은 해상도로 결정하여 부호화 한다.
또한, 움직임 벡터 부호화 장치(5200)는 참조 픽쳐의 해상도에 대한 정보, 차분 움직임 벡터의 해상도 종류의 개수에 대한 정보 및 차분 움직임 벡터의 해상도에 대한 정보를 임의의 크기 영역단위로 부호화하며, 이와 같이 부호화된 데이터는 비트스트림의 헤더에 포함된다. 또한, 움직임 벡터 부호화 장치(5200)는 각 움직임 벡터마다 또는 움직임 벡터의 컴포넌트마다 차분 움직임 벡터의 해상도를 결정하고 부호화할 수 있다.
움직임 벡터 부호화 장치(5200)는 부호화하고자 하는 블록과 같은 영역의 움직임을 추정하여 움직임 벡터를 결정한 후, 차분 움직임 벡터를 결정하기 위해 예측 움직임 벡터를 결정하는데, 예측 움직임 벡터의 해상도는 비트스트림의 헤더에 정의된 참조 픽처의 해상도에 따라 결정될 수 있다. 즉, 참조 픽처의 해상도가 8배 증가한 경우, 예측 움직임 벡터의 해상도는 1/8 해상도가 이용될 수 있다. 또는, 움직임 벡터 부호화 장치(5200)는 예측 움직임 벡터의 해상도를 임의의 해상도로 설정하여 예측 움직임 벡터를 결정할 수도 있다.
차분 움직임 벡터는 움직임 벡터와 예측 움직임 벡터 간의 차이값으로 결정될 수 있다. 이때, 움직임 벡터 부호화 장치(5200)는 율-왜곡 비용이 최소가 되는 최적의 차분 움직임 벡터의 해상도를 결정하여 부호화할 수 있다. 예를 들어, 비트스트림의 헤더에 정의된 차분 움직임 벡터의 해상도의 종류가 두 개 이상인 경우, 헤더에서 정의된 임의의 크기 영역 단위, 움직임 벡터 단위 또는 각 움직임 벡터의 컴포넌트 단위로 차분 움직임 벡터의 해상도를 변화시키면서 부호화 비용(예를 들면, 율-왜곡 비용(RD Cost: Rate-Distortion Cost))이 최소가 되는 차분 움직임 벡터의 해상도를 결정하고, 어떠한 해상도가 최적인지를 나타내는 정보를 임의의 크기 영역 단위, 움직임 벡터 단위 또는 움직임 벡터의 각 컴포넌트 단위로 부호화할 수 있다. 일 예로, 슬라이스 헤더에 참조 픽처의 해상도가 8배로 보간된 참조 픽처를 이용하는 2 종류의 보간 필터 계수의 세트가 부호화되고, 움직임 벡터마다 차분 움직임 벡터의 해상도가 변경 가능함을 나타내는 정보가 부호화된 경우, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 해상도가 움직임 벡터 단위로 율-왜곡 비용이 최소인 차분 움직임 벡터의 해상도를 결정하고 결정된 차분 움직임 벡터의 해상도를 나타내는 정보를 부호화한다. 또한, 움직임 벡터 부호화 장치(5200)는 비트스트림의 현재 부호화하고자 하는 영역의 헤더 및 이전의 헤더에 부호화된 보간 필터의 계수들 중에서 최적의 보간 필터를 임의의 크기의 영역 및 움직임 벡터 단위로 결정하여 어떠한 최적의 보간 필터를 사용하였는지를 나타내는 정보를 부호화할 수 있다.
또한, 움직임 벡터 부호화 장치(5200)는 비트스트림의 헤더에 차분 움직임 벡터의 해상도의 종류가 1개임을 나타내는 정보를 부호화하는 경우, 헤더에서 정의된 임의의 크기의 영역의 하위 영역을 동일한 차분 움직임 벡터의 해상도로 부호화할 수 있다. 또한, 움직임 벡터 부호화 장치(5200)는 비트스트림의 슬라이스 헤더에 움직임 벡터의 해상도가 고정임을 나타내는 정보를 부호화한 경우, 해당 슬라이스의 율-왜곡 비용이 최소인 차분 움직임 벡터의 해상도를 부호화할 수 있다.
여기서, 차분 움직임 벡터의 해상도를 나타내는 정보는 차분 움직임 벡터의 x, y 두 컴포넌트를 함께 나타낼 수도 있고, 각각의 해상도를 나타낼 수도 있다. 예를 들어, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 x, y 컴포넌트의 해상도를 다르게 하여 x 컴포넌트에 대해서는 1/8 해상도를 나타내는 정보를 부호화하고, y 컴포넌트에 대해서는 1/2 해상도를 나타내는 정보를 부호화할 수 있다.
움직임 벡터 부호화 장치(5200)는 임의의 크기의 영역 안에서 차분 움직임 벡터가 모두 0인 경우 차분 움직임 벡터의 해상도를 나타내는 플래그를 부호화하지 않고, 예측 움직임 벡터를 이용할 수 있다.
움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 해상도 식별 플래그를 이용하여 차분 움직임 벡터의 컴포넌트 별로 부호화를 수행할 수도 있다. 예를 들어, 차분 움직임 벡터의 해상도를 1/4과 1/8을 사용하고, 현재 차분 움직임 벡터 해상도가 1/8이고 차분 움직임 벡터의 값이 (1/4, 1/8)인 경우, 해상도 부호화기(5210)는 차분 움직임 벡터 해상도 식별 플래그는 1/8로 부호화하고 도 61과 같은 차분 움직임 벡터의 부호 번호 테이블을 이용하여 차분 움직임 벡터의 컴포넌트 별로 부호화를 수행할 수 있다. 도 61을 참조하면, 차분 움직임 벡터의 x 컴포넌트는 (1) 테이블을 이용하고, y 컴포넌트는 (2) 테이블을 이용할 수 있다. 이 경우, 차분 움직임 벡터의 해상도는 1/8을 부호화하고, 차분 움직임 벡터의 x 컴포넌트는 부호 번호 2, y 컴포넌트는 부호 번호 0을 부호화한다. 복호화기는 차분 움직임 벡터 해상도 식별 플래그 1/8을 비트스트림에서 추출하여 복호하고, 차분 움직임 벡터의 x 컴포넌트 부호 번호 2를 비트스트림에서 추출하고 도 61의 테이블 (1)을 이용하여 1/4을 복호하면 y 컴포넌트가 1/8 해상도임을 알 수 있다. 따라서, 비트스트림에서 추출한 y 컴포넌트의 부호 번호 0은 도 61의 테이블 (2)를 이용하여 복호하면 1/8로 복호할 수 있다.
또는 차분 움직임 벡터 해상도가 1/4이고 차분 움직임 벡터의 값이 (1/4, 3/4)인 경우, 해상도 부호화기(5210)는 차분 움직임 벡터 해상도 식별 플래그를 1/4로 부호화하고, 차분 움직임 벡터의 x 컴포넌트와 y 컴포넌트를 부호화할 때 도 61의 테이블 (3)을 이용하여 부호 번호를 (1, 3)으로 부호화한다. 복호화기는 비트스트림에서 차분 움직임 벡터 해상도 식별 플래그 1/4을 추출하고 복호하여, 비트스트림에서 추출한 차분 움직임 벡터의 x 컴포넌트와 y 컴포넌트의 부호 번호(1, 3)을 도 61의 테이블 (3)을 이용하여 (1/4, 3/4)로 복호화할 수 있다.
움직임 벡터 부호화 장치(5200)는 예측 움직임 벡터 해상도 식별 플래그를 이용하여 부호화를 수행할 수도 있다. 이때, 해상도 부호화기(5210)는 예측 움직임 벡터의 해상도의 정밀도 정보를 부호화한다. 예를 들어, 움직임 벡터 해상도 지정 플래그가 (1/1, 1/2, 1/4, 1/8)을 나타내고 예측 움직임 벡터 해상도 식별 플래그를 부호화하는 경우, 도 62와 같이 블록 A의 해상도는 1/4이고, 블록 B의 해상도는 1/8이며, 블록 C의 해상도는 1/2이고, 블록 D의 해상도는 1/1일 수 있다. 예측 움직임 벡터 해상도가 1/4이고 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 블록 A의 움직임 벡터로 할 수 있다. 이것은 부호화기와 복호화기가 동일하게 구현할 수 있다. 이러한 경우, 차분 움직임 벡터는 도 63과 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 현재 블록 X의 해상도가 1/8이라면 예측 움직임 벡터는 해상도를 1/8로 변환한 블록 A의 움직임 벡터로 할 수 있다. 이러한 경우에는 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다. 이때, 복호화기는 현재 블록의 해상도에 따른 예측 움직임 벡터 해상도를 변환하고, 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용하여 움직임 벡터를 복호화할 수 있다.
또는 현재 블록 X의 해상도 1/8이라고 해도 예측 움직임 벡터는 해상도를 변환하지 않은 블록 A의 움직임 벡터로 할 수도 있다. 이러한 경우 차분 움직임 벡터 부호 테이블은 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
다른 예로, 움직임 벡터 해상도 지정 플래그가 (1/4, 1/8)을 나타내고 예측 움직임 벡터 해상도 식별 플래그를 부호화하는 경우, 도 65와 같이 블록 A, B, D의 해상도는 1/4이고 블록 C의 해상도는 1/8일 수 있다. 예측 움직임 벡터 해상도가 1/4이고 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 수학식 11과 같이 계산할 수 있다.
[수학식 11]
PMVx = median(MV_Ax, MV_Bx, MV_Dx)
PMVy = median(MV_Ay, MV_By, MV_Dy)
이러한 경우 차분 움직임 벡터는 도 63의 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 예측 움직임 벡터 해상도가 1/4이고, 현재 블록 X의 해상도가 1/8이라면 예측 움직임 벡터는 수학식 11과 같이 계산하고 해상도를 1/8로 변환한 값을 사용할 수 있다. 이러한 경우, 차분 움직임 벡터는 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 예측 움직임 벡터 해상도가 1/8이고, 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 블록 C의 움직임 벡터의 해상도를 1/4로 변환한 값이 된다. 이러한 경우 차분 움직임 벡터는 도 63과 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
이하에서는 도 53 내지 도 59를 통해, 움직임 벡터 부호화 장치(5200)가 차분 움직임 벡터를 부호화하는 과정에 대해 설명한다.
움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 해상도가 차분 움직임 벡터의 최대 해상도를 나타내는 경우와 차분 움직임 벡터의 해상도 분류를 나타낸 경우에 따라 차분 움직임 벡터를 다른 방식으로 부호화할 수 있다.
차분 움직임 벡터의 해상도가 임의의 크기의 영역, 움직임 벡터 또는 움직임 벡터의 각 컴포넌트에 대한 차분 움직임 벡터의 해상도가 최대 해상도를 나타내는 경우, 차분 움직임 벡터에 각 최대 해상도에 따른 부호 번호를 부여하여 부호화할 수 있다. 여기서, 최대 해상도는 부호 번호가 1씩 증가할 때마다 차분 움직임 벡터의 값이 증가하는 정도를 나타낸다.
예를 들면, 도 53에 도시한 바와 같이 차분 움직임 벡터의 해상도의 종류가 2, 1, 1/2, 1/4, 1/8와 같이 5 종류가 사용된다고 비트스트림의 헤더에 정의되었고 임의의 크기의 영역의 최적의 차분 움직임 벡터의 해상도가 1/2인 경우, 임의의 크기의 영역의 차분 움직임 벡터는 1/2 해상도 종류에 대응되는 부호 번호로 변환되어 엔트로피 부호화된다. 일 예로, 차분 움직임 벡터가 (5/8, 7/2)이고, 움직임 벡터 단위마다 차분 움직임 벡터의 최대 해상도를 결정하는 경우, 움직임 벡터 부호화 장치(5200)는 x 컴포넌트의 최대 해상도는 1/8이므로 부호 번호 '5'와 최대 해상도를 나타내는 정보를 부호화하고, y 컴포넌트의 최대 해상도는 1/2이므로 부호번호 '7'과 최대 해상도를 나타내는 플래그를 부호화한다.
또한, 차분 움직임 벡터의 해상도가 임의의 크기의 영역, 움직임 벡터 또는 움직임 벡터의 각 컴포넌트에 대한 차분 움직임 벡터의 해상도 분류를 나타내는 경우, 움직임 벡터 부호화 장치(5200)는 각 해상도 분류마다 차분 움직임 벡터의 값이 중복되지 않는 부호 번호를 할당하여 차분 움직임 벡터를 부호화할 수 있다.
예를 들면, 도 54에 도시한 바와 같이, 차분 움직임 벡터의 해상도 분류의 종류가 ⓐ, ⓑ, ⓒ, ⓓ, ⓔ, ⓕ와 같은 6 종류가 이용된다고 헤더에 정의 되어 있고 임의의 크기의 영역의 최적의 차분 움직임 벡터의 해상도가 ⓒ인 경우, 임의의 크기의 영역의 차분 움직임 벡터는 도 54를 참조하여 부호 번호로 변환되어 엔트로피 부호화될 수 있다. 일 예로, 차분 움직임 벡터가 (5/8, 7/2)이고 움직임 벡터 단위마다 차분 움직임 벡터의 해상도 분류를 결정하여 부호화하는 경우, 움직임 벡터 부호화 장치(5200)는 x 컴포넌트의 해상도 분류는 ⓔ이므로 부호 번호 '3'과 차분 움직임 벡터의 해상도 분류를 나타내는 정보를 부호화하고, y 컴포넌트의 해상도 분류는 ⓒ이므로 부호 번호 '4'와 차분 움직임 벡터의 해상도 분류를 나타내는 정보를 부호화할 수 있다.
다만, 도 54에 도시한 예시에서는 해상도 분류를 서로 중복되지 않는 2단위, 1단위, 1/2단위, 1/4단위, 1/8, 5/8단위, 3/8 및 7/8단위로 부호 번호 테이블을 생성하여 부호화하는 것으로 설명하였으나, 어떠한 방법으로도 분류할 수 있다. 또한, 도 54에 도시한 예시와 같은 부호 번호 테이블에서는 차분 움직임 벡터가 0인 경우에 대한 중복을 허용하였으나, 도 55와 같이 차분 움직임 벡터가 0인 경우가 중복되지 않도록 부호 번호 테이블을 생성하여 차분 움직임 벡터를 부호하는 데 이용될 수 있다.
또한, 차분 움직임 벡터의 해상도가 최대 해상도를 나타내는 경우, 움직임 벡터 부호화 장치(5200)는 임의의 크기 영역 또는 움직임 벡터 단위로 최적의 차분 움직임 벡터의 해상도를 결정하여 부호화할 수 있다. 이때, 차분 움직임 벡터의 마지막 컴포넌트 또는 마지막 차분 움직임 벡터 이전에 나온 컴포넌트 또는 차분 움직임 벡터의 해상도가 최대 해상도와 같지 않은 경우, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 마지막 컴포넌트 또는 마지막 차분 움직임 벡터는 도 56에 예시한 부호 번호 테이블을 이용하여 최대 해상도에 대한 부호 번호를 이용하여 차분 움직임 벡터를 부호화할 수 있다. 즉, 차분 움직임 벡터의 해상도가 최대 해상도를 나타냄에도 불구하고, 차분 움직임 벡터의 마지막 이외의 컴포넌트 또는 마지막 차분 움직임 벡터에서 최대 해상도와 같은 해상도의 차분 움직임 벡터가 발생하지 않은 경우, 차분 움직임 벡터의 마지막의 컴포넌트 또는 마지막 차분 움직임 벡터는 최대 해상도임을 알 수 있으므로, 움직임 벡터 부호화 장치(5200)는 도 56에서 예를 들어 도시한 해상도 분류를 최대 해상도로 설정하여 차분 움직임 벡터를 부호화한다.
예를 들어, 움직임 벡터마다 차분 움직임 벡터의 해상도로서 최대 해상도를 부호화한다고 가정하면, 최대 해상도가 1/8로 결정된 후 첫 번째 차분 움직임 벡터의 컴포넌트가 3/4인 경우, 도 53에 의해 결정되는 부호 번호는 '6'이 된다. 하지만, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 마지막 컴포넌트 이전의 차분 움직임 벡터의 컴포넌트의 해상도가 1/8인 차분 움직임 벡터가 발생하지 않았으므로, 차분 움직임 벡터의 마지막 컴포넌트에 대해서는 도 56에 도시한 부호 번호 테이블에 의해 1/8 해상도 분류로 부호화한다. 따라서, 차분 움직임 벡터의 마지막 컴포넌트가 5/8인 경우, 부호 번호는 '3'이 된다.
한편, 차분 움직임 벡터의 해상도를 차분 움직임 벡터보다 먼저 부호화할 수도 있다. 이 경우, 임의의 해상도에만 차분 움직임 벡터의 컴포넌트가 0인 부호번호를 두고 나머지 해상도에는 차분 움직임 벡터의 컴포넌트에 0이 없는 부호번호 테이블을 이용하여 부호화할 수 있다. 왜냐하면, 임의의 해상도에만 차분 움직임 벡터가 0인 경우를 발생하도록 하는 경우 다른 해상도에서는 차분 움직임 벡터가 0인 경우가 발생하지 않으므로 차분 움직임 벡터가 0인 부분을 제외하고 부호번호 테이블을 만들어 부호화하면 부호 번호의 크기를 줄일 수 있다.
예를 들면, 움직임 벡터의 해상도를 차분 움직임 벡터보다 먼저 부호화하고, 해상도로 1, 1/2, 1/4, 1/8의 4가지를 사용하며, 임의의 해상도가 1/8인 경우, 도 57과 같이 1/8해상도에만 모션벡터 예측에러가 0인 테이블을 만들어 부호화할 수 있다.
또한, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 해상도를 부호화하는 데 있어서, 단항 코드(Unary Code), 트런케이티드 단항 코드(Trucated Unary Code), 익스포넨셜 골룸 코드(Exp-Golomb Code), 테그 트리(Tag Tree) 및 쿼드 트리(Quad Tree) 등 어떠한 이진 부호화 방법을 이용할 수 있다. 또한, 움직임 벡터 부호화 장치(5200)는 단항 코드(Unary Code), 트런케이티드 단항 코드(Trucated Unary Code), 익스포넨셜 골룸 코드(Exp-Golomb Code), 테그 트리(Tag Tree) 및 쿼드 트리(Quad Tree) 등을 이용하여 차분 움직임 벡터의 해상도를 이진화한 후, 주위의 차분 움직임 벡터의 해상도 또는 이진 비트 색인 번호로 현재 차분 움직임 벡터의 해상도의 확률 모델을 결정하여 이진 산술 부호화할 수도 있다. 또한, 어떠한 이진 부호화를 이용하는 경우, 현재까지 부호화 차분 움직임 벡터의 해상도들의 확률 중 가장 높은 확률 순으로 부호 번호를 작은 것으로 할당하거나, 주위의 차분 움직임 벡터의 해상도의 분포를 기초로 가장 높은 확률의 해상도에 짧은 부호 번호 또는 부호 비트를 할당하여 부호화할 수 있다. 이러한 엔트로피 부호화 방법으로서는 가변 길이 부호화(VLC: Variable Lenth Coding)또는 산술 부호화 방법이 이용 될 수 있다. 이때, 산술 부호화 방법을 사용하는 경우, 주위의 신텍스(Syntax)의 분포를 이용하여 현재 신텍스를 부호화할 때의 확률 모델을 달리하여 부호화 할 수 있다.
또한, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터를 임의의 해상도의 부호 번호로 변환한 값이 임의의 임계값보다 큰 경우에만 차분 움직임 벡터의 최적의 해상도에 따라 다른 부호 번호와 해상도를 부호화할 수 있다.
도 58은 본 발명의 일 실시예에 따른 움직임 벡터 부호화 방법을 설명하기 위한 순서도이다.
본 발명의 일 실시예에 따른 움직임 벡터 부호화 방법에 따르면, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 해상도를 결정하고(S5810), 결정된 차분 움직임 벡터의 해상도에 따라 움직임 벡터와 예측 움직임 벡터 간의 차인 차분 움직임 벡터를 부호화하며(S5820), 결정된 차분 움직임 벡터의 해상도를 부호화한다(S5830)
또한, 움직임 벡터 부호화 장치(5200)는 참조 픽처의 해상도 및 차분 움직임 벡터의 후보 해상도를 추가로 부호화할 수 있다.
단계 S5810에서, 움직임 벡터 부호화 장치(5200)는 복수 개의 후보 해상도 중 최소의 부호화 비용을 가지는 후보 해상도를 차분 움직임 벡터의 해상도로 결정할 수 있다.
단계 S5810에서, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 컴포넌트마다 독립적으로 해상도를 결정할 수 있다.
단계 S5830에서, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터가 0이 아닌 경우에만 차분 움직임 벡터의 해상도를 부호화할 수 있다.
단계 S5830에서, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 해상도 분류를 차분 움직임 벡터의 해상도로서 부호화할 수 있다.
단계 S5820에서, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 후보 해상도마다 차분 움직임 벡터에 부호 번호가 할당된 부호 번호 테이블을 이용하여 차분 움직임 벡터를 부호화할 수 있다.
단계 S5820에서, 움직임 벡터 부호화 장치(5200)는 소정의 영역 단위로 차분 움직임 벡터를 부호화하되, 소정의 영역 내의 마지막 차분 움직임 벡터 또는 마지막 차분 움직임 벡터의 컴포넌트 이전까지의 차분 움직임 벡터의 해상도 또는 차분 움직임 벡터의 컴포넌트의 해상도가 최대 해상도가 아닌 경우, 다른 부호 번호 테이블을 이용하여 마지막 차분 움직임 벡터 또는 마지막 차분 움직임 벡터의 컴포넌트를 부호화할 수 있다.
단계 S5820에서, 움직임 벡터 부호화 장치(5200)는 차분 움직임 벡터의 후보 해상도 분류마다 차분 움직임 벡터에 부호 번호가 할당된 부호 번호 테이블을 이용하여 차분 움직임 벡터를 부호화할 수 있다. 여기서, 부호 번호 테이블은 차분 움직임 벡터의 후보 해상도 분류 간에 차분 움직임 벡터의 값이 0인 경우를 제외한 나머지 값이 중복되지 않도록 구성될 수 있다. 또한, 부호 번호 테이블은 차분 움직임 벡터의 후보 해상도 분류 간에 차분 움직임 벡터의 값이 중복되지 않도록 구성될 수 있다.
도 10은 본 발명의 실시예에 따라 움직임 벡터 해상도를 쿼드 트리 구조로 계층적으로 표현한 예시도이다.
10A는 하나의 픽처 내에서 여러 움직임 벡터 해상도를 가지는 영역들을 나타낸 것이다. 10A에서 각 영역들은 16X16 크기의 매크로블록들일 수 있으며, 각 영역 내에 표시된 숫자는 각 영역의 움직임 벡터 해상도를 나타낸다. 10B는 10A에 나타낸 각 영역 중 동일한 움직임 벡터 해상도를 가지는 영역끼리 묶어 나타낸 것이다. 10C는 10B와 같이 묶여진 영역들의 움직임 벡터 해상도를 쿼드 트리 구조로 계층적으로 나타낸 것이다. 10C에서, 최하위 노드가 가리키는 영역의 크기는 16X16 크기의 매크로블록이고 쿼드 트리의 계층의 최대 개수는 4이므로, 이와 같은 정보는 부호화되어 해당 영역에 대한 헤더에 포함된다.
도 11은 본 발명의 실시예에 따라 쿼드 트리 구조로 계층적으로 표현된 움직임 벡터 해상도가 부호화된 결과를 나타낸 예시도이다.
10C에 나타낸 쿼드 드리 구조의 움직임 벡터 해상도를 부호화하면 도 11에 도시한 바와 같은 최종 비트를 얻을 수 있다. 노드가 분할되었는지 여부를 하나의 비트로 부호화하는데, 예를 들어 비트값이 '1'인 경우에는 해당 노드가 하위 계층으로 분할되었음을 나타내고 비트값이 '0'인 경우에는 해당 노드가 하위 계층으로 분할되지 않았음을 나타낸다.
10C에서, 레벨 0의 노드에 대해서는 하위 계층으로 분할되었으므로 비트값 '1'로 부호화한다. 분할된 레벨 1의 첫 번째 노드는 1/2 해상도로 더 이상 분할되지 않았으므로 비트값 '0'으로 부호화하고 움직임 벡터 해상도 1/2을 부호화한다. 레벨 1의 두 번째 노드는 하위 계층으로 분할되었으므로 비트값 '1'로 부호화한다. 레벨 1의 세 번재 노드는 하위 계층으로 분할되지 않았으므로 비트값 '0'으로 부호화하고 움직임 벡터 해상도 1/4을 부호화한다. 레벨 1의 마지막 네 번째 노드는 하위 계층으로 분할되었으므로 비트값 '1'로 부호화한다. 같은 방식으로 레벨 2의 각 노드들을 부호화하고, 레벨 3에서는 헤더에서 최대 계층의 개수가 3 개로 지정되었으므로 더 이상의 하위 계층은 없음을 알 수 있으므로 각 움직임 벡터 해상도만을 부호화한다. 이와 같이 10A에 나타낸 영역에 대한 움직임 벡터 해상도가 쿼드 트리 구조로 계층적으로 부호화된 최종 비트는 도 11에 나타낸 바와 같이 생성될 수 있다.
최종 비트에 나타낸 1/2, 1/4, 1/8과 같은 움직임 벡터 해상도는 그를 나타내는 비트로 부호화된 것을 의미하지만, 설명의 편의를 위해 비트값으로 나타내지는 않았다. 움직임 벡터 해상도는 구현 방식에 따라 다양한 방법으로 비트값으로 표현될 수 있다. 예컨데, 사용가능한 움직임 벡터 해상도가 2가지이면 1비트 플래그로 지시될 수 있고, 사용가능한 움직임 벡터 해상도가 4가지 이하이면 2비트 플래그로 나타낼 수 있다.
만약 슬라이스 헤더에 최대 계층의 개수와 최하위 노드가 가리키는 영역의 크기가 지정되었다면, 이와 같이 생성된 해상도 식별 플래그 또는 해상도 정보는 슬라이스 데이터의 필드에 포함될 수 있다. 후술할 영상 복호화 장치에서는 비트스트림에서 해상도 식별 플래그 또는 해상도 정보를 추출하고 복호화하여 각 영역의 움직임 벡터 해상도를 복원할 수 있다.
또한, 도 10을 통해 나타낸 예시에서는, 노드가 하위 계층으로 분할되었음(즉, 4개의 구역으로 분할됨) 또는 분할되지 않았음의 두 가지만 예를 들었으나, 도 20에 도시한 바와 같이, 하위 계층으로 분할되지 않았음, 가로로 긴 두 개의 영역으로 나누어짐, 세로로 긴 두 개의 영역으로 나누어짐, 4 개의 구역으로 나누어짐과 같이 다양한 방식으로 노드를 하위 계층으로 분할할 수 있다.
또한, 해상도 부호화기(940)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도를 이용하여 예측되는 움직임 벡터 해상도를 이용하여 부호화하여 해상도 식별 플래그 또는 해상도 정보를 생성할 수 있다. 예를 들어, 영역이 64X64 크기의 블록이라고 가정하면, 해당 영역의 움직임 벡터 해상도는 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도를 이용하여 예측될 수 있다. 이와 같이 예측된 해당 영역의 움직임 벡터 해상도, 즉, 해상도 부호화기(940)는 예측 움직임 벡터 해상도가 해당 영역의 움직임 벡터 해상도와 동일한 경우에는 해당 영역에 대한 해상도 식별 플래그 또는 해상도 정보를 비트값 '1'로 부호화하고, 해당 영역의 예측 움직임 벡터 해상도와 움직임 벡터 해상도가 동일하지 않은 경우에는 해당 영역에 대한 해상도 식별 플래그 또는 해상도 정보를 비트값 '0'과 해당 영역의 움직임 벡터 해상도를 나타내는 비트값으로 부호화할 수 있다. 예를 들어, 해당 영역의 위쪽 영역과 왼쪽 영역의 해상도가 각각 1/2 해상도이고 해당 영역의 해상도도 1/2 해상도인 경우 해당 영역에 대한 해상도 식별 플래그 또는 해상도 정보를 비트값 '1'로 부호화하고 해당 영역의 움직임 벡터 해상도는 부호화하지 않고, 해당 영역의 위쪽 영역과 왼쪽 영역의 해상도가 각각 1/2 해상도이고 해당 영역의 해상도가 1/4 해상도인 경우 해당 영역에 대한 해상도 식별 플래그 또는 해상도 정보를 비트값 '0'로 부호화하고 해당 영역의 움직임 벡터 해상도를 추가적으로 부호화할 수 있다.
또한, 해상도 부호화기(940)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역 또는 움직임 벡터의 움직임 벡터 해상도의 런(Run)과 길이(Length)를 이용하여 부호화하여 해상도 식별 플래그 또는 해상도 정보를 생성할 수 있다.
도 12는 본 발명의 실시예에 따라 결정된 영역의 움직임 벡터 해상도를 나타낸 예시도이다.
도 12에서는 하나의 픽처 내에 영역들을 16X16 크기의 매크로블록으로 나타내고, 각 영역들의 움직임 벡터 해상도를 각 영역 내에 나타내었다. 도 12에 도시한 영역들의 움직임 벡터 해상도를 런과 길이를 이용하여 부호화하는 것을 예를 들면, 도 12에 도시한 영역들의 움직임 벡터 해상도를 래스터 스캔 방향으로 나열하면, 1/2의 움직임 벡터 해상도가 4번 연속으로 나오고, 1/4의 움직임 벡터 해상도가 1번 나오며, 1/8의 움직임 벡터 해상도가 2 번 연속으로 나오며, 1/2의 움직임 벡터 해상도가 4번 연속으로 나오므로(이후의 움직임 벡터 해상도는 생략함), 각 영역의 움직임 벡터 해상도를 런과 길이로 표현하면, (½, 4), (¼, 1), (⅛, 2), (½, 4), … 와 같이 표현될 수 있다. 따라서, 해상도 부호화기(940)는 런과 길이로 표현된 각 영역의 움직임 벡터 해상도를 부호화하여 비트값으로 표현함으로써 해상도 식별 플래그 또는 해상도 정보를 생성할 수 있다.
또한, 해상도 부호화기(940)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 태그 트리를 이용하여 계층적으로 부호화하여 해상도 식별 플래그 또는 해상도 정보를 생성할 수 있다. 이때, 해상도 부호화기(940)는 태그 트리의 계층의 최대 개수 및 최하위 노드가 가리키는 영역의 크기를 나타내는 식별자를 헤더에 포함시킬 수 있다.
도 13은 본 발명의 실시예에 따라 움직임 벡터 해상도를 태그 트리 구조로 계층적으로 표현한 예시도이다.
도 13은 영상의 일부 영역 내의 각 영역마다 결정된 움직임 벡터 해상도를 태그 트리 구조로 계층적으로 나타낸 것이다. 여기서, 각 영역은 16X16 크기의 매크로블록이라고 가정한다.
*도 13에서, 레벨 3의 첫 번째 4 개의 영역의 움직임 벡터 해상도 중 최소값은 1/2이므로 레벨 2의 첫 번째 영역의 움직임 벡터 해상도는 1/2이 된다. 이러한 방법으로 영역들을 계층의 개수만큼 계층적으로 묶은 다음, 각 상위의 계층에서 하위 계층으로 부호 비트를 생성하여 부호화한다.
도 14는 본 발명의 실시예에 따라 태그 트리 구조로 계층적으로 표현된 움직임 벡터 해상도를 부호화한 결과를 나타낸 예시도이다.
부호 비트를 생성하는 방법은 상위 계층과 현재 계층의 움직임 벡터 해상도의 번호의 차이를 '0'의 연속으로 표현한 후 마지막 비트의 비트값을 '1'로 표현한다. 여기서, 최상위 계층의 경우에는 상위 계층의 움직임 벡터 해상도의 번호를 '0', 1/2의 움직임 벡터 해상도의 번호를 '1', 1/4의 움직임 벡터 해상도의 번호를 '2', 1/8의 움직임 벡터 해상도의 번호를 '3'으로 각각 가정하고, 도 13과 같은 영역들의 움직임 벡터 해상도를 태그 트리 구조로 계층적으로 부호화하면 도 14와 같이 해상도 식별 플래그 또는 해상도 정보가 생성될 수 있다. 여기서, 각 움직임 벡터 해상도에 부여된 번호는 변경될 수 있다.
도 14에서, 각 영역에 표현된 (0,0), (0,1) 등은 각 영역을 식별하기 위한 참조 부호이고, '0111', '01' 등은 각 영역의 움직임 벡터 해상도가 부호화된 해상도 식별 플래그 또는 해상도 정보의 비트값을 나타낸다.
(0,0)으로 식별되는 영역의 해상도 식별 플래그 또는 해상도 정보의 경우를 살펴보면, 레벨 0에서 상위 계층의 움직임 벡터 해상도의 번호는 '0'이고 레벨 1에서 1/2의 움직임 벡터 해상도의 번호는 '1'이므로, 레벨 1과 레벨 0의 번호의 차이값은 '1'이 되고 '1'을 부호화 비트로 변환하면 '01'이 된다. 다시 레벨 1에서 상위 계층(레벨 0)과의 움직임 벡터 해상도의 번호의 차이값은 '0'이 되므로 부호화 비트는 '1'이 된다. 다시 레벨 2에서 상위 계층(레벨 1)과의 움직임 벡터 해상도의 번호의 차이값은 '0'이 되므로 부호화 비트는 '1'이 된다. 다시 레벨 3에서 상위 계층(레벨 2)과의 움직임 벡터 해상도의 번호의 차이값은 '0'이 되므로 부호화 비트는 '1'이 되어, 최종적으로 (0,0)으로 식별되는 영역의 움직임 벡터 해상도의 부호화 비트는 '0111'이 된다.
(0,1)로 식별되는 영역의 해상도 식별 플래그 또는 해상도 정보의 경우를 살펴보면, 레벨 0, 레벨 1과 레벨 2는 (0,0)으로 식별되는 영역의 해상도 식별 플래그 또는 해상도 정보에 이미 반영되어 있으므로, 레벨 3에서 상위 계층(레벨 2)과의 움직임 벡터 해상도의 번호의 차이값인 '1'을 부호화하면 되고 그에 따른 부호화 비트는 '01'이 된다. 따라서, (0,1)로 식별되는 영역에서는 '01'만이 해당 영역의 해상도 식별 플래그 또는 해상도 정보로서 생성된다.
(0,4)로 식별되는 영역의 해상도 식별 플래그 또는 해상도 정보의 경우를 살펴보면, 레벨 0은 (0,0)으로 식별되는 영역의 해상도 식별 플래그 또는 해상도 정보에 이미 반영되어 있으므로, 전술한 방법과 같은 방법으로 레벨 1, 레벨 2와 레벨 3만을 부호화하여 부호화 비트는 '0111'이 된다.
또한, 해상도 부호화기(940)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도의 빈도수에 따라 움직임 벡터 해상도에 할당되는 비트수를 변경하여 부호화하여 해상도 식별 플래그 또는 해상도 정보를 생성할 수 있다. 이를 위해, 해상도 부호화기(940)는 영역 단위로 직전 영역까지의 움직임 벡터 해상도의 발생 빈도수에 따라 해당 영역의 움직임 벡터 해상도에 할당하는 비트수를 변경하여 부호화할 수도 있고, 복수 개의 영역들을 포함하는 부분 영역 단위로 직전 부분 영역의 움직임 벡터 해상도의 발생 빈도수 또는 직전 부분 영역까지의 움직임 벡터 해상도의 발생 빈도수에 따라 해당 부분 영역의 움직임 벡터 해상도에 할당하는 비트수를 변경하여 부호화할 수도 있다. 이를 위해, 해상도 부호화기(940)는 영역 단위 또는 부분 영역 단위로 움직임 벡터 해상도의 빈도수를 계산하고, 계산된 움직임 벡터 해상도의 빈도수가 큰 순서대로 작은 번호를 할당하며, 할당된 작은 번호의 움직임 벡터 해상도에 작은 비트수를 할당하여 각 영역의 움직임 벡터 해상도를 부호화할 수 있다.
예를 들어, 해상도 부호화기(940)는 영역 단위로 직전 영역까지의 움직임 벡터 해상도의 발생 빈도수에 따라 비트수를 변경하는 경우에는, 직전 영역까지의 모든 영역에서 1/2의 움직임 벡터 해상도가 10번 발생되었고, 1/4의 움직임 벡터 해상도가 15번 발생되었고, 1/8의 움직임 벡터 해상도가 8번 발생되었다면, 1/4의 움직임 벡터 해상도에 가장 작은 번호(예를 들어, 1번)를 부여하고, 1/2의 움직임 벡터 해상도에 그 다음 작은 번호(예를 들어, 2번)를 부여하고, 1/8의 움직임 벡터 해상도에 제일 큰 번호(예를 들어, 3번)을 부여한 후, 작은 번호 순서대로 작은 비트를 할당한 후, 움직임 벡터 해상도를 부호화하고자 하는 영역의 움직임 벡터 해상도가 1/4 화소 단위라면, 가장 작은 비트를 할당하여 해당 영역에 대해 1/4의 움직임 벡터 해상도를 부호화할 수 있다.
또한, 해상도 부호화기(940)는 영역 그룹 단위마다 이전까지의 영역 그룹의 움직임 벡터 해상도의 발생 빈도수에 따라 비트수를 변경하여 부호화하는 경우에는, 이전까지의 영역 그룹의 각 영역들의 움직임 벡터 해상도의 발생 빈도수를 업데이트하여 발생 빈도수가 큰 순서대로 작은 번호를 할당하고 작은 번호 순서대로 작은 비트수를 할당하여 움직임 벡터 해상도를 부호화하고자 하는 영역 그룹의 각 영역의 움직임 벡터 해상도를 부호화할 수 있다. 영역 그룹은 쿼드 트리, 쿼드 트리 묶음, 태그 트리, 태그 트리 묶음, 매크로블록, 매크로블록 묶음, 임의의 크기의 영역이 될 수 있다. 예를 들면, 영역 그룹을 매크로블록 2 개로 지정한 경우, 매크로블록 2 개마다 움직임 벡터 해상도의 발생 빈도수를 업데이트하여 움직임 벡터 해상도의 비트수를 할당하거나, 영역 그룹을 쿼드 트리 4 개로 지정한 경우, 쿼드 트리 4 개마다 움직임 벡터 해상도의 발생 빈도수를 업데이트하여 움직임 벡터 해상도의 비트수를 할당한다.
또한, 해상도 부호화기(940)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 부호화 방법을 달리할 수 있다. 즉, 주위 영역 또는 영역 그룹의 움직임 벡터 해상도의 분포에 따라 해당 영역의 해상도가 될 확률이 가장 높은 해상도에 가장 짧은 비트수가 할당된다. 예를 들면, 해당 영역의 왼쪽 영역의 움직임 벡터 해상도가 1/2이고 위쪽 영역의 움직임 벡터 해상도가 1/2인 경우, 해당 영역의 움직임 벡터 해상도는 1/2이 될 확률이 가능 높으므로 1/2 움직임 벡터 해상도에 가장 짧은 비트수가 할당되어 부호화된다. 또 다른 예로, 해당 영역의 왼쪽 영역의 움직임 벡터 해상도가 1/4이고 왼쪽위 영역의 움직임 벡터 해상도가 1/2이고 위쪽 영역의 움직임 벡터 해상도가 1/2이고 오른쪽위 영역의 움직임 벡터 해상도가 1/2인 경우, 해당 영역의 움직임 벡터 해상도의 확률을 1/2, 1/4, 1/8 등의 순서와 같이 확률이 높은 순으로 짧은 비트수가 할당되어 부호화된다.
또한, 해상도 부호화기(940)는 산술 부호화로 엔트로피 부호화할 때, 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 이진화 비트열의 생성 방법을 달리하고, 확률 모델도 주위 영역의 움직임 벡터 해상도의 분포 및 현재까지 발생한 움직임 벡터 해상도의 확률에 따라 달리 적용하여 산술 부호화 및 확률 업데이트를 수행한다. 또한, 비트의 위치에 따라 각기 다른 확률 모델을 사용하여 산술 부호화 및 확률 업데이트를 수행한다.
도 21을 참조하여 예를 들면, CABAC으로 엔트로피 부호화하고 부호화에 사용되는 움직임 벡터 해상도가 1/2, 1/4, 1/8과 같은 3 개의 움직임 벡터 해상도만 사용한다고 가정할 때, 해당 영역의 왼쪽 영역의 움직임 벡터 해상도가 1/2이고 해당 영역의 위쪽 영역의 움직임 벡터 해상도가 1/2인 경우, 1/2 움직임 벡터 해상도에 가장 짧은 이진화 비트열를 할당하고, 나머지 1/4 움직임 벡터 해상도와 1/8 움직임 벡터 해상도에는 지금까지 발생한 확률이 높은 순서로 짧은 이진화 비트를 할당한다. 이때, 1/4 움직임 벡터 해상도보다 1/8 움직임 벡터 해상도가 지금까지 발생한 확률이 높은 경우, 도 21과 같이 '00'인 비트열을 1/8 움직임 벡터 해상도에 할당하고, '01'인 비트열을 1/2 움직임 벡터 해상도에 할당하여 산술 부호화한다.
또한, 첫 번째 이진화 비트를 부호화할 때, 확률 모델을 4 가지의 확률 모델로 나누어 부호화할 수 있다. 4 가지의 확률 모델은 첫째, 왼쪽 영역과 위쪽 영역의 해상도가 모두 같고 지금까지의 가장 높은 확률의 해상도와 같은 경우의 확률 모델, 둘 째, 왼쪽 영역과 위쪽 영역의 해상도가 모두 같고 지금까지의 가장 높은 확률의 해상도와 다른 경우의 확률 모델, 셋째, 왼쪽 영역과 위쪽 영역의 해상도가 모두 다르고 지금까지의 가장 높은 확률의 해상도와 왼쪽 영역 또는 위쪽 영역의 해상도와 같은 해상도가 있는 경우의 확률 모델, 넷째, 왼쪽 영역과 위쪽 영역의 해상도와 지금까지의 가장 높은 확률의 해상도가 모두 다른 경우의 확률 모델 등으로 구분될 수 있다. 두 번째 이진화 비트를 부호화할 때, 확률 모델을 2 가지의 확률 모델로 나누어 부호화할 수 있다. 2 가지의 확률 모델은 첫째 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도가 모두 다르고 지금까지의 가장 높은 확률의 움직임 벡터 해상도와 왼쪽 영역 또는 위쪽 영역의 움직임 벡터 해상도와 같은 움직임 벡터 해상도가 있는 경우의 확률 모델, 둘째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도와 지금까지의 가장 높은 확률의 해상도가 모두 다른 경우의 확률 모델로 구분될 수 있다.
또 다른 예를 들면, CABAC를 이용하여 부호화하고, 부호화에 사용되는 움직임 벡터 해상도가 1/2, 1/4, 1/8과 같이 3 개의 움직임 벡터 해상도만 사용하고, 지금까지 발생한 확률이 가장 높은 움직임 벡터 해상도가 1/4인 경우, 1/4 움직임 벡터 해상도에 가장 짧은 이진화 비트열인 '1'을 할당하고, 나머지 1/2 움직임 벡터 해상도와 1/8 움직임 벡터 해상도에 각각 '00'과 '01'을 할당 한다. 또한, 첫 번째 이진화 비트를 부호화할 때, 확률모델을 3 가지의 확률 모델로 나누어 부호화할 수 있다. 3 가지의 확률 모델은 첫째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도가 지금까지 발생한 확률이 가장 높은 해상도와 같은 경우의 확률 모델, 둘째, 해당 영역의 왼쪽 영역과 위쪽 영역의 해상도 중 하나만 지금까지 발생한 확률이 가장 높은 해상도와 같은 경우의 확률 모델, 셋째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도와 지금까지 발생한 확률이 가장 높은 움직임 벡터 해상도와 모두 다른 경우의 확률 모델로 구분될 수 있다. 두 번째 이진화 비트를 부호화할 때, 확률 모델을 6 가지의 확률 모델로 나누어 부호화할 수 있다. 6 가지의 확률 모델은 첫째, 해당 영역의 왼쪽 영역과 위쪽 영역의 해상도가 모두 1/8 움직임 벡터 해상도인 경우의 확률 모델, 둘째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도가 모두 1/2 움직임 벡터 해상도인 경우의 확률 모델, 셋째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도가 모두 1/4 움직임 벡터 해상도인 경우의 확률 모델, 넷째, 해당 영역의 왼쪽 영역과 위쪽 영역의 해상도 중 하나는 1/8 움직임 벡터 해상도이고 다른 하나는 1/4 움직임 벡터 해상도인 경우의 확률 모델, 다섯째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도 중 하나는 1/2 움직임 벡터 해상도이고 다른 하나는 1/4 움직임 벡터 해상도인 경우의 확률 모델, 여섯째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도 중 하나는 1/8 움직임 벡터 해상도이고 다른 하나는 1/2 움직임 벡터 해상도 일 경우의 확률 모델로 구분될 수 있다. 지금까지 발생한 확률이 가장 높은 해상도는 이전의 영역까지 부호화된 해상도의 확률일 수도 있고, 임의의 영역의 확률이거나 소정의 기설정된 디폴트 해상도 일 수도 있다.
또한, 해상도 부호화기(940)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 영상 복호화 장치에서 미리 약속된 추정 방식에 따라 추정할 수 있는지 여부를 판단하여, 움직임 벡터 해상도를 추정할 수 있는 영역에 대해서는 추정 가능함을 나타내는 식별자를 부호화하여 해상도 식별 플래그 또는 해상도 정보를 생성하고, 움직임 벡터 해상도를 추정할 수 없는 영역에 대해서는 추정 불가능함을 나타내는 식별자와 해당 영역의 움직임 벡터 해상도를 부호화하여 해상도 식별 플래그 또는 해상도 정보를 생성할 수 있다.
즉, 해상도 부호화기(940)는 어느 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 부호화하고자 하는 경우, 여러 개의 움직임 벡터 해상도를 적용하여 해당 영역의 움직임 벡터와 예측 움직임 벡터를 계산하고 그 차분 벡터를 부호화하고, 차분 벡터를 복호화하여 복원된 차분 벡터를 다시 각각의 해상도를 최적의 해상도로 가정하고 움직임 벡터를 각각의 해상도 마다 복호화한다. 각 해상도가 최적의 해상도로 가정하고 복원된 움직임 벡터를 이용하여 해당 영역의 주위의 화소들의 움직임을 보상하였을 때 소정의 비용 함수에 따른 비용이 최소가 되는 움직임 벡터 해상도를 결정한다. 해상도 부호화기(940)는 이와 같이 결정된 움직임 벡터 해상도가 원래 부호화하고자 하는 해당 영역의 움직임 벡터 해상도(해당 영역의 최적의 움직임 벡터 해상도로서 결정된 움직임 벡터 해상도, 단 최적의 움직임 벡터 해상도가 항상 최적의 성능을 낸다는 것은 아니라 움직임 벡터 해상도를 결정하는 조건에서 최적으로 결정된 움직임 벡터 해상도를 나타내는 것임)와 동일한 경우에는 해당 영역의 움직임 벡터 해상도를 영상 복호화 장치에서 추정할 수 있음을 나타내는 식별자(예를 들면, '1')를 해당 영역의 해상도 식별 플래그 또는 해상도 정보로서 생성할 수 있으며, 이 경우 해당 영역의 움직임 벡터 해상도를 부호화하지 않는다. 결정된 움직임 벡터 해상도가 원래 부호화하고자 하는 해당 영역의 움직임 벡터 해상도와 동일하지 않은 경우에는 해당 영역의 움직임 벡터 해상도를 영상 복호화 장치에서 추정할 수 없음을 나타내는 식별자(예를 들면, '0')와 해당 영역의 원래의 움직임 벡터 해상도를 부호화하여 해당 영역의 해상도 식별 플래그 또는 해상도 정보로서 생성할 수 있다. 여기서, 소정의 비용 함수로서는 MSE(Mean Squre Error) 또는 SATD(Sum of Absolute Transformed Differences) 등 다양한 왜곡 함수가 이용될 수 있다.
또한, 해상도 부호화기(940)는 차분 벡터의 각 컴포넌트가 '0'인 경우에는 영역 또는 움직임 벡터의 해상도를 부호화하지 않을 수 있다. 차분 벡터의 각 컴포넌트가 '0'인 경우에는 예측 움직임 벡터를 움직임 벡터로 부호화하기 때문에 움직임 벡터 해상도를 부호화하지 않아도 된다.
도 15는 본 발명의 실시예에 따라 영역의 주위 화소들을 이용하여 움직임 벡터 해상도를 결정하는 과정을 설명하기 위한 예시도이다.
도 15를 참조하면, 해상도 부호화기(940)가 움직임 벡터 해상도를 부호화하고자 하는 영역에 대해 움직임 추정을 수행하여 결정한 최적의 움직임 벡터 해상도가 1/2의 움직임 벡터 해상도이고, 움직임 벡터가 (4,10)이며, 예측 움직임 벡터가 (2,7)인 경우, 차분 벡터는 (2,3)이 된다. 이때, 해상도 부호화기(940)는 영상 복호화 장치에서는 차분 벡터만을 복호화하여 복원할 수 있다고 가정하고, 움직임 벡터 해상도를 여러 개로 변화시켜 각각의 움직임 벡터 해상도에 따른 예측 움직임 벡터를 예측하여 각각의 움직임 벡터 해상도에 따른 움직임 벡터를 복원한 후, 현재 영역의 주위 화소들과 복원된 각각의 움직임 벡터 해상도에 따른 움직임 벡터에 의해 지시되는 영역의 주위 화소들 간의 왜곡이 최소가 되는 움직임 벡터 해상도를 결정한다.
일단 움직임 벡터 해상도가 1/4 화소 단위인 경우 예측 움직임 벡터가 (3,14)라면, 영상 복호화 장치에서 복원된 차분 벡터가 (2,3)이므로 복원되는 해당 영역의 움직임 벡터는 (5,17)이 된다. 또한, 움직임 벡터 해상도가 1/2 화소 단위인 경우 예측 움직임 벡터가 (2,7)이라면, 영상 복호화 장치에서 복원된 차분 벡터가 (2,3)이므로 복원되는 해당 영역의 움직임 벡터는 (4,10)이 된다. 이와 같은 방식으로 움직임 벡터 해상도가 1/8 화소 단위인 경우의 영상 복호화 장치에서 복원되는 해당 영역의 움직임 벡터도 계산된다.
이와 같은 각각의 움직임 벡터 해상도에 따라 복원되는 해당 영역의 움직임 벡터를 이용하여 참조 픽처에서 해당 영역의 움직임을 보상한 영역의 주위 화소들과 해당 영역의 주위 화소들 간의 왜율이 최소가 되는 해상도가 이전에 미리 결정한 최적의 움직임 벡터 해상도와 동일한 경우, 해상도 부호화기(940)는 움직임 벡터 해상도를 영상 복호화 장치에서 추정할 수 있음을 나타내는 식별자만을 부호화하여 해당 영역의 해상도 식별 플래그 또는 해상도 정보로서 생성하고 해당 영역의 움직임 벡터 해상도는 부호화하지 않는다.
해상도 결정기(930)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도에 따른 움직임 벡터의 예측 움직임 벡터 또는 차분 벡터의 크기가 임계값보다 큰 경우에는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 소정의 값으로 결정할 수 있다. 예를 들어, 어느 영역의 예측 움직임 벡터의 크기 또는 차분 벡터의 크기가 임계값보다 큰 경우에는 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도를 소정의 값 또는 임의의 값으로 결정하여 해당 영역의 움직임 벡터 해상도를 부호화하지 않을 수 있다. 또한, 어느 영역 또는 움직임 벡터의 주위 영역의 움직임 벡터의 크기가 크거나 해당 영역 또는 움직임 벡터의 움직임 벡터의 크기가 임계값보다 큰 경우에는 해당 영역의 움직임 벡터 해상도를 소정의 값 또는 임의의 값으로 결정하여 해당 영역의 움직임 벡터 해상도를 부호화하지 않을 수 있다. 이 경우, 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도는 어떠한 플래그가 없이도 임의의 해상도로 변경될 수 있다. 임계값은 미리 지정된 값이거나 입력되는 어떠한 값이 될 수도 있으며, 주위 블록의 움직임 벡터로부터 계산될 수도 있다.
해상도 결정기(930)는 참조 픽처 인덱스를 이용하여 현재 블록의 해상도를 알 수 있는 경우에는 해상도 식별 플래그 또는 해상도 정보를 생성하지 않고 참조픽처 인덱스를 부호화함으로써 해상도에 대한 정보를 부호화할 수도 있다.
예를 들어, 도 30과 같은 현재 픽처와 참조 픽처 간의 거리를 기준으로 참조픽처를 인덱싱하고 부호화할 수 있다. 예를 들어 참조픽처를 4장 쓴다고 가정하면 현재 픽처가 5번인 경우 인덱싱할 수 있는 참조 픽처의 후보는 도 31과 같이 인덱싱을 할 수 있다.
도 31은 참조픽처 번호 및 해상도에 따른 참조픽처 인덱스를 예시한 도면이다.
사용하는 해상도가 1/4, 1/8인 경우에, 도 31에서 예시하듯이 최적의 참조 픽처가 3번이고 해상도가 1/8인 경우였다면 참조 픽처 인덱스를 3으로 부호화할 수 있으며,복호화 장치에서는 참조 픽처 번호 3을 비트스트림에서 추출하여 참조 픽처가 3번이고 부호화기와 동일한 테이블을 이용하여 해상도가 1/8 임을 알 수 있다.
차분 벡터 부호화기(950)는 움직임 벡터 해상도에 따라 차분 벡터를 다르게 부호화할 수 있다. 즉, 움직임 벡터 해상도가 커지면 움직임 벡터의 크기도 커지므로 차분 벡터를 부호화하는 데 필요한 비트량도 커진다. 따라서, 움직임 벡터 해상도의 크기에 따라 차분 벡터를 다른 방식으로 부호화하여 비트량을 줄일 수 있다.
예를 들어, 차분 벡터 부호화기(950)가 UVLC를 이용하여 차분 벡터를 부호화하는 경우에는, K차 지수 골룸 코드를 이용하여 부호화할 수 있으며, 이때 영역마다 결정되는 움직임 벡터 해상도에 따라 지수 골룸 코드의 차수(K)를 변경할 수 있다. 예를 들어, UVLC를 이용하여 차분 벡터를 부호화하는 경우에는, 움직임 벡터 해상도가 1/4 화소 단위이면 코드의 차수 K는 '0'으로 설정될 수 있고 움직임 벡터 해상도가 1/8 화소 단위이면 코드의 차수 K는 '1'로 설정될 수 있다.
또한, 차분 벡터 부호화기(950)가 CABAC를 이용하여 차분 벡터를 부호화하는 경우에는, 단항/K차 지수 골룸 결합형 코드를 이용하여 부호화할 수 있으며, 이때 영역마다 결정되는 움직임 벡터 해상도에 따라 단항/K차 지수 골룸 결합형 코드의 차수(K)와 최대값(T)을 변경하여 부호화할 수 있다. 예를 들어, CABAC를 이용하여 차분 벡터를 부호화하는 경우에는, 움직임 벡터 해상도가 1/4 화소 단위이면 코드의 차수 K는 '3'으로 설정되고 최대값 T는 '6'으로 설정될 수 있고 움직임 벡터 해상도가 1/8 화소 단위이면 코드의 차수 K는 '5'로 설정되고 최대값 T는 '12'로 설정될 수 있다.
또한, 차분 벡터 부호화기(950)가 CABAC를 이용하여 차분 벡터를 부호화하는 경우에는, 영역마다 결정되는 움직임 벡터 해상도에 따라 누적 확률을 다르게 계산하여 부호화할 수 있다. 예를 들어, 영역들의 차분 벡터를 부호화할 때마다, 확률 모델을 영역마다 결정되는 움직임 벡터 해상도에 따라 각각 업데이트하고, 다른 영역의 차분 벡터를 부호화할 때에는 업데이트된 각 움직임 벡터 해상도에 따른 확률 모델을 이용할 수 있다. 즉, 어느 영역의 움직임 벡터 해상도가 1/2 화소 단위인 경우, 1/2 화소 단위의 확률 모델을 이용하여 차분 벡터를 부호화하고 1/2 화소 단위의 확률 모델을 업데이트하며, 어느 영역의 움직임 벡터 해상도가 1/8 화소 단위인 경우, 1/8 화소 단위의 확률 모델을 이용하여 차분 벡터를 부호화하고 1/8 화소 단위의 확률 모델을 업데이트할 수 있다.
또한, 차분 벡터 부호화기(950)는 각 영역의 차분 벡터를 계산하기 위해, 각 영역의 주위 영역의 움직임 벡터를 이용하여 각 영역의 움직임 벡터에 대한 예측 움직임 벡터를 예측할 수 있는데, 이때 주위 영역의 움직임 벡터 해상도와 각 영역의 움직임 벡터 해상도가 동일하지 않은 경우에는, 주위 영역의 움직임 벡터 해상도를 각 영역의 움직임 벡터 해상도로 변환하여 예측할 수 있다. 움직임 벡터 해상도로 변환할 때에는 반올림, 버림 또는 올림 등을 사용할 수도 있다. 여기서, 주위 영역은 인접 영역을 포함하는 개념으로 이해되어야 할 것이다.
도 16은 본 발명의 실시예에 따라 예측 움직임 벡터를 예측하는 과정을 설명하기 위한 예시도이다.
도 16에 도시한 예를 참조하면, 예측 움직임 벡터를 예측하고자 하는 영역의 주위 영역의 움직임 벡터가 (4,5), (10,7), (5,10)이고 변환할 때 반올림을 사용하면, 각 움직임 벡터의 해상도가 1/2, 1/8, 1/8인 경우, 예측하고자 하는 영역의 움직임 벡터의 해상도가 1/4이면 예측 움직임 벡터는 (5,5)이 될 수 있으며, 예측하고자 하는 영역의 움직임 벡터 해상도가 1/8이면 예측 움직임 벡터는 (10, 10)가 될 수 있다.
또한, 차분 벡터 부호화기(950)는 각 영역 중 하나 이상의 영역의 블록 모드가 스킵 모드(SKIP Mode)인 경우에는, 해당 영역의 주위 영역의 움직임 벡터 해상도 중 가장 높은 해상도로 움직임 벡터를 예측하고자 하는 영역의 움직임 벡터 해상도를 변환하여 예측할 수 있다. 도 16에 도시한 예를 참조하면, 예측하고자 하는 영역이 스킵 모드인 경우, 주위 영역의 움직임 벡터의 해상도 중에 가장 높은 해상도는 1/8이므로, 예측하고자 하는 영역의 해상도를 1/8로 가정하고 예측 움직임 벡터를 예측하면 (10,10)이 될 수 있다.
또한, 차분 벡터 부호화기(950)는 주위 영역의 움직임 벡터를 이용하여 예측하고자 하는 영역의 예측 움직임 벡터를 예측할 때, 임의의 해상도로 주위 영역의 움직임 벡터를 변환하여 예측할 수 있다. 이때, 임의의 움직임 벡터 해상도와 예측하고자 하는 영역의 움직임 벡터 해상도가 동일하지 않은 경우에는 예측 움직임 벡터를 예측하고자 하는 영역의 움직임 벡터 해상도로 변환하여 최종적인 예측 움직임 벡터를 얻을 수 있다. 도 16에 도시한 예를 참조하면, 임의의 움직임 벡터 해상도가 1/2 화소 단위이면 예측 움직임 벡터는 (3,3)으로 변환되며, 예측하고자 하는 영역의 움직임 벡터 해상도가 1/8 화소 단위라면 임의의 움직임 벡터 해상도와 동일하지 않으므로, 예측 움직임 벡터 (3,3)은 1/8 화소 단위로 변환되어 최종적인 예측 움직임 벡터는 (12,12)가 될 수 있다. 같은 방법으로, 예측하고자 하는 영역의 움직임 벡터 해상도가 1/4 화소 단위라면 최종적인 예측 움직임 벡터는 (6,6)이 될 수 있다.
도 17은 본 발명의 제1 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 방법을 설명하기 위한 순서도이다.
본 발명의 제1 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 방법은 영역 또는 움직임 벡터마다 움직임 벡터 해상도를 결정하고, 영역 또는 움직임 벡터마다 결정된 움직임 벡터 해상도에 따른 움직임 벡터를 이용하여 영상을 영역 단위로 인터 예측 부호화한다. 이를 위해, 본 발명의 제1 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 장치(900)는 영상의 영역 또는 움직임 벡터마다 움직임 벡터 해상도를 변경하는지 여부를 판단하여(S1710), 영역마다 움직임 벡터 해상도를 변경하는 경우, 영역 또는 움직임 벡터마다 움직임 벡터 해상도를 결정하고(S1720), 영역 또는 움직임 벡터마다 결정된 움직임 벡터 해상도에 따른 움직임 벡터를 이용하여 영상을 영역 단위로 인터 예측 부호화하며(S1730), 영역마다 움직임 벡터 해상도를 변경하지 않고 고정하는 경우, 영상의 모든 영역이나 일부 영역 내의 하위 영역에 대해 기설정된 디폴트 움직임 벡터 해상도에 따른 움직임 벡터를 이용하여 영상을 영역 단위로 인터 예측 부호화한다(S1740).
여기서, 영역마다 결정되는 움직임 벡터 해상도는 움직임 벡터의 x 컴포넌트와 y 컴포넌트별로 서로 다를 수 있다.
또한, 영상 부호화 장치(900)는 영역 또는 움직임 벡터마다 움직임 벡터 해상도를 결정하는지 여부를 나타내는 해상도 변경 플래그를 생성할 수 있다. 예를 들어, 영상 부호화 장치(900)는 단계 S1710에서 움직임 벡터 해상도가 변경되는 것으로 판단되는 경우 영역마다 움직임 벡터 해상도가 변경됨을 나타내는 해상도 변경 플래그(예를 들면, '1')를 생성하고, 단계 S1710에서 움직임 벡터 해상도가 변경되지 않고 고정되는 것으로 판단되는 경우 영역마다 움직임 벡터 해상도가 고정됨을 나타내는 해상도 변경 플래그(예를 들면, '0')를 생성할 수 있다. 반대로, 영상 부호화 장치(900)는 사용자 또는 외부로부터 입력되는 설정 정보에 따라 해상도 변경 플래그를 생성하고, 생성된 해상도 변경 플래그의 비트값을 토대로 단계 S1710과 같이 영역마다 움직임 벡터 해상도를 결정하는지 여부를 판단할 수도 있다.
또한, 영상 부호화 장치(900)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 부호화할 수 있다. 예를 들어, 영상 부호화 장치(900)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 동일한 움직임 벡터 해상도를 가지는 영역끼리 묶어 쿼드 트리 구조로 계층적으로 부호화하거나, 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도를 이용하여 예측되는 움직임 벡터 해상도를 이용하여 부호화하거나, 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 런과 길이를 이용하여 부호화하거나 영역마다 결정되는 움직임 벡터 해상도를 태그 트리를 이용하여 계층적으로 부호화하거나, 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도의 빈도수에 따라 움직임 벡터 해상도에 할당하는 비트수를 변경하여 부호화하거나, 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 영상 복호화 장치에서 미리 약속된 추정 방식에 따라 추정할 수 있는지 여부를 판단하여, 움직임 벡터 해상도를 추정할 수 있는 영역에 대해서는 추정 가능함을 나타내는 식별자를 부호화하며, 움직임 벡터 해상도를 추정할 수 없는 영역에 대해서는 추정 불가능함을 나타내는 식별자와 움직임 벡터 해상도를 함께 부호화할 수 있다. 여기서, 영상 부호화 장치(900)가 쿼드 트리 구조로 계층적으로 부호화하거나 태그 트리를 이용하여 계층적으로 부호화하는 경우에는 각각 쿼드 트리 계층의 최대 개수 및 쿼드 트리 계층의 최하위 노드가 가리키기는 영역 크기 또는 태그 트리 계층의 최대 개수 및 태그 트리 계층의 최하위 노드가 가리키는 영역 크기를 나타내는 식별자를 부호화하여 헤더에 포함시킬 수 있다.
또한, 영상 부호화 장치(900)는 영역마다 결정되는 움직임 벡터 해상도에 따른 움직임 벡터의 예측 움직임 벡터 또는 차분 벡터의 크기가 임계값보다 큰 경우에는 영역마다 결정되는 움직임 벡터 해상도를 소정의 값 또는 임의의 값으로 결정할 수 있다. 또한, 차분 벡터의 각 컴포넌트가 '0'인 경우에는 영역 또는 움직임 벡터의 해상도를 부호화하지 않을 수 있다.
또한, 영상 부호화 장치(900)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도에 따른 움직임 벡터와 예측 움직임 벡터 간의 차이인 차분 벡터를 부호화할 수 있다. 이때, 영상 부호화 장치(900)는 움직임 벡터 해상도에 따라 차분 벡터를 다르게 부호화할 수 있다. 이를 위해, 영상 부호화 장치(900)는 UVLC를 이용하여 차분 벡터를 부호화하는 경우에는, K차 지수 골룸 코드를 이용하여 부호화할 수 있으며, 이 경우 영역마다 결정되는 움직임 벡터 해상도에 따라 지수 골룸 코드의 차수(K)를 변경할 수 있다. 영상 부호화 장치(900)는 CABAC를 이용하여 차분 벡터를 부호화하는 경우에는, 단항/K차 지수 골룸 결합형 코드를 이용하여 부호화할 수 있으며, 이 경우 영역마다 결정되는 움직임 벡터 해상도에 따라 단항/K차 지수 골룸 결합형 코드의 차수(K)와 최대값(T)를 변경하여 부호화할 수 있다. CABAC를 이용하여 차분 벡터를 부호화하는 경우에는, 영역마다 결정되는 움직임 벡터 해상도에 따라 누적 확률을 다르게 계산하여 부호화할 수 있다.
또한, 영상 부호화 장치(900)는 각 영역의 주위 영역의 움직임 벡터를 이용하여 각 영역의 움직임 벡터에 대한 예측 움직임 벡터를 예측할 수 있으며, 이 경우 주위 영역의 움직임 벡터 해상도와 각 영역의 움직임 벡터 해상도가 동일하지 않은 경우에는, 주위 영역의 움직임 벡터 해상도를 각 영역의 움직임 벡터 해상도로 변환하여 예측할 수 있다.
또한, 영상 부호화 장치(900)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 부호화 방법을 달리할 수 있다.
또한, 영상 부호화 장치(900)는 산술 부호화로 엔트로피 부호화할 때, 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 이진화 비트열의 생성 방법을 달리 하고, 확률 모델도 주위 영역의 움직임 벡터 해상도의 분포 및 현재까지 발생한 움직임 벡터 해상도의 확률에 따라 달리 적용하여 산술 부호화 및 확률 업데이트를 수행한다. 또한, 비트의 위치에 따라 각기 다른 확률 모델을 사용하여 산술 부호화 및 확률 업데이트를 수행한다.
또한, 영상 부호화 장치(900)는 각 영역 중 하나 이상의 영역의 블록 모드가 스킵 모드인 경우에는, 주위 영역의 움직임 벡터 해상도 중 가장 높은 해상도로 예측하고자 하는 영역의 움직임 벡터 해상도를 변환하여 예측할 수 있다.
또한, 영상 부호화 장치(900)는 차분 움직임 벡터의 해상도 식별 플래그를 이용하여 차분 움직임 벡터의 컴포넌트 별로 부호화를 수행할 수도 있다. 예를 들어, 차분 움직임 벡터의 해상도를 1/4과 1/8을 사용하고, 현재 차분 움직임 벡터 해상도가 1/8이고 차분 움직임 벡터의 값이 (1/4, 1/8)인 경우, 부호화기는 차분 움직임 벡터 해상도 식별 플래그를 1/8로 부호화하고 도 61과 같은 차분 움직임 벡터의 부호 번호 테이블을 이용하여 차분 움직임 벡터의 컴포넌트 별로 부호화를 수행할 수 있다. 도 61을 참조하면, 차분 움직임 벡터의 x 컴포넌트는 (1) 테이블을 이용하고, y 컴포넌트는 (2) 테이블을 이용할 수 있다. 이 경우, 차분 움직임 벡터의 x 컴포넌트는 부호 번호 2, y 컴포넌트는 부호 번호 0을 부호화한다. 복호화기는 차분 움직임 벡터 해상도 식별 플래그 1/8을 비트스트림에서 추출하여 복호하고, 차분 움직임 벡터의 x 컴포넌트 부호 번호 2를 비트스트림에서 추출하고 도 61의 테이블 (1)을 이용하여 1/4을 복호하면 y 컴포넌트가 1/8 해상도임을 알 수 있다. 따라서, 비트스트림에서 추출한 y 컴포넌트의 부호 번호 0은 도 61의 테이블 (2)를 이용하여 복호하면 1/8로 복호할 수 있다.
또는 차분 움직임 벡터 해상도가 1/4이고 차분 움직임 벡터의 값이 (1/4, 3/4)인 경우, 영상 부호화 장치(900)는 차분 움직임 벡터 해상도 식별 플래그를 1/4로 부호화하고, 차분 움직임 벡터의 x 컴포넌트와 y 컴포넌트를 부호화할 때 도 61의 테이블 (3)을 이용하여 부호 번호를 (1, 3)으로 부호화한다. 복호화기는 비트스트림에서 차분 움직임 벡터 해상도 식별 플래그 1/4을 추출하고 복호하여, 비트스트림에서 추출한 차분 움직임 벡터의 x 컴포넌트와 y 컴포넌트의 부호 번호(1, 3)을 도 61의 테이블 (3)을 이용하여 (1/4, 3/4)로 복호화할 수 있다.
영상 부호화 장치(900)는 예측 움직임 벡터 해상도 식별 플래그를 이용하여 부호화를 수행할 수도 있다. 예를 들어, 움직임 벡터 해상도 지정 플래그가 (1/1, 1/2, 1/4, 1/8)을 나타내고 예측 움직임 벡터 해상도 식별 플래그를 부호화하는 경우, 도 62와 같이 블록 A의 해상도는 1/4이고, 블록 B의 해상도는 1/8이며, 블록 C의 해상도는 1/2이고, 블록 D의 해상도는 1/1일 수 있다. 예측 움직임 벡터 해상도가 1/4이고 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 블록 A의 움직임 벡터로 할 수 있다. 이것은 부호화기와 복호화기가 동일하게 구현할 수 있다. 이러한 경우, 차분 움직임 벡터는 도 63과 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 현재 블록 X의 해상도가 1/8이라면 예측 움직임 벡터는 해상도를 1/8로 변환한 블록 A의 움직임 벡터로 할 수 있다. 이러한 경우에는 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
만일, 주변 블록의 움직임 벡터가 소정의 해상도 변환하여 저장되어 있다면 예측 움직임 벡터 해상도와 소정의 해상도가 상이한 경우 주변 움직임 벡터의 해상도를 예측 움직임 벡터 해상도로 변환하여 예측 움직임 벡터를 산출 할 수 있다. 또는 주변 움직임 벡터를 이용하여 중간값을 취하고, 그 중간값을 예측 움직임 벡터 해상도로 변환하여 예측 움직임 벡터로 사용할 수 있다.
또는 현재 블록 X의 해상도 1/8이라고 해도 예측 움직임 벡터는 해상도를 변환하지 않은 블록 A의 움직임 벡터로 할 수도 있다. 이러한 경우 차분 움직임 벡터 부호 테이블은 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
다른 예로, 움직임 벡터 해상도 지정 플래그가 (1/4, 1/8)을 나타내고 예측 움직임 벡터 해상도 식별 플래그를 부호화하는 경우, 도 65와 같이 블록 A, B, D의 해상도는 1/4이고 블록 C의 해상도는 1/8일 수 있다. 예측 움직임 벡터 해상도가 1/4이고 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 전술한 수학식 11과 같이 계산할 수 있다. 이러한 경우 차분 움직임 벡터는 도 63의 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 예측 움직임 벡터 해상도와 해상도가 동일한 주변 움직임 벡터들을 이용하여 전술한 수학식 11과 같이 예측 움직임 벡터를 산출 할 수 있다. 이러한 경우 차분 움직임 벡터는 도 63의 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 예측 움직임 벡터 해상도가 1/4이고, 현재 블록 X의 해상도가 1/8이라면 예측 움직임 벡터는 수학식 11과 같이 계산하고 해상도를 1/8로 변환한 값을 사용할 수 있다. 이러한 경우, 차분 움직임 벡터는 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 예측 움직임 벡터 해상도가 1/8이고, 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 블록 C의 움직임 벡터의 해상도를 1/4로 변환한 값이 된다. 이러한 경우 차분 움직임 벡터는 도 63과 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
*도 32는 본 발명의 제2 실시예에 따른 적응적 움직임 벡터를 이용한 영상 부호화 장치(3200)를 도시한 도면이다.
본 발명의 제2 실시예에 따른 적응적 움직임 벡터를 이용한 영상 부호화 장치(3200)는 영상을 영역 단위로 부호화하는 장치로서, 인터 예측 부호화기(Inter Prediction Encoder, 3210), 해상도 지정 플래그 생성기(Resolution Change Flag Encoder, 3220), 해상도 결정기(Resolution Determiner, 3230), 해상도 부호화기(Resolution Encoder, 3240), 차분 벡터 부호화기(Differential Vector Encoder, 3250) 및 해상도 전환 플래그 생성기(3260)를 포함하여 구성될 수 있다. 한편, 해상도 지정 플래그 생성기(3220) 및 해상도 부호화기(3240), 차분 벡터 부호화기(3250), 해상도 전환 플래그 생성기(3260)는 반드시 모두가 영상 부호화 장치(3200)에 포함되어야 하는 것은 아니며, 구현 방식에 따라 선택적으로 포함될 수 있다.
인터 예측 부호화기(3210)는 영상의 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도(Motion Vector Resolution)에 따른 움직임 벡터를 이용하여 영상을 영역 단위로 인터 예측 부호화(Inter Prediction Encoding)한다. 이러한 인터 예측 부호화기(3210)는 도 1을 통해 전술한 영상 부호화 장치(100)로 구현될 수 있다. 여기서, 도 32의 해상도 부호화기(3240), 차분 벡터 부호화기(3250) 중에서 하나 이상의 구성요소가 추가로 포함되는 경우 추가로 포함되는 구성요소의 기능과 인터 예측 부호화기(3210) 내의 부호화기(150)의 기능이 중복되는 경우 부호화기(150)에서는 그 중복되는 기능이 생략될 수 있다. 또한 인터 예측 부호화기(3210) 내의 예측기(110)의 기능과 해상도 결정기(3230)의 기능이 중복되는 부분이 있는 경우 그 중복되는 기능은 예측기(110) 내에서는 생략될 수도 있다.
또한, 해상도 부호화기(3240), 차분 벡터 부호화기(3250) 중에서 추가되는 하나 이상의 구성요소는 도 32와 같이 인터 예측 부호화기(3210)와 별개의 구성요소로 구성될 수도 있지만 인터 예측 부호화기(3210) 내의 부호화기(150)와 일체로 구성될 수도 있다. 또한 해상도 지정 플래그 생성기(3220), 해상도 전환 플래그 생성기(3260)에서 발생한 플래그 정보는 각각 해상도 지정 플래그 생성기(3220), 해상도 전환 플래그 생성기(3260)에서 비트스트림으로 변환할 수도 있지만 비트스트림으로 변환하는 기능은 인터 예측 부호화기(3210) 내의 부호화기(150)가 담당할 수도 있다.
한편, 인터 예측 부호화기(3210), 해상도 부호화기(3240), 차분 벡터 부호화기(3250)의 기능은 도 9에서의 인터 예측 부호화기(910), 해상도 부호화기(940), 차분 벡터 부호화기(950)의 기능과 각각 동일 또는 유사할 수 있으므로 인터 예측 부호화기(3210), 해상도 부호화기(3240), 차분 벡터 부호화기(3250)에 대한 상세한 설명은 생략한다.
해상도 지정 플래그 생성기(3220)는 해상도의 적응성(Adaptive) 정도를 영상의 영역 또는 움직임 벡터마다 다르게 지정할 수 있다. 해상도 지정 플래그 생성기(3220)는 영상의 영역 또는 움직임 벡터마다 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도의 세트(set)를 지정하는 해상도 지정 플래그를 생성하여 비트스트림에 포함시킬 수 있다. 해상도 지정 플래그에 의해서 움직임 벡터 해상도 및/또는 차분 움직임 벡터의 해상도를 지정하는 영역은 블록, 매크로블록, 블록을 묶은 그룹, 매크로블록을 묶은 그룹, MxN과 같이 임의의 크기를 가지는 영역 등이 될 수 있다. 즉, 해상도 지정 플래그 생성기(3220)는 영상의 모든 영역 또는 일부 영역 내의 하위 영역들에 대해 사용 가능한 해상도를 나타내는 해상도 지정 플래그를 생성하여 비트스트림에 포함시킬 수 있다. 이러한 해상도 지정 플래그는 사용자에 의해 입력되는 설정 정보에 따라 결정되어 생성되거나 부호화할 영상을 분석하여 소정의 판단 기준에 따라 결정되어 생성될 수 있다. 이러한 해상도 지정 플래그는 비트스트림의 헤더에 포함될 수 있는데, 헤더는 픽처 파라미터 셋(Picture Parameter Set), 시퀀스 파라미터 셋(Sequence Parameter Set), 슬라이스 헤더(Slice Header), 코딩 유닛 파라미터 셋(Coding Unit Parameter Set) 등이 될 수 있다.
만일, 해상도 지정 플래그가 해상도 종류를 1/2, 1/4로 지정한다면 해상도 결정기(3230)가 결정하는 최적의 해상도 및 해상도 부호화기(3240)가 부호화하는 해상도 식별 플래그 또는 해상도 정보는 1/2, 1/4의 해상도 중에서 선택되고, 해상도 식별 플래그 또는 해상도 정보는 임의의 방법으로 부호화될 수 있다. 도 33은 지정된 해상도가 1/2, 1/4인 경우에 해상도 식별 플래그 또는 해상도 정보를 예시한 도면이다.
또한 해상도 식별 플래그 또는 해상도 정보는 Unary, CABAC, 쿼드 트리 부호화 등을 사용하여 부호화 할 수 있다. 예를 들어 CABAC으로 부호화 하는 경우 도 33의 표를 참조하여 이진 비트열을 생성한 다음 산술 및 확률 부호화할 수 있다. 예를 들어 확률 모델은 주변의 움직임 벡터 또는 블록의 해상도를 이용하여 3가지의 경우로 나눌 수 있다. 도 34은 현재 블록 X의 주변 블록인 A와 B와 C를 나타내며, 도 35은 조건에 따른 확률 모델을 예시한 도면이다.
만일, 해상도 지정 플래그가 해상도 종류를 1/2, 1/4, 1/8로 지정한다면 부호화되는 해상도 식별 플래그 또는 해상도 정보는 1/2, 1/4, 1/8의 해상도 중에서 선택되고, 해상도 식별 플래그 또는 해상도 정보는 임의의 방법으로 부호화될 수 있다. 도 36은 지정된 해상도가 1/2, 1/4, 1/8인 경우에 해상도 식별 플래그 또는 해상도 정보를 예시한 도면이다. 도 36을 참조하면 해상도 식별 플래그 또는 해상도 정보는 0 또는 10 또는 11이 될 수 있다.
여기서 해상도 식별 플래그 또는 해상도 정보는 Unary, CABAC, 쿼드 트리 부호화 등을 사용하여 부호화 할 수 있다. 예를 들어 CABAC을 부호화 하는 경우 도 36의 표를 참조하여 이진 비트열을 생성한 다음 산술 및 확률 부호화할 수 있다. 예를 들어 확률 모델은 이진 비트열의 색인(binidx)과 주변의 움직임 벡터 또는 블록의 해상도를 이용하여 총 6가지의 경우로 나눌 수 있다. 여기서 도 34와 같이 현재 블록 X의 주변 블록인 A와 B와 C를 나타내는 경우, 도 37은 조건에 따른 확률 모델을 예시한 도면이다.
한편, 해상도 지정 플래그 생성기(3220)가 발생하는 해상도 지정 플래그가 단일 해상도를 나타낼 수도 있다. 예를 들어, 해상도를 적응적으로 적용하지 않고 1/2로 고정하는 경우에 해상도 지정 플래그로 해당 영역의 해상도는 1/2의 해상도로 고정됨을 나타내도록 부호화할 수 있다.
또한, 복수개의 참조 픽처를 사용하는 경우, 해상도 지정 플래그를 부호화하지 않고 임의의 기준에 따라 참조 픽처마다 해상도의 적응성(adaptive) 정도(즉, 해상도 세트)를 다르게 할 수 있다. 예를 들어, 참조 픽처와 현재 픽처 간의 거리에 따라 해상도의 적응성 정도를 다르게 할 수 있다.
도 38 및 도 39는 현재 픽처와 참조 픽처 간의 거리에 따른 적응성 정도(즉, 해상도 세트)를 예시한 도면이다. 도 38에 도시하듯이, 현재 픽처와 참조 픽처 간의 거리가 복수개의 참조 픽처들 중 가장 가까운 경우 해상도는 1/1, 1/2, 1/4, 1/8 의 해상도 세트 중에서 최적의 해상도를 선택하고 해상도 식별 플래그 또는 해상도 정보를 부호화하고, 현재 픽처와 참조 픽처 간의 거리가 복수개의 참조 픽처들 중 가장 먼 경우 해상도는 1/2, 1/4의 해상도 세트 중에서 최적의 해상도를 선택하고 해상도 식별 플래그 또는 해상도 정보를 부호화하고, 현재 픽처와 참조 픽처 간의 거리가 복수개의 참조 픽처들 중 가장 멀지도 않고 가장 가깝지도 않다면, 해상도는 1/2, 1/4, 1/8의 해상도 세트 중에서 최적의 해상도를 선택하고 부호화 하도록 설정할 수 있다. 도 39를 참조하면 단일 해상도를 사용할 수도 있음을 알 수 있다.
또한, 참조 픽처 생성 시에 각 해상도 간의 SSD (Sum of Squared Difference) 등의 에러 측정 수단을 이용하여 해상도의 적응성 정도를 다르게 할 수 있다. 예를 들어, 사용 가능한 해상도가 1/1, 1/2, 1/4, 1/8인 경우, 참조 픽처를 보간(interpolation) 할 때, 먼저 1/1과 1/2의 해상도에 대하여 SSD 등의 에러 측정 수단을 이용하여 구한 에러값이 임의의 임계값(threshold)을 넘지 않는 경우 해상도 1/2은 사용하지 않도록 하고 임계값(threshold)을 넘는 경우 해상도 1/2을 사용하도록 설정할 수 있다. 그리고 1/2의 해상도를 사용하지 않도록 설정된 경우, 1/1과 1/4의 해상도에 대하여 SSD 등의 에러 측정 수단을 이용하여 구한 에러값이 임의의 임계값을 넘지 않는 경우 1/4을 사용하지 않고 에러값이 임의의 임계값을 넘는 경우 1/1과 1/4의 해상도를 모두 사용하도록 설정한다. 그리고 1/4의 해상도를 사용하도록 설정된 경우, 1/4과 1/8 의 해상도에 대하여 SSD 등의 에러 측정 수단을 이용하여 구한 에러값이 임의의 임계값을 넘지 않는 경우 1/8을 사용하지 않고 에러값이 임의의 임계값을 넘는 경우 1/1, 1/4, 1/8의 해상도를 모두 사용한다. 여기서, 임계값은 해상도 별로 또는 양자화 파라미터 별로 다를 수도 있고 동일할 수도 있다.
또한, 참조 픽처마다 해상도의 적응성 정도를 다르게 함을 부호화 할 수 있다. 예를 들어, 참조 픽처를 3개 사용하는 경우 도 40과 같이 소정의 해상도 세트마다 다른 참조픽처 인덱스 번호(도 9에서 해상도 세트 인덱스. 이는 참조픽처 번호일 수 있음)를 헤더에 저장하여 복호화 장치로 전송할 수 있다.
도 41은 참조픽처들이 부호화되는 구조를 예시한 도면이다.
한편, 해상도 지정 플래그 생성기(3220)는 참조 픽처로 사용될 픽처의 경우와 참조 픽처로 사용되지 않는 경우 해상도 세트를 다르게 둘 수 있다. 예를 들어 참조 픽처들이 도 41과 같은 구조로 부호화 되고 타임 레이어(Time layer)에 따라 TL0, TL1, TL2는 참조 픽처로 사용되는 픽처들이고 TL3의 픽처들은 참조 픽처로 사용되지 않는 픽처들인 것으로 가정한다. 이때, 해상도 지정 플래그 생성기(3220)에 의해 해상도 세트가 1/2, 1/4로 지정된 경우 참조 픽처별 해상도 세트를 도 42와 같이 둘 수 있다.
도 42를 참조하면 픽처 6번을 부호화 할 때의 해상도 세트는 1/2과 1/4이 되고, 이와 같이 결정된 해상도 세트에 대하여 임의의 영역 또는 움직임 벡터 단위로 해상도 식별 플래그 또는 해상도 정보 또는 해상도 지정 플래그가 부호화될 수 있다. 픽처 9번을 부호화 할 때는 해상도가 단일 해상도이므로 해상도 식별 플래그 또는 해상도 정보 또는 해상도 지정 플래그는 부호화 하지 않을 수 있다.
한편, 해상도 지정 플래그 생성기(3220)는 도 9의 설명에서 언급한 해상도 변경 플래그 생성기(920)의 기능을 모두 포함할 수 있다.
해상도 전환 플래그 생성기(3260)는 현재 해상도를 부호화할 영역의 주변 또는 이전 값과의 변화를 알려주는 해상도 전환 플래그를 발생한다.
도 43은 현재 블록의 해상도와 주변 블록의 해상도를 예시한 도면이다.
예를 들어 해상도 세트가 1/2, 1/4, 1/8 이고, 주변 블록의 해상도와 현재 최적의 해상도가 도 43과 같을 경우, 주변 블록의 해상도는 (1/8, 1/4, 1/4, 1/4) 이므로 빈도수가 가장 높은 해상도는 1/4이다. 또한 현재 블록 X의 최적의 해상도 역시 1/4 이므로 해상도 전환 플래그를 0으로 부호화한다. 이 경우에 복호화기에서는 비트스트림에서 해상도 전환 플래그를 추출하고, 해상도 전환 플래그가 0인 경우 주변 블록의 해상도 중에서 빈도수가 가장 높은 해상도인 1/4이 현재 블록 X의 해상도 임을 알 수 있다.
도 44는 현재 블록의 해상도와 주변 블록의 해상도의 다른 예를 도시한 도면이고, 도 45는 해상도에 따른 해상도 식별 플래그 또는 해상도 정보를 예시한 도면이다.
도 44에서 현재 블록 X의 최적의 해상도가 주변 블록의 해상도 중 빈도수가 가장 높은 1/4이 아니므로 해상도 전환 플래그는 1로 부호화하여 주변값과 다른 해상도임을 나타내고 현재 블록 X의 해상도는 도 45의 표를 이용하여 해상도 식별 플래그 또는 해상도 정보를 1로 부호화 한다. 현재 해상도가 1/4인 경우 전환되는 해상도가 1/4이 선택될 가능성은 없으므로 해상도 1/4의 경우에는 해상도 식별 플래그 또는 해상도 정보를 부여하지 않는다.
도 46은 현재 블록의 해상도와 주변 블록의 해상도를 예시한 도면이다.
예를 들어 해상도 세트가 1/2, 1/4 이고 도 46과 같이 부호화 할 경우 현재 블록 X의 이전 블록은 A 이므로 해상도 전환 플래그는 블록 A와 현재 블록 X의 해상도가 동일한지를 나타낼 수 있다. 따라서 위와 같은 경우 블록 A와 현재 블록 X의 해상도가 동일하지 않으므로 해상도 전환 플래그는 1이 될 수 있다. 또한 해상도 세트가 1/2과 1/4이므로 해상도 식별 플래그 또는 해상도 정보를 따로 부호화 하지 않고 해상도 전환 플래그 만으로도 현재 블록의 해상도가 1/4임을 알 수 있다.
도 47은 본 발명의 제2 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 방법을 도시한 도면이다.
도 47에 도시하듯이, 본 발명의 제2 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 방법은 해상도 지정 플래그 생성단계(S4702), 해상도 결정단계(S4704), 인터예측 부호화단계(S4706), 차분벡터 부호화단계(S4708), 해상도 부호화단계(S4710), 해상도 전환 플래그 생성단계(S4712)를 포함한다.
해상도 지정 플래그 생성단계(S4702)는 해상도 지정 플래그 생성기(3220)의 동작에, 해상도 결정단계(S4704)는 해상도 결정기(3230)의 동작에, 인터예측 부호화단계(S4706)는 인터예측 부호화기(3210)의 동작에, 차분벡터 부호화단계(S4708)는 차분벡터 부호화기(3250)의 동작에, 해상도 부호화단계(S4710)는 해상도 부호화기(3240)의 동작에, 해상도 전환 플래그 생성단계(S4712)는 해상도 전환 플래그 생성기(3260)의 동작에 각각 대응되므로 상세한 설명은 생략한다.
또한, 상기의 단계 중에서 영상 부호화 장치(3210)의 구성요소의 존재 여부에 따라 본 발명의 제2 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 부호화 방법 중에서 생략되는 단계가 존재할 수도 있다.
도 18은 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 장치를 간략하게 나타낸 블록 구성도이다.
본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 장치(1800)는 영상을 영역 단위로 복호화하는 장치로서, 해상도 변경 플래그 추출기(1810), 해상도 복호화기(1820), 차분 벡터 복호화기(1830) 및 인터 예측 복호화기(1840)를 포함하여 구성될 수 있다.
해상도 변경 플래그 추출기(1810)는 비트스트림으로부터 해상도 변경 플래그를 추출한다. 즉, 해상도 변경 플래그 추출기(1810)는 비트스트림의 헤더에서 움직임 벡터 해상도가 고정되는지 또는 영역마다 변경되어 결정되는지 여부를 나타내는 해상도 변경 플래그를 추출한다. 해상도 변경 플래그 추출기(1810)는 해상도 변경 플래그가 움직임 벡터 해상도가 고정되는 것을 나타내면, 비트스트림으로부터 부호화된 움직임 벡터 해상도를 추출하여 복호화함으로써 복원된 디폴트 움직임 벡터 해상도 또는 기 설정된 움직임 벡터 해상도로 인터 예측 복호화기(1840)가 헤더에서 정의된 모든 하위 영역에 대해 인터 예측 복호화하도록 제어하며, 차분 벡터 복호화기(1830)로 하여금 디폴트 움직임 벡터 해상도로 각 영역의 움직임 벡터를 복원하도록 제어한다. 해상도 변경 플래그 추출기(1810)는 해상도 변경 플래그가 움직임 벡터 해상도가 영역 또는 움직임 벡터마다 변경되어 결정됨을 나타내면, 해상도 복호화기(1820)로 하여금 헤더에 정의된 하위 영역의 각 영역 또는 움직임 벡터의 움직임 벡터 해상도를 복원하도록 제어하며, 인터 예측 복호화기(1840)로 하여금 헤더에서 정의된 하위 각 영역 또는 움직임 벡터에 대해 복원된 움직임 벡터 해상도로 인터 예측 복호화하도록 제어하며, 차분 벡터 복호화기(1830)로 하여금 복원된 움직임 벡터 해상도로 각 영역의 움직임 벡터를 복원하도록 제어한다.
또한, 해상도 변경 플래그 추출기(1810)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도에 따른 움직임 벡터의 예측 움직임 벡터 또는 차분 벡터의 크기가 임계값보다 큰 경우에는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 소정의 값으로 결정할 수 있다. 예를 들어, 어느 영역의 예측 움직임 벡터의 크기 또는 차분 벡터의 크기가 임계값보다 큰 경우에는 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도를 소정의 값 또는 임의의 값으로 결정하여 해당 영역의 움직임 벡터 해상도를 복호화하지 않을 수 있다. 또한, 어느 영역 또는 움직임 벡터의 주위 영역의 움직임 벡터의 크기가 크거나 해당 영역의 움직임 벡터의 크기가 임계값보다 큰 경우에는 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도를 소정의 값 또는 임의의 값으로 결정하여 움직임 벡터 해상도를 복호화하지 않을 수 있다. 이 경우, 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도는 어떠한 플래그가 없이도 임의의 해상도로 변경될 수 있다. 임계값은 미리 지정된 값이거나 입력되는 어떠한 값이 될 수도 있으며 주위 블록의 움직임 벡터부터 계산될 수도 있다.
해상도 복호화기(1820)는 해상도 변경 플래그 추출기(1810)에 의해 추출된 해상도 변경 플래그에 따라 비트스트림으로부터 부호화된 해상도 식별 플래그 또는 해상도 정보를 추출하고 복호화하여 영역마다의 움직임 벡터 해상도를 복원한다. 한편 이하의 설명에서 해상도 복호화기(1820)가 움직임 벡터 해상도를 복호하는 것으로 설명한다고 하더라도 이는 설명의 편의를 위한 것이며, 실제로는 움직임 벡터 해상도 또는 차분 움직임 벡터의 해상도를 복호하거나 둘 모두의 해상도를 복호할 수도 있다. 따라서, 해상도 식별 플래그 또는 해상도 정보가 나타내는 해상도는 움직임 벡터 해상도 또는 차분 움직임 벡터의 해상도이거나 움직임 벡터 해상도와 차분 움직임 벡터의 해상도에 동시에 사용될 수도 있다.
이를 위해, 해상도 복호화기(1810)는 동일한 움직임 벡터 해상도를 가지는 영역끼리 묶어 쿼드 트리 구조로 계층적으로 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원할 수 있다.
도 10 내지 도 12를 참조하면, 해상도 복호화기(1820)는 도 10에 도시한 바와 같은 쿼드 트리 형태를 도 12와 같이 각 영역별로 나누어 해상도 식별 플래그 또는 해상도 정보를 복호화하여 움직임 벡터 해상도를 복원한다. 예를 들어, 도 11과 같이 부호화되어 생성된 해상도 식별 플래그 또는 해상도 정보를 복호하는 경우, 첫 번째 비트는 '1'이므로 계층이 분할되었음을 알 수 있고, 두 번째 비트는 '0'이므로 레벨 1의 첫 번째 노드는 분할되지 않았음을 알 수 있으므로 다음 비트들을 복호화하여 1/2의 움직임 벡터 해상도를 복원한다. 이와 같은 방법으로, 도 10 및 도 11을 통해 전술한 바와 같은 부호화 방법과 동일하되 역순으로 레벨 1과 레벨 2에 대한 해상도 식별 플래그 또는 해상도 정보를 복호화하여 해당 영역들 또는 움직임 벡터들의 움직임 벡터 해상도를 복원하며, 레벨 3은 헤더에 포함된 최대 계층의 개수와 최하위 노드가 가리키는 영역의 크기를 나타내는 식별자에 의해 최대 계층의 개수가 3 개로 정의되어 있으므로, 더 이상의 하위 계층이 없다고 판단하여 각 영역들의 움직임 벡터 해상도만을 복원한다. 이를 위해, 해상도 복호화기(1810)는 쿼드 트리 계층의 최대 개수 및 쿼드 트리 계층의 최하위 노드가 가리키기는 영역 크기를 나타내는 식별자를 복호화하는데, 이러한 식별자는 비트스트림의 헤더에 포함된다.
또한, 전술한 예시에서는 노드가 하위 계층으로 분할되었음(즉, 4개의 구역으로 분할됨) 또는 분할되지 않았음의 두 가지만 예를 들었으나, 도 20에 도시한 바와 같이, 하위 계층으로 분할되지 않았음, 가로로 긴 두 개의 영역으로 나누어짐, 세로로 긴 두 개의 영역으로 나누어짐, 4 개의 구역으로 나누어짐과 같이 다양한 방식으로 노드를 하위 계층으로 분할할 수 있다.
또한, 해상도 복호화기(1820)는 각 영역 또는 움직임 벡터의 주위 영역의 움직임 벡터 해상도를 이용하여 예측되는 움직임 벡터 해상도를 이용하여 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원할 수 있다. 예를 들어, 해상도 복호화기(1820)는 비트스트림으로부터 각 영역 또는 움직임 벡터에 대해 추출된 해상도 식별 플래그 또는 해상도 정보가 주위 영역의 움직임 벡터 해상도를 이용하여 예측되는 움직임 벡터 해상도와 동일함을 나타내는 경우(예를 들어, 해상도 식별 플래그 또는 해상도 정보의 비트값이 '1'인 경우), 비트트스트림으로부터 다음 해상도 식별 플래그 또는 해상도 정보를 읽지 않고 해당 영역의 주위 영역의 움직임 벡터 해상도를 이용하여 예측되는 움직임 벡터 해상도를 복원할 수 있으며, 해상도 식별 플래그 또는 해상도 정보가 주위 영역의 움직임 벡터 해상도를 이용하여 예측되는 움직임 벡터 해상도와 동일하지 않음을 나타내는 경우(예를 들어, 해상도 식별 플래그 또는 해상도 정보의 비트값이 '0'인 경우), 비트스트림으로부터 해당 해상도 식별 플래그 또는 해상도 정보의 다음 비트값을 읽어들여 복호화함으로써 복원되는 움직임 벡터 해상도를 복원할 수 있다.
또한, 해상도 복호화기(1820)는 영역 또는 움직임 벡터마다의 움직임 벡터 해상도의 런과 길이가 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원할 수 있다. 예를 들어, 해상도 복호화기(1820)는 여러 영역들을 포함하는 일부 영역에 대한 움직임 벡터 해상도 및/또는 차분 움직임 벡터 해상도가 함께 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 움직임 벡터 해상도의 런과 길이를 복원하고 복원된 움직임 벡터 해상도의 런과 길이를 이용하여 도 12와 같은 영역들의 움직임 벡터 해상도를 복원할 수 있다.
또한, 해상도 복호화기(1820)는 영역 또는 움직임 벡터마다의 움직임 벡터 해상도가 태그 트리를 이용하여 계층적으로 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역마다의 움직임 벡터 해상도를 복원할 수 있다. 도 13 및 도 14를 참조하여 예를 들면, 해상도 복호화기(1820)는 도 14에 도시된 첫 번째 영역의 비트가 '0111'이어서 레벨 0에 대응되는 비트는 '01'임을 알 수 있으므로, 레벨 0에서 상위 계층의 움직임 벡터 해상도의 번호는 '0'이라고 가정되었으므로, 번호의 차이값이 '1'이 증가되는 1/2의 움직임 벡터 해상도를 복원할 수 있다. 또한, 그 다음 비트는 '1'이어서 상위 계층과의 번호의 차이값이 '0'이므로, 레벨 1도 1/2의 움직임 벡터 해상도로 복원된다. 그 다음 비트도 '1'이므로 같은 방법으로 레벨 2와 레벨 3도 1/2의 움직임 벡터 해상도로 복원될 수 있다. 도 14에 도시된 두 번째 영역의 비트는 '01'인데, 이미 첫 번째 영역에서 레벨 0, 레벨 1, 레벨 2에 대해서는 복호화되었으므로, 레벨 3만을 복호화하면 되며, 레벨 3에서는 상위 계층과의 번호의 차이값이 '1'이므로 1/4의 움직임 벡터 해상도를 복원할 수 있다. 이와 같은 방법으로, 나머지 영역들의 움직임 벡터 해상도도 복원될 수 있다.
*또한, 해상도 복호화기(1820)는 영역 또는 움직임 벡터마다의 움직임 벡터 해상도의 빈도수에 따라 해상도 식별 플래그 또는 해상도 정보에 할당하는 비트수를 변경하여 복호화할 수 있다. 예를 들어, 해상도 복호화기(1820)는 직전 영역까지 복원된 움직임 벡터 해상도의 빈도수를 계산하고 계산된 빈도수에 따라 움직임 벡터 해상도에 번호를 부여하고 번호에 따라 비트수를 할당하여 복호화할 수 있다.
영역 그룹은 쿼드 트리, 쿼드 트리 묶음, 태그 트리, 태그 트리 묶음, 매크로블록, 매크로블록 묶음, 임의의 크기의 영역이 될 수 있다. 예를 들면, 영역 그룹을 매크로블록 2 개로 지정한 경우, 매크로블록 2 개마다 움직임 벡터 해상도의 발생 빈도수를 업데이트하여 움직임 벡터 해상도의 비트수를 할당하여 복호화하거나, 영역 그룹을 쿼드 트리 4개로 지정한 경우, 쿼드 트리 4개마다 움직임 벡터 해상도의 발생 빈도수를 업데이트하여 움직임 벡터 해상도의 비트수를 할당하여 복호화한다
또한, 해상도 복호화기(1820)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 복호화 방법을 달리할 수 있다. 주위 영역 또는 영역 그룹의 움직임 벡터 해상도의 분포에 따라 해당 영역의 해상도가 될 확률이 가장 높은 움직임 벡터 해상도에 가장 짧은 비트수를 할당하여 복호화한다. 예를 들면, 해당 영역의 왼쪽 영역의 움직임 벡터 해상도가 1/2이고 위쪽 영역의 움직임 벡터 해상도가 1/2인 경우, 해당 영역의 움직임 벡터 해상도는 1/2이 될 확률이 가장 높으므로 1/2 움직임 벡터 해상도에 가장 짧은 비트수를 할당하여 복호화한다. 또 다른 예로, 해당 영역의 왼쪽 영역의 움직임 벡터 해상도가 1/4이고 왼쪽위 영역의 움직임 벡터 해상도가 1/2이고 위쪽 영역의 움직임 벡터 해상도가 1/2이고 오른쪽위 영역의 움직임 벡터 해상도가 1/2인 경우, 해당 영역의 움직임 벡터 해상도의 확률을 1/2, 1/4, 1/8 등과 같이 확률이 높은 순서로 짧은 비트수를 할당하여 복호화한다.
또한, 해상도 복호화기(1820)는 산술 복호화로 엔트로피 복호화할 때, 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 이진화 비트열의 생성 방법을 달리 하고, 확률 모델도 주위 영역의 움직임 벡터 해상도의 분포 및 현재까지 발생한 움직임 벡터 해상도의 확률에 따라 달리 적용하여 산술 복호화 및 확률 업데이트를 수행할 수 있다. 또한, 비트의 위치에 따라 각기 다른 확률 모델을 사용하여 산술 복호화 및 확률 업데이트를 수행할 수 있다. 예를 들면, CABAC으로 복호화 하고, 복호화에 사용되는 움직임 벡터 해상도가 1/2, 1/4, 1/8과 같이 3개의 움직임 벡터 해상도만 사용한다고 가정할 때, 해당 영역의 왼쪽 영역의 움직임 벡터 해상도가 1/2이고 위쪽 영역의 움직임 벡터 해상도가 1/2인 경우, 1/2 움직임 벡터 해상도에 도 21과 같이 '0'인 가장 짧은 이진화 비트열를 할당하고 나머지 1/4 움직임 벡터 해상도와 1/8 움직임 벡터 해상도에는 지금까지 발생한 확률이 높은 순서로 짧은 이진화 비트를 할당한다.
이때, 1/4 움직임 벡터 해상도보다 1/8 움직임 벡터 해상도가 지금까지 발생한 확률이 높은 경우, 도 21과 같이 '00'인 비트열을 1/8 움직임 벡터 해상도에 할당하고, '01'인 비트열을 1/2 움직임 벡터 해상도에 할당한다. 또한, 첫 번째 이진화 비트를 복호화할 때, 확률 모델을 4 가지의 확률 모델로 나누어 복호화할 수 있다. 4 가지의 확률 모델은 첫째, 왼쪽 영역과 위쪽 영역의 해상도가 모두 같고 지금까지의 가장 높은 확률의 해상도와 같은 경우의 확률 모델, 둘째, 왼쪽 영역과 위쪽 영역의 해상도가 모두 같고 지금까지의 가장 높은 확률의 해상도와 다른 경우의 확률 모델, 셋째, 왼쪽 영역과 위쪽 영역의 해상도가 모두 다르고 지금까지의 가장 높은 확률의 해상도와 왼쪽 영역 또는 위쪽 영역의 해상도와 같은 해상도가 있는 경우의 확률 모델, 넷째, 왼쪽 영역과 위쪽 영역의 해상도와 지금까지의 가장 높은 확률의 해상도가 모두 다른 경우의 확률 모델 등으로 구분될 수 있다. 두 번째 이진화 비트를 복호화할 때, 확률 모델을 2 가지의 확률 모델로 나누어 복호화할 수 있다. 2 가지의 확률 모델은 첫째 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도가 모두 다르고 지금까지의 가장 높은 확률의 움직임 벡터 해상도와 왼쪽 영역 또는 위쪽 영역의 움직임 벡터 해상도와 같은 움직임 벡터 해상도가 있는 경우의 확률 모델, 둘째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도와 지금까지의 가장 높은 확률의 해상도가 모두 다른 경우의 확률 모델로 구분될 수 있다.
또 다른 예를 들면, CABAC으로 복호화하고 복호화에 사용되는 움직임 벡터 해상도가 1/2, 1/4, 1/8과 같이 3 개의 움직임 벡터 해상도만 사용한다고 가정하면, 지금까지 발생한 확률이 가장 높은 움직임 벡터 해상도가 1/4인 경우, 1/4 움직임 벡터 해상도에 가장 짧은 이진화 비트열인 '1'을 할당하고, 나머지 1/2 움직임 벡터 해상도와 1/8 움직임 벡터 해상도에 각각 '00'과 '01'을 할당한다.
또한, 첫번째 이진화 비트를 부호화할 때, 확률모델을 3 가지의 확률 모델로 나누어 복호화할 수 있다. 3 가지의 확률 모델은 첫째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도가 지금까지 발생한 확률이 가장 높은 해상도와 같은 경우의 확률 모델, 둘째, 해당 영역의 왼쪽 영역과 위쪽 영역의 해상도 중 하나만 지금까지 발생한 확률이 가장 높은 해상도와 같은 경우의 확률 모델, 셋째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도와 지금까지 발생한 확률이 가장 높은 움직임 벡터 해상도와 모두 다른 경우의 확률 모델로 구분될 수 있다. 두 번째 이진화 비트를 복호화할 때, 확률 모델을 6 가지의 확률 모델로 나누어 복호화할 수 있다. 6 가지의 확률 모델은 첫째, 해당 영역의 왼쪽 영역과 위쪽 영역의 해상도가 모두 1/8 움직임 벡터 해상도인 경우의 확률 모델, 둘째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도가 모두 1/2 움직임 벡터 해상도인 경우의 확률 모델, 셋째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도가 모두 1/4 움직임 벡터 해상도인 경우의 확률 모델, 넷째, 해당 영역의 왼쪽 영역과 위쪽 영역의 해상도 중 하나는 1/8 움직임 벡터 해상도이고 다른 하나는 1/4 움직임 벡터 해상도인 경우의 확률 모델, 다섯째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도 중 하나는 1/2 움직임 벡터 해상도이고 다른 하나는 1/4 움직임 벡터 해상도인 경우의 확률 모델, 여섯째, 해당 영역의 왼쪽 영역과 위쪽 영역의 움직임 벡터 해상도 중 하나는 1/8 움직임 벡터 해상도이고 다른 하나는 1/2 움직임 벡터 해상도 일 경우의 확률 모델로 구분될 수 있다. 지금까지 발생한 확률이 가장 높은 해상도는 이전의 영역까지 부호화된 해상도의 확률일 수도 있고, 임의의 영역의 확률이거나 소정의 디폴트 해상도 일 수도 있다.
또한, 해상도 복호화기(1820)는 영역 또는 움직임 벡터별로 복호화되는 해상도 식별 플래그 또는 해상도 정보가 추정 가능함을 나타내는 플래그인 경우에는 미리 약속된 추정 방식에 따라 움직임 벡터 해상도를 추정하여 추정된 움직임 벡터 해상도를 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도로서 복원하고, 영역 또는 움직임 벡터별로 복호화되는 해상도 식별 플래가 추정 불가능함을 나타내는 플래그인 경우에는 복호화된 해상도 식별 플래그 또는 해상도 정보가 나타내는 움직임 벡터 해상도를 해당 영역의 움직임 벡터로서 복원할 수 있다.
예를 들어, 해상도 복호화기(1820)는 영역별로 복호화되는 해상도 식별 플래그 또는 해상도 정보가 움직임 벡터 해상도가 추정가능함을 나타내는 경우에는, 영상 부호화 장치(900)와 동일 또는 유사한 방법으로 복호화된 각각의 움직임 벡터 해상도마다 변화시켜 예측 움직임 벡터를 예측하고, 예측된 예측 움직임 벡터과 차분 벡터 복호화기(1830)에 의해 복원된 차분 벡터를 이용하여 움직임 벡터를 복원한다. 우선, 어느 영역의 움직임 벡터 해상도가 1/4 화소 단위라고 가정할 때 예측 움직임 벡터가 (3, 14)인 경우 차분 벡터는 (2, 3)이므로 해당 영역의 복원된 움직임 벡터는 (5, 17)이 된다. 해당 영역의 움직임 벡터 해상도가 1/2 화소 단위라고 가정할 때 예측 움직임 벡터가 (2, 7)인 경우 복원된 차분 벡터는 (2, 3)이므로 해당 영역의 복원된 움직임 벡터는 (4, 10)이 된다. 이와 같은 각각의 해상도마다의 복원된 움직임 벡터를 이용하여 참조 픽쳐에서 움직임을 보상한 영역의 주위 화소들과 해당 영역의 주위 화소들간의 왜율이 최소가 되는 해상도가 최적의 움직임 벡터 해상도가 된다. 따라서, 1/2 화소 단위로 움직임 보상한 영역의 주위 화소들의 왜곡이 가장 작은 경우 1/2의 움직임 벡터 해상도가 최적의 움직임 벡터 해상도가 된다.
또한, 해상도 복호화기(1820)는 영역 또는 움직임 벡터별로 복호화되는 해상도 식별 플래그 또는 해상도 정보가 움직임 벡터 해상도가 추정가능함을 나타내는 경우에는, 해상도 식별 플래그 또는 해상도 정보에서 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도를 추가적으로 복호화하여 복원할 수 있다.
또한, 해상도 복호화기(1820)는 차분 벡터의 각 컴포넌트가 '0'이 아닌 경우에만 상기 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원할 수 있다. 즉, 특정 영역의 차분 벡터의 컴포넌트가 '0'인 경우에는 예측 움직임 벡터를 움직임 벡터로 복호화하기 때문에 해당 영역의 움직임 벡터 해상도를 복원하지 않을 수 있다.
차분 벡터 복호화기(1830)는 비트스트림으로부터 부호화된 차분 벡터를 추출하고 복호화하는데, 복원된 영역 또는 움직임 벡터마다의 움직임 벡터 해상도에 따라 복호화하여 영역 또는 움직임 벡터마다의 차분 벡터를 복원하고, 추가적으로는 영역마다의 예측 움직임 벡터를 예측하고 복원된 차분 벡터 및 예측 움직임 벡터를 이용하여 영역마다의 움직임 벡터를 복원할 수 있다.
이를 위해, 차분 벡터 복호화기(1830)는 UVLC를 이용하여 차분 벡터를 복호화할 수 있으며, 이 경우 K차 지수 골룸 코드를 이용하여 복호화하되, 복원된 영역마다의 움직임 벡터 해상도에 따라 K차 지수 골룸 코드의 차수(K)를 변경할 수 있다. 또한, 차분 벡터 복호화기(1830)는 CABAC를 이용하여 차분 벡터를 복호화할 수 있으며, 이 경우 단항/K차 지수 골룸 결합형 코드를 이용하여 복호화하되, 복원된 영역 또는 움직임 벡터마다의 움직임 벡터 해상도에 따라 단항/K차 지수 골룸 결합형 코드의 차수(K)와 최대값(T)를 변경하여 복호화할 수 있다. 또한, 차분 벡터 복호화기(1830)는 CABAC를 이용하여 차분 벡터를 복호화하는 경우에는, 복원된 영역 또는 움직임 벡터마다의 움직임 벡터 해상도에 따라 누적 확률을 다르게 계산하여 복호화할 수 있다.
또한, 차분 벡터 복호화기(1830)는 각 영역 또는 움직임 벡터의 주위 영역의 움직임 벡터를 이용하여 각 영역 또는 움직임 벡터에 대한 예측 움직임 벡터를 예측할 수 있는데, 이 경우 주위 영역의 움직임 벡터 해상도와 각 영역의 움직임 벡터 해상도가 동일하지 않은 경우에는, 주위 영역의 움직임 벡터 해상도를 각 영역의 움직임 벡터 해상도로 변환하여 예측할 수 있다. 예측 움직임 벡터는 영상 부호화 장치와 복호화 장치에서 동일한 방법으로 얻어질 수 있다. 따라서 도 22 내지 도 26을 참조하면서 영상 부호화 장치에 의한 예측 움직임 벡터를 유도하는 다양한 실시예들 및 움직임 벡터 해상도 변환에 관한 실시예들은 본 발명에 따른 영상 복호화 장치의 실시예에서도 동일하게 구현될 수 있다.
또한, 차분 벡터 복호화기(1830)는 각 영역 중 하나 이상의 영역이 블록이고 블록의 블록 모드가 스킵 모드인 경우에는, 주위 영역의 움직임 벡터 해상도 중 가장 높은 해상도로 주위 영역의 움직임 벡터 해상도를 변환하여 예측할 수 있다.
또한, 해상도 복호화기(1820)에서 복호화된 움직임 벡터 해상도를 나타내는 해상도 식별 플래그 또는 해상도 정보는 움직임 벡터의 x 컴포넌트(Componenet)와 y 컴포넌트를 모두 나타내거나 각각의 해상도를 나타낼 수도 있다. 즉, 영상을 촬영하는 카메라가 이동하거나 영상 내의 물체가 이동하는 경우 등과 같은 때에는, 해상도 복호화기(1820)에서 움직임 추정을 위한 움직임 벡터의 x 컴포넌트와 y 컴포넌트의 해상도를 서로 다르게 복호화할 수 있다. 예를 들어, 어느 영역의 움직임 벡터의 x 컴포넌트에 대해서는 1/8 화소 단위의 움직임 벡터 해상도로 복호화하고, y 컴포넌트에 대해서는 1/2 화소 단위의 움직임 벡터 해상도로 복호화할 수 있으며, 이에 따라 인터 예측 복호화기(1840)는 해당 영역의 움직임 벡터에 대해서는 x 컴포넌트와 y 컴포넌트별로 다른 움직임 벡터 해상도의 움직임 벡터로 움직임 추정 및 움직임 보상함으로써 해당 영역을 인터 예측 복호화할 수 있다.
인터 예측 복호화기(1840)는 복원된 각 영역 또는 움직임 벡터의 움직임 벡터 해상도에 따른 영역마다의 움직임 벡터를 이용하여 각 영역을 인터 예측 복호화한다. 이러한 인터 예측 복호화기(1840)는 도 8을 통해 전술한 영상 복호화 장치(800)로 구현될 수 있다. 여기서, 도 18의 해상도 변경 플래그 추출기(1810), 해상도 복호화기(1820), 차분 벡터 복호화기(1830)의 기능과 영상 복호화 장치(800) 내의 복호화기(810)의 기능이 중복되는 경우 복호화기(810)에서는 그 중복되는 기능이 생략될 수 있다.
또한 해상도 복호화기(1820)의 동작과 영상 복호화 장치(800) 내의 예측기(850)의 동작이 중복되는 경우에는 그 중복되는 동작은 예측기(850)에서는 생략될 수도 있다.
또한, 해상도 변경 플래그 추출기(1810), 해상도 복호화기(1820), 차분 벡터 복호화기(1830)는 도 18과 같이 인터 예측 복호화기(1840)와 별개의 구성요소로 구성될 수도 있지만 인터 예측 복호화기(1800) 내의 복호화기(810)와 일체로 구성될 수도 있다.
다만, 도 8을 통해 전술한 영상 복호화 장치(800)는 영상을 블록 단위로 부호화하는 것으로 설명했지만, 인터 예측 복호화기(1840)는 영역을 매크로블록, 블록, 서브블록, 코딩 유닛, 슬라이스, 픽처 등과 같은 다양한 형태와 크기의 영역으로 분할하여 임의의 크기를 가지는 영역 단위로 복호화할 수 있다. 이러한 소정의 영역은 16X16 크기의 매크로블록이 될 수도 있지만, 이에 한정하지 않고 64X64 크기의 블록, 32X16 크기의 블록 등과 같은 다양한 크기와 형태의 블록이 될 수도 있다.
또한, 도 8을 통해 전술한 영상 복호화 장치(800)는 영상의 모든 블록에 대해 동일한 움직임 벡터 해상도 및/또는 차분 움직임 벡터 해상도를 가지는 움직임 벡터 및/또는 차분 움직임 벡터로 인터 예측 복호화하지만, 인터 예측 복호화기(1840)는 영역 또는 움직임 벡터마다 다르게 결정되는 움직임 벡터 해상도 및/또는 차분 움직임 벡터 해상도를 가지는 움직임 벡터 및/또는 차분 움직임 벡터로 각 영역을 인터 예측 복호화할 수 있다. 즉, 인터 예측 복호화기(1840)는 소정의 영역을 인터 예측 복호화할 때, 해상도 복호화기(1820)에 의해 복원된 각 영역 또는 움직임 벡터의 움직임 벡터 해상도 및/또는 차분 움직임 벡터 해상도에 따라 이미 부호화되고 복호화되어 복원된 참조 픽처를 보간하여 해상도를 높인 후, 차분 벡터 복호화기(1830)에 의해 복원된 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도 및/또는 차분 움직임 벡터 해상도에 따른 움직임 벡터 및/또는 차분 움직임 벡터를 이용하여 움직임 추정을 수행한다. 참조 픽처를 보간하기 위한 보간 필터로는 위너 필터, 양선형 필터, 칼만 필터 등과 같은 다양한 필터가 사용될 수 있으며, 보간을 위한 해상도로는 2 화소 단위, 1 화소 단위, 1/2 화소 단위, 1/4 화소 단위, 1/8 화소 단위 단위 등과 같은 다양한 분수 화소 단위 및 정수 화소 단위의 해상도가 적용될 수 있다. 또한, 이러한 다양한 해상도에 따라 서로 다른 필터 계수를 사용하거나 필터 계수의 개수를 다르게 할 수도 있다. 예를 들면, 해상도가 1/2 화소 단위인 경우 위너 필터를 사용하여 보간하고, 1/4 화소 단위인 경우 칼만 필터를 사용하여 보간한다. 또한, 각 해상도를 보간할 때 필터 탭의 개수를 달리 할 수도 있다. 예를 들면, 해상도가 1/2 화소 단위인 경우 8 탭 위너 필터를 사용하여 보간하고, 1/4 화소 단위인 경우 6탭 위너 필터를 사용하여 보간 할 수 있다.
또한, 인터 예측 복호화기(1840)는 비트스트림에서 각 움직임 벡터 해상도마다의 필터 계수를 복호화하여 각 움직임 벡터 해상도마다의 최적의 계수로 참조 픽처를 보간할 수 있다. 이때, 필터는 위너`필터 칼만 필터 등 어떠한 필터를 사용할 수 있고, 각 필터 탭의 개수도 여러 개가 될 수 있다. 또한, 각 움직임 벡터 해상도마다 필터와 필터 탭의 개수를 다르게 할 수도 있다. 또한, 영역 또는 움직임 벡터의 움직임 벡터 해상도에 따라 다른 필터를 이용하여 보간한 참조 픽처를 이용하여 인터 예측 복호화할 수 있다. 예를 들면, 비트스트림에서 1/2 움직임 벡터 해상도에는 6탭 위너 필터의 필터를, 1/4 움직임 벡터 해상도에는 8탭 칼만 필터를, 1/8 움직임 벡터 해상도에는 선형 필터의 필터 계수를 복호화하여 움직임 벡터 해상도마다 참조 픽터를 보간하여 복호화할 수 있다. 이때, 현재 영역 또는 움직임 벡터의 움직임 벡터 해상도가 1/2 움직임 벡터 해상도인경우 6탭 위너 필터로 보간된 참조 픽처를 사용하여 복호화하고, 1/4 움직임 벡터 해상도인 경우 8탭 칼만 필터로 보간된 참조 픽처를 사용하여 복호화할 수 있다.
도 48은 본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 장치를 간략하게 나타낸 블록 구성도이다.
본 발명의 일 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 장치(4800)는 영상을 영역 단위로 복호화하는 장치로서, 해상도 지정 플래그 추출기(4810), 해상도 복호화기(4820), 차분 벡터 복호화기(4830), 인터 예측 복호화기(4840) 및 해상도 전환 플래그 추출기(4850)를 포함하여 구성될 수 있다. 여기서, 해상도 지정 플래그 추출기(4810), 해상도 복호화기(4820), 차분 벡터 복호화기(4830) 및 해상도 전환 플래그 추출기(4850)는 반드시 모두가 영상 복호화 장치(4800)에 포함되어야 하는 것은 아니며, 부호화된 비트스트림을 발생하는 영상 부호화장치의 부호화 방식에 따라 선택적으로 포함될 수 있다.
또한, 인터 예측 복호화기(4840)는 복원된 각 영역 또는 움직임 벡터의 움직임 벡터 해상도에 따른 영역마다의 움직임 벡터를 이용하여 각 영역을 인터 예측 복호화한다. 이러한 인터 예측 복호화기(4840)는 도 8을 통해 전술한 영상 복호화 장치(800)로 구현될 수 있다. 여기서, 도 48의 해상도 지정 플래그 추출기(4810), 해상도 복호화기(4820), 차분 벡터 복호화기(4830) 및 해상도 전환 플래그 추출기(4850)의 기능 중에서 하나 이상의 기능과 영상 복호화 장치(4800) 내의 복호화기(810)의 기능이 중복되는 경우 복호화기(810)에서는 그 중복되는 기능이 생략될 수 있다.
또한 해상도 복호화기(4820)의 동작과 인터 예측 복호화기(4840) 내의 예측기(850)의 동작이 중복되는 경우에는 그 중복되는 동작은 예측기(850)에서는 생략될 수도 있다.
또한, 해상도 지정 플래그 추출기(4810), 해상도 복호화기(4820), 차분 벡터 복호화기(4830) 및 해상도 전환 플래그 추출기(4850)는 도 48과 같이 인터 예측 복호화기(4840)와 별개의 구성요소로 구성될 수도 있지만 인터 예측 복호화기(4800) 내의 복호화기(810)와 일체로 구성될 수도 있다.
해상도 지정 플래그 추출기(4810)는 입력된 비트스트림으로부터 해상도 지정 플래그를 추출한다. 해상도 지정 플래그는 단일 해상도로 고정됨을 나타내는 플래그이거나 또는 하나 이상의 해상도를 갖는 해상도 세트가 된다.
해상도 지정 플래그 추출기(4810)는 비트스트림으로부터 해상도 지정 플래그를 추출한다. 즉, 해상도 지정 플래그 추출기(4810)는 비트스트림의 헤더에서 움직임 벡터 해상도가 임의의 값으로 고정되는지 또는 영역마다 변경되는 해상도 세트가 있는지 여부를 나타내는 해상도 변경 플래그를 추출한다. 해상도 지정 플래그 추출기(4810)는 해상도 지정 플래그가 움직임 벡터 해상도 및/또는 차분 움직임 벡터 해상도가 임의 해상도로 고정되는 것을 나타내면, 해상도 지정 플래그로 수신한 해상도를 인터예측 복호화기(4840) 및 차분벡터 부호화기(4830)로 전송하면, 차분벡터 부호화기(4830)는 수신한 해상도로 차분벡터를 부호화하여 인터예측 복호화기(4840)로 전송한다. 이 경우 인터예측 복호화기(4840)는 수신한 차분벡터 및 해상도 지정 플래그 추출기(4810)로부터 수신한 해상도 및 수신한 비트스트림을 이용하여 인터예측 복호화를 수행한다.
해상도 지정 플래그 추출기(4810)는 추출한 해상도 지정 플래그가 소정의 해상도 세트인 경우에는 해상도 복호화기(4820)로 하여금 헤더에 정의된 하위 영역의 각 영역 또는 움직임 벡터의 움직임 벡터 해상도 및/또는 차분 움직임 벡터 해상도를 복원하도록 제어하며, 인터 예측 복호화기(4840)로 하여금 헤더에서 정의된 하위 각 영역 또는 움직임 벡터에 대해 복원된 움직임 벡터 해상도로 인터 예측 복호화하도록 제어하며, 차분 벡터 복호화기(4830)로 하여금 복원된 차분 움직임 벡터 해상도로 각 영역의 움직임 벡터를 복원하도록 제어한다.
또한, 복수개의 참조 픽처를 사용하는 경우, 해상도 지정 플래그가 비트스트림으로부터 추출되지 않는 경우 임의의 기준에 따라 참조 픽처마다 해상도의 적응성(adaptive) 정도(즉, 해상도 세트)를 산출할 수 있다. 예를 들어, 참조 픽처와 현재 픽처 간의 거리에 따라 해상도의 적응성 정도를 다르게 할 수 있다. 이에 대한 설명은 도 38과 도 39의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 참조 픽처 생성 시에 각 해상도 간의 SSD (Sum of Squared Difference) 등의 에러 측정 수단을 이용하여 해상도 세트를 산출할 수 있다. 예를 들어, 사용 가능한 해상도가 1/1, 1/2, 1/4, 1/8인 경우, 참조 픽처를 보간(interpolation) 할 때, 먼저 1/1과 1/2의 해상도에 대하여 SSD 등의 에러 측정 수단을 이용하여 구한 에러값이 임의의 임계값(threshold)을 넘지 않는 경우 해상도 1/2은 사용하지 않도록 하고 임계값(threshold)을 넘는 경우 해상도 1/2을 사용하도록 설정할 수 있다. 그리고 1/2의 해상도를 사용하지 않도록 설정된 경우, 1/1과 1/4의 해상도에 대하여 SSD 등의 에러 측정 수단을 이용하여 구한 에러값이 임의의 임계값을 넘지 않는 경우 1/4을 사용하지 않고 에러값이 임의의 임계값을 넘는 경우 1/1과 1/4의 해상도를 모두 사용하도록 설정한다. 그리고 1/4의 해상도를 사용하도록 설정된 경우, 1/4과 1/8 의 해상도에 대하여 SSD 등의 에러 측정 수단을 이용하여 구한 에러값이 임의의 임계값을 넘지 않는 경우 1/8을 사용하지 않고 에러값이 임의의 임계값을 넘는 경우 1/1, 1/4, 1/8의 해상도를 모두 사용한다. 여기서, 임계값은 해상도 별로 또는 양자화 파라미터 별로 다를 수도 있고 동일할 수도 있다.
또한, 참조 픽처마다 해상도의 적응성 정도를 다르게 함을 부호화하는 경우에, 해상도 지정 플래그 추출기(4810)는 비트스트림으로부터 해상도 지정 플래그 대신에 참조픽처 인덱스 번호를 추출하고 도 40과 같이 소정의 해상도 세트마다 대응되는 참조픽처 인덱스 번호를 저장하여 참조함으로써 해상도 세트를 추출할 수 있다.
또한 해상도 지정 플래그에 의해 해상도 세트가 지정된 경우, 참조 픽처로 사용될 픽처의 경우와 참조 픽처로 사용되지 않는 경우 해상도 세트를 다르게 설정함으로써 실제 사용가능한 해상도 세트를 참조 픽처의 사용여부에 따라 각각 설정할 수 있다. 따라서 영상 복호화 장치(4800)에도 도 42와 같은 테이블이 저장되어 해상도 복호화기(4820)에 의해 참조되어 해상도를 복호화하는데 사용될 수 있다. 이에 대한 설명은 도 41 및 도 42의 설명에서 언급하였으므로 더 이상의 자세한 설명은 생략한다.
또한, 해상도 지정 플래그 추출기(4810)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도 및/또는 차분 움직임 벡터 해상도에 따른 움직임 벡터의 예측 움직임 벡터 또는 차분 움직임 벡터의 크기가 임계값보다 큰 경우에는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도 및/또는 차분 움직임 벡터 해상도를 소정의 값으로 결정할 수 있다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 변경 플래그 추출기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
해상도 복호화기(4820)는 해상도 지정 플래그 추출기(4810)에 의해 추출된 해상도 지정 플래그에 따라 비트스트림으로부터 부호화된 해상도 식별 플래그 또는 해상도 정보를 추출하고 복호화하여 영역마다의 움직임 벡터 해상도를 복원한다.
이를 위해, 해상도 복호화기(4810)는 동일한 움직임 벡터 해상도를 가지는 영역끼리 묶어 쿼드 트리 구조로 계층적으로 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원할 수 있다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 복호화기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 해상도 복호화기(4820)는 각 영역 또는 움직임 벡터의 주위 영역의 움직임 벡터 해상도를 이용하여 예측되는 움직임 벡터 해상도를 이용하여 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원할 수 있다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 복호화기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 해상도 복호화기(4820)는 영역 또는 움직임 벡터마다의 움직임 벡터 해상도의 런과 길이가 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원할 수 있다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 복호화기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 해상도 복호화기(4820)는 영역 또는 움직임 벡터마다의 움직임 벡터 해상도가 태그 트리를 이용하여 계층적으로 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역마다의 움직임 벡터 해상도를 복원할 수 있다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 복호화기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 해상도 복호화기(4820)는 영역 또는 움직임 벡터마다의 움직임 벡터 해상도의 빈도수에 따라 해상도 식별 플래그 또는 해상도 정보에 할당하는 비트수를 변경하여 복호화할 수 있다. 예를 들어, 해상도 복호화기(4820)는 직전 영역까지 복원된 움직임 벡터 해상도의 빈도수를 계산하고 계산된 빈도수에 따라 움직임 벡터 해상도에 번호를 부여하고 번호에 따라 비트수를 할당하여 복호화할 수 있다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 복호화기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 해상도 복호화기(4820)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 복호화 방법을 달리할 수 있다. 주위 영역 또는 영역 그룹의 움직임 벡터 해상도의 분포에 따라 해당 영역의 해상도가 될 확률이 가장 높은 움직임 벡터 해상도에 가장 짧은 비트수를 할당하여 복호화한다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 복호화기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 해상도 복호화기(4820)는 산술 복호화로 엔트로피 복호화할 때, 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 이진화 비트열의 생성 방법을 달리 하고, 확률 모델도 주위 영역의 움직임 벡터 해상도의 분포 및 현재까지 발생한 움직임 벡터 해상도의 확률에 따라 달리 적용하여 산술 복호화 및 확률 업데이트를 수행할 수 있다. 또한, 비트의 위치에 따라 각기 다른 확률 모델을 사용하여 산술 복호화 및 확률 업데이트를 수행할 수 있다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 복호화기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 해상도 복호화기(4820)는 영역 또는 움직임 벡터별로 복호화되는 해상도 식별 플래그 또는 해상도 정보가 추정 가능함을 나타내는 플래그인 경우에는 미리 약속된 추정 방식에 따라 움직임 벡터 해상도를 추정하여 추정된 움직임 벡터 해상도를 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도로서 복원하고, 영역 또는 움직임 벡터별로 복호화되는 해상도 식별 플래가 추정 불가능함을 나타내는 플래그인 경우에는 복호화된 해상도 식별 플래그 또는 해상도 정보가 나타내는 움직임 벡터 해상도를 해당 영역의 움직임 벡터로서 복원할 수 있다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 복호화기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 해상도 복호화기(4820)는 영역 또는 움직임 벡터별로 복호화되는 해상도 식별 플래그 또는 해상도 정보가 움직임 벡터 해상도가 추정가능함을 나타내는 경우에는, 해상도 식별 플래그 또는 해상도 정보에서 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도를 추가적으로 복호화하여 복원할 수 있다. 또한, 해상도 복호화기(4820)는 차분 벡터의 각 컴포넌트가 '0'이 아닌 경우에만 상기 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원할 수 있다. 즉, 특정 영역의 차분 벡터의 컴포넌트가 '0'인 경우에는 예측 움직임 벡터를 움직임 벡터로 복호화하기 때문에 해당 영역의 움직임 벡터 해상도를 복원하지 않을 수 있다. 이에 대한 상세한 내용은 제1 실시예에 따른 영상 복호화 장치(1800)의 해상도 복호화기(1810)의 설명에서 언급하였으므로 더 이상의 상세한 설명은 생략한다.
또한, 해상도 복호화기(4820)는 헤더에서 추출되고 복호화된 해상도 변경 플래그의 해상도 종류에 따라 해상도 식별 플래그 또는 해상도 정보를 추출하고 이를 이용하여 차분벡터 복호화기(4830)는 도 25에 나타난 바와 같은 움직임 벡터 해상도에 따른 차분 움직임 벡터 부호번호 테이블을 영상 부호화 장치와 동일한 내용으로 저장하여 추출한 부호 번호를 참조하여 해당 해상도에 대응하는 차분 움직임 벡터의 값을 추출한다. 복호화된 해상도 식별 플래그 또는 해상도 정보가 1/4이면 움직임 벡터를 복호화 할 때 비트스트림에서 추출한 차분 움직임 벡터와 주변 움직임 벡터의 해상도 1/4로 변환하여 구한 예측 움직임 벡터를 이용하여 복호화할 수 있다. 예측 움직임 벡터는 부호화기와 동일하게 곱셈, 나눗셈을 이용하여 변환된 주변 움직임 벡터를 이용하여 median을 취하여 구할 수 있으나 본 발명이 이에 한정되지는 않는다.
도 49는 현재 블록(X)의 주변 움직임 벡터를 예시한 도면이고, 도 50은 현재 해상도에 따른 주변 움직임 벡터의 변환된 값을 예시한 도면이다.
또한, 해상도 복호화기(4820)는 해상도 식별 플래그 또는 해상도 정보를 추출하지 않고 참조픽처 인덱스로 해상도를 산출할 수 있다. 이에 대한 설명은 영상 부호화 장치(3200)에서 도 30 내지 도 31의 설명에서 언급하였으므로 상세한 내용을 생략한다.
인터예측 복호화기(4840)는 도 50과 같은 표를 이용하여 구한 예측 움직임 벡터와 차분벡터 복호화기(4830)로부터 산출된 차분벡터를 이용하여 움직임 벡터를 구하고 복호화를 수행할 수 있다.
만일, 도 26 및 도 27의 설명에서 언급된 것과 같이 차분 움직임 벡터 해상도가 부호화되어 비트스트림으로 전송된 경우에는 해상도 복호화기(4820)는 비트스트림에서 차분 움직임 벡터의 해상도 식별 플래그를 추출 및 복호화하고, 차분 움직임 벡터의 부호 번호와 차분 움직임 벡터의 기호(sign)를 복호화한다. 도 27과 같은 차분 움직임 벡터 해상도에 따른 차분 움직임 벡터의 부호 번호 테이블을 저장하여 비트스트림으로부터 추출한 부호번호가 (1, 1)인 경우 도 27의 차분 움직임 벡터 해상도에 따른 차분 움직임 벡터 부호 번호 테이블을 참조함으로써 차분 움직임 벡터 (-1/8, -1/4)를 구할 수 있다. 이 경우 인터예측 복호화기(4840)는 아래와 같이 영상 부호화 장치와 동일한 방법으로 예측 움직임 벡터를 계산할 수 있다.
PMVx = median(7/8, 1/8, 2/8) = 2/8
PMVy = median(-6/8, 1/8, -2/8) = -2/8
따라서 PMV = (2/8, -2/8) = (1/4, -1/4)이 된다.
따라서 움직임 벡터는
MV (1/8, -4/8) = MVD(-1/8, -1/4) - PMV(1/4, -1/4)
가 되고 따라서 복호화된 움직임 벡터는 (1/8, -4/8)이 된다.
한편, 차분 벡터 복호화기(4830)가 기준해상도 플래그를 수신하는 경우 차분 벡터 복호화기(4830)는 차분 움직임 벡터를 복원하고 기준 해상도로 복호화한다. 이러한 경우 기준 해상도 플래그에 포함된 부호번호를 추출하여 도 29와 같은 차분 기준 움직임 벡터 해상도에 따른 부호번호 테이블을 참조하여 차분 기준 움직임 벡터를 복호화하고, 기준 해상도 플래그에 포함된 위치정보를 이용하여 차분 움직임 벡터를 복원한다. 즉, 차분 벡터 복호화기(4830)는 차분 움직임 벡터를 복호화 하는 경우, 비트스트림에서 기준 해상도를 추출하고, 도 29와 같은 차분 기준 움직임 벡터 해상도에 따른 부호번호 테이블을 이용하여 차분 기준 움직임 벡터를 산출한다. 이때 비트스트림으로부터 기준 해상도 및 움직임 벡터의 위치좌표를 나타내는 기준 해상도 플래그를 추출하여 차분 기준 움직임 벡터로부터 기준 해상도 플래그를 이용하여 차분 움직임 벡터를 복호한다.
만일, 움직임 벡터가 기준 해상도 이외의 해상도인 경우에는 기준해상도 플래그를 추가로 부호화 하는 방법을 사용할 수 있다. 여기서 기준 해상도 플래그는 같은 기준 해상도와 같은 해상도인 여부를 나타내는 데이터와 실제 움직임 벡터의 위치를 나타내는 데이터를 포함할 수 있다.
차분 벡터 복호화기(4830)는 차분 움직임 벡터의 해상도 식별 플래그를 이용하여 차분 움직임 벡터의 컴포넌트 별로 복호화를 수행할 수도 있다. 예를 들어, 차분 움직임 벡터의 해상도를 1/4과 1/8을 사용하고, 현재 차분 움직임 벡터 해상도가 1/8이고 차분 움직임 벡터의 값이 (1/4, 1/8)인 경우, 차분 움직임 벡터 해상도 식별 플래그를 1/8로 부호화하고 도 61과 같은 차분 움직임 벡터의 부호 번호 테이블을 이용하여 차분 움직임 벡터의 컴포넌트 별로 복호화를 수행할 수 있다. 이 경우, 차분 벡터 복호화기(4830)는 차분 움직임 벡터 해상도 식별 플래그 1/8을 비트스트림에서 추출하여 복호하고, 차분 움직임 벡터의 x 컴포넌트 부호 번호 2를 비트스트림에서 추출하고 도 61의 테이블 (1)을 이용하여 1/4을 복호하면 y 컴포넌트가 1/8 해상도임을 알 수 있다. 따라서, 비트스트림에서 추출한 y 컴포넌트의 부호 번호 0은 도 61의 테이블 (2)를 이용하여 복호하면 1/8로 복호할 수 있다. 또는 차분 움직임 벡터 해상도가 1/4이고 차분 움직임 벡터의 값이 (1/4, 3/4)인 경우 복호화기는 비트스트림에서 차분 움직임 벡터 해상도 식별 플래그 1/4을 추출하고 복호하여, 비트스트림에서 추출한 차분 움직임 벡터의 x 컴포넌트와 y 컴포넌트의 부호 번호(1, 3)을 도 61의 테이블 (3)을 이용하여 (1/4, 3/4)로 복호화할 수 있다.
차분 벡터 복호화기(4830)는 예측 움직임 벡터 해상도 식별 플래그를 이용하여 복호화를 수행할 수도 있다. 예를 들어, 움직임 벡터 해상도 지정 플래그가 (1/1, 1/2, 1/4, 1/8)을 나타내고 예측 움직임 벡터 해상도 식별 플래그를 부호화하는 경우, 도 62와 같이 블록 A의 해상도는 1/4이고, 블록 B의 해상도는 1/8이며, 블록 C의 해상도는 1/2이고, 블록 D의 해상도는 1/1일 수 있다. 예측 움직임 벡터 해상도가 1/4이고 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 블록 A의 움직임 벡터로 할 수 있다. 이것은 부호화기와 복호화기가 동일하게 구현할 수 있다. 이러한 경우, 차분 움직임 벡터는 도 63과 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 현재 블록 X의 해상도가 1/8이라면 예측 움직임 벡터는 해상도를 1/8로 변환한 블록 A의 움직임 벡터로 할 수 있다. 이러한 경우에는 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 현재 블록 X의 해상도 1/8이라고 해도 예측 움직임 벡터는 해상도를 변환하지 않은 블록 A의 움직임 벡터로 할 수도 있다. 이러한 경우 차분 움직임 벡터 부호 테이블은 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
다른 예로, 움직임 벡터 해상도 지정 플래그가 (1/4, 1/8)을 나타내고 예측 움직임 벡터 해상도 식별 플래그를 복호화하는 경우, 도 65와 같이 블록 A, B, D의 해상도는 1/4이고 블록 C의 해상도는 1/8일 수 있다. 예측 움직임 벡터 해상도가 1/4이고 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 전술한 수학식 11과 같이 계산할 수 있다. 이러한 경우 차분 움직임 벡터는 도 63의 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 예측 움직임 벡터 해상도가 1/4이고, 현재 블록 X의 해상도가 1/8이라면 예측 움직임 벡터는 수학식 11과 같이 계산하고 해상도를 1/8로 변환한 값을 사용할 수 있다. 이러한 경우, 차분 움직임 벡터는 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 예측 움직임 벡터 해상도가 1/8이고, 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 블록 C의 움직임 벡터의 해상도를 1/4로 변환한 값이 된다. 이러한 경우 차분 움직임 벡터는 도 63과 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
한편 차분 벡터 복호화기(4830)의 다른 기능은 제1실시예에 따른 영상 복호화 장치(1800)에서 설명한 차분 벡터 복호화기(1830)의 기능을 포함할 수 있다. 띠라서 상세한 설명은 제1실시예에서 차분 벡터 복호화기(1830)의 기능을 설명하였으므로 더 이상의 상세한 설명은 생략한다.
비트스트림에서 추출한 해상도 변경 플래그의 값(예컨대 1인 경우)에 따라 부호화기와 동일한 주변 해상도 중에서 빈도수가 가장 높은 해상도를 제외한 해상도 식별 플래그 테이블을 이용하여 비트스트림에서 해상도 식별 플래그 또는 해상도 정보를 추출하고 복호화 한다.
한편, 해상도 전환 플래그 추출기(4850)는 비트스트림에서 해상도 전환 플래그를 추출하고 해상도 전환 플래그의 값(예컨대 1인 경우)에 따라 주변 해상도 중에서 빈도수가 가장 높은 해상도를 제외한 해상도 식별 플래그 테이블(도 45의 테이블)을 이용하여 비트스트림에서 해상도 식별 플래그 또는 해상도 정보를 추출하고 복호화 할 수 있다. 또한 주변 블록의 해상도를 이용하는 경우 빈도수가 가장 높은 해상도뿐만 아니라 A와 B의 해상도 중에서 낮은 해상도와 현재 블록의 해상도가 같은 경우에는 해상도 전환 플래그를 0으로 부호화하고, 다른 경우에는 해상도 전환 플래그를 1로 부호화할 수도 있다. 해상도 전환 플래그가 1로 부호화 되는 경우에는 해상도 식별 플래그 테이블에서 해당 플래그를 제외할 수 있다.
한편, 해상도 전환 플래그 추출기(4850)는 비트스트림에서 해상도 전환 플래그 값(예컨대 1인 경우)을 추출하여 이전 블록 A와 해상도가 다름을 알 수 있도록 함으로써 현재 블록의 해상도를 산출한다. 예를 들어, 해상도 세트가 1/2, 1/4인 경우에 이전 블록의 해상도가 1/2이면 전환되는 해상도는 1/4임을 알 수 있다.
한편, 본 발명의 일 실시예에 따른 영상 부호화/복호화 장치는 도 9 또는 도 32의 영상 부호화 장치의 비트스트림 출력단과 도 18 또는 도 48의 영상 복호화 장치의 비트스트림 입력단을 연결함으로써 구현할 수 있다.
본 발명의 일 실시예에 따른 영상 부호화/복호화 장치는 영역 또는 움직임 벡터마다 움직임 벡터 해상도를 결정하고 영역 또는 움직임 벡터마다 결정된 움직임 벡터 해상도에 따른 움직임 벡터를 이용하여 영상을 영역 단위로 인터 예측 부호화하는 영상 부호화기; 및 비트스트림으로부터 해상도 정보를 추출하여 해상도를 복원하고 복원된 각 영역 또는 움직임 벡터의 움직임 벡터 해상도에 따른 움직임 벡터를 이용하여 각 영역을 인터 예측 복호화하는 영상 복호화기를 포함한다.
도 19는 본 발명의 제1 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 방법을 설명하기 위한 순서도이다.
본 발명의 제1 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 방법은 비트스트림으로부터 해상도 변경 플래그를 추출하고, 추출된 해상도 변경 플래그에 따라 비트스트림으로부터 부호화된 해상도 식별 플래그 또는 해상도 정보를 추출하고 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원하며, 복원된 각 영역 또는 움직임 벡터의 움직임 벡터 해상도에 따른 영역마다의 움직임 벡터를 이용하여 각 영역을 인터 예측 복호화한다.
이를 위해, 영상 복호화 장치(1800)는 비트스트림으로부터 해상도 변경 플래그를 추출하고(S1910), 추출된 해상도 변경 플래그가 움직임 벡터 해상도가 영역마다 변경되는지 여부를 판단하여(S1920), 해상도 변경 플래그가 움직임 벡터 해상도가 영역 또는 움직임 벡터마다 변경됨을 나타내는 경우에는 비트스트림으로부터 해상도 식별 플래그 또는 해상도 정보를 추출하고 복호화하여 각 영역 또는 움직임 벡터의 움직임 벡터 해상도를 복원하며(S1930), 복원된 각 영역 또는 움직임 벡터의 움직임 벡터 해상도로 각 영역 또는 움직임 벡터의 움직임 벡터를 복원하여 인터 예측 복호화한다(S1940). 또한, 영상 복호화 장치(1800)는 해상도 변경 플래그가 움직임 벡터 해상도가 영역 또는 움직임 벡터마다 변경되지 않고 고정됨을 나타내는 경우에는 비트스트림으로부터 움직임 벡터 해상도 플래그를 추출하고 복호화하여 복원하고(S1950), 복원된 움직임 벡터 해상도에 따라 헤더에서 정의된 하위 영역에 대해 디폴트 움직임 벡터 해상도에 따라 움직임 벡터를 복원하여 각 영역을 인터 예측 복호화한다(S1960). 여기서, 영역 또는 움직임 벡터마다 복호화되는 움직임 벡터 해상도는 움직임 벡터의 x 컴포넌트와 y 컴포넌트별로 서로 다를 수 있다.
여기서, 영상 복호화 장치(1800)는 동일한 움직임 벡터 해상도를 가지는 영역 또는 움직임 벡터끼리 묶어 쿼드 트리 구조로 계층적으로 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원하거나, 각 영역의 주위 영역의 움직임 벡터 해상도를 이용하여 예측되는 움직임 벡터 해상도를 이용하여 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역마다의 움직임 벡터 해상도를 복원하거나, 영역 또는 움직임 벡터마다의 움직임 벡터 해상도의 런과 길이가 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원하거나, 영역 또는 움직임 벡터마다의 움직임 벡터 해상도가 태그 트리를 이용하여 계층적으로 부호화된 해상도 식별 플래그 또는 해상도 정보를 복호화하여 영역 또는 움직임 벡터마다의 움직임 벡터 해상도를 복원하거나, 영역 또는 움직임 벡터마다의 움직임 벡터 해상도의 빈도수에 따라 해상도 식별 플래그 또는 해상도 정보에 할당하는 비트수를 변경하여 복호화하거나, 영역 또는 움직임 벡터별로 복호화되는 해상도 식별 플래그 또는 해상도 정보가 추정 가능함을 나타내는 플래그인 경우에는 미리 약속된 추정 방식에 따라 움직임 벡터 해상도를 추정하여 추정된 움직임 벡터 해상도를 해당 영역 또는 움직임 벡터의 움직임 벡터 해상도로서 복원하고, 영역 또는 움직임 벡터별로 복호화되는 해상도 식별 플래가 추정 불가능함을 나타내는 플래그인 경우에는 복호화된 해상도 식별 플래그 또는 해상도 정보가 나타내는 움직임 벡터 해상도를 복원할 수 있다. 이때, 영상 복호화 장치(1800)는 비트스트림의 헤더로부터 쿼드 트리 계층의 최대 개수 및 쿼드 트리 계층의 최하위 노드가 가리키는 영역 크기를 나타내는 식별자와 태그 트리 계층의 최대 개수 및 태그 트리 계층의 최하위 노드가 가리키는 영역 크기를 나타내는 식별자를 복호화하여 복원할 수 있다.
또한, 영상 복호화 장치(1800)는 비트스트림으로부터 부호화된 차분 벡터를 추출하고 복호화하되, 복원된 영역 또는 움직임 벡터마다의 움직임 벡터 해상도에 따라 복호화하여 영역 또는 움직임 벡터마다의 차분 벡터를 복원할 수 있으며, 추가로 영역 또는 움직임 벡터마다의 예측 움직임 벡터를 예측하고 복원된 차분 벡터 및 예측 움직임 벡터를 이용하여 영역마다의 움직임 벡터를 복원할 수 있다.
이를 위해, 영상 복호화 장치(1800)는 UVLC를 이용하여 차분 벡터를 복호화할 수 있으며, 이 경우 K차 지수 골룸 코드를 이용하여 복호화하되, 복원된 영역 또는 움직임 벡터마다의 움직임 벡터 해상도에 따라 K차 지수 골룸 코드의 차수(K)를 변경할 수 있다. 영상 복호화 장치(1800)는 문맥 기반 이진 산술 부호화를 이용하여 차분 벡터를 복호화할 수 있으며, 이 경우 단항/K차 지수 골룸 결합형 코드를 이용하여 복호화하되, 복원된 영역 또는 움직임 벡터마다의 움직임 벡터 해상도에 따라 단항/K차 지수 골룸 결합형 코드의 차수(K)와 최대값(T)를 변경하여 복호화할 수 있다. 영상 복호화 장치(1800)는 CABAC를 이용하여 차분 벡터를 복호화하는 경우에는, 복원된 영역 또는 움직임 벡터마다의 움직임 벡터 해상도에 따라 누적 확률을 다르게 계산하여 복호화할 수 있다.
또한, 영상 복호화 장치(1800)는 각 영역의 주위 영역의 움직임 벡터를 이용하여 각 영역 또는 움직임 벡터의 움직임 벡터에 대한 예측 움직임 벡터를 예측하되, 주위 영역의 움직임 벡터 해상도와 각 영역의 움직임 벡터 해상도가 동일하지 않은 경우에는, 주위 영역의 움직임 벡터 해상도를 각 영역 또는 움직임 벡터의 움직임 벡터 해상도로 변환하여 예측할 수 있다. 예측 움직임 벡터는 영상 부호화 장치와 복호화 장치에서 동일한 방법으로 얻어질 수 있다. 따라서 도 22 내지 도 26을 참조하면서 영상 부호화 장치에 의한 예측 움직임 벡터를 유도하는 다양한 실시예들 및 움직임 벡터 해상도 변환에 관한 실시예들은 본 발명에 따른 영상 복호화 장치에서도 동일하게 구현될 수 있다.
또한, 영상 복호화 장치(1800)는 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 복호화 방법을 달리할 수 있다.
또한, 영상 복호화 장치(1800)는 산술 복호화로 엔트로피 복호화할 때, 영역 또는 움직임 벡터마다 결정되는 움직임 벡터 해상도를 각 영역의 주위 영역의 움직임 벡터 해상도의 분포에 따라 해상도 식별 플래그 또는 해상도 정보의 이진화 비트열의 생성 방법을 달리 하고, 확률 모델도 주위 영역의 움직임 벡터 해상도의 분포 및 현재까지 발생한 움직임 벡터 해상도의 확률에 따라 달리 적용하여 산술 복호화 및 확률 업데이트를 수행할 수 있다. 또한 비트의 위치에 따라 각기 다른 확률 모델을 사용하여 산술 복호화 및 확률 업데이트를 수행할 수 있다.
영상 복호화 장치(1800)는 각 영역 중 하나 이상의 영역이 블록이고 블록 모드가 스킵 모드인 경우에는, 주위 영역의 움직임 벡터 해상도 중 가장 높은 해상도로 주위 영역의 움직임 벡터 해상도를 변환하여 예측할 수 있다.
도 51은 본 발명의 제2 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 방법을 설명하기 위한 순서도이다.
본 발명의 제2 실시예에 따른 적응적 움직임 벡터 해상도를 이용한 영상 복호화 방법은 해상도 지정 플래그 추출단계기(S5102), 해상도 복호단계(S5104), 차분 벡터 복호단계(S5106), 인터 예측 복호화단계(S5108) 및 해상도 전환 플래그 추출단계(S5110)를 포함하여 구성될 수 있다.
여기서 해상도 지정 플래그 추출단계기(S5102)는 해상도 지정 플래그 추출기(4810)의 동작에, 해상도 복호단계(S5104)는 해상도 복호화기(4820)의 동작에, 차분 벡터 복호단계(S5106)는 차분 벡터 복호화기(4830)의 동작에, 인터 예측 복호화단계(S5108)는 인터 예측 복호화기(4840)의 동작에, 해상도 전환 플래그 추출단계(S5110)는 해상도 전환 플래그 추출기(4850)의 동작에 각각 대응될 수 있으므로, 자세한 설명은 생략한다.
한편, 본 발명의 일 실시예에 따른 영상 부호화/복호화 방법은 본 발명의 제1 또는 제2 실시예에 따른 영상 부호화 방법과 제1 또는 제2 실시예에 따른 영상 복호화 방법을 결합함으로써 구현될 수 있다.
본 발명의 일 실시예에 따른 영상 부호화/복호화 방법은 영역 또는 움직임 벡터마다 움직임 벡터 해상도를 결정하고 영역 또는 움직임 벡터마다 결정된 움직임 벡터 해상도에 따른 움직임 벡터를 이용하여 영상을 영역 단위로 인터 예측 부호화하는 영상 부호화단계; 및 비트스트림으로부터 해상도 정보를 추출하여 해상도를 복원하고 복원된 각 영역 또는 움직임 벡터의 움직임 벡터 해상도에 따른 움직임 벡터를 이용하여 각 영역을 인터 예측 복호화하는 영상 복호화단계를 포함한다.
도 59는 본 발명의 일 실시예에 따른 움직임 벡터 복호화 장치를 간략하게 나타낸 블록 구성도이다.
본 발명의 일 실시예에 따른 움직임 벡터 복호화 장치(5900)는 비트스트림을 복호화하여 차분 움직임 벡터의 해상도를 복원하는 해상도 복호화기(Precision Decoder, 5910) 및 복원되는 차분 움직임 벡터의 해상도를 기초로 비트스트림을 복호화하여 차분 움직임 벡터를 복원하고, 복원되는 차분 움직임 벡터와 예측 움직임 벡터를 가산하여 움직임 벡터를 복원하는 차분 움직임 벡터 복호화기(Differential Motion Vector Decoder, 5920)를 포함하여 구성될 수 있다.
움직임 벡터 복호화 장치(5900)는 임의의 크기의 영역 또는 움직임 벡터마다 움직임 벡터 해상도가 부호화된 경우, 비트스트림을 복호화하여 움직임 벡터의 해상도보다 같거나 낮은 차분 움직임 벡터의 해상도를 복원한다. 또한, 움직임 벡터 복호화 장치(5900)는 움직임 벡터의 해상도가 부호화된 임의 크기의 영역의 하위 영역에 대한 차분 움직임 벡터의 해상도를 복원할 수 있다. 예를 들면, 비트스트림을 복호화하여 비트스트림의 헤더에 정의된 매크로블록마다의 최적의 움직임 벡터의 해상도를 복원하고, 움직임 벡터의 각 컴포넌트마다 최적의 차분 움직임 벡터를 복원한다고 가정하면, 매크로블록 내의 블록이 4개로 나누어져 움직임 벡터가 4 개이고 현재 매크로블록의 움직임 벡터의 해상도가 1/8인 경우, 차분 움직임 벡터의 각 컴포넌트의 해상도는 1/8보다 같거나 낮은 해상도로 복원된다.
또한, 움직임 벡터 복호화 장치(5900)는 비트스트림을 복호화하여 비트스트림의 헤더에서 지정된 참조 픽처의 해상도를 나타내는 정보, 차분 움직임 벡터의 해상도 종류에 대한 정보를 차분 움직임 벡터의 해상도가 부호화된 임의의 크기 영역 단위로 복원한다. 여기서, 비트스트림의 헤더는 픽쳐 파라미터 셋, 시퀀스 파라미터 셋, 슬라이스 헤더, 코딩 유닛 헤더, 매크로블록 헤더 등이 될 수 있다. 임의의 크기 영역 단위는 매크로블록이 될 수도 있고 64x64 또는 32x16와 같은 다양한 형태와 크기의 블록이 될 수도 있다. 또한, 움직임 벡터 복호화 장치(5900)는 각 움직임 벡터마다 또는 움직임 벡터의 각 컴포넌트마다 차분 움직임 벡터의 해상도를 복원할 수 있다.
움직임 벡터 복호화 장치(5900)는 비트스트림의 헤더에 정의된 참조 픽처의 해상도에 따라 예측 움직임 벡터의 해상도를 결정하거나, 임의의 해상도로 결정할 수도 있다. 움직임 벡터 복호화 장치(5900)는 복원된 차분 움직임 벡터의 해상도를 이용하여 차분 움직임 벡터를 복원한 후, 결정된 예측 움직임 벡터를 가산하여 움직임 벡터를 복원한다.
움직임 벡터 복호화 장치(5900)는 비트스트림의 헤더에서 지정된 임의의 크기 영역 단위, 움직임 벡터 단위 또는 움직임 벡터의 각 컴포넌트 단위로 차분 움직임 벡터의 해상도의 종류가 두 개 이상인 경우, 비트스트림을 복호화하여 어떠한 해상도가 최적인지를 나타내는 정보를 임의의 크기 영역 단위, 움직임 벡터 단위 또는 움직임 벡터의 각 컴포넌트 단위로 복원하며, 복원된 해상도를 이용하여 차분 움직임 벡터를 복원한다.
예를 들어, 비트스트림의 슬라이스 헤더에서 참조 픽처의 해상도가 8배로 보간된 참조 픽처를 이용하고 2 종류의 보간 필터 계수 세트가 부호화되었으며 움직임 벡터마다 차분 움직임 벡터의 해상도가 변경 가능함을 나타내는 정보가 부호화된 경우, 움직임 벡터 복호화 장치(5900)는 비트스트림을 복호화하여 차분 움직임 벡터의 해상도를 나타내는 정보를 복원하고 그를 이용하여 차분 움직임 벡터를 복원한다. 또한, 움직임 벡터 복호화 장치(5900)는 비트스트림을 복호화하여 비트스트림의 현재 복호화하고자 하는 영역에 대한 헤더 및 이전의 헤더에서 부호화된 보간 필터의 계수들 중에서 최적의 보간 필터를 임의 크기의 영역 및 움직임 벡터 단위로 어떠한 최적의 보간 필터를 사용하였는지를 나타내는 정보를 복원한다.
움직임 벡터 복호화 장치(5900)는 비트스트림의 헤더에서 차분 움직임 벡터의 해상도의 종류가 1개인 경우, 헤더에 정의된 하위 영역을 동일한 차분 움직임 벡터의 해상도로 차분 움직임 벡터를 복원한다. 또한, 움직임 벡터 복호화 장치(5900)는 비트스트림의 슬라이스 헤더에서 움직임 벡터의 해상도가 고정임을 나타내는 정보를 복원한 경우, 해당 슬라이스의 차분 움직임 벡터를 동일한 해상도로 복원한다.
이하에서는 도 53 내지 도 57을 통해 움직임 벡터 복호화 장치(5900)가 차분 움직임 벡터를 복호화하는 과정을 설명한다.
움직임 벡터 복호화 장치(5900)는 차분 움직임 벡터의 해상도가 최대 해상도를 나타내는지 또는 해상도 분류를 나타내는지 여부에 따라 차분 움직임 벡터를 다르게 복원한다.
임의 크기의 영역, 차분 움직임 벡터 또는 차분 움직임 벡터의 각 컴포넌트의 해상도가 최대 해상도를 나타내는 경우, 움직임 벡터 복호화 장치(5900)는 각 최대 해상도에 따른 부호 번호에 대응하는 차분 움직임 벡터를 복원할 수 있다.
예를 들면, 도 53에 도시한 부호 번호 테이블과 같이 차분 움직임 벡터의 해상도의 종류가 2, 1, 1/2, 1/4, 1/8와 같이 5종류가 이용된다고 헤더에 정의되어 있고 임의 크기의 영역의 복원된 차분 움직임 벡터의 해상도가 1/2인 경우, 임의 크기의 영역의 차분 움직임 벡터의 엔트로피 복호화된 부호 번호를 1/2 해상도 단위의 차분 움직임 벡터로 변환되어 복호화한다. 일 예로, 차분 움직임 벡터의 x 컴포넌트의 해상도를 나타내는 정보가 1/8로 복원되었고, 엔트로피 복호화되어 복원된 부호 번호가 '5'인 경우 도 53에 나타낸 부호 번호 테이블에 의해서 차분 움직임 벡터는 5/8로 복원되고, y 컴포넌트의 해상도를 나타내는 정보가 1/2로 복원되었고, 엔트로피 복호화되어 복원된 부호 번호가 '7'인 경우 도 53에 나타낸 부호 번호 테이블에 의해서 차분 움직임 벡터는 7/2로 복원된다. 위의 예시에서는 도 53의 최대 해상도가 2 단위, 1 단위, 1/2 단위, 1/4 단위 및 1/8 단위인 경우의 부호 번호 테이블을 이용하는 것으로 설명하였으나 최대 해상도의 종류는 어떠한 방법으로도 분류될 수 있다.
임의 크기의 영역, 차분 움직임 벡터 또는 차분 움직임 벡터의 각 컴포넌트의 해상도가 최대 해상도를 나타내는 경우, 움직임 벡터 복호화 장치(5900)는 각 해상도 분류에 따른 부호 번호에 대응하는 차분 움직임 벡터를 복원할 수 있다. 즉, 움직임 벡터 복호화 장치(5900)는 각 해상도 분류마다 차분 움직임 벡터의 값이 중복되지 않는 부호 번호가 할당된 부호 번호 테이블을 이용하여 차분 움직임 벡터를 복원할 수 있다.
예를 들면, 도 54에 도시한 바와 같이 차분 움직임 벡터의 해상도 종류가 ⓐ, ⓑ, ⓒ, ⓓ, ⓔ, ⓕ와 같이 6 종류가 이용된다고 헤더에 정의되어 있고, 임의 크기의 영역의 차분 움직임 벡터의 해상도를 나타내는 정보가 ⓒ로 복원된 경우, 임의 크기의 영역의 차분 움직임 벡터는 엔트로피 복호화되어 복원된 부호 번호를 도 54를 참조하여 차분 움직임 벡터로 복원할 수 있다. 일 예로, 차분 움직임 벡터의 x 컴포넌트의 해상도를 나타내는 정보가 ?로 복원되고 엔트로피 복호화되어 복원된 부호 번호가 '3'인 경우 도 54에 의해서 차분 움직임 벡터는 5/8로 복원되고, 차분 움직임 벡터의 y 컴포넌트의 해상도를 나타내는 정보가 ?로 복원되었고, 엔트로피 복호화되어 복원된 부호 번호가 '4'인 경우 도 54에 의해서 차분 움직임 벡터는 7/2로 복원될 수 있다.
또한, 움직임 벡터 복호화 장치(5900)는 복호화하고자 하는 영역의 차분 움직임 벡터의 마지막 컴포넌트 또는 마지막 차분 움직임 벡터 이전에 나온 차분 움직임 벡터의 컴포넌트 또는 차분 움직임 벡터의 해상도가 복원된 최대 해상도와 같지 않은 경우, 차분 움직임 벡터의 마지막 컴포넌트 또는 마지막 차분 움직임 벡터에 대해서는 도 56에 나타낸 부호 번호 테이블을 이용하여 복원한다. 왜냐하면, 차분 움직임 벡터의 해상도가 최대 해상도를 나타내는 경우, 마지막 차분 움직임 벡터의 컴포넌트 또는 마지막 차분 움직임 벡터 이외의 차분 움직임 벡터의 컴포넌트 또는 차분 움직임 벡터에서 최대 해상도와 같은 해상도의 차분 움직임 벡터가 발생하지 않은 경우, 마지막의 차분 움직임 벡터의 컴포넌트 또는 마지막 차분 움직임 벡터는 최대 해상도임을 알 수 있으므로, 복원된 최대 해상도를 마지막 차분 움직임 벡터의 컴포넌트 또는 마지막 차분 움직임 벡터로 설정하여 복원한다.
예를 들면, 차분 움직임 벡터마다 최대 해상도를 복원하는 경우, 최대 해상도가 1/8로 복원된 후, 첫 번째 차분 움직임 벡터의 컴포넌트의 엔트로피 복호화되어 복원된 부호 번호가 '6'인 경우 도 53에 의해 차분 움직임 벡터 3/4으로 복원된다. 마지막 차분 움직임 벡터의 컴포넌트 이전의 차분 움직임 벡터의 해상도가 1/8인 차분 움직임 벡터가 발생하지 않았으므로 마지막 차분 움직임 벡터의 컴포넌트의 엔트로피 복호화되어 복원된 부호 번호가 '3'인 경우, 도 56에 나타낸 부호 번호 테이블에 의해 차분 움직임 벡터는 5/8로 복원된다.
또한, 움직임 벡터의 해상도를 차분 움직임 벡터보다 먼저 복호화하는 경우, 임의의 해상도에만 차분 움직임 벡터의 컴포넌트가 0인 부호번호를 두고 나머지 해상도에는 차분 움직임 벡터는 0이 없는 부호번호 테이블을 이용하여 복호화할 수 있다. 예를 들면, 움직임 벡터의 해상도를 차분 움직임 벡터보다 먼저 복호화하고, 1, 1/2, 1/4, 1/8의 4가지의 해상도가 사용되며, 임의의 해상도가 1/8인 경우, 도 57과 같이 1/8 해상도에만 차분 움직임 벡터가 0인 테이블로 복호화할 수 있다.
또한, 움직임 벡터 복호화 장치(5900)는 임의의 해상도로 복원된 차분 움직임 벡터의 부호 번호가 임계값보다 큰 경우에만 차분 움직임 호 해상도를 복원하며, 복원된 차분 움직임 벡터의 해상도를 기초로 부호 번호를 차분 움직임 벡터로 변환하여 복원한다.
또한, 움직임 벡터 복호화 장치(5900)는 차분 움직임 벡터의 해상도를 복원하는 데 있어서, 단항 코드(Unary Code), 트런케이티드 단항 코드(Trucated Unary Code), 익스포넨셜 골룸 코드(Exp-Golomb Code), 테그 트리(Tag Tree) 및 쿼드 트리(Quad Tree) 등 어떠한 이진 복호화 방법을 이용할 수 있다. 또한, 움직임 벡터 복호화 장치(5900)는 단항 코드(Unary Code), 트런케이티드 단항 코드(Trucated Unary Code), 익스포넨셜 골룸 코드(Exp-Golomb Code), 테그 트리(Tag Tree) 및 쿼드 트리(Quad Tree) 등을 이용하여 차분 움직임 벡터의 해상도를 이진화한 후, 주위의 차분 움직임 벡터의 해상도 또는 이진 비트 색인 번호로 현재 차분 움직임 벡터의 해상도의 확률 모델을 결정하여 이진 산술 복호화할 수도 있다. 또한, 어떠한 이진 복호화를 이용하는 경우, 현재까지 부호화 차분 움직임 벡터의 해상도들의 확률 중 가장 높은 확률 순으로 부호 번호를 작은 것으로 할당하거나, 주위의 차분 움직임 벡터의 해상도의 분포를 기초로 가장 높은 확률의 해상도에 짧은 부호 번호 또는 부호 비트를 할당하여 복호화할 수 있다. 이러한 엔트로피 부호화 방법으로서는 가변 길이 부호화(VLC: Variable Lenth Coding)또는 산술 부호화 방법이 이용 될 수 있다. 이때, 산술 부호화 방법을 사용하는 경우, 주위의 신텍스(Syntax)의 분포를 이용하여 현재 신텍스를 복호화할 때의 확률 모델을 달리하여 복호화할 수 있다.
도 60은 본 발명의 일 실시예에 따른 움직임 벡터 복호화 방법을 설명하기 위한 순서도이다.
본 발명의 일 실시예에 따른 움직임 벡터 복호화 방법에 따르면, 움직임 벡터 복호화 장치(5900)는 비트스트림을 복호화하여 차분 움직임 벡터의 해상도를 복원하고(S6010), 복원되는 차분 움직임 벡터의 해상도를 기초로 비트스트림을 복호화하여 차분 움직임 벡터를 복원하며(S6020), 복원되는 차분 움직임 벡터와 예측 움직임 벡터를 가산하여 움직임 벡터를 복원한다(S6030).
또한, 움직임 벡터 복호화 장치(5900)는 비트스트림을 복호화하여 참조 픽처의 해상도 및 차분 움직임 벡터의 후보 해상도를 추가로 복원할 수 있다.
단계 S6010에서, 움직임 벡터 복호화 장치(5900)는 차분 움직임 벡터의 컴포넌트마다 독립적으로 해상도를 복원할 수 있다.
단계 S6010에서, 움직임 벡터 복호화 장치(5900)는 차분 움직임 벡터의 해상도 분류를 차분 움직임 벡터의 해상도로서 복원할 수 있다.
단계 S6020에서, 움직임 벡터 복호화 장치(5900)는 차분 움직임 벡터의 후보 해상도마다 차분 움직임 벡터에 부호 번호가 할당된 부호 번호 테이블을 이용하여 차분 움직임 벡터를 복원할 수 있다.
단계 S6020에서, 움직임 벡터 복호화 장치(5900)는 소정의 영역 단위로 차분 움직임 벡터를 복원하되, 소정의 영역 내의 마지막 차분 움직임 벡터 또는 마지막 차분 움직임 벡터의 컴포넌트 이전까지의 차분 움직임 벡터의 해상도 또는 차분 움직임 벡터의 컴포넌트의 해상도가 최대 해상도가 아닌 경우, 다른 부호 번호 테이블을 이용하여 마지막 차분 움직임 벡터 또는 마지막 차분 움직임 벡터의 컴포넌트를 복원할 수 있다.
단계 S6020에서, 움직임 벡터 복호화 장치(5900)는 차분 움직임 벡터의 후보 해상도 분류마다 차분 움직임 벡터에 부호 번호가 할당된 부호 번호 테이블을 이용하여 차분 움직임 벡터를 복원할 수 있다. 여기서, 부호 번호 테이블은 차분 움직임 벡터의 후보 해상도 분류 간에 차분 움직임 벡터의 값이 0인 경우를 제외한 나머지 값이 중복되지 않도록 구성되거나, 차분 움직임 벡터의 후보 해상도 분류 간에 차분 움직임 벡터의 값이 중복되지 않도록 구성될 수 있다.
이상에서 전술한 바와 같이, 본 발명의 일 실시예에 따르면, 움직임 벡터의 해상도뿐만 아니라 차분 움직임 벡터의 해상도를 소정의 부호화 영역마다 적응적으로 결정하여 차분 움직임 벡터를 부호화할 수 있으므로, 차분 움직임 벡터의 크기를 줄여 영상의 압축 효율을 향상시킬 수 있다.
또한, 임의의 크기 영역 단위로 적응적으로 움직임 벡터 해상도가 부호화된경우, 비트스트림을 복호화하여 차분 움직임 벡터의 해상도를 복원하고 복원되는 차분 움직임 벡터의 해상도를 기초로 움직임 벡터를 복원함으로써, 영상의 복원 효율을 향상시킬 수 있다.
이상에서, 본 발명의 실시예에 따른 움직임 벡터 부호화 장치 및 움직임 벡터 복호화 장치는 각각이 독립적인 장치로 구현된 것으로 설명하였지만, 움직임 벡터 부호화 장치 및 움직임 벡터 복호화 장치는 하나의 영상처리 장치 내에 구현될 수도 있다. 이와 같은 영상처리 장치는 영상신호를 부호화하여 다른 영상처리 장치로 전송할 수 있을 뿐만 아니라, 다른 영상처리 장치로부터 부호화된 비트스트림을 수신하여 영상신호를 복원하여 재생하는 것이 가능하다.
움직임 벡터 복호화 장치(5900)는 차분 움직임 벡터의 해상도 식별 플래그를 이용하여 차분 움직임 벡터의 컴포넌트 별로 복호화를 수행할 수도 있다. 예를 들어, 차분 움직임 벡터의 해상도를 1/4과 1/8을 사용하고, 현재 차분 움직임 벡터 해상도가 1/8이고 차분 움직임 벡터의 값이 (1/4, 1/8)인 경우, 차분 움직임 벡터 해상도 식별 플래그를 1/8로 부호화하고 도 61과 같은 차분 움직임 벡터의 부호 번호 테이블을 이용하여 차분 움직임 벡터의 컴포넌트 별로 복호화를 수행할 수 있다. 이 경우, 차분 벡터 복호화기(5900)는 차분 움직임 벡터의 해상도 1/8을 비트스트림에서 추출하여 복호하고, 차분 움직임 벡터의 x 컴포넌트 부호 번호 2를 비트스트림에서 추출하고 도 61의 테이블 (1)을 이용하여 1/4을 복호하면 y 컴포넌트가 1/8 해상도임을 알 수 있다. 따라서, 비트스트림에서 추출한 y 컴포넌트의 부호 번호 0은 도 61의 테이블 (2)를 이용하여 복호하면 1/8로 복호할 수 있다. 또는 차분 움직임 벡터 해상도가 1/4이고 차분 움직임 벡터의 값이 (1/4, 3/4)인 경우 복호화기는 비트스트림에서 차분 움직임 벡터 해상도 식별 플래그 1/4을 추출하고 복호하여, 비트스트림에서 추출한 차분 움직임 벡터의 x 컴포넌트와 y 컴포넌트의 부호 번호(1, 3)을 도 61의 테이블 (3)을 이용하여 (1/4, 3/4)로 복호화할 수 있다.
움직임 벡터 복호화 장치(5900)는 예측 움직임 벡터 해상도 식별 플래그를 이용하여 복호화를 수행할 수도 있다. 예를 들어, 움직임 벡터 해상도 지정 플래그가 (1/1, 1/2, 1/4, 1/8)을 나타내고 예측 움직임 벡터 해상도 식별 플래그를 부호화하는 경우, 도 62와 같이 블록 A의 해상도는 1/4이고, 블록 B의 해상도는 1/8이며, 블록 C의 해상도는 1/2이고, 블록 D의 해상도는 1/1일 수 있다. 예측 움직임 벡터 해상도가 1/4이고 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 블록 A의 움직임 벡터로 할 수 있다. 이것은 부호화기와 복호화기가 동일하다. 이러한 경우, 차분 움직임 벡터는 도 63과 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 현재 블록 X의 해상도가 1/8이라면 예측 움직임 벡터는 해상도를 1/8로 변환한 블록 A의 움직임 벡터로 할 수 있다. 이러한 경우에는 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 현재 블록 X의 해상도 1/8이라고 해도 예측 움직임 벡터는 해상도를 변환하지 않은 블록 A의 움직임 벡터로 할 수도 있다. 이러한 경우 차분 움직임 벡터 부호 테이블은 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
다른 예로, 움직임 벡터 해상도 지정 플래그가 (1/4, 1/8)을 나타내고 예측 움직임 벡터 해상도 식별 플래그를 복호화하는 경우, 도 65와 같이 블록 A, B, D의 해상도는 1/4이고 블록 C의 해상도는 1/8일 수 있다. 예측 움직임 벡터 해상도가 1/4이고 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 전술한 수학식 11과 같이 계산할 수 있다. 이러한 경우 차분 움직임 벡터는 도 63의 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 예측 움직임 벡터 해상도가 1/4이고, 현재 블록 X의 해상도가 1/8이라면 예측 움직임 벡터는 수학식 11과 같이 계산하고 해상도를 1/8로 변환한 값을 사용할 수 있다. 이러한 경우, 차분 움직임 벡터는 도 64와 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
또는 예측 움직임 벡터 해상도가 1/8이고, 현재 블록 X의 해상도가 1/4이라면 예측 움직임 벡터는 블록 C의 움직임 벡터의 해상도를 1/4로 변환한 값이 된다. 이러한 경우 차분 움직임 벡터는 도 63과 같은 차분 움직임 벡터 부호 번호 테이블을 이용할 수 있다.
이상에서 전술한 바와 같이, 본 발명의 실시예에 따르면, 영상의 특성(예를 들어, 영상의 복잡한 정도 또는 영상의 움직임 정도)에 따라 임의의 크기의 영역 단위 또는 움직임 벡터 단위로 움직임 벡터 해상도를 결정하여 적응적인 움직임 벡터 해상도를 가지는 움직임 벡터를 이용하여 인터 예측 부호화를 수행할 수 있기 때문에, 영상의 품질을 높이면서도 부호화에 따른 비트량을 줄일 수 있어서 압축 효율을 향상시킬 수 있다. 예를 들어, 영상의 임의의 픽처에서 일부 영역은 영상의 복잡한 정도가 크지만 움직임 정도가 작고, 다른 영역은 영상의 복잡한 정도가 작지만 움직임 정도가 큰 경우, 일부 영역에 대해서는 움직임 벡터 해상도를 높여 인터 예측 부호화하면 인터 예측의 정확성이 높아져서 잔차 신호와 그에 따른 부호화된 비트량을 줄일 수 있을 뿐만 아니라 움직임 정도가 작아 움직임 벡터 해상도가 커져도 움직임 벡터를 부호화한 비트량을 크게 증가시키지 않으므로, 영상 품질을 향상시키면서도 부호화 비트량을 줄일 수 있다. 또한, 다른 영역에 대해서는 움직임 벡터 해상도는 낮추어 인터 예측 부호화하더라도 영상 품질을 크게 떨어뜨리지 않으면서도 움직임 벡터 해상도가 작기 때문에 움직임 벡터를 부호화한 비트량을 줄일 수 있어, 영상 품질을 크게 떨어뜨리지 않으면서도 전체적인 부호화 비트량을 줄일 수 있어 압축 효율을 향상시킬 수 있다.
이상에서, 본 발명의 실시예를 구성하는 모든 구성 요소들이 하나로 결합하거나 결합하여 동작하는 것으로 설명되었다고 해서, 본 발명이 반드시 이러한 실시예에 한정되는 것은 아니다. 즉, 본 발명의 목적 범위 안에서라면, 그 모든 구성 요소들이 하나 이상으로 선택적으로 결합하여 동작할 수도 있다. 또한, 그 모든 구성 요소들이 각각 하나의 독립적인 하드웨어로 구현될 수 있지만, 각 구성 요소들의 그 일부 또는 전부가 선택적으로 조합되어 하나 또는 복수 개의 하드웨어에서 조합된 일부 또는 전부의 기능을 수행하는 프로그램 모듈을 갖는 컴퓨터 프로그램으로서 구현될 수도 있다. 그 컴퓨터 프로그램을 구성하는 코드들 및 코드 세그먼트들은 본 발명의 기술 분야의 당업자에 의해 용이하게 추론될 수 있을 것이다. 이러한 컴퓨터 프로그램은 컴퓨터가 읽을 수 있는 저장매체(Computer Readable Media)에 저장되어 컴퓨터에 의하여 읽혀지고 실행됨으로써, 본 발명의 실시예를 구현할 수 있다. 컴퓨터 프로그램의 저장매체로서는 자기 기록매체, 광 기록매체, 캐리어 웨이브 매체 등이 포함될 수 있다.
또한, 이상에서 기재된 "포함하다", "구성하다" 또는 "가지다" 등의 용어는, 특별히 반대되는 기재가 없는 한, 해당 구성 요소가 내재할 수 있음을 의미하는 것이므로, 다른 구성 요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있는 것으로 해석되어야 한다. 기술적이거나 과학적인 용어를 포함한 모든 용어들은, 다르게 정의되지 않는 한, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미가 있다. 사전에 정의된 용어와 같이 일반적으로 사용되는 용어들은 관련 기술의 문맥상의 의미와 일치하는 것으로 해석되어야 하며, 본 발명에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
이상에서 설명한 바와 같이 본 발명은 동영상을 압축하는 영상 처리 분야에 적용되어, 임의의 크기 영역 단위로 차분 움직임 벡터의 해상도를 적응적으로 결정하여 차분 움직임 벡터를 부호화함으로써 움직임 벡터의 부호화 효율과 영상의 압축 효율을 향상시킬 수 있으며, 임의의 크기 영역 단위로 적응적으로 움직임 벡터 해상도가 부호화된 경우에는 비트스트림을 복호화하여 차분 움직임 벡터의 해상도를 복원하고 복원되는 차분 움직임 벡터의 해상도를 기초로 움직임 벡터를 복원함으로써 영상의 복원 효율을 향상시킬 수 있는 효과를 발생하는 매우 유용한 발명이다.
110: 예측기 120: 감산기
810: 복호화기 820: 역 양자화기
830: 역 변환기 840: 가산기
850: 예측기 860: 메모리
810: 복호화기 820: 역 양자화기
830: 역 변환기 840: 가산기
850: 예측기 860: 메모리
Claims (12)
- 움직임 벡터를 부호화하는 방법에 있어서,
참조 픽처의 분수 단위 보간 정밀도를 지시하는 디폴트 움직임 벡터 해상도가 지정되는 상위 영상영역 내에서 현재 블록의 현재 움직임 벡터를 결정하는 단계;
주변 블록의 움직임 벡터로부터 상기 현재 블록의 예측 움직임 벡터를 결정하는 단계;
상기 현재 움직임 벡터와 상기 예측 움직임 벡터로부터 상기 현재 블록의 차분 움직임 벡터를 결정하는 단계;
상기 현재 움직임 벡터의 해상도 또는 상기 차분 움직임 벡터의 해상도가 상기 상위 영상영역에서 지정되는 디폴트 움직임 벡터 해상도와 서로 상이한지 여부를 나타내는 해상도 변경 정보를 부호화하는 단계; 및
상기 결정된 차분 움직임 벡터를 부호화하는 단계
를 포함하는 것을 특징으로 하는 움직임 벡터 부호화 방법. - 제1항에 있어서,
상기 상위 영상영역에서 상기 디폴트 움직임 벡터 해상도를 설정하고, 그 설정된 디폴트 움직임 벡터 해상도에 대한 정보를 부호화하는 단계를 더 포함하는 것을 특징으로 하는 움직임 벡터 부호화 방법. - 제1항에 있어서,
상기 해상도 변경 정보는 상기 상위 영상영역 내에서 상기 현재 블록이 속하는 하위 영상영역, 상기 현재 블록 또는 상기 차분 움직임 벡터 별로 부호화되는 것을 특징으로 하는 움직임 벡터 부호화 방법. - 제1항에 있어서,
상기 현재 움직임 벡터의 해상도 또는 상기 차분 움직임 벡터의 해상도가 상기 디폴트 움직임 벡터 해상도와 서로 상이한 경우, 상기 현재 움직임 벡터의 해상도 또는 상기 차분 움직임 벡터의 해상도에 대한 정보를 부호화하는 단계를 더 포함하는 것을 특징으로 하는 움직임 벡터 부호화 방법. - 제4항에 있어서,
상기 현재 움직임 벡터의 해상도 또는 상기 차분 움직임 벡터의 해상도에 대한 정보는 상기 디폴트 움직임 벡터 해상도를 제외한 복수 개의 움직임 벡터 해상도 중에서 하나를 지시하는 것을 특징으로 하는 움직임 벡터 부호화 방법. - 제1항에 있어서,
상기 상위 영상영역은 상기 현재 블록이 속하는 코딩 유닛, 픽쳐, 시퀀스 및 슬라이스 중 어느 하나인 것을 특징으로 하는 움직임 벡터 부호화 방법. - 영상 복호화 장치에서 현재 블록의 현재 움직임 벡터를 복호화하는 방법에 있어서,
비트스트림으로부터, 참조 픽처의 분수 단위 보간 정밀도를 나타내는 디폴트 움직임 벡터 해상도가 상기 현재움직임 벡터의 해상도 또는 상기 현재 블록의 차분 움직임 벡터의 해상도와 서로 상이한지 여부를 나타내는 해상도 변경 정보를 복원하는 단계;
상기 복원된 정보에 따라 상기 비트스트림으로부터 상기 차분 움직임 벡터를 복원하는 단계; 및
주변 블록의 움직임 벡터로부터 상기 현재 블록의 예측 움직임 벡터를 결정하고, 상기 복원된 차분 움직임 벡터 및 상기 예측 움직임 벡터를 이용하여 상기 현재 움직임 벡터를 복원하는 단계
를 포함하며, 상기 디폴트 움직임 벡터 해상도는 상기 현재 블록의 상위 영상영역에서 지정되는 것을 특징으로 하는 움직임 벡터 복호화 방법. - 제7항에 있어서,
상기 상위 영상영역은 상기 현재 블록이 속하는 코딩 유닛, 픽쳐, 시퀀스 및슬라이스 중 어느 하나인 것을 특징으로 하는 움직임 벡터 복호화 방법. - 제7항에 있어서,
상기 비트스트림으로부터 상기 디폴트 움직임 벡터 해상도에 대한 정보를 복원하여 상기 상위 영상영역에서 상기 디폴트 움직임 벡터 해상도를 설정하는 단계를 더 포함하는 것을 특징으로 하는 움직임 벡터 복호화 방법. - 제7항에 있어서,
상기 해상도 변경 정보는 상기 상위 영상영역 내에서 상기 현재 블록이 속하는 하위 영상영역, 상기 현재 블록 또는 상기 차분 움직임 벡터 별로 복원되는 것을 특징으로 하는 움직임 벡터 복호화 방법. - 제7항에 있어서,
상기 현재 움직임 벡터의 해상도 또는 상기 차분 움직임 벡터의 해상도가 상기 디폴트 움직임 벡터 해상도와 서로 상이한 경우, 상기 현재 움직임 벡터의 해상도 또는 상기 차분 움직임 벡터의 해상도에 대한 정보를 복원하는 단계를 더 포함하는 것을 특징으로 하는 움직임 벡터 복호화 방법. - 제11항에 있어서,
상기 현재 움직임 벡터의 해상도 또는 상기 차분 움직임 벡터의 해상도에 대한 정보는 상기 디폴트 움직임 벡터 해상도를 제외한 복수 개의 움직임 벡터 해상도 중에서 하나를 지시하는 것을 특징으로 하는 움직임 벡터 복호화 방법.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR20090077452 | 2009-08-21 | ||
KR1020090077452 | 2009-08-21 | ||
KR20100017528 | 2010-02-26 | ||
KR1020100017528 | 2010-02-26 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020100081098A Division KR101449696B1 (ko) | 2009-08-21 | 2010-08-20 | 차분 움직임 벡터의 정밀도를 고려한 움직임 벡터 부호화/복호화 방법 및 장치, 및 그를 위한 영상처리 장치 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140075661A KR20140075661A (ko) | 2014-06-19 |
KR101597278B1 true KR101597278B1 (ko) | 2016-02-25 |
Family
ID=43929561
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020100081098A KR101449696B1 (ko) | 2009-08-21 | 2010-08-20 | 차분 움직임 벡터의 정밀도를 고려한 움직임 벡터 부호화/복호화 방법 및 장치, 및 그를 위한 영상처리 장치 및 방법 |
KR1020140063303A KR101597278B1 (ko) | 2009-08-21 | 2014-05-26 | 차분 움직임 벡터의 해상도를 고려한 움직임 벡터 부호화/복호화 방법 및 장치, 및 그를 위한 영상처리 장치 및 방법 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020100081098A KR101449696B1 (ko) | 2009-08-21 | 2010-08-20 | 차분 움직임 벡터의 정밀도를 고려한 움직임 벡터 부호화/복호화 방법 및 장치, 및 그를 위한 영상처리 장치 및 방법 |
Country Status (1)
Country | Link |
---|---|
KR (2) | KR101449696B1 (ko) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6837965B2 (ja) | 2014-10-31 | 2021-03-03 | サムスン エレクトロニクス カンパニー リミテッド | 符号化装置及び復号装置 |
KR102349788B1 (ko) * | 2015-01-13 | 2022-01-11 | 인텔렉추얼디스커버리 주식회사 | 영상의 부호화/복호화 방법 및 장치 |
KR101782153B1 (ko) * | 2015-06-05 | 2017-09-26 | 인텔렉추얼디스커버리 주식회사 | 움직임 벡터 후보 선택 방법 및 이를 이용하는 영상 부호화/복호화 방법 |
KR20240000649A (ko) | 2015-08-24 | 2024-01-02 | 엘지전자 주식회사 | 인터 예측 모드 기반 영상 처리 방법 및 이를 위한 장치 |
CN114584764A (zh) | 2016-04-29 | 2022-06-03 | 英迪股份有限公司 | 解码和编码视频的方法以及传送比特流的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050013372A1 (en) * | 2003-07-18 | 2005-01-20 | Microsoft Corporation | Extended range motion vectors |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101369746B1 (ko) * | 2007-01-22 | 2014-03-07 | 삼성전자주식회사 | 적응적 보간 필터를 이용한 영상 부호화, 복호화 방법 및장치 |
-
2010
- 2010-08-20 KR KR1020100081098A patent/KR101449696B1/ko active IP Right Grant
-
2014
- 2014-05-26 KR KR1020140063303A patent/KR101597278B1/ko active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050013372A1 (en) * | 2003-07-18 | 2005-01-20 | Microsoft Corporation | Extended range motion vectors |
Also Published As
Publication number | Publication date |
---|---|
KR20140075661A (ko) | 2014-06-19 |
KR20110020213A (ko) | 2011-03-02 |
KR101449696B1 (ko) | 2014-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101441874B1 (ko) | 적응적 움직임 벡터 해상도를 이용한 영상 부호화/복호화 방법 및 장치 | |
KR101678968B1 (ko) | 참조 픽처 보간 방법 및 장치와 그를 이용한 영상 부호화/복호화 방법 및 장치 | |
JP7126308B2 (ja) | 動画像復号装置、動画像復号方法、動画像符号化装置、および、動画像符号化方法 | |
JP7342118B2 (ja) | 多重仮定予測を用いるビデオ信号処理方法及び装置 | |
JP7211816B2 (ja) | イントラブロックコピーマージモードおよび利用できないibc参照領域のパディング | |
JP6074475B2 (ja) | 映像データを復号化する方法 | |
KR101550718B1 (ko) | 영상의 부호화 방법 및 장치, 및 복호화 방법 및 장치 | |
KR101316060B1 (ko) | 인터 예측 부호화된 동영상 복호화 방법 | |
JP7551179B2 (ja) | サブブロックベースのモーション補償を用いたビデオ信号処理方法及び装置 | |
US11979554B2 (en) | Intra prediction-based video signal processing method and device | |
KR20190090728A (ko) | 서브블록 기반의 모션 보상을 이용한 비디오 신호 처리 방법 및 장치 | |
KR102606291B1 (ko) | 교차성분 선형 모델을 이용한 비디오 신호 처리 방법 및 장치 | |
KR101597278B1 (ko) | 차분 움직임 벡터의 해상도를 고려한 움직임 벡터 부호화/복호화 방법 및 장치, 및 그를 위한 영상처리 장치 및 방법 | |
KR20210054011A (ko) | 예측 모드를 시그널링하는 비디오 신호 처리 방법 및 장치 | |
KR20220118351A (ko) | 인트라 예측 신호와 인터 예측 신호의 가중 합을 이용한 예측 블록을 생성하는 방법 및 이를 이용한 장치 | |
KR20240074642A (ko) | 기하학적 분할에 기반하여 크로마 블록을 인트라 예측하는 비디오 코딩방법 및 장치 | |
KR20240084446A (ko) | Mpm 리스트를 적응적으로 생성하는 비디오 코딩방법 및 장치 | |
KR20230126183A (ko) | 인트라 예측에서 mpm 리스트 구성 방법 | |
KR20230137825A (ko) | 인접 정보 기반 팔레트 모드를 이용하는 비디오 코딩 방법 및 장치 | |
KR20240118089A (ko) | 비디오 신호 처리 방법 및 이를 위한 장치 | |
KR20230144426A (ko) | 영상 부호화/복호화 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20190131 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20191216 Year of fee payment: 5 |