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.. Một phân vùng không gianNh
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 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:
Giảng viên hướng dẫn: PGS.TS Nguyễn Thị Hoàn Lan
Trang 2Hà Nội, tháng 5 năm 2016
Trang 3Contents
Trang 4PHÂN CÔNG CÔNG VIỆC
Tìm hiểu chung về phương pháp lượng tử
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
Xây dựng cài đặt ứng dụng thử nghiệm
Trần Việt Anh
Xây dựng cài đặt ứng dụng thử nghiệm Phân
Trang 51 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,
Trang 6nhậ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:
Trang 7
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:
Trang 8Cá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
Trang 9Gọ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:
Trang 10Codevector 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)
Trang 11o 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
Trang 12Ví 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:
Trang 13Thuậ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:
và
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, n* là chỉ số mà tại đó đạt được giá trị nhỏ nhất đang xét
Trang 14Đặ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),
Trang 15- 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
Trang 16Tí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:
Trang 17side 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
Trang 18MSE: 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 compression ratio: 21.3195
TH2: side of block (s*s): s = 8
length of codebook:64
Trang 19MSE: 228.0960 PSNR: 24.5496compression ratio: 85.1117
TH3:
side of block (s*s): s = 4
length of codebook:128
MSE: 104.1995 PSNR: 27.9521compression ratio: 18.2755
Trang 20Bảng phân tích đo lường hiệu năng
Ảnh đa màu RGB 256*256 Ảnh đa mức xàm 256*256 Side of
Length of
MSE 179.8183 289.4978 143.9052 134.5395 228.0960 104.1995
Tỉ số nén 63.9584 255.3351 54.8265 21.3195 85.1117 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.