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

Lượng tử hoá vecto trong nén ảnh

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 (739.61 KB, 19 trang )

1

Trƣờng đại học Bách Khoa Hà Nội
Viện công nghệ thông tin và truyền thông
***






BÁO CÁO: XỬ LÝ DỮ LIỆU ĐA PHƢƠNG TIỆN


Đề tài: Lƣợng tử hóa vector(Vector Quantization VQ) và áp dụng trong nén
ảnh



GV phụ trách: PGS.TS. Nguyên Thị Hoàng Lan

Sinh viên thực hiện:
Bùi Tuấn Sơn shsv: 20092230
Lê Hữu Thành shhv: 20092416
Hoàng Doãn Quân shsv: 20093579
Trần Bảo Long shsv: 20091667
Đỗ Quang Minh shsv: 20091772





Hà Nội 5/2012
2



Mục lục
Lời nói đầu 3
Phân công 4
I.Tổng quan 5
1. giới thiệu 5
2. một số ví dụ trực quan đơn giản 5
1. Mô hình toán học tổng quát………………… 6
II.Quá trình lƣợng tử hóa vector… 8
1. Huấn luyện 8
2. Thực hiện mã hóa và giải mã……………… 9
III.Các phƣơng pháp xây dựng codebook 10
1. Phương pháp phân phối ngẫu nhiên 10
2. Phương pháp phân phối đều……………………………………………… 12
3. So sánh 2 phương pháp… ……………………………………………… 13
III.Áp dụng vào nén ảnh 14
1. Thiết kế chương trình…………… 14
1. Chạy chương trình và đánh giá kết quả 16
Kết luận 19
Tài liệu tham khảo 19



3

Lời nói đầu:

Việc lưu trữ và truyền dữ liệu ảnh số ngày càng trở nên quan trọng, tuy nhiên dung lượng
một bức ảnh số ở dạng chưa nén là rất cao và cơ sở hạ tầng truyền thông còn nhiều hạn
chế, để việc lưu trữ và truyền dữ liệu cần phải nén ảnh nhằm giảm dung lượng nhưng vẫn
phải đáp ứng cảm nhận thị giác của con người. Lượng tử hóa vector ( vector
quantization) là một phương pháp nén dữ liệu có nhiều ứng dụng trong thực tế, trong báo
cáo này chúng em sẽ trình bày các vấn đề cơ bản về lượng tử hóa vector, với trọng tâm là
ứng dụng của nó trong nén ảnh số.
















4

Phân công:



 I.Tổng Quan: Bùi Tuấn Sơn

 II. Quá trình lượng tử hóa vector: Lê Hữu Thành
 III. xây dựng codebook: Hoàng Doãn Quân
 IV.Ứng dụng vào nén ảnh:
1. Thiết kế chương trình: Trần Bảo Long
2. Viết code chính, chạy chương trình và đánh giá kết quả: Đỗ Quang Minh










5

I.Tổng quan

1.Giới thiệu
Lượng tử hóa vector (vector quantization) là một phương pháp nén dữ liệu có tổn
hao. Năm 1980, Y. Linde, A. Buzo, và R. M. Gray, (LBG) đưa ra giải thuật lượng tử hóa
vector dựa trên tập huấn luyện. Sau này phương pháp lượng tử hóa vector được cải tiến
và áp dụng nhiều hơn.
2.Một số ví dụ trực quan đơn giản:
Không gian một chiều:


Xét trên phần trục tọa độ từ -4 đến 4, chọn ra các điểm mẫu -3,-1,1,3 được đánh số dạng
nhị phân tương ứng: 00,01,10,11. Các điểm đầu vào trong khoảng -4 đến -2 sẽ được làm

tròn về -3, các điểm từ -2 đến 0 sẽ được làm tròn về -1, các điểm từ 0 đến 2 sẽ được làm
tròn về 1, các điểm từ 1 đến 4 sẽ được làm tròn về 3. Như vậy ta sẽ tiết kiệm được không
gian bộ nhớ khi lưu trữ và đàu ra sẽ là các giá trị gần đúng thay vì giá trị ban đầu.

Không gian hai chiều
6


Trên một phần mặt phẳng, chọn ra 16 điểm như trong hình. Mỗi điểm ban đầu trong mặt
phẳng là một vector 2 chiều,, tùy vào vùng mà nó nằm, điểm đó sẽ được làm tròn về một
trong 16 điểm này và được mã hóa bởi 4 bit. tương tự như trường hợp một chiều, ta cũng
sẽ tiết kiệm được không gian lưu trữ và dữ liệu đàu ra sẽ là các giá trị gần đúng so với
ban đầu.
3. Mô hình toán học tổng quát:
 Từ tập dữ liệu nguồn ban đầu, chọn ra tập dữ liệu huấn luyện gồm M vector

 Mỗi vector huấn luyện gồm k chiều:

 Codebook (C) là tập các vector mã, mỗi vector mã là một điểm mà một số vector
nguồn được làm tròn về nó trong quá trình nén, trong 2 ví dụ ở trên codebook
chinh là tập các điểm màu đỏ. Codebook gồm N vector:
7


 Mỗi vector code book k chiều:

 Không gian được phân hoạch thành N vùng:

 Mỗi vector nguồn xác định vùng của nó bằng hàm Q:


 Tham số quan trong để đánh giá hiệu quả và điểu chỉnh thuật toán nén là độ lệch
trung bình D
ave
được tính theo công thức:

 Vấn đề đặt ra: cho T và N, tìm C và P để D
ave
min










8

II. Quá trình lƣợng tử hóa vector
2 giai đoạn(2 pha):
 Giai đoạn 1: Huấn luyện (trainning)
 Giai đoạn 2: Thực hiện mã hóa và giải mã
1.Huấn luyện
Huấn luyện dựa theo mô hình toán học, các bƣớc thực hiện:
 Không gian dữ liệu nguồn k chiều:
• X= {x
1,
x

2
, … , x
i
} với x
i
là vector k chiều
 Chọn ra tập dữ liệu huấn luyên T ( T là con của X):
• T={x
1
, … , x
n
}
 Theo thuật toán huấn luyên , tạo codebook :
• C={C1,C2,….C
N
} với Ci = {C
i1
, C
i2
, …, C
ik
} (code-vector)
• Phân hoạch P chia tập T thành N tập con:
• P={S1, S2, … , S
N
}
Yêu cầu thỏa mãn 2 tiêu chuẩn tối ƣu:
 Láng giềng gần nhất

Sn là tập các vector x gần với code-vector c

n
hơn các code- vector khác
 Điều kiện trọng tâm:

c
n
là trọng tâm của phân hoạch S
i

9

2. thực hiện mã hóa và giải mã
Sơ đồ mã hóa và giải mã:

 Mã hóa:
 Không gian dữ liệu nguồn X ( ngoài tập huấn luyện còn nhiều vector
dữ liệu khác)
 Với mỗi vector x
m
, tìm code-vector c
n
thỏa mãn điều kiện khoảng
cách gần nhất từ x
m
đến c
n

 Q(x
m
) = c

n

 Thay giá trị của x
m
bằng chỉ số của c
n
trong codebook
 Giải mã:
 Từ chỉ số của c
n
, khi tái tạo dữ liệu X ta đặt giá trị của Cn vào vị trí
tương ứng của x
m




10

III. Các Phƣơng pháp xây dựng codebook
2 phƣơng pháp chính:
 Phân phối ngẫu nhiên: xây dựng vector mã phân phối ngẫu nhiên theo tiêu
chí tối ưu
 Phân phối đều: xây dựng các vector mã phân phối đều
1.Phƣơng pháp phân phối ngẫu nhiên
Trƣờng hợp đơn giản nhất với vector một chiều, thuật toán cơ bản Lloyd:
 T={ti} i=[1,…M] vector huấn luyện
 Thuật toán tổng quát:
 Khởi đầu chọn ra tập các vector mã C={C1,C2,….C
N

} ,
 Lặp:
• Dựa vào tập C, Phân hoạch P chia tập T thành N tập con:
o P={S1, S2, … , SN}
• Với mỗi Ci, có l vector huấn luyện nằm trong phân hoạch Si chứa
Ci, tìm Ci mới theo công thức: Ci(new)= (t1(i) +…+tp(i))/l
o Ta thu đươc tập codebook mới C={C1,C2,….C
N
}

Bước lặp diễn ra cho đến khi codebook tìm được thỏa mãn yêu câu nào đó cho trước.
Lloyd có thể dễ dàng mở rộng cho vector nhiều chiều với các bước tương tự như trên.
Vấn đề quan trọng nhất của thuật toán Lloyds là làm thế nào để chọn ra N vector khởi
đầu, điều này được giải quyết bởi các thuật toán khác mạnh mẽ và cụ thể hơn.
LBG : thuật toán đƣơc Linde, Buzo và Gray đƣa ra từ năm 1980, có thể coi đây là
một sự mở rộng của thuật toán Lloyds:
Thuật toán này xuất phát với một vector mã ban đầu và nhân đôi dần lên cho đến khi đủ
số lượng vector mã cần thiết, trong quá trình nhân đôi đó các vector mã được săp xếp lại
theo thuật toán Lloys, sau đây là cac bước cụ thể của thuật toán Lloyds:
11

1. Cho T, đặt ϵ > 0 là một số nhỏ ( chẳng hạn 0,001)
2. Đặt N = 1 và

Tính

3. Tách: i = 1, 2, 3, …, N, đặt

Và N = 2N
4. Lặp : D

ave
(0)
= D
ave
*
. đặt chỉ số lặp lại i = 0
a. Với m = 1, 2, …, M , tìm giá trị nhỏ nhất của ||x
m
– c
n
(i)
||
2

Với n = 1,…, N, n
*
là chỉ số mà tại đó đạt được giá trị nhỏ nhất đang xét,
đặt: Q(x
m
) = c
n*
(i)


b. Đối với n = 1, 2,…, N, ta cập nhật các vector mã

c. Đặt i = i+1
d. Tính

e. Nếu , quay lại bước 4.a

f. Đặt D
ave
*
= D
ave
(i)
với n = 1, 2, …, N thì c
n
(*)
= c
n
(i)

Là giá trị cuối cùng của các codevector

5. Lặp lại các bước 3 và 4 cho đến khi đạt được số vector mã mong muốn.

12

2.Phƣơng pháp Phân phối đều
Các vector mã được phân phối đêu trong không gian nguồn.
Không gian dữ liệu nguồn là X (k chiều), Để dễ biểu diễn, ta ánh xạ các vector trong
không gian X sang một không gian Y( k chiều) dạng lưới đều (grid)
 Ma trận L (không suy biến) để ánh xạ các vector nguồn vào không gian này
 y
i
= L*x
i
(ánh xạ vector x
i

trong không gian X

thành vector y
i
trong không gian V)
 x
i
= L
-1
*

y
i
(ánh xạ vector yi trong không gian Y thành vector x
i
trong không gian
X)
Các vector mã trong không gian X khi được ánh xạ sang không gian Y sẽ nằm tại các
điểm nguyên (ta kí hiệu c
i
trong X ánh xạ sang p
i
trong Y). Mỗi vùng S
i
chứa c
i
được
phân hoạch trong không gian X sẽ được ánh xạ thành một vùng(gọi là voronoi zone)
trong không gian Y bao đều xung quanh trọng tâm p
i

