LỜI GIỚI THIỆU
Hiện nay, chúng ta đang sống trong một kỷ nguyên mới “Kỷ nguyên truyền thông đa phương tiện” các thiết bị mới, các kỹ thuật mới lần lượt ra đời nhằm mục đích đáp ứng nhu cầu giải trí cho con người ngày một tốt hơn. Các ứng dụng đa phương tiện thời gian thực truyền trên mạng di động, mạng Internet, mạng truyền hình ngày càng phát triển rầm rộ, các nhà sản xuất thiết bị chú trọng áp dụng các công nghệ nén tiên tiến vào thiết bị của mình nhằm thõa mãn nhu cầu “chất lượng trung thực về âm thanh, hình ảnh” của con người cũng như khả năng đáp ứng yêu cầu thực tế của công nghệ.
Thế nhưng không phải nhu cầu nào của chúng ta đều có thể được đáp ứng một cách thuận lợi, vì sự gắn liền giữa độ phức tạp, tốn kém chi phí đầu tư cơ sở hạ tầng, thiết bị đầu cuối , luôn đi kèm với công nghệ cao. Bên cạnh đó vấn đề truyền thông nội dung đa phương tiện hiện nay đang gặp một số khó khăn: băng thông đường truyền, nhiễu kênh, giới hạn của pin cho các ứng dụng . Trong khi băng thông kênh truyền phải chờ đợi một công nghệ mới của tương lai mới có thể cải thiện, còn việc cải thiện giới hạn của pin dường như không đáp ứng được sự phát triển của các dịch vụ trong tương lai, thì phương pháp giảm kích thước dữ liệu bằng các kỹ thuật nén là một cách giải quyết hiệu quả các khó khăn trên.
Cho đến nay có rất nhiều kỹ thuật nén dữ liệu đa phương tiện như: chuẩn JPEG, chuẩn JPEG2000 và chuẩn MPEG tuy nhiên hiệu quả nén của các tiêu chuẩn này cũng chưa được cao, và vẫn chưa đáp ứng tốt yêu cầu của truyền hình HDTV cũng như việc lưu trữ dung lượng còn rất lớn. Gần đây nhất là sự thành công của tiêu chuẩn mã hóa MPEG-2 được đánh dấu nổi bật từ những lần phóng thương mại đầu tiên các hệ thống vệ tinh DTH vào giữa những năm 1990 và thành công của chuẩn nén MPEG-4 Part 2 trong ứng dụng truyền hình số, các ứng dụng đồ họa Nhưng với yêu cầu bộ mã hóa có thể tương thích với các ứng dụng tốc độ bit thấp, thì nó không đáp ứng hiệu quả. Từ việc nghiên cứu khắc phục nhược điểm của MPEG-2, phát triển bổ sung cho MPEG-4 Part 2 để cho ra đời những chuẩn nén tiên tiến hơn, mà nổi bật là MPEG-4 H.264/AVC. Nó là sự kết hợp hoàn hảo giữa 2 tổ chức nổi tiếng: nhóm chuyên gia mã hóa video của tổ chức ITU và nhóm chuyên gia xử lý ảnh động ISO/IEC. Ta thử xét một ví dụ minh họa trong truyền hình số, nếu sử dụng kỹ thuật nén MPEG-2 cung cấp định dạng SDTV với độ phân giải 640x480 pixel thì cần băng thông 4.3Mbps trên một kênh truyền còn đối với HDTV thì cần 19Mbps, nhưng nếu sử dụng chuẩn nén H.264 thì băng thông cho truyền hình SDTV chỉ có 1.5 – 2 Mbps hoặc 6-9 Mbps đối với HDTV. Chính vì những ưu điểm đó mà MPEG-4 H.264/AVC đã dần dần chứng tỏ vị thế số 1 của mình, những ưu việt mà chuẩn nén này mang lại chắc chắn sẽ có ảnh hưởng tích cực đến thị trường phim ảnh, cũng như ngành công nghiệp chế tạo thiết bị đầu cuối. Để có thể hiểu biết hơn về tiêu chuẩn nén tiên tiến này, em đã chọn đề tài “Tổng quan về chuẩn nén MPEG-4 H.264/AVC và khả năng ứng dụng trong thực tiễn” làm đề tài tốt nghiệp của mình.
Sau hơn 3 tháng nỗ lực hết mình, về cơ bản Đồ án cũng đã cho ta cái nhìn tổng quát về chuẩn nén MPEG-4 H.264/AVC, đồng thời với sự minh họa bằng chương trình Matlab 7.01, cũng giúp cho ta hiểu rõ hơn những ưu điểm của chuẩn nén này, tuy nhiên do có sự hạn chế về kinh nghiệm, thời gian, nên sẽ không tránh khỏi sai sót, kính mong Quý Thầy Cô, bạn bè, đồng nghiệp tham khảo đóng góp ý kiến.
CHƯƠNG I. CƠ SỞ VỀ NÉN TÍN HIỆU VIDEO 11
I.1 SỰ CẦN THIẾT CỦA NÉN TÍN HIỆU. 11
I.2 QUÁ TRÌNH SỐ HÓA TÍN HIỆU 12
I.2.1 LẤY MẪU 12
I.2.2 LƯỢNG TỬ HÓA. 12
I.2.3 MÃ HÓA 13
I.3 TỐC ĐỘ BIT VÀ THÔNG LƯỢNG KÊNH TRUYỀN TÍN HIỆU SỐ 14
I.3.1 TỐC ĐỘ BÍT 14
I.3.2 THÔNG LƯỢNG KÊNH TRUYỀN 14
I.4 QUÁ TRÌNH BIẾN ĐỔI TÍN HIỆU MÀU 14
I.5 CÁC TIÊU CHUẨN LẤY MẪU TÍN HIỆU VIDEO SỐ 16
I.6 MÔ HÌNH NÉN TÍN HIỆU VIDEO 17
I.6.1 NÉN TÍN HIỆU VIDEO 17
I.6.2 LƯỢNG TIN TRUNG BÌNH (ENTROPY) 18
CHƯƠNG II. CÁC KỸ THUẬT NÉN VIDEO 21
II.1 PHÂN LOẠI CÁC KỸ THUẬT NÉN 21
II.2 QUÁ TRÌNH BIẾN ĐỔI 21
II.2.1 ĐIỀU XUNG MÃ VI SAI DPCM 22
II.2.2 MÃ HÓA BIẾN ĐỔI 22
II.2.2.1 Biến đổi cosin rời rạc DCT 22
II.2.2.2 Biến đổi Hadamard 23
II.3 QUÁ TRÌNH LƯỢNG TỬ 24
II.3.1 LƯỢNG TỬ HÓA VÔ HƯỚNG 24
II.3.2 LƯỢNG TỬ HÓA VECTOR 25
II.4 QUÁ TRÌNH MÃ HÓA 25
II.4.1 MÃ HÓA ĐỘ DÀI THAY ĐỔI 25
II.4.1.1 Mã hóa Huffman 26
II.4.1.2 Mã hoá mức dọc chiều dài RLC 26
II.4.2 MÃ HÓA SỐ HỌC 27
II.5 TIÊU CHUẨN ĐÁNH GIÁ CHẤT LƯỢNG ẢNH NÉN 30
CHƯƠNG III. CÁC CHUẨN NÉN THUỘC HỌ MPEG TRƯỚC MPEG-4 H.264/AVC 31
III.1 GIỚI THIỆU VỀ lịch sử phát triển CỦA KỸ THUẬT MPEG 31
III.2 CÁC TIÊU CHUẨN NÉN TRƯỚC MPEG-4 H.264/AVC 31
III.2.1 TIÊU CHUẨN MPEG-1 31
III.2.1.1 Các đặc điểm của tiêu chuẩn MPEG-1 32
III.2.1.2 Cấu trúc dòng bit của MPEG-1 33
III.2.2 TIÊU CHUẨN MPEG-2 34
III.2.2.1 Các đặc điểm của tiêu chuẩn MPEG-2 34
III.2.2.2 Sự khác nhau chính giữa MPEG-1 và MPEG-2 35
III.2.3 TIÊU CHUẨN MPEG-4 36
III.2.4 SO SÁNH ĐẶC ĐIỂM NỔI BẬT CỦA CÁC CHUẨN NÉN 37
CHƯƠNG IV. CHUẨN NÉN MPEG-4 H.264/AVC 38
IV.1 TỔNG QUAN VỀ CHUẨN NÉN MPEG-4 H.264/AVC 38
IV.1.1 lịch sử phát triển CỦA MPEG-4 H.264/AVC 38
IV.1.2 CÁC PROFLIES VÀ LEVELS TRONG H.264/AVC 39
IV.1.2.1 CÁC PROFILES 39
IV.1.2.2 CÁC LEVELS 40
IV.2 NHỮNG ĐẶC TÍNH NỔI BẬT CỦA CHUẨN NÉN H.264/AVC 41
IV.3 KỸ THUẬT NÉN VIDEO H.264/AVC 44
IV.3.1 GIẢI THÍCH NGUYÊN LÝ HOẠT ĐỘNG CƠ BẢN 44
IV.3.1.1 Sơ đồ mã hóa 44
IV.3.1.2 Sơ đồ giải mã 45
IV.3.2 KHỐI NÉN THỜI GIAN 46
IV.3.2.1 Dự đoán một chiều (mã hóa ảnh Prediction). 46
IV.3.2.2 Dự đoán hai chiều( mã hóa ảnh Bidiriectional Prediction) 47
IV.3.2.3 Dự đoán liên ảnh (Inter-Frame) 51
IV.3.2.4 Mã hóa ảnh SP (switching P) và SI (switching I). 53
IV.3.3 KHỐI NÉN KHÔNG GIAN 54
IV.3.3.1 Chia ảnh thành các MacroBlock 55
IV.3.3.2 Dự đoán trong ảnh (Intra-frame) 56
IV.3.3.3 Dự đoán trọng số: 62
IV.3.3.4 Kỹ thuật tiên đoán bù chuyển động và ước lượng chuyển động 63
IV.3.3.5 Phép biến đổi nguyên ICT (Integer Discrete Cosin Transform) 71
IV.3.3.6 Quá trình lượng tử 75
IV.3.3.7 Quá trình giải lượng tử: 77
IV.3.3.8 Quét Zig-Zag 78
IV.3.3.9 Mã hóa xen kẽ. 80
IV.3.3.10 Sắp xếp thứ tự Slice. 80
IV.3.4 MÃ HÓA ENTROPY 81
IV.3.4.1 Mã hóa Entropy Exp-Golomb. 82
IV.3.4.2 Mã hóa độ dài biến đổi thích nghi nội dung CAVLC 84
IV.3.4.3 Mã hóa số học nhị phân thích nghi nội dung CABAC 87
IV.3.5 BỘ LỌC TÁCH KHỐI TRONG VÒNG 89
IV.3.5.1 Nguyên tắc của lọc tách khối 90
IV.3.5.2 Quá trình lọc khối 91
IV.3.6 CẤU TRÚC VÀ CÚ PHÁP CHUẨN H.264/AVC. 94
IV.3.6.1 Lớp trừu tượng mạng NAL 95
IV.3.6.2 Lớp mã hóa video VCL (Video Coding Layer) 96
IV.3.6.3 Kỹ thuật FMO và Data Partitioned Slices 96
IV.3.6.4 Kỹ thuật Arbitrary Slice Ordering 96
IV.3.6.5 Cấu trúc dòng bit H.264/AVC 97
CHƯƠNG V. MỘT SỐ ỨNG DỤNG CHUẨN H.264/AVC 99
V.1 TRUYỀN HÌNH INTERNET IPTV 99
V.2 TRUYỀN HÌNH VỆ TINH DVB-S2 100
V.3 TRUYỀN HÌNH DI DỘNG 100
CHƯƠNG VI. MÔ PHỎNG QUÁ TRÌNH NÉN-GIẢI NÉN CỦA H.264/AVC BẰNG MATLAB 103
VI.1 LƯU ĐỒ GIẢI THUẬT 103
VI.2 CHƯƠNG TRÌNH MÔ PHỎNG: 103
VI.3 KẾT QUẢ MÔ PHỎNG 104
PHỤ LỤC 106
TÀI LIỆU THAM KHẢO 113
113 trang |
Chia sẻ: banmai | Lượt xem: 5508 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Tổng quan về chuẩn nén MPEG-4 H.264/AVC và khả năng ứng dụng trong thực tiễn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ực tiếp giá trị Qstep và PF mà định nghĩa giá trị V= (Qstep.PF.64/2floor (QP/ 6)) và 0nên công thức tương đương sẽ là
Ví dụ :
QP= 3, nên Qstep = 0.875
(i,j) = (1, 2) nên PF = ab = 0.3162 và 2floor (QP/ 6) = 1
V= (Qstep.PF.64) = 0.875 x 0.3162 x 64 = 18.
= Zi j x 18 x1.
Bảng giá trị thừa số co dãn V như sau :
QP
Vị trí (0,0),(2,0),(2,2),(0,2)
Vị trí (1,1),(1,3),(3,1),(3,3)
Vị trí khác.
0
10
16
13
1
11
18
14
2
13
20
16
3
14
23
18
4
16
25
20
5
18
29
23
Ví dụ : mẫu ảnh 4x4 được mã hóa kiểu Inter. QP=10
Ngõ vào X : Biến đổi Y=CXCT
j=0
j=1
j=2
j=3
i=0
140
-1
-6
7
i=1
-19
-39
7
-92
i=2
22
17
8
31
i=3
-27
-32
-59
-21
j=0
j=1
j=2
j=3
i=0
5
11
8
10
i=1
9
8
4
12
i=2
1
10
11
4
i=3
19
6
15
7
MF = 8192, 3355 hoặc 5243 tùy thuộc vào vị trí hệ số và qbits = 16 và f =
Lượng tử : Giải lượng tử W' = Z.Qstep.PF.64 là :
j=0
j=1
j=2
j=3
i=0
17
0
-1
0
i=1
-1
-2
0
-5
i=2
3
1
1
2
i=3
-2
-1
-5
-1
j=0
j=1
j=2
j=3
i=0
544
0
-32
0
i=1
-40
-100
0
-250
i=2
96
40
32
80
i=3
-80
-50
-200
-50
V= 16, 25 hay 20 tùy thuộc vào vị trí và 2floor (QP/ 6)= 21 = 2.
Ngõ ra bộ biến đổi ngược chính X'' =
j=0
j=1
j=2
j=3
i=0
4
13
8
10
i=1
8
8
4
12
i=2
1
10
10
3
i=3
18
5
14
7
Quá trình thực hiện ví dụ trên được mô phỏng trong Matlab như sau:
function dq(b)
A = [ 0.5 0.5 0.5 0.5;0.653 0.271 0.271 -0.653;0.5 -0.5 -0.5 0.5;0.271 -0.653 -0.653 0.271];% A LA MA TRAN HE SO CO DAN
a = 0.5;b= sqrt(2/5);
PF = [a^2 a*b/2 a^2 a*b/2; a*b/2 b^2/4 a*b/2 b^2/4; a^2 a*b/2 a^2 a*b/2; a*b/2 b^2/4 a*b/2 b^2/4]
X = [5 11 8 10;9 8 4 12;1 10 11 4; 19 6 15 7]; % X LA MA TRAN NGO VAO
B = [ 1 1 1 1; 2 1 -1 -2; 1 -1 -1 1; 1 -2 2 -1];%B LA MA TRAN HE SO
Y1 = B*X*B' % GIA TRI PHEP BIEN DOI DCT
Z =round((Y1.*PF)/2)
c = [1 1 1 1; 1 1/2 -1/2 -1; 1 -1 -1 1; 1/2 -1 1 -1/2];% A LA MA TRAN HE SO CO DAN
W = Z.*2.*PF*64
O = round ((B'*W*B)/64)
Quét Zig-Zag
Quét Zig-Zag nhằm chuyển ma trận hệ số DCT 2 chiều sau khi lượng tử thành một dòng liên tiếp (mảng một chiều) các hệ số tần số không gian tăng dần theo một thứ tự nhất định hay nói cách khác nó nhóm những số khác 0 và số 0 thành một mảng tuyến tính. Giá trị lượng tử sẽ được sắp xếp để tạo ra mảng tuyến tính bằng cách đặt giá trị theo thứ tự (0,0), (0,1), (1,0), (2,0), (1,1), (1,2), (0,3)… Hầu hết những giá trị tần số cao sẽ được xấp xỉ thành 0 để tạo hiệu suất nén cao hơn.
Các MB được mã hóa trong chế độ 16x16, thì hệ số DC (đỉnh trái) của khối luma 4x4 được quét trước, sau đó tới 15 hệ số AC. Tương tự, mỗi hệ số DC 2x2 của thành phần màu được quét trước sau đó tới 15 hệ số AC trong mỗi khối. Quá trình quét này sẽ sắp xếp những hệ số có sự khác nhau nhiều nhất ở vị trí đầu tiên, rồi tới hệ số có nhiều số 0 liên tiếp.
Nếu MB được nén sử dụng kiểu biến đổi 4x4 trong chế độ frame, thì các hệ số lượng tử được sắp xếp như sau:
Hình IV.26. Quét Zig-Zag cho kiểu mã hóa frame
Nếu MB được nén sử dụng kiểu biến đổi 4x4 trong chế độ mành, thì các hệ số lượng tử hóa được sắp xếp như sau:
Hình IV.27. Quét Zig-Zag cho kiểu mã hóa field
Kiểu quét này hiệu quả hơn, phản ảnh quá trình làm giảm độ tương quan dữ liệu gốc theo chiều thẳng đứng
Mã hóa xen kẽ.
Để loại trừ hiện tượng chớp sáng H.264/AVC hỗ trợ mã hóa và giải mã cho kiểu quét liên tục hoặc quét xen kẽ được cách ly về mặt thời gian bởi một chu kỳ slice (một nửa chu kỳ frame), định dạng lấy mẫu mặc định là kiểu quét 4:2:0 liên tục. Hai phương pháp giống nhau ở chỗ dòng điện tử cũng quét từ trên xuống dưới, từ trái sang phải, các dòng quét ngược cũng được xoá. Điểm khác cơ bản là ở đây người ta chia 1 ảnh thành 2 mành và thực hiện quét theo nguyên lí như sau: Mỗi ảnh đựơc truyền làm 2 lượt, lượt đầu truyền tất cả những dòng lẻ gọi là mành lẻ; lượt 2 truyền tất cả những dòng chẵn gọi là mành chẵn; hoặc ngược lại nếu mỗi ảnh có Z dòng thì mỗi mành có Z/2 dòng. Mỗi mành là 1 nửa ảnh mang 1 nửa lượng tin tức của ảnh. Bộ mã hóa cho phép chọn chế độ quét khung hoặc mành. Việc chọn kiểu quét field sẽ tiết kiệm được bộ nhớ hoặc giảm thời gian truyền từ bộ mã hóa cho đến bộ giải mã, minh họa như sau:
Mã hóa frame : 2 slice (field) của một frame được mã hóa cùng nhau
Hình IV.28. Minh họa quá trình mã hóa xen kẽ
Mã hóa slice : 2 slice (field) của một frame được mã hóa riêng biệt
Sắp xếp thứ tự Slice.
Kỹ thuật nén H.264/AVC cho phép bộ mã hóa có thể chọn tần số và vị trí của ảnh I, điều này rất có ích cho những ứng dụng yêu cầu điểm truy cập ngẫu nhiên, ở đó ảnh I được sử dụng với chu kỳ 2 lần/giây. Bộ mã hóa cũng cho phép chọn số lượng ảnh B giữa 2 cặp ảnh tham khảo bất kỳ (I hoặc P) dựa vào dung lượng bộ nhớ trong bộ mã hóa và đặc tính của ảnh được mã hóa. Ví dụ như, một bức ảnh lớn có 2 ảnh B chia thành 2 ảnh tham khảo liên tiếp, kiểu sắp xếp của ảnh I, ảnh P và ảnh B theo trật tự như sau:
Hình IV.29. Trật tự hiện thị của các bức ảnh.
Hình IV.30. Thứ tự luồng Video khác với trật tự hiển thị.
Trật tự của các bức ảnh mã hóa và giải mã có sự khác nhau do dự đoán bù chuyển động 2 chiều của ảnh B. Bộ mã hóa MPEG sắp xếp lại trật tự ảnh trong luồng video như sau:
Thứ tự nguồn thông tin và thứ tự ngõ vào bộ mã hóa như sau
I(1) B(2) B(3) P(4) B(5) B(6) P(7) B(8) B(9) P(10) B(11) B(12) I(13)
Thứ tự mã hóa và thứ tự trong dòng bit nén như sau
I(1) P(4) B(2) B(3) P(7) B(5) B(6) P(10) B(8) B(9) I(13) B(11) B(12)
Thứ tự ngõ ra bộ giải mã (hiển thị giống như tín hiệu ngõ vào mã hóa) như sau
I(1) B(2) B(3) P(4) B(5) B(6) P(7) B(8) B(9) P(10) B(11) B(12) I(13)
MÃ HÓA ENTROPY
Mã hóa Entropy là một kỹ thuật mã hóa không tổn hao có các ký hiệu ngõ vào là những hệ số lượng tử, vector chuyển động, thông tin header…Nó gồm nhiều loại mã hóa như mã hóa dự đoán, mã hóa Huffman, mã hóa có chiều dài biến đổi VLC và mã hóa số học nhị phân BAC. Trong H.264/AVC sử dụng kiểu mã hóa thích nghi theo nội dung CA như CAVLC và CABAC nghĩa là chỉ có một ánh xạ cho một bảng từ mã đơn được thực hiện theo thống kê dữ liệu, còn các tiêu chuẩn trước thì sử dụng một bảng VCL cho mỗi phần tử khác nhau. Các thành phần cú pháp ở lớp bên trên sẽ được mã hóa VLC hoặc FLC, còn thành phần cú pháp ở lớp bên dưới sẽ được mã hóa VLC hoặc CABAC tùy thuộc vào kiểu mã hóa Entropy. Khi cờ chỉ chế độ mã hóa Entropy được cài về “0” thì các khối dữ liệu dư thừa sẽ được mã hóa CAVLC hoặc mã hóa VLC nào đó như mã hóa Ex-Golomb. Các thông số cần mã hóa như bảng sau:
Thông số
Mô tả
Thành phần cú pháp của
Sequence, picture và slice-layer
Thông tin mào đầu và các thông số
Macroblock type mb_type
Phương pháp dự đoán cho mỗi MB mã hóa
Coded block pattern
Chỉ định mẫu khối trong MB được mã hóa
Quantiser parameter
Truyền giá trị sai khác về QP của ảnh trước
Reference frame index
Chỉ số ảnh tham khảo cho dự đoán Inter
Motion vector
Truyền phần sai khác từ vector chuyển động dự đoán
Residual data
Hệ số dữ liệu dư thừa từ các khối 4x4, 2x2
Mã hóa Entropy Exp-Golomb.
Mã Exp-Golomb (Exponential Golomb codes) là mã có chiều dài thay đổi được với cấu trúc đều đặn ví dụ như sau.
Dạng chuỗi bit
Phạm vi giá trị codeNum
1
0
01x0
1-2
001x1x0
3-6
0001x2x1x0
7-14
00001x3x2x1x0
15-30
000001x4x3x2x1x0
31-62
...
...
Cấu trúc bảng mã Exp-Golomb [M zeros][1][INFO]
Trong đó INFO là trường M-bit mang thông tin. Từ mã đầu tiên không có số 0 bắt đầu và trường INFO kết thúc. Từ mã thứ 1 và 2 có trường INFO đơn bit, từ mã thứ 3-6 có trường INFO 2 bit, và cứ tiếp tục như vậy. Chiều dài của một từ mã là (2M+1) bits và mỗi từ mã được bộ mã hóa cấu trúc lại dựa vào chỉ code_num:
M = floor(log2[code_num+1])
INFO = code_num + 1 - 2M
Một từ mã được giải mã theo thứ tự như sau:
Đọc trong M số 0 bắt đầu, tiếp theo là số 1.
Đọc trường M-bit INFO.
Code_num = 2M+ INFO - 1
Đối với từ mã số 0, thì INFO và M đều là 0.
Thông số k sẽ được mã hóa và được ánh xạ vào Code_num theo một trong các cách sau:
Loại ánh xạ
Mô tả
ue
Ánh xạ trực tiếp không dấu, code_num = k.
te
Là phiên bản của bảng mã Exp-Golomb, trong đó từ mã ngắn bị cắt bỏ.
se
Ánh xạ có dấu, sử dụng vector chuyển động sai khác, delta QP và những vector khác, giá trị k sẽ được ánh xạ vào giá trị code_num như bảng IV. Với các giá trị code_num như sau.
Code_num = 2 | k | (k ≤ 0)
Code_num = 2 | k |−1 (k> 0)
me
Ký tự ánh xạ, thông số K sẽ được ánh xạ vào code_num. Bảng IV liệt kê một phần các mẫu khối cho dự đoán Inter, chỉ ra những khối 8x8 trong MB chứa các hệ số khác 0
k
Code_num
0
0
1
1
-1
2
2
3
-2
4
3
5
…
…
Bảng loại ánh xạ có dấu.
Mẫu khối mã hóa (Inter prediction)
Code_num
0 (no nonzero blocks)
0
16 (chroma DC block nonzero)
1
1 (top-left 8 × 8 luma block nonzero)
2
2 (top-right 8 × 8 luma block nonzero)
3
4 (lower-left 8 × 8 luma block nonzero)
4
8 (lower-right 8 × 8 luma block nonzero)
5
32 (chroma DC and AC blocks nonzero)
6
3 (top-left and top-right 8 × 8 luma blocks nonzero)
7
…
…
Bảng mẫu khối được mã hóa.
Mỗi loại ánh xạ (ue, te, se và me) sẽ tạo ra một từ mã ngắn cho giá trị xảy ra nhiều, và từ mã dài cho giá trị xảy ra ít. Ví dụ trong MB Inter loại P_L0_16x16 (có nghĩa là dự đoán khối luma 16x16 từ bức ảnh trước) sẽ được đánh dấu Code_num = 0 vì nó xảy ra thường xuyên, MB loại P_8x8 (dự đoán khối luma 8x8 từ bức ảnh trước) được đánh code_num = 3 vì nó ít xảy ra.
Mã hóa độ dài biến đổi thích nghi nội dung CAVLC
Bộ mã hóa CAVLC sử dụng nhiều bảng tra VLC cho các thành phần cấu trúc, sự thích nghi của nó thể hiện ở chỗ: nó lựa chọn một bảng tra cho thành phần cú pháp hiện tại dựa vào bảng tra đã được truyền đi, do đó hiệu quả mã hóa Entropy sẽ tăng lên.
Sau khi dự đoán, biến đổi và lượng tử, đặc trưng của khối hầu hết đều là số 0, nên CAVLC sử dụng mã hóa Run-Level để mã hóa chuỗi zeros. Những hệ số khác 0 tần số cao, sau khi quét Zig-Zag thường kết thúc bằng nhiều số ±1 thì CAVLC sẽ báo hiệu số lượng chuỗi số kết thúc là 1(‘Trailing Ones’). Trong chuỗi sắp xếp lại biên độ của hệ số khác 0 có khuynh hướng lớn dần ở vị trí đầu tiên (gần hệ số DC) và nhỏ dần về phía tần số cao. Nắm bắt điểm này, bộ mã hóa CAVLC sử dụng việc chọn bảng dò tìm VLC thích nghi cho thông số mức tùy thuộc vào mức biên độ mã hóa gần nhất.
Quá trình mã hóa một ma trận các hệ số đã biến đổi được thực hiện qua 5 bước sau:
Mã hóa số lượng hệ số khác 0 (TotalCoeffs) và hệ số kết thúc bằng 1 (coeff_token)
Mã hóa ký hiệu cho từng TrailingOne
Mã hóa các cấp độ của các hệ số khác 0 còn lại.
Mã hóa tổng số giá trị 0 trước hệ số cuối cùng.
Mã hóa dọc chiều dài chuỗi số 0.
Quá trình thực hiện như sau:
Mã hóa số lượng hệ số khác 0 (TotalCoeffs) và hệ số kết thúc bằng 1 (coeff_token)
Giá trị của TotalCoeffs và TrailingOnes . Sẽ có 4 bảng dò tìm cho các hệ số coeff_token bao gồm 3 bảng VLC và 1 bảng mã có chiều dài cố định FLC. Việc chọn bảng dò tìm tùy thuộc vào số lượng hệ số khác 0 bên tay trái và bên trên của bảng mã trước đó tương ứng với nA và nB.
Ví dụ: nếu cả 2 khối nA, nB đều nằm ở bên tay trái phía trên thì
nC = round((nA + nB)/2).
Nếu chỉ nằm bên trên thì nC = nB hoặc chỉ nằm bên trái nC = nA, còn không thõa mãn thì nC = 0.
Trong đó thông số nC sẽ lựa chon bảng dò tìm như sau, vì vậy việc chọn bảng mã VLC sẽ phụ thuộc vào giá trị của các khối bên cạnh (thể hiện sự thích nghi theo nội dung CA).
N
Bảng cho coeff_token
1
Bảng 1: số lượng hệ số nhỏ, tức là nếu TotalCoeffs có giá trị nhỏ sẽ được mã hóa bằng từ mã ngắn và ngược lại
2, 3
Bảng 2 số lượng hệ số trung bình, tức là nếu giá trị của TotalCoeffs trong khoảng 2-4 sẽ được mã hóa bằng từ mã ngắn và ngược lại
4, 5, 6, 7
Bảng 3 số lượng hệ số cao
8
Bảng 4: mã hóa từ mã cố định 6bits cho cặp giá trị TotalCoeff và TrailingOnes
Mã hóa ký hiệu cho từng TrailingOne
Mỗi một TrailingOne được mã hóa bằng từ bits đơn, nếu là 0 thì mã hóa thành “ +” nếu là 1 thì mã hóa thành “-” theo trật tự ngược lại, bắt đầu với hệ số TrailingOne có tần số cao nhất
Mã hóa các cấp độ của các hệ số khác 0 còn lại.
Cấp độ bao gồm ký hiệu và giá trị biên độ của các hệ số khác 0 được mã hóa theo trật tự ngược lại, bắt đầu từ hệ số có tần số cao nhất sau giá trị hệ số DC. Việc mã hóa level được tạo ra từ một tiền tố level và một hậu tố level. Tiền tố level có thể có 0->6 bits tùy thuộc vào biên độ mã hóa liên tục theo bảng sau:
Chiều dài tiền tố hiện tại
Mức ngưỡng để tăng chiều dài tiền tố
0
0
1
3
2
6
3
12
4
24
5
48
6
N/A (chiều dài cao nhất)
Mã hóa dọc chiều dài chuỗi Zero
Số lượng hệ số “0” trước đó (run_before) được mã hóa theo thứ tự ngược lại. Nếu không còn số “0” nào nữa thì giá trị run_before = total_zeros, không cần mã hóa giá trị run_before.
Nếu còn lại 2 số “0” chưa mã hóa, thì giá trị run_before sẽ nhận các giá trị {0, 1, 2} và vì thế mã VLC không cần sử dụng từ mã lớn hơn 2bits
Ví dụ cho một khối 4x4 như sau:
0
3
-1
0
0
-1
1
0
1
0
0
0
0
0
0
0
Quá trình quét Zig-zag sẽ sắp xếp theo trật tự mới.
0, 3, 0, 1, −1, −1, 0, 1, 0. . .
Số lượng hệ số khác 0 : TotalCoeffs = 5
Số lượng hệ số bằng 0 : Total zeros = 3
Số lượng hệ số kết thúc bằng 1 : TrailingOnes = 3 (thực tế có 4 giá trị trailingones nhưng chỉ có 3 giá trị được mã hóa như trường hợp đặc biệt).
Quá trình mã hóa.
Thành phần
Giá trị
Mã
coeff token
TotalCoeffs = 5,
0000100
TrailingOne sign (4)
TrailingOnes= 3 (use Table 1)
0
TrailingOne sign (3)
+
1
TrailingOne sign (2)
-
1
Level (1)
-
1 (prefix)
Level (0)
+1 (use suffixLength = 0)
001 (prefix) 0 (suffix)
Total zeros
+3 (use suffixLength = 1)
111
run before(4)
ZerosLeft = 3; run before =1
10
run before(3)
ZerosLeft = 2; run before =0
1
run before(2)
ZerosLeft = 2; run before =0
1
run before(1)
ZerosLeft = 2; run before =1
01
run before(0)
ZerosLeft = 1; run before =1
Hệ số cuối cùng, không cần mã hóa.
Chuỗi bit phát là 000010001110010111101101.
Quá trình giải mã
1
Thành phần
Giá trị
Mảng ngõ ra
0000100
coeff token
TotalCoeffs = 5, TrailingOnes = 3
Empty
0
TrailingOne sign
+
1
1
TrailingOne sign
-
-1, 1
1
TrailingOne sign
-
-1, -1, 1
1
Level
+1 (suffixLength = 0; tăng chiều dài tiền tố sau khi giải mã
1, −1,−1, 1
0010
Level
+3 (suffixLength = 1)
3, 1, −1,−1, 0, 1
111
total zeros
3
3, 1, −1,−1, 1
10
run before
1
3, 1, −1,−1, 0, 1
1
run before
0
3, 1, −1,−1, 0, 1
1
run before
0
3, 1, −1,−1, 0, 1
01
run before
1
3, 0, 1, −1,−1, 0, 1
Bộ giải mã đã chèn thêm 2 số 0, Totalzeros =3, và vì thế 1 số 0 được chèn vào trước hệ số thấp nhất, mảng ngõ ra như sau:
0, 3, 0, 1, −1,−1, 0, 1
Mã hóa số học nhị phân thích nghi nội dung CABAC
Nguyên tắc của mã hóa số học là một dữ liệu được mã hóa bằng một từ đơn, nó nằm trong phạm vị [0 1] thay vì phải thiết kế một bảng mã, mã hóa số học nhị phân thích nghi CABAC cho phép ấn định số bit không nguyên/symbol, thích nghi các thống kê symbol động trong phạm vi [0 1] này. Xác suất cho mỗi thành phần được dự đoán theo nội dung để điều khiển bộ mã hóa số học. So sánh với CAVLC, thì CABAC thường cho giảm tốc độ bit khoảng 10-15% khi mã hóa cùng một tín hiệu truyền hình.
Bộ mã hóa CABAC gồm có 3 bước chính: kiểu nội dung, nhị phân hóa và mã hóa số nhị phân được minh họa như hình vẽ :
Hình IV.31. Minh hoïa quaù trình maõ hoùa CABAC
Biến đổi nhị phân: CABAC sử dụng kiểu mã hóa số học nhị phân có nghĩa là chỉ có số nhị phân mới được mã hóa, những ký hiệu không phải là ký hiệu nhị phân sẽ được “nhị phân hóa” hoặc chuyển đổi thành mã nhị phân trước khi mã hóa số học.
Lựa chọn kiểu nội dung: kiểu nội dung là kiểu xác suất cho nhiều ký tự nhị phân được chọn phù hợp với tính thống kê của các ký hiệu dữ liệu được mã hóa, tức là nó sẽ lưu xác suất của từng ký hiệu 0 & 1.
Mã hóa số học: bộ mã hóa số học sẽ mã hóa từng ký hiệu nhị phân theo xác suất đã chọn.
Cập nhật xác suất: kiểu nội dung được chọn sẽ được cập nhật dựa vào giá trị mã hóa hiện tại, có nghĩa là nếu giá trị nhị phân là 1 thì tần số đếm của 1 sẽ tăng lên 1 đơn vị
Quá trình mã hóa:
Giả sử ta có một khối được mã hóa chế độ Inter và có vector chuyển động Mvd của một hướng bất kỳ nào đó. Đầu tiên, sẽ tiến hành nhị phân hóa giá trị Mvd, Mvd sẽ được ánh xạ vào bảng mã như sau:
|Mvdx|
Nhị phân
0
0
1
10s
2
110s
3
1110s
4
11110s
5
111110s
6
1111110s
7
11111110s
8
111111110s
Bit đầu tiên của bảng từ mã nhị phân gọi là bin 1, bit thứ 2 gọi là bin 2…Chọn kiểu nội dung cho từng bin. Đối với bin 1 sẽ có 3 kiểu nội dung như bảng, dựa vào giá trị Mvd của 2 khối đã mã hóa trước đó là giá trị ek.
ek
Kiểu nội dung
0
Kiểu 0
33
Kiểu 1
33
Kiểu 2
ek = |mvdxA| + |mvdxB| trong đó A và B là 2 khối nằm bên trên và bên trái của khối hiện tại. Các hệ số bin còn lại sẽ chọn một trong 4 kiểu nội dung sau:
Bin
Kiểu nội dung
2
Kiểu 3
3
Kiểu 4
4
Kiểu 5
5
Kiểu 6
BỘ LỌC TÁCH KHỐI TRONG VÒNG
Mã hóa dựa trên cơ sở biến đổi DCT cho khối 4x4 có thể nhìn thấy cấu trúc khối nhưng một đặc trưng cơ bản của mã hóa dựa trên các khối là sẽ tạo ra một cấu trúc ngẫu nhiên, sai số trong mã hóa dự đoán gây nên các hệ số lượng tử thô. Ngoài ra, quá trình dự đoán bù chuyển động cũng gây nên nhiễu khối được minh họa như hình IV.32. Ta thấy rằng, các cạnh khối cấu trúc lại thì có độ chính xác kém hơn các điểm ảnh bên trong vì không phải tất cả các pixel tham khảo nào cũng hoàn hảo, có thể nó cũng chứa một số điểm ảnh không liên tiếp.
Trong tiêu chuẩn H.264/AVC, sử dụng bộ lọc tách khối trong vòng, nghĩa là cả trong quá trình mã hóa và giải mã, ảnh cấu trúc lại sẽ được lọc tách khối trước khi lưu trữ cho bù chuyển động tiếp theo, cường độ lọc được điều khiển bởi giá trị của nhiều phần tử cấu trúc. Bộ lọc được sử dụng cho dự đoán bù chuyển động của ảnh liên tiếp, sẽ làm giảm nhỏ sai số sau khi dự đoán. Bộ lọc tách khối được sử dụng thích nghi nhiều mức độ:
Ở mức Slice: cường độ bộ lọc toàn phần có thể điều chỉnh theo đặc điểm của chuỗi ảnh.
Ở mức mép khối: cường độ lọc tùy thuộc vào kiểu dự đoán Intra hay Inter, sai số chuyển động.
Ở mức mẫu. Phần quyết định là sự khác nhau giữa mẫu gốc và mẫu được lượng tử hóa từ các hệ số biến đổi.
Hình IV.30. Hiện tượng nhiễu khối, sự gián đọan giữa hai khối.
Nguyên tắc của lọc tách khối
Hình IV.33. Nguyên lý lọc tách khối
Nguyên tắc cơ bản là nếu đo được sự sai khác giữa các mẫu gần nhau ở mép khối như minh họa ở hình IV.33, thì cần phải hạn chế sai khác này để tránh hiện tượng kết khối mà độ bóng của nội dung vẫn không thay đổi.
Trong đó:
Giá trị offset của và đặc trưng cho cường độ lọc, giá trị âm cho cường độ yếu và giá trị dương cho cường độ mạnh, và giá trị của và như sau:
Giá trị của và phụ thuộc vào tham số lượng tử QP trung bình của 2 khối bên cạnh.
Quá trình lọc khối
Mỗi MB và mỗi thành phần sẽ được tách riêng để lọc, các mép theo chiều thẳng đứng sẽ được lọc trước, bắt đầu tại mép nằm bên tay trái của MB cho đến các mép cuối cùng nằm bên tay phải của MB, sau đó lọc theo chiều ngang, bắt đầu với mép nằm phía trên MB cho tới mép nằm phía dưới cùng của MB. Trình tự các bước lọc được minh họa như hình sau.
Khối cần được lọc
Bức ảnh được chia thành các MB
Bước 1 : Chia bức ảnh thành các MB và tìm khối bị nhiễu
Bước 2 : Lọc cạnh thành phần Luma theo chiều dọc
Bước 3 :Lọc cạnh thành phần Luma theo chiều ngang.
Lọc theo chiều dọc Lọc theo chiều ngang cho các cạnh ngang cho các cạnh dọc
cho các cạnh ngang
Bước 4 : Lọc cạnh thành phần Chroma
bS là cường độ đường biên quyết định kiểu mã hóa cũng như tham số lượng tử của các khối kế bên, việc chọn tham số bS phải tuân theo quy định sau:
Nếu cả p và q đều mã hóa Intra và có đường biên khối giữa chúng
bS = 4 (Lọc mạnh nhất)
Nếu cả p và q đều mã hóa Intra và không có đường biên khối giữa chúng
bS = 3
Hoặc p hay q mã hóa Intra, p và q chứa hệ số mã hóa.
bS = 2
Hoặc p hay q mã hóa Intra, hoặc p hay q chứa hệ số mã hóa, p và q sử dụng ảnh tham khảo khác nhau hoặc khác nhau về số lượng ảnh tham khảo….
bS = 0 (không lọc)
Quá trình lọc P0 và Q0 xảy ra khi thỏa mãn các điều kiện sau:
1.
2.
3.
Trong đó <. Nó sẽ tăng cùng với giá trị bức lượng tử trung bình QP của 2 khối P và Q. Quá trình lọc P1 và Q1 xảy ra khi thỏa mãn các điều kiện sau:
hay
Trường hợp bS
Một bộ lọc đáp ứng xung hữu hạn FIR-4 tap được dùng để lọc các giá trị p1, p0, q1, q0 tạo thành các giá trị p’0 và q’0. Nếu đó là thành phần luma và có |p2-p0|< thì sẽ sử dụng một FIR-4 tap khác để lọc các giá trị p2, p1, p0 và q0 để tạo ra p’1. Còn nếu |q2-q0| < thì sẽ sử dụng một FIR-4 tap khác để lọc các giá trị q2, q1, q0 và p0 để tạo ra q’1.
Trường hợp bS = 4
Nếu đó là thành phần luma và có |p2 - p0| < , |p0 - q0| < round() thì
Sử dụng một FIR-5 tap khác để lọc các giá trị p2, p1, p0, q0 và q1 tạo ra p’0
Sử dụng một FIR-4 tap khác để lọc các giá trị p2, p1, p0 và q0 tạo ra p’1
Sử dụng một FIR-5 tap khác để lọc các giá trị p3, p2, p1, p0, và q0 tạo ra p’2
Sử dụng một FIR-3 tap khác để lọc các giá trị p1, p0, và q1 tạo ra p’0
Nếu đó là thành phần luma và có |q2 - q0| < , |p0 - q0| < round() thì
Sử dụng một FIR-5 tap khác để lọc các giá trị q2, q1, q0, p0 và p1 tạo ra q’0
Sử dụng một FIR-4 tap khác để lọc các giá trị q2, q1, q0 và p0 tạo ra q’1
Sử dụng một FIR-5 tap khác để lọc các giá trị q3, q2, q1, q0, và p0 tạo ra q’2
Sử dụng một FIR-3 tap khác để lọc các giá trị q1, q0, và p1 tạo ra q’0
Hình IV.34. Tác dụng của bộ lọc tách khối đối với ảnh được nén nhịều.Trái : Không có bộ lọc tách khối. Phải : Có bộ lọc tách khối
CẤU TRÚC VÀ CÚ PHÁP CHUẨN H.264/AVC.
Để có thể truyền trong các môi trường khác nhau được hiệu quả, sự tích hợp các giao thức và cấu trúc mạng là rất quan trọng. H.264/AVC có sự phân biệt giữa đặc tính mã hóa và truyền tải của 2 lớp VCL và NAL như hình IV.35. mang lại hiệu quả cao trong môi trường mạng khắc nghiệt.
Network Abstraction Layer
(H.320, MP4FF,H.323/IP,MPEG2…)
Video Coding Layer
Data Partitioning
Control Data
Hình IV.35. Cấu trúc dòng bit H.264
Ngoài ra trong H.264/AVC còn hỗ trợ ảnh IDR, ảnh này được tạo ra từ ảnh I hoặc ảnh SP nhằm xóa nội dung vùng nhớ đệm ảnh tham khảo hay nói cách khác là làm tươi bộ nhớ. Khi nhận được ảnh IDR thì bộ giải mã sẽ đánh dấu tất cả các bức ảnh trong bộ đệm là “không sử dụng cho tham khảo”. Tất cả các chuỗi con có các slice được truyền đi có thể giải mã mà không cần bất kỳ một ảnh tham khảo nào trước ảnh IDR. Cấu trúc của một dòng bit H.264/AVC minh họa như hình sau
.NAL header
RBSP
NAL header
RBSP
NAL header
RBSP
Hình IV.36. Cấu trúc dòng bit.
Lớp trừu tượng mạng NAL
Tất cả dữ liệu được chứa trong các khối NAL, mỗi khối chứa một số nguyên byte xác định định dạng chung cho cả hệ thống định hướng gói (packet - oriented) và hệ thống định hướng dòng bit (bitstream), ngoại trừ mỗi khối NAL trong lớp truyền tải định hướng dòng bit có thể có một tiền tố mã hóa ở trước, và có thể là một trong 2 định dạng sau: định dạng theo từng đơn vị NAL hoặc theo từng byte.
Định dạng theo từng đơn vị NAL là một kiểu định dạng cơ bản, bao gồm các chuỗi cấu trúc cú pháp NAL được sắp xếp để giải mã.
Định dạng theo từng byte có thể được xây dựng lại từ cấu trúc của NAL bằng cách xắp xếp các đơn vị NAL trong quá trình giải mã và thêm vào một tiền tố mã bắt đầu cho mỗi NAL.
Một chuỗi video H.264 bao gồm một chuỗi các đơn vị NAL, mỗi đơn vị NAL sẽ chứa các thành phần RBSP như bảng 1, RBSP là một tập hợp dữ liệu tương ứng với dữ liệu video được mã hóa hay thông tin đầu mục, ví dụ một chuỗi các đơn vị RBSP như hình IV.37, trong đó các đơn vị được truyền đi dưới dạng các đơn vị NAL riêng biệt. Byte đầu tiên của NAL hay còn gọi là header có chiều dài 1byte chỉ ra loại RBSP được sử dụng, còn những byte còn lại thì chứa dữ liệu cho việc truyền tải hoặc lưu trữ.
Sequence
parameter set
SEI
Picture
parameter set
I slice
Picture
delimiter
P slice
P slice
Hình IV.37. Minh họa một chuỗi thành phần RBSP.
Bảng các thành phần RBSP được miêu tả như sau:
Loại RBSP
Mô tả
Thông số cài đặt
Thông số về kích thước, định dạng video, vị trí ánh xạ MB, số lượng ảnh tham khảo, thông số lượng tử…
Thông tin mở rộng
Mảng báo tin. Yếu tố này không cần thiết cho việc giải mã đúng thứ tự chuỗi video
Bộ phân đoạn ảnh
Đường biên giữa các ảnh, nếu không có thì bộ giải mã sẽ dựa vào số thứ tự frame trong mỗi tiền tố slice để phân đoạn
Slice mã hóa
Chứa tiền tố và dữ liệu mã hóa
Phân vùng dữ liệu A, B, C
Ba dạng phân vùng nhằm tăng cường khả năng chống lỗi.
Kết thúc chuỗi
Chỉ định bức ảnh kế tiếp trong thứ tự giải mã là ảnh IDR. (Không cần thiết)
Kết thúc luồng dữ liệu
Không còn ảnh tiếp theo nào cả.
Dữ liệu lấp đầy
Chứa dữ liệu “giả” nhằm tăng số lượng byte trong chuỗi. (Không cần thiết)
Bảng 1: Các thành phần RBSP
Lớp mã hóa video VCL (Video Coding Layer)
Ngõ ra của quá trình mã hóa là các dữ liệu VCL bao gồm một chuỗi các bits đặc trưng cho dữ liệu video mã hóa được ánh xạ vào NAL để truyền đi hoặc lưu trữ. Nó là sự kết hợp dự đoán theo thời gian và không gian và với mã chuyển vị. Thuật toán mã hóa nguồn cơ bản vẫn dựa trên kỹ thuật nén liên ảnh để khai thác, thống kê sự phụ thuộc dư thừa về thời gian và dự đoán mã hóa biến đổi để khai thác sự dư thừa về mặt không gian nhằm mục đích cuối cùng là nâng cao hiệu suất nén. Hơn nữa, lớp VCL bao gồm nhiều đặc tính như 17 kiểu dự đoán Intra, thuật toán biến đổi, lọc tách khối, mã hóa Entropy hay mã hóa thích nghi khung và mành…cung cấp một môi trường mạng thân thiện và tăng cường khả năng chống lỗi phù hợp cho các dịch vụ thời gian thực như truyền luồng, quảng bá và ứng dụng hội nghị…
Kỹ thuật FMO và Data Partitioned Slices
Kỹ thuật FMO mô tả cách phân chia bức ảnh thành các slice và MB bằng cách sử dụng khái niệm nhóm slice. Nhằm che giấu các kênh có khuynh hướng bị lỗi với các ứng dụng có độ trễ thấp. Dữ liệu mã hóa từ các Slice được chi thành 3 loại phân vùng như A, B, C chứa tập hợp con của slice được mã hóa. Phân vùng A chứa slice header và dữ liệu header cho mỗi MB. Phân vùng B chứa phần dữ liệu sai khác được mã hóa cho slice Intra và SI và phân vùng C chứa phần dữ liệu sai khác được mã hóa cho MB mã hóa Inter. Mỗi phân vùng có thể được đặt riêng biệt và truyền tách biệt trong từng NAL. Nếu dữ liệu phân vùng A bị mất, thì rất khó khăn cho việc cấu trúc lại Slice, vì thế phân vùng A sẽ ảnh hưởng sâu sắc đến sai số truyền. Phân vùng B và C được chọn lựa thông số mã hóa kỹ càng, có thể giải mã độc lập, do đó có thể chỉ mã hóa A và C hoặc chỉ A và B.
Kỹ thuật Arbitrary Slice Ordering
Kỹ thuật sắp xếp trật thứ tự slice bất kỳ ASO cho phép bộ giải mã có thể xử lý slice theo thứ tự bất kỳ mà nó nhận được. Do đó bộ giải mã không cần phải chờ đợi slice đúng theo thứ tự để có thể bắt đầu xử lý chúng. Điều này làm giảm độ trễ xử lý ở bộ giải mã, kết quả là độ trễ tiềm ẩn trong các ứng dụng truyền video thời gian thực sẽ nhỏ đi.
Cấu trúc dòng bit H.264/AVC
Cấu trúc dòng bit H.264/AVC được minh họa như hình IV.38.
Trong đó:
Seq : thông tin về chuỗi ảnh (Squence)
Video Params : thông số chiều cao, rộng, tỷ lệ khuôn hình các phần tử ảnh.
Bistream Params : tốc độ bit và các thông số khác.
QTs : có 2 loại QTs
Nén trong ảnh
Nén liên ảnh
GOP : thông tin về nhóm ảnh
Time code : SMPTE time code : Giờ, phút, giây, ảnh.
GOP Params: Miêu tả cấu trúc và các thông số của GOP.
PICT : thông tin về ảnh (Picture information.)
Type :ảnh loại I, P hay B.
Buffer Params : thông tin về bộ đệm.
Encode Params : thông tin về vector chuyển động.
Slice : thông tin về Slice ảnh.
Vert Pos : Slice bắt đầu từ dòng nào.
Qscale : thông tin về bảng lượng tử.
MB : thông tin về MB.
Addr Incr : Số lượng MB được bỏ qua.
Type : loại vector chuyển động dùng cho MB.
Code Block Pattern (CBP) : chỉ rõ loại khối được mã hoá.
Seq
Seq
…
Seq
GOP SC
TimeCode
GOP Params
Pict
…
Pict
PSC
Type
BufferParams
EncodeParams
Slice
…
Slice
SSC
VertPos
Qscale
MB
MB
…
AddrIner
Type
Motion vector
Qscale
CBP
b0
…
b5
Seq QC
VideoParams
BitstreamParams
QTsMisc
GOP
…
GOP
Hình IV.38. Cấu trúc dòng bit MPEG-4 H.264/AVC
MỘT SỐ ỨNG DỤNG CHUẨN H.264/AVC
H
.264/AVC đánh dấu một bước ngoặt trong lĩnh vực nén video, nhờ áp dụng các kỹ thuật tiên tiến nhằm mục đích sử dụng băng thông hiệu quả hơn và đem lại chất lượng ảnh cao hơn và độ trễ thấp. Với các kỹ thuật này, H.264/AVC có thể giảm tốc độ bit xuống hơn 50% so với chuẩn MPEG-2. Tuy nhiên, H.264/AVC đòi hỏi một cấp độ phức tạp cao hơn trong cả quá trình mã hóa lẫn giải mã. Mặc dù vậy, thử thách này hoàn toàn có thể chinh phục được nhờ có những tiến bộ mới liên tiếp trong khả năng xử lý phần mềm cũng như phần cứng. Điều này có nghĩa là H.264/AVC là một ứng cử viên tiềm năng có khả năng thay thế MPEG-2 trong những năm sắp tới ở các lĩnh vực như truyền luồng Internet tốc độ bit thấp tới các ứng dụng quảng bá HDTV và Cinema số, truyền thông video qua mạng Internet, truyền hình di động theo chuẩn DVB-H, truyền hình số mặt đất, truyền hình theo yêu cầu, tin nhắn đa phương tiện MMS… qua các mạng ISDN, DSL, Wireless, LAN và vệ tinh…
Công nghệ truyền hình số ta đã khắc phục được nhiều khuyết điểm của truyền hình tương tự nhưng hơn cả là mở ra cho ta một tiềm năng phát triển vô cùng rộng lớn. Có thể thấy sự hỗ trợ mang tính bản chất cho các hoạt động tương tác là sự khác nhau chủ yếu, thể hiện tính năng ưu việt của công nghệ H.264/AVC so với MPEG-2, là chuẩn hiện đang được áp dụng rộng rãi trong các hệ thống truyền hình. Trên thực tế các hãng cung cấp dịch vụ truyền thông theo dòng đa phương tiện đều đã hỗ trợ chuẩn H.264/AVC trong cấu trúc hạ tầng và sản phẩm đang triển khai của mình, nhằm khắc phục nhược điểm của các mô hình truyền dẫn phát sóng phát thanh và truyền hình đang sử dụng hiện nay. Các ứng dụng của H.264 thực tế đang triển khai như:
TRUYỀN HÌNH INTERNET IPTV
IPTV là mạng truyền hình kết hợp chặt chẽ với mạng viễn thông. Nói rộng hơn IPTV là dịch vụ giá trị gia tăng sử dụng mạng băng rộng IP phục vụ cho nhiều người dùng. Các user có thể thông qua máy vi tính PC hoặc máy thu hình phổ thông cộng với STB để sử dụng dịch vụ IPTV. Đặc điểm nổi bật của IPTV là dựa trên nền công nghệ IP và có khả năng tương tác. IPTV sử dụng chuẩn nén H.264/AVC làm giảm đi một nửa băng thông cần thiết để phân phối video số chất lượng DVB đầy màn hình đến khách hàng, và giảm yêu cầu băng thông truyền dẫn truyền hình số chất lượng chuẩn SDTV xuống 700 kb/s - cả hai nằm trong giới hạn của vòng DSL 1.5 Mb/s. H.264 mở ra các cơ hội mới và cũng giảm giá thành áp dụng và giá thành điều hành khi so sánh với MPEG-2. H.264 nén video hiệu quả hơn, giảm giá thành truyền dẫn qua các kết nối vệ tinh và mặt đất.
Ở nước ta một số Website cũng đã cung cấp thử nghiệm các chuơng trình truyền hình trực tuyến như VietNamNet, Công ty VTC, Đài truyền hình HTV đã ghi nhận số lượng truy cập rất lớn, cho thấy sức hấp dẫn của dịch vụ này đối với công chúng. Với mạng băng hẹp truyền thống, chỉ một số dịch vụ đơn giản của IPTV là có thể thực hiện được. Còn để có thể triển khai thành công dịch vụ IPTV thì mạng băng rộng đóng vai trò tiên quyết, bởi vì chỉ với mạng băng rộng mới có thể bảo đảm cung cấp đầy đủ băng thông theo yêu cầu cho các dịch vụ IPTV (như truyền hình, Video, Games, v.v...).
TRUYỀN HÌNH VỆ TINH DVB-S2
DVB-S2 đã chọn H.264/AVC cho mã hoá nguồn audio và video ở tốc độ 8Mb/s rất phù hợp với một DVD thông thường.Với hiệu suất sử dụng băng thông tăng từ 30% đến 131%, số chương trình mà H.264/AVC mang lại có thể tăng gấp ba so với việc dùng MPEG-2, ví dụ như có thể phát 21-26 chương trình SDTV hoặc 5-6 chương trình HDTV trên một transponder 36Mhz. Công nghệ này thực sự là bộ công cụ hữu hiệu cho các dịch vụ tương tác qua vệ tinh. Truyền hình tương tác là một phương thức quảng cáo truyền hình mới kết hợp điểm mạnh giữa tiếp thị trực tiếp và truyền hình, qua đó người xem có thể chọn mua, xem thông tin chi tiết... chỉ đơn giản qua một thao tác click, hoặc trong khi xem chương trình truyền hình, người xem có thể tham gia vao các trò chơi qua các hình thức gửi tin nhắn SMS …Truyền hình HDTV đã trở thành một một sản phẩm thiết yếu trong các gia đình. Có khoảng hơn 10 triệu hộ gia đình trên toàn cầu hiện sử dụng HDTV, con số này dự kiến sẽ tăng lên 52 triệu vào năm 2009. Đây thực sự là một tiện ích hấp dẫn với khán giả truyền hình. Sẽ ảnh hưởng tích cực đến thị trường phim ảnh, cũng như các dịch vụ quảng bá vì giá cả thấp
TRUYỀN HÌNH DI DỘNG
Truyền hình số tới các thiết bị di động với màn hình nhỏ có một sự tương tự nhất định với truyền hình cố định. Để các kênh truyền hình có thể hiển thị rõ nét với chất lượng cao trên các thiết bị xem truyền hình di động và đi kèm với nó là các tiện ích tương tác đặc thù, các luồng tín hiệu chứa nội dung phải được đóng gói, truyền tải và giải mã trong một quy trình khép kín, đồng bộ... Đầu tiên, nội dung phải được tạo ra phù hợp với thiết bị di động có màn hình nhỏ, và điều này yêu cầu phải có kỹ thuật thu hình tinh tế nếu muốn hình ảnh được thể hiện tốt trên màn hình này (ví dụ có thể dùng 2 camera để lấy cùng một cảnh, một cho màn hình TV lớn, một cho màn hình di động nhỏ với các thông số kỹ thuật khác nhau). Thứ hai, cơ cấu phân phối nội dung cũng có thể khác liên quan tới vấn đề sử dụng phổ tần số. Thứ ba, có nhiều giao thức phân phối nội dung. Và cuối cùng, khả năng phân phối kênh tương tác cũng phong phú hơn. Với tốc độ bit thấp của H.264/AVC cho phép tải nội dung đa phương tiện trên các dụng cụ như điện thoại, PDA, laptop,.. qua các công nghệ Wireless, DAB, CDMA2000, UMTS và DBV-T. Mà hiệu suất nén tăng gấp đôi so với các chuẩn trước.
Hiện nay truyền hình di động đã trở nên phổ biến ở nước ta với hai công nghệ 3G -CDMA 2000 1x EV-DO của S-Fone và công nghệ DVB-H - Nokia và VTC. Việt Nam là nước đầu tiên tại châu Á và là nước thứ 2 trên thế giới (sau Phần Lan) được Nokia triển khai dịch vụ truyền hình di động. Có thể hiểu nôm na là THDĐ hiện có 2 chiều hướng, một là xem truyền hình như bạn vẫn xem trên tivi ở nhà (công nghệ DVB-H và DMB) và vào mạng Internet xem tivi trên máy tính (Media- Flo và 3G). DVB-H cũng sử dụng các bộ mã hóa âm thanh hình ảnh tiên tiến như H.264, cho phép đến 50 kênh truyền hình hoặc dữ liệu có thể được truyền qua DVB-H multiplex. Theo Nokia, ưu điểm của thiết bị này là tiết kiệm pin và có tính năng mạnh ngay cả trong môi trường tiếp nhận khó khăn; giúp tiết kiệm chi phí một cách hiệu quả trên các mạng truyền hình; có dung lượng băng tần rộng cho nội dung hình ảnh, âm thanh phong phú; sử dụng dải tần UHF, được toàn cầu sử dụng cho truyền hình. Ở 3G việc truyền dữ liệu phụ thuộc vào tốc độ đường truyền của mạng di động, chính vì vậy 2G hay 2,5G không đủ mạnh để đáp ứng đòi hỏi đường truyền của dịch vụ này, do tín hiệu video yêu cầu băng thông kênh truyền tương đối lớn (khoảng vài trăm kbps). Với kỹ thuật này, mỗi thuê bao được cấp một kênh trao đổi thông tin trong tài nguyên của mạng điện thoại để trao đổi thông tin truyền hình. Chất lượng hình ảnh không phụ thuộc vào cự ly phát sóng của kênh truyền hình hay các vật che chắn (như truyền hình thông thường). Truyền hình theo cách này cũng không cần phải có tần số riêng. Kênh thông tin trên công nghệ truyền hình 3G có tính chất 2 chiều (tương tự như 1 kênh đàm thoại), nhưng là kênh truyền dữ liệu được trạm thu phát gốc (BTS) cấp cho thuê bao. Như vậy, mỗi thuê bao sẽ chiếm một phần tài nguyên thông tin của trạm BTS khi họ sử dụng dịch vụ, vì vậy sẽ hạn chế số người dùng cùng lúc. Khi lượng người dùng lớn, để có thể phục vụ tốt cho người sử dụng dịch vụ, bắt buộc nhà khai thác mạng phải nâng cấp hệ thống dẫn đến chi phí đầu tư sẽ tăng, cũng đồng nghĩa với phí dịch vụ cao.
MÔ PHỎNG QUÁ TRÌNH NÉN-GIẢI NÉN CỦA H.264/AVC BẰNG MATLAB
LƯU ĐỒ GIẢI THUẬT
Sau đây là quá trình mã hóa và giải mã một frame bằng các kỹ thuật của H.246:
Chuyển file YUV sang Matlab movie
Phân chia thành các frame
Phân chia thành các macroblock
Phân chia thành các block 4x4
Biến đổi ICT các block 4x4 dư thừa
Cấu trúc lại các block 4x4 để tham khảo
Dự đoán chuyển động
Lượng tử các hệ số DCT
Mã hóa Entropy
Lưu thành file “lastmov”
Tìm vector chuyển động trong file“lastmov”
Mở file“lastmov”
Giải mã file“lastmov”
Giải lượng tử
Biến đổi frame từ YUV sang RGB
Tái tạo lại MB từ các block 4x4
Lưu lại thành file “lastmov”
END
Nạp file YUV
Lượng tử các hệ số DCT
CHƯƠNG TRÌNH MÔ PHỎNG:
So với MPEG-2 thì H.264/AVC có rất nhiều ưu điểm nổi bật nhưng vì còn nhiều hạn chế, nên em chỉ có thể mô phỏng một phần cách mã hóa tiên tiến của H.264/AVC như sử dụng 52 bước lượng tử, sử dụng biến đổi ICT cho khối 4x4...Để có thể hoàn thành được chương trình mô phỏng này, ngoài sự cố gắng của bản thân, sự định hướng đúng đắn của TS. Trần Dũng Trình, em còn tham khảo một số module Matlab có sẵn trên Web, một số hàm hỗ trợ từ Matlab...và đặc biệt được sự giúp đỡ của các anh chị trong công ty Sfone đã giúp em hoàn thành tốt Đồ án này. Tuy nhiên, vì việc mã hóa một bức ảnh có quá nhiều công đoạn phức tạp, và việc mã hóa cũng tốn khá nhiều thời gian, yêu cầu bộ xử lý tốc độ cao nên không thể tách riêng từng quá trình để mô phỏng.
Các module mô phỏng như sau:
Hàm main : chương trình chính, sẽ gọi các hàm con để mã hóa, giải mã...
Hàm playmov : hàm play file movie đã được nén.
Hàm plotvector : hàm vẽ vector chuyển động trong ảnh P và ảnh B
Hàm progressbar : hàm hỗ trợ từ Matlab, dùng để minh họa tiến trình xử lý của Matlab, hàm được tham khảo từ trang web mathexchange.com.
Hàm yuv2mov : hàm hỗ trợ từ Matlab, dùng để chuyển file YUV sang file movie trong Matlab, hàm được tham khảo từ trang web mathexchange.com.
Hàm sec2timestr : hàm hỗ trợ từ Matlab, dùng để chuyển một chuỗi số sang dạng thời gian thực, hàm được tham khảo từ trang web mathexchange.com.
KẾT QUẢ MÔ PHỎNG
Với cùng giá trị QP = 31, Frame thứ 1 của bức ảnh foreman.yuv được nén bằng kỹ thuật H.264/AVC có dung lượng và tỷ số PSNR = dB như sau
Còn nén bằng kỹ thuật MPEG-2 có dung lượng và tỷ số PSNR = dB như sau
PHỤ LỤC
function main()
clear all;
clc;
fprintf('\nLUAN VAN TOT NGHIEP\n')
fprintf('\nTONG QUAN VE CHUAN NEN MPEG-4 H.264/AVC VA KHA NANG UNG DUNG TRONG THUC TIEN\n')
fprintf('\nGVHD : TS. TRAN DUNG TRINH\n')
fprintf('\nSVTH : NGUYEN QUANG HOANG SON\n')
fprintf('\nMSSV : 103 101 088\n')
chonf = input('\nNHAP SO LUONG FRAMES SE MA HOA = ');
chonq = input('\nNHAP GIA TRI BUOC LUONG TU TRONG KHOANG 0<=QP<52, QP= ');
nq = chonq;
nf = chonf;
if (nq 51 | nf > 300)
error('NHAP SAI GIA TRI LUONG TU HOAC SO FRAMES!!!!')
end
save nq;
fprintf('\nSE MA HOA %d FRAMES VOI BUOC LUONG TU QP=%d\n',nf,nq);
mov = napmov(nf);
tic;
avc = mahoa(mov);
fprintf('THOI GIAN MA HOA : %s\n',sec2timestr(toc));
tic;
mov2 = giaima(avc);
fprintf('THOI GIAN GIAI MA : %s\n',sec2timestr(toc));
save lastmov mov2 avc mov;
%%%% HAM MO FILE YUV ROI LUU THANH MATLAB MOVIE %%%%
function movdata = napmov(nf)
mov = yuv2mov('carphone.yuv',176,144,'420');
%mov = yuv2mov('foreman.yuv',352,288,'420');
save mov;
load mov;
if nf == 0
nf = length(mov);
end
% MOV(1) : MA TRAN CHOI, MOV (2), MOV(3) MA TRAN MAU
movdata = repmat(uint8(0),size(mov(1).cdata), nf);%tai tao lai MANG MOV RONG
for i = 1:nf % MA HOA TU FRAME 1 DEN FRAME THU nf
movdata(:,:,:,i) = mov(i).cdata;% LUU DU LIEU CUA CAC FRAME
end
%%%%%% HAM MA HOA FILE MATLAB MOVIE %%%%%%%
function avc = mahoa(mov)
fpat = 'IBBPBBPBBPBBPBBI'; % LOAI MAU FRAME (CHO TOAN BO MOVIE)
k = 0; % FRAME DAU TIEN
pf = []; % MA TRAN MAU FRAME LA RONG
progressbar
for i = 1:size(mov,4) % VONG LAP FRAME, TRA VE GIA TRI COT
% THU 4 TRONG MOV
f = double(mov(:,:,:,i)); % BIEN DOI FRAME SANG GIA TRI DOUBLE
f = rgb2yuv(f);
k = k + 1;
if k > length(fpat)
k = 1;
end
ftype = fpat(k); % DAT TEN LOAI FRAME THU k
[avc{i},pf] = mhframe(f,ftype,pf);% GOI HAM MA HOA CHO FRAME THU i
progressbar(i/(size(mov,4))) % HIEN THI % QUA TRINH MA HOA,
end
%%%%% HAM MA HOA TUNG FRAME ANH %%%%%%
function [avc,df] = mhframe(f,ftype,pf)
[M,N,i] = size(f); % M = 176, N= 144,i = 3 TRONG f
mbsize = [M, N] / 16; % PHAN CHIA THANH CAC MACROBLOCK
avc = struct('type',[],'mvx',[],'mvy',[],'scale',[],'coef',[]);
avc(mbsize(1),mbsize(2)).type = [];
pfy = pf(:,:,1);
df = zeros(size(f));
for m = 1:mbsize(1) % VONG LAP THEO CHIEU CAO
for n = 1:mbsize(2) % VONG LAP THEO CHIEU RONG
x = 16*(m-1)+1 : 16*(m-1)+16;% LAP TU 1-CAO
y = 16*(n-1)+1 : 16*(n-1)+16;% LAP TU 1-RONG
[avc(m,n),df(x,y,:)] = mhmblock(f(x,y,:),ftype,pf,pfy,x,y);
end
end
%%%%%%%%%% HAM MA HOA MAROBLOCK %%%%%%%%
function [avc,dmb] = mhmblock(mb,ftype,pf,pfy,x,y)
persistent q1 q2;
if isempty(q1) %Neu mang q1 la rong.
q1 = qintra;
q2 = qinter;
end
load nq; %THONG SO BUOC LUONG TU
scale = nq;
avc.type = 'I'; % CAU TRUC AVC
avc.mvx = 0;
avc.mvy = 0;
% TIM VECTOR CHUYEN DONG CHO ANH P
if ftype == 'P'
avc.type = 'P';
[avc,emb] = getmotionvec(avc,mb,pf,pfy,x,y);
mb = emb; % LAY PHAN SAI SO GIUA CAC FRAME P DE MA HOA
q = q2; % NEU LA ANH P THI DU DOAN INTER
else
q = q1; % NEU LA ANH I
end
% TIM VECTOR CHUYEN DONG CHO ANH B
if ftype == 'B'
avc.type = 'B';
[avc,emb] = getmotionvec(avc,mb,pf,pfy,x,y);
mb = emb; % LAY PHAN SAI SO GIUA CAC FRAME B DE MHOA
q = q2;
else
q = q1;
end
% CHON KHOI VA TIEN HANH BIEN DOI DCT VA LUONG TU
b = getblocks(mb);
for i = 18:-1:1
avc.scale(i) = scale; % DAT VECTOR LUONG TU CHO KHOI i
coef = dct2(b(:,:,i)); % BIEN DOI DCT HAI CHIEU CHO KHOI THU i
avc.coef(:,:,i) = round( 8 * coef ./ (scale * q));
end
% CAU TRUC LAI KHOI DE THAM KHAO
dmb = gmmblock(avc,pf,x,y);
%%%%% PHAN CHIA MACROBLOCK THANH 18 KHOI 4x4 %%%%%
function b = getblocks(mb)
b = zeros([4, 4, 18]); % TAO 18 MA TRAN 4x4 ZEROS
b(:,:,1) = mb( 1:4, 1:4, 1);
b(:,:,2) = mb( 1:4, 5:8, 1);
b(:,:,3) = mb( 1:4, 9:12, 1);
b(:,:,4) = mb( 1:4, 13:16, 1);
b(:,:,5) = mb( 5:8, 1:4, 1);
b(:,:,6) = mb( 5:8, 5:8, 1);
b(:,:,7) = mb( 5:8, 9:12, 1);
b(:,:,8) = mb( 5:8, 13:16, 1);
b(:,:,9) = mb( 9:12, 1:4, 1);
b(:,:,10) = mb( 9:12, 5:8, 1);
b(:,:,11) = mb( 9:12, 9:12, 1);
b(:,:,12) = mb( 9:12, 13:16, 1);
b(:,:,13) = mb( 13:16, 1:4, 1);
b(:,:,14) = mb( 13:16, 5:8, 1);
b(:,:,15) = mb( 13:16, 9:12, 1);
b(:,:,16) = mb( 13:16, 13:16, 1);
% HAI KHOI CHROM (GIA TRI TRUNG BINH CUA 4 KHOI BEN CANH)
b(:,:,17) = 0.25 * ( mb(1:4:15,1:4:15, 2) + mb(1:4:15,2:4:16, 2) ...
+ mb(2:4:16,1:4:15, 2) + mb(2:4:16,2:4:16, 2));
b(:,:,18) = 0.25 * ( mb(1:4:15,1:4:15, 3) + mb(1:4:15,2:4:16, 3) ...
+ mb(2:4:16,1:4:15, 3) + mb(2:4:16,2:4:16, 3) );
%%%% HAM TINH TOAN VECTOR CHUYEN DONG %%%%%%%
function [avc,emb] = getmotionvec(avc,mb,pf,pfy,x,y)
mby = mb(:,:,1); % CHI TIM TRONG THANH PHAN Y
[M,N] = size(pfy);
% TIM KIEU MOI KHIA CANH
% maxstep = 10; % Largest allowable motion vector in x and y
% mvxv = -maxstep:maxstep;
% mvyv = -maxstep:maxstep;
% minsad = inf;
% for i = 1:length(mvxv)
% tx = x + mvxv(i);
% if (tx(1) < 1) | (M < tx(end))
% continue
% end
% for j = 1:length(mvyv)
% ty = y + mvyv(j);
% if (ty(1) < 1) | (N < ty(end))
% continue
% end
% sad = sum(sum(abs(mby-pfy(tx,ty))));
% if sad < minsad
% minsad = sad;
% mvx = mvxv(i);
% mvy = mvyv(j);
% end
% end
% end
% TIM KIEU Logarithmic
step = 8; % KICH THUOC BUOC TIM KIEM Initial step size for logarithmic search
dx = [0 1 1 0 -1 -1 -1 0 1]; % VECTOR CHI HUONG TIM KIEM
dy = [0 0 1 1 1 0 -1 -1 -1]; % [origin, right, right-up, up, left-up,
% left, left-down, down, right-down]
mvx = 0;
mvy = 0;
while step >= 1
minsad = inf;
for i = 1:length(dx)
tx = x + mvx + dx(i)*step;
if (tx(1) < 1) | (M < tx(end)) % NEU GIA TRI tx(1) <1 HOAC
continue % M < GIA TRI tx CUOI CUNG
end
ty = y + mvy + dy(i)*step;
if (ty(1) < 1) | (N < ty(end))
continue
end
sad = sum(sum(abs(mby-pfy(tx,ty))));
if sad < minsad
ii = i
minsad = sad;
end
end
mvx = mvx + dx(ii)*step;
mvy = mvy + dy(ii)*step;
step = step / 2;
end
avc.mvx = mvx; % LUU VECTOR CHUYEN DONG
avc.mvy = mvy;
emb = mb - pf(x+mvx,y+mvy,:); % MACROBLOCK SAI SO
%%%%%%%%%%%%%%%%%% HAM GIAI MA %%%%%%%%%%%%%%%%%%%%
function mov = giaima(avc)
movsize = size(avc{1});
mov = repmat(uint8(0),[16*movsize(1:2), 3, length(avc)]);
pf = [];
for i = 1:length(avc) % GIAI MA TOAN BO KHOI TRONG AVC
f = gmframe(avc{i},pf); % GIAI MA FRAME
pf = f; % LUU FRAME TRUOC DO
f = yuv2rgb(f); % BIEN DOI FRAME SANG RGB
f = min( max(f,0), 255); % GIOI HAN MOVIE TRONG KHOANG 8 BITS
mov(:,:,:,i) = uint8(f); % LUU FRAME
progressbar(i/(length(avc)));
end
%%%%%%%%%%% HAM GIAI MA FRAME %%%%%%%%%%%%%
function fr = gmframe(avc,pf)
mbsize = size(avc); % KICH THUOC MB CHINH LA KICH THUOC FILE
M = 16 * mbsize(1);
N = 16 * mbsize(2);
fr = zeros(M,N,3);
for m = 1:mbsize(1) % LAP TOAN BO MB
for n = 1:mbsize(2)
x = 16*(m-1)+1 : 16*(m-1)+16;% TAO LAI FRAME
y = 16*(n-1)+1 : 16*(n-1)+16;
fr(x,y,:) = gmmblock(avc(m,n),pf,x,y);% GOI HAM GIAI MA MB CHO KHOI
end % macroblock loop
end
%mse = floor((mov(i).cdata)-(avc(i).cdata));
%psnr = 10*log10(255^2/mse);
%save psnr;
%%%%%%%%%%%% HAM DAT KHOI %%%%%%%%%%%%%%%
function mb = putblocks(b)
mb = zeros([16, 16, 3]);
mb( 1:4, 1:4, 1) = b(:,:,1);
mb( 1:4, 5:8, 1) = b(:,:,2);
mb( 1:4, 9:12, 1) = b(:,:,3);
mb( 1:4, 13:16,1) = b(:,:,4);
mb( 5:8, 1:4, 1) = b(:,:,5);
mb( 5:8, 5:8, 1) = b(:,:,6);
mb( 5:8, 9:12, 1) = b(:,:,7);
mb( 5:8, 13:16, 1) = b(:,:,8);
mb( 9:12, 1:4, 1) = b(:,:,9);
mb( 9:12, 5:8, 1) = b(:,:,10);
mb( 9:12, 9:12, 1) = b(:,:,11);
mb( 9:12, 13:16, 1) = b(:,:,12);
mb( 13:16, 1:4, 1) = b(:,:,13);
mb( 13:16, 5:8, 1) = b(:,:,14);
mb( 13:16, 9:12, 1) = b(:,:,15);
mb( 13:16, 13:16, 1) = b(:,:,16);
z = [1 1 1 1; 1 1 1 1; 1 1 1 1; 1 1 1 1 ]; % HAI KHOI MAU CHROMA
mb(:,:,2) = kron(b(:,:,17),z);
mb(:,:,3) = kron(b(:,:,18),z);
%%%%%%%%%%%%%%%%%%%%% HAM GIAI MA MB %%%%%%%%%%%%%%%%
function mb = gmmblock(avc,pf,x,y)
persistent q1 q2
if isempty(q1) % MA TRAN HE SO LUONG TU
q1 = qintra;
q2 = qinter;
end
mb = zeros(16,16,3);
% DU DOAN VOI VECTOR CHUYEN DONG CUA ANH P
if avc.type == 'P'
mb = pf(x+avc.mvx,y+avc.mvy,:);
q = q2;
else
q = q1;
end
% DU DOAN VOI VECTOR CHUYEN DONG CUA ANH B
if avc.type == 'B'
mb = pf(x+avc.mvx,y+avc.mvy,:);
q = q2;
else
q = q1;
end
% GIAI MA KHOI
for i = 18:-1:1
coef = avc.coef(:,:,i) .* (avc.scale(i) * q) / 8; % GIAI LUONG TU
b(:,:,i) = idct2(coef); % BIEN DOI DCT NGUOC CHO HE SO MA HOA
end
% CAU TRUC B
mb = mb + putblocks(b);
%%%%%%%%% HAM BIEN DOI TU RGB SANG YUV %%%%%%%%%%%
function yuv = rgb2yuv(rgb) % BIEN DOI TRUOC KHI MA HOA
m = [ 0.299 0.587 0.144; %Y = 0.299R + 0.587R + 0.144B
-0.168736 -0.331264 0.5; % MA TRAN BIEN DOI
0.5 -0.418688 -0.081312];
% LAY DU LIEU MOVIE
[nr,nc,c] = size(rgb);
rgb = reshape(rgb,nr*nc,3); % TAI TAO CHO MA TRAN NHAN
% MA HOA MAU BIEN DOI
yuv = m * rgb';
yuv = yuv + repmat([0; 0.5; 0.5],1,nr*nc);
yuv = reshape(yuv',nr,nc,3); % TAI TAO LAI ANH GOC
%%%%%%%%%%%%%%% HAM BIEN DOI TU YUV SANG RGB %%%%%%%%%%
function rgb = yuv2rgb(yuv) % BIEN DOI SAU KHI GIAI MA
m = [ 0.299 0.587 0.144;
-0.168736 -0.331264 0.5;
0.5 -0.418688 -0.081312];
m = m^-1; % LAY NGHICH DAO MA TRAN m
[nr,nc,c] = size(yuv); % LAY DU LIEU MOVIE
yuv = reshape(yuv,nr*nc,3); % TAI TAO LAI CHO MA TRAN YUV
rgb = yuv - repmat([0, 0.5, 0.5],nr*nc,1);% MA HOA BIEN DOI MAU
rgb = m * rgb'; % rgb' hoan vi cua rgb
rgb = reshape(rgb',nr,nc,3); % TAI TAO LAI ANH GOC
%%%%%%%%%%%% BANG LUONG TU CHO ANH INTER 4x4 P VA B %%%%%
function q = qinter
q = [17,17,16,16;
17,16,15,15;
16,15,15,15;
16,15,15,15];
%%%%%%%%%%% BANG LUONG TU CHO ANH INTRA 4x4 %%%%%%%
function q = qintra
q = [ 9,13,18,21;
13,18,21,24;
18,21,24,27;
21,24,27,30];
Hàm plotvector.m
function plotvector
load lastmov;
[M,N] = size(avc{1});
for f = 1:length(avc)
if avc{f}(1,1).type == 'I'% neu la anh I thi bo qua
continue
end
for i = 1:M
for j = 1:N
mvx(i,j) = avc{f}(i,j).mvy;
mvy(i,j) = avc{f}(i,j).mvx;
end
end
figure
quiver(flipud(mvx),flipud(mvy))
set(gca,'XLim',[-1, N+2],'YLim',[-1, M+2])% CAI DAT TOA DO CUA HINH
title(sprintf('Vector chuyen dong cho anh thu %i',f))
end
Hàm playmov.m
function playmov(n)
load lastmov
for i = 1:size(mov,4)
m(i).cdata = uint8([mov(:,:,:,i) mov2(:,:,:,i)]);% mov anh goc, mov2 anh giai nen
m(i).colormap = [];
end
figure('Position',[30,100,750,400,]);
axs=axes('Position',[0.05 0.15 0.8 0.55]);
xlabel( 'Anh GOC ------------------------------------------------------>>>>>> Anh NEN');
movie(m,n,5); % Play mang m n lan, nhung lan sau play voi toc do 5fps
TÀI LIỆU THAM KHẢO
[1] TS. Nguyễn Thanh Bình, Ths. Võ Nguyễn Quốc Bảo, “Xử lý âm thanh, hình ảnh”, Học viện công nghệ Bưu chính viễn thông, Hà Nội.
[2] KS. Trương Thị Thủy, “Tiêu chuẩn mã hóa tiên tiến H.264-MPEG-4 AVC”, Tạp chí khoa học kỹ thuật truyền hình 1/2004.
[3] KS. Cao Văn Liết, “Bù chuyển động trong kỹ thuật mã hóa nội dung nguồn video tự nhiên sử dụng tiêu chuẩn nén MPEG-4”, Tạp chí khoa học kỹ thuật truyền hình 1/2005.
[4]Th.S. Nguyễn Minh Hồng, “Chuẩn nén H.264/AVC và khả năng ứng dụng trong truyền hình”, Tạp chí khoa học kỹ thuật truyền hình 2/2005.
[5] Gs.TS. Nguyễn Kim Sách, “Truyền hình số có nén và Multimedia”, Nhà xuất bản khoa học kỹ thuật, Hà Nội
[6] TS. Trần Dũng Trình, “Truyền hình trên Internet IPTV”, Tạp chí khoa học kỹ thuật truyền hình 3/2005
[7] Iain E. G. Richardson, “H.264 And MPEG-4 Video Compression”, The Robert Gordon University, Aberdeen, UK
[8] John Arnold, Michael Frater, Mark Pickering, “Digital Television Technology and Standards”, The University of New South Wales, ADFA Canberra, ACT, Australia
[9] JVT “Draft ITU-T recommendation and final draft international standard of joint
video specification (ITU-T rec. H.264– ISO/IEC 14496-10 AVC),”
[10] THOMAS SIKORA, “MPEG-1 and MPEG-2 Digital Video Coding Standards”, McGraw Hill Publishing Company.
[11] T. Wiegand, G.J. Sullivan, G. Bjontegaard, A. Luthra, ”Overview of the H.264/AVC Video Coding Standard,”
[12] Siwei Ma, Xiaopeng Fan, Wen Gao, “Low Complexity Integer Transform and High Definition Coding”
[13] Các trang web : University of Illinois at Chicago (UIC),
Các file đính kèm theo tài liệu này: