I Slices P Slices
Hình IV.29 Trật tự hiện thị của các bức ảnh.
IV.3.4 MÃ HĨA ENTROPY
Mã hĩa Entropy là một kỹ thuật mã hĩa khơng tổn hao cĩ các ký hiệu ngõ vào là những hệ số lượng tử, vector chuyển động, thơng tin header…Nĩ gồm nhiều loại mã hĩa như mã hĩa dự đốn, mã hĩa Huffman, mã hĩa cĩ chiều dài biến đổi VLC và mã hĩa số học nhị phân BAC. Trong H.264/AVC sử dụng kiểu mã hĩa thích nghi theo nội dung CA như CAVLC và CABAC nghĩa là chỉ cĩ một ánh xạ cho một bảng từ mã đơn được thực hiện theo thống kê dữ liệu, cịn các tiêu chuẩn trước thì sử dụng một bảng VCL cho mỗi phần tử khác nhau. Các thành phần cú pháp ở lớp bên trên sẽ được mã hĩa VLC hoặc FLC, cịn thành phần cú pháp ở lớp bên dưới sẽ được mã hĩa VLC hoặc CABAC tùy thuộc vào kiểu mã hĩa Entropy. Khi cờ chỉ chế độ mã hĩa Entropy được cài về “0” thì các khối dữ liệu dư thừa sẽ được mã hĩa CAVLC hoặc mã hĩa VLC nào đĩ như mã hĩa Ex-Golomb. Các thơng số cần mã hĩa như bảng sau:
VLC nào đĩ như mã hĩa Ex-Golomb. Các thơng số cần mã hĩa như bảng sau:
Thơng số Mơ tả
Thành phần cú pháp của
Sequence, picture và slice-layer Thơng tin mào đầu và các thơng số Macroblock type mb_type Phương pháp dự đốn cho mỗi MB mã hĩa
Coded block pattern Chỉ định mẫu khối trong MB được mã hĩa Quantiser parameter Truyền giá trị sai khác về QP của ảnh trước Reference frame index Chỉ số ảnh tham khảo cho dự đốn Inter
Motion vector Truyền phần sai khác từ vector chuyển động dự đốn Residual data Hệ số dữ liệu dư thừa từ các khối 4x4, 2x2
IV.3.4.1 Mã hĩa Entropy Exp-Golomb.
Mã Exp-Golomb (Exponential Golomb codes) là mã cĩ chiều dài thay đổi được với cấu trúc đều đặn ví dụ như sau.
Dạng chuỗi bit Phạm vi giá trị codeNum
1 0
01x0 1-2
001x1x0 3-6
00001x3x2x1x0 15-30
000001x4x3x2x1x0 31-62
... ...
Cấu trúc bảng mã Exp-Golomb [M zeros][1][INFO]
Trong đĩ INFO là trường M-bit mang thơng tin. Từ mã đầu tiên khơng cĩ số 0 bắt đầu và trường INFO kết thúc. Từ mã thứ 1 và 2 cĩ trường INFO đơn bit, từ mã thứ 3-6 cĩ trường INFO 2 bit, và cứ tiếp tục như vậy. Chiều dài của một từ mã là (2M+1) bits và mỗi từ mã được bộ mã hĩa cấu trúc lại dựa vào chỉ code_num:
M = floor(log2[code_num+1]) INFO = code_num + 1 - 2M
Một từ mã được giải mã theo thứ tự như sau:
+ Đọc trong M số 0 bắt đầu, tiếp theo là số 1.
+ Đọc trường M-bit INFO.
+ Code_num = 2M+ INFO - 1
Đối với từ mã số 0, thì INFO và M đều là 0.
Thơng số k sẽ được mã hĩa và được ánh xạ vào Code_num theo một trong các cách sau:
Loại ánh xạ Mơ tả
ue Ánh xạ trực tiếp khơng dấu, code_num = k.
te Là phiên bản của bảng mã Exp-Golomb, trong đĩ từ mã ngắn bị cắt bỏ.
se
Ánh xạ cĩ dấu, sử dụng vector chuyển động sai khác, delta QP và những vector khác, giá trị k sẽ được ánh xạ vào giá trị code_num như
bảng IV. Với các giá trị code_num như sau. Code_num = 2 | k | (k ≤ 0) Code_num = 2 | k |−1 (k> 0)
me
Ký tự ánh xạ, thơng số K sẽ được ánh xạ vào code_num. Bảng IV liệt kê một phần các mẫu khối cho dự đốn Inter, chỉ ra những khối 8x8
k Code_num 0 0 1 1 -1 2 2 3 -2 4 3 5 … … Bảng loại ánh xạ cĩ dấu.
Mẫu khối mã hĩa (Inter prediction) Code_num
0 (no nonzero blocks) 0
16 (chroma DC block nonzero) 1
1 (top-left 8 × 8 luma block nonzero) 2
2 (top-right 8 × 8 luma block nonzero) 3
4 (lower-left 8 × 8 luma block nonzero) 4
8 (lower-right 8 × 8 luma block nonzero) 5
32 (chroma DC and AC blocks nonzero) 6
3 (top-left and top-right 8 × 8 luma blocks nonzero) 7
… …
Bảng mẫu khối được mã hĩa.
Mỗi loại ánh xạ (ue, te, se và me) sẽ tạo ra một từ mã ngắn cho giá trị xảy ra nhiều, và từ mã dài cho giá trị xảy ra ít. Ví dụ trong MB Inter loại P_L0_16x16 (cĩ nghĩa là dự đốn khối luma 16x16 từ bức ảnh trước) sẽ được đánh dấu Code_num = 0 vì nĩ xảy ra thường xuyên, MB loại P_8x8 (dự đốn khối luma 8x8 từ bức ảnh trước) được đánh code_num = 3 vì nĩ ít xảy ra.
IV.3.4.2 Mã hĩa độ dài biến đổi thích nghi nội dung CAVLC
Bộ mã hĩa CAVLC sử dụng nhiều bảng tra VLC cho các thành phần cấu trúc, sự thích nghi của nĩ thể hiện ở chỗ: nĩ lựa chọn một bảng tra cho thành phần cú pháp hiện tại dựa vào bảng tra đã được truyền đi, do đĩ hiệu quả mã hĩa Entropy sẽ tăng lên.
Sau khi dự đốn, biến đổi và lượng tử, đặc trưng của khối hầu hết đều là số 0, nên CAVLC sử dụng mã hĩa Run-Level để mã hĩa chuỗi zeros. Những hệ số khác 0 tần số cao, sau khi quét Zig-Zag thường kết thúc bằng nhiều số ±1 thì CAVLC sẽ báo hiệu số lượng chuỗi số kết thúc là 1(‘Trailing Ones’). Trong chuỗi sắp xếp lại biên độ của hệ số khác 0 cĩ khuynh hướng lớn dần ở vị trí đầu tiên (gần hệ số DC) và nhỏ dần về phía tần
số cao. Nắm bắt điểm này, bộ mã hĩa CAVLC sử dụng việc chọn bảng dị tìm VLC thích nghi cho thơng số mức tùy thuộc vào mức biên độ mã hĩa gần nhất.
Quá trình mã hĩa một ma trận các hệ số đã biến đổi được thực hiện qua 5 bước sau: 1) Mã hĩa số lượng hệ số khác 0 (TotalCoeffs) và hệ số kết thúc bằng 1
(coeff_token)
2) Mã hĩa ký hiệu cho từng TrailingOne
3) Mã hĩa các cấp độ của các hệ số khác 0 cịn lại. 4) Mã hĩa tổng số giá trị 0 trước hệ số cuối cùng. 5) Mã hĩa dọc chiều dài chuỗi số 0.
Quá trình thực hiện như sau:
Mã hĩa số lượng hệ số khác 0 (TotalCoeffs) và hệ số kết thúc bằng 1 (coeff_token)
Giá trị của TotalCoeffs
} 16 ... , 3 , 2 , 1 , 0 { ∈ và TrailingOnes } 3 , 2 , 1 , 0 { ∈ . Sẽ cĩ 4 bảng dị tìm cho các hệ số coeff_token bao gồm 3 bảng VLC và 1 bảng mã cĩ chiều dài cố định FLC. Việc chọn bảng dị tìm tùy thuộc vào số lượng hệ số khác 0 bên tay trái và bên trên của bảng mã trước đĩ tương ứng với nA và nB.
Ví dụ: nếu cả 2 khối nA, nB đều nằm ở bên tay trái phía trên thì nC = round((nA + nB)/2).
Nếu chỉ nằm bên trên thì nC = nB hoặc chỉ nằm bên trái nC = nA, cịn khơng thõa mãn thì nC = 0.
Trong đĩ thơng số nC sẽ lựa chon bảng dị tìm như sau, vì vậy việc chọn bảng mã VLC sẽ phụ thuộc vào giá trị của các khối bên cạnh (thể hiện sự thích nghi theo nội dung CA).
N Bảng cho coeff_token
1 Bảng 1: số lượng hệ số nhỏ, tức là nếu TotalCoeffs cĩ giá trị nhỏ sẽ được mã hĩabằng từ mã ngắn và ngược lại
2, 3 Bảng 2 số lượng hệ số trung bình, tức là nếu giá trị của TotalCoeffs trong khoảng 2-4 sẽ được mã hĩa bằng từ mã ngắn và ngược lại
4, 5, 6, 7 Bảng 3 số lượng hệ số cao
≥
Mã hĩa ký hiệu cho từng TrailingOne
Mỗi một TrailingOne được mã hĩa bằng từ bits đơn, nếu là 0 thì mã hĩa thành “ +” nếu là 1 thì mã hĩa thành “-” theo trật tự ngược lại, bắt đầu với hệ số TrailingOne cĩ tần số cao nhất
Mã hĩa các cấp độ của các hệ số khác 0 cịn lại.
Cấp độ bao gồm ký hiệu và giá trị biên độ của các hệ số khác 0 được mã hĩa theo trật tự ngược lại, bắt đầu từ hệ số cĩ tần số cao nhất sau giá trị hệ số DC. Việc mã hĩa level được tạo ra từ một tiền tố level và một hậu tố level. Tiền tố level cĩ thể cĩ 0->6 bits tùy thuộc vào biên độ mã hĩa liên tục theo bảng sau:
Chiều dài tiền tố hiện tại Mức ngưỡng để tăng chiều dài tiền tố
0 0 1 3 2 6 3 12 4 24 5 48
6 N/A (chiều dài cao nhất)
Mã hĩa dọc chiều dài chuỗi Zero
Số lượng hệ số “0” trước đĩ (run_before) được mã hĩa theo thứ tự ngược lại. Nếu khơng cịn số “0” nào nữa thì giá trị run_before = total_zeros, khơng cần mã hĩa giá trị run_before.
Nếu cịn lại 2 số “0” chưa mã hĩa, thì giá trị run_before sẽ nhận các giá trị {0, 1, 2} và vì thế mã VLC khơng cần sử dụng từ mã lớn hơn 2bits
Ví dụ cho một khối 4x4 như sau:
0 3 -1 0
0 -1 1 0
1 0 0 0
0 0 0 0
0, 3, 0, 1, −1, −1, 0, 1, 0. . .
Số lượng hệ số khác 0 : TotalCoeffs = 5 Số lượng hệ số bằng 0 : Total zeros = 3
Số lượng hệ số kết thúc bằng 1 : TrailingOnes = 3 (thực tế cĩ 4 giá trị trailingones nhưng chỉ cĩ 3 giá trị được mã hĩa như trường hợp đặc biệt).
Quá trình mã hĩa.
Thành phần Giá trị Mã
coeff token TotalCoeffs = 5, 0000100 TrailingOne sign
(4) TrailingOnes= 3 (useTable 1) 0 TrailingOne sign
(3) + 1
TrailingOne sign
(2) - 1
Level (1) - 1 (prefix)
Level (0) +1 (use suffixLength = 0) 001 (prefix) 0 (suffix) Total zeros +3 (use suffixLength = 1) 111
run before(4) ZerosLeft = 3; run before=1 10
run before(2) ZerosLeft = 2; run before
=0 1
run before(1) ZerosLeft = 2; run before=1 01
run before(0) ZerosLeft = 1; run before =1 Hệ số cuối cùng, khơng cần mã hĩa. Chuỗi bit phát là 000010001110010111101101. Quá trình giải mã 1 Thành phần Giá trị Mảng ngõ ra
0000100 coeff token TotalCoeffs = 5, TrailingOnes = 3 Empty
0 TrailingOne sign + 1
1 TrailingOne sign - -1, 1
1 TrailingOne sign - -1, -1, 1
1 Level +1 (suffixLength = 0; tăng chiềudài tiền tố sau khi giải mã 1, −1,−1, 1
0010 Level +3 (suffixLength = 1) 3, 1, −1,−1, 0, 1 111 total zeros 3 3, 1, −1,−1, 1 10 run before 1 3, 1, −1,−1, 0, 1 1 run before 0 3, 1, −1,−1, 0, 1 1 run before 0 3, 1, −1,−1, 0, 1 01 run before 1 3, 0, 1, −1,−1, 0, 1
Bộ giải mã đã chèn thêm 2 số 0, Totalzeros =3, và vì thế 1 số 0 được chèn vào trước hệ số thấp nhất, mảng ngõ ra như sau:
0, 3, 0, 1, −1,−1, 0, 1
IV.3.4.3 Mã hĩa số học nhị phân thích nghi nội dung CABAC
Nguyên tắc của mã hĩa số học là một dữ liệu được mã hĩa bằng một từ đơn, nĩ nằm trong phạm vị [0 1] thay vì phải thiết kế một bảng mã, mã hĩa số học nhị phân thích nghi CABAC cho phép ấn định số bit khơng nguyên/symbol, thích nghi các thống kê symbol động trong phạm vi [0 1] này. Xác suất cho mỗi thành phần được dự đốn theo nội dung để điều khiển bộ mã hĩa số học. So sánh với CAVLC, thì CABAC thường cho giảm tốc độ bit khoảng 10-15% khi mã hĩa cùng một tín hiệu truyền hình.
Bộ mã hĩa CABAC gồm cĩ 3 bước chính: kiểu nội dung, nhị phân hĩa và mã hĩa số nhị phân.
+ Biến đổi nhị phân: CABAC sử dụng kiểu mã hĩa số học nhị phân cĩ nghĩa là chỉ cĩ số nhị phân mới được mã hĩa, những ký hiệu khơng phải là ký hiệu nhị phân sẽ được “nhị phân hĩa” hoặc chuyển đổi thành mã nhị phân trước khi mã hĩa số học.
+ Lựa chọn kiểu nội dung: kiểu nội dung là kiểu xác suất cho nhiều ký tự nhị phân được chọn phù hợp với tính thống kê của các ký hiệu dữ liệu được mã hĩa, tức là nĩ sẽ lưu xác suất của từng ký hiệu 0 & 1.
+ Mã hĩa số học: bộ mã hĩa số học sẽ mã hĩa từng ký hiệu nhị phân theo xác suất đã chọn.
+ Cập nhật xác suất: kiểu nội dung được chọn sẽ được cập nhật dựa vào giá trị mã hĩa hiện tại, cĩ nghĩa là nếu giá trị nhị phân là 1 thì tần số đếm của 1 sẽ tăng lên 1 đơn vị
Quá trình mã hĩa:
Giả sử ta cĩ một khối được mã hĩa chế độ Inter và cĩ vector chuyển động Mvd của một hướng bất kỳ nào đĩ. Đầu tiên, sẽ tiến hành nhị phân hĩa giá trị Mvd, Mvd sẽ được ánh xạ vào bảng mã như sau:
|Mvdx| Nhị phân 0 0 1 10s 2 110s 3 1110s 4 11110s 5 111110s 6 1111110s 7 11111110s 8 111111110s
Bit đầu tiên của bảng từ mã nhị phân gọi là bin 1, bit thứ 2 gọi là bin 2…Chọn kiểu nội dung cho từng bin. Đối với bin 1 sẽ cĩ 3 kiểu nội dung như bảng, dựa vào giá trị Mvd của 2 khối đã mã hĩa trước đĩ là giá trị ek.
ek Kiểu nội dung 0 3 ≤ ≤ek Kiểu 0 3 3 ≤ ≤ek 3 Kiểu 1 33 k e ≤ Kiểu 2
ek = |mvdxA| + |mvdxB| trong đĩ A và B là 2 khối nằm bên trên và bên trái của khối hiện tại. Các hệ số bin cịn lại sẽ chọn một trong 4 kiểu nội dung sau: