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,
Trang 1Trườ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
Trang 2Mụ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
Trang 3Lờ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ố
Trang 4Phâ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
Trang 5I.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
Trang 6Trê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:
Trang 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 Dave được tính theo công thức:
Vấn đề đặt ra: cho T và N, tìm C và P để Dave min
Trang 8II 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= {x1, x2, … , xi} với xi 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={x1, … , xn}
Theo thuật toán huấn luyên , tạo codebook :
• C={C1,C2,….CN} với Ci = {Ci1, Ci2, …, Cik} (code-vector)
• Phân hoạch P chia tập T thành N tập con:
• P={S1, S2, … , SN}
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
Trang 92 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 xm, tìm code-vector cn thỏa mãn điều kiện khoảng cách gần nhất từ xm đến cn
Q(xm) = cn
Thay giá trị của xm bằng chỉ số của cn trong codebook
Giải mã:
Từ chỉ số của cn, 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 xm
Trang 10III 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,….CN} ,
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,….CN}
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:
Trang 111 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 : Dave(0) = Dave* đặ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 ||xm – cn(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(xm) = 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 Dave* = Dave(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
Trang 122.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
yi= L*xi (ánh xạ vector xi trong không gian X thành vector yi trong không gian V)
xi = L-1*yi(ánh xạ vector yi trong không gian Y thành vector xi 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 ci trong X ánh xạ sang pi trong Y) Mỗi vùng Si chứa ci đượ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 pi 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:
Trang 133 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
Trang 14IV Á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
Trang 15Quá 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
Trang 162 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:
Trang 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
Trang 18Thu đượ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
Trang 19Kế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