của nó, ví dụ với không gian 2
chiều mỗi voronoi zone là một hình vuông, không gian 3 chiều mỗi voronoi zone là một
hình lập phương.


Minh họa trong không gian 2 chiều:



13

3. so sánh 2 phƣơng pháp
 Phân phối ngẫu nhiên:
• tính toán phức tạp, tốn tài nguyên để xử lý dữ liệu.
• Hiệu quả cao.

 Phân phối đều:
• Tính toán đơn giản, tốn ít tài nguyên để xử lý dữ liệu
• Hiệu quả thấp, chỉ phù hợp nếu các vector nguồn trải đều trong một phần
không gian.















14

IV. Áp dụng vào nén ảnh
1. thiết kế chƣơng trình:
Đặc trưng: tốc độ nén chậm (do bước tạo codebook), tốc độ giải nén nhanh, đặc biệt rất
linh hoạt trong việc lựa chọn thuật toán tạo codebook và các tham số đầu vào
Các vấn đề cơ bản:
 Công cụ sử dụng: matlab.
 Dữ liệu ảnh trước mã hóa: ảnh số
 Dữ liệu sau nén:
o file ảnh nén(nhị phân)
o Codebook(nhị phân)
 Dữ liệu ảnh sau giải nén: dựa vào file ảnh nén và codebook, giải nén ta được ảnh
số có dung lượng bằng với ánh gốc.
 Chọn phương pháp tạo codebook: do dữ liệu ảnh không phân phối đều nên phải
lựa chọn phương pháp tạo codebook phân phối ngẫu nhiên theo tiêu chí tối ưu, cụ
thể trong chương trình này sẽ sử dung LBG.
 Lựa chọn tham số:
o Tâp vector huấn luyên: chọn toàn bộ tập vector nguồn
o Các tham số khác có thể thay đổi linh hoạt theo yêu cầu người dung:
 Số giá trị dữ liệu trong một khối điểm ảnh: chọn block
