Tải bản đầy đủ (.doc) (68 trang)

Tìm Hiểu Một Số Phương Pháp Nén Ảnh.doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (590.49 KB, 68 trang )

Đồ án tốt nghiệp

Tìm hiểu một số phương pháp nén ảnh

LỜI CẢM ƠN !
Em xin bày tỏ lòng biết ơn sâu sắc nhất tới PGS. TS. Ngô Quốc Tạo,
thầy đã tận tình hướng dẫn và giúp đỡ em rất nhiều trong quá trình thực tập
và tìm hiểu nghiên cứu đề tài được giao để em có thể hồn thành tốt báo cáo
tốt nghiệp của mình.
Em xin chân thành cảm ơn sự dạy bảo của các thầy giáo, cô giáo Khoa
Công Nghệ Thông Tin - Trường Đại học Dân Lập Hải Phòng đã trang bị
cho em những kiến thức cơ bản để em có thể hồn thành báo cáo tốt nghiệp
về đề tài được giao.
Trong quá trình nghiên cứu đề tài mặc dù đã được các thầy cô giáo
hướng dẫn tận tình nhưng do nhiều nguyên nhân chủ quan và khách quan
nên đề tài khơng tránh khỏi sai sót .Em rất mong được các thầy cơ giáo chỉ
dẫn ,đóng góp những ý kiến quý báu giúp em hoàn thiện hơn báo cáo tốt
nghiệp , phát triển và mở rộng đề tài đựoc giao .
Em xin chân thành cám ơn !
Hải Phòng, ngày

tháng

năm

2007
Sinh viên
Tạ Minh Thắng

Mục lụcc lục lụcc
Sinh viên thực hiện : Tạ Minh Thắng CT 702


1

Trang :


Đồ án tốt nghiệp

Tìm hiểu một số phương pháp nén nh

Mở đầu............................................................................................................................3
CHơng I: Giới thiệu tổng quan về nén ảnh..............................................4
I.1.Giới thiệu về ảnh số và xử lý ảnh số.......................................................................4
I.1.1.ảnh số................................................................................................................4
I.1.2.Xử lý ảnh số.......................................................................................................5
I.2.Mục đích và sự cần thiết của nén ảnh ...................................................................6
I.3.Các khái niệm cơ bản..............................................................................................7
Chơng II: Các phơng pháp nén ảnh................................................................9
II.1.Cách phân loại các phơng pháp nén ảnh.............................................................9
II.1.1.Cách phân loại dựa vào nguyên lý nén.........................................................9
II.1.2.Cách phân loại dựa vào cách thức thực hiện nén.........................................9
II.1.3.Cách phân loại dựa vào lý thuyết mà hoá...................................................10
II.1.4.Quá trình nén và giải nén ............................................................................10
II.2.Phơng pháp mà hoá độ dài loạt RLE.................................................................11
II.2.1.Nguyên tắc ....................................................................................................11
II.2.2.Thuật toán......................................................................................................13
II.2.3.Một số thủ tục chơng trình ..........................................................................14
II.3.Phơng pháp mà hoá Huffman.............................................................................19
II.3.1. Nguyên tắc....................................................................................................19
II.3.2. Thuật toán.....................................................................................................19
II.3.3.Một số thủ tục chơng trình ..........................................................................24

II.4.Phơng pháp mà hoá LZW...................................................................................27
II.4.1.Nguyên tắc.....................................................................................................27
II.4.2. Thuật toán.....................................................................................................31
II.4.3.Một số thủ tục chơng trình ..........................................................................34
II.5.Phơng pháp mà hoá JPEG..................................................................................38
II.5.1.Nguyên tắc.....................................................................................................38
II.5.2.Thuật toán......................................................................................................38
II.5.3.Một số thủ tục chơng trình ..........................................................................48
II.6.Phơng pháp mà hoá JPEG2000..........................................................................54
II.6.1. Lch s ra đời và phát triển chuẩn JPEG2000..........................................54
II.6.2.Các tính năng của JPEG2000.......................................................................54
II.6.3.Các bước thực hiện nén ảnh theo chuẩn JPEG2000.................................55
II.6.3.1.Xử lý trước biến đổi...............................................................................55
II.6.3.2. Biến đổi liên thành phần .....................................................................55
II.6.3.3. Biến đổi riêng thành phần (biến đổi Wavelet)....................................56
II.6.3.4. Lượng tử hoá - Giải lượng tử hoá ......................................................57
II.6.3.5. Mã hoá và kết hợp dịng dữ liệu sau mã hố......................................58
II.6.3.6. Phương pháp mã hoá SPIHT...............................................................59
II.6.3.7. Phương pháp mã hoá EZW..................................................................60
II.6.4.So sánh chuẩn JPEG2000 với JPEG và các chuẩn nén ảnh tĩnh khác.....62
Ch¬ng III: Cài đặt chơng trình và thử nghiệm..................................66
Kết luận......................................................................................................................69

M U

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

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 lồ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ƯƠNG PHÁP NÉN ẢNH” được sự hướng dẫn
của PGS .TS . Ngô Quốc Tạo em đã đi sâu nghiên cứu một số phương pháp
nén ảnh phổ biến như : mã loạt dài RLE, HUFFMAN, LZW, JPEG và
phươ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ương mét
giới thiệu tổng quan về xử lý ảnh, mục đích chương này là giới thiệu một số
khái niệm cần biết về ảnh số và xử lý ảnh số. Chương hai sẽ giới thiệu một
số phương pháp nén ảnh và cách phân loại các phương pháp nén ảnh.
Chương ba sẽ giới thiệu về chương trình thử nghiệm và kết quả đạt đựơc
của chươ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.

