Bài viết giới thiệu về chuẩn nén Video H264
-
Upload
thanh-huyen-luu -
Category
Documents
-
view
286 -
download
2
description
Transcript of 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
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).
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.
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
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.
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.
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
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.
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.
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
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.
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ể
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
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.
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
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
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
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
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.
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.
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.
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ô
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ỏ.
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:
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
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
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ị
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
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)
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:
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.
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)
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
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.
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:
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
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.