2*2*3,4*4*3,…. Từ đó chọn được số chiều vector dữ liệu( ví dụ nếu
chọn nén theo block 2*2*3 thì vector dữ liệu sẽ có 12 chiều.
 Số lượng vector mã trong codebook.




15


Quá trình xử lý dữ liệu:
Sơ đồ chương trình:

 Dữ liệu ảnh được chuyển thành dạng ma trận số ( ảnh xám là 2 chiều, ảnh màu
BMP là 3 chiều), mỗi phần tử ma trận từ 0->256.
 Mỗi vector tương ứng với một khối các điểm ảnh gần nhau (2x2,4x4,8x8,…)
 Biến đổi ma trận ban đầu thành một ma trận mới sao cho mỗi vector k chiều được
biểu diễn dưới dạng một ma trận 1 hàng N cột (mảng N phần tử)
 Tạo codebook - hàm makecb(x,s,cbookleng): x là ma trận số cảu ảnh đầu vào, s là
tham số chỉ ra độ lớn của khối điểm ảnh ( ví dụ khối 4*4 thì s=4), cbookleng là số
vector mã trong codebook
 Mã hóa -hàm vqencode(x,cbook,s), x là ma trận số của ảnh đầu vào, cbook là ma
trận các vector mã, s là tham số chỉ ra độ lớn của khối điểm ảnh .
 Giải mã- hàm vqdecode(): đầu vào là file đã nén và file codebook, hàm này sẽ tái
tạo lại ma trận ban đầu bằng các vector mã tương ứng với chỉ số được lưu rồi xuất
ra màn hình
Đánh giá kết quả:
Đánh giá kết quả bằng 2 hàm:
 Hàm psnr(x,y) :x là ma trận số cảu ảnh đầu vào, y là ma trận só cảu ảnh sau giải
nén. Hàm này trả về một giá trị là tỉ số tín hiệu cực đại trên nhiều (Peak signal-to-
noise ratio), nó cho ta biết chất lượng của chương trình nén ảnh, giá trị này càng
cao càng tốt.
 Hàm ratio(): tính tỉ số giữa ảnh đầu vào và file nén để trả về tỉ số nén
16

2. Chạy chƣơng trình và đánh giá kết quả:

Ta sẽ chạy thử chương trình với các tham số đầu thay đổi : kích thước khối điểm ảnh(dẫn
đến thay đổi số chiều vector) và số lượng vector mã trong codebook, từ đó ra ảnh hưởng
của các tham số đầu vào đó tới chất lượng chương trình nén.
Sử dụng bức ảnh gốc: lena.bmp, kích thước 256*256


Lần thứ nhất: lấy tham số đầu vào làm mốc cho các lần chạy sau:
 Khối điểm ảnh tạo thành một vector nguồn: 4*4*3
 Số lượng vector mã: 64
Thu được ảnh sau giải nén:
17

 PSNR = 25.5825
 Tỉ số nén: 63.9584
Nhận xét: Chất lượng ảnh giải nén khá kém, tỉ số nén cao.

Lần thứ 2: giảm kích thước khối điểm ảnh ( giảm số chiêu vector nguồn), giữ nguyên số
vector mã trong code book so với lần thứ nhất.
 Khối điểm ảnh tạo thành một vector nguồn: 2*2*3
 Số lượng vector mã: 64
Thu được ảnh sau giải nén:
 PSNR = 28.6109
 Tỉ số nén = 15.9974
Nhận xét: So với lần thứ nhất, chất lượng ảnh đã tăng lên nhiều, đổi lại tỉ số nén giảm
xuống thấp hơn hẳn.

Lần thứ 3: giữ nguyên kích thước khối điểm ảnh (giữ nguyên số chiêu vector nguồn),
tăng số vector mã trong codebook so với lần thứ nhất.
 Khối điểm ảnh tạo thành một vector nguồn: 4*4*3
 Số lượng vector mã: 256

18

Thu được ảnh sau giải nén:
 PSNR = 27.7434
 Tỉ số nén = 47.9766
Nhận xét: So với lần thứ nhất, chất lượng ảnh đã tăng lên đáng kể, đổi lại tỉ số nén giảm
xuống thấp hơn nhưng không quá thấp như lần thứ 2.

Nhận xét chung: Thực nghiệm cho kết quả phù hợp với lý thuyết, khi giảm độ lớn (số
chiều) của vector nguồn hoặc tăng số vector mã trong codebook, chất lượng ảnh nén sẽ
tăng lên nhưng tỉ số nén sẽ giảm đi và ngược lại.









19

Kết luận:

Dữ liệu lưu trữ và truyền tải trên mạng máy tính ngày càng gia tăng, đặc biệt là dữ
liệu hình ảnh và video, với ưu điểm về sự linh hoạt của mình phương pháp lượng tử hóa
vector đang được sử dụng nhiều trong thực tế (ví dụ: Twin vector quantization – một
dạng cải tiến của lượng tử hóa vector dùng trong MPEG-4 ) và hứa hẹn sẽ tiếp tục được
cải tiến và sử dụng trong tương lai. Trong quá trình thực hiện đề tài này, do thiếu sót về
kiến thức cũng như kinh nghiệm thực tế nên khó tránh khỏi những sai sót. Chúng em

mong nhận được sự đóng góp ý từ cô và các bạn để có thể hoàn thiện tốt hơn.Chúng em
xin chân thành cám ơn!


Tài liệu tham khảo

 Bài giảng môn xử lý dữ liệu đa phương tiện – PGS.TS Nguyễn Thị Hoàng Lan.
 Digital audio and video compression – Stephen J.Solari
 ``An Algorithm for Vector Quantizer Design,'' IEEE Transactions on
Communications - Y. Linde, A. Buzo, R. M. Gray
 Image Compression with Vector Quantization- Ivan Assen Ivanov

×