Bài viết giới thiệu về chuẩn nén Video H264

37
6 CHƯƠNG 2: TNG QUAN VCHUN NÉN VIDEO H.264/AVC 2.1 Tng quan vcác chun video Hin nay trên thế gii có hai t chc chu trách nhim chính trong vic đưa ra các chun vnén và gii nén video đó là ITU và ISO. - Tchc ITU – International Telecommunications Union chuyên tp trung vào các ng dng truy n thông vi dòng video chun H.26x, vi dung lượng lưu trnhvà hiu qucao trong vic truy n ti trên mng. Dòng H.26x bao gm các chun H.261, H.262, H.263, và H.264. - Tchc ISO – International Standards Organization đưa ra dòng MPEG chy ếu tp trung phát trin các ng dng đa người dùng (phim, video,...). Dòng MPEG bao gm các chun MPEG-1, MPEG-2, MPEG- 4. Hai tchc này cùng nhau lp nên nhóm JVT – Joint Video Team để đưa ra chun H.264 (t chc ISO gi chun này là MPEG-4 Part 10). H.264 là chun nén video mi nht hin nay và được xem là dòng nén video thế hth3. Hình 2. 1: Quá trình phát trin các dòng video H.26x và MPEG

description

Mô tả về chuẩn H264

Transcript of Bài viết giới thiệu về chuẩn nén Video H264

Page 1: Bài viết giới thiệu về chuẩn nén Video H264

6

CHƯƠNG 2: TỔNG QUAN VỀ CHUẨN NÉN

VIDEO H.264/AVC

2.1 Tổng quan về các chuẩn video Hiện nay trên thế giới có hai tổ chức chịu trách nhiệm chính trong việc đưa

ra các chuẩn về nén và giải nén video đó là ITU và ISO.

- Tổ chức ITU – International Telecommunications Union chuyên tập

trung vào các ứng dụng truyền thông với dòng video chuẩn H.26x, với

dung lượng lưu trữ nhỏ và hiệu quả cao trong việc truyền tải trên mạng.

Dòng H.26x bao gồm các chuẩn H.261, H.262, H.263, và H.264.

- Tổ chức ISO – International Standards Organization đưa ra dòng MPEG

chủ yếu tập trung phát triển các ứng dụng đa người dùng (phim,

video,...). Dòng MPEG bao gồm các chuẩn MPEG-1, MPEG-2, MPEG-

4.

Hai tổ chức này cùng nhau lập nên nhóm JVT – Joint Video Team để đưa ra

chuẩn H.264 (tổ chức ISO gọi chuẩn này là MPEG-4 Part 10). H.264 là chuẩn nén

video mới nhất hiện nay và được xem là dòng nén video thế hệ thứ 3.

Hình 2. 1: Quá trình phát triển các dòng video H.26x và MPEG

Page 2: Bài viết giới thiệu về chuẩn nén Video H264

7

2.1.1 Dòng H.26x 2.1.1.1 Chuẩn H.261

Chuẩn H.261 là chuẩn nén video hoàn chỉnh đầu tiên trên thế giới, được giới

thiệu vào năm 1993 bởi tổ chức ITU. H.261 được thiết kế cho những ứng dụng hội

nghị trực tuyến video hai chiều với dữ liệu video sau khi nén có tốc độ trong khoảng

40Kbps – 2Mbps. H.261 có hai độ phân giải là CIF (352x288) và QCIF (176x144),

sử dụng kĩ thuật lấy mẫu 4:2:0. Thuật toán nén của chuẩn này không phức tạp do

yêu cầu việc nén và giải nén phải được thực hiện theo thời gian thực.

2.1.1.2 Chuẩn H.263

H.263 là chuẩn mã hóa video/audio do nhóm VCEG (Video Coding Experts

Group) thuộc tổ chức ITU đưa ra năm 1998 và là một chuẩn với tốc độ bit thấp,

được dùng cho các hội nghị video trực tuyến. Năm 1998, ITU cải tiến chuẩn này và

cho ra chuẩn H.263v2 (còn gọi là H.263+ hay H.263 1998). Năm 2000, chuẩn

H.263v3 ra đời (còn gọi là H.263++ hay H.263 2000).

H.263 được phát triển dựa trên những kinh nghiệm được rút ra từ các chuẩn

H.261, MPEG-1 và MPEG-2. So với các chuẩn trước, H.263 có chất lượng video

tốt hơn và tốc độ bit (lượng bit lưu trữ cho một đơn vị thời gian) nhỏ hơn. Mục tiêu

của H.263 là truyền được video chất lượng chấp nhận được trên đường truyền điện

thoại với tốc độ 28.8Kbps. H.263 hỗ trợ độ phân giải từ 128x96 đến 352x288.

H.263 có những cải tiến trong việc dự đoán các chuyển động và thuật toán

giảm dữ liệu dư thừa, phân lớp được tối ưu hơn nhiều so với các chuẩn trước đó.

2.1.1.3 Chuẩn H.264/AVC

H.264/AVC được đưa ra bởi nhóm JVT. Nhóm JVT được thành lập từ việc

sát nhập hai nhóm MPEG và VCEG. Với MPEG, chuẩn này được gọi là MPEG-4

Part 10 (ISO 14496-10). Với ITU, nó được gọi là H.264. Hiện nay, chuẩn này được

biết đến dưới tên gọi thống nhất là Advanced Video Coding (AVC).

Page 3: Bài viết giới thiệu về chuẩn nén Video H264

8

H.264 được kế thừa từ các chuẩn nén video trước đó như MPEG-2 và

MPEG-4 Visual. Do đó H.264 cho ra hiệu suất nén tốt hơn và linh hoạt hơn trong

việc lưu trữ, truyền dẫn video.

Ưu điểm lớn nhất của chuẩn H.264 so với các chuẩn trước đây đó là tỷ lệ

nén. So với các chuẩn nén video trước đây như MPEG-2 hoặc MPEG-4 Visual,

H.264 có thể cung cấp:

• Chất lượng ảnh tốt hơn với cùng một bitrate (số lượng bit được gởi trong

một đơn vị thời gian).

• Hệ số bitrate thấp hơn với cùng chất lượng nén ảnh.

Hình 2. 2: Một ảnh video được nén với cùng bitrate dùng MPEG-2 (trái), MPEG-4

(giữa) và h.264 (phải)

Tỷ lệ nén nâng cao của H.264 đồng nghĩa với chi phí tính toán sẽ lớn hơn,

phức tạp hơn so với các chuẩn nén video trước. Điều này cũng có nghĩa là H.264 sử

dụng nhiều tài nguyên để xử lý hơn trong khi thực hiện quá trình nén và giải nén

video.

Hiện nay, H.264 được ứng dụng trong một số lĩnh vực sau:

• Truyền hình kỹ thuật số.

• Lưu trữ video trên đĩa DVD với các định dạng HD-DVD và Blu-Ray.

• Truyền hình di động, hội nghị trực tuyến.

• Truyền dữ liệu trong mạng RTP/IP.

• Hệ thống điện thoại đa phương tiện của ITU-T.

Page 4: Bài viết giới thiệu về chuẩn nén Video H264

9

• HD – video phone (điện thoại hỗ trợ truyền tải hình ảnh tốc độ cao trong

khi nói).

2.1.2 Dòng MPEG 2.1.2.1 Chuẩn MPEG-1

MPEG-1 là chuẩn nén video đầu tiên của ISO, còn được gọi là ISO/IEC–

11172. Dữ liệu được lưu trữ trên các phương tiện số như đĩa video-CD với độ phân

giải SIF (352x240 – 29.97fps hay 352x288 – 25fps), có tốc độ bit xấp xỉ 1.15Mbps.

MPEG-1 gần như tương tự với chuẩn H.261, ngoại trừ việc mã hóa có đôi chút khác

biệt và hỗ trợ B-frames.

2.1.2.2 Chuẩn MPEG – 2

MPEG-2 còn được gọi là ISO/IEC–13818, được mở rộng dựa trên chuẩn

MPEG-1 để phục vụ việc nén dữ liệu video. Các ứng dụng sử dụng MPEG–2 bao

gồm truyền hình kỹ thuật số (SDTV), truyền hình theo yêu cầu (VOD) và đĩa DVD.

2.1.2.3 Chuẩn MPEG – 4

MPEG-4 còn được gọi là ISO/IEC–14496 được công bố vào tháng 10-1998

và được công nhận là tiêu chuẩn quốc tế tháng 1-1999. MPEG-4 là chuẩn thông

dụng trong các ứng dụng về đồ hoạ, video tương tác hai chiều (games, hội nghị trực

tuyến, …), các ứng dụng đa phương tiện tương tác hai chiều (World Wide Web)

hoặc các ứng dụng truyền tải dữ liệu video như truyền hình cáp, Internet Video....

