Nén ảnh JPEG bao gồm nhiều công đoạn, sơ đồ thuật toán nén và giải nén được mô tả như dưới đây:
Hình 2.5: Quá trình nén ảnh theo chuẩn JPEG.
Quá trình giải nén sẽ được thực hiện ngược lại, người ta dựa vào các thông tin liên quan ghi trong phần Header của file nén để giải mã từng phần ảnh nén ứng với phương
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ B B N M l N k M B * ' '
pháp nén. Kết quả thu được là hệ số đã lượng tử.
Căn cứ vào bảng lượng tử sẽ khôi phục lại giá trị trước khi lượng tử hoá của các hệ số này. Cuối cùng là biến đổi Cosin ngược để thu lại được ảnh như ban đầu.
Hình 2.6. Quá trình giải nén ảnh theo chuẩn JPEG.
* Chia ảnh thành khối
Chuẩn nén JPEG phân ảnh ra các khối 8x8. Biến đổi nhanh Cosin 2 chiều cho các khối 8x8 sẽ đạt hiệu quả hơn, việc biến đổi Cosin cho các khối có cùng kích cỡ có thể giảm được một phần các tính toán chung như việc tính hệ số Cij. Khi n = 8 chúng ta chỉ cần tính hệ số Cij cho 3 tầng (8 = 23),
số các hệ số là: 4 + 2 + 1 = 7
Nếu với một ảnh 512x512, phép biến đổi Cosin nhanh theo hàng ngang hoặc hàng dọc ta phải cần qua 9 tầng (512 = 29). Số các hệ số Cij là: 256 + 128 + 64 + 32 + 16 + 8
+ 4 + 2 +1 =509. Như vậy thời gian tính các hệ số Cij cho ảnh 512x512 lớn gấp 72 lần
so với thời gian tính toán các hệ số này cho từng khối 8x8, nếu kích thước ảnh lớn hơn thì chi phí thời gian sẽ còn tăng gấp nhiều lần đồng thời còn giúp việc tính toán trong khi biến đổi Cosin chính xác hơn.
Ảnh sẽ chia làm B khối với:
Các khối được xác định bởi bộ số (m,n) với m = [0..MB-1] và n=[0..NB-1]. Trong đó: m: thứ tự của khối theo chiều rộng. n: thứ tự của khối theo chiều dài.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Phân khối thực chất là xác định tương quan giữa toạ độ riêng trong khối với tạo độ thực của điểm ảnh trong ảnh ban đầu. Nếu ảnh ban đầu ký hiệu Image[i,j] thì ma trận biểu diễn khối (m,n) là x[u,v] được tính: x[u,v] = Image[mk + u, nl + v].
* Biến đổi
Đây là công đoạn quan trọng của các phương pháp nén sử dụng phép biến đổi, nhiệm vụ của công đoạn này là tập trung năng lượng vào một số ít các hệ số biến đổi. Trước khi vào phần chính của phương pháp biến đổi em xin trình bày phần biến đổi Cosin rời rạc (DCT) như sau:
Biến đổi Cosin rời rạc (DCT) thuận và ngược một chiều gồm N mẫu được định nghĩa như sau:
Cả DCT và IDCT đều là biến đổi trực giao, tách biệt và thực. Tính chất phân tách
(separable) ở đây nghĩa là biến đổi nhiều chiều của nó có thể phân tách thành các biến
đổi một chiều. Tính chất trực giao ở đây nghĩa là nếu các ma trận của DCT và IDCT là không bất thường (non-singular) và thực thì biến đổi ngược của chúng có thể đạt được bằng cách áp dụng toán tử hoán vị. Cũng như biến đổi FT, DCT cũng coi dữ liệu đầu vào là tín hiệu ổn định (bất biến).
Trong các chuẩn nén ảnh tĩnh vào video, người ta thường sử dụng DCT và IDCT có kích thước 8 mẫu. Bức ảnh hoặc khung ảnh video kích thước NxN được chia thành các khối không chồng chéo nhau hai chiều gọi là các ảnh con kích thước 8x8 rồi áp dụng biến đổi DCT hai chiều ở bộ mã hoá và áp dụng biến đổi IDCT ở bộ giải mã.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Thuật toán để tính 2-D DCT và IDCT là: thực hiện phép biến đổi 1-D lần lượt cho hàng rồi đến cột của ma trận.
Như vậy ở mỗi khối ảnh hai chiều kích thước 8x8, áp dụng biến đổi DCT để tạo ra mảng hai chiều các hệ số biến đổi. Hệ số có tương ứng với tần số không gian thấp nhất nhưng lại có giá trị lớn nhất được gọi là hệ số DC (một chiều), nó tỉ lệ với độ chói trung bình của cả khối ảnh 8x8. Các hệ số còn lại gọi là các hệ số AC (xoay chiều). Theo lý thuyết, biến đổi DCT không đem lại sự mất mát thông tin ảnh, mà đơn giản nó chỉ chuyển thông tin ảnh sang miền không gian mới thuật lợi hơn cho mã hoá ở bước tiếp theo.
* Lượng tử hóa
Khối lượng tử hoá trong sơ đồ nén đóng vai trò quan trọng và quyết định tỷ lệ nén của chuẩn nén JPEG. Đầu vào của khối lượng tử hoá là các ma trận hệ số biến đổi Cosin của các khối điểm ảnh. Như ta đã biết ảnh được chia làm nhiều khối, ứng mỗi khối là các hệ số xác định. Trước khi thực hiện bước lượng tử hoá ta có thể loại bỏ vài hệ số. Ngoài hệ số (0,0) (được coi là thành phần DC) biểu diễn mức sáng trung bình của một khối ta có thể loại một số hệ số khác trong khối mang thông tin chi tiết về ảnh. Ta có thể bắt đầu loại bỏ từ hệ số có độ lệch chuẩn thấp nhất. Việc nên giữ lại bao nhiêu hệ số còn tuỳ thuộc vào việc ta muốn tỷ lệ nén cao hay thấp và những yêu cầu về chất lượng của ảnh nén.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ n yj j ) 1 ( ) ( 2 2 n n y y n j j j
khoảng phân bố. Chuẩn nén JPEG chỉ sử dụng một bộ lượng tử hoá. Giả sử rằng các hệ số đều có hàm tính xác suất xuất hiện như nhau. Ta sẽ căn chỉnh lại hệ số yj bằng phép gán:
Với: μj là trung bình cộng của hệ số thứ j ; j là độ lệch cơ bản của hệ số thứ j
Như vậy chúng ta sẽ đồng nhất được mức quyết định và mức tạo lại cho tất cả các hệ số. Do đó, các hệ số sẽ được biểu diễn bằng cùng một số lượng bit. Có nhiều cách tiếp cận để tính được các mức quyết và mức tạo lại. Lloyd – Max đưa ra giải thuật sau:
Bước 1: Chọn giá trị khởi tạo: d0 = yL ; dn = yH ; r0 = d0 ; N là số mức lượng tử
Bước 2: Cho i biến thiên từ 1 đến N-1 thực hiện các công việc sau:
i i i i d d d d i dy y p dy y p y r 1 1 ) ( ) ( .
Bước 3: Nếu rN-1 ≠ r‟ điều chỉnh lại r0 và lặp lại từ bước 2 đến bước 3
Trong quá trình cài đặt thủ tục tạo ra bộ lượng tử hoá, Lloyd và Max đã có nhiều cải tiến để tính toán dễ dàng hơn.
Sau đây là các bước mô tả toàn bộ công việc của khối lượng tử hoá tác động lên các hệ số biến đổi Cosin:
Bước 1: Tính trung bình cộng μ và độ lệch cơ bản σ cho từng hệ số ở mỗi
vị trí trong khối:
Bước 2: Lựa chọn tỷ lệ hệ số giữ lại trong mỗi khối.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ ij ij ij ij C C Bước 4: Lập ma trận khu vực T
Tn = 1 nếu hệ số (i,j) được giữ lại Tn = 0 ngược lại
Bước 5: Căn chỉnh lại giá trị của các hệ số xoay chiều được giữ lại ở các
khối:
Bước 6: Tính phân bố của các giá trị xoay chiều đã căn chỉnh.
Bước 7: Tính độ lệch cơ bản σs của các phân bố vừa tính.
Bước 8: Lượng tử hoá các hệ số xoay chiều bằng cách sử dụng bộ lượng
tử Lloyd – Max sau khi đã điều chỉnh mức quyết định và mức tạo lại của nó theo cách sau:
di di x σs ri ri x σs dN = - d0
Thành phần một chiều sẽ không lượng tử hoá (phần tử (0,0) của khối 8x8 được coi là thành phần một chiều, 63 phần tử còn lại được coi là các thành phần xoay chiều). Đến đây ta chuyển sang bước nén.
* Nén
Đầu vào của khối nén gồm hai thành phần: thành phần các hệ số xoay chiều và thành phần các hệ số một chiều.
Thành phần các hệ số một chiều Ci(0,0) với i = 0,1,…, 63 chứa phần lớn năng lượng tín hiệu hình ảnh. Người ta không nén trực tiếp các giá trị Ci(0,0) mà xác định độ lệch của Ci(0,0): di = Ci+1(0,0) - Ci(0,0)
di có giá trị nhỏ hơn hiều so với Ci nên trong biểu diễn dấu phẩy động có nhiều chuỗi bít 0 cho hiệu suất nén cao hơn. Giá trị C0(0,0) và các độ lệch di được ghi ra một tệp tạm thời. Tệp này được nén bằng phương pháp nén Huffman.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
tin chi tiết của ảnh. Để nâng cao hiệu quả nén cho mỗi bộ hệ số trong một khối người ta xếp chúng lại theo thứ tự Zig-Zag. Việc sắp xếp này giúp tạo ra nhiều loạt hệ số giống nhau do năng lượng của khối hệ số giảm dần từ góc trên bên trái xuống góc dưới bên phải.
Dưới đây là một minh hoạ về khối Zig-Zag:
Hình 2.7: Hình minh họa về khối Zig-Zag.
Mỗi khối Zig - Zag này được mã hoá theo phương pháp RLE. Cuối mỗi khối đầu ra của RLE, ta đặt dấu kết thúc khối EOB (End Of Block).
Sau đó các khối được dồn lại và lại mã hoá một lần bằng phương pháp mã Huffman. Nhờ có dấu kết thúc khối nên có thể phân biệt hai khối cạnh nhau khi giải mã Huffman. Hai bảng mã Huffman cho hai thành phần hệ số tất nhiên sẽ khác nhau.
Để có thể giải nén được, chúng ta phải ghi lại các thông tin như: kích thước ảnh, kích thước khối, ma trận T, độ lệch tiêu chuẩn, các mức tạo lại, hai bảng mã Huffman, kích thước khối nén một chiều, kích thước khối nén xoay chiều,… và ghi nối tiếp vào hai tệp nén của hai thành phần hệ số.
Cài đặt giải thuật cho nén JPEG thực sự phức tạp, chúng ta phải nắm được các kiến thức về nén RLE, Huffman, biến đổi Cosin, xây dựng bộ lượng tử hoá Lloyd – Max, … Tuy nén và giải nén JPEG hơi chậm nhưng bù lại cho kích thước tệp nén nhỏ.