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

Nghiên cứu Lý thuyết vùng cross point (vùng cross point lý tưởng) và các chuẩn nén tổn hao, cải tiến chương trình nén không tổn hao đang có thành chương trình nén tổn hao ảnh .BMP.

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 (382.17 KB, 25 trang )

Đồ án tin học GVHD: Đặng Thành Tín
Trường Đại Học Bách Khoa TP Hồ Chí Minh
Chương trình đào tạo Kỹ Sư chất lượng cao Việt-Pháp khóa 2005-2010
ĐỜ ÁN TIN HỌC
ĐỀ TÀI 6: Nghiên cứu Lý thuyết vùng cross point (vùng cross point lý tưởng) và
các chuẩn nén tổn hao, cải tiến chương trình nén khơng tổn hao đang có thành
chương trình nén tổn hao ảnh *.BMP.
Phương án 1: áp dụng q trình lượng tử hóa dữ liệu.
GVHD : TS ĐẶNG THÀNH TÍN
SVTH : Trần Tiến Dũng 40500516
Trần Quang Ngun 40501899

Tháng 7-2008
1
Đồ án tin học GVHD: Đặng Thành Tín
Mục lục
Lời giới thiệu Trang 2
I. Giới thiệu đề tài Trang 3
Tên đề tài Trang 3
Nhiệm vụ đề tài Trang 3
Phân tích yêu cầu Trang 3
II. Cơ sở lý thuyết yêu cầu Trang 5
Vùng crosspoint lý tưởng Trang 5
Các chuẩn nén tổn hao Trang 10
III. Cơ sở lý thuyết của đề tài Trang 14
Lý thuyết vùng crosspoint Trang 14
Kĩ thuật lượng tử hóa dữ liệu Trang 15
IV. Giải thuật của đề tài Trang 17
V. Kết quả thực hiện Trang 19
Tài liệu tham khảo
2


Đồ án tin học GVHD: Đặng Thành Tín
LỜI GIỚI THIỆU
Trong thời đại của chúng ta, thông tin được lưu trữ và lưu chuyển ngày một nhiều.
Internet, TV số, truyền thông di động, … đòi hỏi nhu cầu lưu trữ và lưu chuyển lượng
thông tin khổng lồ. Nếu ta chỉ dùng dữ liệu ở dạng thô nguyên thủy thì không gian bị
chiếm bởi lượng thông tin này là cực lớn, vượt qua khả năng đáp ứng của các công nghệ
phần cứng hiện thời. Bởi vậy, một nhu cầu thiết yếu đặt ra là hạn chế không gian lưu trữ
và lưu lượng trao đổi của các loại thông tin mà vẫn không làm giảm giá trị, sự đầy đủ của
thông tin. Đó là nhiệm vụ của nén dữ liệu.
Nén dữ liệu là công nghệ biểu diễn thông tin ở dạng cô đọng. Thông tin được biểu
diễn dưới dạng mã hóa nhằm làm giảm số lượng đơn vị bộ nhớ (bit) cần để lưu trữ và
truyền so với dữ liệu ban đầu. Nén dữ liệu dựa vào một tính chất phổ biến của thông tin :
tính thừa (redundancy) – thông tin lặp lại, có tính chất và cấu trúc xác định có thể được
biểu diễn ở dạng tiết kiệm hơn. Dựa vào các công cụ toán học, ta xác định được các phần
thừa này và dựa vào các thuật toán nén dữ liệu mà ta có thể mã hóa để biểu diễn thông tin
dưới dạng khác, trong đó các phần thừa được loại bỏ một cách tối ưu, đạt được sự tiết
kiệm tối đa về bộ nhớ và băng thông.
Trong các dạng thông tin thường gặp và có số lượng lớn thì ảnh chiếm một vị trí quan
trọng, chúng gồm nhiều loại : ảnh màu, ảnh nhị phân, ảnh y tế (gray) Ảnh số ngày càng
được biểu diễn thật hơn, đòi hỏi độ phân giải cao hơn, màu sắc nhiều hơn và như vậy,
dung lượng của các bức ảnh ngày càng lớn. Nén ảnh trở thành một nhu cầu cực kì quan
trọng trong công nghệ thông tin.
Các kỹ thuật nén ảnh hiện nay có thể phân ra làm 2 loại lớn : nén tổn hao và nén
không tổn hao.
Nén không tổn hao là kỹ thuật nén mà ta thu được chính xác dữ liệu ban đầu sau khi
tiến hành giải nén. Sự chính xác của dữ liệu sau giải nén là điều kiện tiên quyết của kĩ
thuật nén này, tỉ lệ nén là yếu tố quan trọng nhưng vẫn phải xếp sau. Nén không tổn hao
được sử dụng trong những ngành mà sự chính xác về thông tin thu được là cực kì quan
trọng : ảnh y tế, văn bản,…
Nén tổn hao là kỹ thuật nén mà tiêu chí quan trọng nhất là lượng bộ nhớ ta có thể tiết

kiệm được so với dạng dữ liệu ban đầu còn sai số của dữ liệu sau giải nén so với dữ liệu
gốc có thể chấp nhận được nếu nằm trong giới hạn cho phép. Kỹ thuật nén tổn hao ảnh
dựa nhiều vào khả năng phân biệt của con người với màu sắc. Thường thì mắt người chỉ
phân biệt được sự khác nhau giữa 2 ảnh khi có sự sai khác lớn hơn một giới hạn nào đó.
Nếu ảnh sau giải nén khác ảnh trước ít hơn giới hạn đó thì mắt người không thể phân biệt
được. Bởi vậy, nén tổn hao ảnh được dùng nhiều trong các lĩnh vực liên quan đến khả
năng cảm nhận của con người.
Người ta đã nhận biết, thống kê, sử dụng nhiều đặc điểm, tính chất của các loại ảnh để
đưa ra nhiều thuật toán khác nhau nhằm mã hóa loại bỏ phần thừa của ảnh : thuật toán
Huffman, thuật toán từ điển, thuật toán số học,… Giới hạn của đề tài là tìm hiểu lý thuyết
vùng crosspoint lý tưởng. Đây là trường hợp của lý thuyết vùng crosspoint - một lý
thuyết mô tả đặc điểm của dữ liệu ảnh sau biến đổi Gray phục vụ cho thuật toán mã hóa
của C.B.Jones (một cải tiến của thuật toán số học).
3
Đồ án tin học GVHD: Đặng Thành Tín
Lý thuyết vùng crosspoint lý tưởng ban đầu được sử dụng trong kĩ thuật nén ảnh
không tổn hao. Tuy nhiên, dựa vào sự đồng nhất của dữ liệu trong vùng crosspoint mà ta
cũng có thể sử dụng nó trong kỹ thuật nén ảnh tổn hao bằng cách áp dụng quá trình lượng
tử hóa dữ liệu.
Đề tài tập trung vào tìm cách lượng tử hóa dữ liệu dựa vào lý thuyết vùng crosspoint lý
tưởng. Kết quả của chương trình cải tiến chưa được cao, tuy nhiên chất lượng ảnh giải
nén tốt. Đây mới chỉ là những kết quả bước đầu, cần có sự đầu tư lớn hơn để có thể trở
thành một kĩ thuật nén ảnh.
Chúng em xin cảm ơn thầy vì sự hướng dẫn nhiệt tình trong quá trình thực hiện đề tài.
Kết quả có thể không tốt nhưng dù sao chúng em cũng đã cố gắng hết sức để hoàn thành
đề tài đồ án này.
Nhóm 6: Trần Tiến Dũng
Trần Quang Nguyên
4
Đồ án tin học GVHD: Đặng Thành Tín

