Tải bản đầy đủ (.docx) (20 trang)

Lượng tử hóa vector và áp dụng 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 (577.13 KB, 20 trang )

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
TRUYỀN THÔNG ĐA PHƯƠNG TIỆN
ĐỀ TÀI:
LƯỢNG TỬ HÓA VECTOR VÀ ÁP DỤNG
TRONG NÉN ẢNH
Sinh viên thực hiện:
Nguyễn Hữu Đông

20121533

Nguyễn Mạnh Cường

20121365

Trần Việt Anh

20121242

Nguyễn Như Nai
Lan

20122096

Giảng viên hướng dẫn: PGS.TS Nguyễn Thị Hoàn


Hà Nội, tháng 5 năm 2016




Contents


PHÂN CÔNG CÔNG VIỆC
NỘI DUNG

THỰC HIỆN

Tìm hiểu chung về phương pháp lượng tử
hoá vector.

Nguyễn Mạnh Cường

Tìm hiểu chung các phương pháp xây dựng
bộ codebook và trình bày một thuật toán xây
dựng codebook.

Nguyễn Như Nai

Trình bày sơ đồ áo dụng VQ trong nén ảnh và
thuật toán mã hóa ảnh dùng VQ.

Trần Việt Anh

Xây dựng cài đặt ứng dụng thử nghiệm
Xây dựng cài đặt ứng dụng thử nghiệm. Phân
tích và đo lường hiệu năng


4

Nguyễn Hữu Đông


1. TÌM HIỂU CHUNG VỀ KỸ THUẬT VQ
1.1 Lý thuyết lượng tử hóa
Lượng tử hóa là quá trình ánh xạ một tập dữ liệu lớn sang một tập dữ liệu nhỏ hơn.
Do đó, nó được làm nền tảng trong rất nhiều thuật toán nén dữ liệu. Trong xử lí tín hiệu số
nó chính là quá trình rời rạc hóa về mặt biên độ sau khi rời rạc hóa về mặt thời gian bằng
cách xấp xỉ giá trị tín hiệu ban đầu về một giá trị đơn giản hơn đã lựa chọn từ trước. Quá
trình lượng tử hóa tín hiệu hoặc dữ liệu ban đầu sẽ gây ra một sai số gọi là sai số lượng tử
hóa. Thiết bị hoặc một hàm thuật toán dùng để lượng tử hóa được gọi là bộ lượng tử hóa
(quantizer).

Do lượng tử hóa là một phép ánh xạ từ một tập lớn sang một tập nhỏ hơn nên nó là
một quá trình không tuyến tính và không có tính thuận nghịch- tức là với dữ liệu đầu ra ta
không thể thu lại (recover) một cách chính xác dữ liệu ban đầu.
Trong lượng tử hóa, tập dữ liệu đầu vào có thể là vô hạn,liên tục và không đếm được
còn tập dữ liệu đầu ra có thể hữu hạn hoặc vô hạn đếm được.
1.2 Lượng tử hóa vector (VQ)
1.2.1Các khái niệm
Lượng tử hóa vector là cách thức nén dữ liệu có gây mất mát dựa trên nguyên tắc mã
hóa khối. Đây là kĩ thuật được sử dụng trong nhiều ứng dụng như nén ảnh, nén âm thanh,
5


nhận dạng âm thanh… Trước đây việc thiết kế một bộ lượng tử hóa vector được xem là một
vấn đề nan giải do cần phải tích hợp đa chiều. Vào năm 1980, Linde, Buzo và Gray đã đưa ra
thuật toán thiết kế bộ lượng tử hóa vector (LBG) dựa trên một tập học nhờ đó tránh được

