움직임 예측(ME: Motion Estimation)은 인터 코딩의 가장 핵심적인 부분이라고 할 수 있습니다.

현재 압축하려는 블럭과 가장 비슷한 블럭이 참조프레임의 어느 부분에 있는지 찾아내는 과정이죠.

따라서 움직임 예측이 정확하게 수행될수록 예측오류데이터[현재 압축하려는 블럭 - 참조프레임에서 찾아낸 블럭]

줄일 수 있게 되고 결과적으로 더 효율적인 압축이 가능해집니다.


Q-pelH-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 필터를 사용한다고 하네요.






Posted by 김코덱
,