Sự ra đời của MPEG-4 giúp giải quyết các vấn đề về dung lượng các thiết bị lưu trữ

và giới hạn băng thông của đường truyền.

Ưu điểm lớn nhất của MPEG-4 là việc lưu trữ và xử lý dữ liệu âm thanh và

hình ảnh trên cơ sở hướng đối tượng, điều này làm tăng khả năng tương tác và hiệu

chỉnh cho các chương trình truyền hình cũng như các ứng dụng đa phương tiện.

2.2 Cấu trúc H.264 2.2.1 Không gian màu YCrCb và kiểu lấy mẫu 4:2:0

Hệ thống thị giác của con người nhận các thông tin hình ảnh bao gồm độ

sáng và thông tin màu một cách rời rạc, với độ nhạy cảm của độ sáng lớn hơn so với

Page 5: Bài viết giới thiệu về chuẩn nén Video H264

10

màu sắc. Hệ thống truyền dẫn video được thiết kế dựa trên đặc điểm này của mắt

người (điều này cũng được áp dụng cho các hệ thống tivi analog và digital thông

thường). Trong H.264/AVC cũng như trong các chuẩn video trước, điều này được

thực hiện bằng cách sử dụng không gian màu YCrCb. Không gian màu YCrCb chia

một màu hiển thị thành 3 thành phần Y, Cr, và Cb. Trong đó, Y được gọi là thành

phần luma – đại diện cho độ sáng của hình ảnh. Cb và Cr là các thành phần chroma

- đại diện cho thông tin màu xanh và màu đỏ của hình ảnh.

Bởi vì hệ thống cảm quan của mắt người ít nhạy cảm đối với chroma hơn

luma, H.264 sử dụng cấu trúc lấy mẫu: thành phần chroma có số điểm ảnh chỉ bằng

¼ so với số điểm ảnh của thành phần luma. Đây là kiểu lấy mẫu 4:2:0 (hay còn

được gọi là YV12). Kiểu lấy mẫu này được sử dụng phổ biến trong các ứng dụng

như là hội nghị trực tuyến, truyền hình số và đĩa DVD.

2.2.2 Macroblock Một ảnh khi xử lý được chia thành nhiều macroblock. Mỗi macroblock ứng

với vùng ảnh gồm 16x16 điểm ảnh trong một ảnh. Macroblock là đơn vị xử lý cơ

bản cho dự đoán bù chuyển động trong một số chuẩn nén video thông dụng như

MPEG-1, MPEG-2, MPEG-4, H.261, H.263 và H.264. Chuẩn H.264 thực hiện lấy

mẫu theo định dạng 4:2:0. Vì thế, một macroblock 16x16 điểm ảnh sẽ bao gồm bởi

256 thành phần luma Y (được sắp xếp trong 4 block 8x8 ), 64 thành phần chroma

màu xanh Cb (được sắp xếp trong 1 block 8x8), và 64 thành phần chroma màu đỏ

Cr (được sắp xếp trong 1 block 8x8) như hình 2.3. Vì vậy, một macroblock có thể

được thay thế bởi 6 block 8x8 gồm các thành phần Y, Cr, và Cb.

Page 6: Bài viết giới thiệu về chuẩn nén Video H264

11

Hình 2. 3: Macroblock 16x16 được đại diện bởi các block thành phần Y, Cr, Cb

theo tỷ lệ lấy mẫu (4:2:0) trong H.264

Mỗi macroblock trong H.264 chứa các thành phần dữ liệu sau [13]:

• mb_type: xác định macroblock được mã hóa theo kiểu Inter hay Intra; xác

định kích thước các phần chia của macroblock.

• mb_pred: xác định các mode được lựa chọn trong dự báo Intra; xác định

danh sách các ảnh tham chiếu; xác định các vector cho mỗi phần chia

macroblock trong trường hợp mã hóa Inter, ngoại trừ phần chia

macroblock mã hóa Inter có kích thước 8x8.

• sub_mb_pred: chỉ dùng cho các phần chia macroblock được mã hóa Inter

có kích thước 8x8. Xác định kích thước các phần chia phụ của phần chia

macroblock này và các vector chuyển động của các phần chia phụ này.

• code_block_pattern: xác định block 8x8 nào chứa các hệ số biến đổi

được mã hóa.

• mb_qb_delta: thông tin thay đổi biến lượng tử

• residual: các hệ số biến đổi được mã hóa ứng với các vùng ảnh khác biệt

sau quá trình dự đoán.

2.2.3 Slice Ảnh khi mã hóa được chia thành một hoặc nhiều slice. Một slice có thể chứa

một hoặc nhiều macroblock. Trong trường hợp ảnh chỉ có một slice, slice sẽ chứa

tất cả các macroblock trong ảnh đó. Số lượng các macroblock trong các slice của

ảnh không cần thiết phải giống nhau.

Page 7: Bài viết giới thiệu về chuẩn nén Video H264

12

Hình 2. 4: Minh họa cách phân chia ảnh thành nhiều slice

Có 5 loại slice và một ảnh có thể chứa nhiều loại slice khác nhau. Các ảnh

được mã hóa của profile cơ bản chứa các slice loại P và I, các ảnh được mã hóa của

profile chính và profile mở rộng có thể chứa tập các slice kiểu I, P, B, SI và SP.

Loại Slice Mô tả Profile hỗ trợ

I (Intra) Chứa các macroblock I (mỗi macroblock được

dự đoán từ các dữ liệu đã được mã hóa trong

cùng slice).

Tất cả

P (Predicted) Chứa các macroblock P (mỗi macroblock

hoặc phần chia macroblock được dự đoán từ

danh sách ảnh tham chiếu list 0 và /hoặc từ

các macroblock I).

Tất cả

B (Bi-predictive ) Chứa các macroblock B (mỗi macroblock

hoặc phần chia macroblock được dự đoán từ

danh sách ảnh tham chiếu list 0 và/hoặc list 1

và/hoặc các maroblock I).

Profile chính

và mở rộng

SP (Switching P) Chứa các macroblock kiểu I và/hoặc P, cung

cấp khả năng chuyển đổi dễ dàng giữa những

luồng bit được mã hóa.

Profile mở

rộng

SI (Switching I) Chứa các macroblock SI (loại maroblock đặc

biệt trong mã hóa Intra), cung cấp khả năng

chuyển đổi dễ dàng giữa những luồng bit

được mã hóa.

Profile mở

rộng

Bảng 2. 1: Các loại slice mã hóa trong H.264

Page 8: Bài viết giới thiệu về chuẩn nén Video H264

13

Hình 2.5 mô tả cấu trúc đơn giản của một slice được mã hóa. Phần thông tin

mở đầu cho biết loại slice, ảnh được mã hóa chứa slice đó và có thể chứa các chỉ

dẫn liên quan đến việc quản lý ảnh tham chiếu. Phần dữ liệu của slice bao gồm tập

các macroblock được mã hóa và/hoặc chỉ số của một macroblock không được mã

hóa (skipped macroblock). Mỗi macroblock chứa một tập các thông tin mở đầu và

dữ liệu khác biệt được mã hóa.

Hình 2. 5: Cấu trúc slice

2.2.4 Profile Chuẩn H.264 bao gồm 3 profile. Mỗi profile hỗ trợ một tập các chức năng và

công cụ mã hóa xác định cho bộ nén và bộ giải nén nhằm để tạo ra luồng bit nén

ứng với profile đó.

• Profile cơ bản (Baseline Profile): Hỗ trợ mã hóa Inter và mã hóa Intra

(dùng các slice I và slice P), nén entropy sử dụng thuật toán mã hóa chiều

dài thay đổi ứng ngữ cảnh CAVLC – Context Adaptive Variable Length

Coding. Các ứng dụng của profile này là trong điện thoại video, hội nghị

trực tuyến và các hệ thống truyền thông không dây.

• Profile chính (Main Profile): Ngoài các slice I, P được mã hóa, profile

này còn mã hóa video dùng các slice B. Mã hóa entropy dùng thuật toán

mã hóa số học ứng ngữ cảnh (CABAC). Profile chính được ứng dụng cho

các hệ thống broadcast như truyền hình kỹ thuật số, các hệ thống lưu trữ

dữ liệu.

Page 9: Bài viết giới thiệu về chuẩn nén Video H264

14

• Profile mở rộng (Extended Profile): Ngoài các kỹ thuật được sử dụng

trong profile cơ bản và một phần của profile chính, profile mở rộng còn

sử dụng thêm các slice SI và SP trong mã hóa ảnh. Profile mở rộng được

dùng trong các ứng dụng xem hoặc truyền tải video trực tuyến, có khả

năng nén cao và một số cải tiến riêng để xử lý việc mất dữ liệu và đồng

bộ hóa các dòng dữ liệu khi gặp sự cố về đường truyền Internet.

