Tải bản đầy đủ (.pdf) (71 trang)

Đề án tốt nghiệp: Tìm hiểu một số phương pháp nén ảnh ppt

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 (1023.01 KB, 71 trang )









Đề á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-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 1

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ể hoà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ể hoà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





Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 2
Mục lục
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 trin chun JPEG2000 54
II.6.2.Cỏc tớnh nng ca JPEG2000 54
II.6.3.Cỏc bc thc hin nộn nh theo chun JPEG2000 55
II.6.3.1.X lý trc bin i 55
II.6.3.2. Bin i liờn thnh phn 55
II.6.3.3. Bin i riờng thnh phn (bin i Wavelet) 56
II.6.3.4. Lng t hoỏ - Gii lng t hoỏ 57
II.6.3.5. Mó hoỏ v kt hp dũng d liu sau mó hoỏ 58
II.6.3.6. Phng phỏp mó hoỏ SPIHT 59
II.6.3.7. Phng phỏp mó hoỏ EZW 60

II.6.4.So sỏnh chun JPEG2000 vi JPEG v cỏc chun nộn nh tnh khỏc 62
Ch-ơng III: Cài đặt ch-ơng trình và thử nghiệm 66
Kết luận 69

Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 3
Mở đầ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-ơ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.

Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 4

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à 2
8
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.

Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 5










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:










Độ sáng trung bình trong mỗi hình
chữ nhật = giá trị một điểm ảnh.
Pixel
or PEL
CAMERA
SENSOR
Thu nhận
ảnh
Số hoá
Phân
tích ảnh
Hệ quyết
định
Nhận dạng
ddạngạng
L-u trữ
L-u trữ
Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 6
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 đồ
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 tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 7
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
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 tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 8
Nén dữ liệu
Nén dữ liệu l qu trình gim 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-ớ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).












Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 9
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:


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ị gic đó 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.


Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 10
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-ơ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.


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.
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:

Hình 2.1 : Quá trình nén và giải nén
Quá trình nén
Quá trình giải nén
Dữ liệu gốc
Dữ liệu nén
Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 11
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
Đố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)
Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 12
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

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
Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 13
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 :
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)



§å ¸n tèt nghiÖp T×m hiÓu mét sè ph-¬ng ph¸p nÐn ¶nh
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702 Trang : 14
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++)
{
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;
§å ¸n tèt nghiÖp T×m hiÓu mét sè ph-¬ng ph¸p nÐn ¶nh
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702 Trang : 15
}
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;
}
}
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) ||
§å ¸n tèt nghiÖp T×m hiÓu mét sè ph-¬ng ph¸p nÐn ¶nh

Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702 Trang : 16
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++];
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;
}
§å ¸n tèt nghiÖp T×m hiÓu mét sè ph-¬ng ph¸p nÐn ¶nh
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702 Trang : 17

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;
§å ¸n tèt nghiÖp T×m hiÓu mét sè ph-¬ng ph¸p nÐn ¶nh
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702 Trang : 18
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;
}











Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 19
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ã 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 ở 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
phi ta thêm một bit 1 vo từ m, mỗi lần xuống bên tri ta thêm một bit
0 vo từ m.
Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 20
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- bảng sau.
Ký tự
Tần suất
0
1
2
3
4
5
6
7
8
9
1532
152
323

412
226
385
602
92
112
87

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












Kí tự
Xác suất (%)
0
6
3
5
2
4
1

8
7
9
0.3906
0.1535
0.1051
0.0982
0.0824
0.0577
0.0388
0.0286
0.0235
0.0222
Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 21










Mô tả : Ta tiến hành hợp nhất hay cộng 2 tần suất nhỏ nhất ở cuối
bảng để thu đ-ợc giá trị tần suất mới sau đó đ-a giá trị này trở lại bảng tần
suất ban đầu đã bỏ đi 2 tần suất thành phần tạo thành nó. Sau khi đ-a giá trị
mới vào bảng ta phải tiến hành sắp xếp lại toàn bộ bảng , lúc này số l-ợng
tần suất chỉ còn là n-1 nếu ban đầu số l-ợng tần suất là n. Tiếp tục thực hiện

lần l-ợt theo thứ tự nh- trên cho đến khi nào số l-ợng tần suất chỉ còn lại
duy nhất 1 giá trị.