I. Giới thiệu đề tài :
1. Tên đề tài :
Nghiên cứu lý thuyết vùng crosspoint lý tưởng và các chuẩn nén tổn hao. Cải tiến
chương trình nén không tổn hao thành chương trình nén tổn hao ảnh .BMP áp dụng quá
trình lượng tử hóa dữ liệu.
2. Nhiệm vụ đề tài :
Từ tên của đề tài ta có thể rút ra đề tài có các nhiệm vụ sau :
- Nghiên cứu lý thuyết vùng crosspoint lý tưởng
- Nghiên cứu các chuẩn nén tổn hao
- Áp dụng quá trình lượng tử hóa dữ liệu và lý thuyết vùng crosspoint lý tưởng
để cải tiến chương trình nén ảnh BMP không tổn hao đang có thành chương
trình nén tổn hao.
3. Phân tích yêu cầu và hướng nghiên cứu phát triển :
a. Phân tích yêu cầu đề tài :
Nhiệm vụ thứ nhất : nghiên cứu lý thuyết vùng crosspoint lý tưởng
Lý thuyết vùng crosspoint là lý thuyết nghiên cứu về đặc điểm biến đổi của dữ liệu
(ảnh y tế) sau biến đổi Gray xung quanh các điểm có mức xám 2
n
. Vùng crosspoint lý
tưởng là một trường hợp đặc biệt của lý thuyết vùng crosspoint, được ứng dụng nhiều
trong giải thuật nén ảnh y tế vì tính chất phân bố dữ liệu của loại ảnh này. Nghiên cứu sự
biến đổi của dữ liệu trong vùng crosspoint lý tưởng từ đó rút ra các đặc điểm cần thiết
cho nhiệm vụ sau là áp dụng quá trình lượng tử hóa dữ liệu.
Nhiệm vụ thứ hai : nghiên cứu các chuẩn nén tổn hao
Nén tổn hao là một trong hai kỹ thuật nén cơ bản của công nghệ nén ảnh và là kỹ thuật
được sử dụng phổ biến nhất hiện nay. Nghiên cứu các chuẩn nén tổn hao để thấy được
cái nhìn tổng quan về các loại nén tổn hao đang tổn tại, ý tưởng giải thuật và hiệu quả của
từng loại. Từ đó, ta có cơ sở để so sánh với kết quả của chương trình sau cải tiến với các
kỹ thuật nén tổn hao đang có.
Nhiệm vụ thứ ba : áp dụng quá trình lượng tử hóa dữ liệu và lý thuyết vùng crosspoint

để cải tiến chương trình nén không tổn hao ảnh BMP thành chương trình nén tổn hao.
Lượng tử hóa dữ liệu là một quá trình đặc trưng cho kỹ thuật nén tổn hao. Quá trình
lượng tử hóa dữ liệu dựa chủ yếu vào sự đồng nhất của dữ liệu để đưa ra giải thuật lượng
tử nhằm lảm giảm entropy của dữ liệu, tạo thuận lợi cho quá trình mã hóa ở giai đoạn
sau. Ta nghiên cứu sự biến đổi của lý thuyết vùng crosspoint lý tưởng để nhận biết sự
đồng nhất của dữ liệu trong các vùng này, nhằm đưa ra giải thuật lượng tử hợp lý biến
chương trình nén không tổn hao thành chương trình nén tổn hao với tỉ số nén và sự mất
mát chấp nhận được.
b. Hướng nghiên cứu phát triển :
Lý thuyết vùng crosspoint lý tưởng được trình bày đầy đủ ở chương 2 và 4 trong luận
án tiến sĩ của thầy. Đề tài tập trung nghiên cứu 2 chương này để thấy được sự biến đổi
của các bit dữ liệu ở các mặt phẳng bit n-1 và n-2 sau biến đổi Gray xung quanh các điểm
crosspoint 2
n
. Tìm sự đồng nhất của dữ liệu hay của sự biến đổi của dữ liệu trong các
vùng này để phục vụ cho quá trình sau.
Các chuẩn nén tổn hao có thể được tìm thấy trong các chương trình nén ảnh hay trên
internet. Đề tài sẽ tìm kiếm, nắm bắt ý tưởng giải thuật và thống kê các kết quả của các
5
Đồ án tin học GVHD: Đặng Thành Tín
kỹ thuật này nhằm làm cơ sở cho sự so sánh với kết quả của chương trình thực hiện ở giai
đoạn sau.
Đề tài tìm hiểu các giải thuật lượng tử hóa dữ liệu để tìm ra giải thuật phù hợp với sự
đồng nhất của dữ liệu trong vùng crosspoint. Áp dụng giải thuật này vào chương trình để
cải tiến. Các giải thuật này có thể tìm thấy trong các tài liệu tham khảo hoặc trên internet.
Chương trình được viết bằng ngôn ngữ C trên nền Borland C++.
II. Cơ sở lý thuyết yêu cầu :
1.Vùng crosspoint lý tưởng :
Ảnh số ngày nay được phân ra làm 3 loại cơ bản : ảnh nhị phân, ảnh có thang xám và
ảnh màu. Trong đó, loại sau là sự mở rộng của loại trước. Ảnh màu là tập hợp của các