Sinh viên thực hiện : Tạ Minh Thắng CT 702
3

Trang :


Đồ án tốt nghiệp

Tìm hiểu một số phương pháp nén ảnh

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ường độ đen nhất và 255 biểu diễn cho mức
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

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.

Sinh viên thực hiện : Tạ Minh Thắng CT 702
4

Trang :


Đồ án tốt nghiệp

Tìm hiểu một số phương pháp nén 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 Biu din ca mt 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:

Lu trữ

CAMERA

Thu nhận
ảnh

Số hoá

Phân
tích ảnh

Nhận dạng
ddạngạng

SENSOR

Lu trữ

Hệ quyết
định

I.2.Mc ớch v s cn thit 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

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

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
đồ hoạ qua đườ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è hố. 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.

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ương pháp nén ảnh

• 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 hố .

• Dữ liệu
Trong một bài tố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 tố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.

Sinh viên thực hiện : Tạ Minh Thắng CT 702
7

Trang :


Đồ án tốt nghiệp

Tìm hiểu một số phương pháp nén ảnh

• 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ước chính là số bit biểu diễn tồ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).

CHƯƠNG II:
CÁC PHƯƠ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:

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

Nén bảo tồ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 tồn thơng tin chỉ đạt hiệu quả nhỏ so với phương pháp nén khơng bảo
tồn thơng tin.
Nén khơng bảo tồ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:
Phươ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 tố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ương pháp kim tự
tháp Laplace, phương pháp dựa vào vùng gia tăng, phương pháp tách hợp.

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


II.1.4.Q 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. Q
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ó hồn tồn giống với dữ liệu
gốc ban đầu hay khơng.
Tóm lại q 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ơ đồ di õy:

Quá trình nén
Dữ liệu gốc

Dữ liệu nén
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 :


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

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ữ tồ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
Đố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 :
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

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

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 hồn tồ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
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à “+” 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

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

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 tốn:
Thuật tố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. Ngồ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ương trình :

• Chươ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++)

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

{
state_start:
if ( EndOfLine(src_index))
{
pRLEBits[dst_index++] = 1;
pRLEBits[dst_index++] = pSrcBits[src_index];
src_index++;
goto end_of_line;
}
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++)
{

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 ( 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;
}

}

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) ||

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
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++];
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;
}


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

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;
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;

Sinh viên thực hiện : Tạ Minh Thắng CT 702
17

Trang :


Đồ án tốt nghiệp

Tìm hiểu một số phương pháp nén ảnh

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;
}
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;
}

Sinh viên thực hiện : Tạ Minh Thắng CT 702
18

Trang :


Đồ án tốt nghiệp

Tìm hiểu một số phương pháp nén ảnh

II.3.Phương pháp mã hoá Huffman:
II.3.1. Nguyên tắc:
Phương pháp mã hoá Huffman là phương pháp dựa vào mơ hình thống
kê. 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ương pháp

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ã hố 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 tốn:

• Thuật tốn mã hố 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 tố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à q trình tạo cây nhị phân Huffman ,phần tử có tần suất thấp ở bên phải,
phần tử kia ở bên trái. Sau khi cây đã tạo xong ngườ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ã.

Sinh viên thực hiện : Tạ Minh Thắng CT 702
19

Trang :


Đồ án tốt nghiệp


Tìm hiểu một số phương pháp nén ảnh

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ố nht tệp bất kỳ có tần suất xuất hiện của các kí tự số nhp bất kỳ có tần suất xuất hiện của các kí tự số nht kỳ có tần suất xuất hiện của các kí tự số nh có tần suất xuất hiện của các kí tự số nhn suất kỳ có tần suất xuất hiện của các kí tự số nht xuất kỳ có tần suất xuất hiện của các kí tự số nht hiệp bất kỳ có tần suất xuất hiện của các kí tự số nhn của các kí tự số nha các kí tự số nh số nh nh bảngng
sau.
Ký tù
0

Tần suất
1532

1

152

2

323

3

412

4

226


5

385

6

602

7

92

8

112

9

87
Bảng tần suất sắp xếp giảm dần

0
6
3
5
2
4
1
8
7

9

Kí tù
0

Xác suất (%)
0.3906

6

0.1535

3

0.1051

5

0.0982

2

0.0824

4

0.3905
0.3905
1
0.1535

0.1535
0.1051
0.1051
8
0.0982
0.0982
7
0.0824
0.0824
0.0824
9
0.0577
0.0674
0.0577
0.0577
0.0388
0.0457
Sinh
viên
thực
hiện
: Tạ
0.0388
0.0286
0.0457
20
0.0286
0.0235
0.0222
0.3905

0.1535
0.1051
0.0982

0.3906
0.1535
0.1051
0.1034
0.0982
0.0824
0.0674

0.0577

0.3905
0.0388
0.1535
0.1498
0.0286
0.1051
0.0235
0.1034
0.0982
0.0222

0.3905
0.2016
0.1535
0.1498
0.1051


Minh Thắng CT 702

0.3905
0.2549
0.2016
0.1535

0.3905
0.3551
0.2549

Trang :

0.6100
0.3905



×