DCT Discrete Cosine Transform Biến đổi Cosine rời rạc FDCT Forward Discrete Cosine Transform Biến đổi DCT thuận IDCT Inverse Discrete Cosine Transform Biến đổi DCT ngược KLT Kahurme Loev
Trang 1- -
HÀ NỘI – 2012
LUẬN VĂN THẠC SĨ K Ỹ THUẬ T
ĐIỆN TỬ VIỄN THÔNG
PHÓ MẠNH CƯỜNG
Trang 2PHÓ MẠNH CƯỜNG
- -
Chuyên ngành: Điện tử Viễ thông n
NGƯ I HƯ Ờ ỚNG DẪ N KHOA H C Ọ
TS NGUYỄN VŨ THẮNG LUẬN VĂN THẠC SĨ K Ỹ THUẬ T
ĐIỆN TỬ VIỄN THÔNG
Trang 3Mục lục
Mục lục i
Danh mục các bảng iv
Danh mục hình vẽ iv
THU T NG VIẬ Ữ ẾT TẮT vi
LỜI NÓI ĐẦU 1
TÓM T T LUẮ ẬN VĂN 3
CHƯƠNG I TỔNG QUAN V Ề KĨ THUẬT NÉN NHẢ 1
1.1 Giới thiệu chung v nén nh 1 ề ả 1.2 S c n thi t ph i nén d li u nh 1 ự ầ ế ả ữ ệ ả 1.3.Phân loại kĩ thuật nén nh 2 ả 1.3.1 Nén có t n hao và nén không có tổ ổn hao 3
1.3.2 Mã hóa d ự đoán 4
1.3.3 Mã hóa chuyển đổi 4
1.3.4 Mã hóa băng con 5
1.4 Các ch ỉ tiêu đánh giá chất lượng nh 7 ả CHƯƠNG II CÔNG NGHỆ NÉN NH JPEGẢ 9
2.1 Giới thiệu v ề JPEG 9
2.1.1 Gi i thi u chung v JPEG 9 ớ ệ ề 2.1.2 Các phương thức mã hóa 10
2.1.2.1 Mã tu n t 10 ầ ự 2.1.2.1 Mã lũy tiến 11
2.1.2.3 Mã phân c p 12 ấ 2.1.2.4 Mã không mất mát thông tin 13
2.1.3 Định d ng File JPEG 13 ạ 2.1.3.1 Quy định Frame header 17
2.1.3.2 C u trúc cấ ủa scan header 18
Trang 42.1.5.Mã Huffman 20 2.1.5.1.Cách s dử ụng tần s 20 ố2.1.5.2 Mã hoá Huffman trong JPEG 31 2.1.5.3 Gi i mã mã Huffman 33 ả2.2 Công ngh nén nh JPEG 36 ệ ả2.2.1.Sơ đồ thu t toán nén nh JPEG 36 ậ ả2.2.2 Phép biến đổi Cosine r i r c DCT 37 ờ ạ2.2.2.1 Biến đổi DCT 1 chiều 37 2.2.2.2 Biến đổi DCT 2 chiều 40 2.2.3 Lượng t hóa và giử ải lượng t hóa 41 ử2.2.4 Sắp xếp zigzag 42 2.2.5 Mã hóa và giải mã 43 CHƯƠNG III THI T K PH N M M NÉN VÀ GI I NÉN NH THEO CHU N Ế Ế Ầ Ề Ả Ả ẨJPEG TU N TẦ Ự 44 3.1 Chức năng và mô hình kiến trúc của phần m m 44 ề3.1.1 Chức năng của phần m m 44 ề3.2 Quá trình th c hi n thi t k ự ệ ế ế phần m m 45 ề3.2.1 Ngôn ng thữ ực hiện thi t k ph n m m 45 ế ế ầ ề3.2.2 Quá trình th c hi n thi t k ph n m m 45 ự ệ ế ế ầ ề3.2.2.1 Mã hóa nh theo chu n JPEG tuả ẩ ần tự 45 3.2.2.1.2 Quá trình mã hóa m t frame 46 ộ3.2.2.1.3 Quá trình mã hóa m t scan 46ộ3.2.2.1.3 Quá trình mã hóa m t resart interval 47 ộ3.2.2.1.3 Quá trình mã hóa m t MCU ( minimum coded unit) 49 ộ3.2.2.2 Gi i mã nh theo chu n JPEG tuả ả ẩ ần tự 50 3.2.2.2.1 Giải mã m t frame 51 ộ3.2.2.2.2 Giải mã m t scan 52 ộ
Trang 53.2.2.2.3 Giải mã m t resart interval 53 ộ 3.2.2.2.4 Giải mã một MCU 54 CHƯƠNG IV CHỨC NĂNG PHẦN M MỀ 55 4.1 Giao di n phệ ần mềm 55 4.1.1 Gi i thi u chớ ệ ức năng phần m m 55 ề 4.1.2 K t qu ế ả chạy phần m m 57 ề 4.1.2.1 Đọ ảc nh d ng bitmap ho c nh jpeg 57 ạ ặ ả
K T LU NẾ Ậ 80 TÀI LIỆU THAM KHẢO 81
Trang 6Danh mục các bảng
Bảng 2.1 Liệt kê marker đơn của JPEG 13
Bảng 2.2 JPEG Markers với Dữ liệu 14
Bảng 2.3 Kích thước và giá trị của những tham số trong Frame header 18
Bảng 2.4 Tham số của scan header 19
Bảng 2.6 Cách sử dụng tần số 20
Bảng 2.7 Mã Morse 21
Bảng 2.8 Mã Huffman của từng kí hiệu 25
Bảng 3.1 Định nghĩa các marker 51
Bảng 4.1 Ảnh sử dụng kiểm tra phần mềm 57
Bảng 4.2 Kịch bản kiểm tra phần mềm 58
Danh mục hình vẽ Hình 1.1 Subband Coding 6
Hình 2.1 Bức ảnh được mã hóa với ba lần quét sử dụng chế độ lũy tiến 12
Hình 2.2 Cấu trúc của file ảnh nén JPEG 16
Hình 2.3 Quy đinh về một frame header 17
Hình 2.4 Quy định cấu trúc của scan header 18
Hình 2 1 Cách dịch chuyển các nút 32
Hình 2.3 Sơ đồ thuật toán nén JPEG 36
Hình 2.5 Hàm Cosine 40
Hình 2.6 Quét Zigzag 43
Hình 3.1 Mô hình kến trúc của phần mềm mã hóa và giả mã ảnh JPEG 44
Hình 3.2 Quá trình nén ảnh jpeg tuần tự 45
Hình 3.3 Quá trình mã hóa một frame 46
Hình 3.4 Quá trình mã hóa một scan 47
Hình 3.5 Quá trình mà hóa một resart interval 48
Hình 3.6 Quá trình mã hóa MCU 49
Trang 7Hình 3.8 Quá trình giải mã một Frame 51
Hình 3.9 Quá trình giải mã một scan 52
Hình 3.10 Quá trình giải mã một resart interval 53
Hình 3.11 Quá trình giải mã một MCU 54
Hình 4.0: Giao diện chính của phần mềm 55
Hình 4.1 Blue Hills Hình 4.2 Sunnet 57
Hình 4.3 Water lilies Hình 4.4 Winter 57
Hình 4.5 Ảnh gốc Blue Hills 59
Hình 4.6 Giao diện của phần mềm khi ta chọn ảnh Blue Hills 59
Hình 4.7 Thủ tục load cấu hình bảng lượng tử cho ảnh Blue Hills 60
Hình 4.8 Kết quả load cấu hình bảng lượng tử cho ảnh Blue Hills 61
Hình 4.9 Kết quả nén ảnh Blue Hills 61
Hình 4.10 Ảnh gốc Sunset 62
Hình 4.11 Kết quả nén ảnh Sunset 62
Hình 4.12 Ảnh gốc Water lilies 63
Hình 4.13 Kết quả nén với ảnh Water Lilies 63
Hình 4.14 Ảnh gốc Winter 64
Hình 4.15 Kết quả mã hóa ảnh Winter 64
Hình 4.16 Ảnh gốc Blue Hills 67
Hình 4.17 Thay đổi độ sáng của ảnh Bule 67
Hình 4.18 Kết quả thay đổi độ sáng của ảnh Blue Hills 68
Hình 4.19 Kết quả nén ảnh Blue với độ sáng lớn hơn ảnh gốc tăng 75 68
Hình 4.20 Kết quả nén với ảnh Blue Hills với độ sáng tăng 150 69
Hình 4.22 Chọn thay đổi toàn bộ hệ số lượng tử của block 71
Hình 4.23 kết quả quá trình thay đổi hệ số lượng tử 71
Hình 4.24 Chọn lưu bảng lượng tử 72
Hình 4.25 Kết quả chạy với hệ số lượng tử cộng thêm 1 72
Hình 4.27 Kết quả nén ảnh Blue Hills với thay đổi ¼ hệ số block lượng tử 75
Trang 8THUẬT NGỮ VIẾT TẮT
JPEG Joint Photographic Experts Group Liên hiệp các nhóm chuyên gia về
hình ảnh
DCT Discrete Cosine Transform Biến đổi Cosine rời rạc
FDCT Forward Discrete Cosine Transform Biến đổi DCT thuận
IDCT Inverse Discrete Cosine Transform Biến đổi DCT ngược
KLT Kahurme Loeve Transform Biến đổi Kahume Loeve
TB Transform Based Coding Mã hóa dựa trên phép biến đổi
DPCM Differential Pulse Code Modulation Điều xung mã vi sai
MSE Mean Square Error Sai số bình phương trung bình RCT Reverse Color Transform Biến đổi màu thuận nghịch
PSNR Peak to Signal to Noise Ratio Tỉ số tín hiệu trên nhiễu đỉnh QEV Quantization Error Variance Phương sai lượng tử
IJG Independent JPEG Group Nhóm nghiên cứu JPEG độc lậpHVS Human Visual System Hệ thống cảm nhận mắt ngườiICT Irreversible Color Transform Biến đổi màu không thuận nghịchCWT Common Control Channel Biến đổi Wavelet liên tục
MRA Multi Resolution Analysis Phân tích đa phân giải
DWT Common Control Physical Channel Biến đổi Wavelet rời rạc
EZW Coded Composite Transport Channel Wavelet cây zero
IDWT Inverse Dicrete Wavelet Transform Biến đổi Wavelet rời rạc ngược
Trang 9LỜI NÓI ĐẦU
Nén ảnh cũng như mã hóa thông tin ảnh là một phần quan trọng trong lĩnh vực xử lý ảnh Nén ảnh mang những đặc tính chung của nén dữ liệu trong máy tính nhưng đồng thời cũng bao hàm những đặc trưng riêng do tính đặc thù của dữ liệu ảnh Vì thế, tìm hiểu về nén dữ liệu ảnh cũng tương tự như khi tìm hiểu về nén dữ liệu thông thường nhưng phải lưu ý thêm những nét cải tiến trong kỹ thuật để tăng tính hiệu quả
Nén ảnh thường được ứng dụng nhiều trong quá trình truyền và lưu trữ thông tin Chúng ta cũng có thể bắt gặp rất nhiều ứng dụng của nén dữ liệu ảnh trong cuộc sống hàng ngày Ứng dụng nén và truyền ảnh thường có trong kỹ thuật truyền hình; thu nhận từ xa bằng vệ tinh; viễn thông trong quân sự thông qua sóng radar, thiết bị phát hiện tàu ngầm; hội nghị truyền hình … Còn vấn đề lưu trữ ảnh được đề cập đến rất nhiều trong việc lưu trữ các tài liệu của kinh tế và giáo dục, lưu trữ những ảnh y tế được chụp bằng các máy chụp X-Quang (CT – Computer Tomography), máy chụp ảnh bằng cộng hưởng từ; các ảnh động; ảnh vệ tinh; bản đồ thời tiết … Ứng dụng của nén dữ liệu còn được nói đến trong quá trình phát triển những thuật toán tối ưu cho quá trình truy nhập dữ liệu bằng cách làm việc với những dữ liệu đã được nén Từ những liệt kê trên, có thể thấy được một phần nào đó về tính quan trọng của nén ảnh nói riêng và nén dữ liệu nói chung
Luận văn “Thiết kế phần mềm mã hóa và giải mã ảnh theo chuẩn JPEG” trình bày những vấn đề căn bản nhất về kĩ thuật nén ảnh theo chuẩn JPEG Phương pháp tối ưu thuật toán biến đổi DCT, IDCT và tối ứu thuật toán mã hóa và giải mã Huffman, Phương pháp tính toán bản lượng tử cho từng ảnh khi thực hiện mã hóa
Việc nghiên cứu công nghệ nén ảnh theo chuẩn JPEG cần có kiến thức sâu rộng và sự đầu tư thoả đáng về thời gian Vì vậy trong khuôn khổ luận văn chắc chắn không tránh
Trang 10khỏi những sai sót cũng như còn nhiều vấn đề chưa được giải quyết thoả đáng Rất mong nhận được sự chỉ bảo của các thầy cô giáo, sự góp ý và phê bình của các bạn
Xin gửi lời biết ơn trân trọng nhất tới TS Nguyễn Vũ Thắng đã tạo mọi điều kiện và tận tình hướng dẫn tôi trong suốt thời gian thực hiện luận văn này
Hà Nội, tháng 3 năm 2012
Học viên
Trang 11TÓM TẮT LUẬN VĂN
Thiết kế phần mềm giải mã ảnh theo chuẩn nén JPEG tuần tự Sử dụng phần mềm đánh giá chất lượng của ảnh trước và sau khi giải nén Luận văn nhằm giải quyết các vấn
đề :
• Nghiên cứu công nghệ nén ảnh JPEG
• Nghiên cứu cấu trúc file ảnh nén theo chuẩn JPEG tuần tự
• Nghiên cứu thuật toán biến đổi DCT và IDCT
• Nghiên cứu thuật toán mã hóa Huffman và giải mã Huffman
• Nghiên cứu sự ảnh hưởng của hệ số lượng tử tới chất lượng của ảnh và tỷ lệ nén
Luận văn trình bày “Thiế kế phần mềm giải mã ảnh theo chuẩn JPEG”.t
Nội dung:
• Chương I: Trình bày tổng quan về các về kĩ thuật nén ảnh, phân loại các kĩ thuật nén ảnh Chương này cũng trình bày về các chỉ tiêu đánh giá chất lượng ảnh
• Chương II: Trình bày tổng quan công nghệ nén ảnh theo chuẩn JPEG, các phương thức mã hóa của chuẩn JPEG và trình bày thuật toán nén
và giải nén trong chuẩn JPEG
• Chương III: Trình bày quá trình thực hiện thiết kế phần mềm mã hóa
và giải mã ảnh theo chuẩn JPEG tuần tự
• Chương IV : Trình chức năng phần mềm đạt được và một số kết quả
mã hóa và giải mã ảnh
Kết luận:
Trang 12CHƯƠNG I TỔNG QUAN VỀ KĨ THUẬT NÉN ẢNH
Trình bày tổng quan về các về kĩ thuật nén ảnh, phân loại các kĩ thuật nén ảnh Chương này cũng trình bày về các chỉ tiêu đánh giá chất lượng ảnh
1.1 Giới thiệu chung về nén ảnh
Nén ảnh cũng như nén dữ liệu có thể được xem là quá trình làm giảm lượng thông tin “dư thừa” trong dữ liệu gốc thông qua việc biến đổi dòng thông tin ảnh thành từ mã Vì vậy, kết quả của quá trình này là lượng thông tin thu được sau nén thường nhỏ hơn dữ liệu gốc rất nhiều Có thể dạng đơn giản nhất và cũng là cách lý tưởng nhất của nén dữ liệu ảnh
là lấy mẫu của những ảnh có dải tần giới hạn, trong đó một số vô hạn các điểm ảnh trên một đơn vị diện tích được giảm xuống còn một mẫu mà không mất mát thông tin (giả sử rằng tồn tại một bộ lọc tần thấp lý tưởng) Nếu tiếp tục như vậy, số lượng các mẫu trên một đơn vị diện tích được giảm một cách vô hạn
Trong thực tế, nén ảnh còn được xem là quá trình giảm độ dư thừa hay mã hóa ảnh gốc Tùy thuộc vào tính chất của dữ liệu ảnh gốc cũng như yêu cầu của người sử dụng mà
áp dụng những phương pháp nén khác nhau Hiện nay đã xuất hiện nhiều phương pháp nén khác nhau và mỗi phương pháp có những ưu nhược điểm khác nhau Khó có thể nói phương pháp nào tốt hơn phương pháp nào nhưng với quá trình nghiên cứu được tiến hành mạnh mẽ như hiện nay, chúng ta có quyền hy vọng trong tương lai sẽ xuất hiện thêm nhiều phương pháp nén hiệu quả hơn nữa
1.2 Sự cần thiết phải nén dữ liệu ảnh
Do dữ liệu ảnh thường có kích thước rất lớn so với dữ liệu văn bản thông thường Nếu mã hóa 8 bit cho mỗi pixel ứng với một giá trị màu nào đó, giả sử tốc độ truyền là 30 frames/s, thì một bức ảnh kích thước 512 x 512 pixels cần phải truyền đi với tốc độ cỡ 180
x 106 bits/s Mà trong thực tế, một ảnh số gốc cần phải đựoc truyền đi với tốc độ từ 105
đến 108 bit/frame hoặc cao hơn Vì thế, trong quá trình sử dụng dữ liệu ảnh để nghiên cứu,
Trang 13xử lý dữ liệu, không thể không nhắc tới tầm quan trọng của mã hóa dữ liệu ảnh, cụ thể là nén dữ liệu ảnh
Nén dữ liệu ảnh nhằm giảm độ dư thừa của thông tin chứa trong ảnh Nén dữ liệu ảnh chính là việc tối thiểu hóa số bit để biểu diễn một ảnh mà không làm sai lệch đáng kể thông tin của ảnh
Ứng dụng của nén dữ liệu ảnh rất rộng rãi, chủ yếu được dùng trong truyền thông và lưu trữ thông tin Các ứng dụng của nén dữ liệu ảnh sử dụng trong truyền thông như các tín hiệu vô tuyến điện, cảm biến điều khiển từ xa thông qua hình ảnh truyền về bằng các vệ tinh, trong liên lạc quân sự bằng các radar, máy bay chiến đấu với mặt đất, hay các hội nghị trực tuyến…Còn trong ứng dụng lưu trữ thông tin ảnh, nén dữ liệu ảnh được dùng cho nghiên cứu, kinh doanh, y tế như các ảnh chụp cộng hưởng từ ( MRI ), chụp cắt lớp (CT), các ảnh chụp X quang, ảnh vệ tinh, ảnh địa hình địa chất (chụp từ vệ tinh xuống Trái đất)… Mỗi ngành khoa học có nghiên cứu, sử dụng các dữ liệu ảnh khác nhau, nhu cầu về các thông tin trên ảnh cần quan tâm để xử lý, nghiên cứu khác nhau, do đặc thù của mỗi ngành, vì thế nén ảnh phải đảm bảo phù hợp với mỗi yêu cầu đó, sao cho có thể biểu diễn được bức ảnh với đầy đủ các thông tin đặc trưng với số lượng bit mã hóa là tối ưu
Như vậy, do sự giới hạn về dung lượng bộ nhớ và dung lượng đường truyền, để đạt tốc
độ cao cần phải có phương pháp mã hóa dữ liệu ảnh thích hợp để quá trình nén và giải nén đạt hiệu quả cao
1.3.Phân loại kĩ thuật nén ảnh
Một tính chất chung nhất của tất cả các ảnh số đó là tương quan giữa các pixel ở cạnh nhau lớn, điều này dẫn đến dư thừa thông tin để biểu diễn ảnh Dư thừa thông tin sẽ làm cho việc mã hoá không tối ưu Do đó công việc cần làm để nén ảnh là phải tìm được các biểu diễn ảnh với tương quan nhỏ nhất để giảm thiểu độ dư thừa thông tin của ảnh Thực tế, có hai kiểu dư thừa thông tin được phân loại như sau:
Trang 14• Dư thừa trong miền không gian: tương quan giữa các giá trị pixel của ảnh, điều này có nghĩa rằng các pixel lân cận của ảnh có giá trị gần giống nhau (trừ những pixel ở giáp đường biên ảnh).
• Dư thừa trong miền tần số: Tương quan giữa các mặt phẳng màu hoặc dải phổ khác nhau
Trọng tâm của các nghiên cứu về nén ảnh là tìm cách giảm số bit cần để biểu diễn ảnh bằng việc loại bỏ dư thừa trong miền không gian và miền tần số càng nhiều càng tốt Các kỹ thuật nén ảnh được phân loại như sau:
1.3.1 Nén có tổn hao và nén không có tổn hao
• Kĩ thuật nén không tổn hao (losses compression): ảnh khôi phục hoàn toàn giống như ảnh gốc Tuy nhiên nén không tổn hao chỉ đạt được hiệu quả nén rất nhỏ Có khá nhiều phương pháp mã hóa dữ liệu ảnh không mất mát thông tin như mã loạt dài (Run Length Encoding), mã Shannon- Fano, mã Huffman, mã Lempel- Ziv, mã dự đoán
• Kĩ thuật nén tổn hao (lossy compression): ảnh khôi phục trong hệ thống nén có tổn hao luôn có sự suy giảm thông tin so với ảnh gốc vì phương pháp nén này
đã loại bỏ thông tin dư thừa không cần thiết Các phương pháp nén dữ liệu ảnh
có mất mát thông tin có thể đạt được hiệu quả nén cao hơn rất nhiều Các phương pháp nén dữ liệu ảnh có mất mát thông tin được sử dụng khi dữ liệu ảnh ban đầu có thể dễ dàng khôi phục lại hay khi sự mất mát thông tin khi nén không làm ảnh hưởng lớn đến nội dung ảnh sau khi nén, thường dựa vào “tâm
lý thị giác” Các phương pháp này dựa vào tính chất của mắt người, chấp nhận một số vặn xoắn trong ảnh khi khôi phục lại Tất nhiên các phương pháp này chỉ
có hiệu quả trong một mức độ vặn xoắn nhất định mà mắt thường không nhận ra đựợc Ví dụ: trong các hội nghị trực tuyến, yêu cầu đặt ra là tốc độ truyền hình ảnh phải nhanh, không yêu cầu quá cao về chất lượng hình ảnh, vì hình ảnh
Trang 15ảnh có mất mát thông tin Một số kĩ thuật nén có mất mát thong tin bao gồm: điều xug mã vi sai DPCM, điều xung mã PCM, lượng tử hóa véc tơ – – –VQ,
mã hóa biến đổi và mã hóa băng con
1.3.2 Mã hóa dự đoán
Nguồn ảnh chứa một lượng thông tin rất lớn, và nguồn ảnh lại chứa đựng sự dư thừa và tính có nhớ : giữa các điểm ảnh lân cận có mối quan hệ tương hỗ với nhau
Mã hóa dự đoán được xây dựng dưa trên nguyên tắc cơ bản sau:
• Lợi dụng mối quan hệ tương hỗ này, từ giá trị các điểm ảnh lân cận,theo một nguyên tắc nào đó có thể tạo nên một giá trị gần giống điểm ảnh hiện tại Giá trị này gọi là giá trị dự báo
• Loại bỏ đi tính có nhớ của nguồn tín hiệu bằng một bộ lọc đặc biệt có đáp ứng đầu ra là hiệu giữa tín hiệu vào và giá trị dự báo của nó
• Thay vì lượng tử hóa trực tiếp các mẫu điểm ảnh, mã hóa dự đoán lượng tử hóa
và mã hóa các sai số dự báo tại đầu ra của bộ lọc
Sai số dự báo là là sự chênh lệch giữa giá trị dự báo và giá trị thực của mẫu hiện hành.Do nguồn sai số dự báo (Error Prediction Source) là nguồn không có nhớ và chứa đựng lượng thông tin thấp, nên số bit cần mã hóa sẽ giảm đi rất nhiều
Kĩ thuật điều chế xung mã vi sai ( DPCM ) là điển hình của phương pháp này
Mã hóa dự đoán đóng một vai trò vô cùng quan trọng trong các chuẩn nén ảnh như: MPEG, JPEG, JBIG… nhằm tạo một hiệu suất nén cao
1.3.3 Mã hóa chuyển đổi
Trong phươnng pháp mã hóa chuyển đổi, tính có nhớ cả nguồn tín hiệu được lọai bỏ đi bằng một phép biến đổi Một khối các điểm ảnh được chuyển sang miền tần số theo ma trận biến đổi phù hợp Phép biến đổi này có tính thuận nghịch, các hệ số hoàn toàn có thể phục hồi thành giá trị tín hiệu ban đầu bằng phép chuyển đổi ngược
Trang 16So với nguồn giá trị thực của điểm ảnh, nguồn các hệ số là không có nhớ Mặt khác, thông tin của nguồn ảnh tập trung phần lớn ở các thành phần tần số thấp, nên trong các khối hệ số, thông tin cũng tập trung tại một số ít các hệ số chuyển đổi Do vậy sẽ giảm được lượng bit nếu mã hóa hệ số này thay cho mã hóa trực tiếp các mẫu
Số lượng bit mã hóa còn có thể giảm hơn nữa nếu lợi dụng đặc điểm của mắt người không nhạy cảm với sai số ở tần số cao.Bởi vậy có thể sử dụng bước lượng tử hóa thô cho các hệ số ứng với tần số cao mà không làm giảm sút chất lượng ảnh khôi phục
Trong mã hóa chuyển đổi điều vô cùng quan trọng là phải chọn được phép biến đổi phù hợp có khả năng giảm tối đa mối quan hệ tương hỗ giữa các điểm ảnh trong cùng một khối.Phép biến đổi tốt nhất cho bình phương sai số của ảnh khôi phục nhỏ nhất là phép biến đổi Karhumen_Loeve (KL) nhưng phép biến đổi này không phù hợp cho nhiều ứng dụng của ảnh số Do vậy trong kĩ thuật nén ảnh thì sử dụng phổ biến phép biến đổi DCT trong chuẩn JPEG và phép biến đổi Wavelet trong chuẩn JPEG 2000
Phương pháp này có hiệu suất nén cao hơn rất nhiều so với phương pháp nén dự đoán bởi vì chính các phép biến đổi (sử dụng các thuộc tính nén năng lượng của mình) đã gói gọn toàn bộ năng lượng bức ảnh chỉ bằng một số ít các hệ số, số lớn các hệ số còn lại ít có
ý nghĩa hơn sẽ bị loại bỏ sau khi lượng tử hoá và như vậy lượng dữ liệu phải truyền nhỏ đi rất nhiều Trong phương pháp mã hoá dự đoán, sai lệch giữa ảnh gốc và ảnh dự đoán vẫn
có ý nghĩa (còn sử dụng ở bước tiếp theo) sau khi lượng tử hoá, chính điều này làm cho phương pháp mã hoá dự đoán có nhiều dữ liệu được truyền đi hơn so với phương pháp mã hoá biến đổi
1.3.4 Mã hóa băng con
Trong các phương pháp nén ảnh trước đây, việc mã hoá thực hiện trong toàn dải tần của ảnh, như vậy sẽ gây dư thừa thông tin khi mã hoá trong miền tần số cao vì ở tần số cao không có nhiều thông tin của ảnh Ý tưởng của phương pháp mã hoá băng con là chia dải tần số của ảnh thành nhiều dải tần con và mã hoá ở mỗi dải tần một số lượng bit khác
Trang 17Với phương pháp này hiệu quả nén sẽ tăng lên và nhiều khối cũng không xuất hiện nữa do không phải phân chia ảnh thành các khối để xử lý Nguyên tắc cơ bản trong quá trình mã hoá ảnh băng con là phân chia ảnh thành nhiều dải tần số thông qua các bộ lọc thông thấp, thông dải và thông cao Các dải tần này gọi là các băng con Sau đó, các băng con này sẽ được lượng tử và mã hoá độc lập nhau, tuỳ thuộc vào tính chất thống kê và mật độ năng lượng của từng dải mà số bit mã hoá khác nhau
Hình 1.1 Subband Coding
a,Băng lọc phân tích b,Hai bộ lọc thông thấp và thông cao
c,Phân vùng trong miền tần số d,Băng lọc tổng hợp
Trang 18Minh họa trên hình 2.1a Gọi L và H tương ứng là các bộ lọc thông thấp và thông cao một chiều.Tần số 2 chiều của ảnh được tách ra từng chiều theo trục w1 và w2.Hình 2.1c mô tả băng lọc được phân thành 4 vùng tần số LL, LH, HL và HH Vùng trung tâm (LL) là vùng có tần số thấp theo cả hai hướng Bốn góc (HH) là vùng có các thành phần tần số cao theo cả hai hướng Bốn vùng bên cạnh (HL, LH) là các vùng có tần số thấp và tần số cao, mỗi thành phần đi theo một hướng Chú ý đến các hệ số 2 trong hình vẽ 2.1a,
đó là thành phần giảm mẫu, nó có nhiệm vụ kéo dãn băng tần của từng băng con để bằng với băng tần của ảnh gốc nhưng với tốc độ lấy mẫu thấp hơn Các vùng tần số gọi là các băng con sẽ được lượng tử hoá và mã hoá giống như với biến đổi DCT Sau khi lượng tử,
mã hoá, lưu trữ, truyền và giải mã ảnh, mỗi băng con sẽ được tăng mẫu với hệ số 2 (hình 2.1d) và thông qua các bộ lọc để loại bỏ các thành phần chồng phổ (alias) của tín hiệu sinh
ra do các bộ tăng mẫu Tất cả các băng này sau đó được cộng lại để khôi phục lại ảnh ban đầu
1.4 Các chỉ tiêu đánh giá chất lượng ảnh
Để đánh giá chất lượng của bức ảnh (hay khung ảnh video) ở đầu ra của bộ mã hoá, người ta thường sử dụng hai tham số: Sai số bình phương trung bình MSE (Mean Squared Error) và tỉ số tín hiệu trên nhiễu đỉnh PSNR (Peak to Signal to Noise Ratio) MSE thường được gọi là phương sai lượng tử σ2 (Quantization Error Variance) MSE giữa ảnh gốc và ảnh khôi phục được tính như sau:
,
2 1 (f[j,k] g[j,k])N
MSE
k j
=σ
Trong đó tổng lấy theo j, k tính cho tổng tất cả các điểm ảnh trong ảnh và N là số điểm ảnh trong ảnh Còn PSNR giữa hai ảnh ( bít cho mỗi điểm ảnh, b RMSE là căn bậc 2 của MSE) đước tính theo công thức dB như sau:
Trang 19( )=−20log(2b−1)
RMSE dB
PSNR
Thông thường, nếu PSNR ≥ 40dB thì hệ thống mắt người gần như không phân biệt được giữa ảnh gốc và ảnh khôi phục
Trang 20CHƯƠNG II CÔNG NGHỆ NÉN ẢNH JPEG
Trình bày tổng quan công nghệ nén ảnh theo chuẩn JPEG, các phương thức mã hóa của chuẩn JPEG và trình bày thuật toán nén và giải nén trong chuẩn JPEG
2.1 Giới thiệu về JPEG
2.1.1 Giới thiệu chung về JPEG
JPEG (Joint Photographic Experts Group) định nghĩa bởi tiêu chuẩn ISO 109181 File ảnh JPEG có các phần mở rộng sau:
Kiểu MIME: image/jpe
JPEG là một chuẩn được sử dụng phổ biến nhất hiện nay để nén ảnh Bản thân chuẩn JPEG chỉ để định nghĩa cách thức làm thế nào để một bức ảnh có thể được biến đổi thành khối các byte chứ không phải để mô tả cách thức các byte này được gói và lưu trữ trên các thiết bị lưu trữ Một chuẩn mới được tạo bởi Nhóm nghiên cứu JPEG độc lập (Independent JPEG Group) có tên là JFIF (JPEG File Interchange Format) thì định nghĩa làm thế nào để tạo ra các file có thể tương thích với và phù hợp với thành phần lữu trữ và truyền nhận trên máy tính (ví dụ thông qua mạng) Thông thường, khi người ta gọi JPEG file thì gần như có nghĩa đây là JFIF file.Tuy nhiên hiện nay có một vài định dạng dựa trên chuẩn JPEG khác ví dụ như JNG, TIFF đều chứa kiểu dữ liệu JPEG
JPEG/JFIF là một định dạng thường được sử dụng để lưu trữ và truyền nhận hình ảnh tĩnh trên mạng máy tính.Tuy rằng JPEG không thực sự phù hợp với những ảnh có các đường nét hoặc các hình có dạng chữ hoặc biểu tượng (textual và inconic) bởi vì phương
Trang 21thức nén của JPEG không dành cho các loại ảnh này (ảnh PNG và GIF thì được sử dụng phổ biến hơn với các dạng ảnh trên GIF chỉ sử dụng 8bit với mỗi pixel và không phù hợp với ảnh màu, PNG thì thường sử dụng với các dạng lưu trữ ảnh không mất mát và lại không thích hợp khi lưu trữ trên web vì kích thước ảnh đôi khi khá lớn)
Ưu điểm nổi bật của định dạng JPEG là nó cho phép một khả năng nén rất đáng nể với bất cứ một dạng ảnh bitmap nào Một tấm hình có dung lượng 1MB được lưu trữ dưới định dạng BMPcó thể được nén thành định dạng JPEG với chỉ 50K kích thước mà chất lượng ảnh gần như không đổi Một điểm tuyệt vời nữa của JPEG là nó phù hợp và hầu hết các ứng dụng đều có thể mở được nó Các phương thức nén JPEG đa phần đều có mất mát thông tin, nên nó không phù hợp với các định dạng lưu trữ trung gian khi bạn đang trong quá trình sửa ảnh
2.1.2 Các phương thức mã hóa
Chuẩn JPEG bao gồm 4 chế độ nén (mã hóa):
o Mã tuần tự - Sequential DCT
o Mã lũy tiến – Progressive DCT
o Mã không mất mát thông tin – Sequential Lossless
o Mã phân cấp (Hierarchical progressive)
Bảng dưới đây thể hiện mối quan hệ giữa các chế độ nén này với quá trình mã hóa Trong khi chúng có những điểm chung thì ở hầu hết các phần thì các chế độ này được thực thi với các công nghệ thực sự khác nhau
2.1.2.1 Mã tuần tự
Mã tuần tự là một chế độ nén JPEG đơn giản Như cái tên của nó đã thể hiện, ảnh với sequential-mode được mã hóa từ trên xuống dưới Chế độ tuần tự này hỗ trợ lấy mẫu với độ chính xác từ 8 đến 12 bit
Ở ảnh được nén với chế độ tuần tự, mỗi thành phần màu được mã hóa hoàn toàn dựa trên sự quét đơn (single scan) một khối (block) của dữ liệu nén sẽ chứa một dòng –
Trang 22quét ngang của ảnh Ở hầu hết các định dạng, toàn bộ dữ liệu nén theo pixel được lưu trữ trong một vùng liên tục ở trong file Với file JPEG, mỗi dòng ngang của ảnh sẽ được lưu ở trong một khối dữ liệu riêng biệt được gọi là scan
Với chế độ tuần tự này, hai quá trình nén entropy xen kẽ được định nghĩa bởi chuẩn JPEG như sau: một quá trình sẽ sử dụng mã hóa Huffman, và quá trình còn lại sẽ sử dụng
tử hóa hơn với ảnh được mã hóa tuần tự mở rộng
2.1.2.1 Mã lũy tiến
Trong ảnh JPEG sử dụng chế độ lũy tiến các thành phần màu được mã hóa bằng cách thức quét nhiều lần Dữ liệu nén với mỗi màu được đặt trong 2 đến 896 dòng quét mặc dù số dòng thực sự chỉ nằm ở phía dưới khoảng này mà thôi Những lần quét ban đầu tạo ra một phiên bản thô của ảnh trong khi các lần quét tiếp theo làm mịn ảnh Nhứng bức ảnh với chế độ lũy tiến được sử dụng để hiển thị như chúng được giải mã Điều này thực
sự hữu ích khi những bức ảnh đang được download qua mạng hoặc được sử dụng trong các trình duyệt web bởi vì chế độ này cho phép người sử dụng có thể nắm bắt được cơ bản nội dung của bức ảnh chỉ sau một chút dữ liệu được truyền về Hình 2.1 thể hiện bức ảnh được mã hóa với 4 lần quét sử dụng chế độ lũy tiến Mọi người có thể thấy sau mỗi lần quét, ảnh trở nên rõ ràng hơn
Trang 23Hình 2.1 B ức ả nh đư c mã hóa với ba lần quét sử ụng chế độ lũy tiế ợ d n
Điều trở ngại lớn nhất của chế độ mã hóa lũy tiến là nó khó thực thi hơn dạng mã tuần tự và nếu bức ảnh thực sự là bức hình bạn mong muốn và bạn sẽ download về thì quá trình này đòi hỏi nhiều thao tác xử lý hơn Progressive JPEG thực sự phù hợp khi khả năng xử lý tỉ lệ thuận với tốc độ truyền ảnh Thông thường, file ảnh sử dụng chế độ lũy tiến này thường sẽ có cùng kích thước với file ảnh cùng nội dung được mã hóa tuần tự
Chế độ mã hóa lũy tiến thường hiếm được sử dụng, nhưng với những ảnh sử dụng
mã Huffman với 8 bit mẫu thì phổ biến hơn
-2.1.2.3 Mã phân cấp
JPEG mã hóa phân cấp (Hierarchical JPEG) sử dụng chế độ mã hóa lũy tiến nâng cao (super-progressive mode) và ảnh sẽ được chia thành các ảnh con được gọi là frames Frame ở đây là tập hợp của một hay một vài lần quét Trong chế độ phân cấp này, frame đầu tiên tạo ra một phiên bản với độ phân giải thấp của tấm ảnh gốc Các frame còn lại tạo
ra các ảnh con với độ phân giải tăng dần
Các chuyên gia cho rằng dạng mã phân cấp tốt hơn dạng mã lũy tiến khi tốc độ truyền tin thấp Nếu chỉ mong muốn những ảnh có độ phân giải thấp được yêu cầu, thì sẽ không phải toàn bộ các frame sẽ cho ta kết qua như mong đợi
Điều hạn chế rõ ràng của chế độ mã hóa phân cấp là sự phức tạp của nó Quá trình thực hiện chứa đựng hầu hết các sự phức tạp của các cơ chế mã hóa khác Ảnh JPEG mã phân cấp này còn yêu cầu nhiều tiến trình hơn bất cứ các dạng mã hóa nào, và nó sử dụng nhiều frame hơn cả lượng dữ liệu của chính bản thân ảnh cần được truyền
Trang 24Vì vậy chúng ta sẽ không thấy ngạc nhiên vì JPEG mã hóa phân cấp không được sử dụng rộng rãi
2.1.2.4 Mã không mất mát thông tin
Chuẩn JPEG ban đầu định nghĩa chế độ nén không mất mát thông tin (lossless compression mode) chế độ nén giữa được chính xác lượng thông tin của ảnh gốc Chế độ này có thể không được hi vọng để nén dữ liệu hay giảm kích thước ảnh Hơn thế nữa, với hầu hết các ứng dụng nó không thể nén với tốt như những gì chúng có Vì vậy không có lý
do nào để sử dụng nó Một phương thức nén không mất mát mới được biết dưới cái tên JPEG-LS, là một định dạng được tạo ra với một vài mục đính xác định
Các JPEG marker có thể được nhóm thành 2 loại Markerđơn (Stand-Alone JPEG Marker) chỉ bao gồm 2 byte mặc định, maker có dữ liệu thì có 2 byte giá trị độ dài để thể hiện số byte dữ liệu của marker Độ dài này bao gồm cả 2 byte thể hiện độ dài nhưng phải là độ dài của chính marker đó.Marker đơn của JPEG được liệt kể ở Bảng 2, và marker có dữ liệu thì được liệt kê ở Bảng 3
B ảng 2.1 Liệt kê marker đơn của JPEG
Giá trị Biểu tượng sử dụng
trong chuẩn JPEG Mô tả
Tạm thời cho lập trình thuật toán
Trang 25trong chuẩn JPEG
SOF10
SOF11
Bắt đầu frame, đường chuẩn Bắt đầu frame, mã tuần tự mở rộng Bắt đầu frame, mã lũy tiến
Bắt đầu frame, mã không mất mát Bảng Huffman
Bắt đầu frame, tuần tự vi phânBắt đầu frame, vi phân progressiveBắt đầu frame, vi phân lossless Đảo ngược
Bắt đầu frame, mã tuần tự mở rộng, lập trình thuật toán
Bắt đầu frame, progressive, arithmetic coding
Bắt đầu frame, lossless, arithmetic coding
Trang 26JPG0-JPG13 RES
Define arithmetic coding conditions
Bắt đầu frame, vi phân sequential, arithmetic coding
Bắt đầu frame, vi phân progressive, arithmetic coding
Bắt đầu frame, vi phân lossless, arithmetic coding
Bắt đầu quét Bảng lượng tử
Số dòng quét Khởi động lại khoảng cách
Mã phân cấp lũy tiếnThành phần tham chiếu
Dữ liệu xác định ứng dụng Chú thích
Đảo ngược Đảo ngược
Hình 2.2 chỉ ra thứ tự của thành phần định dạng trong file ảnh nén JPEG
Trang 27Hình 2.2 Cấu trúc c a file nh nén JPEG ủ ả
Mức tốp của hình 2.2 quy định cụ thể một cấu trúc của file ảnh nén JPEG gồm bắt đầu với một SOI marker tiếp theo là dữ liệu ảnh được nén và kết thúc là EOI marker
Mức thứ 2 của hình 2.2 quy định dự liệu của ảnh bao gồm: fram er hearder và một hoặc nhiều scans Có thể đặt trước một frame header một hoặc nhiều bảng Nếu DNL được r suất hiệu nó sẽ được đặt ngay sau scan thứ nhất
Trong chuẩn JPEG tuần tự mỗi một scan sẽ chứa từ một tới buốn thành phần của ảnh nén Nếu chỉ có hai tới buốn thành phần ảnh nén thì họ thêm vào bên trong của scan đó Chỉ có scan đầu tiê chứa các thành phần được chèn thêm vào.n
Ở mức thức 3 của hình 2.2 quy đinh một scan sẽ bắt đầu với một scan header và chứa nhiều đoạn mã entropy Trước mối một scan header có thể có một hoặc nhiều bảng hoặc các đoạn mã marker Nếu Reset không được chèn vào scan thì chỉ có một scan và đó là scan cuối cùng Nếu reset marker được suất hiện thì số đoạn mã entropy được đinh nghĩa bởi kích thước của ảnh Trong trường hợp đó reset marker được đặt sau mỗi một đoạn mã entropy
Ở mức 4 của hình 2.2 quy định mỗi một đoạn mã entropy gồm nhiều MCU
Trang 282.1.3.1 Quy định Frame header
Hình 2.3 chỉ ra quy định về một frame header với bắt đầu là một header SOF ( start of frame) Hearder quy định đặc điểm riêng của ảnh Các marker và các tham số có trong hình 2.3 được mô tả bảng 2.3 và 2.4
Hình 2.3 Quy đinh về ộ m t frame header
SOFn : Bắt đầu của một frame marker Chỉ số n cho chúng ta biết công nghệ nén ảnh jpeg
là tuần tự , lũy tiến, không tổn hao
SOF0: Nén tuần tự
SOF1: Mở rộng của nén tuần tự, Sủ dụng mã hóa Huffman
SOF2: Lũy tiến, sử dụng mã hóa Huffman
SOF3: Nén không mất dữ liệu sử dụng mã hóa Huffman
SOF4: Mở rộng của nén tuần tự, sử dụng mã hóa toán học
SOF5: Lũy tiến, sử dụng mã hóa toán học
SOF6: Nén không mất dữ liệu sử dụng mã hóa toán học
Lf : Chiều dài của frame header quy định độ dài của fram header được mô tả hình 2.3 – P: Quy định số bit lấy mẫu của mỗi thành phần ảnh
Y: Quy định kích thước của ảnh theo chiều Y
X: Quy định kích thước của ảnh theo chiều X
Nf: Số thành phần ảnh trong frame Quy định số thành phần của ảnh trong một frame.–
Ci: Thành phần đồng dạng
Hi: Chỉ số lấy mẫu theo chiều ngang
Trang 29Vi : Chỉ số lấy mấu theo chiều dọc
Tqi: Chỉ ra băng lượng tử được lựa chọn
B ảng 2.3 Kích thước và giá t r c ị ủ a nh ững tham số trong Frame header
2.1.3.2 Cấu trúc của scan header
Trong hình 2.4 quy định một scan header
Hình 2.4 Quy định cấu trúc của scan header
Các marker và các tham số được mô tả trong hình 2.4 được định nghĩa ở bảng 2.4
SOS: Bắt đầu của một scan marker
Ls: Chiều dài của scan Quy định chiều dài của scan được mô tả trong hình 2.4-
Trang 30Ns: Số thành phần ảnh trong một scan Quy định số thành phần của nguồn ảnh trong một - scan Giá trị của Ns tương đương với số thành phần scan quy đinh các tham số ( Csj, Tdj,
và Taj) xuất hiện trong mỗi scan header
Se: Kết thúc quá trình chọ phổ biến đổi DCTn
Ah: Đó là tham số quy định biến đổi được sử dụng trước mỗi một scan
B ảng 2.4 Tham số ủa scan header c
Trang 31Tần suất sử dụng của chữ cái đã được đưa vào sử dụng trong thiết kế của mã Morse, theo
đó những chữ cái được sử dụng thường xuyên sẽ có mã ngắn hơn
Trang 32Phương pháp mã hóa chiều dài tùy biến cho kí hiệu dựa trên mức độ sử dụng được biết đến nhiều nhất là phương pháp mã hoá Huffman, được phát minh bởi D.A.Huffman vào năm 1952 Phương pháp này khá đơn giản Nó xây dựng từ dưới ngọn lên một cây nhị phân chứa các kí hiệu, kí hiệu nào càng ít sử dụng thì càng ở xa gốc Do đó đầu tiên ta phải tạo ra một tập chứa các nút của cây Ban đầu tập này chứa tất cả các kí hiệu và chưa
có nút nào Thủ tục sau sẽ được lặp lại cho đến khi nào tập đó chỉ chứa một nút của cây và không còn kí hiệu nào:
Trang 331 Xác định hai giá trị hay chính là 2 nút của cây bằng cách chọn 2 kí hiệu có tần số thấp nhất và loại chúng ra khỏi tập Nếu có hơn một phần tử có giá trị thấp nhất thì có thể lựa chọn tuỳ ý trong số các phần tử đó
2 Tạo một nút của cây với 2 nút con chính là 2 phần tử chọn ở bước trên
3 Tạo tần số của nút mới bằng tổng tần số của 2 nút con
4 Thêm nút mới vào trong tập
Sau khi tất cả các giá trị đã tham gia vào cây, ta sẽ gán giá trị 0 cho một nhánh của mỗi nút trên cây và giá trị 1 cho nhánh còn lại Mã Huffman cho mỗi kí hiệu có được bằng cách lấy các giá trị theo đường đi từ gốc xuống đến mỗi nhánh Nhớ rằng với mã Huffman, ta
sẽ làm việc với các chuỗi bit Mã Huffman bao gồm một số tuỳ biến các bit, hay nói cách khác nó là một chuỗi chiều dài tuỳ biến của các số 0 và 1 Tập hợp các giá trị và các mã kết hợp của chúng được gọi là bảng Huffman
Chúng ta sẽ sử dụng câu palindrome sau để làm ví dụ xem mã Huffman mã hoá như thế nào
A MAN A PLAN A CANAL PANAMA
Câu trên gồm 8 kí tự với tần số sử dụng của các kí tự như sau:
Trang 34Theo bảng trên thì kí hiệu C và dấu chấm có tần số sử dụng thấp nhất Để bắt đầu qúa trình mã hóa Huffman chúng ta sử dụng 2 kí hiệu này để tạo một nút của cây Gán giá trị tần số cho nút đó bằng tổng tần số của hai nút lá dưới nó
Trong số các giá trị còn lại trong tập có 4 giá trị tần số thấp nhất là 2 Ta chọn P và nút của cây vừa tạo xong, sau đó kết hợp chúng lại để tạo ra một nút mới với giá trị tần số
Trang 35Kí tự trắng và nút của cây tạo từ L M có tần số thấp nhất, vì thế ta sẽ kết hợp chúng
-Bây giờ còn 2 nút của cây và chữ A Ta chọn kết hợp 2 nút của cây
Cuối cùng ta thêm chữ A vào để hoàn thiện cây và sau đó dánh dấu mỗi nhánh bên trái bằng 0 và mỗi nhánh bên phải bằng 1
Ta tạo ra mã Huffman cho mỗi kí hiệu bằng cách nối các số 0 và 1 theo đường đi từ gốc đến mỗi kí hiệu đó
Bảng dưới đây thể hiện mã Huffman của từng kí hiệu:
Trang 36Bảng 2.8 Mã Huffman của t ng kí hi ừ ệu
Ta có thể nhận ra là trong bảng trên không có mã nào là tiền tố cho một mã khác Ví dụ:
mã cho N là 110, không có mã nào khác trong bảng bắt đầu bằng chuỗi bit 110 Đây là một tính chất rất quan trọng vì nếu không có nó thì sẽ không thể nào giải mã được một xâu nén bằng mã Huffman
Dù cấu trúc cây làm cho ta thấy rất dễ để hiểu mã hoá theo mã Huffman làm việc như thế nào nhưng nó lại không phải là cách đơn giản nhất để tạo ra mã Huffman Một phương pháp khác là tạo chiều dài mã cho mỗi kí hiệu và từ đó tạo ra mã Huffman Trong phương pháp này ta có các kí hiệu với chiều dài mã kết hợp và danh sách các giá trị tần số kết hợp Đầu tiên ta gán cho mỗi kí hiệu một chiều dài mã toàn số 0
Trang 37Với câu palindrome trong ví dụ trên ta có một cấu trúc như sau:
Để tạo ra chiều dài mã, ta kết hợp 2 danh sách có tần số thấp nhất Khi ta kết hợp 2 danh sách thì tần số của danh sách mới là tổng tần số của 2 danh sách cũ Mỗi lần ta kết hợp một danh sách ta lại tăng tần số của mỗi kí hiệu trong danh sách đó lên 1 Lặp lại quá trình trên cho đến khi ta chỉ có một danh sách mã Trong trường hợp có nhiều tần số thấp nhất, ta luôn luôn chọn danh sách gần cuối nhất
Trở lại ví dụ, danh sách chứa dấu chấm và kí tự C có tần số thấp nhất vì thế ta kết hợp chúng và tăng chiều dài mã của chúng lên
Trang 38Bây giờ có 4 danh sách với tần số thấp nhất là 2 Ta chọn 2 danh sách gần đáy nhất và kết hợp chúng lại