Việc tạo cây nhị phân có thể đ-ợc thực hiện theo một thuật toán sau:
1. Tất cả những ký tự ban đầu đ-ợc xem nh- là những ký tự giao điểm
tự do.
2. Hai nút tự do với tần số xuất hiện thấp nhất đ-ợc phân công tới một
nút gốc với giá trị bằng với tổng của hai nút con tự do.
3. Hai nút con đ-ợc chuyển khỏi danh sách nút tự do. Chuyển nút gốc
mới tạo thành công vào danh sách.
4. B-ớc hai sang b-ớc ba đ-ợc lặp cho đến khi chỉ có 1 nút tự do về phía
trái. Nút tự do này là gốc của cây.
Quá trình xây dựng cây nhị phân Huffman đ-ợc thể hiện chi tiết nh-
trong hình sau :
0.3905
0.6100

0.3905

0
6
5
2
4
1
8
7
9
3
0.3905


0.1535

0.1051

0.0982

0.0824

0.0577

0.0457

0.0388

0.0286

0.3905

0.1535

0.1051

0.0982

0.0824

0.0674

0.0577


0.0457

0.3906

0.1051

0.1034
0.0982

0.0824

0.0674


0.3905

0.1535

0.1498
0.1051

0.1034

0.0982



0.3905


0.2016

0.1535

0.1498
0.1051


0.3905

0.2549

0.2016
0.1535


0.3905

0.3551
0.2549


0.0286

0.0388
0.1535

0.0235

0.0222


0.0577

0.0824

0.0982

0.1051

0.1535

§å ¸n tèt nghiÖp T×m hiÓu mét sè ph-¬ng ph¸p nÐn ¶nh
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702 Trang : 22





























H×nh 2.3 : Qu¸ tr×nh t¹o c©y nhÞ ph©n

B0
0 6 3 5 2 4 1 8 7 9
B1
0 6 3 5 2 4 1 8
B2
0 6 3 5 2 4
B3
0 6 3 5 2
B4
0 6 3 5
B5
0 6 3
B6
0 6
B7
0
B8

0
7
9
1
8
7
9
4
1
8
2
7
9
4
5
1
8
2
3
7
9
4
5
6
7
9
4
5
6
1

2
3
8
§å ¸n tèt nghiÖp T×m hiÓu mét sè ph-¬ng ph¸p nÐn ¶nh
Sinh viªn thùc hiÖn : T¹ Minh Th¾ng CT 702 Trang : 23
Ta cã c©y m· Huffman t-¬ng øng nh- sau :













B¶ng tõ m· g¸n cho c¸c kÝ tù sè nh- sau:

KÝ tù

0
6
3
5
2
4
1

8
7
9
1
001
011
0001
0100
00000
01010
01011
000010
000011


0 1
3
7
9
4
5
6
1
8
2
0
Đồ án tốt nghiệp Tìm hiểu một số ph-ơng pháp nén ảnh
Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 24
Nh- vậy với ví dụ sau đây ta có thể tiến hành mã hoá nh- sau:
Chuỗi nguồn : 00000000006666693333 kích th-ớc = 20*8=160 bit

Sử dụng mã Huffman theo bảng trên
kích th-ớc =10*1+5*3+1*6+4*3= 43 bit
Vì gía trị trị 0 xuất hiện 10 lần nh-ng chỉ dùng 1 bit để thể hiện, giá trị 6
xuất hiện 5 lần dùng 3 bit để thể hiện ,giá trị 9 dùng 6 bit và giá trị 3 xuất
hiện 4 lần dùng 3 bit để thể hiện.
Tỷ số nén = 160 / 43 = 3.7

Trong ph-ơng pháp mã Huffman mã của ký tự là duy nhất và không mã
nào là phần bắt đầu của mã tr-ớc.Vì vậy khi đọc theo từng bit từ đầu đến
cuối tệp nén ta có thể duyệt cây mã cho đến một lá, tức là ký tự đã đ-ợc giải
mã. Việc giải mã chắc chắn phải sử dụng cây nhị phân giống nh- trong mã
hoá. Để đọc, giải mã đ-ợc yêu cầu phải sử dụng theo đúng tiêu chuẩn nhất
định .

II.3.3.Một số thủ tục ch-ơng trình :
Ch-ơng trình nén ph-ơng pháp HUFFMAN :

bool CompressHuffman(BYTE*pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen)
{
CHuffmanNode nodes[511];
for(int nCount = 0; nCount < 256; nCount++)
nodes[nCount].byAscii = nCount;
for(nCount = 0; nCount < nSrcLen; nCount++)
nodes[pSrc[nCount]].nFrequency++;
qsort(nodes, 256, sizeof(CHuffmanNode), frequencyCompare);
int nNodeCount = GetHuffmanTree(nodes);
int nNodeSize = sizeof(DWORD)+sizeof(BYTE);

×