Hình 2. 6: Các profile của H.264/AVC và các công cụ với ứng dụng mỗi profile

2.3 Tổng quan về qui trình nén và giải nén của H.264 Bộ nén (Encoder) sẽ thực thi các quá trình dự đoán, biến đổi và nén luồng

video nhập nhằm tạo thành luồng bit nén H.264 để lưu trữ hoặc truyền dẫn cho bộ

giải nén. Bộ giải nén (Decoder) sẽ giải nén, biến đổi ngược và tái xây dựng để tạo

thành chuỗi video dùng cho việc hiển thị như hình 2.7.

Page 10: Bài viết giới thiệu về chuẩn nén Video H264

15

Hình 2. 7: Tổng quan về qui trình nén và giải nén của H.264

2.3.1 Quy trình nén

Hình 2. 8: Quá trình nén H.264/AVC

Một Frame Fn được chia thành các marcroblock. Với mỗi block trong một

macroblock được đưa vào quá trình dự đoán Inter hoặc Intra và kết quả ra là một

block dự đoán P. Trong quá trình dự đoán Intra, P được tính từ slice hiện tại đã

được mã hóa, giải mã và tái xây dựng. Còn trong quá trình dự đoán Inter thì P được

tính từ dự đoán sự bù chuyển động của một hoặc hai ảnh được chọn từ những ảnh

tham chiếu trong list 0 và/hoặc list 1. Block dự đoán P được trừ với block hiện tại

Video Nguồn Dự Đoán

Biến Đổi

Mã Hóa

Luồng bit H.264 được lưu trữ hoặc truyền dẫn

Quy trình nén

Tái Xây Dựng

Biến Đổi Ngược

Giải Mã

Quy trình giải nén

Video Xuất

X

+

D’n

Fn(Frame hiện

tại)

F’n-1(Frame

tham chiếu)

Quá trình ước lượng

chuyển động

Quá trình bù chuyển

động

Chọn dự đoán Intra

Dự đoán Intra

F’n(Frame

phục hồi)Lọc

T (Biến đổi)

Q (lượng tử hóa)

Tái cấu trúc

Mã hóa Entropy

NAL

T -1(Biến đổi ngược)

Q-1

(lượng tử hóa ngược)

+

-

Dn

P

Inter

Intra

1 hoặc 2 frames được mã hóa

trước đó

+uF’n

Page 11: Bài viết giới thiệu về chuẩn nén Video H264

16

để cho ra block Dn chỉ sự khác nhau giữa hai block. Sau đó, block Dn được biến đổi

T (thường là DCT) và rồi lượng tử hóa Q kết quả cho ra X. Kết quả của quá trình tái

cấu trúc và mã hóa entropy X, cùng với những thông tin cần cho quá trình giải mã

mỗi block như tham số lượng tử, thông tin vector chuyển động, … được chuyển

thành luồng dữ liệu NAL cho việc truyền tải hoặc lưu trữ.

Song song với quá trình tái cấu trúc và mã hóa entropy X, thì những hệ số X

được lượng tử hóa ngược Q-1 và biến đổi ngược T-1 rồi cho ra block D’n. Block dự

đoán P được cộng với D’n để tạo ra block tái cấu trúc uF’n. Một bộ lọc được áp

dụng lên block uF’n để làm giảm nhiễu và được kết quả F’n.

2.3.1.1 Dự đoán

Quá trình dự đoán được thực thi ứng với từng block trong macroblock của

khung ảnh. Đầu tiên, block dự đoán cho mỗi block này sẽ được tạo dựa trên dữ liệu

đã được mã hóa trước đó. Dữ liệu dự đoán này có thể từ ảnh hiện tại chứa

macroblock đó (trong dự đoán Intra) hoặc từ các ảnh khác đã được nén và truyền

dẫn (trong dự đoán Inter). Bộ nén sẽ thực hiện trừ block hiện tại cần mã hóa cho

block dự đoán để tạo nên block khác biệt. Dữ liệu của block khác biệt sẽ được thực

hiện biến đổi, lượng tử và nén entropy. Quá trình dự đoán Inter trong H.264 được

thực hiện đối với từng phần chia với các kích thước khác nhau trong macroblock

thay đổi từ 4x4 đến 16x16 điểm ảnh (các kích thước phải thoả mãn là bội số của 4).

Phương thức dự đoán của chuẩn H.264 được cải tiến hơn so với các chuẩn

nén video trước đây. Chẳng hạn trong kiểu dự đoán Intra, H.264 hỗ trợ nhiều kích

thước block khác nhau thay đổi từ 4x4 đến 16x16 điểm ảnh. Với dự đoán Inter thì

H.264 có độ chính xác bù chuyển động lên đến ¼ khoảng cách giữa 2 điểm ảnh, hỗ

trợ lọc tách khối, …

Dự đoán Inter

Dự đoán Inter hay dự đoán bù chuyển động (Motion Compensation

Prediction) là dạng dự đoán được sử dụng thông dụng trong H.264.

Page 12: Bài viết giới thiệu về chuẩn nén Video H264

17

Dự đoán Inter lợi dụng thực tế rằng dữ liệu các điểm ảnh của ảnh hiện tại

cần được mã hóa có tính tương đồng cao với dữ liệu của các ảnh đã được mã hóa

trước đó.

Với mỗi block kích thước MxN điểm ảnh, bộ nén sẽ tìm một vùng có cùng

kích thước trong ảnh tham chiếu đã được mã hóa để lựa chọn vùng ảnh thích hợp

nhất. Tiêu chuẩn để cho vùng ảnh tham chiếu được chọn là năng lượng của việc trừ

block MxN hiện tại cho vùng ảnh MxN này phải là nhỏ nhất. Quá trình tìm kiếm

vùng ảnh tốt nhất để tham chiếu được gọi là quá trình ước lượng chuyển động

(Motion Estimation).

Hình 2. 9: Mô tả ước lượng chuyển động trong dự báo Inter

Vùng ảnh được chọn sẽ trở thành block dự đoán cho block MxN hiện tại cần

được mã hóa. Phần khác biệt này cùng với thông tin về vị trí của block hiện tại và

block tham chiếu sẽ được nén và truyền dẫn.

Dự đoán Inter bao gồm 3 quy trình chính: quản lý danh sách ảnh tham chiếu,

tính toán các vector chuyển động và nội suy các giá trị sub-sample.

Quản lý danh sách ảnh tham chiếu

Mỗi bộ nén và bộ giải nén quản lý danh sách gồm các ảnh tham chiếu nhằm

phục vụ cho dự đoán bù chuyển động tại các macroblock được mã hóa Inter trong

các slice P. Danh sách List 0 chứa các ảnh đã được giải nén, các ảnh này có thể

Page 13: Bài viết giới thiệu về chuẩn nén Video H264

18

trước hoặc sau ảnh hiện tại theo thứ tự hiển thị. Có hai loại ảnh khác nhau được lưu

trong danh sách ảnh tham chiếu bao gồm:

• Ảnh ngắn hạn (shortterm picture): ảnh vừa được thực hiện quá trình nén

và tái xây dựng trong bộ giải nén. Ảnh được xác định bởi số khung ảnh.

• Ảnh dài hạn (longterm picture): ảnh được lưu lâu hơn trong bộ nhớ ảnh

tham chiếu. Ảnh dài hạn được lưu trong danh sách các ảnh tham chiếu

cho đến khi được thay thế hoặc loại bỏ. Ảnh được xác định bởi giá trị

longtermpicnum.

• Các ảnh ngắn hạn được lưu trong bộ nhớ ảnh tham chiếu theo thứ tự tăng

dần của số ảnh và các ảnh dài hạn được lưu sau ảnh ngắn hạn cuối cùng

và theo thứ tự tăng dần của giá trị longtermpicnum.

• Khi tổng số các ảnh ngắn hạn và dài hạn bằng với số lượng tối đa các ảnh

tham chiếu thì ảnh ngắn hạn lâu nhất trong danh sách sẽ được loại bỏ

khỏi bộ nhớ các ảnh tham chiếu.

• Bộ nén sẽ gởi các lệnh điều khiển bộ nhớ thích ứng (adaptive control

command) để quản lý các ảnh ngắn hạn hoặc dài hạn.

Danh sách ảnh tham chiếu

Hoạt động 0 1 2 3 4

Trạng thái ban đầu - - - - -

Nén ảnh 250 250 - - - -

Nén ảnh 251 251 250 - - -

Nén ảnh 252 252 251 250 - -

Nén ảnh 253 253 252 251 250 -

Gán 251 đến LongTermPicNum 0 253 252 250 0 -

Nén ảnh 254 254 253 252 250 -

Gán 253 đến LongTermPicNum 4 254 252 250 0 0

Nén ảnh 255 255 254 252 0 4

