Mã hóa chiều dài thay đổi VLC (Variable Length Coding)

Một phần của tài liệu Xây dựng hệ thống DVTS truyền video chất lượng cao báo cáo nghiên cứu khoa học (Trang 52 - 64)

3.4.4.1. Giới thiệu chung

Theo lý thuyết mã, mã có độ dài thay đổi là một loại mã mà các kí hiệu nguồn được ánh xạ thành các kí hiệu mã có số lượng bit không bằng nhau. Mã có độ dài thay đổi cho phép các kí hiệu nguồn được nén và giải nén mà không bị mất dữ liệu (lossless data compression) và còn có thể giải mã theo từng kí hiệu. Chiến lược mã này liên quan tới lượng tin (entropy) của từng kí hiệu. Một số loại mã được nhiều người biết tới theo chiến lược mã hóa này là: mã Huffman, mã LZ (Lempel- Ziv), mã số học.

Kích thước của một từ mã: được ánh xạ từ một chuỗi các bit độ dài xác định ban đầu thành một những cụm các bit có độ dài xác định sau đó.

Mã không suy biến là loại mã mà mỗi kí hiệu của từ mã ban đầu được ánh xạ thành một cụm bit không rỗng khác nhau.

Ví dụ một ánh xạ M1={(a,0), (b,0), (c,1)} là không loại ánh xạ không suy biến bởi vì nó ánh xạ cả hai kí hiệu “a” và “b” thành một cụm bit giống nhau “0”, bất kì kích thước nào của từ mã loại này đều tạo ra việc mất dữ liệu. loại mã suy biến này vẫn còn hữu dụng khi mã hóa đối với một số nguồn thông tin cho phép tổn thất dữ liệu ( như trong nén audio và video)