việc phải tích hợp đa chiều.
Phép lượng tử hóa vector là một phép ánh xạ các vector k chiều trong không gian
vector k chiều sang một tập xác định các vector Y = {yi: i=1, 2,…, N}. Mỗi vector yi được gọi là
một codevector hay còn gọi là một codeword và tập các codevector này gọi là một
codebook.
Đối với mỗi một codeword yi, các vector nằm gần nó nhất so với tất cả các codeword
còn lại tạo thành một vùng (Vi) gọi là vùng được mã hóa (encoding regions hay voronoi
region):

Tập các encoding region được gọi là phân vùng không gian Rk:

6


Một phân vùng không gian
Như vậy có thể thấy, phép lượng tử hóa vector gần như là một cách lấy xấp xỉ các giá trị
đầu vào. Ví dụ ta xét một phép lượng tử hóa vector 1 chiều:

Ở đây, các giá trị xấp xỉ được mã hóa bằng 2 bit, các số nhỏ hơn -2 được lấy xấp xỉ là
-3 và được mã hóa là 00 , các số thuộc khoản từ -2 đến 0 được lấy xấp xỉ bằng -1 và được mã
hóa là 01, các số nằm trong khoảng từ 0 đến 2 được lấy xấp xỉ là 1 và được mã hóa là 10, các
số trong khoảng còn lại lấy xấp xỉ là 3 và được mã hóa là 11.Tập các số nguyên trên trục số là
tập các vector đầu vào 1 chiều; -3,-1,1,3 là các codeword và tập {-3,-1,1,3} là codebook.
Không gian xét ở đây chính là tập các số nguyên Z. Đây gọi là phép lượng tử hóa vector 2bits,
1 chiều (1-dimensional, 2-bit VQ).
Một ví dụ về phép lượng tử hóa vector 4 bits, 2 chiều:

7



Các ngôi sao (chính là các codeword) là kết quả của việc lấy xấp xỉ các cặp số trong
các khu vực (encoding region) chứa nó trên hình vẽ. Mỗi ngôi sao này sẽ được mã hóa bằng
4 bit (16 ngôi sao).
1.2.2 Vấn đề thiết kế bộ lượng tử hóa vector (vector quantizator)
a. Đặt vấn đề

Như đã trình bày trong phần lý thuyết về lượng tử hóa thì mục đích của các bộ lượng
tử là các giá trị đầu ra phải có độ lệch trong giới hạn có thể tái hiện lại nguồn ban đầu, độ
lệch càng bé thì tín hiệu ra càng giống tín hiệu nguồn. Để đạt được điều này thì các sai số
trong quá trình lượng tử cũng phải được quan tâm. Đối với phương pháp VQ thì mục đích là
phải chọn ra được các codevector sao cho độ lệch trung bình giữa codevector với các vector
trong cùng một vùng mã hóa được định ra bởi codevector đó là thấp nhất.
Xét một tập học T gồm M phần tử:

Tập học này có thể thu được từ một số cơ sở dữ liệu lớn .Ví dụ nếu nguồn là một tín
hiệu tiếng nói, khi đó tập nguồn có thể thu được từ việc ghi âm một vài cuộc hội thoại dài
trên điện thoại. Ở đây, M được giả thiết là đủ lớn để tập T thể hiện được hết các thuộc tính
của nguồn và giả thiết rằng các vector nguồn có k chiều.

8


Gọi N là số lượng codevector, tập codebook là C:

Trong đó, cn (n=1,2,…,N) là một codevector k chiều:

Số vùng mã hóa là N. Gọi Sn (n=1,2,…,N) là một encoding region được định ra từ
codevector cn , P là phân vung không gian chứa các Sn.

Như vậy tất cả các vector xn nằm trong vùng Sn được lấy xấp xỉ gần đúng bởi cn. Ta

có hàm lượng tử hóa:

Và độ lệch trung bình của phép lượng tử là:

Như vậy, vấn đề ở đây là khi cho tập học T và định ra số lượng các codevector là N,
cần phải tìm ra tập C, P để có giá trị nhỏ nhất.
b. Tiêu chuẩn tối ưu