Gán 255 đến LongTermPicNum 3 254 252 0 3 4

Page 14: Bài viết giới thiệu về chuẩn nén Video H264

19

Nén ảnh 256 256 254 0 3 4

Bảng 2. 2: Ví dụ về tổ chức bộ nhớ ảnh tham chiếu với ảnh hiện tại là 250, số ảnh

tham chiếu là 5

Bù chuyển động theo cấu trúc cây

Thành phần luma của mỗi macroblock có thể được chia theo bốn cách và

được các phần chia macroblock (maroblock partition) có kích thước nhỏ hơn. Các

maroblock partition này có thể bao gồm một phần 16x16, hai phần 8x16 hoặc hai

phần 16x8 hoặc bốn phần 8x8. Đối với các maroblock partition có kích thước 8x8

thì có thể được chia thành 4 phần nhỏ hơn được gọi là các sub-macroblock

partition. Mỗi sub-macroblock partition có kích thước 4x4 điểm ảnh.

Hình 2. 10: Sự phân chia marcoblock khi mã hóa

Quá trình ước lượng chuyển động và bù chuyển động trong dự báo Inter sẽ

được thực hiện với từng phần chia macroblock này.

Sự lựa chọn kích thước của các maroblock partition hoặc sub-macroblock

partition khi chia ảnh là yếu tố quan trọng ảnh hưởng đến tỷ lệ nén ảnh. Thông

thường, chia ảnh thành các phần có kích thước lớn tại những vùng ảnh ít chuyển

động và có tính đồng nhất cao, và thành những vùng có kích thước nhỏ tại những

ảnh chuyển động có nhiều chi tiết biến đổi.

Page 15: Bài viết giới thiệu về chuẩn nén Video H264

20

Hình 2. 11: Các phần chia khác nhau trong một ảnh

Trong một macroblock của H.264 (lấy mẫu 4:2:0) có thể tính kích thước các

phần chia của thành phần chroma từ các phần chia của thành phần luma. Trong

macroblock, thành phần chroma có độ phân giải theo chiều ngang và chiều đứng

bằng ½ so với thành phần luma. Do đó, mỗi block chroma cũng được chia thành

các phần với tỷ lệ giống với thành phần luma, ngoại trừ kích thước phần chia bằng

½ so với các block của thành phần luma.

Chẳng hạn, phần chia 8x16 trong luma tương ứng với phần chia 4x8 trong

phần chroma. Các giá trị (x,y) của các vector chuyển động ứng với mỗi partition

trong các block luma cũng giảm ½ khi đối với các block chroma.

Vector chuyển động

Mỗi maroblock partition hoặc sub-macroblock partition của một macroblock

mã hóa Inter được dự đoán từ vùng ảnh có cùng kích thước trong ảnh tham chiếu.

Vector chuyển động thể hiện sự dịch chuyển giữa hai vùng ảnh – hiện tại và tham

chiếu – có vị trí các tọa độ bằng ¼ khoảng cách hai pixel ứng với thành phần luma

và bằng 1/8 ứng với các thành phần chroma (Cr và Cb). Tuy nhiên, các điểm ảnh tại

các vị trí này (còn gọi là sub-sample) không tồn tại trong ảnh tham chiếu nên cần

phải tính bằng phép nội suy từ các điểm ảnh lân cận đã được mã hóa trong ảnh tham

chiếu.

Hình 2.12a mô tả block 4x4 điểm ảnh (16 hình tròn tô đen) trong ảnh hiện tại

được dự đoán từ một vùng trong ảnh tham chiếu. Nếu các giá trị của vector chuyển

Page 16: Bài viết giới thiệu về chuẩn nén Video H264

21

động là nguyên, các vị trí điểm ảnh thực sự tồn tại (Hình 2.12b). Nếu các giá trị của

vector chuyển động không nguyên, các vị trí điểm ảnh của block tham chiếu không

tồn tại trong ảnh tham chiếu và sẽ được nội suy từ các điểm ảnh lân cận. (Hình

2.12c).

Hình 2. 12: Các điểm ảnh sub-sample (quater-pixel hoặc half-pixel) trong ảnh tham

chiếu

Phép nội suy các vị trí sub-sample trong ảnh tham chiếu :

• Các điểm ảnh half-pixel (điểm ảnh giữa 2 điểm ảnh có vị trí nguyên trong

ảnh tham chiếu) sẽ được nội suy trước. Mỗi điểm ảnh half-pixel nằm liền

kề với 2 điểm ảnh có vị trí nguyên (ví dụ b, h, m, s trong hình 2.16) sẽ

được nội suy từ các điểm ảnh vị trí nguyên này bằng cách sử dụng bộ lọc

FIR gồm 6 hệ số (Finite Impulse Response) với giá trị các hệ số là

(1/32,−5/32, 5/8, 5/8,−5/32, 1/32).

Hình 2. 13: Nội suy các điểm ảnh tại các vị trí half-pixel trong ảnh tham chiếu

Page 17: Bài viết giới thiệu về chuẩn nén Video H264

22

Chẳng hạn, half-pixel b được tính từ 6 giá trị theo chiều ngang ứng với 6

pixel E, F, G, H, I, J theo công thức sau:

b = round((E − 5F + 20G + 20H − 5I + J) /32)

• Tương tự, h được nội suy từ các điểm ảnh A, C, G, M, R, T. Khi tất cả

các điểm ảnh half-pixel kề với các điểm ảnh có vị trí nguyên đã được tính

hết, vị trí half-pixel còn lại được tính bằng cách nội suy từ 6 vị trí half-

pixel đã được tính theo chiều ngang hoặc chiều thẳng đứng so với vị trí

half-pixel còn lại này. Ví dụ, j được tính bằng cách lọc FIR các vị trí cc,

dd, h, m, ee, ff. Viêc lọc nội suy 6 trọng số FIR tương đối phức tạp nhưng

cho kết quả khá chính xác so với vị trí của các điểm ảnh nguyên vì thế

làm tăng sự hiệu quả của bù chuyển động trong dự đoán Inter.

• Khi tất cả các vị trí half-pixel được tính, vị trí các pixel ứng với khoảng

cách ¼ khoảng cách giữa 2 điểm ảnh có vị trí nguyên trong ảnh tham

chiếu (ví dụ a, c, i, k và d, f, n,q trong hình 2.14) có thể được suy ra từ

các giá trị half-pixel này.

Hình 2. 14: Nội suy các điểm ảnh tại các vị trí quarter-pixel

• Vị trí của 1 quarter-pixel được suy từ 2 loại pixel : pixel tại vị trí nguyên

và half-pixel nằm kề với pixel này có thể theo chiều ngang hoặc chiều

thẳng đứng. Ví dụ quarter-pixel a có thể được nội suy theo công thức:

a = round((G + b) / 2)

• Các vị trí quarter-pixel còn lại như e, g, p, r được nội suy từ các điểm ảnh

half-pixel nằm đối diện trên cùng đường chéo so với vị trí này. Chẳng

Page 18: Bài viết giới thiệu về chuẩn nén Video H264

23

hạn, e được suy từ hai điểm ảnh b và h, g được suy từ hai điểm ảnh b và

m.

Dự đoán Intra

Trong quá trình nén các ảnh, dự báo Inter không phải lúc nào cũng được sử

dụng. Đặc biệt, đối với các cảnh chuyển trong một đoạn phim, khi ảnh đầu tiên của

cảnh mới không có hoặc có rất ít độ tương đồng so với các ảnh truớc đó. Lúc đó, dự

đoán Intra cho ảnh này sẽ được bộ nén sử dụng.

Trong dự đoán Intra, block dự doán P được tạo thành dựa trên các block đã

được mã hóa trước đó trong cùng 1 ảnh. Block khác biệt có được bằng cách trừ

block hiện tại cho block dự đoán P. Block khác biệt sẽ thực hiện quá trình biến đổi,

lượng tử và nén entropy (hình 2.15).

Hình 2. 15: Mô hình dự báo Intra

Đối với thành phần luma, block dự đoán P được có thể gồm 4x4 điểm ảnh

(Intra 4x4) hoặc 16x16 điểm ảnh (Intra 16x16). Trong một ảnh, dự đoán Intra 4x4

được dùng cho các vùng ảnh có nhiều chi tiết thay đổi, còn Intra 16x16 dùng cho

các vùng ảnh có tính tương đồng cao.

Có 9 mode dự đoán để tìm block dự đoán P cho block 4x4 luma; 4 mode dự

đoán cho block 16x16 luma; và 4 mode dự đoán cho các thành phần chroma trong

macroblock. Bộ nén sẽ lựa chọn mode tạo P thích hợp sao cho khác biệt giữa P và

block cần mã hóa là nhỏ nhất. Mode dự đoán sẽ được gởi để nén entropy.

Các mode dự đoán cho thành phần luma 4x4

