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Ờ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

doc113 trang | Chia sẻ: banmai | Lượt xem: 5508 | Lượt tải: 1download
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 Time Code GOP Params Pict … Pict PSC Type Buffer Params Encode Params Slice … Slice SSC Vert Pos Qscale MB MB … Addr Iner Type Motion vector Qscale CBP b0 … b5 Seq QC Video Params Bitstream Params QTs Misc 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:

  • docLVver2.doc
  • docNV.doc
  • docNX.doc
Tài liệu liên quan