ảnh có thang xám của các màu khác nhau (đỏ, xanh lục, xanh da trời). Ảnh có thang xám
là tập hợp của các ảnh nhị phân mà mỗi ảnh nhị phân tương ứng với một mặt phẳng bit
của nó. Bởi vậy, việc nghiên cứu giải thuật nén ảnh nhị phân là hợp lý và có thể áp dụng
cho các loại ảnh kia. Tuy nhiên, khi áp dụng các giải thuật nén ảnh nhị phân vào nén ảnh
có thang xám, có khó khăn xuất hiện. Đó là ở các điểm đặc biệt, các bit dữ liệu khác nhau
rất lớn. Sự khác nhau ở khoảng cách lớn sau khi biến đổi ra nhị phân này làm tăng
entropy của ảnh, gây khó khăn cho quá trình mã hóa lúc sau và hạn chế hiệu quả của giải
thuật. Bởi vậy, người ta đã đưa ra giải thuật để biến đổi dữ liệu đầu vào sao cho sau phép
biến đổi thì sự khác nhau của các bit dữ liệu ở mọi giá trị là nhỏ, thuận lợi cho các giải
thuật mã hóa ở giai đoạn sau. Giải thuật biến đổi được sử dụng nhiều nhất là biến đổi
Gray.
Phép biến đổi được đặt tên theo nhà khoa học Frank Gray, được định nghĩa như sau:
Đặt phép biến đổi là
G
, ta có:
021021
) ( gggxxxG
NNNN −−−−
=
Trong đó:
ji
gx ,
là các ký số (digit) trong hệ cơ số d.
021
xxx
NN −−
là biểu diễn nhị phân
021
ggg
NN −−

là biểu diễn Graycode
Công thức biến đổi như sau:
20,
1
11
−≤≤−=
=
+
−−
Nixxg
xg
iii
NN
Và phép biến đổi ngược sẽ là:
xxx)ggg(
02-N1-N02-N1-N
1
…=…

G
Với:
6
Đồ án tin học GVHD: Đặng Thành Tín
20,
1
11
−≤≤+=
=
+
−−

Nixgx
gx
iii
NN
Biến đổi Gray nhị phân có thể được coi là biến đổi dựa vào sự so sánh bit. Giá trị của
bit có được là do sự so sánh giá trị trước của nó với giá trị của bit trước nó. Một đặc điểm
quan trọng của biến đổi Gray là sau phép biến đổi này, các số nhị phân liền kề nhau sẽ có
biểu diễn nhị phân chỉ khác nhau 1 bit. Ví dụ :
Trước biến đổi Gray : 7 =0111 và 8 = 1000
Sau biến đổi Gray : 7 ->0100 và 8 ->1100
Giá trị thập phân Giá trị nhị phân Graycode
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000
Chính nhờ đặc trưng quan trọng này mà các giải thuật nén ảnh nhị phân có thể áp dụng
cho nén ảnh có thang xám với hiệu quả cao nhất chỉ sau khi dữ liệu ban đầu được biến
đổi Gray.

Ta xét ảnh có thang xám (ảnh y tế) có độ sâu N bit (= 8). Khi đó, điểm crosspoint là
điểm có mức xám 2
n
với n = 1… N-1.
7
Đồ án tin học GVHD: Đặng Thành Tín
Giá trị thập phân Giá trị nhị phân Graycode
0 0000 0 0 0 0
1 0001 0 0 0 1
8
Đồ án tin học GVHD: Đặng Thành Tín
2 0010 0 0 1 1
3 0011 0 0 1 0
4 0100 0 1 1 0
5 0101 0 1 1 1
6 0110 0 1 0 1
7 0111 0 1 0 0
3
28 =
1000 1 1 0 0
9 1001 1 1 0 1
10 1010 1 1 1 1
11 1011 1 1 1 0
12 1100 1 0 1 0
13 1101 1 0 1 1
14 1110 1 0 0 1
15 1111 1 0 0 0
Ta thấy, ứng với n = 3, điểm crosspoint là 2
3
= 8. Phân tích giá trị các bit ở các mặt

phẳng n -1, n-2,… ta thấy các đặc trưng thống kê quan trọng sẽ được trình bày trong các
mục sau.
1.1 Crosspoint và vùng crosspoint trên mặt phẳng bit n – 1 :
Sau biến đổi Gray, mức xám của các pixel bị thay đổi, nếu tập hợp các bit dữ liệu của
các mã Gray trên cùng mặt phẳng bit sau phép phân tích mặt phẳng bit, ta sẽ thấy các bit
trên mặt phẳng bit n – 1, với n là trị số mũ của trị 2
n
đang xét, có khuynh hướng xuất hiện
nhiều bit 1 xung quanh trị 2
n
và ít bit 0 xung quanh trị này.
Định nghĩa :
Xét tập số nguyên từ 0 đến 2
N
– 1 , N là số bit của dạng lưu trữ. Vùng crosspoint A(n)
với n có trị từ 1 đến N – 1, là tập hợp 2
n
điểm dữ liệu theo hướng mã hóa xung quanh trị
2
n
duy nhất, gồm 2
n-1
điểm nửa trước (vùng A
l
(n) ) và 2
n-1
điểm nửa sau ( vùng A
g
(n) ) kể
cả điểm 2

n
. Trị 2
n
được gọi là trị ranh giới của 2 vùng này, hay là crosspoint.
Với định nghĩa trên, điểm dữ liệu có giá trị 2
n
là trung tâm vùng A(n). Vùng A(n) là
hợp của 2 nửa tập điểm A
l
(n) và A
g
(n). Với tập các số nguyên từ 0 đến 2
N
– 1, 2
n
điểm dữ
liệu trong A(n) sẽ là các trị liên tục 2
n-1
, 2
n-1
+ 1,… 2
n
+ 2
n-1
-1
A(n) = {2
n-1
, 2
n-1
+ 1,…, 2

n
+ 2
n-1
-1};
A
l
(n) = {2
n-1
, 2
n-1
+ 1,…, 2
n
– 1};
A
g
(n) = {2
n
, 2
n
+1,…, 2
n
+ 2
n-1
-1};
Ta thấy rõ ràng : A(n) = A
l
(n) U A
g
(n).
Như vậy, crosspoint là những điểm ảnh có mức xám 2

n
tồn tại trong ảnh, hoặc là giá trị
tượng trưng 2
n
để truy tìm vùng crosspoint, chúng được gọi là các trị ranh giới. Vùng
crosspoint là vùng pixel thực, tồn tại trong ảnh mà số lượng và giá trị của chúng được xác
định theo định nghĩa trên.
Cũng theo định nghĩa trên, với chuỗi dữ liệu liên tục thì A(n) sẽ gồm 2
n
trị, mà giá trị
của các điểm dữ liệu trong vùng đó có đặc điểm là liên tục và phân biệt. Với dữ liệu thực,
vùng A(n) cũng sẽ có 2
n
trị vì sự tồn tại duy nhất của trị ranh giới 2
n
, giá trị của các điểm
dữ liệu trong vùng thường không liên tục và có thể trùng nhau. Trong trường hợp này, trị
ranh giới 2
n
có thể tồn tại tường minh hoặc không tồn tại.
Trong thực tế, do đặc trưng của dữ liệu thực, các điểm dữ liệu kế cận nhau thường có
giá trị mức xám khác biệt rất ít, hầu như chúng chỉ khác nhau ở các bit trọng số nhỏ, các
bit trọng số lớn thì gần như giống nhau trong một vùng nào đó, điều này hoàn toàn giống
9
Đồ án tin học GVHD: Đặng Thành Tín
chuỗi dữ liệu liên tục. Bởi vậy, ta có thể đưa ra các định lý và hệ quả dưới đây đối với dữ
liệu liên tục và áp dụng được cho dữ liệu thực.
Định lý về số bit trong mặt phẳng bit n – 1 của vùng crosspoint :
Xét chuỗi dữ liệu các số nguyên từ 0 đến 2
N

– 1, N là số bit của dạng lưu trữ. Gọi n là
số mũ của trị ranh giới 2
n
trong vùng crosspoint A(n), n có giá trị từ 1 đến N – 1. Các
Graycode trong vùng A
g
(n) ở mặt phẳng bit n – 1 sẽ có 2
n-1
bit 1, do đó vùng A(n) sẽ có 2
n
bit 1 ở mặt phẳng bit n – 1.
Như vậy, dữ liệu trong vùng A(n) ở mặt phẳng bit n – 1 sau biến đổi Gray đã bị thay
đổi theo hướng các bit 1 sẽ tập trung hơn xung quanh các mức xám 2
n
, điều này sẽ kéo
theo xác suất của bit 1 tăng lên trong vùng này, còn xác suất của bit 0 sẽ giảm xuống, do
đó ảnh hưởng tới tỉ số nén của quá trình mã hõa dữ liệu.
Hệ quả - entropy của dữ liệu trong vùng crosspoint :
Trong vùng crosspoint A, entropy của dữ liệu nhận được sau khi phép biến đổi
Graycode được thực hiện tại mặt phẳng bit xác định, sẽ đạt giá trị nhỏ nhất.
Điều này có nghĩa, sau phép biến đổi Graycode, vùng A sẽ chứa lượng thông tin ít
nhất, tức cần dùng số bit ít nhất để mã hóa dữ liệu vùng này. Trong khi đó, dữ liệu tương
ứng vùng A trước phép biến đổi Gray lại có entropy lớn hơn, tức cần nhiều bit mã hoá
hơn cho cùng lượng dữ liệu. Bởi vậy, xét trên tổng thể, nếu quá trình mã hóa được thực
hiện mà không qua phép biến đổi Graycode thì tỉ số nén không cao do sự thay đổi nhiều
của trạng thái bit dữ liệu.
1.2 Crosspoint và vùng crosspoint trên mặt phẳng bit n – 2 :
Các định nghĩa, định lý, hệ quả đối với crosspoint và vùng crosspoint trên mặt phẳng
bit n -2 cũng tương tự như đối với mặt phẳng bit n -1.
Định nghĩa :

Xét tập số nguyên từ 0 đến 2
N
– 1 , N là số bit của dạng lưu trữ. Vùng crosspoint R(n)
với n có trị từ 2 đến N – 1, là tập hợp 2
n-1
điểm dữ liệu theo hướng mã hóa xung quanh trị
2
n
duy nhất, gồm 2
n-2
điểm nửa trước (vùng R
l
(n) ) và 2
n-2
điểm nửa sau ( vùng R
g
(n) ) kể
cả điểm 2
n
. Trị 2
n
được gọi là trị ranh giới của 2 vùng này, hay là crosspoint.
Với định nghĩa trên, điểm dữ liệu có giá trị 2
n
là trung tâm vùng R(n). Vùng R(n) là
hợp của 2 nửa tập điểm R
l
(n) và R
g
(n). Với tập các số nguyên từ 0 đến 2

N
– 1, 2
n-1
điểm
dữ liệu trong R(n) sẽ là các trị liên tục 2
n-2
, 2
n-2
+ 1,… 2
n
+ 2
n-2
-1
R(n) = {2
n
- 2
n-2
, 2
n
- 2
n-2
+ 1,…, 2
n
+ 2
n-2
-1};
R
l
(n) = {2
n

- 2
n-2
, 2
n
- 2
n-2
+ 1,…, 2
n
– 1};
R
g
(n) = {2
n
, 2
n
+1,…, 2
n
+ 2
n-2
-1};
Ta thấy rõ ràng : R(n) = R
l
(n) U R
g
(n).
Theo định nghĩa trên, với chuỗi dữ liệu liên tục thì R(n) sẽ gồm 2
n-1
trị, mà giá trị của
các điểm dữ liệu trong vùng đó có đặc điểm là liên tục và phân biệt. Với dữ liệu thực,
vùng R(n) cũng sẽ có 2

n-1
trị vì sự tồn tại duy nhất của trị ranh giới 2
n
, giá trị của các điểm
dữ liệu trong vùng thường không liên tục và có thể trùng nhau. Trong trường hợp này, trị
ranh giới 2
n
có thể tồn tại tường minh hoặc không tồn tại.
Tương tự như đối với mặt phẳng bit n – 1, ở mặt phẳng bit n – 2, ta cũng có thể áp
dụng tính chất tương tự nhau về giá trị mức xám ở các điểm dữ liệu lân cận Bởi vậy, ta
có thể đưa ra các định lý và hệ quả dưới đây đối với dữ liệu liên tục và áp dụng được cho
dữ liệu thực.
Định lý về số bit trong mặt phẳng bit n – 2 của vùng crosspoint :
10
Đồ án tin học GVHD: Đặng Thành Tín
Xét chuỗi dữ liệu các số nguyên từ 0 đến 2
N
– 1, N là số bit của dạng lưu trữ. Gọi n là
số mũ của trị ranh giới 2
n
trong vùng crosspoint R(n), n có giá trị từ 1 đến N – 1. Các
Graycode trong vùng R
g
(n) ở mặt phẳng bit n – 1 sẽ có 2
n-2
bit 0, do đó vùng R(n) sẽ có
2
n-1
bit 0 ở mặt phẳng bit n – 2.
Như vậy, dữ liệu trong vùng R(n) ở mặt phẳng bit n – 2 sau biến đổi Gray đã bị thay

đổi theo hướng các bit 0 sẽ tập trung hơn xung quanh các mức xám 2
n
, điều này sẽ kéo
theo xác suất của bit 0 tăng lên trong vùng này, còn xác suất của bit 1 sẽ giảm xuống, do
đó ảnh hưởng tới tỉ số nén của quá trình mã hõa dữ liệu.
Hệ quả - entropy của dữ liệu trong vùng crosspoint :
Trong vùng crosspoint R, entropy của dữ liệu nhận được sau khi phép biến đổi
Graycode được thực hiện tại mặt phẳng bit xác định, sẽ đạt giá trị nhỏ nhất.
Mở rộng ra, ta còn có thể định nghĩa các vùng crosspoint cho các mặt phẳng bit n – 3,
n – 4.
Trong thực tế, do đặc trưng của dữ liệu thực là tồn tại đối với mắt người, tức là mắt
người có thể nhận dạng được vật thể trên ảnh, hình dạng của vật thể trên ảnh phải đủ lớn,
nghĩa là phải tồn tại một số điểm ảnh đủ lớn để cấu thành hình dạng vật thể. Thông
thường, số điểm ảnh trên một dòng quét để mắt người có thể nhận ra tối thiểu phải có 3
đến 5 pixel có mức xám giống nhau hoặc khác nhau rất ít. Điều này làm cho dữ liệu ảnh
thực gần giống dữ liệu liên tục, đặc biệt là đối với ảnh y tế, là ảnh có nhiều vùng mức
xám tương đương nhau. Bởi vậy, ta có thể dùng lý thuyết vùng crosspoint cho các dữ liệu
thực trên cơ sở lý thuyết xác lập bởi dữ liệu liên tục.
Đối với dữ liệu liên tục, vùng A(n) chỉ chứa các giá trị từ 2
n-1
đến 2
n
+ 2
n-1
– 1. Còn đối
với dữ liệu thực, trong vùng A(n) có thể tồn tại các giá trị mức xám không nằm trong giới
hạn trên. Trong trường hợp, điểm crosspoint là trung tâm của vùng crosspoint cần xác
định có giá trị 2
n
mà các pixel trong vùng này có mức xám từ 2

n
-1 đến 2
n
+2
n-1
– 1 cho cả
vùng A
g
(n) và A
l
(n) thì vùng A sẽ chứa toàn bit 1, đây là trường hợp rất lý tưởng để mã
hóa vì ta sẽ đạt được tỉ số nén cao. Vùng crosspoint thỏa mãn điều kiện này được gọi là
vùng crosspoint lý tưởng. Tương tự, đối với vùng R
g
(n) và R
l
(n), ta có được vùng
crosspoint lý tưởng khi các mức xám trong vùng này đều nằm trong khoảng từ 2
n
– 2
n-2
đến 2
n
+ 2
n -2
– 1.
Như vậy, khái niệm vùng crosspoint lý tưởng được đưa ra để chỉ một tập hợp con của
khái niệm vùng crosspoint. Đây là vùng mà giá trị các mức xám của các điểm ảnh trong
vùng đó nằm trong khoảng giới hạn như định nghĩa. Do đó, trong các mặt phẳng bit n – 1
và n – 2 sẽ có lần lượt toàn bit 1 và bit 0. Sự đồng nhất này rất thuận lợi cho quá trình mã

hóa vì entropy của nó là cực tiểu.
1.3 Giải thuật tìm vùng crosspoint :
Theo các định nghĩa và định lý trên, việc truy tìm vùng crosspoint sẽ áp dụng cho từng
trị 2
n
, trên từng mặt phẳng bit n -1 và n – 2 để tìm xác định vùng A và R. Trị 2
n
là trung
tâm của vùng A(n) và cả vùng R(n).Ta sẽ áp dụng giải thuật tìm vùng A và R một lúc.
Với một ảnh có độ sâu N bit thì n sẽ đi từ N – 1 đến 2 theo quy ước của phép phân tích
mặt phẳng bit. Ở đây ta áp dụng cho ảnh có độ sâu 8 bit, là ảnh y tế thông dụng.
Trong thực tế, mặt phẳng bit 7 không có tính ngẫu nhiên cao, đặc biệt sau biến đổi
Gray, nên số bit để biểu diễn nó sau mã hóa có thể chấp nhận được mà không cần tìm
vùng crosspoint để tối ưu hóa xác suất. Mặt phẳng bit 1 cũng không được tìm vùng
11
Đồ án tin học GVHD: Đặng Thành Tín
crosspoint A vì tính ngẫu nhiên cao của dữ liệu và cũng vì giải thuật tìm vùng A và R
cùng lúc.
Giải thuật tìm vùng crosspoint sẽ có 3 bước :
- Tìm điểm crosspoint
- Tìm vùng crosspoint
- Đánh giá vùng crosspoint
Tìm điểm crosspoint là quá trình tìm kiếm các giá trị 2
n
từ ảnh gốc. Nếu giá trị này tồn
tại tường minh thì việc truy tìm rất dễ dàng vì ta chỉ việc so sánh giá trị để xác định nó.
Nếu giá trị này không tồn tại tường minh thì việc tìm điểm crosspoint sẽ được gián tiếp
thực hiện qua việc tìm vùng crosspoint lý tưởng, có nghĩa là đầu tiên ta xác định các vùng
crosspoint lý tưởng, kế tiếp, điểm crosspoint sẽ được xác định trong vùng này sao cho
vùng crosspoint lý tưởng là lớn nhất (trong vùng crosspoint đang xét), và sau cùng là tìm

vùng crosspoint đang xét theo quy ước số điểm của vùng.
Việc xác định vùng crosspoint lý tưởng là quan trọng ngay cả khi điểm crosspoint tồn
tại tường minh. Nếu vùng crosspoint đã được xác định, nhưng trong đó vùng crosspoint
lý tưởng quá nhỏ, thì vùng crosspoint đó không có tác dụng nhiều trong việc nâng cao
hiệu suất nén qua tối ưu hóa xác suất các bít dữ liệu trong đó.
Như vậy, việc xác định vùng crosspoint lý tưởng có ý nghĩa quan trọng trong việc tìm
vùng crosspoint hơn là xác định điểm crosspoint. Khi đã xác định được vùng crosspoint
lý tưởng, ta hoàn toàn có thể xác định vùng crosspoint và đánh giá xem vùng đó có thể
làm tăng hiệu suất nén không, đỡ mất thời gian vào việc tối ưu hóa xác suất cho những
vùng có vùng crosspoint lý tưởng quá nhỏ.
Trên đây là sơ lược về lý thuyết crosspoint, một lý thuyết mô tả thống kê đặc điểm của
các bit dữ liệu ảnh sau phép biến đổi Gray. Sự đồng nhất của các bit dữ liệu trong các
vùng crosspoint A và R làm nảy sinh ý tưởng về tối ưu hóa xác suất cho các bit dữ liệu
nhằm tạo điều kiện để cải thiện tỉ số nén cho quá trình mã hóa C.B.Jones. Đồng thời, sự
đồng nhất này cũng là cơ sở để thực hiện các thuật toán nén tổn hao, mà đầu tiên là quá
trình lượng tử hóa dữ liệu.
2. Các chuẩn nén tổn hao :
Nén tổn hao là kĩ thuật nén dữ liệu mà dữ liệu sau khi giải nén có sự khác biệt so với
dữ liệu ban đầu, tuy nhiên, sự khác biệt này phải nằm trong giới hạn xác định phụ thuộc
vào yêu cầu thực tế. Bằng việc cho phép một sai số nhất định, người ta có thể tìm ra các
thuật toán nén dữ liệu với tỉ số nén rất cao. Nén tổn hao là kĩ thuật nén được sử dụng
nhiều nhất trong nén các dữ liệu multimedia : ảnh, video, âm thanh.
Người ta có thể thực hiện kĩ thuật nén tổn hao qua nhiều phương pháp khác nhau :
- Lượng tử màu : lượng tử không gian màu của ảnh về một số màu cơ bản. Kĩ
thuật này dựa trên tính chất của ảnh là có sự tượng tự nhau về màu giữa các pixel lân cận
và khả năng nhận biết màu sắc của con người là hạn chế.
- Dùng mã hóa biến đổi (transform coding) : đây là kĩ thuật được sử dụng nhiều
nhất hiện nay. Người ta thường dùng các phép biến đổi có liên quan đến biến đổi Fourier
để biến đổi dữ liệu đầu vào : DCT hay DWT. Dữ liệu sau biến đổi sẽ được lượng tử hóa
và mã hóa entropy.

- Dùng kĩ thuật nén Fractal : kĩ thuật này dựa trên đặc điểm là một số phần của
ảnh giống với một số phần khác, nói cách khác, có sự lặp lại về bố cục ở các phần của
12
Đồ án tin học GVHD: Đặng Thành Tín
ảnh. Fractal biến đổi các phần này thành các số liệu toán học gọi là fractal code và sau đó
tạo ra ảnh mã hóa.
- Predictive coding : người ta đưa ra dữ liệu dự đoán về dữ liệu cần nén và so
sánh. Sai số của dữ liệu dự đoán so với dữ liệu thực cùng với những thông tin cần thiết
khác để tái tạo sự dự đoán sau đó được lượng tử và mã hóa.
Người ta cũng có thể kết hợp các kĩ thuật này trong một chương trình : transform
coding được dùng để nén tín hiệu sai số của predictive coding.
Bởi vì kĩ thuật nén tổn hao được sử dụng nhiều trong nén các loại dữ liệu đa phương
tiện, mà ngày ngày âm thanh và hình ảnh (một trong các loại dữ liệu đa phương tiện)
được sử dụng bùng nổ, nên kĩ thuật nén tổn hao cũng được nghiên cứu rất kĩ. Người ta đã
đưa ra nhiều chuẩn nén tổn hao : JPEG, PGF,… Trong đó, mỗi chuẩn đặc trưng cho một
kĩ thuật nén khác nhau.
2.1 JPEG – Joint Photographic Expert Group :
JPEG là một cơ chế nén ảnh được chuẩn hóa, được viết tắt theo tên của tổ chức đã
đưa ra chuẩn này. JPEG có thể được dùng để nén ảnh màu và cả ảnh có thang xám. JPEG
chỉ được áp dụng cho kĩ thuật nén các loại ảnh tĩnh, tuy nhiên đối với các loại ảnh động
thì nó cũng có một tiêu chuẩn tương tự liên quan là MPEG.
JPEG ngoài việc là tên của một chuẩn nén còn được đặt tên cho chính file nén sử dụng
kĩ thuật đó.
Dưới đây là sơ đồ khối các quá trình trong kĩ thuật nén và giải nén của JPEG :
Hình: sơ đồ khối quá trình nén và giải nén theo JPEG
- Phân chia ảnh thành các khối nhỏ : ảnh đầu tiên sẽ được đọc thành một ma trận mà
mỗi giá trị là mức xám tương ứng của điểm ảnh đó. Ta phân chia ma trận mức xám thành
các ma trận con (thường có kích thước 8x8). Ta sẽ áp dụng phép biến đổi DCT cho từng
khối này. Điều này làm cho ảnh sau khi giải nén sẽ có chất lượng cao hơn hẳn so với ảnh
mà ta áp dụng trực tiếp DCT cho cả ma trận.

- Áp dụng DCT (discrete cosine transform) cho từng block nhỏ đã chia. Lần lượt từng
pixel sẽ được đưa vào biến đổi dựa theo công thức :
13
Đồ án tin học GVHD: Đặng Thành Tín
Và công thức biến đổi ngược :
Sau biến đổi DCT, trong mỗi block, ngoại trừ một số giá trị đầu (ở góc cao bên trái của
ma trận) là có giá trị đáng kể, còn lại các vị trí khác đều có giá trị rất nhỏ và thường bị
quá trình lượng tử làm triệt tiêu. Như vậy, sau DCT thì ta sẽ thu được một ma trận mà
năng lượng chỉ tập trung ở một vài vị trí còn tất cả các vị trí khác đều không đáng kể.
Đây là điều kiện thuận lợi để áp dụng phép lượng tử hóa về sau.
- Lượng tử hóa : ma trận ảnh sau khi qua DCT sẽ được lượng tử hóa. Thường thì chỉ
còn lại một vài giá trị còn tất cả các giá trị khác đều bằng 0. Cần chú ý là sau phép biến
đổi DCT có nhiều trường hợp ta phải có một vài biến đổi phụ trước khi áp dụng quá trình
lượng tử hóa vì giá trị tập trung năng lượng có thể rất lớn vượt quá mức lượng tử.
- Entropy encoding : sau khi lượng tử hóa, ma trận thu về sẽ rất đơn giản, hay nói cách
khác sẽ có entropy rất thấp. Ta sẽ chuyển ma trận về thành chuỗi 1 chiều (có thể bằng
cách đọc zig zag hoặc từng dòng). Sau đó áp dụng các thuật toán mã hóa.
Kết quả đưa ra là file ảnh sau khi được nén.
Quá trình giải nén ta áp dụng quy trình ngược lại và sẽ thu được ảnh đã giải nén gần
giống ảnh ban đầu.
JPEG là chuẩn nén được sử dụng rộng rãi nhất hiện nay và được dùng rất nhiều trên
world wide web. Ưu điểm của nó là tỉ số nén và cả thời gian nén đều có thể điều chỉnh
được. Tuy nhiên, thời gian nén tỉ lệ nghịch với tỉ số và chất lượng ảnh nén. Tỉ số nén có
thể đạt được rất cao, lên tới vài trăm lần, tuy nhiên, chất lượng ảnh sau giải nén tỉ lệ
nghịch với tỉ số nén. Thông thường có thể đạt được vài lần đến vài chục lần mà ảnh sau
giải nén vẫn có “chất lượng” rất tốt.
Ta có thể nhận biết ảnh được nén theo chuẩn JPEG khi phần đuôi của nó có dạng :
.jpg, .jpeg, .jpe,…
2.2 JPEG – 2000 :
JPEG – 2000 là chuẩn nén ảnh dựa trên biến đổi wavelet. Nó cũng có cùng tác giả như

chuẩn JPEG tuy nhiên có khác khâu cơ bản so với JPEG. Trong JPEG – 2000, ma trận
mức xám của ảnh thay vì được biến đổi DCT thì nó được biến đổi wavelet. Kết quả đưa
ra cũng tương tự, là một ma trận hệ số mà năng lượng chỉ tập trung ở một vài vị trí, còn
14
Đồ án tin học GVHD: Đặng Thành Tín
các vị trí khác có ảnh hưởng không đáng kể. Ma trận sau biến đổi sẽ được đưa vào lượng
tử hóa rồi mã hóa entropy.
Dưới đây là sơ đồ khối các quá trình trong JPEG – 2000 :
Hình :
sơ đồ
khối
nén ảnh
theo
JPEG –
2000
So
với
chuẩn
JPEG đàn anh, thì JPEG – 2000 tăng 20% khả năng nén ảnh. Với các tỉ số nén như nhau
thì chất lượng ảnh giải nén của JPEG – 2000 cao hơn JPEG. JPEG – 2000 có thể được áp
dụng rất tốt đối với các ảnh có kích thước lớn hay độ tương phản nhỏ.
Ta có thể nhận biết ảnh được nén theo chuẩn JPEG – 2000 nếu nó có đuôi : .jp2,
.jpx, .jpc, .j2k.
2.3 PGF – Progressive Graphic File :
PGF là một chuẩn nén ảnh cũng xuất phát từ chuẩn JPEG, phát triển trong cùng
khoảng thời gian xuất hiện của JPEG – 2000, tuy nhiên lại đi theo hướng khác. PGF ra
đời với mục tiêu tăng tốc độ nén so với tỉ số nén.
Dưới đây là sơ đồ khối của PGF :
Hình : sơ đồ khối quá trình nén và giải né ảnh theo PGF
Thay vì biến đổi DCT thì PGF sử dụng phép biến đổi DWT (discrete wavelet

transform)
Không chỉ cải thiện khả năng nén so với JPEG, PGF còn rất mạnh trong việc nén ảnh
ở nhiều bit rate khác nhau. Tuy nhiên, so với JPEG – 2000 thì PGF còn yếu hơn khá
nhiều. (cụ thể có thể đọc trong bài giới thiệu về PGF của Christoph Stamm)
2.4 JBIG2 – Joint Bi-level Image Experts Group :
Đây là một chuẩn dành cho nén ảnh nhị phân, xuất hiện vào những năm 2000 và 2001.
Phần lớn ảnh nhị phân là các file text và các ảnh bán sắc (halftone image). JBIG2 phân
chia ảnh nhị phân thành các vùng : text, halftone và các vùng dẫn xuất khác. Quá trình
nén cho các vùng sẽ được áp dụng các kĩ thuật khác nhau. Các pixel trong một vùng sẽ
được nhóm lại thành các nhóm gọi là symbol. Một từ điển các symbol sẽ được tạo ra và
15
Đồ án tin học GVHD: Đặng Thành Tín
mã hóa. Vì đang là quá trình nén tổn hao, nên một sự khác nhau nhỏ giữa các symbol sẽ
bị bỏ qua. Còn nếu nén không tổn hao thì ta phải xét đến tất cả những khác nhau này.
Trên đây là một số chuẩn nén tổn hao thường thấy nhất có thể thấy trên thị trường. Các
chuẩn nén này được trình bày theo trình tự mức độ phổ biến. Còn có các chuẩn nén tổn
hao khác được áp dụng tùy theo tổ chức và hoàn cảnh, tuy nhiên, do hạn chế về kĩ năng
tìm kiếm và giới hạn của đồ án mà người thực hiện không nêu lên ở đây.
III. Cơ sở lý thuyết trực tiếp của đề tài :
Cơ sở lý thuyết trực tiếp của đề tài là lý thuyết vùng crosspoint lý tưởng và kĩ thuật
lượng tử dữ liệu.
1. Lý thuyết vùng crosspoint lý tưởng :
Sơ lược về lý thuyết vùng crosspoint lý tưởng đã được trình bày ở trên. Ở phần này,
người thực hiện chỉ đưa ra các nhận xét chủ yếu để phục vụ cho việc nêu lên giải thuật
lượng tử.
Dựa vào bảng mô tả một vài biểu diễn của các giá trị trước và sau biến đổi Gray nhị
phân, ta thấy sau biến đổi Gray, ở mỗi vùng crosspoint, các bit dữ liệu lân cân nhau có
những nét đồng nhất rõ rệt. Xét với vùng crosspoint tương ứng với n = 4, vùng A(n) sẽ
bao gồm các giá trị chạy từ 8 đến 23. Sau biến đổi Gray, ta thấy có thể chia vùng
crosspoint A(4) ra làm 4 vùng nhỏ :

- Vùng các giá trị từ 8 đến 11 : đây là vùng thuộc phần trước của A
l
(4) và không thuộc
R(4). Sau biến đổi Gray, các giá trị trong khoảng này có các bit ở mặt phẳng 2,3 và 4
giống nhau là (1 1 0)
- Vùng các giá trị từ 12 đến 15 : đây là vùng thuộc phần sau của A
l
(4) và thuộc R
l
(4).
Sau biến đổi Gray, các bit ở các mặt phẳng 2, 3và 4 của các giá trị trong vùng này giống
nhau : (0 1 0)
- Vùng các giá trị từ 16 đến 19 : đây là vùng thuộc phần đầu của A
g
(4) và thuộc R
g
(4).
Sau biến đổi Gray, các bit ở các mặt phẳng 2, 3 và 4 của các giá trị trong vùng này giống
nhau : (0 1 1)
- Vùng các giá trị từ 20 đến 23 : đây là vùng thuộc nửa sau của A
g
(4) và không thuộc
R
g
(4). Sau biến đổi Gray, các bit ở các mặt phẳng 2, 3 và 4 của các giá trị trong vùng này
giống nhau : (1 1 1)
Từ sự giống nhau này, cộng thêm sự giống nhau ở các bit có trọng số lớn và sự ảnh
hưởng không đáng kể của các bit có trọng số nhỏ hơn mà ta có thể gộp chung các giá trị
trong vùng này lại để lượng tử. Các giá trị trong vùng này, sau lượng tử, sẽ có trị số
giống nhau.

2. Lý thuyết lượng tử hóa dữ liệu :
Lượng tử hóa dữ liệu là kĩ thuật nhóm và quy trị số dữ liệu trong một khoảng nhất
định thành các giá trị hữu hạn. Trong thực tế, dữ liệu mà ta nhận được có nguồn gốc từ
16
Đồ án tin học GVHD: Đặng Thành Tín
bên ngoài. Dữ liệu do đó có thể nhận các giá trị bất kì. Tuy nhiên, máy tính chỉ có thể lưu
giữ và hiểu được một số giá trị hữu hạn. Bởi vậy, ta phải tìm cách quy các giá trị của dữ
liệu thu được thành các giá trị mà máy tính có thể hiểu được để xử lý. Quá trình làm việc
đó gọi là lượng tử.
Một quá trình lượng tử quen thuộc là quá trình lấy mẫu tín hiệu : thời gian liên tục
được lượng tử thành các giá trị rời rạc có khoảng cách giống nhau, giá trị tín hiệu thu
được được lượng tử về các số nguyên gần nhất để lưu vào máy tính thay cho các giá trị
analog.
Ta có thể hiểu lượng tử hóa là quá trình phân chia dữ liệu thành các khoảng xác định
hữu hạn và các điểm dữ liệu trong cùng một khoảng được gán cho cùng 1 giá trị. Người
ta gọi mỗi khoảng đó là một bước. Giá trị lượng tử có thể là điểm giữa của bước hoặc có
thể nằm ở đầu của mỗi bước. Việc phân chia mỗi bước có thể là đều nhau, nếu ta coi dữ
liệu ban đầu có phân bố đều, hoặc độ rộng của mỗi bước tuân theo một quy luật nào đó
mà ta cho rằng phù hợp với dữ liệu cần nén.
Lượng tử hóa là quá trình không thuận nghịch, dù cho khoảng chia của ta có nhỏ đến
thế nào thì trong khoảng đó vẫn còn tồn tại vô số điểm và như vậy chúng sẽ có cùng giá
trị sau lượng tử mà ta không thể suy ngược lại chính xác giá trị của chúng từ giá trị lượng
tử. Cũng bởi đặc điểm này, lượng tử hóa là một quá trình tổn hao. Qua quá trình lượng tử
hóa, ta mất đi một lượng thông tin nhất định từ các dữ liệu ban đầu.
Có thể nói, lượng tử hóa là khâu đặc trưng cho kĩ thuật nén tổn hao.
Người ta chia các kĩ thuật lượng tử hóa thành 2 loại cơ bản : lượng tử vô hướng và
lượng tử vector. Lượng tử vô hướng là kiểu lượng tử áp dụng cho từng điểm dữ liệu riêng
lẻ còn lượng tử vector là kiểu lượng tử áp dụng cho nhóm các điểm dữ liệu. Mỗi nhóm
dữ liệu được gọi là một vector. Mở rộng kĩ thuật chia khoảng ra không gian nhiều chiều,
thì ta thấy có thể chia không gian phân bố của các vector ảnh ra làm các vùng xác định

tuân theo một quy luật nào đó. Các giá trị của các vector trong một vùng sẽ được lượng
tử hóa để có cùng giá trị sau lượng tử.
Giá trị lượng tử của mỗi vùng có thể được tính theo nhiều cách khác nhau : nó có thể
là trung bình cộng của các giá trị của các điểm dữ liệu trong vùng đó hoặc có thể tính
theo công thức để tổng khoảng cách giữa điểm lượng tử và các điểm trong vùng là nhỏ
nhất.
Tóm lại, quá trình lượng tử là quá trình phân chia dữ liệu ra làm các vùng xác định và
gán giá trị đồng nhất cho các điểm dữ liệu nằm trong một vùng. Kết quả của quá trình
này là dữ liệu ban đầu trở nên đơn giản hơn, entropy thấp hơn, thuận lợi cho quá trình mã
hóa về sau. Đồng thời, lượng tử hóa cũng làm giảm lượng thông tin của dữ liệu ban đầu.
Bởi vậy, lượng tử hóa là quá trình đặc trưng cho kĩ thuật nén tổn hao.
Giải thuật của đề tài dựa trực tiếp trên 2 lý thuyết trên : dựa vào sự đồng nhất của các
điểm dữ liệu trong vùng crosspoint lý tưởng, người thực hiện nêu ra giải thuật để chia
vùng cho các điểm dữ liệu trong ảnh phục vụ cho quá trình lượng tử hóa.
Ảnh được đọc và biểu diễn dưới dạng ma trận mà mỗi điểm có giá trị là mức xám của
điểm ảnh tương ứng. Ta sẽ áp dụng lượng tử vector cho ma trận mức xám này. Nhóm 2
điểm lân cận nhau thành một vector. Gọi giá trị đầu tiên là hoành độ, giá trị thứ 2 là tung
độ. Biểu diễn các vector trên mặt phẳng tọa độ sẽ cho ta phân bố của dữ liệu ảnh. Các
vùng crosspoint lý tưởng biểu diễn lên mặt phẳng toạ độ sẽ là các hình chữ nhật có đỉnh
17
Đồ án tin học GVHD: Đặng Thành Tín
là các giá trị giới hạn của vùng crosspoint. Các hình chữ nhật này sẽ lớn dần và sắp xếp
theo được phân giác góc thứ nhất.
Ta xét các vùng crosspoint tương ứng với điểm crosspoint 2
n
. Khi đó, vùng A(n) sẽ
được biểu diễn là hình chữ nhật lớn nhất có các đỉnh lần lượt là (2
n -1
, 2
n-1

),( 2
n -1
, 2
n
+ 2
n-1
– 1), (2
n
+ 2
n-1
– 1, 2
n -1
) và (2
n
+ 2
n-1
– 1, 2
n
+ 2
n-1
– 1). Vùng R(n) sẽ là hình chữ nhật nhỏ
hơn bên trong có các đỉnh lần lượt là (2
n
- 2
n -2
, 2
n
- 2
n -2
), (2

n
- 2
n -2
, 2
n
+ 2
n-2
– 1), (2
n
+ 2
n-2
– 1, 2
n
- 2
n -2
) và (2
n
+ 2
n-2
– 1, 2
n
+ 2
n-2
– 1). Các vùng crosspoint tương ứng khác sẽ là các
hình chữ nhật nhỏ hơn nằm phía trong. Tất cả tạo thành một tập các hình chữ nhật lồng
nhau.
Hình : phân chia vùng theo lý thuyết crosspoint
Dựa vào sự phân tích vùng crosspoint ở mục 3.a, ta chia hình chữ nhật vùng crosspoint
A(n) thành các hình chữ nhật nhỏ hơn dựa vào việc kéo dài các cạnh của hình chữ nhật
vùng crosspoint R(n). Tương tự, khi kéo dài các cạnh của các hình chữ nhật của các vùng

crosspoint con khác ta sẽ có hình chữ nhật A(n) được chia nhỏ thành mạng lưới các hình
chữ nhật nhỏ hơn. Như vậy, ta đã có giải thuật để chia vùng dữ liệu. Các vùng dữ liệu sẽ
được tạo thành một cách hình học là các hình chữ nhật có đỉnh là các giao điểm của các
cạnh kéo dài của các vùng crosspoint, các hình chữ nhật này là các hình chữ nhật đóng.
Đó chính là giải thuật chia vùng của đề tài. Trong thực tế, các vùng này là cố định, bởi
vậy, ta có thể lưu các vùng này mặc định vào chương trình để tiện tham chiếu.
Trong mỗi vùng được chia, giá trị lượng tử sẽ được tính bằng cách tìm điểm thỏa mãn
điều kiện là tổng bình phương khoảng cách từ nó tới các điểm trong vùng là nhỏ nhất.
18
Y
X
Crosspoint
Đồ án tin học GVHD: Đặng Thành Tín
IV. Giải thuật của đề tài :
Như vậy, giải thuật của đề tài bao gồm các bước sau :
- Lượng tử bước đầu để giảm dãy mức xám
- Phân các vector vào các vùng tương ứng.
- Tìm giá trị lượng tử cho mỗi vùng
Lượng tử bước đầu : đầu tiên, ta lượng tử cách đều với bước là 2. Sau bước này, dãy
giá trị mức xám giảm xuống còn những giá trị mức xám chẵn. Sau đó, ta thống kê đưa về
ma trận thứ tự mức xám có trong ảnh ( tương ứng với hàm sta()). Làm như vậy, ta giới
hạn chỉ biến đổi đối với các giá trị mức xám có trong ảnh chứ không biến đổi tất cả các
mức xám từ 0 đến 255 vì trong thực tế, nhiều mức xám không tồn tại trong ảnh.
for (i = 0; i < hei/2; i++)
for (j = 0; j < wid; j++)
{
temp = pict[i][j]-(pict[i][j])%2;//luong tu voi buoc bang 2
pict[i][j] = pict[hei-1-i][j]-(pict[hei-1-i][j])%2;//luong tu voi buoc bang 2
pict[hei-1-i][j] = temp;
}

Phân các vector vào các vùng tương ứng :
Mỗi vùng có kích thước và tọa độ xác định đã được lưu vào chương trình. Ta đọc các
vector, so sánh các giá trị tọa độ của nó và đưa nó vào các vùng tương ứng. Mỗi vùng giờ
đây là một chuỗi có thành phần là các vector dữ liệu.
Ở đây, ta không tính cho tất cả các vùng crosspoint mà chỉ lượng tử đối với vùng
crosspoint tương ứng với crosspoint là 64. Bởi vì, các mặt phẳng bit dưới có tính ngẫu
nhiên cao mà lại không ảnh hưởng lớn tới chất lượng ảnh. Ta cũng có thể nâng cấp giải
thuật bằng cách phân chia cả các vùng crosspoint cho các crosspoint dưới. Như vậy, chất
lượng ảnh giải nén sẽ tốt hơn.
Tìm giá trị lượng tử cho mỗi vùng :
Ứng với mỗi chuỗi như trên, ta tìm một điểm lượng tử bằng cách giải bài toán tìm
điểm có tổng bình phương khoảng cách tới các điểm trong vùng là bé nhất.
Nhược điểm của giải thuật :
- Các vùng là cố định cho tất cả các ảnh, một số vùng là rất lớn.
Tuy nhiên, ta có thể chia nhỏ các vùng này hơn nữa, bằng cách coi mỗi hình chữ nhật
nhỏ là một vùng crosspoint mới nếu có thể tìm thấy điểm crosspoint trong nó. Điểm
crosspoint này có thể tìm được khi xét hiệu của 2 giới hạn. Đồng thời, các hình chữ nhật
giữa 2 vùng crosspoint của các điểm crosspoint kế tiếp có thể giao nhau, đó cũng là một
cơ sở để phân chia nhỏ các vùng.
- Sau khi lượng tử, các điểm dữ liệu gần nhau sẽ mất đi tính tương tự. Như vậy, sẽ
hưởng tới hiệu quả của quá trình tìm vùng crosspoint và ứng dụng vào tối ưu hóa xác suất
của chương trình được cung cấp.
- Việc tính giá trị lượng tử bằng cách tính bình phương cực tiểu thực ra là tìm trung
bình theo từng tọa độ. Việc tính trung bình cần tổng của tất cả các giá trị trong một vùng,
tổng này có thể quá lớn gây tràn bộ nhớ và mất thời gian.
19
Đồ án tin học GVHD: Đặng Thành Tín
Có thể giải quyết khó khăn này bằng cách tính trung bình từ từ, tức là sau mỗi điểm
được nhận vào vùng thì ta lại tính lại trị trung bình. Cách làm này có thể khắc phục lỗi
tràn bộ nhớ do số quá lớn.

Source code :
// Luong tu ma tran sau bien doi bang luoi chu nhat chunhat[]
// luong tu binh phuong cuc tieu
for (i = 0; i < 20; i++)
for (j = 0; j < 20; j++)
{
tanso[i][j]=0;
averageX[i][j]=0;
averageY[i][j]=0;
}
for (i = 0; i < hei; i++)
for (j = 0; j < wid; j+=2)
{
k=0;
while (pict[i][j]>=chunhat[k])
k+=1;
l=0;
while (pict[i][j+1]>=chunhat[l])
l+=1;
tanso[k-1][l-1]+=1;
averageX[k-1][l-1]=((tanso[k-1][l-1]-1)*averageX[k-1][l-1]+pict[i][j])/tanso[k-
1][l-1];
averageY[k-1][l-1]=((tanso[k-1][l-1]-1)*averageY[k-1][l-1]+pict[i]
[j+1])/tanso[k-1][l-1];
}
for (i = 0; i < hei; i++)
for (j = 0; j < wid; j+=2)
{
k=0;
while (pict[i][j]>=chunhat[k])

k+=1;
l=0;
while (pict[i][j+1]>=chunhat[l])
l+=1;
pict[i][j]=(char)averageX[k-1][l-1];
pict[i][j+1]=(char)averageY[k-1][l-1];
}
}
với ma trận chunhat[] lưới lượng tử được xác định ỏ chương trình chính:
20
Đồ án tin học GVHD: Đặng Thành Tín
// tao luoi luong tu
chunhat[0]=64;
for (i = 1; i <= 6; i++)
chunhat[i]=64+pow(2,i-1) ;
for (i = 7; i <=11 ; i++)
chunhat[i]=128-pow(2,11-i) ;
chunhat[12]=128;
for (i = 13; i <= 19; i++)
chunhat[i]=128+pow(2,i-13);
V. Kết quả thực hiện :
Từ lý thuyết đã trình bày,ta xây dựng được chương trình (ngôn ngữ C) nén và giải nén
tổn hao ảnh *.bmp .Sau đây là một số kết qủa ví dụ cụ thể:
Ảnh Zelda.bmp Ảnh zelda_gn.bmp
21
Đồ án tin học GVHD: Đặng Thành Tín
Ảnh chest.bmp ảnh chest_gn.bmp
Nén file zelda.bmp:
Nén file chest.bmp
22

