1. 참조 화면 관리
□ 화면간 부호화를 하기 위해 부호기와 복호기 모두 이전에 부호화한 화면들을 저장하고 있어야 한다. 참조 화면을 저장하는 메모리를 참조 화면 버퍼(decoded picture buffer, DPB)라고 한다. 화면간 부호화는 P 슬라이스 내의 인터 매크로블록에 대해 적용된다.
□ Baseline 프로파일의 경우 I 및 P 슬라이스만 사용되므로 참조 화면 리스트 list0에 참조 화면들을 유지한다.
□ list0에는 디스플레이 되는 순서로 현재 화면의 이전과 이후 화면들을 포함할 수 있고, 참조 화면들은 단기(short-term) 및 장기(long-term) 참조 화면으로 분류된다.
▷ 단기 참조 화면
¤ 예측을 위해 사용될 수 있는 최근에 부호화된 화면
¤ 프레임 번호에 의해 구분된다.
¤ 최근 프레임 순으로 지정된 개수의 프레임이 DPB에 보관된다. (슬라이딩 윈도우, sliding window)
▷ 장기 참조 화면
¤ 예측을 하기 위해 사용되는 보다 이전의 화면들로, LongTermPicNum이라는 변수의 값이 지정된다.
¤ 장기 참조 화면들은 제거되거나 교체될 때까지 DPB에 남아 있게 된다.
□ 화면이 재구성(부호기 측)되거나 복호화(복호기 측)되면 DPB에 넣어지며, 다음 중 한 가지 형태로 처리된다.
① 참조를 위해 사용되지 않음(unused for reference)으로 표시됨 → 이후의 예측에 사용되지 않는다.
② 단기 참조 화면으로 표시됨
③ 장기 화면으로 표시됨
④ 단순히 디스플레이에 출력됨
□ Instantaneous Decoder Refresh(IDR) 화면
▷ IDR 부호화된 화면(I 또는 SI 슬라이스로 구성)을 전송하면 복호기는 참조 화면 버퍼 내의 모든 화면에 ‘참조를 위해 사용되지 않음’ 표시를 한다.
▷ 비디오 영상의 첫 번째 화면은 항상 IDR 화면이다.
2. 슬라이스 및 슬라이스 그룹
□ 슬라이스는 매크로블록의 시퀀스이다.
□ Baseline 프로파일의 경우 I-슬라이스와 P-슬라이스를 포함할 수 있다.
▷ I-슬라이스는 인트라 부호화된 매크로블록을 포함할 수 있다.
▷ P-슬라이스는 인트라 부호화된 매크로블록과 인터 부호화된 매크로블록 또는 생략된 매크로 블록을 포함할 수 있다.
※ 생략된 매크로블록은 영상 부호 정보를 포함하지 않으며, 주변 매크로블록들로부터 움직임 벡터를 결정하여 list0의 첫 번째 참조 화면으로부터 움직임 보상을 한다.
□ 중복 부호화 화면 (Redundant coded picture)
▷ 전송 에러 등으로 인한 손상에 대비하여 화면의 일부분 또는 전체를 중복하여 부호화할 수 있는데, 이 경우 ‘중복(redundant)’이라고 표시한다.
▷ 일반적인 경우는 ‘기본(primary)’ 화면으로부터 프레임을 복원하고 중복 화면을 무시한다. 반면 에러가 발생한 경우 중복된 화면으로 손상 영역을 교체한다.
□ 임의 슬라이스 순서 (Arbitrary Slice Order, ASO)
▷ Baseline 프로파일은 ASO를 지원한다.
▷ 부호화된 프레임의 슬라이스를 임의의 순서로 복호화 할 수 있다는 것을 의미한다.
□ 슬라이스 그룹 (Slice Groups)
▷ 슬라이스 그룹은 부호화된 화면 내에 있는 매크로블록의 부분집합으로, 하나 또는 그 이상의 슬라이스를 포함한다.
▷ 다중 슬라이스 그룹은 부호화된 매크로블록의 순서를 여러 가지 유연한 방법으로 복호화되는 프레임에 배치하는 것을 가능하게 한다.
▷ 각각의 매크로블록이 어느 슬라이스 그룹에 속하는지는 macroblock to slice group map에 의해 결정된다.
▷ Macroblock to slice group map의 종류
Type | 이름 | 설 명 |
0 | Interleaved | ▷ 지정된 수의 매크로블록이 각 슬라이스 그룹에 차례대로 할당된다. |
1 | Dispersed | ▷ 각각의 슬라이스 그룹들에 할당된 매크로블록들이 화면 전체에 분산된다. ▷ 각 슬라이스 그룹별로 전송되므로, 한 슬라이스 그룹에서 에러에 의한 손실이 발생하면 다른 슬라이스 그룹의 매크로블록들을 이용하여 보간함으로써 이를 숨길 수 있다. (에러 은폐, error concealment) |
2 | 전경 및 배경 | ▷ 전경(foreground)을 나타내는 매크로블록들의 직사각형 슬라이스 그룹들이 포함되며, 마지막 슬라이스 그룹은 어느 전경 슬라이스 그룹에도 포함되지 않은 나머지 매크로블록들의 집합이다. |
3 | Box-out | ▷ 프레임 중앙에서 시작하는 ‘box’ 형태의 슬라이스 그룹 0이 생성되고, 나머지는 매크로블록들의 집합은 슬라이스 그룹 1이 된다. |
4 | Raster scan | ▷ 좌측 상단으로부터 순차적인 래스터 스캔 순서로 매크로블록들이 슬라이스 그룹 0에 포함되고, 나머지 모든 매크로블록들의 집합은 슬라이스 그룹 1이 된다. |
5 | Wipe | ▷ 좌측 상단으로부터 수직 스캔 순서로 매크로블록들이 슬라이스 그룹 0에 포함되고, 나머지 모든 매크로블록들의 집합은 슬라이스 그룹 1이 된다. |
6 | Explicit | ▷ 각각의 매크로블록에 대해 지정된 slice_group_id라는 파라미터에 의해 슬라이스 그룹이 지정된다. ▷ 따라서 매크로블록 맵이 완전히 사용자에 의해 지정된다. |
3. 매크로블록 예측
□ H.264/AVC에서 모든 매크로블록은 이전에 부호화된 화면 데이터로부터 예측 부호화를 한다.
▷ 인터 매크로블록 : 이전에 부호화된 화면의 복호화 영상을 참조 화면으로 하여 움직임 보상 예측을 한다.
▷ 인트라 매크로블록 : 현재 슬라이스에 존재하는 앞서 부호화된 이미지 샘플이 복호화된 값으로부터 예측한다.
3.1 인터 예측
□ 블록 기반 움직임 보상을 사용하여 이전에 부호화된 하나 또는 그 이상의 비디오 프레임 또는 필드로부터 예측을 한다.
□ Baseline 프로파일에는 P-슬라이스만이 포함되며, Main과 Extended 프로파일에는 P-슬라이스와 B-슬라이스가 포함된다.
3.1.1 트리 구조 움직임 보상
□ H.264/AVC는 트리 구조 움직임 보상을 하는데, 이는 다양한 크기의 블록을 사용하여 보다 효과적인 움직임 보상을 할 수 있게 한다.
□ 16×16 휘도 매크로블록은 다음과 같은 네 가지 방법으로 분할될 수 있다.
① 한 개의 16×16 매크로블록 파티션
② 두 개의 8×16 매크로블록 파티션
③ 두 개의 16×8 매크로블록 파티션
④ 네 개의 8×8 매크로블록 파티션 - 이 경우 각각의 8×8 서브 매크로블록은 다음과 같은 네 가지 방법으로 분할될 수 있다.
㉠ 한 개의 8×8 서브 매크로블록 파티션
㉡ 두 개의 4×8 서브 매크로블록 파티션
㉢ 두 개의 8×4 서브 매크로블록 파티션
㉣ 네 개의 4×4 서브 매크로블록 파티션
□ 색차신호의 경우도 휘도신호에 비해 블록 크기는 반이지만, 동일한 방법으로 분할된다.
□ 각 파티션 또는 서브 매크로블록에 대해서는 독립적인 움직임 벡터가 필요하다.
→ 전체적인 비트율을 낮출 수 있는 적절한 선택이 필요하다.
※ 일반적으로 큰 파티션 은 단조로운 영역에 적합하고, 작은 파티션은 복잡한 영역에 적합하다.
□ 트리 구조 움직임 보상을 위한 매크로블록 파티션 분할의 예
3.1.2 움직임 벡터
□ H.264/AVC에서 움직임 추정은 1/4 픽셀 단위로 한다. 만일 움직임 벡터가 정수 픽셀 샘플 위치로 향한다면 해당 위치의 참조 화면 픽셀을 사용하면 된다. 그러나 그렇지 않을 경우에는 주위의 픽셀들을 이용하여 보간(interpolation)한 값을 구해야 한다.
□ 보간 샘플의 계산
▷ 먼저 1/2 픽셀 위치 샘플이 먼저 계산된다. 이때 인접 정수 샘플에 대해 가중치가 (1/32,-5/32, 5/8, 5/8, -5/32, 1/32)인 6-tab FIR 필터를 사용한다.
▷ 1/4 픽셀 위치 샘플은 1/2 픽셀 위치 샘플들을 계산한 후, 인접 두 샘플의 선형 보간으로 구한다.
3.1.3 움직임 벡터의 예측
□ 인접한 매크로블록 또는 서브 매크로블록들의 움직임 벡터는 서로 높은 연관관계가 있다. 이러한 특성을 이용하여 움직임 벡터를 예측하면 오차 벡터의 에너지가 작아져서 부호화 비트열의 길이를 줄일 수 있다.
□ 매크로블록의 파티션 형태에 따라 예측 움직임 벡터 MVp를 구한다.
3.2 인트라 예측
□ H.264/AVC에서는 화면내 부호화에 대해서도 예측 부호화를 한다.
□ 이전 표준에서도 화면내 부호화에 예측 기법을 사용했지만, DC 성분에 대해서만 하거나 (MPEG-1, 2) DC 성분과 저주파 AC성분까지만 예측을 하는 방식(MPEG-4 Visual)을 사용하였다. 그러나 H.264/AVC에서는 모든 픽셀에 대해 예측을 하는 방식을 사용한다.
□ 인트라 예측 방식 개요
▷ 현재의 블록을 부호화하기 위해 먼저 이전에 부호화되고 복원된 블록으로부터 예측 블록 P를 구한다. 현재 블록으로부터 P를 뺀 오차 블록이 부호화 대상이 된다.
▷ 블록의 크기는 휘도 샘플의 경우 4×4 블록(Intra_4×4 모드) 또는 16×16 매크로블록(Intra_16×16 모드)이다.
▷ Intra_4×4 모드의 경우 9개의 선택 가능한 예측 모드가 있고, Intra_16×16 모드의 경우 4가지 모드가 있다.
▷ 인트라 부호화에는 I_PCM이라는 모드도 제공하는데, 이 방식은 예측과 변환 부호화 과정을 거치지 않고 직접 전송하도록 함으로써 정확한 샘플 정보를 전달할 수 있게 한다.
3.2.1 Intra_4×4 휘도 예측 모드
□ [그림11] : 16×16 매크로블록은 0~15의 순서로 부호화된다. 예측의 대상이 되는 4×4 블록의 픽셀 a~p는 이전에 부호화되어 복원된 픽셀 A~M을 참조 픽셀로 하여 예측된다.
□ 예측 모드는 9가지 종류가 있다. [그림12]
▷ 모드 0, 1 : A~D 또는 I~L이 수직 또는 수평으로 확장된다.
▷ 모드 2 : A~D와 I~J의 8개의 참조 픽셀 값의 평균으로 채운다.
▷ 모드 3~8 : 화살표 방향으로 참조 픽셀들의 가중치 평균을 채운다.
□ 선택된 Intra_4×4 예측 모드는 인접한 블록들이 서로 관계가 있다는 점을 이용하여 예측 부호화를 한다.
3.2.2 Intra_16×16 휘도 예측 모드
□ 평탄한 영상 영역에서는 큰 블록을 사용해도 좋은 예측을 할 수 있다.
□ 전체 16×16 매크로블록을 4가지 모드 중 하나의 방법으로 예측한다.
4. 변환 및 양자화
4.1 직교변환
□ H.264/AVC에서는 4×4 ‘DCT 기반’ 부호화와 Hadamard 변환이 사용된다.
▷ 4×4 DCT 기반 부호화
¤ 정확히 DCT 변환은 아니지만, DCT를 근사화하여 정의한 변환이므로 DCT 기반 부호화라고 칭하였다.
¤ 정수 연산으로 변환을 할 수 있어 실수 연산에 따른 DCT-역DCT 불일치 문제가 해소되며, 하드웨어 구현이 쉽다.
¤ 변환 행렬은 다음과 같다.
▷ 이산 Hadamard 변환 (Discrete Hadamard Transform, DHT)
¤ 덧셈과 뺄셈만으로 직교변환을 수행한다.
¤ 변환 행렬은 다음과 같다.
□ 변환은 대상 블록이 16×16 화면내 예측인가, 그렇지 않은가에 따라 다른 방법이 사용된다.
4.1.1 16×16 화면내 예측 블록의 변환
□ Intra_16×16 예측에 의한 휘도 오차블록은 다음과 같은 변환 과정을 거친다.
① 매크로블록을 16개의 4×4 블록으로 분할한다.
② 각각의 4×4 블록을 정수 DCT 기반 변환을 한다.
③ 변환 계수의 DC 성분들만을 모아서 4×4 DC 성분 블록을 구성한다.
④ 4×4 DC 성분 블록을 DHT 한다.
□ DHT 계수와 DCT AC 계수들을 부호화한다.
4.1.2 4×4 화면내 예측 블록과 화면간 부호화 블록의 변환
□ Intra_4×4 예측 및 화면간 예측의 경우 휘도 오차블록은 다음과 같은 변환 과정을 거친다.
① 매크로블록을 16개의 4×4 블록으로 분할한다.
② 각각의 4×4 블록을 정수 DCT 기반 변환을 한다.
4.1.3 색차신호의 변환
□ 매크로블록에 대한 8×8 Cb, Cr 색차 블록은 다음과 같은 변환 과정을 거친다.
① 매크로블록을 4개의 4×4 블록으로 분할한다.
② 각각의 4×4 블록을 정수 DCT 기반 변환을 한다.
③ 변환 계수의 DC 성분들만을 모아서 2×2 DC 성분 블록을 구성한다.
④ 2×2 DC 성분 블록을 DHT 한다.
4.2 양자화
□ H.264/AVC에서는 화질을 향상시키기 위해 화면내 부호화와 화면간 부호화 블록 모두에 대해 데드존이 없는 양자화를 사용한다.
□ 양자화 단계 Qstep을 직접 부호화하지 않고, 양자화 파라미터 QP를 부호화하고, 이로부터 양자화 단계를 도출한다.
□ QP는 52개의 Qstep 값 중에서 하나를 선택한다.
□ QP가 6 증가하면 Qstep은 2배가 커지도록 함으로써 QP와 SNR이 비례하도록 한다.
□ 양자화 파라미터 QP를 변화시킴으로써 목표하는 비트율을 얻을 수 있다.
정리하기
1. 요약정리
□ 참조 화면 관리
▷ 참조 화면 버퍼(DPB)에 list0의 참조 화면을 저장한다.
▷ 단기 참조 화면은 최근 프레임 순으로 DPB에 보관되며, 슬라이딩 윈도우 형식으로 관리된다.
▷ 장기 참조 화면들은 제거되거나 교체될 때까지 DPB에 남아 있게 된다.
▷ Instantaneous Decoder Refresh(IDR) 화면이 전송되면 복호기는 DPB 내의 모든 화면에 ‘참조를 위해 사용되지 않음’ 표시를 한다. 비디오 영상의 첫 화면은 항상 IDR이다.
□ 슬라이스 및 슬라이스 그룹
▷ 슬라이스는 매크로블록의 시퀀스이다.
▷ Baseline 프로파일에는 I-슬라이스와 P-슬라이스를 포함할 수 있다.
▷ 하나의 화면은 몇 개의 슬라이스 그룹으로 구성할 수 있다.
▷ Interleaved, Dispersed, 전경 및 배경, Box-out, Raster scan, Wipe, Explicit의 7 가지 방법으로 슬라이스 그룹을 구성할 수 있다.
□ 매크로블록 예측
▷ 모든 매크로블록은 예측부호화 된다.
▷ 인터 예측
¤ 16×16 휘도 매크로블록은 한 개의 16×16 매크로블록 파티션, 두 개의 8×16 매크로블록 파티션, 두 개의 16×8 매크로블록 파티션, 또는 네 개의 8×8 매크로블록 파티션으로 분할될 수 있다. 8×8 서브 매크로블록으로 분할된 경우 유사한 방법으로 다시 분할할 수 있다.
¤ 파티션 분할은 움직임 벡터의 수와 움직임 보상된 오차 블록의 에너지를 고려한 적절한 선택을 할 필요가 있다.
¤ 움직임 보상은 1/4 픽셀 단위로 한다.
¤ 움직임 보상을 위한 보간 샘플의 계산은 1/2 픽셀 위치를 위해 6-탭 FIR 필터, 1/4 픽셀 위치를 위해 선형 보간을 사용한다.
¤ 움직임 벡터는 주변 블록의 움직임 벡터를 참조 벡터로 하여 예측한 후 오차 벡터를 전송한다.
▷ 인트라 예측
¤ Intra_4×4 모드와 Intra_16×16 모드의 두 가지 예측 방식이 있다.
¤ Intra_4×4 모드의 경우 9개의 선택 가능한 예측 모드가 있고, Intra_16×16 모드의 경우 4가지 모드가 있다.
¤ I_PCM 모드에서는 예측과 변환 부호화 과정을 거치지 않는다.
□ 변환과 양자화
▷ H.264/AVC에서는 4×4 ‘DCT 기반’ 부호화와 Hadamard 변환이 사용된다.
▷ ‘DCT 기반’ 부호화는 DCT를 근사화하여 정의한 변환으로, 정수 연산으로 구현할 수 있어 실수 연산에 따른 DCT-역DCT 불일치 문제가 해소되며, 하드웨어 구현이 쉽다.
▷ 화면내 부호화 및 화면간 부호화 블록 모두에 대해 데드존이 없는 양자화를 사용한다.
▷ 양자화 파라미터에 따라 SNR이 비례하여 변화하도록 설계되었다.
▷ 양자화 파라미터 QP를 변화시킴으로써 목표하는 비트율을 얻는다.
2. 참고자료
□ Thomas Wiegand, Gary J. Sullivan, "Overview of the H.264/AVC Video Coding Standard,"
IEEE Tran. Circuits Syst. Video Technol., Vol.13, No.7, pp.560-576, July 2003.
□ 정제창 역, H.264/AVC 비디오 압축 표준, 홍릉과학출판사, 2005.
'정보과학 > 영상통신시스템' 카테고리의 다른 글
영상 통신을 위한 인터넷 기술 (2) (1) | 2023.10.18 |
---|---|
영상 통신을 위한 인터넷 기술 (1) (1) | 2023.10.18 |
H.264/MPEG-4 Part 10 (1) (1) | 2023.10.06 |
MPEG-4 Visual (2) (1) | 2023.10.05 |
MPEG-4 Visual (1) (0) | 2023.10.04 |