LỜI NÓI ĐẦU Trong xã hội hiện nay, khi công nghệ thông tin (CNTT) ngày càng phát triển và tác động và mọi mặt của cuộc sống. Một trong những nhu cầu lớn của CNTT là việc lưu trữ thông tin. Nếu chỉ đơn thuần lưu trữ dữ liệu thì dung lượng lưu trữ sẽ rất cao. Do đó gây nên sự tiêu tốn tài nguyên lưu trữ. Để giải quyết vẫn đề này, chúng ta đã nghiên cứu đến các thuật toán nén dữ liệu nhằm hướng tới việc sử dụng ít dung lượng hơn nhưng dữ liệu gốc vẫn thể hiện được chính xác hoặc tương đối chính xác dữ liệu gốc ban đầu. Nén dữ liệu rất quan trọng, giúp giảm tải tài nguyên lưu trữ. Tuy nhiên, nén dữ liệu chúng ta cần tiêu tốn tài nguyên vào việc nén và giải nén, đòi hỏi nhiều hơn về phần cứng và xử lý. Tuy nhiên, với sự phát triển của khoa học công nghệ, năng lực tính toán của thiết bị ngày càng cao, và nén dữ liệu ngày càng trở nên quan trọng và được ứng dụng rộng rãi. Xử lý ảnh là một trong những 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, nhiều 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ữ. Chúng tôi xin chân thành cảm ơn Thầy Lương Mạnh Bá đã tận tình hướng dẫn và truyền thụ kiến thức trong suốt thời gian qua để chúng tôi có thể hoàn thiện bài tập lớn này. Nhóm sinh viên I. TỔNG QUAN VỀ NÉN ẢNH 1. Giới thiệu Nén ảnh là một kỹ thuật mã hóa các ảnh số hóa 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í tron việc lưu trữ và 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 ả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. 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. 2. Các khái niệm cơ bản. • Pixel (Picture alement): 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ố hóa ả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 tọa độ x, y và màu. Cặp tọa độ x, y tạo nên độ phân giản (resolution). Màn hình máy tính có nhiều loại độ phân giải khác nhau như: 320 x 200, 640 x 350, 1024 x 768 ... • Mức xám (Graylevel) Mức xám là kết quả sự mã hóa 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 hóa. • Dữ liệu 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, mang lại 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 trung 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 = 1r% 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ước chính là số bit biểu diễn toàn bộ bức ảnh. Đối với ảnh video, kích thước chính là số bit để biểu diễn một khung hình video (video frame). 3. Cách phân loại nén ảnh. Dựa vào nguyên lý nén: Nén không mất thông tin: Sau khi giải nén ta thu được chính xác dữ liệu gốc. Nén có mất thông tin: Sau khi giải nén ta không thu được dữ liệu như bản gốc. Dựa vào cách thức thực hiện nén: Phương pháp không gian: 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: Tác động lên sự biến đổi của ảnh gốc. Dựa vào triết lý của sự mã hóa: Các phương pháp nén thế hệ thứ nhất: Gồm các phương pháp mà mức độ tính toán là đơn giản. Các phương pháp nén thế hệ thứ hai: dựa vào độ bão hòa của tỷ lệ nén. 4. Các phương pháp nén. • Nén mất dữ liệu (lossy compression): Hay gặp nhất trong công nghệ thông tin là nén hình ảnh và âm thanh. Có nhiều giải thuật được đặt ra để đáp ứng yêu cầu giảm thiểu kích thước của file ảnh, file âm thanh sao cho vẫn duy trì được chất lượng ở mức độ chấp nhận được. Với việc nén ảnh, những giải thuật này đều dựa trên nền tảng là loại bớt những màu mà mắt người không hoặc khó cảm nhận được, chỉ giữ lại những màu mà mắt người không hoặc khó cảm nhận được, chỉ giữ lại những màu chủ yếu thực sự ảnh hưởng tích cực lên khả năng cảm nhận màu của mắt. Nếu đã từng biên tập hình ảnh bằng Photoshop, bạn sẽ dễ dàng nhận thấy sự khác biệt khá lớn giữa bảng màu chuẩn và bảng màu dùng cho hình ảnh tải lên từ web, đó chính là hình nén. Trong bảng màu web, các màu trung gian, chuyển tiếp đã bị lược bỏ mất, thay vào đó là các màu tương đương cận kề. Tuy 2 bảng màu này dễ phân biệt nhưng vậy nhưng khi xem một hình ảnh bạn không dễ dàng nhận biết được đó là file .bmp (chưa nén), .gif hay .jpg(ảnh nén). Còn một cách nữa cũng sử dụng kiểu mất dữ liệu để nén hình là giảm độ phân giải, tức là bớt số điểm ảnh trên inch (dots per inch dip). Cách này khi được sử dụng, tùy trường hợp mà phải gia giảm cho phù hợp. Đọ phân giải cao quá thì phú chỗ, nhưng giảm đi nhiều quá thì bị “vỡ hình”. Đối với âm thanh, có nhiều chẩn nén khác nhau như: Windows Media, MP3, Real G2... nhưng thông dụng nhất hiện nay là MP3. Nén theo chuẩn MP3, kích thước file audio có thể được thu nhỏ đi 8 lần so với kích thước ban đầu. Để làm được như vậy, người ta sử dụng một kỹ thuật gọi là lấy mẫu âm, thử nghiệm rồi bỏ bớt những tone mà tai người không nghe được hoặc kém nhạy. Do đó, chất lượng âm của MP3 rất khó phân biệt với âm của đĩa CD chuẩn. • Nén không mất dữ liệu (lossless compression): thể hiện dữ liệu hiệu quả hơn (it bit hơn) mà không làm mất thông tin. Không mất thông tin được hiểu là từ dữ liệu đã được nén, ta có thể khôi phục hoàn toàn dữ liệu ban đầu. Nén không mất dữ liệu bắt buộc sử dụng trong việc nén các văn bản, bảng tính, các đoạn code thực thi... là những loại dữ liệu cần chính xác hoàn toàn. Các thuật toán nén không mất dữ liệu phổ biến gồm: Nén dữ liệu hàng loạt (RLE – Run Length Encoding), Lempel – Ziv (LZ), Huffman, Delta. • Nếu phân loại các phương pháp nén theo kích cỡ (size) dữ liệu được lấy ra từ dữ liệu gốc để nén thì có thể chia thành 04 nhóm: Method Kích cỡ nhóm Dữ liệu gốc (đầu vào) Dữ liệu nén CS Q Cố định Cố định Huffman Cố định Thay đổi Arithmetic Thay đổi Thay đổi Run – Length, LZW Thay đổi Cố định II. KỸ THUẬT MÃ HÓA LỌAT DÀI – RLE (RUN LENGTH ENCODING) 1. Thông tin chung Nén dữ liệu hàng loạt – Run Length Encoding (RLE) là phương pháp nén không mất dữ liệu. RLE hoạt động làm việc bằng cách giảm kích thước vật lý của chuỗi các ký tự lặp lại trong một chuỗi dữ liệu bằng cách biểu diễn khác. Nén dữ liệu hàng loạt có thể áp dụng cho mọi loại dữ liệu mà không phụ thuộc vào nội dung thông tin của dữ liệu đó, tuy nhiên mức độ hiệu quả của việc nén hay tỷ lệ nén rất phụ thuộc vào nội dung dữ liệu. Với những loại dữ liệu mà thông tin trong đó ít lặp lại, việc áp dụng nén RLE có thể gây hiệu ứng ngược – tạo ra dữ liệu sau khi nén dung lượng lớn hơn cả dữ liệu gốc. Bởi vậy, RLE thường chỉ được áp dụng trong việc nén ảnh BMP, TIFF, loại dữ liệu còn nhiều “loạt” dữ liệu lặp lại. 2. Ý tưởng phương pháp Ý tưởng của phương pháp nén dữ liệu hàng loạt là tìm loạt dữ liệu liền nhau lặp lại, thay nó bằng một dữ liệu đại diện khác, mục đích để giảm kích thước dữ liệu gốc. Loạt dữ liệu liền nhau được gọi là “Run Length”. Chúng ta sẽ tìm hiểu ứng dụng của phương pháp trong việc nén dữ liệu ảnh. 3. RLE trong nén ảnh. RLE là ứng viên tự nhiên trong việc nén dữ liệu đồ họa. Một ảnh số chứa những chấm nhỏ là pixel. Mỗi pixel có thể là 1 bit, xác định màu, đen hoặc có thể là nhiều bit để quy định nhiều màu khác nhau cho pixel. Ta có thể coi rằng những pixels được lưu trữ trong một mảng gọi là bitmap trong bộ nhớ. Pixels thường được sắp xếp trong bitmap dưới dạng các dòng, pixels đầu tiên là ở phía trên cùng bên trái, pixel cuối cùng ở dưới cùng bên phải. a. 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 = 308 = 2.5 Đối với ảnh đen trắng chỉ sử dụng 1 bit để biểu diễn 1 điểm ảnh thì phương pháp này tỏ ra rất hiệu quả, ta thấy điều đó qua ví dụ sau : Ví dụ: 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 (54 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 13 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 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 lại. Người ta đã đưa ra cách đó là thêm kí tự tiền tố vào trước độ dài loạt, 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à dấu “+” ta có : 5 8 4 +8 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(i1) 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) b. Thuật toán: Thuật toán như sau : 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 – of bitmap) III. ỨNG DỤNG RLE TRONG MÃ HÓA ẢNH BMP, PCX. 1. Ứng dụng RLE trong mã hóa ảnh BMP. BMP được biết đến với cái tên khác là Windows bitmap , là một định dạng tập tin hình ảnh khá phổ biến. Các tập tin đồ họa lưu dưới dạng BMP thường có đuôi là .BMP hoặc .DIB (Device Independent Bitmap). Cấu trúc file BMP: Header(54 bytes) + Bảng màu (nếu có) + Data(màu từng điểm ảnh). • Header (54 bytes) bfType : Word;(2 ký tự: BM,biểu diễn theo Integer là 19778) bfSize : Longint; (File Size) bfReserved1 : Word; bfReserved2 : Word; bfOffBits : Longint; biSize : Longint; biWidth : Longint; (Độ rộng ảnh) biHeight : Longint; (Chiều cao ảnh) biPlanes : Word; biBitCount : Word; (Số bits màu :1,4,8,24) biCompression : Longint; biSizeImage : Longint; (Kích thước phần Dât ảnh = bfSize bfOffBits) biXPelsPerMeter : Longint;(Độ phân giải theo X,dùng khi in) biYPelsPerMeter : Longint;(Độ phân giải theo Y,dùng khi in) biClrUsed : Longint; biClrImportant : Longint; • Bảng màu Số bit trên mỗi điểm ảnh (bit per pixel), thường được ký hiệu bởi n. Một ảnh BMP nbit có màu. Giá trị n càng lớn thì ảnh càng có nhiều màu, và càng rõ nét hơn. Giá trị tiêu biểu của n là 1 (ảnh đen trắng), 4 (ảnh 16 màu), 8 (ảnh 256 màu), 16 (ảnh 65536 màu) và 24 (ảnh 16 triệu màu). Ảnh BMP 24bit có chất lượng hình ảnh trung thực nhất. Nhưng các loại Bitmap 1bit, 4bits, 8bits không thể khai thác hết nên chỉ liệt kê các màu được dùng trong file. Mỗi màu trong bảng màu được màu được mô tả bằng 4 bytes( BlueByte, GreenByte, RedByte, ReservByte). Ví dụ: bảng màu loại 1 bit chuẩn Windows có 8 bytes : 0,0,0,0,255,255,0 (4 bytes đầu là màu thứ 0; 4 bytes sau là màu thứ 1. Do chỉ có 0 và 1 nên mô tả mỗi điểm ảnh chỉ cần dùng 1 bit). Tương tự như vậy, bảng màu của file 4 bits có 64 bytes, lần lượt là từ màu số 0 đến màu số 15, bảng màu của file 8bits có 1024 bytes(từ 0 đến 255). Chính vì các màu được liệt kê như vậy nên các màu trong file 1 bit, 4bits, 8 bits được gọi là Indexed, còn 24 bits – True. a. Thuộc tính cơ bản chiều cao của ảnh (height), cho bởi điểm ảnh (pixel). chiều rộng của ảnh (width), cho bởi điểm ảnh. Đặc điểm nổi bật nhất của định dạng BMP là tập tin hình ảnh thường không được nén bằng bất kỳ thuật toán nào. Khi lưu ảnh, các điểm ảnh được ghi trực tiếp vào tập tin một điểm ảnh sẽ được mô tả bởi một hay nhiều byte tùy thuộc vào giá trị n của ảnh. Do đó, một hình ảnh lưu dưới dạng BMP thường có kích cỡ rất lớn, gấp nhiều lần so với các ảnh được nén (chẳng hạn GIF, JPEG hay PNG ) Định dạng BMP được hỗ trợ bởi hầu hết các phần mềm đồ họa chạy trên Windows, và cả một số ứng dụng chạy trên MS DOS.Tuy nhiên, do kích thước tập tin ảnh BMP quá lớn, định dạng BMP không phù hợp để trao đổi hình ảnh qua mạng Internet(do hạn chế về tốc độ truyền dữ liệu). Do đó, các các trang thường sử dụng ảnh dạng GIF, JPEG hay PNG. Các định dạng này hỗ trợ các thuật toán nén hình ảnh, vì vậy có thể giảm bớt kích cỡ của ảnh. b. Dữ liệu ảnh Dữ liệu ảnh được lưu từng điểm cho đến hết hàng ngang(từ trái sang phải) và từng hàng ngang cho đến hết ảnh (từ dưới lên trên). Đối với mỗi điểm ảnh loại màu Indexed, ta cần 1, 4 hoặc 8 bits để đặc trưng cho điểm đang xét ứng với màu thứ mấy trong bảng màu. Ví dụ, giá trị 0111(=7) trong loại BMP 4 bits cho biết điểm đó có màu 7(màu xám theo chuẩn Windows). Riêng loại 24bits, không mô tả màu bằng thứ tự trên bảng màu(nếu liệt kê hết bảng màu của nó thì đã tốn cả Gigabyte bộ nhớ và đĩa), mà người ta liệt kê luôn giá trị RGB của 3 màu thành phần. Ví dụ: trắng=(255,255,255), đen=(0,0,0). Như vậy, mỗi điểm ảnh loại 1 bit tốn 18 bytes(nói cách khác, 1 byte lưu được 8 điểm 1 bit), loại 4 bits – ½ byte, loại 8 bits – 1 byte và 24 – 3bytes. Tuy nhiên, tính chung cả bức ảnh thì khối dât không hoàn toàn tỉ lệ thuận như vậy,mà thường hơi lớn hơn một chút. Quy luật chung như sau: Kích thước Dât ảnh bằng dữ liệu 1 hàng nhân với chiều cao của ảnh. Dữ liệu một hàng phụ thuộc vào loại bitmap và độ rộng ảnh: + 1 bit : rowbytes= ((width + 31)div 32)4 (từ 1 đến 32 – hết 4 bytes) + 4 bits : rowbytes= ((width + 7)div 8)4 (từ 1 đến 8 – hết 4 bytes) + 8 bits : rowbytes= ((width + 3)div 4)4 (từ 1 đến 4 – hết 4 bytes) + 24 bits : rowbytes= ((3width + 3)div 4)4. Tóm lại, khi đọc từ file ra,ta phải bỏ bớt những byte hoặc bit dư nếu có, còn khi tạo file mới, lại phải thêm “đuôi” nếu dữ liệu dòng không tròn 4n bytes. Ngoài ra, nếu nhiều điểm chung 1 byte(1 bit – 8 điểm, 4 bits – 2 điểm) thì các bits cao sẽ thuộc điểm phía trái, các bit thấp – bên phải. Ví dụ: Có dữ liệu 96 trong 1 dòng ảnh 4 bits, thì dữ liệu này mô tả 2 điểm liên tiếp và điểm bên trái có giá trị 9616= 6 và điểm bên phải có giá trị 96 mod 16= 0. Vì vậy chúng ta có thể tự biết tạo một hình nền có màu sắc thay đổi theo một quy luật nào đó mà mình muốn. Ứng dựng phố biến nhất của mã hóa ảnh BMP dùng đế giấu tin trong ảnh. 2. Ứng dụng RLE trong mã hóa ảnh PCX. Định dạng ảnh PCX là một trong những định dạng ảnh cổ điển nhất. Nó sử dụng phương pháp mã hóa loạt dài RLC để nén dữ liệu ảnh. Quá trình nén và giải nén được thực hiện trên từng dòng ảnh. Thực tế, phương pháp giải nén PCX kém hiệu quả hơn so với kiểu IMG. Định dạng PCX thường được dùng để lữu trữ ảnh vì thao tác đơn giản, cho phép nén và giải nén nhanh. Tuy nhiên vì cấu trúc của nó cố định,nên trong một số trường hợp nó làm tăng kích thước lưu trữ. Cấu trúc ảnh PCX gồm có 3 phần : Header, Data of Image, Color Palette: a. Data of Image ảnh 24 bits: mỗi điểm ảnh chiếm 3 bytes mô tả ba thành phần : Red, Green,Blue. ảnh 256 màu : + Dữ liệu mỗi điểm ảnh chiếm 1 byte, chỉ số hiệu màu của điểm ảnh này. Màu có giá trị là b, bảng màu được chứa trong mảng P, thì thành phần các màu của điểm ảnh này là Pb,R,Pb,G, Pb,B. + Dữ liệu được nén theo thuật toán RUN_LENGTH với 2 bit cao làm cờ. ảnh 16 màu : + Mỗi điểm ảnh được mô tả bởi một con số, có giá trị từ 0 đến 15. Do vậy, giá trị mỗi điểm ảnh chỉ cần 4 bit để mô tả. + Dữ liệu ảnh được mã hóa theo mặt phẳng bit, sau đó nén theo thuật toán RUN_LENGTH với 2 bit cao làm cơ. b. Color Palette(Bảng màu) Ảnh 24bit: Tệp ảnh không có bảng màu. Ảnh 256 màu: + Bảng màu chiếm 2563=768 byte được đặt ở cuối tệp + Mỗi màu được mô tả bởi 3 byte thể hiện các thành phần: RED, GREEN, BLUE. + Giá trị của các thành phần RED, GREEN, BLUE được lưu trữ ở 6 bit cao. Ảnh 16 màu : + Bảng màu chiếm 163=48 byte + Mỗi màu được mô tả bởi 3 byte, thể hiện các thành phần : RED, GREEN, BLUE. + Không phụ thuộc vào số lượng màu, 48byte của baangr16 màu luôn có mặt trong phần Header. c. Header Header của các tệp ảnh PCX gồm 128 byte, được mô tả chi tiết: + 1 byte: chỉ ra kiểu định dạng. Nếu là kiểu PCXPCC nó có giá trị là 0Ah. + 1 byte: chỉ ra version sử dụng để nén ảnh, có thể có các giá trị sau: 0: version 2.5. 2: version 2.8 với bảng màu. 3: version 2.8 hay 3.0 không có bảng màu. 5: version 3.0 có bảng mà + 1 byte: chỉ ra phương pháp mã hoá. Nếu là 0 thì mã hoá theo phương pháp BYTE PACKED, nếu không là phương pháp RLE. + 1 byte: số bit cho một điểm ảnh plane. + 4 bytes: toạ độ góc trái trên của ảnh. Với kiểu PCX nó có giá trị là (0,0); còn PCC thì khác (0,0). + 4 bytes: toạ độ góc phải dưới. + 1 byte: kích thước bề rộng và bề cao của ảnh. + 1 byte: số điểm ảnh. + 1 byte: độ phân giải màn hình. + 1 byte: + 48 bytes: chia thành 16 nhóm, mỗi nhóm 3 byte. Mỗi nhóm này chứa thông tin về một thanh ghi màu. Như vậy ta có 16 thanh ghi màu. + 1 byte: số bit plane mà ảnh sử dụng. Với ảnh 16 màu, giá trị này là 4, với ảnh 256 màu (1 pixel 8 bit) thì số bit plane lại là 1. + 1 byte: số bytes cho một dòng quét ảnh. + 2 bytes: kiểu bảng màu. + 60 byte: không dùng. Định dạng PCX thường được dùng để lữu trữ ảnh vì thao tác đơn giản, cho phép nén và giải nén nhanh. Tuy nhiên vì cấu trúc của nó cố định,nên trong một số trường hợp nó làm tăng kích thước lưu trữ. TÀI LIỆU THAM KHẢO STT TÊN TÀI LIỆU ĐỊA CHỈ TÁC GIẢ 1 Nhập Môn Xử Lý Ảnh Số Lương Mạnh Bá, Nguyễn Thanh Thuỷ 2 Các phương pháp nén ảnh số cơ bản http:www.htu.edu.vnkhoakythuatcongnghecacphuongphapnenanhsocoban.html 3 Tiểu luận môn mật mã và an toàn dữ liệu nén dữ liệu độ dài hàng loạt run length encoding http:123doc.vndocument2337045tieuluanmonmatmavaantoandulieunendulieudodaihangloatrunlengthencoding.htm 4 Luận văn Tìm hiểu một số phương pháp nén ảnh Luận văn, đồ án, đề tài tốt nghiệp
Trang 1HỌC VIỆN QUẢN LÝ GIÁO DỤC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚN
MÔN XỬ LÝ ẢNH
ĐỀ TÀI TÌM HIỂU KỸ THUẬT MÃ HÓA LOẠT DÀI – RLE (RUN LENGTH ENCODING) VÀ ỨNG DỤNG TRONG MÃ HÓA
ẢNH BMP, PCX
NHÓM SINH VIÊN:
Trần Quốc Tuấn Trần Thị Yến
Hà Nội, ngày 01 / 11 /2014
Trang 2MỤC LỤC
LỜI NÓI ĐẦU 2
I TỔNG QUAN VỀ NÉN ẢNH 3
1 Giới thiệu 3
2 Các khái niệm cơ bản 3
3 Cách phân loại nén ảnh 4
4 Các phương pháp nén 5
II KỸ THUẬT MÃ HÓA LỌAT DÀI – RLE (RUN LENGTH ENCODING) 7
1 Thông tin chung 7
2 Ý tưởng phương pháp 7
3 RLE trong nén ảnh 7
III ỨNG DỤNG RLE TRONG MÃ HÓA ẢNH BMP, PCX 11
1 Ứng dụng RLE trong mã hóa ảnh BMP 11
2 Ứng dụng RLE trong mã hóa ảnh PCX 14
TÀI LIỆU THAM KHẢO 17
Trang 3LỜI NÓI ĐẦU
Trong xã hội hiện nay, khi công nghệ thông tin (CNTT) ngày càng phát triển
và tác động và mọi mặt của cuộc sống Một trong những nhu cầu lớn của CNTT là việc lưu trữ thông tin Nếu chỉ đơn thuần lưu trữ dữ liệu thì dung lượng lưu trữ sẽ rất cao Do đó gây nên sự tiêu tốn tài nguyên lưu trữ Để giải quyết vẫn đề này, chúng
ta đã nghiên cứu đến các thuật toán nén dữ liệu nhằm hướng tới việc sử dụng ít dung lượng hơn nhưng dữ liệu gốc vẫn thể hiện được chính xác hoặc tương đối chính xác
dữ liệu gốc ban đầu
Nén dữ liệu rất quan trọng, giúp giảm tải tài nguyên lưu trữ Tuy nhiên, nén
dữ liệu chúng ta cần tiêu tốn tài nguyên vào việc nén và giải nén, đòi hỏi nhiều hơn
về phần cứng và xử lý Tuy nhiên, với sự phát triển của khoa học công nghệ, năng lực tính toán của thiết bị ngày càng cao, và nén dữ liệu ngày càng trở nên quan trọng
và được ứng dụng rộng rãi
Xử lý ảnh là một trong những 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, nhiều 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ữ
Chúng tôi xin chân thành cảm ơn Thầy Lương Mạnh Bá đã tận tình hướng dẫn
và truyền thụ kiến thức trong suốt thời gian qua để chúng tôi có thể hoàn thiện bài tập lớn này
Nhóm sinh viên !
Trang 4I TỔNG QUAN VỀ NÉN ẢNH
1 Giới thiệu
Nén ảnh là một kỹ thuật mã hóa các ảnh số hóa 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í tron việc lưu trữ và 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 ả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
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
2 Các khái niệm cơ bản
Ả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ố hóa ả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 tọa độ x, y
và màu Cặp tọa độ x, y tạo nên độ phân giản (resolution) Màn hình máy tính
có nhiều loại độ phân giải khác nhau như: 320 x 200, 640 x 350, 1024 x 768
Trang 5 Mức xám (Graylevel)
Mức xám là kết quả sự mã hóa 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 hóa
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, mang lại 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 là một trong các đặc trung 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ước chính là số bit biểu diễn toàn bộ bức ảnh Đối với ảnh video, kích thước chính là số bit để biểu diễn một khung hình video (video frame)
3 Cách phân loại nén ảnh
- Dựa vào nguyên lý nén: Nén không mất thông tin: Sau khi giải nén ta thu được chính xác dữ liệu gốc Nén có mất thông tin: Sau khi giải nén ta
không thu được dữ liệu như bản gốc
Trang 6- Dựa vào cách thức thực hiện nén: Phương pháp không gian: 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: Tác động lên sự biến đổi của ảnh gốc
- Dựa vào triết lý của sự mã hóa: Các phương pháp nén thế hệ thứ nhất: Gồm các phương pháp mà mức độ tính toán là đơn giản Các phương pháp
nén thế hệ thứ hai: dựa vào độ bão hòa của tỷ lệ nén
4 Các phương pháp nén
Nén mất dữ liệu (lossy compression): Hay gặp nhất trong công nghệ thông tin
là nén hình ảnh và âm thanh Có nhiều giải thuật được đặt ra để đáp ứng yêu cầu giảm thiểu kích thước của file ảnh, file âm thanh sao cho vẫn duy trì được chất lượng ở mức độ chấp nhận được Với việc nén ảnh, những giải thuật này đều dựa trên nền tảng là loại bớt những màu mà mắt người không hoặc khó cảm nhận được, chỉ giữ lại những màu mà mắt người không hoặc khó cảm nhận được, chỉ giữ lại những màu chủ yếu thực sự ảnh hưởng tích cực lên khả năng cảm nhận màu của mắt Nếu đã từng biên tập hình ảnh bằng Photoshop, bạn sẽ dễ dàng nhận thấy sự khác biệt khá lớn giữa bảng màu chuẩn và bảng màu dùng cho hình ảnh tải lên từ web, đó chính là hình nén Trong bảng màu web, các màu trung gian, chuyển tiếp đã bị lược bỏ mất, thay vào đó là các màu tương đương cận kề Tuy 2 bảng màu này dễ phân biệt nhưng vậy nhưng khi xem một hình ảnh bạn không dễ dàng nhận biết được đó là file bmp (chưa nén), gif hay jpg(ảnh nén) Còn một cách nữa cũng sử dụng kiểu mất dữ liệu
để nén hình là giảm độ phân giải, tức là bớt số điểm ảnh trên inch (dots per inch - dip) Cách này khi được sử dụng, tùy trường hợp mà phải gia giảm cho phù hợp Đọ phân giải cao quá thì phú chỗ, nhưng giảm đi nhiều quá thì bị
“vỡ hình” Đối với âm thanh, có nhiều chẩn nén khác nhau như: Windows Media, MP3, Real G2 nhưng thông dụng nhất hiện nay là MP3 Nén theo chuẩn MP3, kích thước file audio có thể được thu nhỏ đi 8 lần so với kích
Trang 7thước ban đầu Để làm được như vậy, người ta sử dụng một kỹ thuật gọi là lấy mẫu âm, thử nghiệm rồi bỏ bớt những tone mà tai người không nghe được hoặc kém nhạy Do đó, chất lượng âm của MP3 rất khó phân biệt với âm của đĩa CD chuẩn
Nén không mất dữ liệu (lossless compression): thể hiện dữ liệu hiệu quả hơn
(it bit hơn) mà không làm mất thông tin Không mất thông tin được hiểu là từ
dữ liệu đã được nén, ta có thể khôi phục hoàn toàn dữ liệu ban đầu Nén không mất dữ liệu bắt buộc sử dụng trong việc nén các văn bản, bảng tính, các đoạn code thực thi là những loại dữ liệu cần chính xác hoàn toàn Các thuật toán nén không mất dữ liệu phổ biến gồm: Nén dữ liệu hàng loạt (RLE – Run Length Encoding), Lempel – Ziv (LZ), Huffman, Delta
dữ liệu gốc để nén thì có thể chia thành 04 nhóm:
Method
Kích cỡ nhóm
Dữ liệu gốc (đầu
Trang 8II KỸ THUẬT MÃ HÓA LỌAT DÀI –
RLE (RUN LENGTH ENCODING)
1 Thông tin chung
Nén dữ liệu hàng loạt – Run Length Encoding (RLE) là phương pháp nén không mất dữ liệu RLE hoạt động làm việc bằng cách giảm kích thước vật lý của chuỗi các ký tự lặp lại trong một chuỗi dữ liệu bằng cách biểu diễn khác Nén dữ liệu hàng loạt có thể áp dụng cho mọi loại dữ liệu mà không phụ thuộc vào nội dung thông tin của dữ liệu đó, tuy nhiên mức độ hiệu quả của việc nén hay tỷ lệ nén rất phụ thuộc vào nội dung dữ liệu Với những loại dữ liệu mà thông tin trong đó ít lặp lại, việc áp dụng nén RLE có thể gây hiệu ứng ngược – tạo ra dữ liệu sau khi nén dung lượng lớn hơn cả dữ liệu gốc Bởi vậy, RLE thường chỉ được áp dụng trong việc nén ảnh BMP, TIFF, loại dữ liệu còn nhiều “loạt” dữ liệu lặp lại
2 Ý tưởng phương pháp
Ý tưởng của phương pháp nén dữ liệu hàng loạt là tìm loạt dữ liệu liền nhau lặp lại, thay nó bằng một dữ liệu đại diện khác, mục đích để giảm kích thước dữ liệu gốc Loạt dữ liệu liền nhau được gọi là “Run Length” Chúng ta sẽ tìm hiểu ứng dụng của phương pháp trong việc nén dữ liệu ảnh
3 RLE trong nén ảnh
RLE là ứng viên tự nhiên trong việc nén dữ liệu đồ họa Một ảnh số chứa những chấm nhỏ là pixel Mỗi pixel có thể là 1 bit, xác định màu, đen hoặc có thể là nhiều bit để quy định nhiều màu khác nhau cho pixel Ta có thể coi rằng những pixels
Trang 9được lưu trữ trong một mảng gọi là bitmap trong bộ nhớ Pixels thường được sắp xếp trong bitmap dưới dạng các dòng, pixels đầu tiên là ở phía trên cùng bên trái, pixel cuối cùng ở dưới cùng bên phải
a 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 = 30/8 = 2.5
Đối với ảnh đen trắng chỉ sử dụng 1 bit để biểu diễn 1 điểm ảnh thì phương pháp này tỏ ra rất hiệu quả, ta thấy điều đó qua ví dụ sau :
Ví dụ: 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
Trang 10đị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 13 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
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 lại Người ta đã đưa
ra cách đó là thêm kí tự tiền tố vào trước độ dài loạt, 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à dấu “+” ta có : 5 8 4 +8 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)
b Thuật toán: Thuật toán như sau :
Trang 11- 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 – of bitmap)
Trang 12III ỨNG DỤNG RLE TRONG MÃ HÓA
ẢNH BMP, PCX
1 Ứng dụng RLE trong mã hóa ảnh BMP
BMP được biết đến với cái tên khác là Windows bitmap , là một định dạng tập tin hình ảnh khá phổ biến Các tập tin đồ họa lưu dưới dạng BMP thường có đuôi
là BMP hoặc DIB (Device Independent Bitmap)
Cấu trúc file BMP: Header(54 bytes) + Bảng màu (nếu có) + Data(màu từng điểm ảnh)
bfType : Word;(2 ký tự: BM,biểu diễn theo Integer là 19778)
bfSize : Longint; (File Size)
bfReserved1 : Word;
bfReserved2 : Word;
bfOffBits : Longint;
biSize : Longint;
biWidth : Longint; (Độ rộng ảnh)
biHeight : Longint; (Chiều cao ảnh)
biPlanes : Word;
biBitCount : Word; (Số bits màu :1,4,8,24)
biCompression : Longint;
biSizeImage : Longint; (Kích thước phần Dât ảnh = bfSize- bfOffBits) biXPelsPerMeter : Longint;(Độ phân giải theo X,dùng khi in)
biYPelsPerMeter : Longint;(Độ phân giải theo Y,dùng khi in)
Trang 13biClrUsed : Longint;
biClrImportant : Longint;
Số bit trên mỗi điểm ảnh (bit per pixel), thường được ký hiệu bởi n Một
ảnh BMP n-bit có màu Giá trị n càng lớn thì ảnh càng có nhiều màu, và càng
rõ nét hơn Giá trị tiêu biểu của n là 1 (ảnh đen trắng), 4 (ảnh 16 màu), 8 (ảnh
256 màu), 16 (ảnh 65536 màu) và 24 (ảnh 16 triệu màu) Ảnh BMP 24-bit có chất lượng hình ảnh trung thực nhất Nhưng các loại Bitmap 1bit, 4bits, 8bits không thể khai thác hết nên chỉ liệt kê các màu được dùng trong file Mỗi màu trong bảng màu được màu được mô tả bằng 4 bytes( BlueByte, GreenByte, RedByte, ReservByte)
Ví dụ: bảng màu loại 1 bit chuẩn Windows có 8 bytes : 0,0,0,0,255,255,0 (4 bytes đầu là màu thứ 0; 4 bytes sau là màu thứ 1 Do chỉ có 0 và 1 nên mô
tả mỗi điểm ảnh chỉ cần dùng 1 bit) Tương tự như vậy, bảng màu của file 4 bits có 64 bytes, lần lượt là từ màu số 0 đến màu số 15, bảng màu của file 8bits có 1024 bytes(từ 0 đến 255) Chính vì các màu được liệt kê như vậy nên các màu trong file 1 bit, 4bits, 8 bits được gọi là Indexed, còn 24 bits – True
a Thuộc tính cơ bản
- chiều cao của ảnh (height), cho bởi điểm ảnh (pixel)
- chiều rộng của ảnh (width), cho bởi điểm ảnh
Đặc điểm nổi bật nhất của định dạng BMP là tập tin hình ảnh thường không được nén bằng bất kỳ thuật toán nào Khi lưu ảnh, các điểm ảnh được ghi trực tiếp vào tập tin - một điểm ảnh sẽ được mô tả bởi một hay nhiều byte tùy thuộc
vào giá trị n của ảnh Do đó, một hình ảnh lưu dưới dạng BMP thường có kích
cỡ rất lớn, gấp nhiều lần so với các ảnh được nén (chẳng hạn GIF, JPEG hay PNG )