HỌ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
1
MỤ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
2
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 !
3
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
4
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 = 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.
5
- 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
6
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
7
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
8
đượ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
9
đị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 :
10
- 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)
11
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)
12
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 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 )
13
Đị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 1/8 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= ((3*width + 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
14
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ị 96/16= 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à P[b],R,P[b],G, P[b],B.
15
+ 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 256*3=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 16*3=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 PCX/PCC 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.
16
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ữ.
17
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
/>nghe/cac-phuong-phap-nen-anh-so-co-ban.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
/>tieu-luan-mon-mat-ma-va-an-toan-du-
lieu-nen-du-lieu-do-dai-hang-loat-run-
length-encoding.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