CHƯƠNG 1 : CƠ SỞ TỔNG QUAN VỀ NÉN VÀ GIẢI NÉN THÀNH PHẦN ẢNH NỘI MPEG VÀ ỨNG DỤNG FPGA 1.1) Tổng quan về nén và giải nén thành phần ảnh nội MPEG 1.1) Vai trò của nén ảnh Nén và giải nén ảnh đóng một vai trò quan trọng trong các hệ thống xử lý multimedia hiện nay. Quá trình nén ảnh cho phép duy trì được chất lượng của ảnh xét về mặt quan sát trực quan, đồng thời làm giảm dung lượng thông tin cần để biểu diễn ảnh. Hiện nay có nhiều phương thức khác nhau được ứng dụng trong việc nén và giải nén ảnh (tĩnh và động). Đối với thành phần ảnh tĩnh, có thể được thực hiện dựa trên các phép chuyển đổi từ dạng biên độ không gian thành dạng biên độ - tần số hoặc kết hợp.
Các phép chuyển đổi này đều dựa trên khả năng cảm nhận tốt hơn của mắt đối với các thành phần tần số thấp và kém nhạy cảm đối với thành phần tần số cao (ví dụ như các điểm nhiễu). Tuy có nhiều kỹ thuật nén ảnh khác nhau, nhưng hiện nay kỹ thuật nén ảnh dựa trên chuyển đổi DCT vẫn là kỹ thuật được áp dụng nhiều nhất trong nhiều hệ thống khác nhau, ví dụ như nén JPEG, MPEG1, 2 ,4,. Sở dĩ như vậy vì kỹ thuật này tương đối đơn giản, dễ thực hiện, yêu cầu mức độ tích hợp linh kiện (trong tổng hợp các hệ cứng) vừa phải, tốc độ thực hiện cao và cho hiệu quả nén tương đối cao.1 cho thấy sơ đồ thực hiện cơ bản của một quá trình mã hóa (nén) ảnh tuần tự dựa trên nền tảng DCT.2 trình bày phương thức mã hóa và giải mã trong MPEG2. Trong đó các thành phần đã gặp trong JPEG là DCT, lượng tử hóa, Huffman và mã - 12 - hóa VLC.
Cấu trúc cơ bản trên có thể chia làm hai thành phần: - Thành phần nén ảnh nội: dựa trên kỹ thuật DCT, lượng tử, mã hóa Huffman - Thành phần nén liên ảnh: dựa trên kỹ thuật bù chuyển động. Đây là một nội dung rất đặc sắc. Tuy nhiên, do khuôn khổ hạn chế của đề tài mà xin không đề cập tới thành phần này.1: Sơ đồ khối quá trình mã hóa (nén) ảnh tuần tự dựa trên DCT - 13 - Hình 1.2: Mã hóa và giải mã MPEG2 1.2) Kỹ thuật nén thành phần ảnh tĩnh trong MPEG 1.1) Phép biến đổi DCT. Đây được coi là thành phần yêu cầu nhiều tài nguyên hệ thống nhất, và thường là nút cổ chai trong quá trình nén hoặc giải nén JPEG.3: Khái lược về các thao tác trên các phần tử của một khối đối với nén và giải nén JPEG.4: DCT biến đổi 64 điểm ảnh thành 64 giá trị tổ hợp của chúng Hình 1.4 cho thấy hình ảnh trực quan cách tính toán giá trị của một số trong ma trận 8x8 được biến đổi DCT.
Phép toán cơ bản biểu diễn DCT: M −1 N −1 c( p) c( q) π (2m + 1) p π (2n + 1) q C pq = ∑∑ XNmn .1) m =0 n =0 4 2M 2N Đối với mã hóa và giải mã JPEG, cũng như ảnh nội MPEG sử dụng khối phần tử cơ bản là khối 8 x 8. Trong phép biểu diễn DCT ở trên, nếu thực hiện tuần tự từng phép toán, thì số lượng phép nhân lên tới 64 x 3 phép nhân, thời gian để thực hiện một phép toán tính ra một phần tử DCT. Phép toán ngược lại với DCT là IDCT. Công thức tính IDCT là: - 16 - M−1 N −1 c( p)c( q) π (2m + 1) p π (2n + 1)q XCpq = ∑∑ XNmn .2) Bộ lượng tử hóa (quantizer): Trong phần này chỉ đề cập tới lượng tử hóa vô hướng mà xin không đề cập tới lượng tử hóa vector vốn nằm ngoài phạm vi thiết kế của đề tài.
Bộ lượng tử hóa thực hiện phép chia mỗi phần tử trong block 64 điểm ảnh cho tương ứng một hệ số trong ma trận lượng tử (8 x 8). Phép toán cơ bản của bộ lượng tử hóa là: Xij Xijquant = (1.3) Qij Các ma trận lượng tử về cơ bản là khác nhau trong các hệ thống JPEG và MPEG. Bộ lượng tử hóa cũng là một hệ thống tiêu thụ khá nhiều tài nguyên. Bộ phận chức năng ngược với bộ lượng tử hóa là bộ giải lượng tử.
Công thức giải lượng tử là: X' ij = Xijquant Qij (1.4) Ý nghĩa của dấu X’ ij là vì giá trị này có sai khác so với giá trị gốc ban R R đầu Xij. Mức độ sai khác phụ thuộc vào thang lượng tử Q ij. R R R R Công thức trên là công thức lượng tử cơ sở. Tuy nhiên, việc ứng dụng công thức này vào thực tế cần quan tâm tới hai vấn đề: - Làm tròn về số nguyên các giá trị thực sau khi đã lượng tử hóa.
Kỹ thuật làm tròn đơn giản và dễ áp dụng là cắt bỏ phần thập phân. - Giải quyết các giá trị lượng tử có giá trị gần với 0 (lượng tử có bão hòa): các giá trị này thường là thể hiện của nhiễu, chúng thường được làm - 17 - tròn về 0. Trong thực tế MPEG2, sử dụng lượng tử hóa phi tuyến có sử dụng vùng chết (dead zone).5: So sánh lượng tử hóa tuyến tính và lượng tử hóa phi tuyến với vùng chết (dead zone). Tuy nhiên, có thể cải thiện hơn hiệu năng của lượng tử với hệ số lượng tử thay đổi theo độ lớn của dữ liệu (lượng tử hóa thích ứng), như trình bày trên hình 1.6: Lượng tử hóa thích ứng theo phân bố Gauss.
Trong nén MPEG2, không sử dụng lượng tử hóa thích ứng đối với các giá trị DCT, nhưng có áp dụng kỹ thuật điều chỉnh hệ số lượng tử tuân theo phân bố phi tuyến (hệ số này được áp dụng cho cả block DCT) nhằm thực hiện kỹ thuật điều chỉnh thích ứng để đảm bảo dung lượng nén.3) Bộ chuyển đổi thứ tự quét các phần tử của một block Quá trình DCT thực hiện việc chuyển đổi thành phần ảnh từ dạng biên độ - không gian hai chiều sang dạng biên độ - tần số. Các điểm thành phần trong không gian DCT có mối liên hệ nhất định tương ứng với khả năng cảm nhận của mắt người đối với mỗi thành phần tần số. Qua nghiên cứu, người ta nhận thấy rằng, các hệ số DCT có ý nghĩa trong một khối ảnh thường có vị trí nằm xung quanh hệ số DCT(0,0). Các hệ số DCT khác 0 thường tập trung xung quanh hệ số DC và phân bố xác suất xuất hiện các hệ số khác 0 này hầu như đối xứng theo hướng ngang và hướng dọc.5 biểu diễn phân bố xác suất xuất hiện các hệ số DCT khác 0.7: Phân bố xác suất các hệ số 8 x 8 DCT (frame) Đó là phân bố trong một frame.
Tuy nhiên, đối với 1 field, có sự khác biệt (Vì field có thành phần cao tần mạnh hơn theo trục dọc) Hình 1.8: Phân bố xác suất các hệ số 8 x 8 DCT (field) Để thực hiện sắp xếp chuỗi các giá trị sau DCT sao cho các giá trị 0 nằm thành một chuỗi dài, cần thực hiện một kỹ thuật quét khác với quét điểm ảnh thông thường, ví dụ như kỹ thuật quét zigzag trong hình dưới đây: - 20 - Hình 1.9: Quét zigzag Công thức cơ sở của phép quét zigzag là: Xi , j = Xk ,l =index (i , j ) (1.5) Phép chuyển đổi trên phải đảm bảo tính chất ánh xạ 1-1 Quá trình sử dụng trong giải nén JPEG là quá trình ngược chuyển từ dạng zigzag sang dạng bình thường.4) Bộ mã hóa Runlength (RLE) Nguyên lý cơ bản của thành phần này là dựa trên xác suất xuất hiện nhiều và tạo thành chuỗi dài các giá trị 0 trong giá trị ra sau quá trình mã hóa DCT và quét zigzag. Thay vì biểu diễn toàn bộ từng giá trị 0 trong chuỗi 0 này, chỉ cần mã hóa dưới dạng N ‘0’, và vì trong JPEG chỉ cần rút gọn cho giá trị 0 nên cũng có thể biểu diễn N cũng đủ biết có N số 0 đi liền nhau. Ví dụ: 0 4 0 0 0 0 0 6 có thể mã hóa thành (1,4) (5,6).5) Mã hóa Huffman Nguyên tắc cơ bản của mã hóa Huffman là dựa trên phân bố xác suất khác nhau của các ký tự mã khác nhau. Các ký tự có phân bố xác suất cao được biểu diễn bằng các từ mã ngắn và ngược lại, các ký tự có phân bố xác suất thấp được biểu diễn bằng các từ mã dài.
Như vậy, các từ mã huffman có độ dài khác nhau. Để đảm bảo bộ giải mã có thể nhận dạng đúng các từ mã (với độ dài khác nhau), các từ mã Huffman phải có tính chất prefix (tức là các từ mã dài hơn không có đoạn đầu trùng với từ mã ngắn hơn).10 cho thấy histogram các hệ số DCT, qua đó thấy được sự tập trung các hệ số xung quanh giá trị DC có xác suất xuất hiện cao hơn nhiều các giá trị khác.10: Histogram các hệ số DCT tính theo giá trị tuyệt đối Hình 1.11 cho thấy xác suất xuất hiện khác nhau của các dãy số không liên tiếp (với số số 0 khác nhau).11: Histogram các runlength 0 Như vậy, sau biến đổi DCT, tính chất phân bố xác suất của các giá trị khác nhau đã thay đổi. Có một số giá trị có xác suất xuất hiện nhiều hơn hẳn, và ngược lại, một số giá trị rất ít khi xuất hiện. Nguyên tắc mã hóa Huffman được thực hiện như sau: xây dựng một cây nhị phân dựa trên xác suất xuất hiện của mỗ ký tự.
Các ký tự đều phải nằm ở lá của cây nhị phân này, và các ký tự có xác suất xuất hiện cao hơn sẽ có độ cao nhỏ hơn (nghĩa là càng nằm gần gốc hơn). Các nhánh bên trái trong cây sẽ tương ứng với nhị phân 0 và các nhánh bên phải tương ứng với nhị phân 1. Mã hóa huffman được thực hiện theo hướng đi từ là tới gốc. Các bước của quá trình mã hóa Huffman như sau: (1) Bắt đầu với số lá được xác định bằng số ký tự trong bảng mã hóa.
(3) Nếu vẫn còn một nút trong hàng đợi đầu tiên: (a) Loại bỏ hai nút có trọng lượng (xác suất) thấp nhất trong hàng đợi. - 23 - (b) Tạo một nút trong, với hai nút con chính là hai nút vừa loại bỏ và tính trọng lượng tổng của hai nút con, gán cho nút trong vừa tạo thành. (c) Cập nhật các liên kết ở tầng trên đối với hai nút trên (d) Các nút tổng vừa tạo thành được xếp vào hàng đợi thứ hai. Quá trình lặp lại từ bước (a).