Các tập C, P thỏa mãn vần đề nêu trên phải thỏa mãn 2 điều kiện sau:
- Nearest Neighbor Condition:

Khoảng cách giữa các vector nằm trong vùng Sn với codevector cn so với các
codevector khác phải là nhỏ nhất.
- Centroid Condition:

9


Codevector cn có giá trị bằng giá trị trung bình của các vector nằm trong vùng Sn.
Trong thực nghiệm, mỗi vùng sẽ có ít nhất một vector trong tập học ban đầu (do đó mẫu của
biểu thức trên luôn khác 0).
1.2.3 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ã
o

A. 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
Khoảng cách giữa các vector nằm trong vùng Sn với codevector cn so với các
codevector khác phải là nhỏ nhất

• Điều kiện trọng tâm:

Codevector cn có giá trị bằng giá trị trung bình của các vector nằm trong vùng Sn.
Trong thực nghiệm, mỗi vùng sẽ có ít nhất một vector trong tập học ban đầu (do đó mẫu của
biểu thức trên luôn khác 0).
10


o

B. Thực hiện mã hóa và giải mã

o Sơ đồ mã hóa và giải mã:


o 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

o 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
2. Tìm hiểu chung về phương pháp xây dựng codebook
2.1

Giới thiệu

Nén ảnh sử dụng VQ được thực hiện bằng cách so sánh các dữ liệu trong ảnh ban
đầu (gọi là các vector training) với các giá trị trong codebook. Kết quả là sẽ đưa ra chỉ số của
codeword có sự sai số bé nhất so với dữ liệu ảnh ban đầu. Chỉ số này sẽ được sử dụng thay
cho giá trị cần lượng tử. Điều này làm giảm không gian lưu trữ và làm tăng tỉ số nén. Vấn đề
ở đây cần tạo ra được codebook với các codevector sao cho quá trình lượng tử hóa trong
nén ảnh có sai số tối thiểu.
Ta có thuật toán rất mạnh mẽ để giải quyết vấn đề ở trên là Lloyd, nhưng vấn đề khó
khăn và quan trọng nhất của thuật toán Lloy là làm sao chọn ra được N vector khởi đầu, điều
này đã được giải quyết bởi thuật toán mở rộng và cụ thể hơn là thuật toán LBG.
11


Ví dụ từ ảnh nguồn ban đầu với kích thước (512x512),
Ta phân chia ảnh thành các block nhỏ có kích thước (4x4) ta sẽ được 16384 block.

Mỗi block sẽ được ánh xạ sang miền không gian 16 chiều tương ứng với 1 vector (1x16) gọi
là training vector. Ta muốn lấy ra codebook có kích thước (256x16).

Bảng 1:Training vector (16384x16)

Bảng 2: Codebook (256x16)
2.2

Xây dựng codebook bằng thuật toán LBG
Từ tập training vector ta xây dựng codebook:

12


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, sau đây là các bước cụ thể của thuật toán:

1. Cho tập training vector T, chọn > 0 rất nhỏ nhất định, (ví dụ = 0,001)
Chọn số lượng vector từ mã
Chọn số chiều của vector từ mã (có thể được suy ra từ kích thước block)

2. Đặt N = 1 và tính:



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

Và N = 2N.

4. Lặp: = . Đặt chỉ số lặp i = 0.

a. Cho m = 1,2,....M, tìm giá trị nhỏ nhất của
Với n = 1, 2,....N,
13

n* là chỉ số mà tại đó đạt được giá trị nhỏ nhất đang xét


Đặt

Q(Xm)= .

b. Cho 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 4a.
f. Đặt = . Cho n = 1, 2, .... , N
Đặt = là giá trị cuối cùng của vector mã.

5. Lặp lại các bước 3, 4 cho đến khi đạt được số lượng vector mã mong muốn.
3. Sơ đồ áo dụng Vector quatization trong nén ảnh và thuật toán mã hóa-giải mã ảnh dùng
Vector quatization

