인터 프레임

인터 프레임()은 하나 이상의 인접한 프레임을 기반으로 표현되는 영상 압축 스트림의 프레임이다. 이 용어의 "인터(inter)" 부분은 인터 프레임 예측의 사용을 의미한다. 이러한 종류의 예측은 인접 프레임 간의 시간적 중복성을 활용하여 더 높은 압축률을 가능하게 한다.

 인터 프레임 예측 
인터 코딩된 프레임은 매크로블록으로 알려진 블록으로 나뉜다. 그 후, 각 블록의 원본 픽셀 값을 직접 인코딩하는 대신, 인코더는 이전에 인코딩된 프레임, 즉 참조 프레임에서 인코딩 중인 블록과 유사한 블록을 찾으려고 시도한다. 이 과정은 블록 일치 알고리즘에 의해 수행된다. 인코더가 검색에 성공하면, 블록은 움직임 벡터라고 알려진 벡터로 인코딩될 수 있으며, 이는 참조 프레임에서 일치하는 블록의 위치를 가리킨다. 움직임 벡터 결정 과정은 움직임 예측이라고 불린다.

대부분의 경우 인코더는 성공하지만, 발견된 블록이 인코딩 중인 블록과 정확히 일치하지 않을 수 있다. 이것이 인코더가 그들 간의 차이를 계산하는 이유이다. 이러한 잔여 값은 예측 오차로 알려져 있으며, 변환되어 디코더로 전송되어야 한다.

요약하자면, 인코더가 참조 프레임에서 일치하는 블록을 찾는 데 성공하면, 일치하는 블록을 가리키는 움직임 벡터와 예측 오차를 얻게 된다. 이 두 요소를 사용하여 디코더는 블록의 원본 픽셀을 복구할 수 있다. 다음 이미지는 전체 과정을 시각적으로 보여준다:

섬네일|600px|center|인터프레임 예측 과정. 이 경우, 참조 프레임의 블록과 인코딩 중인 블록 사이에 조명 변화가 있었는데, 이 차이가 해당 블록의 예측 오차가 된다.

이러한 종류의 예측은 장단점이 있다:
 모든 것이 잘 진행되면, 알고리즘은 예측 오차가 거의 없는 일치하는 블록을 찾을 수 있으므로, 일단 변환되면 움직임 벡터와 예측 오차의 전체 크기가 원본 인코딩의 크기보다 작아진다.
 블록 일치 알고리즘이 적합한 일치 블록을 찾지 못하면 예측 오차가 상당히 커진다. 따라서 움직임 벡터와 예측 오차의 전체 크기는 원본 인코딩보다 커진다. 이 경우 인코더는 예외를 만들고 해당 특정 블록에 대한 원본 인코딩을 보낸다.
 참조 프레임에서 일치하는 블록 또한 인터 프레임 예측을 사용하여 인코딩된 경우, 해당 인코딩에서 발생한 오류가 다음 블록으로 전파된다. 만약 모든 프레임이 이 기술을 사용하여 인코딩된다면, 참조 이미지를 얻을 수 없기 때문에 디코더가 비디오 스트림에 동기화할 방법이 없을 것이다.

이러한 단점 때문에, 이 기술이 효율적이고 유용하려면 신뢰할 수 있고 시간적으로 주기적인 참조 프레임이 사용되어야 한다. 이 참조 프레임은 인트라프레임으로 알려져 있으며, 엄격하게 인트라 코딩되므로 추가 정보 없이 항상 디코딩될 수 있다.

대부분의 설계에서 인터 프레임은 P-프레임과 B-프레임의 두 가지 유형이 있다. 이 두 가지 유형의 프레임과 I-프레임(인트라 코딩된 그림)은 일반적으로 화상 집합(GOP)으로 결합된다. I-프레임은 디코딩하는 데 추가 정보가 필요하지 않으며 신뢰할 수 있는 참조로 사용될 수 있다. 이 구조는 또한 디코더 동기화에 필요한 I-프레임 주기성을 달성할 수 있게 한다.

 프레임 유형 
P-프레임과 B-프레임의 차이점은 사용할 수 있는 참조 프레임이다.

 P-프레임 
