움직임 예측(ME: Motion Estimation)은 인터 코딩의 가장 핵심적인 부분이라고 할 수 있습니다.
현재 압축하려는 블럭과 가장 비슷한 블럭이 참조프레임의 어느 부분에 있는지 찾아내는 과정이죠.
따라서 움직임 예측이 정확하게 수행될수록 예측오류데이터[현재 압축하려는 블럭 - 참조프레임에서 찾아낸 블럭]를
줄일 수 있게 되고 결과적으로 더 효율적인 압축이 가능해집니다.
Q-pel과 H-pel은 이런 움직임 예측의 정확도를 뜻하는 용어입니다.
각각 Quarter-Pixel, Half-Pixel의 줄임말인데 1/4 픽셀과 1/2 픽셀을 의미합니다.
즉, 움직임 예측에 Q-pel을 사용한다는 말은 움직임 예측시 1/4 픽셀 만큼의 움직임까지 계산한다는 뜻입니다.
하지만 픽셀은 동영상을 구성하는 가장 작은 단위인데 1/2 또는 1/4 픽셀 만큼의 움직임을 계산한다니..
처음에는 저도 무슨 뜻인지 잘 몰랐지만 리사이즈 필터 등에서 사용하는 보간(Interpolation)을 생각하면 이해가 쉽습니다.
예를 들어 아래 그림의 왼쪽에 보시는 것처럼 정사각형의 검은 물체가 화면의 왼쪽에 붙어있는 상황을 생각해 보겠습니다.
이 검은 물체의 크기가 동영상의 픽셀 하나와 정확히 일치한다고 가정하면 이 검은 물체를 동영상으로 표현했을 때는 오른쪽과 같이 나타나겠죠.
이 상태에서 검은 물체가 오른쪽으로 1/4 픽셀 만큼 이동한다면 동영상에서는 어떻게 표현될까요?
물체가 움직였다고 해서 픽셀도 따라 움직일 수는 없기 때문에 두 픽셀의 값들을 바꿈으로써 움직임을 표현합니다.
즉, 아래와 같이 왼쪽 픽셀은 25% 밝아지고 오른쪽 픽셀은 25% 어두워짐으로써 1/4 픽셀 만큼의 움직임을 표현하는 것이죠.
만약 검은 물체가 1/4 픽셀 만큼 오른쪽으로 계속 움직인다면 픽셀 값의 변화는 아래와 같이 나타나겠죠.
이처럼 동영상에서 1/2 또는 1/4 픽셀 만큼의 움직임은 그에 상응하는 픽셀 값의 변화로 표현합니다.
그리고 이런 픽셀 값들의 변화를 계산하는 과정을 보간(Interpolation)이라고 합니다.
다시 움직임 예측으로 돌아와 보면, 부화소 움직임 예측(Sub-pixel Motion Estimation)이란 정수 단위의 움직임 예측 뿐만 아니라
1/2 또는 1/4 픽셀 만큼의 움직임까지도 계산해서 움직임 예측을 수행하는 방식을 뜻합니다.
그런데 1/2 또는 1/4 픽셀 단위에 해당하는 지점은 실제 존재하는 픽셀이 아니기 때문에 보간을 사용해서 계산해내는 것이죠.
따라서 정수 단위(Full-pel)의 움직임 예측보다 H-pel이나 Q-pel 단위의 움직임 예측은 훨씬 복잡한 과정(보간)을 거치게 됩니다.
H.264/AVC 표준은 최대 1/4 픽셀(Q-pel)까지의 움직임 예측 정확도를 지원합니다.
먼저 정수 픽셀 간의 보간을 통해서 1/2 픽셀 단위에 해당하는 지점의 픽셀 값들을 계산하고,
계산된 1/2 픽셀 단위의 픽셀 값들과 정수 픽셀 단위의 픽셀 값들을 이용해서 1/4 픽셀 단위의 픽셀 값들을 계산합니다.
이때 1/2 픽셀 단위의 보간에는 6-tap FIR 필터가 사용되고 1/4 픽셀 단위의 보간에는 단순한 Linear 보간법이 사용됩니다.
(6-tap FIR 필터는 주변 6개의 픽셀을 이용하는 보간 필터라고 합니다.)
차세대 표준인 H.265/HEVC도 최대 1/4 픽셀까지의 움직임 예측을 지원하지만 조금 더 복잡한 8-tap FIR 필터를 사용한다고 하네요.
'인코딩 일반' 카테고리의 다른 글
동영상 비트레이트로 파일 용량 계산하기 (0) | 2013.09.13 |
---|---|
VideoLAN의 x264 바이너리 다운로드 (5) | 2013.09.05 |
H.264/AVC 표준의 In-Loop Deblocking Filter (2) | 2013.05.19 |
PAFF와 MBAFF: H.264/AVC 표준의 인터레이스 인코딩 (4) | 2013.04.24 |
DTS-HD Master Audio와 TrueHD (3) | 2013.03.22 |