Lọc tách khối (deblocking filter)

Một phần của tài liệu xây dựng engine giải mã video h.264 trên hệ thống nhúng (Trang 96 - 101)

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 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ỏ.

100

Hình 4-28: Minh họa biến đổi DCT và lƣợng tử hóa

4.4.4.3 Quá trình biến đổi lƣợng tử với các block sai khác 4x4 Biến đổi:

 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 sai khác (được đánh dấu là các block từ 0-15 và 18-25 trong Hình 4-27) 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 nhưng có một vài khác biệt chủ yếu sau:

o 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, nên không làm mất sự chính xác khi giải nén.

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

o 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: Block 8x8 ban

đầu

Block 8x8 ban đầu

Biến đổi DCT

Các hệ số biến đổi DCT

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

Lượng tử hóa với bước lượng tử 12

Các giá trị đã lượng tử được ‘rescaled’ tại bộ giải nén

101 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 (4.2) trở thành :

Để đơ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 :

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

Công thức (4.4) tương đương với công thức (4.2) 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.

Với

(4.2)

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)

( )

(4.3)

:

- d = c/ b ~0. 414

Một phần của tài liệu xây dựng engine giải mã video h.264 trên hệ thống nhúng (Trang 96 - 101)

Tải bản đầy đủ (PDF)

(101 trang)