Page 19: Bài viết giới thiệu về chuẩn nén Video H264

24

Hình 2.16 mô tả block 4x4 thuộc thành phần luma trong macroblock cần

được dự đoán Intra. Các điểm ảnh ở trên và bên trái được ký hiệu từ A đến H, từ M

đến L (hình 2.17) là các điểm ảnh đã được mã hóa và có thể được dùng làm tham

chiếu khi dự đoán bởi bộ nén và bộ giải nén.

Hình 2. 16: Block 4x4 luma cần được

dự đoán Intra (trong đường viền trắng)

Hình 2. 17: Các điểm ảnh đã được

nén dùng để tham chiếu

Có 9 mode để tạo block dự đoán P cho block 4x4 luma. Bộ nén sẽ lựa chọn

mode tạo P thích hợp nhất áp dụng cho từng block. Giá trị SAE (The Sum of

Absolute Errors) ứng với mỗi mode tạo P sẽ xác định mode được dùng để tạo block

dự đoán P ứng với giá trị SAE nhỏ nhất.

Hình 2. 18: Các mode dự đoán cho block 4x4 luma

Các mode dự đoán cho block luma 16x16

Dự đoán Intra 16x16 được dùng cho vùng ảnh có tính tương đồng cao, ít có

sự khác biệt. Toàn bộ thành phần luma gồm 16x16 điểm ảnh của một macroblock

được dự đoán.

Page 20: Bài viết giới thiệu về chuẩn nén Video H264

25

Có 4 mode dự đoán đối với Intra 16x16 là “horizontal”, “vertical”, “DC” và

“plane”. Tất cả các mode này sẽ sử dụng 16 điểm ảnh kề trên, 16 điểm ảnh phía trái

và/hoặc một điểm ảnh phía trên-bên trái của marcoblock cần dự đoán. Tất cả các

điểm ảnh này điều đã được giải nén và có thể được dùng để tham chiếu. Để dự đoán

một điểm ảnh trong Intra 16x16 :

• Mode “horizontal” : dùng điểm ảnh ngay phía trái của điểm ảnh này.

• Mode “vertical” dùng điểm ảnh ngay phía trên của điểm ảnh này.

• Mode “DC” lấy giá trị trung bình của 32 điểm ảnh ở trên và bên trái của

macroblock và gán giá trị này cho tất cả 256 điểm ảnh của marcoblock.

• Mode “plane” sử dụng công thức gồm tất cả 33 điểm ảnh đã được giải

nén và vị trí của điểm ảnh hiện tại cần dự đoán để suy ra giá trị cho điểm

ảnh này.

Hình 2.19 mô tả một macroblock luma với các pixel đã được nén và tại xây

dựng tại các vị trí phía trên và bên trái. Kết quả của các mode dự đoán để tạo ra P

được hiển thị ở hình 2.20. Và macroblock dự đoán ứng với mode “plane” sẽ được

chọn là phù hợp nhất vì có chỉ số SAE là nhỏ nhất.

Hình 2. 19: Macroblock 16x16 (luma)

cần dự đoán

Hình 2. 20: Các block được dự đoán Intra 16x16

Các mode dự đoán cho block chroma 8x8

Mỗi thành phần chroma 8x8 của một macroblock được dự đoán từ các điểm

ảnh chroma đã được mã hóa ở phía trên hoặc bên trái. Các thành phần chroma (Cr,

Cb) luôn sử dụng cùng một mode dự đoán.

Page 21: Bài viết giới thiệu về chuẩn nén Video H264

26

Có 4 mode dự đoán giống với các mode dự đoán của macroblock 16x16

luma nhưng có thay đổi số thứ tự của các mode. Các mode bao gồm: Mode 0 (DC),

Mode 1 (Horizontal), Mode 2 (Vertical), Mode 3 (Plane).

2.3.1.2 Biến đổi và lượng tử hóa

Quá trình biến đổi DCT được thực hiện với từng block trong macroblock và

thu được một tập các hệ số biến đổi. Các hệ số này sẽ được lượng tử hóa bằng nhiều

phương pháp khác nhau, chẳng hạn như mỗi hệ số sẽ được chia bởi một giá trị

nguyên, … Quá trình lượng tử sẽ làm giảm độ chính xác của các hệ số biến đổi với

các mức độ khác nhau. Nếu giá trị lượng tử cao thì cũng đồng nghĩa với việc xuất

hiện nhiều hệ số biến đổi có giá trị 0. Điều này sẽ làm tăng hiệu suất nén ảnh nhưng

bù lại chất lượng ảnh sau khi được giải nén sẽ giảm và ngược lại. Thông thường sau

quá trình lượng tử, hầu hết các hệ số có giá trị là 0, một vài hệ số khác 0.

H.264 dùng 3 kiểu biến đổi tùy vào loại dữ liệu khác biệt được mã hóa:

Ø Biến đổi Hadamard được sử dụng cho mảng gồm 4x4 các hệ số DC trong

16 block luma (block ‘-1’ trong hình 2.21) cho các maroblock mã hóa

Intra 16x16.

Ø Biến đổi Hadamard được sử dụng cho mảng 2x2 các hệ số DC của block

chroma (block 16, 17 trong hình 2.21) cho tất cả các macroblock.

Ø Biến đổi tựa DCT (DCT-Based Transform) được sử dụng cho tất cả các

block 4x4 còn lại trong các block chroma và luma.

Dữ liệu bên trong trong một macroblock được truyền dẫn theo thứ tự từ -1

đến 25 (hình 2.21). Nếu macroblock được mã hóa Intra 16x16 thì block ‘-1’ bao

gồm 16 hệ số DC (các hệ số nằm tại vị trí (0,0)) của 16 block 4x4 thuộc thành phần

luma sẽ được biến đổi trước. Tiếp theo, các block luma khác biệt từ 0->15 được

biến đổi (các hệ số DC của macroblock được mã hóa Intra 16x16 sẽ ko được gởi vì

đã biến đổi trong block ‘-1’). Tiếp theo, các block 16,17 (bao gồm các hệ số DC của

các thành phần Cr và Cb) được biến đổi. Cuối cùng, các block từ 18->25 (lúc này

không có các hệ số DC) sẽ được biến đổi.

Page 22: Bài viết giới thiệu về chuẩn nén Video H264

27

Hình 2. 21: Thứ tự truyền dẫn của các block bên trong macroblock

Biến đổi DCT và lượng tử vô hướng

Biến đổi này áp dụng cho block X gồm NxN điểm ảnh (thông thường là phần

dữ liệu khác biệt sau quá trình dự đoán). Sau quá trình biến đổi sẽ tạo ra block Y

gồm NxN các hệ số biến đổi. Quá trình biến đổi xuôi FDCT và biến đổi DCT ngược

(Inverse DCT) có thể được biểu diễn dựa theo ma trận biến đổi A như sau.

• Biến đổi xuôi FDCT (Forward DCT) của block gồm NxN điểm ảnh như

sau:

Y = AXAT (2.1)

• Biến đổi DCT ngược (Inverse DCT):

X = ATYA (2.2)

Với X: ma trận các điểm ảnh cần biến đổi.

Y: ma trận các hệ số đại diện cho X

A: ma trận biến đổi NxN

Lượng tử hóa: là quá trình biến đổi một tập các giá trị của tín hiệu X thành

tập các giá trị của tín hiệu Y thay thế cho X sao cho số bit cần dùng để biểu diễn

cho Y ít hơn X. Có 2 loại lượng tử : lượng tử vô hướng và lượng tử vector. Luận

văn chỉ trình bày lượng tử vô hướng vì được H.264 sử dụng trong quá trình nén và

giải nén video.

Lượng tử vô hướng thực hiện biến đổi một giá trị của tín hiệu nhập X thành

một tập các giá trị đã được lượng tử cho tín hiệu xuất Y. Mô tả của lượng tử vô

Page 23: Bài viết giới thiệu về chuẩn nén Video H264

28

hướng là sự làm tròn của một số thực tới số nguyên gần nhất với nó. Quá trình

lượng tử vô hướng sẽ làm mất mát thông tin vì giá trị sau khi được lượng tử không

thể khôi phục về giá trị ban đầu.

Công thức tính lượng tử vô hướng:

Qcoeff = round (coeff / Qstep) (2.3)

Với coeff: ma trận các giá trị trước khi lượng tử

Qcoeff : tập các giá trị sau khi lượng tử

Qstep: bước lượng tử

Trong nén và giải nén video, quá trình lượng tử vô hướng được chia thành 2

bước:

• Lượng tử xuôi FQ (Forward Quantiser) tại bộ nén còn gọi là ‘scaled’

• Lượng tử ngược IQ (Inverse Quantiser) tại bộ giải nén còn gọi là

‘rescaled’.