Đầu vào: Dữ liệu ảnh vào( VD: ảnh đa mức xám kích thước 256*256) được chuyển
thành dạng ma trận số, mỗi phần tử ma trận từ 0  255.
x, s, cbookleng
Với:
x là ma trận số của ảnh đầu vào,
- s là tham số chỉ ra độ lớn của khối điểm ảnh (ví dụ khối 4x4 thì

s=4),
14


- cbookleng là số vector mã trong codebook
Đầu ra: Ảnh sau giải nén
Bước 1:
+ 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ỗi vector tương
ứng với một khối các điểm ảnh gần nhau (2*2, 4*4, 8*8,... )
+Tạo codebook : Sử dụng thuật toán LBG tạo ra ma trận các vector mã cbook
Bước 2: Mã hóa
+Chia nhỏ ma trận số của ảnh thành các khối kích thước s*s
+Chuyển mỗi khối thành một vector s*s chiều
+So sánh các vector trên với codebook từ đó rút ra ma trận chỉ số index tương
ứng với code vector.
Bước 3: Giải mã
+ Đầu vào: file đã nén và file codebook.
+ Đầu ra: tái tạo lại ma trận ban đầu bằng các vector mã (trong file codebook)
tương ứng với chỉ số index (được lưu trong file đã nén) rồi hiển thị ra màn
hình.

4. Xây dựng ứng dụng thử nghiệm và phân tích đo lường hiệu năng
4.1 Ứng dụng

• 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ố.
• Phương pháp xây dựng codebook: phương pháp tạo codebook sử dụng thuật
toán LBG.
• Lựa chọn tham số:
o Tập vector huấn luyệ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 dùng.

4.2 Phân tích đo lường hiệu năng.
Tính PSNR(peak signal to noise ratio): Dựa vào ma trận số của ảnh đầu vào và ma
trận số của ảnh sau giải nén.

15


Tính tỉ số nén: tỉ số của dung lượng ảnh đầu vào và file nén. Sử dụng hàm ratio()
Ảnh đầu vào: là ảnh màu RGB , kích thước 256*256

TH1: side of block (s*s): s =4
length of codebook:64

MSE:179.8183 PSNR:25.5825 compression ratio: 63.9584
TH2:
16


side of block (s*s): s =8
length of codebook:64

MSE: 289.4978


PSNR: 23.5144

compression ratio: 255.3351
TH3:
side of block (s*s): s = 4
length of codebook:128

17


MSE: 143.9052
PSNR: 26.5500compression ratio: 54.8265b. Ảnh đầu vào : đa mức
xám kích thước 256*256

TH1: side of block (s*s): s = 4
length of codebook:64

MSE:134.5395 PSNR: 26.8423
TH2: side of block (s*s): s = 8
length of codebook:64

18

compression ratio: 21.3195


MSE: 228.0960

PSNR: 24.5496compression ratio: 85.1117


TH3:
side of block (s*s): s = 4
length of codebook:128

MSE: 104.1995

19

PSNR: 27.9521compression ratio: 18.2755


Bảng phân tích đo lường hiệu năng
Ảnh đa màu RGB 256*256
Side of
4
8
4
block
Length of
64
64
128
codebook
MSE
179.8183
289.4978
143.9052
PSNR
25.5825

23.5144
26.5500
Tỉ số nén
63.9584
255.3351
54.8265

Ảnh đa mức xàm 256*256
4
8
8
64

64

128

134.5395
26.8423
21.3195

228.0960
24.5496
85.1117

104.1995
27.9521
18.2755

Nhận xét: khi giảm độ lớn của vector nguồn (số chiều) hoặc tăng số vector từ mã trong

codebook, chất lượng ảnh sau giải nén sẽ tăng lên nhưng tỉ số nén sẽ giảm đi và ngược lại.

20



×