4.4.1 Dự đoán Inter
Dự đoán Inter hay dự đoán bù chuyển động (Motion Compensated Prediction) là dạng dự đoán được sử dụng thông dụng trong H.264.
Dự đoán Inter giả định rằng dữ liệu các điểm ảnh của ảnh 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à phần dư 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
88 vùng đ ược c họn frame tham c hiếu vùng tì m kiếm frame hiện tạ i macro block hiện tạ i
Hình 4-15: Mô tả ƣớc lƣợng chuyển động trong dự đoán Inter
Vùng ảnh được chọn sẽ trở thành block dự đoán cho block MxN – block đang cần được mã hóa. Phần sai khác 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 đi cho bộ giải né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 vectơ chuyển động và nội suy các vị trí sub-sample.
4.4.1.1 Quản lý ảnh tham chiếu
Mỗi bộ nén và bộ giải nén quản lý danh sách 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ể xuất hiện trước hoặc sau ảnh hiện tại theo thứ tự hiển thị. Có 2 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): là ảnh nén được tái xây dựng trong bộ nén. Ảnh được xác định bởi số thứ tự khung hì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.
89
Các ảnh ngắn hạn được lưu trong bộ nhớ ảnh tham chiếu theo thứ tự giảm 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 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 memory 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 Nén ảnh 251 Nén ảnh 252 Nén ảnh 253 Gán 251 đến LongTermPicNum 0 Nén ảnh 254 Gán 253 đến LongTermPicNum 4 Nén ảnh 255 Gán 255 đến LongTermPicNum 3 Nén ảnh 256 - 250 251 252 253 253 254 254 255 254 256 - - 250 251 252 252 253 252 254 252 254 - - - 250 251 250 252 250 252 0 0 - - - - 250 0 250 0 0 3 3 - - - - - - 0 4 4 4 4
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 4.4.1.2 Bù chuyển động theo cấu trúc cây
Thành phần luma của mỗi macroblock (các mẫu 16x16) có thể được chia theo 4 cách thành các macroblock partition (như hình sau) và bù chuyển động được thực hiện hoặc cho một phần 16x16, hai phần 8x16 hoặc cho hai phần 16x8 hoặc cho bốn phần 8x8. Các maroblock partition có kích thước 8x8 có thể được chia thành 4 phần
90 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 4-16: Các dạng phân hoạch macroblock
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, phân hoạch ả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, 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.
Hình 4-17: Phần sai khác (chƣa bù chuyển động) xác định cách phân hoạch ả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 hoạch của thành phần chroma từ các phân hoạch 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
91 phần với tỷ lệ giống với thành phần luma, ngoại trừ kích thước phân hoạch bằng ½ so với các block của thành phần luma.
Chẳng hạn, phân hoạch 8x16 trong luma tương ứng với phân hoạch 4x8 trong phần chroma. Các giá trị (x, y) của các vectơ 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.
4.4.1.3 Vectơ 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. Vectơ 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 2 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 4-18a mô tả block 4x4 (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 vectơ chuyển động là số nguyên, các vị trí điểm ảnh thực sự tồn tại (Hình 4-18b). Nếu các giá trị của vectơ 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 4-18c).
a) Block 4x4 trong frame hiện tại b) Block tham chiếu. Vector (1, -1) c) Block tham chiếu. Vector (0.75, -0.5)
92
4.4.1.4 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 4-19) 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 4-19: Nội suy các điểm ảnh tại các vị trí half-pixel trong ảnh tham chiếu
Chẳng hạn, half-pel 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-pel kề với các điểm ảnh có vị trí nguyên đã được tính hết, vị trí half-pel còn lại được tính bằng cách nội suy từ 6 vị trí half-pel đã được tính theo chiều ngang hoặc chiều thẳng đứng so với vị trí half-pel 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.
93 Khi tất cả các vị trí half-pel đượ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 5.20) có thể được suy ra từ các giá trị half-pel này.
Hình 4-20: Nội suy các điểm ảnh tại các vị trí quarter-pel
Vị trí của 1 quarter-pel được suy từ 2 loại pixel: pixel tại vị trí nguyên và half- pel nằm kề với pixel này có thể theo chiều ngang hoặc chiều thẳng đứng. Ví dụ quarter-pel a có thể được nội suy theo công thức:
a = round((G + b) / 2)
Các vị trí quarter-pel còn lại như e, g , p, r được nội suy từ các điểm ảnh half- pel nằm đối diện trên cùng đường chéo so với vị trí này. Chẳng hạn, e được nội suy từ hai điểm ảnh b và h, g được nội suy từ hai điểm ảnh b và m.
4.4.2 Dự đoán Intra
Trong quá trình nén các ảnh, dự đoán 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 trước đó. Khi đó, bộ nén sẽ sử dụng dự đoán Intra cho ảnh này.
Trong dự đoán Intra, block dự đoá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 (như hình sau)
94
Hình 4-21: Quá trình dự đoán 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 cho quá trình nén entropy.
4.4.2.1 Các mode dự đoán cho thành phần luma 4x4 (Intra 4x4)
Hình 4-22 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 4-23) 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 4-22: Block luma 4x4 cần được dự đoán Intra (trong đường viền trắng)
Hình 4-23: Các điểm ảnh được nén dùng để tham chiếu
95 Từ 9 mode dự đoán, 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 4-24: Các mode dự đoán cho block luma 4x4
4.4.2.2 Các mode dự đoán cho block luma 16x16 (Intra 16x16)
Có 4 mode dự đoán đối với Intra 16x16 là vertical, horizontal, 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 góc trên bên trái của marcoblock cần dự đoán. Tất cả các điểm ảnh này đề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.
96
Hình 4-25: Các mode dự đoán Intra 16x16 4.4.2.3 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.
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).
4.4.3 Lọc tách khối (deblocking filter)
Một bộ lọc được sử dụng cho mỗi macroblock sau khi 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 khi 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 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:
97
Hình 4-26: Thứ tự lọc các cạnh (thứ tự chữ cái a, b, c,…) trong một macroblock
4.4.4 Biến đổi và lƣợng tử hóa
H.264 dùng 3 kiểu biến đổi tùy vào loại dữ liệu sai khác (residual) đượ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 4-27) 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 4-27) 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 4-27). 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 đến 15 được biến đổi (các hệ số DC của macroblock được mã hóa Intra 16x16 sẽ không được gởi vì đã biến đổi trong block -1). Sau đó, 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 đến 25 (lúc này không có các hệ số DC) sẽ được biến đổi.
98
Hình 4-27: Thứ tự truyền dẫn các block sai khác bên trong một macroblock 4.4.4.1 Biến đổi Cosin rời rạc
Biến đổi Cosin rời rạc (DCT – Discrete Cosine Transform) áp dụng cho block X gồm NxN điểm ảnh (thông thường là phần dữ liệu sai khác 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 có thể được thực hiện theo ma trận biến đổi A.
Biến đổi xuôi FDCT (Forward DCT) của block gồm NxN điểm ảnh như sau:
Y = AXAT
Biến đổi DCT ngược (Inverse DCT):
4.4.4.2 Lƣợng tử hóa
Có 2 loại lượng tử: lượng tử vô hướng và lượng tử vectơ. H.264 chỉ sử dụng
lƣợng tử vô hƣớng trong quá trình nén và giải nén video. Một ví dụ đơn giản của
99 Quá trình lượng tử vô hướng có thể làm 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:
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