Dữ liệu xuất của quá trình lượng tử xuôi FQ là một mảng các hệ số đã được

lượng tử hóa, trong đó phần lớn là các giá trị 0.

Nếu giá trị bước lượng tử Qstep lớn thì các giá trị hệ số sau khi lượng tử sẽ

được thay thế với ít bit hơn và do đó tỉ lệ nén sẽ cao hơn so với bước lượng tử nhỏ.

Tuy nhiên, với bước lượng tử lớn thì các hệ số sau khi được ‘rescaled’ sẽ có các giá

trị sai lệch so với các giá trị trước khi lượng tử lớn hơn so với bước lượng tử nhỏ.

Page 24: Bài viết giới thiệu về chuẩn nén Video H264

29

Hình 2. 22: Minh họa biến đổi DCT và lượng tử hóa

Quá trình biến đổi và lượng tử với các block khác biệt 4x4

Biến đổi này được thực hiện trên các block có kích thước 4x4 điểm ảnh của

dữ liệu khác biệt (được đánh dấu là các block từ 0-15 và 18-25 trong hình 2.21) sau

quá trình dự đoán bù chuyển động (dự đoán Inter) hoặc dự đoán Intra. Biến đổi này

dựa trên phép biến đổi cosin rời rạc DCT (Discrete Cosine Transform) nhưng có

một vài sự khác nhau chủ yếu sau:

• Là một biến đổi nguyên. Tất cả các phép toán đều được thực thi trên số

nguyên, không làm mất sự chính xác khi giải nén.

• Phần chính của biến đổi chỉ sử dụng phép cộng và phép dịch bit.

• Nhân vô hướng (một phần của phép biến đổi) được tích hợp vào quá

trình lượng tử nên làm giảm tổng số lượng các phép nhân.

Các phép toán của quá trình biến đổi ngược và lượng tử ngược có thể được

thực thi trên các số nguyên 16 bit với chỉ một phép nhân trên một hệ số mà không

làm mất đi độ chính xác. Quá trình phát triển biến đổi tựa DCT từ biến đổi DCT

4x4 như sau:

Page 25: Bài viết giới thiệu về chuẩn nén Video H264

30

[ ]a a a a a b a cb c -c -b a c -a -bTY=AXA = (2.4)a -a -a a a -c -a bc -b b -c a -b a -c

X

Với 1 1 1 3, b = cos , c = cos2 2 8 2 8

a π π =

Từ công thức biến đổi DCT trên, phép nhân ma trận trên có thể được đặt

thừa số chung. Lúc này, công thức (2.4) trở thành :

[ ]1 1 1 d1 1 1 1

1 d -d -1 1 d -1 -1TY=(CXC ) E= 1 -1 -1 1 1 -d -1 1d -1 1 -d 1 -1 1 -d 2ab b ab

X

⊗ ⊗

2 2a ab b ab2 2ab b ab b (2.5)

2 2a ab b ab2 b

Với CXCT: Phần chính của biến đổi.

E : ma trận các hệ số tỷ lệ

⊗ : chỉ định rằng mỗi giá trị của CXCT được nhân với 1 giá trị

cùng vị trí của ma trận E (nhân vô hướng)

d = c/b = 0.414.

Để đơn giản cho việc triển khai biến đổi, các hệ số a, b, d sẽ được xấp xỉ ứng

với các giá trị sau : 1 2 1, b = , c = 2 5 2

a =

Công thức biến đổi (2.5) lúc này trở thành:

[ ]1 1 1 1 1 2 1 1

T 2 1 -1 -2 1 1 -1 -2Y=(C XC ) E = 1 -1 -1 1 1 -1 -1 21 -2 2 -1 1 -2 1 -1

2

2 4

Xj j j

ab b a

⊗ ⊗

2 2a a 2 22 2

2 4 2 4 (2.6)2 2a a 2 2

2

2 4

abab

ab b ab b

abab

b b

Page 26: Bài viết giới thiệu về chuẩn nén Video H264

31

Công thức (2.6) tương đương với công thức (2.4) nhưng vì có những sự thay

đổi của các hệ số b, d nên kết quả của biến đổi các block khác biệt 4x4 trong H.264

không tương đương so với biến đổi DCT 4x4 ban đầu.

Quá trình biến đổi ngược (IDCT): H.264 định nghĩa quá trình biến đổi này

một cách tường minh với một chuỗi các phép toán số học sau:

[ ]

11 1 1 2 2 2a ab a 11 -1 -1 2 2ab b ab b2X=C (Y E )C = (

1 2 2a ab a ab1 -1 12 2 2ab b ab b11 -1 1

2

T Xi i i

⊗ ⊗ −

1 1 1 1ab 1 11 -1

2 2 ) (2.7)1 -1 -1 11 1 -1 1 2 2

− −

Các hệ số ±1/2 trong các ma trận Ci và CiT có thể được thay thế bằng phép

Shift phải.

Về khía cạnh lượng tử hóa, H.264 sử dụng phép lượng tử hóa vô hướng. Cơ

chế của lượng tử thuận và lượng tử ngược trong chuẩn nén video H.264 phức tạp

hơn bởi yêu cầu tránh các phép chia, phép xử lý trên số thực và xử lý các phép tính

cho các ma trận Ei và Ef được gởi từ quá trình biến đổi. Công thức lượng tử xuôi cơ

bản:

Zij = round (Yij / Qstep) (2.8)

Với Yij : Các hệ số biến đổi

Qstep: bước lượng tử

Zij : các hệ số được lượng tử

Trong H.264, bước lượng tử Qstep có tất cả 52 giá trị, được đánh chỉ mục

bởi một biến lượng tử QP (Quantisation Parameter). Khi QP tăng lên 6 đơn vị thì

giá trị Qstep sẽ được tăng gấp đôi. QP 0 1 2 3 4 5 6 7 8 9 10 11 12 ….

Qstep 0.625 0.6875 0.8125 0.875 1 1.125 1.25 1.375 1.625 1.75 2 2.25 2.5 ….

QP … 18 … 24 … 30 … 36 …. 42 … 48 … 51

Qstep 5 10 20 40 80 160 224

Bảng 2. 3: Các kích thước bước lượng tử trong H.264/AVC Codec

Page 27: Bài viết giới thiệu về chuẩn nén Video H264

32

Miền giá trị rộng lớn của bước lượng tử giúp cho bộ nén điều chỉnh sự tương

quan thay đổi giữa tỷ lệ bit/s và chất lượng thích hợp nhằm đạt chất lượng thể hiện

tốt nhất. Trong một macroblock, giá trị QP có thể khác nhau đối với thành phần

luma và chroma. Các hệ số a2, ab/2 và b2/4 trong công thức (2.6) được tích hợp tính

toán trong quá trình lượng tử thuận.

Với lượng tử thuận, đầu tiên block X được biến đổi để tạo thành block gồm

các hệ số biến đổi theo công thức:

W = CXCT (2.9)

Sau đó mỗi hệ số Wij được lượng tử với công thức:

Zij = round (Wij*PF / Qstep) (2.10)

Tùy thuộc vào vị trí của i, j mà PF sẽ có các giá trị sau:

Vị trí PF

(0,0), (2,0), (0,2) hoặc (2,2)

(1,1), (1,3), (3,1) hoặc (3,3)

Các vị trí khác

a2

b2

ab/4

Để tránh sử dụng phép chia nhằm làm đơn giản thuật toán, hệ số (PF/Qstep)

sẽ được triển khai dùng một phép nhân với hệ số PF và một phép dịch bit phải như

sau:

Zij = round (Wij * MF / 2qbits) (2.11)

Với MF / 2qbits = PF / Qstep

qbits = 15 + floor (QP / 6) Theo phép tính số nguyên, có thể được triển khai như sau:

|Zij| = (|Wij|*MF + f) >> qbits (2.12)

sign (Zij) = sign (Wij)

với phép >> là phép dịch phải bit nhị phân.

Giá trị f = 2qbits/3 đối với các block được mã hóa Intra và f = 2qbits/6 đối với

các block được mã hóa Inter.

QP Vị trí Vị trí Giá trị

Page 28: Bài viết giới thiệu về chuẩn nén Video H264

33

(0,0), (2,0), (0,2), (2,2) (1,1), (1,3), (3,1), (3,3)

0

1

2

3

4

5

13107

11916

10082

9362

8192

7282

5243

4660

4194

3647

3355

2893

8066

7490

6554

5825

5243

4559

Bảng 2. 4: Hệ số nhân MF

Trong bảng 2.4, 6 giá trị đầu của hệ số nhân MF (Mutiplication Factor) được

dùng bởi H.264 được hiển thị. Cột thứ 2 và thứ 3 ứng với các hệ số b2/4 và ab/2.

Khi QP > 5 thì giá trị MF còn lại không thay đổi nhưng số chia tăng theo hệ số 2

