Academia.eduAcademia.edu
Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh . Đồ án t t nghiệp Tìm hi u m t s ph M ng pháp nén nh Đ U Ngày nay, cùng với sự phát tri n không ngừng c a khoa học và công nghệ thì máy tính đóng vai trò ngày càng quan trọng và không th thiếu trong cu c s ng xã h i loài ng i. Việc trao đổi thông tin c a con ng i trong tất c các ngành, các lĩnh vực c a đ i s ng ngày càng tr nên cần thiết cùng với sự ra đ i và phát tri n c a m ng Internet. Xử lý nh là m t ngành khoa học còn t ng đ i mới mẻ so với nhi u ngành khoa học khác nh ng nó đang đ ợc tập trung nghiên cứu và phát tri n vì những ứng d ng thực tiễn c a nó trong nhi u ngành , lĩnh vực khác nhau. Trong đó “Nén nh” là m t phần c a xử lý nh có ứng d ng to lớn trong truy n thông và trong l u trữ, đã có rất nhi u ph ng pháp nén nh đ ợc ra đ i và không ngừng đ ợc c i tiến đ ngày càng hoàn thiện đem l i hiệu qu nén cao và cho chất l ợng nh t t nhất. Trong đồ án t t nghiệp “TÌM HI U M T S PH NH” đ ợc sự h ớng dẫn NG PHÁP NÉN c a PGS .TS . Ngô Qu c T o em đã đi sâu nghiên cứu m t s ph nén nh phổ biến nh ph ng pháp : mã lo t dài RLE, HUFFMAN, LZW, JPEG và ng pháp nén nh JPEG2000 dựa trên biến đổi Wavelet với những đặc tính v ợt tr i so với các chuẩn nén tr ớc đó đem l i hiệu qu nén cao , cho nh nén chất l ợng t t và nhi u những u đi m khác mà các chuẩn nén tr ớc đó không th có. N i dung đồ án t t nghiệp bao gồm các phần chính nh : ch giới thiệu tổng quan v xử lý nh, m c đích ch khái niệm cần biết v s ph Ch ng hai sẽ giới thiệu m t ng pháp nén nh và cách phân lo i các ph ng pháp nén nh. ng trình thử nghiệm và kết qu đ t đự c Sinh viên thực hiện : T Minh Thắng CT 702 1 ng này là giới thiệu m t s nh s và xử lý nh s . Ch ng ba sẽ giới thiệu v ch ng m t Trang : Đồ án t t nghiệp c a ch Tìm hi u m t s ph ng pháp nén nh ng trình. Cu i cùng sẽ là phần kết luận đánh giá kết qu nghiên cứu thu đ ợc và h ớng phát tri n c a đ tài. CH NG I: GI I THI U T NG QUAN V NÉN NH I.1.Gi i thi u v nh số và x lý nh số: I.1.1. nh số: nh có th bi u diễn d ới d ng tín hiệu t ng tự hoặc tín hiệu s . Trong bi u diễn s c a các nh đa mức xám, m t nh đ ợc bi u diễn d ới d ng m t ma trận hai chi u. M i phần tử c a ma trận bi u diễn cho mức xám hay c ng đ c a nh t i vị trí đó. M i phần tử trong ma trận đ ợc gọi là m t phần tử ảnh, thông th ng kí hiệu là PEL (Picture Element) hoặc là đi m nh (Pixel). - Với ảnh đa cấp xám: Nếu dùng 8 bit (1 byte) đ bi u diễn mức xám, thì s các mức xám có th bi u diễn đ ợc là 28 hay 256. M i mức xám đ ợc bi u diễn d ới d ng là m t s nguyên nằm trong kho ng từ 0 đến 255, với mức 0 bi u diễn cho mức c c ng đ đen nhất và 255 bi u diễn cho mức ng đ sáng nhất. - Với ảnh màu: Cách bi u diễn cũng t ng tự nh với nh đen trắng, chỉ khác là các s t i m i phần tử c a ma trận bi u diễn cho ba màu riêng rẽ gồm: đ (red), l c (green) và lam (blue). Đ bi u diễn cho m t đi m nh Sinh viên thực hiện : T Minh Thắng CT 702 2 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh màu cần 24 bit, 24 bit này đ ợc chia thành ba kho ng 8 bit. M i kho ng này bi u diễn cho c ng đ sáng c a m t trong các màu chính. Pixel or PEL Đ sáng trung bình trong m i hình chữ nhật = giá trị m t đi m nh. Hình 1.1 Bi u diễn c a m t mức xám c a nh s . I.1.2.X lý nh số: Xử lý nh là m t khoa học mặc dù còn t ng đ i mới so với nhi u ngành khoa học khác ,nhất là trên quy mô công nghiệp. Xử lý nh s có rất nhi u ứng d ng nh làm nổi các nh trong y học, khôi ph c l i nh do tác đ ng c a khí quy n trong thiên văn học, tăng c ng đ phân gi i c a nh truy n hình mà không cần thay đổi cấu trúc bên trong c a hệ th ng chuy n t i, nén nh trong khi truy n đi xa hoặc l u trữ. Các giai đo n chính trong xử lý nh có th đ ợc mô t trong hình sau: L u CAMERA Thu nhận nh S Phân tích nh Nhận d ng SENSOR Sinh viên thực hiện : T Minh Thắng CT 702 3 L u trữ Hệ quyết định Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh I.2.Mục đích và sự c n thi t của “ nén nh ”: Nén nh là m t kỹ thuật mã hoá các nh s hoá nhằm gi m s l ợng các bit dữ liệu cần thiết đ bi u diễn nh. M c đích là gi m đi những chi phí trong việc l u trữ nh và chi phí th i gian đ truy n nh đi xa trong truy n thông nh ng vẫn đ m b o đ ợc chất l ợng c a nh. Nén nh thực hiện đ ợc là do m t thực tế: thông tin trong bức nh không ph i là ngẫu nhiên mà có trật tự , tổ chức.Vì thế nếu bóc tách đ ợc tính trật tự, cấu trúc đó thì sẽ biết phần thông tin nào quan trọng nhất trong bức nh đ bi u diễn và truy n đi với s l ợng ít bit h n so với nh g c mà vẫn đ m b o tính đầy đ c a thông tin. bên nhận quá trình gi i mã sẽ tổ chức, sắp xếp l i đ ợc bức nh xấp xỉ gần chính xác so với nh g c nh ng vẫn th a mãn chất l ợng yêu cầu. D ới đây là ví d v l u trữ nh s và truy n đi xa với đ ng truy n 9600 baud (9600 bps) đ thấy rõ sự cần thiết c a việc nén nh: • nh đa cấp xám hay nh 256 màu có kích th ớc 800 x 600, 8 bit/đi m nh, cần 3.840.000 bit l u trữ và mất 6.67 phút đ truy n. • nh màu RGB (24 bit/đi m nh ) cùng đ phân gi i nh vậy cần h n 10 triệu bit đ l u trữ và 20 phút đ truy n. • M t phim âm b n có kích th ớc 24 × 36 mm (35 mm) chia bằng các kho ng cách nhau 12 àm, vào kho ng 3000 × 2000 đi m, 8 bit / pixel, yêu cầu 48 triệu bit cho l u giữ nh và 83 phút đ truy n. Qua ví d trên ta thấy nhi u vấn đ trong việc l u trữ và truy n t i nh s hoá. Nén nh có nhi u ứng d ng trong thực tế nh : truy n các văn b n Sinh viên thực hiện : T Minh Thắng CT 702 4 Trang : Đồ án t t nghiệp đồ ho qua đ Tìm hi u m t s ph ng pháp nén nh ng điện tho i (Fax), nén nh trong y tế và truy n hình cáp….Chính sự ứng d ng trong nhi u lĩnh vực c a nén nh cùng với sự tiến b trong lĩnh vực vi điện tử dẫn đến sự ra đ i các chuẩn nén nh. Nén nh đ t đ ợc bằng cách lo i b các phần d thừa trong nh đã đ ợc s hoá. D thừa có th là d thừa thông tin v không gian, d thừa v cấp xám hay d thừa v th i gian: • D thừa thông tin v không gian : trong m t bức nh luôn tồn t i sự t ng quan giữa các đi m nh c nh nhau. • D thừa thông tin v cấp xám :là d thừa dựa vào sự t ng quan giữa các màu sắc c nh nhau. • D thừa thông tin v th i gian : Trong m t chu i nh video, tồn t i sự t ng quan giữa các đi m nh c a các frame khác nhau . I.3.Các khái ni m c b n: • Pixel (picture element) : phần tử nh nh trong thực tế là m t nh liên t c v không gian và v giá trị đ sáng. Đ có th xử lý nh bằng máy tính cần thiết ph i tiến hành s hoá nh. Nh vậy m t nh là m t tập hợp các pixel. M i pixel là gồm m t cặp to đ x, y và màu. Cặp to đ x,y t o nên đ phân gi i (resolution). Màn hình máy tính có nhi u lo i với đ phân gi i khác nhau: 320 x 200, 640x350, 800x600, 1024x768,… • Mức xám (Graylevel) Mức xám là kết qu sự mã hoá t ng ứng c a m i c ng đ sáng c a m i đi m nh với m t giá trị s – kết qu c a quá trình l ợng hoá . • Dữ liệu Sinh viên thực hiện : T Minh Thắng CT 702 5 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh Trong m t bài toán, dữ liệu bao gồm m t tập các phần tử c s mà ta gọi là dữ liệu nguyên tử. Nó có th là m t chữ s , m t ký tự, ... nh ng cũng có th là m t con s , m t từ, ... đi u đó ph thu c vào từng bài toán. • Nén dữ liệu Nén dữ liệu là qu trình gi m dung l ợng thông tin “d thừa” trong dữ liệu g c và làm cho l ợng thông tin thu đ ợc sau nén th ng nh h n dữ liệu g c rất nhi u. Do vậy, tiết kiệm đ ợc b nhớ và gi m th i gian trao đổi dữ liệu trên m ng thông tin mà l i cho phép chúng ta khôi ph c l i dữ liệu ban đầu. • Tỷ lệ nén Tỷ lệ nén là m t trong các đặc tr ng quan trọng c a mọi ph ng pháp nén. Tỷ lệ nén đ ợc định nghĩa nh sau: Tỷ lệ nén = 1/r*% với r là tỷ s nén đ ợc định nghĩa: r = kích th c dữ li u gốc / kích th c dữ li u nén. Nh vậy hiệu suất nén = (1- tỷ lệ nén)*100%. Đ i v i nh tĩnh, kích th Đ i với nh video, kích th c chính là s bit bi u diễn toàn b bức nh. c chính là s bit đ bi u diễn m t khung hình video (video frame). Sinh viên thực hiện : T Minh Thắng CT 702 6 Trang : Đồ án t t nghiệp Tìm hi u m t s ph CH CÁC PH ng pháp nén nh NG II: NG PHÁP NÉN NH II.1.Cách phân lo i các ph ng pháp nén nh: II.1.1.Cách phân lo i dựa vào nguyên lý nén: Nén b o toàn thông tin (losses compression): bao gồm các ph ng pháp nén mà sau khi gi i nén sẽ thu đự c chính xác dữ liệu g c.Tuy nhiên nén b o toàn thông tin chỉ đ t hiệu qu nh so với ph ng pháp nén không b o toàn thông tin. Nén không b o toàn thông tin (lossy compression): bao gồm các ph ng pháp nén sau khi gi i nén sẽ không thu đ ợc dữ liệu nh b n g c. Các ph ng pháp này đ ợc gọi là “tâm lý thị giác” đó là lợi d ng 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.Ph ng pháp này luôn đem l i hiệu qu cao do lo i b đi những thông tin d thừa không cần thiết. II.1.2.Cách phân lo i dựa vào cách thức thực hi n nén: Sinh viên thực hiện : T Minh Thắng CT 702 7 Trang : Đồ án t t nghiệp Ph Tìm hi u m t s ph ng pháp nén nh ng pháp không gian (Spatial Data Compression ): các ph ng pháp này thực hiện nén bằng cách tác đ ng trực tiếp lên việc lấy mẫu c a nh trong mi n không gian. Ph ng pháp sử d ng biến đổi (Transform Coding): gồm các ph ng pháp tác đ ng lên sự biến đổi c a nh g c chứ không tác đ ng trực tiếp. II.1.3.Cách phân lo i dựa vào lý thuy t mã hoá: Các phương pháp nén thế hệ thứ nhất: gồm các ph ng pháp có mức đ tính toán đ n gi n nh lấy mẫu , gán từ mã,…. Các phương pháp nén thế hệ thứ hai: gồm các ph ng pháp dựa vào mức đ bão hoà c a tỷ lệ nén bằng cách sử d ng các phép toán tổ hợp đầu ra m t cách hợp lý hoặc sử d ng bi u diễn nh nh : ph tháp Laplace, ph ng pháp dựa vào vùng gia tăng, ph ng pháp kim tự ng pháp tách hợp. II.1.4.Quá trình nén và gi i nén : Gồm 2 công đo n : Nén : dữ liệu g c qua b mã hoá dữ liệu , b mã hoá này thực hiện nén dữ liệu đến m t mức thích hợp cho việc l u trữ và truy n dẫn thông tin. Quá trình này sẽ thực hiện việc lo i b hay cắt bớt những d thừa c a nh đ thu đ ợc thông tin cần thiết nh ng vẫn đ m b o đ ợc chất l ợng nh. Gi i nén : dữ liệu nén đi qua b gi i mã dữ liệu, b gi i mã sẽ thực hiện gi i nén đ thu đ ợc dữ liệu g c ban đầu.Việc gi i nén này th ng ph i dựa vào các thông tin đi kém theo dữ liệu nén ,tuỳ thu c vào ki u nén hay ph ng pháp nén mà dữ liệu gi i nén đ ợc có hoàn toàn gi ng với dữ liệu g c ban đầu hay không. Sinh viên thực hiện : T Minh Thắng CT 702 8 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh Tóm l i quá trình nén và gi i nén dữ liệu có th mô t m t cách tóm tắt theo s đồ d ới đây: Quá trình nén Dữ liệu Dữ liệu Quá trình gi i nén Hình 2.1 : Quá trình nén và gi i nén II.2.Ph ng pháp mã hoá đ dài lo t RLE: Mã hoá theo đ dài lo t RLE (Run Length Encoding) là m t ph ng pháp nén nh dựa trên sự cắt bớt các d thừa v không gian (m t vài hình nh có vùng màu lớn không đổi đặc biệt đ i với nh nhị phân). Lo t đ ợc định nghĩa là dãy các phần tử đi m nh (pixel) liên tiếp có cùng chung m t giá trị. II.2.1.Nguyên tắc : Nguyên tắc c a ph ng pháp này là phát hiện m t lo t các đi m nh lặp l i liên tiếp, ví d :110000000000000011 .Ta thấy đi m nh có giá trị 0 xuất hiện nhi u lần liên tiếp thay vì ph i l u trữ toàn b các đi m nh có giá trị 0 ta chỉ cần l u trữ chúng bằng cách sử d ng các cặp (đ dài lo t, giá trị). Ví dụ: Cho m t chu i nguồn d : d =5 5 5 5 5 5 5 5 5 5 19 19 19 19 19 0 0 0 0 0 0 0 23 23 23 23 23 23 23 23 Ta sẽ có chu i mới : (10 5) (5 19) (7 0) (8 23) Tỷ s nén = 20/ 8 = 2.5 Sinh viên thực hiện : T Minh Thắng CT 702 9 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh Đ i với nh đen trắng chỉ sử d ng 1 bit đ bi u diễn 1 đi m nh thì ng pháp này t ra rất hiệu qu , ta thấy đi u đó qua ví d sau : ph Cho m t chu i nguồn d: 000000000000000111111111100000000001111111111000000000000000 Ta có chu i mới : (15, 10, 10, 10, 15) Tỷ s nén = 60 bit / (5*4 bit) = 3 ( chỉ sử d ng 4 bit đ th hiện đ dài lo t và không th hiện giá trị lo t vì nh đen trắng chỉ có 2 giá trị bit là 0 hoặc là 1) Chú ý: • Đ i với nh chi u dài c a m t dãy lặp có th lớn h n 255, nếu ta dùng 1 byte đ l u trữ chi u dài thì sẽ không đ . Gi i pháp đ ợc dùng là tách chu i đó thành 2 chu i: m t chu i có chi u dài là 255, chu i kia có chi u dài còn l i. • Ph ng pháp nén RLE chỉ đ t hiệu qu khi chu i lặp lớn h n 1 ng ỡng nhất định nào đó hay nói các khác trong nh cần nén ph i có nhi u đi m nh k nhau có cùng giá trị màu.Do đó ph ng pháp này không đem l i cho ta kết qu m t cách ổn định vì nó ph thu c hoàn toàn vào nh nén chỉ thích hợp cho những nh đen trắng hay nh đa cấp xám. Ví dụ: Ta có m t chu i nguồn: d=5 7 9 11 13 18 28 38 48 58 30 35 40 45 Chu i kết qu sau khi mã hoá : 1 5 1 7 1 9 1 11 1 3 1 18 1 28 1 38 1 48 1 58 1 30 1 35 1 40 1 45 Tỷ s nén = 14 / 28 = 0.2 Sinh viên thực hiện : T Minh Thắng CT 702 10 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh Nh vậy chu i sau khi mã hoá đã lớn h n nhi u chu i nguồn ban đầu. Do đó cần ph ng pháp c i tiến đ xử lý những tr ng hợp nh trên tránh làm m r ng chu i dữ liệu nguồn nghĩa là chỉ mã hoá đ dài lo t dữ liệu lặp i ta đã đ a ra cách đó là thêm kí tự ti n t vào tr ớc đ dài lo t, l i. Ng việc gi i mã đ ợc thực hiện nếu gặp kí tự ti n t với đ dài lo t và giá trị đi m nh theo sau. Ví dụ: Ta có chu i nguồn : d = 5 8 4 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 Gi sử kí tự ti n t là “+” ta có : 5 8 4 +7 8 + 9 10 Tỷ s nén = 19 / 9 = 2.1 Tuy nhiên trong m t s tr ng hợp các đi m nh có đ t ng quan với nhau v giá trị mức xám nh trong ví d d ới đây ta có th tiến hành xử lý nh sau. Ví dụ: Ta có m t chu i nguồn: d = 5 7 9 11 13 18 28 38 48 58 55 60 65 70 75 80 85 90 95 100 Ta có dựa vào đ t ng quan này đ có đ ợc hiệu qu nén cao , bằng việc áp d ng e(i) = d(i) –d(i-1) sẽ thu đ ợc : 5 2 2 2 2 5 10 10 10 10 -3 5 5 5 5 5 5 5 5 5 Áp d ng ph ng pháp nén lo t dài ta dễ dàng thu đ ợc : (5 1)( 2 4)(5 1)(10 5)(-3 1)(5 9) II.2.2.Thu t toán: Thuật toán nh sau : Sinh viên thực hiện : T Minh Thắng CT 702 11 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh • Tiến hành duyệt trên từng hàng cho đến khi kết thúc vùng dữ liệu nh, trong quá trình duyệt tiến hành ki m tra đ tìm ra những lo t có cùng giá trị đồng th i chú ý những kí hiệu xu ng dòng (hay kết thúc dòng) ,kết thúc nh Bitmap, … • Khi gặp lo t có đ dài > 3 thì nh y đến chế đ nén ng ợc l i nh y đến chế đ không nén tuy nhiên nếu lo t > 255 thì sẽ tách ra chỉ mã < 255 sau đó mã tiếp phần còn l i. Ngoài ra còn các chế đ khác nh : bắt đầu , kết thúc 1 dòng. • Kết thúc khi gặp kí hiệu kết thúc bitmap ( end – o f- bitmap) II.2.3.M t số thủ tục ch • Ch ng trình : ng trình nén theo ph ng pháp RLE : void CRLE::CompressInRLE8(BYTE*pSrcBits,CByteArray& pRLEBits, int& RLE_size) { int line; int src_index = 0, dst_index = 0, counter, i; for ( line = 0; line < m_dib.dsBmih.biHeight; line++) { state_start: if ( EndOfLine(src_index)) { pRLEBits[dst_index++] = 1; pRLEBits[dst_index++] = pSrcBits[src_index]; src_index++; goto end_of_line; } Sinh viên thực hiện : T Minh Thắng CT 702 12 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh if(pSrcBits[src_index]==pSrcBits[src_index+1]) goto tate_compress; if ( EndOfLine(src_index+1)) { pRLEBits[dst_index++] = 1; pRLEBits[dst_index++] = pSrcBits[src_index++]; pRLEBits[dst_index++] = 1; pRLEBits[dst_index++] = pSrcBits[src_index++]; goto end_of_line; } if (pSrcBits[src_index+1] == pSrcBits[src_index+2]) { pRLEBits[dst_index++] = 1; pRLEBits[dst_index++] = pSrcBits[src_index++]; goto state_compress; } else goto state_no_compress; state_compress: for ( counter = 1; counter <= 254; counter++) { if ( pSrcBits[src_index+counter] != pSrcBits[src_index] ) break; if ( EndOfLine(src_index+counter) ) { pRLEBits[dst_index++] = counter+1; pRLEBits[dst_index++] = pSrcBits[src_index]; src_index += counter +1; goto end_of_line; } Sinh viên thực hiện : T Minh Thắng CT 702 13 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh } pRLEBits[dst_index++] = counter; pRLEBits[dst_index++] = pSrcBits[src_index]; src_index += counter; goto state_start; state_no_compress: for (counter = 2; counter <= 254; counter++) { if ( EndOfLine(src_index+counter) ) { pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = counter + 1; for (i = counter + 1; i > 0; i--) pRLEBits[dst_index++]=pSrcBits[src_index++]; if ( 0 != ((counter+1) % 2) ) pRLEBits[dst_index++]; goto end_of_line; } if(EndOfLine(src_index+counter+1) || pSrcBits[src_index+counter] != pSrcBits[src_index+counter+1] ) continue; if(EndOfLine(src_index+counter+2) || SrcBits[src_index+counter+1] != pSrcBits[src_index+counter+2] ) continue; else { if ( counter > 2) counter--; pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = counter+1; for (i = counter+1; i > 0; i--) pRLEBits[dst_index++] = pSrcBits[src_index++]; Sinh viên thực hiện : T Minh Thắng CT 702 14 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh if ( 0 != ((counter+1) % 2) ) pRLEBits[dst_index++]; goto state_compress; } } pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = counter; for (i = counter; i > 0; i--) pRLEBits[dst_index++] = pSrcBits[src_index++]; if ( 0 != ((counter) % 2) ) pRLEBits[dst_index++]; goto state_start; end_of_line: if ( 0 != (src_index % 4 )) { int pad = 4 - (src_index%4); src_index += pad; } pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = 0; } pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = 1; RLE_size = dst_index; } • Ch ng trình gi i nén ph ng pháp RLE : BOOL CRLE::DecRLE8(ifstream &fil, BYTE *pDest) { DWORD x, y, paddedwidth; Sinh viên thực hiện : T Minh Thắng CT 702 15 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh paddedwidth =BMPWIDTHBYTES(pInfo->biWidth*pInfo-> biBitCount); BYTE FirstByte, SecondByte; WORD data; x = y = 0; while (!fil.eof()) { if (!fil.read((char*)&data, 2)) return FALSE; FirstByte = LOBYTE(data); SecondByte = HIBYTE(data); if (FirstByte == 0) { switch (SecondByte) { case 0: x = 0; y++; break; case 1: return TRUE; case 2: if (!fil.read((char*)&data, 2)) return FALSE; x += LOBYTE(data); y += HIBYTE(data); break; default: char ch; for (BYTE i = 0; i < SecondByte; i++) { if (!fil.get(ch)) return FALSE; pDest[paddedwidth * y + x++] = (BYTE)ch; Sinh viên thực hiện : T Minh Thắng CT 702 16 Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh } if ((SecondByte % 2) == 1) if (!fil.get(ch)) return FALSE; } } else { for (BYTE i = 0; i < FirstByte; i++) pDest[paddedwidth * y + x++] = SecondByte; } } return FALSE; } II.3.Ph ng pháp mã hoá Huffman: II.3.1. Nguyên tắc: Ph kê. Ng ng pháp mã hoá Huffman là ph ng pháp dựa vào mô hình th ng i ta tính tần suất xuất hiện c a các ký tự bằng cách duyệt tuần tự từ đầu tệp g c đến cu i tệp. Việc xử lý đây tính theo bit. Trong ph Sinh viên thực hiện : T Minh Thắng CT 702 17 ng pháp Trang : Đồ án t t nghiệp Tìm hi u m t s ph ng pháp nén nh này các ký tự có tần suất cao m t từ mã ngắn, các ký tự có tần suất thấp m t từ mã dài. Nh vậy với cách thức này ta đã làm gi m chi u dài trung bình c a từ mã hoá bằng cách dùng chi u dài biến đổi tuy nhiên cũng có tr ng hợp bị thiệt 1 ít bit khi tần suất là rất thấp. II.3.2. Thu t toán: • Thu t toán mã hoá Huffman g m 2 b c chính: • Bước một: Tính tần suất c a các ký tự trong dữ liệu g c bằng cách duyệt tệp g c m t cách tuần tự từ đầu đến cu i đ xây dựng b ng mã và tính toán tần suất. Tiếp theo sau là sắp xếp l i b ng mã theo thứ tự tần suất gi m dần. • Bước hai: Duyệt b ng tấn suất từ cu i lên đầu đ thực hiện ghép hai phần tử có tần suất thấp thành m t phần tử duy nhất có tần suất bằng tổng hai tần suất thành phần. Cập nhật phần tử này vào vị trí phù hợp trong b ng và lo i b hai phần tử đã xét. Thực hiện cho đến khi b ng chỉ có m t phần tử. Đây là quá trình t o cây nhị phân Huffman ,phần tử có tần suất thấp phần tử kia bên trái. Sau khi cây đã t o xong ng bên ph i, i ta tiến hành gán mã cho các nút lá. Việc mã hoá thực hiện theo quy định : m i lần xu ng bên ph i ta thêm m t bit ‘1’ vào từ mã, m i lần xu ng bên trái ta thêm m t bit ‘0’ vào từ mã. Quá trình gi i nén cũng khá đ n gi n đ ợc tiến hành theo chi u ng ợc l i. Ng i ta cũng ph i dựa vào b ng mã t o ra trong giai đo n nén (b ng này đ ợc l u trữ trong cấu trúc đầu c a tệp nén cùng với dữ liệu nén). Ví dụ: M t tệp bất kỳ có tần suất xuất hiện c a các kí tự s nh Ký tự Tần suất 0 1532 Sinh viên thực hiện : T Minh Thắng CT 702 18 b ng sau. Trang : Đồ án t t nghiệp Tìm hi u m t s ph 1 152 2 323 3 412 4 226 5 385 6 602 7 92 8 112 9 87 ng pháp nén nh Bảng tần suất sắp xếp giảm dần 0 6 3 5 2 4 1 8 7 9 0.3905 0.1535 0.1051 0.0982 0.0824 0.0577 0.0388 Kí tự Xác suất (%) 0 0.3906 6 0.1535 3 0.1051 5 0.0982 2 0.0824 4 0.0577 1 0.0388 8 0.0286 7 0.0235 9 0.0222 0.3905 0.3905 0.1535 0.1051 0.0982 0.0824 0.1535 0.1051 0.0982 0.0824 0.0577 0.0457 0.0388 0.0674 0.0577 0.3906 0.1535 0.1051 0.1034 0.3905 0.3905 0.3905 0.3905 0.6100 0.1535 0.1498 0.2016 0.1535 0.1498 0.1051 0.2549 0.2016 0.1535 0.3551 0.2549 0.3905 0.0982 0.1051 0.1034 0.0824 0.0982 0.0674 0.0286 0.0457 Sinh viên thực hiện : T Minh Thắng CT 702 0.0235 19 0.0222 0.0286 Trang :