P-프레임은 순방향 예측 그림을 정의하는 데 사용되는 용어이다. 예측은 이전 그림, 주로 I-프레임 또는 P-프레임에서 이루어지므로, 더 적은 코딩 데이터(I-프레임 크기와 비교할 때 약 50%)가 필요하다.

이 예측을 수행하는 데 필요한 데이터 양은 움직임 벡터와 예측 보정을 설명하는 변환 계수로 구성된다. 여기에는 움직임 보상의 사용이 포함된다.

 B-프레임 
B-프레임은 양방향 예측 그림을 나타내는 용어이다. 이 종류의 예측 방법은 일반적으로 P-프레임보다 적은 코딩 데이터(I-프레임 크기와 비교할 때 약 25%)를 차지하는데, 이는 예측이 이전 프레임 또는 이후 프레임 또는 둘 다에서 이루어지기 때문이다. (B-프레임은 특정 경우에 P-프레임보다 효율성이 떨어질 수도 있다, 예: 무손실 인코딩.)

P-프레임과 유사하게, B-프레임은 움직임 벡터와 변환 계수로 표현된다.
점점 커지는 전파 오류를 피하기 위해 대부분의 인코딩 표준에서는 B-프레임을 추가 예측을 만드는 데 참조로 사용하지 않는다. 그러나 최신 인코딩 방법(예: H.264/MPEG-4 AVC 및 HEVC)에서는 시간적 중복성을 더 잘 활용하기 위해 B-프레임을 참조로 사용할 수 있다.

 전형적인 화상 집합(GOP) 구조 
섬네일|350px|IBBPBB... 화상 집합 방식의 의존성 그림. 시간은 왼쪽에서 오른쪽으로 흐른다.
전형적인 화상 집합(GOP) 구조는 IBBPBBP...이다. I-프레임은 첫 번째 P-프레임을 예측하는 데 사용되며, 이 두 프레임은 첫 번째 및 두 번째 B-프레임을 예측하는 데도 사용된다. 두 번째 P-프레임은 첫 번째 I-프레임을 사용하여 예측된다. 두 P-프레임은 합쳐져 세 번째 및 네 번째 B-프레임을 예측한다. 이 방식은 다음 그림에 나와 있다:

이 구조는 문제가 있음을 시사하는데, 네 번째 프레임(P-프레임)이 두 번째와 세 번째(B-프레임)를 예측하는 데 필요하기 때문이다. 따라서 B-프레임 전에 P-프레임을 전송해야 하며, 이는 전송을 지연시킬 것이다(P-프레임을 보관해야 할 것이다).

이 구조는 다음과 같은 장점이 있다:
 가능한 가려진 영역 문제를 최소화한다.
 P-프레임과 B-프레임은 I-프레임보다 적은 데이터를 필요로 하므로, 전송되는 데이터가 적다.

그러나 다음과 같은 단점이 있다:
 디코더의 복잡성을 증가시켜, 프레임을 재정렬하는 데 더 많은 메모리와 약간 더 많은 처리 능력이 필요할 수 있다.
 B-프레임은 디코딩 종속성을 도입하여 필연적으로 디코딩 지연 시간을 증가시킨다.

 H.264 인터 프레임 예측 개선 사항 
H.264 기술이 이전 표준(특히 MPEG-2)에 비해 가장 중요한 개선 사항은 다음과 같다:
더 유연한 블록 분할
최대 ¼ 픽셀 움직임 보정 해상도
다중 참조
향상된 다이렉트/건너뛰기 매크로블록

 더 유연한 블록 분할 
16×16(MPEG-2), 16×8, 8×16, 8×8의 휘도 블록 분할. 마지막 경우는 블록을 4×8, 8×4 또는 4×4의 새 블록으로 나눌 수 있다.

400px

코딩할 프레임은 위 그림과 같이 동일한 크기의 블록으로 나뉜다. 각 블록 예측은 참조 그림과 동일한 크기의 블록이 되며, 약간의 변위로 오프셋 된다.

 최대 ¼ 픽셀 움직임 보정 해상도 
하프 픽셀 위치의 픽셀은 길이 6의 필터를 적용하여 얻어진다.

 H=[1 -5 20 20 -5 1], 즉
 하프 픽셀 "b"=A - 5B + 20C + 20D - 5E + F