khi QP tăng lên 6 đơn vị. Chẳng hạn, qbits = 16 với 6<= QP <= 11, qbits = 17 với

12<= QP <=17, …

Còn lượng tử ngược (rescaled) có công thức:

W’ij = Zij Qstep * PF * 64 (2.13)

W’ij là các hệ số được ‘rescaled’. Tuy nhiên, H.264 không sử dụng một cách

tường minh các hệ số Qstep và PF trong công thức này. Thay vào đó, một hệ số V =

PF.Qstep.64 sẽ được thay thế với 0 ≤ QP ≤ 5 và cho mỗi vị trí hệ số.

Vì thế công thức lượng tử ngược trở thành:

W’ij = Zij * Vij *2floor (QP/6) (2.14)

Giá trị V được định nghĩa trong chuẩn H.264 với 0 ≤ QP ≤ 5 được mô tả

trong bảng 4.5. Hệ số 2floor(QP/6) làm các hệ số được lượng tử tăng lên 2 lần ứng với

giá trị QP tăng lên 6 đơn vị.

QP Vị trí

(0,0), (2,0), (0,2), (2,2)

Vị trí

(1,1), (1,3), (3,1), (3,3)

Vị trí khác

0

1

2

10

11

13

16

18

20

13

14

16

Page 29: Bài viết giới thiệu về chuẩn nén Video H264

34

3

4

5

14

16

18

23

25

29

18

20

23

Bảng 2. 5: Hệ số scaling V

Biến đổi và lượng tử các block 4x4 luma gồm các hệ số DC

Nếu macroblock được nén theo kiểu dự báo Intra (ví dụ toàn bộ thành phần

luma 16x16 được dự đoán từ những điểm ảnh lân cận) thì mỗi block 4x4 được biến

đổi trước. Sau đó, các hệ số DC của mỗi block 4x4 sẽ được biến đổi dùng biến đổi

Hadamard 4x4.

1 1 1 1 1 1 1 11 1 -1 -1 1 1 -1 -1Y = W /2 (2.15)1 -1 -1 1 1 -1 -1 11 -1 1 -1 1 -1 1 -1

D D

Trong đó WD chính là block gồm 4x4 các hệ số DC được đánh dấu là ‘-1’

trong hình 2.21, YD là block sau khi biến đổi gồm các hệ số biến đổi. Các hệ số biến

đổi này sẽ được lượng tử để tạo thành block gồm các hệ số biến đổi DC đã được

lượng tử theo công thức sau:

|ZD(i,j)| = (|YD(i,j)| MF(0,0) + 2f) >> (qbits + 1) (2.16)

sign (ZD(i,j)) = sign (YD(i,j))

Trong đó, MF(0,0) là hệ số nhân cho vị trí (0,0), các hệ số f, qbits đã được

định nghĩa trước.

• Tại bộ giải nén, một biến đổi Hadamard ngược được thực hiện :

W =

1 1 1 1 1 1 1 11 1 -1 -1 1 1 -1 -1 (2.17)1 -1 -1 1 1 -1 -1 11 -1 1 -1 1 -1 1 -1

QD ZD

• Quá trình lượng tử ngược (Rescaled):

W’D(i,j) = WQD(i,j) V(0,0) 2floor(QP/6) - 2 (QP ≥ 12) (2.18)

Page 30: Bài viết giới thiệu về chuẩn nén Video H264

35

W’D(i,j) = [WQD(i,j) V(0,0) + 21-floor(QP/6) – 2] >> (2-floor(QP/6)) (QP<12)

Trong đó, V(0,0) ứng với vị trí (0,0) được cho bởi bảng sau:

QP Vị trí

(0,0), (2,0), (0,2), (2,2)

Vị trí

(1,1), (1,3), (3,1), (3,3)

Vị trí khác

0

1

2

3

4

5

10

11

13

14

16

18

16

18

20

23

25

29

13

14

16

18

20

23

Bảng 2. 6: Giá trị của hệ số V ứng với các vị trí khác nhau

Các hệ số DC được lượng tử ngược W’D sẽ được chèn vào các block 4x4

tương ứng.

Biến đổi và lượng tử các block 2x2 chroma gồm các hệ số DC

Mỗi block 4x4 của thành phần chroma được biến đổi DCT. Các hệ số DC

của mỗi block này được nhóm lại thành block 2x2 (WD). Block này sẽ được biến

đổi trước khi lượng tử hóa.

1 1 1 1W = W (2.19)

QD 1 -1 1 -1D

Lượng tử hóa của block YD 2x2 sau khi biến đổi được biểu diễn như sau:

|ZD(i,j)| = (|YD(i,j)|. MF(0,0) + 2f) >> (qbits + 1) (2.20)

sign (ZD(i,j)) = sign (YD(i,j))

Trong đó, MF(0,0) là hệ số nhân tại vị trí (0,0) và các hệ số f, qbits đã được

định nghĩa ở trên.

Trong quá trình giải nén, biến đổi ngược được thực hiện trước :

1 1 1 1W = (2.21)

QD 1 -1 1 -1DZ

Tiếp đó, quá trình lượng tử ngược sẽ được thực hiện cho block WQD:

Page 31: Bài viết giới thiệu về chuẩn nén Video H264

36

W’D(i,j) = WQD(i,j). V(0,0). 2floor (QP/6) – 1 (QP ≥ 6) (2.22)

W’D(i,j) = [WQD(i,j). V(0,0)] >> 1 (QP < 6)

Các hệ số sau khi thực hiện quá trình lượng tử ngược sẽ được thay thế tại các

vị trí tương ứng của chúng trong các block 4x4 trước khi được biến đổi trong quá

trình nén.

2.3.1.3 Tái sắp xếp

Trong bộ nén, mỗi block 4x4 của các hệ số biến đổi được lượng tử sẽ được

ánh xạ thành một mảng gồm 16 phần tử theo thứ tự zig-zag.

Hình 2. 23: Quét Zig-Zag đối với block 4x4 luma

Hình 2. 24: Mô hình biến đổi block 4x4 thành mảng sau khi tái sắp xếp

2.3.1.4 Mã hóa luồng bit nén hay mã hóa Entropy

Trong quá trình nén video, một số giá trị phải được mã hóa để tạo thành

luồng bit nén để lưu trữ hoặc truyền dẫn nhằm phục vụ cho bộ giải nén. Các giá trị

này bao gồm:

• Các hệ số sau khi đã biến đổi và lượng tử.

• Các thông tin liên quan nhằm giúp cho bộ giải nén tái tạo lại block dự

đoán.

• Thông tin về cấu trúc của dữ liệu nén.

• Thông tin về chuỗi video hoàn chỉnh.

Page 32: Bài viết giới thiệu về chuẩn nén Video H264

37

• Thông tin về mode dự đoán trong các maroblock trong dự đoán Intra.

• Giá trị biến lượng tử (QP).

Các giá trị này và một số thành phần khác sẽ được mã hóa thành luồng bit

nhị phân bằng cách dùng các thuật toán mã hóa độ dài thay đổi CAVLC và/hoặc mã

hóa số học CABAC. Luồng bit nhị phân này sẽ thay thế cho thông tin video ban đầu

với kích thước nhỏ nên hiệu quả hơn trong việc lưu trữ hoặc truyền dẫn.

Có 3 loại mã hóa entropy được sử dụng trong H.264 đó là mã hóa Exp-

Golomb, mã hóa CAVLC, và mã hóa CABAC.

Mã hóa Entropy Exp-Golomb

Mã hóa Exp-Golomb được dùng để nén hầu như các thành phần dữ liệu của

luồng video cần mã hóa ngoại trừ phần dữ liệu của block khác biệt.

Các mã Exp-Golomb (Exponential Golomb Codes) là các mã với chiều dài

thay đổi. Các mã này được xây dựng trên cùng một nguyên tắc.

Bảng 2. 7: Các từ mã Exp-Golomb

Trong bảng 2.7, với một vài từ mã (codeword) đầu tiên có thể biết được các

từ mã này được xây dựng theo cách logic như sau:

[M zeros] [1] [INFO] (2.23)

Trong đó, INFO là một trường gồm có M bit mang thông tin cho giá trị

code_num cần thay thế. Chiều dài của mỗi từ mã Exp-Golomb là (2.M +1) bit. Mỗi

từ mã có thể được bộ nén xây dựng dựa trên chỉ số code-num của nó

M = floor (log2[code_num + 1]) (2.24)

Page 33: Bài viết giới thiệu về chuẩn nén Video H264

38

INFO = code_num + 1 – 2M

Một từ mã có thể được giải mã để tạo thành số mà nó thay thế trong bộ giải

nén như sau:

• Đọc tổng số zero trong M zeros đứng trước 1

• Tính giá trị của M bit INFO sau 1.

• Giá trị code_num = 2M + INFO - 1