Đồ án tin học GVHD: Đặng Thành Tín
Bảng so sánh giữa kết quả với các chuẩn nén khác (ảnh nằm trong folder exe)
Chương trình Chuẩn JPEG GIF
Zelda.bmp 3.32 6.6 1.25
C1.bmp 4 10.8 1.35
C2.bmp 4.1 9.8 1.1
C3.bmp 5.5 10 1.37
Chest.bmp 3.2 3.65 1.38
C10.bmp 3.6 9.1 1.24
Mountain.bmp 2.0 2.9 1.3
Maindrill.bmp 1.7 3.9 0.86
Nhận xét :
GIF chỉ là một định dạng ảnh chứ không phải chuẩn nén tổn hao, việc đưa thêm GIF
vào chỉ có giá trị tượng trưng.
Tỉ số nén đạt được của chương trình so với chuẩn JPEG là thấp, thường thì nó chỉ xấp
xỉ khoảng một nửa, tuy nhiên chất lượng ảnh giải nén khá tốt. Có thể điều chỉnh thuật
toán để tăng tỉ số nén tuy nhiên như vậy chất lượng ảnh giải nén sẽ kém hơn. Ta chọn giữ
chất lượng ảnh giải nén.
23
Đồ án tin học GVHD: Đặng Thành Tín
Tài liệu tham khảo :
1) Lý thuyết vùng crosspoint và ứng dụng trong nén ảnh có thang xám (luận án
tiến sĩ) – Đặng Thành Tín.
2) Data compression complete reference 4
th
– David Salomon
3) Fundamental data compression – Ida Mengyi Pu
4) The data compression book 2
th
– Mark Nelson, Jean – Loup Gailly

24
Đồ án tin học GVHD: Đặng Thành Tín
25

×