쿼터 픽셀 위치의 픽셀은 쌍선형 보간법으로 얻어진다.

MPEG-2는 ½ 픽셀 해상도를 허용했지만, 인터 프레임은 최대 ¼ 픽셀 해상도를 허용한다. 이는 코딩할 프레임의 블록을 다른 참조 프레임에서 검색하거나, 존재하지 않는 픽셀을 보간하여 현재 블록에 더 적합한 블록을 찾을 수 있음을 의미한다. 움직임 벡터가 정수 단위의 샘플인 경우, 참조 그림에서 움직임 보상된 블록을 찾을 수 있다. 움직임 벡터가 정수가 아닌 경우, 예측은 보간 필터에 의해 수평 및 수직 방향으로 보간된 픽셀로부터 얻어진다.

파일:Subpel interpolation.jpg

 다중 참조 
움직임 예측에 대한 다중 참조는 총 16개의 프레임을 포함하는 두 개의 가능한 버퍼(과거 그림에 대한 목록 0, 미래 그림에 대한 목록 1)에서 최상의 참조를 찾을 수 있도록 한다. 블록 예측은 참조 그림의 블록들의 가중 합으로 이루어진다. 이는 평면의 변화, 확대/축소, 또는 새로운 객체가 나타나는 장면에서 향상된 그림 품질을 가능하게 한다.

파일:Multiple references.jpg

 향상된 다이렉트/건너뛰기 매크로블록 
건너뛰기 및 다이렉트 모드는 매우 자주 사용되며, 특히 B-프레임에서 그렇다. 이들은 코딩할 비트 수를 크게 줄인다. 이 모드들은 잔여 오류나 움직임 벡터를 전송하지 않고 블록이 코딩될 때 참조된다. 인코더는 해당 블록이 건너뛰기 매크로블록이라는 것만 기록한다. 디코더는 이미 디코딩된 다른 블록들로부터 다이렉트/건너뛰기 모드로 코딩된 블록의 움직임 벡터를 추론한다.

움직임을 추론하는 두 가지 방법이 있다:
파일:Direct skip.jpg
 시간적 동일한 위치에 있는 목록 1 프레임의 블록 움직임 벡터를 사용하여 움직임 벡터를 추론한다. 목록 1 블록은 목록 0 블록을 참조로 사용한다.
 공간적 동일한 프레임의 이웃 매크로블록으로부터 움직임을 예측한다. 가능한 기준은 이웃 블록의 움직임 벡터를 복사하는 것이다. 이러한 모드들은 그림의 움직임이 많지 않은 균일한 영역에서 사용된다.

파일:block partition.jpg

위 그림에서 분홍색 블록은 다이렉트/건너뛰기 모드로 코딩된 블록이다. 보시다시피, 주로 B-프레임에서 매우 자주 사용된다.

 추가 정보 
비록 "프레임"이라는 용어가 비공식적으로 흔히 사용되지만, 많은 경우(예: MPEG 및 VCEG의 국제 표준 비디오 코딩에서) "프레임" 대신 "그림(picture)"이라는 더 일반적인 개념이 적용된다. 여기서 그림은 완전한 프레임이거나 단일 인터레이스 필드일 수 있다.

MPEG-2, H.264 또는 Ogg 테오라와 같은 비디오 코덱은 키 프레임 뒤에 하나 이상의 인터 프레임을 배치하여 스트림의 데이터 양을 줄인다. 이러한 프레임은 일반적으로 키 프레임에 필요한 것보다 낮은 비트레이트를 사용하여 인코딩될 수 있는데, 이는 이미지의 대부분이 일반적으로 유사하여 변하는 부분만 코딩하면 되기 때문이다.

 같이 보기 
 영상 압축 사진 유형

 각주 

 Software H.264: http://iphome.hhi.de/suehring/tml/download/
 T.Wiegand, G.J. Sullivan, G. Bjøntegaard, A.Luthra: Overview of the H.264/AVC Video Coding Standard. IEEE Transactions on Circuits and Systems for Video Technology, Vol. 13, No. 7, July 2003

분류:압축 알고리즘
분류:영상 기술