Tuy nhiên ánh xạ M2={(a,0), (b,1), (c,00), (d,01) là loại một ánh xạ không suy biến, rất phù hợp khi dùng cho truyền dữ liệu.

Từ mã có thể giải mã duy nhất: là một từ mã được gọi là có thể giải mã duy nhất nếu kích thước của nó không suy biến.

Ví dụ: dối với ánh xạ không suy biến M2 không phải là loại giải mã duy nhất bởi vì chuỗi nguồn “aa” được ánh xạ thành chuỗi bit “00”, khi giải mã có thể lầm lẫn với kí hiệu “c”. với kích thước từ mã của ánh xạ M3={(a,0), (b,01), (c,001)} có thể giải mã duy nhất, bởi vì mỗi cụm bit đều kết thúc ngay khi một bit 0 xuất hiện, nó là dấu hiệu cho thấy một từ mã mới.

Mã tức thời (mã có tính prefix) là loại mã trong cùng một ánh xạ, với các kí hiệu khác nhau thì không có chuỗi bit nào sau khi ánh xạ là prefix của một chuỗi bit đã ánh xạ khác. Điều này giúp cho kí hiệu có thểđược giải mã tức thời ngay sau khi toàn bộ từ mã đã nhận được.

Ánh xạ M3 không phải là loại mã tức thời bởi vì không thể giải mã thành kí tự “a” sau khi nhận chuỗi bit “0”, nó là prefix của kí hiệu “b” và “c” sau khi đã giải mã.

Một ví dụ của loại mã tức thời có độ dài thay đổi:

Hình 3.33: Ví dụ về một bảng mã

Chuỗi kí hiệu nguồn bao gồm các kí hiệu: a, b, c, d. Từ mã nhị phân được cho như trên. Sau đây là một minh họa cho việc mã hóa và giải mã đối vời loại mã tức thời.

Thuận lợi: những kí hiệu nguồn ít xuất hiện có thểđược gán cho các kí hiệu dài hơn những kí hiệu nguồn xuất hiện nhiều. ví dụ: nếu xác suất xuất hiện của (a, b, c, d) là (1/2, 1/4, 1/8, 1/8), thì entropy của nó là: 1x1/2 + 2x1/4 + 3x1/8 + 3x1/8 = 7/4 = 1,75. Với loại mã này thì kí hiệu nguồn được nén nhiều nhất có thể và giải mã được mà không bị mất dữ liệu.

3.4.4.2. Mã Huffman

Trong khoa học máy tính và lý thuyết thông tin, mã Huffman là một thuật toán mã hóa dùng để nén dữ liệu. Nó dựa trên bảng tần suất xuất hiện các kí tự cần mã hóa để xây dựng một bộ mã nhị phân cho các kí tựđó sao cho dung lượng (số bít) sau khi mã hóa là nhỏ nhất.

Mã tiền tố (prefix-free binary code)

Để mã hóa các kí hiệu (kí tự, chữ số, ...) ta thay chúng bằng các xâu nhị phân, được gọi là từ mã của kí hiệu đó. Chẳng hạn bộ mã ASCII, mã hóa cho 256 kí hiệu là biểu diễn nhị phân của các số từ 0 đến 255, mỗi từ mã gồm 8 bít. Trong ASCII từ mã của kí tự "a" là 1100001, của kí tự "A" là 1000001. Trong cách mã hóa này các từ mã của tất cả 256 kí hiệu có độ dài bằng nhau (mỗi từ mã 8 bít). Nó được gọi là mã hóa với độ dài không đổi.

Khi mã hóa một tài liệu có thể không sử dụng đến tất cả 256 kí hiệu. Hơn nữa trong tài liệu chữ cái "a" chỉ có thể xuất hiện 1000000 lần còn chữ cái "A" có thể chỉ xuất hiện 2, 3 lần. Như vậy ta có thể không cần dùng đủ 8 bít để mã hóa cho một ký hiệu, hơn nữa độ dài (số bít) dành cho mỗi kí hiệu có thể khác nhau, kí hiệu nào xuất hiện nhiều lần thì nên dùng số bít ít, ký hiệu nào xuất hiện ít thì có thể mã hóa bằng từ mã dài hơn. Như vậy ta có việc mã hóa với độ dài thay đổi. Tuy nhiên, nếu mã hóa với độ dài thay đổi, khi giải mã ta làm thế nào phân biệt được xâu bít nào là mã hóa của ký hiệu nào. Một trong các giải pháp là dùng các dấu phẩy (",") hoặc một kí hiệu quy ước nào đó để tách từ mã của các kí tựđứng cạnh nhau. Nhưng như thế số các dấu phẩy sẽ chiếm một không gian đáng kể trong bản mã. Một cách giải quyết khác dẫn đến khái niệm mã tiền tố

• Mã tiền tố là bộ các từ mã của một tập hợp các kí hiệu sao cho từ mã của mỗi ký hiệu không là tiền tố (phần đầu) của từ mã một ký hiệu khác trong bộ mã ấy.

• Đương nhiên mã hóa với độ dài không đổi là mã tiền tố.

• Ví dụ: Giả sử mã hóa từ "ARRAY", tập các ký hiệu cần mã hóa gồm 3 chữ cái "A","R","Y".

• Nếu mã hóa bằng các từ mã có độ dài bằng nhau ta dùng ít nhất 2 bit cho một chữ cái chẳng hạn "A"=00, "R"=01, "Y"=10. Khi đó mã hóa của cả từ là 0001010010. Để giải mã ta đọc hai bit một và đối chiếu với bảng mã.

• Nếu mã hóa "A"=0, "R"=01, "Y"=11 thì bộ từ mã này không là mã tiền tố ví từ mã của "A" là tiền tố của từ mã của "R". Để mã hóa cả từ ARRAY phải đặt dấu ngăn cách vào giữa các từ mã 0,01,01,0,11

• Nếu mã hóa "A"=0, "R"=10, "Y"=11 thì bộ mã này là mã tiền tố. Với bộ mã tiền tố này khi mã hóa xâu "ARRAY" ta có 01010011.

Biểu diễn mã tiền tố trên cây nhị phân

• Nếu có một cây nhị phân n lá ta có thể tạo một bộ mã tiền tố cho n ký hiệu bằng cách đặt mỗi ký hiệu vào một lá. Từ mã của mỗi kí hiệu được được tạo ra khi đi từ gốc tới lá chứa ký hiệu đó, nếu đi qua cạnh trái thì ta thêm số 0, đi qua cạnh phải thì thêm số 1.

• Ví dụ: Cây 3 lá sau đây biểu diễn bộ mã của A,R,Y trong ví dụ trên * 0/ \1 A * 0/ \1 R Y • Từ mã của "A" là 0, của "R" là 10, của "Y" là 11. 3.4.5. Kĩ thuật nén ảnh JPEG Sơ đồ nén ảnh như sau

Hình 3.34: Sơ đồ nén ảnh JPEG

Người ta chia ảnh gốc thành các khối kích thước 8x8, sau đó thực hiện biến đổi Cosine trên các khối này, sau khi biến đổi Cosine là bước lượng tử hóa. Ở bước này người các hệ số của phép biến đổi có giá trị gần bằng nhau được lược bỏ và chỉ chọn một hệ số duy nhất để biểu diễn. Sau bước lượng tử hóa là đến bước mã hóa, ở bước này người ta sử dụng một thuật toán mã hóa lossless để mã hóa như Huffman, VLC (Variable Length Code),…

Sơ đồ giải nén như sau (adsbygoogle = window.adsbygoogle || []).push({});

Hình 3.35: Sơđồ giải nén ảnh JPEG

Đầu tiên là thực hiện giải mã sau đó đảo ngược thao tác lượng tử hóa và cuối cùng là biến đổi ngược để tái tạo ảnh ban đầu.

3.4.6. Kĩ thuật nén Video H.264 3.4.6.1. Bộ mã hóa và giải mã

Hình 3.36: Sơđồ bộ mã hóa MPEG-4/H.264

Chiều tới (dùng để gửi đi): một frame Fn được mã hóa gồm một tập các khối macroblock. Mỗi khối macroblock được mã hóa theo một trong hai chếđộ: dựđoán bên trong hoặc bên ngoài. Trong chếđộ dựđoán bên trong, một dựđoán PRED được hình thành từ những mẫu trong lát hiện tại đã được mã hóa , giãi mã trước. Trong chếđộ dựđoán bên ngoài, PRED được hình thành bằng một dựđoán bù đắp chuyển động từ một hoặc hai hình tham chiếu được chọn nằm trong danh sách 0 hoặc danh sách 1 của các lát trước hoặc sau lát hiện tại. Trong sơđồ, hình tham chíếu được chọn để mã hóa cho một khối hiện tại có thể là là khối nằm trong hình đã được mã hóa trước F’n-1 hoặc khối tiếp theo của khối hiện tại. Khối đã được dự đoán PRED sẽđược trừđi với khối hiện tại để lấy ra khối Dn biểu diễn sự khác nhau của 2 khối trên. Khối Dn này sẽđược chuyển đổi và lượng tử (T, Q) thành những hệ số X mà sau đó được sắp thứ tự. mã hóa entropy và truyền đi trên mạng.

Chiều lui (dùng để tái tạo): quá trình cũng giống như phần mã hóa bên trên nhưng dến khi tạo được X thì nó được áp dụng phép tính Q-1, T-1để tạo thành một khối D’n khác. Một dựđoán PRED được thêm vào để tạo lại khối uF’n (một phiên bản giải mã của khối gốc và chưa được lọc) . Sau đó một bộ lọc được thêm vào để làm mượt ảnh F’n (ảnh này có thểđược dủng cho việc dựđoán ảnh trong quá trình mã hóa tiếp theo)

Hình 3.37: Sơđồ bộ giải mã MPEG-4/H.264

Một giải mã sẽ nhận luồng bit đã được nén trên môi trường mạng và giải mã entropy và sắp thứ tựđể thu được tập các hệ số lượng tử X. Sau đó D’n cũng được dựng lại từ X qua Q-1 và T-1. Sau đó bộ giải mã sử thông tin trong header để tạo ra một dựđoán PRED giống với dựđoán gốc khi mã hóa. Ảnh chưa được lọc uF’n

được tạo ra từ PRED tiếp tực được đưa qua bộ lọc để tạo ra ảnh trơn mượt F’n có chất lượng tương đương ảnh gốc.

3.4.6.2. Cơ bản về H.264

Quản lý ảnh tham chiếu:

Những ảnh đã mã hóa sẽđược lưu trữ trong bộđệm tham chiếu. Bộ mã hóa và giải mã quản lý danh sách các ảnh được mã hóa (lấy ttrong danh sách 0) để sử dụng vào việc dựđoán bù đắp chuyển động.

Danh sách 0 có thể chứa những ảnh trước và sau ảnh hiện tại theo thứ tự hiển thị, và danh sách này có thể chứa cả những ảnh tham chiếu dài hạn và ngắn hạn. Mặc định, một ảnh đã được mã hóa khi được tái tạo lại chính bởi bộ giải mã thì được đánh dấu là ảnh ngắn hạn được dùng cho việc dựđoán. Ảnh dài hạn là những ảnh cũ hơn có thểđược sử dụng cho việc dựđoán và còn tồn tại trong bộđệm tham chiếu cho đến khi nào nó bị xoá hay bị thay thế.

Danh sách 1 là danh sách chứa những ảnh trong tương lai, gần với ảnh hiện tại nhất.

Lát ảnh có hai loại loại I và loại P. Loại I chỉ chứa những khối bên trong (khối ảnh được mã hoá bằng phương pháp dựđoán bên trong). Và loại P chỉ chứa những khối ảnh bên ngoài (khối ảnh được mã hóa bằng phương pháp dựđoán bên ngoài).

Dựđoán khối:

Một khối ảnh hiện tại trong một lát H.264[6] được dựđoán từ dữ liệu đã được mã hóa trước. Tuy nhiên thứ tự mã hóa khối có thể như trong ảnh.

Hình 3.38: Thứ tự khối ảnh được mã hóa

• Dựđoán bên ngoài

Dựđoán bên ngoài là một mô hình dựđoán từ một hoặc nhiều khung ảnh đã được mã hóa trước đó dựa trên yếu tố bù chuyển động. Sự khác biệt quan trong so với những phương pháp cũ hơn ở chỗ phương pháp mới này hỗ trợ kích thước khối thay đổi (từ 16x16 xuống 4x4) và còn hỗ trợ cả những vector chuyển động

Hình 3.39: Các cách chia khối ảnh nhỏ hơn

Hình 3.40: Minh họa cách chia các khối ảnh khi mã hóa

Vector chuyển động: một khối ảnh được dựđoán từ một vùng của một ảnh khác (ảnh tham chiếu). Phần duy chuyển giữa hai vùng ảnh sẽđược dùng làm thông tin biểu diễn sự sai khác giữa hai ảnh.

(a) Khối 4x4 đang mã hóa (b) Khối tham chiếu vector(1,-1) (c) Khối tham chiếu vector(0.75,-0.5)

Hình 3.41: Tinh vector chuyển động

• Dựđoán bên trong

Trong chếđộ dựđoán bên trong một khối được hình thành dựa trên những khối đã được mã hóa và dựng lại trước đó. Các mẫu được dùng để dựđoán có 13 mẫu (từ A-M) còn các mẫu được dựđoán có 16 mẫu (từ a-p)

Hình 3.42: Nhãn của các mẫu dựđoán

Các chếđộ dựđoán: có 9 chếđộ:

• Chếđộ 0: các mẫu A, B, C, D được dùng để dựđoán theo chiều dọc (adsbygoogle = window.adsbygoogle || []).push({});

• Chếđộ 1: các mẫu I, J, K, L được dùng để dựđoán theo chiều ngang.

• Chếđộ 2: giá trị trung bình của các mẫu A…D và I…L được dùng để dự đoán.

• Chếđộ 3: các mẫu được dựđoán theo đường chéo trên phải - dưới trái.

• Chếđộ 5: các mẫu được dựđoán theo đường chéo trên trái - dưới phải.

• Chếđộ 6: các mẫu được dựđoán theo đường xiên đứng từ bên trái sang bên phải góc 26,6o

• Chếđộ 7: các mẫu được dựđoán theo đường xiên đứng từ bên phải sang bên trái góc 26,6o.

• Chếđộ 8: các mẫu được dựđoán theo đường xiên ngang từ dưới lên góc 26,6o

Hình 3.43: Các chếđộ mã hóa khối ảnh

Ví dụ:

b) Chếđộ 0 (c) Chếđộ 1 (d) Chếđộ 2

(e) Chếđộ 3 (f) Chếđộ 4 (g) Chếđộ 5

(h) Chếđộ 6 (i) Chếđộ 7 (j) Chếđộ 8

Chương 4

Xây dựng chương trình 4.1. Mô hình

Hệ thống được xây dựng mô hình Client – Server[1]. Client có chức năng ghi nhận hình ảnh, âm thanh từ camera hoặc máy quay, microphone truyền lên Server đồng thời có khả năng hiển thị hình ảnh giữa các Client. Server đóng vai trò trung gian cung cấp các hàm tiện ích phục vụ cho Client truy cập từ xa tới.

Client được đặt tại phòng mổ và hội trường. Server được đặt tại phòng Server.

Một phần của tài liệu Xây dựng hệ thống DVTS truyền video chất lượng cao báo cáo nghiên cứu khoa học (Trang 52 - 64)