Tuy nhiên, mã Exp-Golomb được dùng để mã hóa các thành phần dữ liệu

khác nhau trong H.264, nhưng không phải tất cả chúng là các số nguyên dương. Vì

vậy, đối với một số thành phần dữ liệu, một bảng phụ được thêm vào để thay thế

cho các giá trị này.

Bảng 2. 8: Ánh xạ các codeNum cho các syntax elements có dấu

Đối với các bảng ánh xạ này, có giá trị thông dụng hơn của các thành phần

mã hóa được ánh xạ tới các codeNum nhỏ, vì thế việc mã hóa sẽ đạt hiệu quả nén

cao hơn.

Mã hóa chiều dài thay đổi ứng ngữ cảnh CAVLC

CAVLC (Context-based Adaptive Variable Length Coding): mã hóa chiều

dài thay đổi ứng ngữ cảnh. Đây là một dạng mã hóa entropy mà bảng từ mã

(codeword table) áp dụng cho block hiện tại cần mã hóa sẽ có chiều dài thay đổi

Page 34: Bài viết giới thiệu về chuẩn nén Video H264

39

dựa vào các phần dữ liệu đã được mã hóa trước đó (các block lân cận đã được mã

hóa). CAVLC là phương pháp mã hóa entropy của profile cơ bản của H.264. Nó

được dùng để mã hóa các block khác biệt 4x4 hoặc 2x2 gồm các hệ số đã lượng tử

sau khi block được tái sắp xếp. Mã hóa CAVLC dựa trên các đặc điểm sau của một

block sau quá trình lượng tử:

• Sau các quá trình dự đoán, biến đổi và lượng tử, các block thường mang

tính chất ‘thưa’ (chứa hầu hết các hệ số mang giá trị 0). CAVLC dùng mã

hóa đường chạy thế thay thế chuỗi các 0 làm cho hiệu quả nén tốt hơn.

• Tổng số các hệ số khác zero trong các block kề nhau là tương đương với

nhau. Các hệ số được nén dựa trên một bảng tìm kiếm (look-up table) và

sự lựa chọn của bảng này phụ thuộc vào số các hệ số khác zero trong các

block lân cận của block cần mã hóa.

• Sau quá trình tái sắp xếp, giá trị level (độ lớn) của các hệ số khác zero

thường có khuynh hướng lớn tại các vị trí bắt đầu của mảng (gần các hệ

số DC) và giảm dần khi đi về phía cuối mảng. CAVLC lợi dụng điểm này

bằng cách lựa chọn bảng tìm kiếm (look-up table) phụ thuộc vào độ lớn

các level được mã hóa gần nhất cho level hiện tại cần mã hóa. Trong CAVLC, việc mã hóa một block gồm các hệ số biến đổi được thực

hiện theo thứ tự sau [24] :

• coeff_token: mã hóa các hệ số khác 0 (TotalCoeff) và các Trailing Ones

(các hệ số với giá trị tuyệt đối bằng 1).

• trailing_one_sign_flag: dấu của các giá trị Trailing One.

• level_prefix: phần đầu của mã các hệ số khác 0 (một giá trị cho một hệ

số).

• level_suffix: phần thứ 2 của mã các hệ số khác 0 (một giá trị cho một hệ

số).

• total_zeros: tổng số zero tính từ đầu mảng cho đến hệ số khác zero cuối

cùng.

Page 35: Bài viết giới thiệu về chuẩn nén Video H264

40

• run_before: số các zero trước mỗi hệ số khác 0. Việc mã hóa các

run_before được thực hiện theo thứ tự ngược từ cuối mảng.

Mã hóa nhị phân số học ứng ngữ cảnh CABAC

CABAC (Context-based Adaptive Binary Arithmetic Coding): mã hóa nhị

phân số học ứng ngữ cảnh. Giống như CAVLC, CABAC sẽ mã hóa phần dữ liệu

hiện tại dựa trên phần dữ liệu trước đó đã được mã hóa trong các block lân cận.

CABAC đạt được tỉ lệ nén tốt dựa vào việc lựa chọn mô hình thích hợp cho mỗi dữ

liệu cần mã hóa theo ngữ cảnh của nó và sự ước lượng hợp lý dựa trên các thống kê

cục bộ và dùng mã hóa số học (arithmetic coding) thay cho mã hóa chiều dài thay

đổi (variable-length coding) như trong CAVLC. CABAC dùng mã hóa số học có

nghĩa là chỉ có 2 giá trị nhị phân (0 và 1) được mã hóa. Nếu một giá trị không phải

là nhị phân (chẳng hạn các hệ số biến đổi, các vector chuyển động) thì sẽ được ‘nhị

phân hóa’ để chuyển thành dạng nhị phân trước khi dùng mã hóa số học. Mã hóa

CABAC được dùng trong profile chính.

2.3.1.5 Lọc tách khối

Lọc được thực hiện với mỗi macroblock sau khi được giải nén để làm mờ đi

những cạnh giữa các block và cung cấp khả năng hiển thị hình ảnh sau khi giải nén

tốt hơn. Đây là một cải tiến của H.264 so với các chuẩn nén video trước.

Tại bộ nén, lọc tách khối được thực hiện cho các macroblock trước quá trình

lưu trữ macroblock đó làm tham chiếu cho các dự đoán sau này. Các maroblock sau

khi lọc có thể được sử dụng cho việc dự doán bù chuyển động cho các ảnh tương

lai. Tại bộ giải nén, lọc được thực hiện trước khi macroblock được tái xây dựng và

hiển thị.

Quá trình lọc tách khối được áp dụng cho các cạnh theo chiều ngang và

thẳng đứng của các block 4x4 trong một macroblock (ngoại trừ các cạnh đồng thời

là đường biên của slice) theo thứ tự sau:

Page 36: Bài viết giới thiệu về chuẩn nén Video H264

41

Hình 2. 25: Thứ tự lọc các cạnh của thành phần luma và chroma trong 1 macroblock

• Lọc 4 đường biên thẳng đứng của thành phần luma (theo thứ tự a, b, c, d).

• Lọc 4 đường biên ngang của thành phần luma (theo thứ tự e, f, g, h).

• Lọc 2 đường biên thẳng đứng của mỗi thành phần chroma (i, j).

• Lọc 2 đường biên ngang của mỗi thành phần chroma (k, l).

2.3.2 Quy trình giải nén

Hình 2. 26: Quy trình giải nén vide của chuẩn H.264/AVC

Bộ giải nén nhận luồng bit nén được truyền dẫn bởi bộ nén, thực hiện giải

nén entropy và tái sắp xếp các thành phần dữ liệu để tạo tập các hệ số biến đổi đã

lượng tử X. Sau đó, tập hệ số X này sẽ được lượng tử ngược và biến đổi ngược để

tạo block khác biệt D’n.

X

+

D’n

F’n-1, ....

(Frames tham chiếu)

Quá trình bù chuyển

động

Dự đoán Intra

F’n(Frame

tham chiếu)Lọc

Tái cấu trúc

Mã hóa Entropy

NAL

T -1(Biến đổi ngược)

Q-1

(lượng tử hóa ngược)

P

Inter

Intra

+uF’n

Page 37: Bài viết giới thiệu về chuẩn nén Video H264

42

Bộ giải nén dùng các thông tin có được từ việc giải nén luồng bit để tạo một

block dự đoán P bằng một trong hai phương pháp dự đoán (Inter hoặc Intra), block

này sẽ giống với block dự đoán được tạo ra trong bộ nén. Block P sẽ cộng với block

khác biệt D’n để tạo thành block uF’n. Block uF’n sẽ được lọc tách khối để tạo

thành block F’n đã lọc để có thể được dùng cho việc hiển thị.

2.3.2.1 Giải mã luồng bit nén

Bộ giải nén sẽ nhận luồng bit nén H.264, tiến hành giải nén các thành phần

dữ liệu, tái tạo lại các thông tin đã được nén bởi bộ nén như các hệ số biến đổi được

lượng tử, thông tin dự đoán,... Sau đó thông tin này được được dùng để thực hiện lại

quá trình biến đổi và lượng tử ngược nhằm tái xây dựng lại chuỗi gồm các ảnh

video.

2.3.2.2 Rescaling và biến đổi ngược

Các hệ số biến đổi đã lượng tử sẽ được re-scaled. (mỗi hệ số được nhân với

một giá trị nguyên để phục hồi lại giá trị ban đầu của nó).

2.3.2.3 Tái xây dựng

Với mỗi macroblock, bộ giải nén tạo một block P giống với block được tạo

bởi bộ nén. Bộ giải nén sẽ cộng block này với phần block khác biệt được tạo thành

trong quá trình giải nén để tái xây dựng block. Sau đó, các block này được lọc và có

thể được dùng để hiển thị như một phần của ảnh video.