BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG ......🙡🕮🙣...... BÀI TẬP LỚN MÔN: CÁC KỸ THUẬT GIẤU TIN Đề tài: Giấu tin trong video chuẩn H.264/H.265 Giảng viên: Đỗ Xuân Chợ Nhóm môn học: 03 – Nhóm bài tập: 14 Sinh viên thực hiện: Nguyễn Nguyên Trung Phan Tuấn Anh Phan Đức Anh Bùi Minh Hoàng Phùng Hồng Vân Nguyễn Ngọc Khoa B18DCAT252 B18DCAT012 B18DCAT011 B18DCAT096 B18DCAT259 B18DCAT131 Hà Nội – 2022 MỤC LỤC Lời nói đầu CHƯƠNG 1. TỔNG QUAN VỀ H.264 1. Lịch sử hình thành và phát triển Chuẩn H264 được giới thiệu lần đầu vào năm 2004, đã trở thành một trong những chuẩn nén Video phổ biến hiện nay trong việc ghi, nén và phát hình ảnh với chất lượng hiển thị cao và tiết kiệm băng thông. H.264 có tên gọi đầy đủ là MPEG4 Part 10 AVC (Advance Video Coding – Mã hóa video cao cấp) thường được viết tắt như MPEG-4 AVC/H.264. Chuẩn H264 được đánh giá hiệu quả nén hình cao hơn các định dạng nén thông thường như MPEG-4 hoặc MPEG-2 mà chất lượng hình ảnh cũng không bị giảm sút. Nhờ vào sự ưu việt này, H. 264 đã trở thành chuẩn nén phù hợp cho nhiều phương thức truyền tải video như video online với số bit rate thấp nhưng vẫn giữ được chất lượng hiển thị, nhờ vậy, người dùng có thể quan sát qua mạng bằng hình ảnh HD mà không bị tác nghẽn, giật hình. Ngày nay chuẩn H264 được sử dụng nhiều trong các ứng dụng như đĩa Blu-ray, đầu ghi hình camera, máy quay phim, đầu thu kỹ thuật số….Hoặc trong các dịch vụ phát video như Youtube, Vimeo, iTunes Store...; các phần mềm web như Adobe Flash, Microsoft Silverlight, HTML5....Ngoài ra, chuẩn H.264 còn được sử dụng trong các dịch vụ truyền hình HDTV mặt đất (ATSC, ISDB-T, DVB-T, DVB-T2), cáp (DVB-C) và vệ tinh (DVB-S và DVB-S2). 2. Kỹ thuật mã hoá theo chuẩn H.264 Hình 4.15 dưới đây mô tả quá trình mã hóa video trong chuẩn H264. + Fn hiện tại F’n-1 tham chiếu X D T Đánh giá chuyển động (ME) Sắp xếp lại Q - Bù chuyển động (MC) Dự đoán nội khung Liên khung Mã hóa Entrop P Nội khung NA L Chọn dự đoán nội khung + F’n khôi phục Bộ lọc uF’n D ’ n T-1 Q-1 + + Hình 4.15. Sơ đồ quy trình mã hóa video theo chuẩn H264 Từ hình 4.15 thấy được các khối chính trong mô hình mã hóa theo chuẩn H264 bao gồm: - Fn (current): Ảnh hiện tại - F’n-1(reference): Ảnh tham chiếu của 1 hoặc 2 khung hình được mã hóa trước đó. - F’n(reconstoncted): Ảnh khôi phục (ảnh tái lập) - Intra prediction: Dự đoán trong ảnh - Choose Intra Prediction: Chọn dự đoán nội khung - Deblocking filter: Bộ lọc tách khối - T, Q và T-1, Q-1: quá trình biến đổi DCT (T) và lượng tử hóa (Q); quá trình DCT ngược (T-1) và giải lượng tử hóa (Q-1) - Dn, D’n: Phần ảnh sai khác vào mã hóa và ra từ giải mã hay còn gọi là khối dư thừa và khối dư thừa đã được tái lập - Reorder: Sắp xếp lại - Entropy encode: Mã hóa entropy - MC (Motion Compensation): Bù chuyển động - ME (Motion estimation): Đánh giá chuyển động Với sự góp mặt và hỗ trợ của các khối trên, quy trình mã hóa của H.264 có thể chia thành 2 thành phần chính là quy trình mã hóa thuận chiều và quy trình mã hóa tái lập [37]. Tiếp theo giáo trình sẽ tập trung phân tích các quy trình này. Đối với quy trình mã hóa thuận chiều : Quy trình mã hóa thuận chiều được mô tả khái quát như sau: Video nguồn được tách ra thành các khung hình Fn, các khung hình này được chia thành các khối macro (macroblock) MB với tỷ lệ 16 pixel x 16 pixel. Các khung hình với các khối MB được đi qua hai phương pháp dự đoán nội khung và dự đoán liên khung để tạo ra khung hình mới, khung hình mới này là khung hình đã loại bỏ một số chi tiết thừa để giảm dung lượng khung hình và vẫn đảm bảo hình ảnh tốt so với mắt người nhìn. Tiếp theo, phương pháp dự đoán nội khung được sử dụng với các khung I (khung được mã hóa mà không cần tham chiếu tới các khối trong các khung trước nó, mà chỉ cần các khối đã mã hóa trong cùng khung), còn phương pháp dự đoán liên khung thường được sử dụng với các khung P và khung B (khung được mã hóa bởi việc tham chiếu tới các khối trong các khung đã mã hóa trước nó). Sau khi qua hai phương pháp dự đoán, các khối trong khung hình dự đoán (P) được trừ đi bởi các khối tương ứng trong khung hình ban đầu (Fn) tạo ra các khối của khung hình dư thừa Dn (Dn = Fn - P), đây là khung hình thể hiện sự khác nhau giữa khung hình ban đầu Fn với khung hình dự đoán P.Các khối trong khung hình Dn được biến đổi DCT (T) và lượng tử hóa (Q) tạo ra thông tin X. Các thông tin về phương pháp dự đoán nội khung, phương pháp dự đoán liên khung thông tin X được mã hóa Entropy, trở thành dạng bitstream và được đưa tới lớp trừu tượng mạng NAL (đây là nơi để truyền tải hoặc lưu trữ các thông tin này), đây là các thông tin cần thiết để phục vụ việc giải mã. Đối với quy trình mã hóa tái lập: Thông tin X được đi qua lượng tử hóa ngược Q-1 và biến đổi DCT ngược T-1 để tạo ra khung hình dư thừa được tái lập D’n, khung hình này khác với khung hình dư thừa Dn do quá trình lượng tử hóa Q là quá trình gây mất mát thông tin, vì vậy khi lượng tử hóa ngược, thông tin không còn được nguyên vẹn như ban đầu. Bên cạnh đó, khung dư thừa D’n được kết hợp với khung hình dự đoán P để tạo ra khung hình tái lập theo công thức : uF’n = P + D’n. Do D’n khác Dn nên uF’n khác với Fn ban đầu. Tiếp theo khung hình uF’n được sử dụng để phục vụ cho phương pháp dự đoán nội khung. Theo đó, khung hình uF’n được đi qua bộ lọc với tác dụng chính là làm mượt hình ảnh bằng cách xử lý màu sắc giữa biên của các khối MB cạnh nhau, sau đó thu được khung hình tái lập F’n. Khung hình tái lập F’n này được sử dụng để phục vụ cho phương pháp dự đoán liên khung của các khung hình tiếp theo, khi đó khung hình F’n trở thành khung hình tham chiếu F’n-1 hoặc F’n-2 … Cần lưu ý, các khung hình F’n không nhất thiết phải theo thứ tự thời gian tượng tự như các khung hình trong video nguồn, bởi H.264/AVC có thể bỏ qua một số khung hình, mã hóa các khung hình phía sau trước, rồi mới mã hóa tới khung hình trước đó, vì vậy khung hình tham chiếu F’n-1, F’n-2, … có nghĩa là các khung hình được mã hóa trước khung hình F’n, chứ không nhất thiết là các khung hình xuất hiện trước trong video nguồn. Ví dụ: có 3 khung hình F1, F2, F3, H.264/AVC mã hóa khung hình F1 thành F’1, sau đó bỏ qua F2 và mã hóa F3, như vậy khung hình mã hóa của F3 là F’2 và sau đó, H.264/AVC mới mã hóa khung hình F2, lúc này khung hình mã hóa của F2 là F’3. 3. Cấu trúc chuẩn H.264 3.1 Phương pháp dự đoán nội khung - Việc lựa chọn kích thước cho các khối để thực hiện dự đoán nội khung ảnh hưởng tới hai vấn đề chính: hiệu quả dự đoán và chi phí để thể hiện các chế độ dự đoán. Thường thì hai vấn đề này sẽ tỉ lệ nghịch với nhau, tức là nếu hiệu quả dự đoán cao thì chi phí để thể hiện chế độ dự đoán là lớn và ngược lại, nếu hiệu quả dự đoán thấp hơn thì chi phí để thể hiện chế độ dự đoán sẽ nhỏ hơn. =>Vì vậy, việc chọn kích thước khối thế nào để dự đoán, tùy thuộc vào mục đích mã hóa và giải mã của người dùng hoặc dịch vụ sử dụng video chuẩn H.264. -Với H.264, dự đoán nội khung tập trung khai thác sự tương quan về không gian giữa các khối liền kề nhau để thực hiện dự đoán. Nói cách khác, nó sẽ dự đoán giá trị các pixel của một khối dựa trên các pixel xung quanh khối đó. - Với các khối 4x4 có 9 chế độ dự đoán - Với các khối 16x16 thì chỉ có 4 chế độ dự đoán. Phương pháp tói ưu hoá giữa tỉ lệ bit và sự bóp méo hình ảnh RDO Thực tế cho thấy, nếu muốn có một chất lượng hình ảnh tốt thì tỉ lệ bit phải cao tuy nhiên điều đó làm giảm hiệu quả nén và ngược lại nếu tỉ lệ bit thấp đồng nghĩa với việc chất lượng hình ảnh sẽ kém hơn. - Kỹ thuật RDO (Rate Distortion Optimization) là kỹ thuật để chọn chế độ dự đoán nội khung cho một khối hiện tại, mục đích của nó là tìm ra một chế độ dự đoán tối ưu nhất sao cho tỉ lệ giữa sự tăng tỉ lệ bit (bit rate) và sự bóp méo hình ảnh (distortion) là hợp lý. - Thông thường, để đưa ra được chế độ dự đoán cho một khối 4x4 một cách hiệu quả, bộ mã hóa của H.264 sẽ dựa trên chế độ dự đoán của những khối lân cận. Mx : chế độ dự đoán của khối hiện tại X MPMx : chế độ dự đoán có khả năng nhất của X 3.2 MA : chế độ dự đoán của khối trên nó(khối A) MB : chế độ dự đoán của khối bên trái(khối B) MPMx cho khối 4x4 (khối X) được tính toán dựa trên chế độ dự đoán của khối A và khối B. Nếu không có khối A hoặc B (trong trường hợp khối X nằm ở mép trái hoặc mép trên của khung hình) thì giả định chế độ dự đoán của khối bị thiếu đó là bằng 2. MPMx = min {MA, MB} - Sau khi có kết quả dự đoán nội dung, bộ mã hóa gửi một cờ F, cho mỗi khối 4x4, để xác định MPMx có được chọn hay không. Nếu cờ F = 1, MPMx sẽ được sử dụng và lúc này chế độ dự đoán của khối hiện tại là Mx = MPMx. Nếu cờ F = 0, một tham số khác REMx sẽ được sử dụng để xác định Mx, và nó được xác định theo công thức: Mx = REMx nếu REMx < MPMx Mx = REMx +1 nếu REMx >= MPMx 3.3 Phương pháp dự đoán liên khung - Dự đoán liên khung tạo ra một mô hình dự đoán từ một hoặc nhiều các khung hình (hoặc vùng trong một khung hình) đã được mã hóa trước đó sử dụng bù trừ chuyển động. - Khác với các chuẩn mã hóa trước đó, chuẩn H.264 hỗ trợ nhiều kiểu kích thước cho một khối hơn (từ kích thước khối 16 x 16 tới 4 x 4). - Dự đoán liên khung chủ yếu dựa vào hai yếu tố là tính toán chuyển động và bù trừ chuyển động. - Mục đích chính của việc dự đoán này là mã hóa các khung hình mới dựa trên các khung hình tham chiếu nhưng tập trung mã hóa các điểm khác nhau. - Ví dụ: trong một khung hình quay cảnh một người chuyển động ,dự đoán liên khung sẽ tính toán chuyển động và thực hiện bù trừ chuyển động cho khung hình hiện tại dựa trên các khung hình tham chiếu và chỉ mã hóa phần thay đổi là người , còn khung cảnh sự vật không thay đổi thì không mã hóa, điều này giúp tiết kiệm chi phí mã hóa, giúp tăng hiệu quả nén cho video. 3.4 Các loại khung hình Ở khung Frame Type, ta có các thông số I / B / P Frames, vậy đó là gì? I Frames (Intra Frames hay Key Frames): Là khung hình lưu trữ toàn bộ hình ảnh “chính”. Giả sử một đoạn video ngắn 3 giây có một hình tròn màu xanh chuyển sang màu đỏ từ 0:00 đến 0:03 thì 2 hình tròn màu xanh và đỏ chính là 2 IFrames. I Frames cho phép các khung hình khác tham chiếu đến nó. + Chỉ loại bỏ các thông tin dư thừa về mặt không gian qua mã hóa Intra-Coding. + Dùng các điểm trong cùng một frame để dự báo. + Không có bù chuyển động, vì là frame đầu được xử lý của mỗi Group of Pictures. + Số lượng bit yêu cầu lớn, vì được mã hóa rõ ràng nhất. P Frames (Predictive Frames): Khung hình chỉ lưu giữ những gì khác biệt so với khung hình trước nó. Khung hình này có tham khảo (hay tham chiếu – reference) đến khung hình trước. Giả sử: Một cảnh máy quay cố định một trạm xăng, nhưng có một chiếc xe hơi chạy qua. Thì chỉ cần mã hóa chuyển động của chiếc xe, còn khung cảnh cây xăng vẫn giữ nguyên -> giảm được dung lượng. P Frames còn được gọi là Delta-Frames. Đặc biệt: P Frames cũng cho phép các frame khác tham khảo đến nó. Để làm được điều này thì P Frames cần chứa đủ lượng thông tin cần thiết (tuy nhiên không nhiều bằng I Frames). Tóm tắt: + Sử dụng khung hình trước để tham chiếu. + Có bù chuyển động. + Thông tin ước lượng của các khối nằm trong Motion Vector (Vector chuyển động). Vector này cho biết macroblock nào sử dụng ảnh trước đó. B Frames (Bi-Directional Frames): Có thể tiết kiệm dung lượng hơn nữa bằng cách tham chiếu đến cả khung hình trước và sau nó. + Có bù chuyển động. + Sử dụng Macroblock của khung hình cả trước và sau nó. + Trên thực tế, x264 có tùy chọn cho phép sử dụng B-frame để các frame khác có thể tham chiếu vào nó, nếu có từ 2 B-frame trở lên (B-Pyramid). Các loại frame về khía cạnh mã hóa, chỉ khác nhau ở loại khung hình mà nó có thể tham chiếu tới. Tóm lại: Frame I không cần tham chiếu. Frame P chỉ tham chiếu tới frame I hoặc P trước nó. Frame B tham chiếu được cả I, P, và thậm chí B frame cả trước lẫn sau nó (theo thời gian). Trong H264, B-frame có thể tham chiếu hoặc được tham chiếu đến / từ các khung hình khác. Tương tự áp dụng cho B-slice. Có 4 chế độ tất cả (dòng chữ nghiêng là chỉ có trong MPEG2: Tham chiếu 1 chiều (khung hình trước hoặc sau nó). Đa khung hình tham chiếu (nhiều khung hình trước + nhiều khung hình sau). Lấy trung bình từ 2 khung hình tham chiếu: 1 trước và 1 sau. Lấy luôn giá trị vừa xử lý của khung hình được xử lý trước nó. 3.5 Bù trừ chuyển động theo cấu trúc dạng cây Là công đoạn giảm thiểu dư thừa và tăng chất lượng nén về mặt không gian, bằng cách tham chiếu đến các khung hình / phần khung hình khác, với phương pháp bù chuyển động và đánh giá chuyển động qua các vector. Các khung hình được chia thành các đơn vị là các khối (block) hoặc nhóm khối (macroblock). Các macroblock lại được chia vùng nhỏ hơn nữa để xử lý lấy mẫu và vector chuyển động. -Thành phần độ sáng (luma) của mỗi khối MB(macroblock) có thể được chia như sau: - Phương pháp phân chia các khối thành các khối nhỏ hơn để thực hiện việc bù trừ chuyển động được gọi là phương pháp bù trừ chuyển động theo dạng cây. - Khi thực hiện việc bù trừ chuyển động cho mỗi khối, một vector chuyển động cần được sử dụng và sau đó cần phải được mã hóa và đưa vào bitstream của video đã nén để phục vụ mục đích giải mã sau này. - Vì vậy, tương tự như trong dự đoán nội khung, việc lựa chọn kích thước cho mỗi khối dự đoán cũng là sự đánh đổi giữa chi phí để dự đoán và chất lượng dự đoán. +Nếu lựa chọn các khối có kích thước lớn (16x16, 16x8, 8x16) để thực hiện dự đoán thì cần ít bit hơn để thể hiện các vector chuyển động và số lượng các khối, tuy nhiên sự dư thừa bù trừ chuyển động có thể xảy ra trong những khung hình có chi tiết cao, điều này đồng nghĩa với chất lượng hình ảnh kém hơn. +Ngược lại, nếu chọn các khối có kích thước nhỏ hơn (8x4, 4x4…) thì việc dư thừa bù trừ chuyển động sẽ ít hơn nhưng số lượng bit cần để thể hiện vector chuyển động lại nhiều hơn. Chính vì vậy, thông thường, sẽ chọn các khối kích thước lớn để thực hiện bù trừ chuyển động cho các vùng hình ảnh có hình ảnh đồng nhất, không yêu cầu cao về chi tiết hình ảnh, còn các khối kích thước nhỏ được ưu tiên trong các trường hợp yêu cầu sự sắc nét, chi tiết cao. 3.6 Vector chuyển động - Vector chuyển động là một vector thể hiện sự sai khác hay thay đổi về vị trí của vật thể trong khung hình hiện tại so với các khung hình mà nó tham chiếu tới. 2 4. Ví dụ về vector chuyển động trong dự đoán liên khung chuẩn nén H.264 Một khối 4x4 trong khung hình hiện tại (a) được dự đoán từ một vùng trong khung hình tham chiếu, nếu cả tọa độ x và y của vector chuyển động điều là số nguyên (b) thì khối 4x4 trong khung hình hiện tại có thể tham chiếu tới khối đã có sẵn trong khung hình tham chiếu (phần dấu chấm màu xám), tuy nhiên nếu tọa độ x hoặc y hoặc cả hai của vector chuyển động là các số thập phân, mẫu dự đoán (phần dấu chấm màu xám) sẽ được sinh ra bởi phép nội suy giữa các mẫu kề nhau trong khung hình tham chiếu 3.1 Dự đoán vector chuyển động - Mã hóa mỗi vector chuyển động cho các khối có thể tốn rất nhiều bít, nhất là khi các khối có kích thước nhỏ được chọn để mã hóa. - Các vector chuyển động cạnh nhau thường liên quan đến nhau, vì vậy mỗi vector chuyển động được dự đoán dựa trên các vector của các khối xung quanh đã được mã hóa. - Một vector dự đoán, MVp, được tạo ra dựa trên các vector chuyển động đã được tính toán trước đó và MVD(Motion vector difference-sự khác biệt vector chuyển động), sau đó được mã hóa và truyền đi trong bitstream của video đã nén. - Phương pháp để tạo ra MVp phụ thuộc vào kích thước của các khối thực hiện bù trừ chuyển động và sự khả dụng của các vector xung quanh. Mã hoá Entropy 4.1 Giới thiệu chung Với chuẩn H.264, trong quá trình nén video một số giá trị phải được mã hóa để tạo thành luồng bit nén để lưu trữ hoặc truyền dẫn nhằm phục vụ cho bộ giải nén. Có 2 loại mã hóa entropy chính được sử dụng trong H.264 đó là mã hóa CAVLC và mã hóa CABAC 4.2 Mã hoá chiều dài biến đổi ứng với ngữ cảnh (CAVLC) 4.2.1 Mã hoá Coef_token CAVLC (Context-based Adaptive Variable Length Coding): mã hóa chiều dài thay đổi ứng ngữ cảnh. Đây là một dạng mã hóa entropy mà bảng từ mã (codeword table) áp dụng cho khối hiện tại cần mã hóa sẽ có chiều dài thay đổi dựa vào các phần tử dữ liệu đã được mã hóa trước đó (các khối lân cận đã được mã hóa). Đây là phương pháp được sử dụng để mã hóa phần dư, các khối 4x4 (và 2x2) gồm các hệ số lượng tử sau khi block được tái sắp xếp. Hình 4.17 dưới đây mô tả quy trình mã hóa CAVLC Lượng tử hóa Quét ZigZag nC Mã hóa Coff token Vòng lặp MB Mã hóa sign_flag Thống kê Mã hóa Cấp độ Bitstream Mã hóa tổng số 0 Mã hóa trước khi chạy Mã hóa Hình 2.1. Quy trình mã hóa CAVLC Các bước mã hóa: B1: Mã hóa Coeff_token B2: Mã hóa dấu của dãy 1 “ sign_flag” B3: Mã hóa cấp độ “ levels” B4: Mã hóa tổng số 0 “ TotalZeros” B5 Mã hóa trước khi chạy “ Run_ before” Bước 1: Mã hóa Coeff_token Gọi khối cần mã hóa là nC. Việc lựa chọn bảng để mã hóa nC phụ thuộc vào số lượng các hệ số khác không được mã hóa bên trái và bên trên khối đó “ tương ứng nA và nB” Một tham số nC được tính như sau. Nếu cả hai khối trên và trái nB và nA đều có sẵn (trong cùng một lát), nC = nA+nB +1 dịch phải 1 bit. Nếu chỉ có khối bên trên, nC = nB; nếu chỉ có khối bên trái, nC = nA; nếu không có cả 2 khối, nC = 0 Điều kiện nC Có sẵn khối bên trái và bên trên (nA + nB + 1)>>1 Chỉ có sẵn khối bên trái nA Chỉ có sẵn khối bên trên nB Không có sẵn khối lân cận 0 Độ lớn của các hệ số khác không có xu hướng lớn hơn khi bắt đầu mảng zigzac, gần hệ số đầu tiên và nhỏ hơn về phía tần số cao hơn. Ngoài ra, giá trị tuyệt đối của các hệ số khác không cuối cùng thường bằng 1. Tối đa ba hệ số -1 hoặc +1 cuối cùng được gọi là hệ số theo sau (T1), trong khi các hệ số khác không còn lại là level. Biểu tượng CoeffToken (mã thông báo hệ số) đại diện cho cả tổng số hệ số khác không (TotalCoeff) và số lượng hệ số theo sau (NumT1). và số lượng giá trị ±1 (TrailingOnes), TrailingOnes có thể là bất cứ giá trị nào từ 0 đến 3. Sử đụng bảng 1. Ví dụ với khối sau : Khối 4x4 Quét zigzag ->[ 0, 3, 0, 1, -1, -1,0, 1, 0, 0, 0, 0, 0, 0, 0, 0] Giả sử khối nC là không có sẵn khối lân cận -> nC=0 Tối đa 3 hệ số +-1 cuối cùng được gọi là hệ số theo sau -> T1s =3 Các hệ số còn lại là levels -> levels = [ 1 , 3 ] CoeffToken: các hệ số khác 0 -> [ 3,1,-1,-1,1] TotalCoeff: tổng hệ số khác 0 -> TotalCoeff = 5 Sử dụng bảng 1 - > 0000100 VLC bảng cho mã thông báo hệ số ( Coeff_Token) Tổng hệ số khác 0 T1s 0 <= nC < 2 2 <= nC <4 4 <= nC < 6 nC >= 8 ( TotalCoeff) 0 0 1 11 1111 0000 11 0 1 0001 01 0010 11 0011 11 0000 00 1 1 01 10 1110 0000 01 0 2 0000 0111 0001 11 0010 11 0001 00 1 2 0001 00 0011 1 0111 1 0001 10 2 2 001 011 1101 0001 10 0 3 0000 0011 1 0000 111 0010 00 0010 00 1 3 0000 0110 0010 10 0110 0 0010 01 2 3 0000 101 0010 01 0111 0 0010 10 3 3 0001 1 0101 1100 0010 11 0 4 0000 0001 11 0000 0111 0001 1111 0011 00 1 4 0000 0011 0 0001 10 0101 0 0011 01 2 4 0000 0101 0001 01 0101 1 0011 10 3 4 0000 11 0100 1011 0011 11 0 5 0000 0000 111 0000 0100 0001 011 0100 00 1 5 0000 0001 10 0000 1100 0100 0 0100 01 2 5 0000 0010 1 0000 101 0100 1 0100 10 3 5 0000 100 0011 0 1010 0100 11 0 6 0000 0000 0111 1 0000 0011 1 0001 0001 0101 00 1 6 0000 0000 110 0000 0110 0011 10 0101 01 2 6 0000 0001 01 0000 0101 0011 01 0101 10 3 6 0000 0100 0010 00 1001 0101 11 Bảng 1: VLC bảng cho mã thông báo hệ số Bước 2: Mã hóa dấu Sign_Flag Các T1 được mã hóa theo thứ tự ngược lại với các bit dấu của chúng ('0' cho dương và '1' cho âm). → [ 0, 3, 0, 1, -1, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] trainlingOne = [1 ,-1,-1,1] nhưng chỉ có tối 3 hệ số được sử dụng được mã hóa ngược lại T1 sig4 = 1 ->0 T1 sig3 = -1 ->1 T1 sig2 =-1 ->1 -> 011 Bước 3: Levels Các mức được mã hóa theo thứ tự ngược lại với các VLC bao gồm tiền tố và hậu tố có thể có. Tiền tố được tạo thành từ một chuỗi không hoặc nhiều hơn các bit '0', theo sau là một bit dừng '1'. Độ dài của hậu tố (SuffixLength) nằm trong khoảng từ 0 đến 6 trong trường hợp bình thường. Nếu độ dài hậu tố > 0, bit cuối cùng của hậu tố lưu trữ dấu hiệu của mức. Bảng 2 cho thấy trích xuất của bảy bảng VLC được sử dụng cho mã hóa các mức trong cấu hình cơ sở H.264 [11], mỗi bảng tương ứng với một giá trị khác nhau của độ dài hậu tố. Bảng Lev-VLCT [0] được chọn cho độ dài hậu tố = 0, bảng Lev-VLCT [1] cho độ dài hậu tố = 1, v.v. Lev-VLCT [0] có cấu trúc riêng trong khi các bảng VLC còn lại có chung cấu trúc. Trong mọi trường hợp, khi độ lớn của mức quá lớn, giá trị của nó được lưu trữ hoàn toàn trong hậu tố, có độ dài được đặt thành 12. Vì bit cuối cùng đại diện cho dấu hiệu, độ lớn tối đa mà CAVLC có thể mã hóa là 211 = 2048. Thuật toán 1 : chỉ ra cách các mức được mã hóa. Việc lựa chọn mỗi bảng VLC là thích ứng với ngữ cảnh, vì nó phụ thuộc vào độ lớn của mức được mã hóa trước đó. Thuật toán 1: thuật toán xác định các cấp độ (levels) mã hóa Level-VLC0 Cấp độ 0 1 2 3 ... 13 14-29 >=30 Mã bit stream 1 01 001 0001 ... 00000000000001 000000000000001xxxs 0000000000000001xxxxxxxxxxxxs Hệ số ( Coeffcient) 1 -1 2 -2 ... 7 +- 8 to +- 15 >= +-16 Level-VLC1 Cấp độ 0-1 2-3 Mã bit stream 1s 01s Hệ số ( Coeffcient) +-1 +-2 4-5 ... 28-29 >=30 001s ... 000000000000001s 00000000000000001xxxxxxxxxxxxs +-3 ... +-15 >= +-16 Level-VLC1 Cấp độ 0-3 4-7 8-11 ... 56-69 >=70 Mã bit stream 1xs 01xs 001xs ... 000000000000001xs 00000000000000001xxxxxxxxxxxxs Hệ số ( Coeffcient) +-1 đến +2 +-3 dến +-4 +-5 đến +-6 ... +-29 đến +- 30 >= +-31 Bảng 2 : Level-VCL Hệ số của level = +1 sử dụng bảng Level_VLC0 -> 1 Hệ số của level = +3 sử dụng bảng Level_VLC1 -> 001x với x= -> 0010 Bước 4: Mã hóa tổng số 0 “ TotalZeros” TotalZeros: tổng các số 0 trước số khác 0 cuối cùng . sử dụng bảng 3 → [ 0, 3, 0, 1, -1, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] TotalZeros = 3 ->111 VLC bảng cho Tổng số 0 Tổng số 0 (TotalZeros) 3 4 5 6 0 1 7 2 8 10 9 11 Bảng 3 bảng cho TotalZeros Mã 111 110 101 100 0101 0100 011 0011 0010 0001 0000 1 0000 0 Bước 5: Mã hóa runs (mã hóa các hệ số khác 0 trước hệ số khác 0 cuối) Mã hóa mỗi lần chạy của số 0: Run_before: số lượng số 0 trước mỗi hệ số khác 0.ZeroLeft: số lượng số 0 bên trái còn lại, đây là 2 tham số quan trọng để mã hóa hệ số khác 0. Bảng cho mã hóa trước khi chạy ( run_before) Số số 0 đứng liền Số lượng số 0 còn lại bên trái ( ZeroLeft) trước(Run_before) 1 2 3 4 5 6 >6 0 1 1 11 11 11 11 111 1 0 01 10 10 10 000 110 2 00 01 01 011 001 101 3 00 001 010 011 100 4 000 001 010 011 5 000 101 010 6 100 001 7 0001 8 00001 9 000001 10 0000001 11 00000001 12 000000001 13 0000000001 14 00000000001 Bảng 4: Bảng cho run_before Index 7 ZerosLeft = 3 ; run_before =1 -> 10 Index 5 ZerosLeft = 2 ; run_before =0 -> 1 Index 4 ZerosLeft = 2 ; run_before =0 -> 1 Index 3 ZerosLeft = 2 ; run_before =1 -> 01 Index 1 ZerosLeft = 1 ; run_before =1 -> Không cần mã; hệ số cuối cùng -> Bitstream = 000010001110010111101101 4.2.2 CAVLC (Context-based Adaptive Variable Length Coding): mã hóa chiều dài thay đổi ứng ngữ cảnh. Đây là một dạng mã hóa entropy mà bảng từ mã (codeword table) áp dụng cho khối hiện tại cần mã hóa sẽ có chiều dài thay đổi dựa vào các phần tử dữ liệu đã được mã hóa trước đó (các khối lân cận đã được mã hóa). Đây là phương pháp được sử dụng để mã hóa phần dư, các khối 4x4 (và 2x2) gồm các hệ số lượng tử sau khi block được tái sắp xếp. Hình 4.17 dưới đây mô tả quy trình mã hóa CAVLC Lượng tử hóa Quét ZigZag nC Mã hóa Coff token Vòng lặp MB Mã hóa sign_flag Thống kê Mã hóa Cấp độ Bitstream Mã hóa tổng số 0 Mã hóa trước khi chạy Mã hóa Hình 2.1. Quy trình mã hóa CAVLC Các bước mã hóa: B1: Mã hóa Coeff_token B2: Mã hóa dấu của dãy 1 “ sign_flag” B3: Mã hóa cấp độ “ levels” B4: Mã hóa tổng số 0 “ TotalZeros” B5 Mã hóa trước khi chạy “ Run_ before” Mã hóa nhị phân số học ứng ngữ cảnh (CABAC) 4.3 CABAC (Context-based Adaptive Binary Arithmetic Coding): mã hóa nhị phân số học ứng ngữ cảnh. Giống như CAVLC, CABAC sẽ mã hóa phần dữ liệu hiện tại dựa trên phần dữ liệu trước đó đã được mã hóa trong các khối lân cận. CABAC đạt được tỉ lệ nén tốt dựa vào việc lựa chọn mô hình thích hợp cho mỗi dữ liệu cần mã hóa theo ngữ cảnh của nó và sự ước lượng hợp lý dựa trên các thống kê cục bộ và dung mã hóa số học (arithmetic coding) thay cho mã hóa chiều dài thay đổi (variable-length coding) như trong CAVLC. CABAC dung mã hóa số học có nghĩa là chỉ có 2 giá trị nhị phân 0 và 1 được mã hóa. Nếu một giá trị không phải là nhị phân (chẳng hạn các hệ số biến đổi, các vector chuyển động) thì sẽ được “nhị phân hóa” để chuyển thành dạng nhị phân trước khi dung mã hóa số học. Hình 3 dưới đây thể hiện quy trình của kỹ thuật mã hóa CABAC. Cập nhật mô hình hóa ngữ cảnh Phầ n tử cú phá p Chuyển đổi nhị phân Mô hình ngữ cảnh Tuyến mã hóa dữ liệu thường Mã hóa thông thường bin Các bit mã Bitstream Bin Tuyến mã hóa dữ liệu Bypass Các bước thực hiện : B1. Chuyển đổi nhị phân B2. Chọn mô hình ngữ cảnh B3. Mã hóa B4. Cập nhật xác suất “Các bước 2,3,4 lặp lại với mỗi bit (“bin”) của từ mã” Mã hóa Bypass bin Các bit mã Mã hóa số học nhị phân thích nghi Bước 1 : Chuyển đổi nhị phân: CABAC sử dụng Mã số học nhị phân có nghĩa là chỉ mã hóa các quyết định nhị phân (1 hoặc 0). Một ký hiệu không có giá trị nhị phân (ví dụ: hệ số biến đổi hoặc vectơ chuyển động) được "mã hóa" hoặc chuyển đổi thành mã nhị phân trước khi mã hóa số học. Quá trình này tương tự như quá trình chuyển đổi một ký hiệu dữ liệu thành một mã có độ dài thay đổi nhưng mã nhị phân được mã hóa thêm (bởi bộ mã số học) trước khi truyền. - |MVDx|<9 sử dụng bảng 3.1 - |MVDx|>= 9 sử dụng Exp-Golomb Bit đầu tiên của từ mã nhị phân là bin 1; bit thứ hai là bin 2,v.v MVDx ( Vector chuyển động khác biệt hướng x ) |MVDx| Nhị phân hóa 0 0 1 10 2 110 3 1110 4 11110 5 111110 6 1111110 7 11111110 8 111111110 Bảng 3.1 Mã hóa entropy Exp-Golomb Code_num Từ mã 0 1 1 010 2 011 3 00100 4 00101 5 00110 6 00111 7 0001000 8 00010001 … … Bảng 3.2 Ue Te Se Me Ánh xạ trực tiếp không dấu, code_nume = k. Được sử dụng cho loại macroblock, chỉ mục khung tham chiếu và các loại khác. Một phiên bản của bảng từ mã ExpGolomb trong đó các từ mã ngắn bị cắt bớt. Ánh xạ có dấu, được sử dụng cho sự khác biệt vectơ chuyển động, đồng bằng QP và những thứ khác. k được ánh xạ tới mã num như sau (Bảng 3.3) code num = 2|k| (k ≤ 0) code num = 2|k|− 1 (k > 0) Các ký hiệu được ánh xạ, tham số k được ánh xạ tới code_num theo một bảng quy định trong tiêu chuẩn. Bảng 3.4 liệt kê một phần nhỏ của bảng mẫu khối được mã hóa cho các macroblock dự đoán của Inter, cho biết khối 8 × 8 nào trong macroblock chứa các hệ số khác không. k 0 1 -1 2 -2 3 … Code_num 0 1 2 3 4 5 … Bảng 3.3 Bảng 3.5 mẫu khối được mã hóa (Dự đoán ) 0 (không có khối khác) 16 (khối DC màu khác không) 1 (trên cùng bên trái khối luma 8 × 8 khác 0) 2 (trên cùng bên phải khối luma 8 × 8 khác 0) 4 (phía dưới bên trái khối luma 8 × 8 khối khác 0) 8 (phía dưới bên phải khối luma 8 × 8 khác 0) 32 (khối màu DC và AC khác không) 3 (trên cùng bên trái và trên cùng bên phải khối luma 8 × 8 khác không) Code_nume 0 1 2 3 4 5 6 7 Mỗi ánh xạ này (ue, te, se và me) được thiết kế để tạo ra các từ mã ngắn cho các giá trị thường xuyên xuất hiện và các từ mã dài hơn cho các giá trị tham số ít phổ biến hơn. Ví dụ, loại inter macroblock P L0 16 × 16 (dự đoán phân vùng luma 16 × 16 từ ảnh trước) được gán mã num 0 vì nó xảy ra thường xuyên; loại macroblock P 8 × 8 (dự đoán phân vùng luma 8 × 8 từ ảnh trước) được gán mã num 3 vì nó ít xảy ra hơn; giá trị khác biệt vectơ chuyển động (MVD) thường xảy ra của 0 ánh xạ tới mã num 0 trong khi MVD = −3 ít phổ biến hơn ánh xạ tới mã num 6. Bước 2: Mô hình hóa ngữ cảnh: Thống kê cho thấy trong luồng dữ liệu đầu vào CABAC, dữ liệu thông thường chiếm tỷ lệ cao, có tính biến động theo đặc tính luồng video đầu vào. Mô hình hóa ngữ cảnh là một mô hình xác suất cho một hoặc nhiều bin ký hiệu nhị phân. Mô hình này có thể được chọn từ một loạt các mô hình có sẵn với xác suất của mô hình ngữ cảnh là thích ứng bằng giá trị của các bin được mã hóa trước đó. Các bin có bản phân phối tương tự thường chia sẻ cùng một mô hình ngữ cảnh. Mô hình ngữ cảnh lưu trữ xác suất của mỗi bin là “1” hoặc “0”. Khi quá trình mã hóa của một bin kết thúc, mô hình ngữ cảnh có thể chuyển từ bin này sang bin khác. Quá trình này được lặp lại cho mỗi bin. Các mô hình ngữ cảnh và lược đồ nhị phân cho từng phần tử cú pháp được xác định trong tiêu chuẩn. Có tổng cộng 267 mô hình ngữ cảnh riêng biệt, từ 0 đến 266 (tính đến tháng 9 năm 2002) cho các phần tử cú pháp khác nhau. Một số mô hình có cách sử dụng khác nhau tùy thuộc vào loại slice: ví dụ: các macroblock đã bỏ qua không được phép trong I-slice và do đó, các mô hình ngữ cảnh 0-2 được sử dụng để mã hóa các thùng mb_skip hoặc mb_type tùy thuộc vào việc lát cắt hiện tại có được mã hóa nội khung hay không. Vào đầu mỗi slice được mã hóa, các mô hình ngữ cảnh được khởi tạo tùy thuộc vào giá trị ban đầu của tham số lượng tử hóa QP (vì điều này có ảnh hưởng đáng kể đến xác suất xuất hiện của các ký hiệu dữ liệu khác nhau). Một trong 3 ngữ cảnh được chọn cho bin 1, dựa trên các giá trị MVD được mã hóa trước đó. Định mức L1 của hai giá trị được mã hóa trước đó, ek, được tính: ek = |MVDA| + |MVDB| trong đó A và B là các khối ngay bên trái và phía trên khối hiện tại (tương ứng). Mô hình ngữ cảnh bin Mô hình ngữ cảnh cho bin 1 1 0,1 hoặc 2 phụ thuộc vào ek 0 ? ek <3 Mô hình 0 2 3 3 ? ek <33 Mô hình 1 3 4 33 ? ek Mô hình 2 4 5 5 6 6 và lớn hơn 6 6 ek Nếu ek nhỏ, thì khả năng cao là MVD hiện tại sẽ có độ lớn nhỏ, Ngược lại, nếu ek lớn thì nhiều khả năng MVD hiện tại sẽ có độ lớn lớn. Các bin còn lại được mã hóa bằng cách sử dụng một trong 4 mô hình ngữ cảnh khác Bước 3 : Mã hóa số học - Mô hình ngữ cảnh đã chọn ở trên sẽ có hai ước tính xác suất: xác suất mà bin chứa “1” và xác suất để bin chứa “0” - Dựa vào hai ước tính này sẽ xác định được phạm vi phụ mà bộ mã số học sử dụng để mã hóa. Có hai cách để xử lý mã số học, chế độ thông thường và chế độ bypass. Bước 4: Cập nhật mô hình ngữ cảnh - Ví dụ: nếu mô hình ngữ cảnh của bin 1 đang là 2 và giá trị bin 1 = 0 thì tần suất của “0” sẽ tăng lên. - Có nghĩa là trong lần tiếp theo mô hình ngữ cảnh này sẽ có xác suất của “0” sẽ cao hơn - Khi tổng số lần xuất hiện của mô hình vượt quá giá trị ngưỡng, tần suất đếm cho “0” và “1” sẽ được thu nhỏ lại. Thông thường: CABAC đặt một phạm vi có giá trị ban đầu từ 0 đến 1 và chia nó thành hai khoảng con theo xác suất của bin mã hóa hiện tại. Sau đó, nó chọn một trong các khoảng con mà giá trị của bin thuộc về và chia nó cho hai khoảng con theo xác suất của bin tiếp theo. Sau nhiều lần chia và chọn, có thể thu được một phạm vi nhất định. Quá trình này sẽ được lặp lại cho đến khi nó đạt được một phạm vi nhất định. Cuối cùng, bất kỳ số thập phân nào trong phạm vi này có thể đại diện cho dòng bin đầu vào gần đúng. Bypass: Mã hóa bypass là một chế độ mã hóa của CABAC để giảm độ phức tạp của nó. Nó được sử dụng để mã hóa một ký hiệu có xác suất bằng nhau bằng cách giả định xác suất là 0,5 cho mỗi giá trị bin. Khi chế độ Bypass được chọn, quá trình lập mô hình của các bin đầu vào chỉ bị bỏ qua. Đối với mã hóa bypass, việc phân chia phạm vi có thể được thực hiện bằng một sự thay đổi, điều này sẽ giúp xử lý dễ dàng hơn so với cách đệ quy thông thường. Sau khi thực hiện xong quá trình mã hóa entropy, đầu ra của quá trình mã hóa thu được một video dạng bitstream. CHƯƠNG 2 Tổng quan về chuẩn H265 1. Lịch sử phát triển của chuẩn nén H.265/HEVC VCEG đã bắt đầu nghiên cứu về thế hệ tiếp theo của H.264 từ năm 2004, bằng cách phát triển ra một chuẩn nén video mới hoàn toàn, hoặc là phát triển tiếp từ H.264. Các kĩ thuật khác nhau để năng cao tiềm năng của chuẩn H.264 được khảo sát trong tháng 10 năm 2004. Tại cuộc họp tiếp theo của VCEG trong tháng 1 năm 2005, VCEG bắt đầu chỉ định một số tiêu chí kĩ thuật quan trọng cho NGVC (Next-gen Video Coding). Một cơ sở phần mềm là tiêu chí kỹ thuật cho NGVC đã được phát triển dựa trên mô hình chung của MPEG và VCEG cho H.264. Yêu cầu về chất lượng của NGVC được đề ra là giảm bitrate còn một nửa mà vẫn giữ nguyên chất lượng so với H.264, ở tất cả các hồ sơ, hoặc giảm 25% bitrate cùng độ phức tạp giảm 1 nửa, hoặc thậm chỉ giảm bitrate hơn nữa và tăng mức độ phức tạp trong khi mã hóa lên. Công nghệ của năm 2009 chưa đủ mạnh nên HEVC được định nghĩa như là phần mở rộng của H.264 chứ không phải là hướng phát triển mới hoàn toàn. MPEG đã bắt đầu nghiên cứu dự án tương tự vào năm 2007, lấy tên là HPVC (High Performance Video Coding), nhưng bitrate trung bình chỉ giảm 20% so với H264. Cuộc họp vào tháng 4 năm 2010 đã tiến hành lập ra nhóm JCT-VC và các kĩ thuật mã hóa được bàn thảo, tổng cộng có hơn 27 đề xuất được gửi. Các đánh giá cho thấy rằng H.265 có thế đạt tỉ suất nén cao gấp đôi so với H.264. Cũng tại cuộc họp, 2 dự án NGVC và HPVC được hợp nhất lại, lấy tên là HEVC, chính thức được gọi tắt là H.265. Ngay sau đó, JCT-VC đã kết hợp những tính năng tốt nhất của 2 dự án trên vào một codebase duy nhất cho HEVC [39]. H.265/HEVC được thiết kế để cải thiện đáng kể hiệu quả mã hóa so với H.264/MPEG-4 AVC HP, tức là giảm một nửa yêu cầu bitrate với chất lượng hình ảnh tương đương, với chi phí tăng độ phức tạp tính toán. HEVC được thiết kế với mục tiêu cho phép nội dung video có tỷ lệ nén dữ liệu lên tới 1000: 1. Tùy thuộc vào yêu cầu ứng dụng, bộ mã hóa HEVC có thể đánh đổi độ phức tạp tính toán, tốc độ nén, độ mạnh của lỗi và thời gian trễ mã hóa. Hai trong số các tính năng chính trong đó HEVC được cải thiện so với H.264 / MPEG-4 AVC là hỗ trợ cho video có độ phân giải cao hơn và phương pháp xử lý song song được cải thiện. Ngày nay chuẩn H265đang dần được sử dụng thay cho chuẩn H264/AVC như một giải pháp hiệu quả. 2. Kỹ thuật nén vide H265/HEVC Hình 4.19 dưới đây thể hiện quy trình mã hóa và giải mã của chuẩn H265/HEVC. Ảnh hiện tại Video gốc ∑ Ảnh trước đó Dự đoán ngoại suy Bộ nhớ đệm lưu ảnh tham khảo Ảnh được dự đoán Dự đoán nội suy Biến đổi InDCT Lượng tử hóa Mã hóa Entropy Giải lượng tử hóa SA O Lọc khối ∑ Biến đổi InDCT ngược NAL Hình 4.19. Quy trình mã hóa và giải mã video theo chuẩn H.265/HEVC Từ hình 4.19 có thể thấy được quy trình mã hóa và giải mã theo chuẩn H.265/HEVC theo các bước sau: - Bước 1: Video gốc được chia thành các khung ảnh, lấy khung đầu tiên để mã hóa. - Bước 2: Khung được chọn đi qua giai đoạn xử lý đồng thời bởi hai kỹ thuật dự đoán ngoại suy và dự đoán nội suy. Qúa trình này sẽ được trình bày trong phần tiếp theo của giáo trình. - Bước 3: Biến đổi InDCT và lượng tử hóa (Quá trình này giống với H264). - Bước 4: Mã hóa Entropy. Bước 5: Bộ lọc vòng trong. 3. Cấu trúc H.265/HEVC Cấu trúc của H265/HEVC bao gồm các thành phần như sau: Dự đoán nội suy Chế độ dự đoán nội khung khai thác mối tương quan về không gian của các pixels. Các pixel trong khối hiên tại được dự đoán bằng cách sử dụng pixel của các khối bên cạnh. Quá trình lựa chọn chế độ dự đoán nội khung phải làm sao làm cho tỉ lệ biến dạng (rate-distortion) nhỏ nhất, việc này làm được nhờ mô hình tối ưu Lagrangian rate-distortion. Trong H.264/AVC, có tất cả 9 chế độ dự đoán nội khung cho các khối 4x4, còn H.265/HEVC đã điều chỉnh, mở rộng chế độ dự đoán ra thành 35 chế độ. Việc tăng chế độ này giúp việc dự đoán chính xác hơn và giảm sự thừa thãi dữ liệu về mặt không gian. Tất cả các chế độ dự đoán nội khung HEVC sử dụng các khối tham chiếu từ các khối được tái tạo liền kề. Vì việc tái tạo được thực hiện ở mức độ chi tiết của khối biến đổi, nên dự đoán nội khung cũng được vận hành ở kích thước khối biến đổi đã chọn trong khoảng từ 4x4 đến 32x32. HEVC cho phép sử dụng tất cả các chế độ dự đoán đã xác định cho tất cả các kích thước khối. Do số lượng rất lớn kích thước khối khác nhau - chế độ dự đoán kết hợp tất cả các chế độ dự đoán đã được thiết kế theo cách cho phép dễ dàng triển khai thuật toán cho các kích thước khối tùy ý và hướng dự đoán. Tuy nhiên, những tính toán trong dự đoán nội khung trong H.265/HEVC phức tạp hơn nhiều. Có 3 phương pháp dự đoán nội suy chính trong HEVC bao gồm: Dự đoán nội suy định hướng hay còn gọi là phương pháp dự đoán góc (angular prediction) hoặc Dự đoán phẳng (DC prediction), dự đoán Planar. o Chế độ dự đoán góc: Chế độ dự đoán góc trong HEVC được thiết kế để mô hình hóa hiệu quả các cấu trúc hướng khác nhau thường xuất hiện trong nội dung video và hình ảnh. Tập hợp các hướng dự đoán có sẵn đã được chọn để mang lại sự cân bằng tốt giữa độ phức tạp của mã hóa và hiệu quả mã hóa cho tài liệu video điển hình. Bản thân quá trình dự đoán mẫu được thiết kế để có yêu cầu tính toán thấp và nhất quán trên các kích thước khối và hướng dự đoán khác nhau. Điều này được nhận thấy là đặc biệt quan trọng vì số lượng kích thước khối và hướng dự đoán được hỗ trợ bởi mã nội khung HEVC vượt xa so với các chế độ mã hóa trước đó, chẳng hạn như H.264 / AVC. Trong HEVC có bốn kích thước khối dự đoán nội khung hiệu quả, từ khối 4x4 đến 32x32, mỗi khối hỗ trợ 33 hướng dự đoán riêng biệt, với độ chính xác là 1/32 mẫu. Do đó, một bộ giải mã phải hỗ trợ 132 tổ hợp kích thước khối và hướng dự đoán. o Chế độ dự đoán DC: Trong trường hợp dự đoán DC, các giá trị mẫu dự đoán được điền với một giá trị không đổi đại diện cho giá trị trung bình của các mẫu tham chiếu ngay bên trái và phía trên của khối được dự đoán. Các khối độ sáng dự đoán DC có kích thước 16x16 trở xuống trải qua quá trình lọc ánh sáng để làm mềm các cạnh bên trái và bên trên của khối đang được dự đoán. o Chế độ dự đoán Planar: Trong khi dự đoán góc cung cấp các giá trị gần đúng tốt cho các cấu trúc có các cạnh đáng kể, nó có thể tạo ra một số đường viền có thể nhìn thấy được trong các vùng ảnh mịn. Tương tự, một số tắc nghẽn thường có thể được quan sát thấy trong các khu vực hình ảnh mịn khi áp dụng dự đoán DC ở tốc độ bit thấp hoặc trung bình. Dự đoán Planar của HEVC được thiết kế để khắc phục những vấn đề này bằng cách có khả năng tạo bề mặt dự đoán mà không có sự gián đoạn trên ranh giới khối, làm mịn các khối cứng nhắc quan sát được khi chế độ dự đoán DC được áp dụng hoặc video có tốc độ bit thấp hơn. Phương pháp dự đoán planar là để dự đoán ra một bề mặt mà không làm ngắt quãng các ranh giới. Để lựa chọn chế độ dự đoán phù hợp và hiệu quả từ 35 chế độ dự đoán, HEVC sử dụng mô hình tối ưu hóa. Các công thức tính toán được tính theo công thức dưới đây: J(s,c,IMODE|QP,⅄MODE) = D(s,c,IMODE|QP) + ⅄MODE . R(s,c,IMODE|QP); Trong đó QP là tham số lượng tử hóa và λMODE là hệ số nhân Lagrange; s và c đại diện cho khối ban đầu và khối xây dựng lại tương ứng; R là tốc độ bit và D là tỷ lệ biến dạng. Dự đoán ngoại suy (liên khung) Dự đoán ngoại suy là việc dự đoán phụ thuộc vào các yếu tố như là giá trị mẫu hoặc vector chuyển động (độ dịch chuyển giữa 2 CU) của các bức ảnh khác. Các khung hình trước đó đã được giải mã sẽ được lưu lại và sử dụng cho việc dự đoán ngoại suy. Bởi vì một khối pixel trong một khung ảnh thường rất giống với một khối pixel trong cùng một vị trí của khung ảnh khác. Ví dụ một vật chuyển động trong một video, hình ảnh của nó là như nhau nhưng nó lại ở những vị trí mới khi di chuyển từ ảnh này sang ảnh khác vì vậy bộ giải mã có thể dự đoán chính xác vật chuyển động nếu nó có hình ảnh trước đó và một vector chuyển động. Do đó dự đoán ngoại suy là một khối quá trình lựa chọn các khối ứng viên phù hợp nhất và vector chuyển động liên quan của nó. Dự đoán ngoại suy trong H265 về cơ bản giống H264 gồm quá trình dự đoán chuyển động và bù chuyển động nhưng nó được cải tiến mới hai kỹ thuật đó là: Kỹ thuật dự đoán vector chuyển động nâng cao AMVP (Advance Motion Vector Prediction) và Kỹ thuật mới thứ hai là hợp nhất khối dự đoán ngoại suy, trong đó khối ứng viên thay thế hoàn toàn khối hiện thời. Chỉ mục hợp nhất Hợp nhất khối dự đoán liên ảnh Dự đoán vector chuyển động nâng cao MVP Index 0, 1 MVD 0, 1 Refldx: Δ𝑡0, Δ𝑡1 Nội suy mẫu phần số Dự đoán bù trừ chuyển động 0 Dự đoán bù trừ chuyển động 1 Dự đoán mẫu có trọng số Dự đoán bù chuyển động cuối cùng Dữ liệu chuyển động MV: (Δ𝑥0 , Δ𝑦0 )(Δ𝑥1 , Δ𝑦1 ) Refldx: Δ𝑡0 , Δ𝑡1 Hình 4.20. Quá trình dự đoán liên khung o Dự đoán vector chuyển động tiên tiến AMVP là quá trình cải tiến về việc tạo ra vector chuyển động giúp cho việc dự đoán vector chuyển động nhanh và chính xác hơn. Dự đoán vector chuyển động được sử dụng để có được dự đoán vector bù chuyển động (MCP – Motion Compensated Prediction). Bởi vì một đối tượng chuyển động thì đối tượng này thường lớn hơn một khối nên đối tượng đang chuyển động có thẻ coi là một nhóm các khối lân cận đang chuyển động. Vì vậy vector chuyển động của khối hiện tại thường gần giống với khối liền kề của nó hay vector dự đoán chuyển động MVP (Motion Vector Prediction) thường được tạo ra từ các khối liền kề trong không gian. Dự đoán vector chuyển động khai thác mối tương quan không gian và thời gian về vector chuyển động của các PU lân cận. AMVP tạo ra danh sách vector ứng viên bao gồm: + Ứng viên bên trái A1, ứng viên phía dưới bên trái A0 + Ứng viên bên trên B1, ứng viên bên phải B0 và ứng viên bên trái B2 + Ứng viên tạm thời C0 và C1 là vector chuyển động của khối cùng vị trí với khối hiện tại nhưng của ảnh trước. Những ứng viên này nếu được mã hóa là dự đoán nội suy thì sẽ bị loại. Sau khi loại bỏ danh sách theo thứ tự khả năng chính xác danh sách ứng viên chính thức có hai vector chuyển động là một hoặc hai ứng viên không gian, một trong những ứng viên thời gian. Nếu hai ứng viên không gian giống nhau hoặc không có sẵn sẽ bị loại bỏ. o Hợp nhất khối dự đoán ngoại suy là kỹ thuật tập hợp tất cả các khối lân cận có cùng thông tin chuyển động giúp cho xử lý giải mã nhanh hơn và hình ảnh sẽ mượt mà hơn ở ranh giới khối. Quá trình sáp nhập có nét tương đồng với AMVP. Bước đầu tiên là lựa chọn danh sách ứng viên phù hợp nhất sau đó truyền những chỉ số xác định ứng viên tới bộ giải mã. Thành phần ứng viên hợp nhất phải chứa tất cả các dữ liệu chuyển động có tất cả các thông tin dự đoán trong khi danh sách vector ứng viên chuyển động chỉ có các vector chuyển động. Bù chuyển động [41] Bù chuyển động là giai đoạn quan trọng trong việc nén video để giảm dư thừa về thời gian dựa vào mối tương quan giữa các khung hình liền nhau. Bù chuyển động bao gồm xây dựng khung dự đoán video hiện tại từ một hoặc nhiều khung được mã hóa trước đó được gọi là khung tham chiếu bằng cách bù chênh lệch giữa khung hiện tại và khung tham chiếu. Thông tin liên quan đến vector chuyển động (mô tả cách thức chuyển động được bù) và phần dư từ các khung hình trước đó được mã hóa và gửi đến bộ giải mã. Phương pháp bù chuyển động được áp dụng trong H265 là kỹ thuật so sánh khối dùng thuật toán BMA (Block Matching Algorithm) tương tự như H264. Do H265 sử dụng các khối CTU để nén nên việc tìm kiếm toàn bộ này sẽ tốn rất nhiều thời gian để tính toán nên một số thuật toán dự đoán nhanh được sinh ra như DS (tìm kiếm kim cương), TSS (tìm kiếm ba bước),... Những thuật toán này làm giảm độ phức tạp tính toán nhưng đã được chứng minh làm giảm tính hiệu quả. Two - Stage Coding [41] Trong H.265, đây là một cải tiến đặc biệt, khác hẳn so với H.264. Tại mỗi khung ảnh được đưa vào nén, H.265 sẽ thực hiện “two-stage coding”. Khung sau khi được dự đoán sẽ đi vào giai đoạn tổng hợp để tính phần dư. Phần dư này được tính bằng hiệu của khung hiện tại và khung dự đoán. Nhằm giảm thiểu sai số của quá trình biến đổi InDCT và lượng tử hóa thì phần dư này được chia thành hai phần: + Một phần đi qua biến đổi InDCT và lượng tử hóa. + Một phần để tổng hợp chính nó và sau quá trình giải lượng tử và InDCT ngược. Biến đổi InDCT [41] Biến đổi InDCT là kỹ thuật biến đổi nguyên được thực hiện trên các khối 4x4 sau khi được bù chuyển động hoặc dự đoán nội suy. Về cơ bản kỹ thuật biến đổi InDCT giống với biến đổi DCT, chỉ bổ sung một số đặc điểm: Phép biến đổi InDCT thực hiện biến đổi nguyên xấp xỉ với phép biến đổi DCT, tất cả các bước thực hiện với số nguyên. Các bước tính toán được tích hợp trong bộ lượng tử hóa nhằm giảm số lượng bước tính toán. Tất cả các biến đổi và lượng tử chỉ dùng các thuật toán cộng và thuật toán dịch bit trên các giá trị nguyên 16 bit và chỉ thực hiện trên từng hệ số chứ không thực hiện phép chia nên đảm bảo không mất đị độ chính xác. Trong miền điểm ảnh pixel, các giá trị dư thừa thường không tập trung năng lượng một cách có hệ thống. Do vậy để nâng cao hiệu quả của mã hóa thông tin dư thừa, biến đổi cosin rời rạc DCT đã được thông qua. Năng lượng tập trung tại những thành phần tần số thấp, các thông tin tại miền tần số cao sẽ có thể được loại bỏ (thông qua quá trình lượng tử hóa) do vậy thông tin mã hóa sẽ được giảm bớt. Mắt người thường không nhạy cảm với thành phần tần số cao nên việc loại bỏ một vài thông tin tại tần số cao không hoặc rất ít làm ảnh hưởng tới cảm nhận về chất lượng của hình ảnh. Lượng tử hóa Bất kỳ dữ liệu dư còn lại sau khi dự đoán được chuyển đổi bằng phép biến đổi DCT hoặc phép biển đổi sin rời rạc (DST). Một hoặc nhiều khối biến đổi kích thước 32×32, 16×16, 8×8 và 4×4 được áp dụng cho dữ liệu còn lại trong mỗi CU. Sử dụng DCT/DST cho các khung mã hóa HEVC để loại bỏ sự lan truyền lỗi trong khung. Trong HEVC, trước khi mã hóa entropy trên các hệ số biến đổi được lượng tử hóa thì các hệ số biến đổi phải được quét và sắp xếp lại thành vector 1 chiều. Có 3 phương thức quét: chéo, ngang, dọc. Mã hóa Entropy [43] Một số thuật toán mã hóa Entropy được sử dụng trong H265 là VLC, CABAC, CAVLC. So với CABAC, CAVLC cung cấp nhằm giảm chi phí thực hiện với mức giá hiệu quả nén thấp hơn. CABAC ở dạng cải tiến, cả về tốc độ và hiệu suất nén, đã trở thành phương pháp mã hóa entropy duy nhất của tiêu chuẩn HEVC. Cả CAVLC và CABAC đều đã được trình bày ở phần mã hóa entropy của H.264/AVC. Bộ lọc vòng trong [41] Bộ lọc vòng trong là một trong những thành phần quan trọng nhất của H265. Hình dưới đây mô tả quy trình của bộ lọc vòng trong. Chế độ dự đoán nội khung Chế độ dự đoán liên khung Thông tin SAO Dư thừa Mã hóa entropy Dự đoán nội khung Tái tạo lại Chuyển đổi ngược Lượng tử hóa ngược Bù trừ chuyển động Lọc khối Giải mã ảnh đệm SAO Hình 4. 21. Quy trình của bộ lọc vòng trong Dựa trên hình 4.21 có thể thấy rằng có hai bộ lọc chính tại vòng trong bao gồm: Deblocking Filter và độ lệch tương thích mẫu SAO (Sample Adaptive Offset). Bộ lọc deblocking: Trong H.265/HEVC, bộ lọc deblocking được sử dụng trên ranh giới giữa các đơn vị mã hóa (CU), các đơn vị dự đoán (PU) và các đơn vị biến đổi (TU). Việc quyết định liệu khối có được lọc hay không dựa vào chế độ dự đoán, các khối liền kề, các vector chuyển động, cụ thể hơn một biến gọi là Bs (Boundary strength). Bs = 2 nếu tồn tại ít nhất một trong các khối liền kề trong ảnh. Bs = 1 nếu: o Một trong các khối liền kề có hệ số biến đổi khác không o Các khối liền kề có khác biệt tuyệt đối về vectơ chuyển động đó là lớn hơn một mẫu sáng số nguyên o Các khối liền kề có các vectơ chuyển động liên quan đến các hình ảnh khác nhau, hoặc số lượng vector giữa các khối không giống nhau. Nếu không, Bs = 0. Trong H.264, Bs có thể có 5 mức {0, 1, 2, 3, 4} trong nhiều hoàn cảnh, trong khi H.265/HEVC chỉ hỗ trợ 3 mức Bs. Ngoài ra, vì kích thước khối lớn hơn, có nghĩa là số khối nhỏ hơn, sự phức tạp của bộ lọc deblocking filter trong H.265/HEVC cũng giảm đi so với H.264. Bộ lọc giảm nhiễu SAO được thiết kế để giảm nhiễu rung giữa các hình ảnh trước khi ảnh được lưu vào bộ đệm. Đồng thời cho phép tái tạo tốt hơn các biên độ tín hiệu ban đầu bằng cách áp dụng các độ lệch được lưu trữ trong bảng tra cứu dòng bit. Bên cạnh đó, SAO chứa quá trình giải mã bởi điều kiện thêm một giá trị bù vào mỗi mẫu sau khi áp dụng lọc khối, dựa trên các giá trị trong bảng look-up truyền qua các bộ mã hóa. SAO áp dụng ở 1 trong 2 chế độ: Bù cạnh và bù băng tần. Trong đó bù cạnh so sánh giá trị của 1 mẫu với 2 trong số 8 lân cận. Còn bù băng tần: Áp dụng 1 độ lệch dựa trên biên độ của 1 mẫu đơn. CHƯƠNG 3 So sánh H.264 với H.265 1. Những điểm tối ưu của HEVC so với H.264/AVC 1.1 Sự tối ưu trên lý thuyết H.265/HEVC hứa hẹn đánh dấu một bước ngoặt mới 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.265/HEVC có thể đem lại nhiều hiệu quả hơn so với chuẩn H.264/AVC hiện đang được sử dụng rộng rãi. Như đã nói ở trên, mục tiêu của HEVC là giảm 1 nửa bitrate so với AVC mà vẫn đạt chất lượng tương đương. Tùy thuộc vào yêu cầu của ứng dụng, HEVC có thể tăng tỉ số nén, độ phức tạp trong khi encode trong khi tỉ lệ lỗi và độ trễ giảm. HEVC là mục tiêu của các HDTV thế hệ tiếp theo, các máy ảnh và máy quay phim, với độ phân giải hỗ trợ từ 320x240 QVGA đến 8K UHD 7680 × 4320, cũng như cải thiện chất lượng hình ảnh, giảm SNR, tăng gam màu và độ tương phản động. HEVC thay thế macroblocks với một hệ thống linh hoạt linh hoạt dựa trên các đơn vị mã hóa (CU - Coding Unit), biến macroblock hình thành các vùng hình chữ nhật. Mỗi CU chứa đơn vị dự đoán thay đổi kích thước bằng các phép toán nôi suy trong khung hình hoặc phép toán nỗi suy giữa các khung hình, trong khi đó các đơn vị chuyển đổi chứa các hệ số biến đổi không gian và lượng tử hóa. Bạn có thấy sự khác biệt nào trong bức tranh này: Những điểm khác nhau chính giữa H.265/HEVC và H.264/AVC được thể hiện cụ thể như bảng dưới đây: H.264/AVC HEVC Macroblock 16x16 (Large) Coding Unit Partition size Partitioning Sub-block down to 4x4 Transform Integer DCT 8x8, 4x4 Intra prediction Up to 9 predictors 8x8 to 64x64 Prediction Unit Quadtree down to 4x4 Square, symmetric and asymmetric (only square for intra) ransform Unit square IDCT from 32x32 to 4x4 + DST Luma Intra 4x4 Up to 9 predictors Cụ thể là : 1.2 Sự khác biệt qua mô phỏng với hình ảnh cụ thể Chúng ta sẽ đưa ra 4 bức ảnh với các thông số khác nhau và mô phỏng bởi 2 chuẩn HEVC và H.264/AVC để thấy sự khác biệt. 4 hình ảnh được sử dụng đó là : Ảnh 1: Hoạt động ở bờ biển, nhiều hoạt động, sự dư thừa không gian bình thường. Ảnh 2: Anh kĩ sư, sự dư thừa không gian cao, hoạt động thấp . Ảnh 3: Ảnh từ điện thoại, sự dư thừa thấp, hoạt động cao. Ảnh 4: Chương trình thời sự, hoạt động thấp, sự dư thừa cao. Qua mô phỏng ta thu được kết quả như sau: 1.2.1 Trong H.264/AVC Tỷ lệ tín hiệu trên nhiễu Bức ảnh có tỉ lệ tốt nhất để có chất lượng cao là ảnh 4 chương trình thời sự, vì nó có mức hoạt động thấp và sự dư thừa cao. Và bức ảnh đem lại chất lượng nén kém nhất là ảnh từ điện thoại vì nó có mức hoạt động cao của cả đối tượng và của cả hình nền. Tốc độ bít Ta thấy rằng ngoại trừ ảnh 4 thì các bức ảnh còn lại có tốc độ bít gần như giống nhau bởi vì các frames ở các bức ảnh là tương tự nhau. Giới hạn độ tăng ích Khi thực hiện kiểm tra với tất cả các bức ảnh ở trên ta thấy rằng không có bức hình nào có giới hạn tăng ích cao cả. Có thể nguyên nhân chính là vị tính hoạt động trong các bức hình trên là không đủ cao ở mức Sr 32 để hiển thị tất cả các hoạt động. 1.2.2 Trong HEVC Tỷ lệ tín hiệu trên nhiễu Ta thấy rằng kết quả là tương tự như trong H.264/AVC, hiệu quả nén tốt nhất thuộc về hình ảnh có mức hoạt động thấp nhất và độ dư thừa cao nhất. Tốc độ bít Ở đây chúng ta thấy một sự biến đổi rất lớn về tốc độ bít theo thời gian khác hẳn với H.264/AVC. Vì HEVC được mã hóa rất phức tạp nên ta không thể thấy được bất kì mối liên hệ nào giữa độ dư thừa hay mức hoạt động so với tốc độ bít cả. Intra-period gain Ở đây ta thấy rằng khi thêm các intra-reference frames thì làm giảm đáng kể chất lượng nén của hình ảnh với cùng một tỷ lệ bit, bởi vì intra-frames cung cấp mức nén thấp hơn so với khung hình trong ảnh 2(anh kĩ sư-foreman) và mã hóa của chúng ta cần sử dụng các yếu tố lượng tử cao hơn. Nó làm giảm đáng kể trở kháng truyền tải trong lỗi kênh truyền, nhưng trong mô phỏng này đã được thực hiện với việc sử dụng kênh truyền không có lỗi. Giới hạn độ tăng ích Cũng như H.264/AVC khi thực hiện kiểm tra với tất cả các bức ảnh ở trên ta thấy rằng không có bức hình nào có giới hạn tăng ích cao cả. Có thể nguyên nhân chính là vị tính hoạt động trong các bức hình trên là không đủ cao ở mức Sr 32 để hiển thị tất cả các hoạt động. Như ở trên thì thấy rằng không có sự khác biệt nào về giới hạn tăng ích của các bức ảnh trên ở các chế độ khác nhau. Nhưng khi thời gian tăng lên ở một mức tương đối lơn ( > 400s) thì sự khác biệt bắt đầu thấy rõ rệt. Đây chỉ là một ý tưởng kiểm tra dựa trên những bức ảnh hiện có. Không đề xuất thành lý thuyết cho các bức ảnh khác. 1.2.3 So sánh HEVC và H.264/AVC Chúng ta có thể thấy rằng HEVC có khả năng mã hóa là tốt hơn rất nhiều so với tiêu chuẩn h.264. Ta thấy rằng sự khác biệt vào khoảng 2 dB. Điều này có nghĩa rằng nó cung cấp chất lượng tốt hơn gần như 50% so với h.264. Tuy nhiên thời gian mã hóa cho HEVC là khủng khiếp so với h.264. Đôi khi h.264 là nhanh hơn khoảng hai lần. Ở đây chúng ta nhận thấy rằng độ tăng ích – gain của H.264 chỉ thấp hơn một chút, nhưng sự khác biệt về thời gian thực sự rất lớn, HEVC mất quá nhiểu thời gian. Về nguyên nhân chúng ta có thể thấy rằng các bức ảnh chúng ta sử dụng có mức hoạt động rất lớn cho nên chúng cần một sự tính toán rất nhiều từ HEVC. Và vì HEVC quá phức tạp, có rất nhiều tính toán cần phải được thực hiện, và vì nó có rất nhiều lựa chọn cần xem xét hơn h.264. Trong ví dụ này chúng ta có thể thấy rằng đối với tốc độ bit rất thấp HEVC và h.264 cung cấp gần như cùng một chất lượng, nhưng thời gian của HEVC là nhanh hơn rất nhiều. Kể từ 400kbit / s HEVC tăng về 1,5-2dB của PSNR so với H.264 Trong ví dụ này ta lại thấy rằng HEVC đòi hỏi một thời gian xử lý cao hơn rất nhiều so với H.264/AVC. Tuy nhiên ở hình bên trái ta thấy rằng HEVC vẫn cho một mức PSNR cao hơn H.264 khi tốc độ bit tăng. CHƯƠNG 4 Giấu tin trong video chuẩn H.2645/H.265 1. Giới thiệu chung Video là sự kết hợp của các khung hình và âm thanh, do đó việc giấu tin trong video thực chất là sự kết hợp của giấu tin trong các khung hình (giống như giấu tin trong ảnh) và trong âm thanh. Chương này sẽ trình bày chi tiết một số phương pháp giấu tin trên khung hình của video. Tiêu chuẩn HEVC là một tiêu chuẩn mã hóa video thế hệ tiếp theo được phát triển bởi Itu-T Video Coding Experts Group và Moving Picture Experts Group . Nó nhằm mục đích cải thiện đáng kể hiệu quả mã hóa trên cơ sở H.264 / AVC, đặc biệt là để xử lý video độ nét cao. Hiệu suất nén hiệu quả và khả năng xử lý của tiêu chuẩn HEVC có vai trò quan trọng trong các ứng dụng video độ nét cao. Thuật toán ẩn thông tin cho HEVC có giá trị lý thuyết và dấu hiệu thực tế. Tuy nhiên, dựa trên HEVC vẫn còn trong giai đoạn trứng nước. Hiện tại, thuật toán ẩn thông tin dựa trên H.264 / AVC đã trở nên trưởng thành, chẳng hạn như các thuật toán dựa trên hệ số DCT đã sửa đổi, vector chuyển động và chế độ dự đoán. Hướng tiếp cận: Video đã bị nén Mã hóa Entropy Video đã bị nén Gói tin Sinh dấu thủy vân Nhúng siêu Thay thế chuỗi bit Chuỗi bít được nhũng thủy vân Mã hóa dữ liệu Từ hình 4.22 thấy được sẽ có 3 phương pháp giấu tin trong video theo chuẩn H264/H265 là - Thay thế chuỗi bit sau CAVLC (hướng số 1) - Nhúng thủy vân trong các dự đoán nội không và liên khung (hướng số 2) - Nhúng thủy vân trước khi mã hóa entropy (hướng số 3) 2. Các phương pháp mã hoá 2.1 Phương pháp nhúng thủy vân thay thể chuỗi bit sau CAVLC Ở phương pháp nhúng thủy vân trong khối CAVLC sẽ thực hiện thủy vân số trực tiếp lên chuỗi bit mà không phải giải mã video hay phải giải nén một phần video. Thuật toán này sẽ tạo ra một "ngoại lệ" trong không gian mã H.264/H.265 mà chỉ có bộ giải mã hiểu trong khi kích thước chuỗi bit vẫn được bảo toàn. Không gian mã này sẽ được định nghĩa qua kĩ thuật CAVLC. Do trong thực tế đa số không gian mã của H.264/H.265 không được sử dụng hết nên bộ nhúng thủy vân có thể ánh xạ các khối CAVLC thích hợp tới các vị trí không dùng tới của không gian mã H.264/H.265. Một khóa bí mật được chia sẻ giữa bộ nhúng và giải mã sẽ đảm bảo tính bảo mật. Chuỗi bit sau khi nhúng thủy vân sẽ vẫn giữ nguyên kích thước và trong suốt, đảm bảo tránh được việc bị giả mạo hay dịch ngược vì dấu thủy vân được nhúng sau quá trình nén nên nó rất dễ vỡ nếu bị mã hóa lại [39]. Ý tưởng của mô hình giấu tin trong phương pháp này là sẽ tiến hành thay thế chuỗi bit sau mã hóa CAVLC. Hình 4.23 dưới đây mô tả sơ đồ nhúng thủy vân. Video đã bị nén Mã hóa Entropy Video đã bị nén Gói tin Sinh dấu thủy vân Nhúng siêu Thay thế chuỗi bit Chuỗi bít được nhũng thủy vân Mã hóa dữ liệu Quá trình thực hiện nhúng thủy vân theo sơ đồ trên hình 4.23 như sau: Với đầu vào là video nén theo chuẩn H.264/H.265. Các video đầu vào này sẽ được mã hóa entropy theo phương pháp CAVLC và đi qua bộ sinh dấu thủy vân. Quá trình tiền xử lý này sẽ trả về một tập siêu dữ liệu dùng để nhúng ở bước tiếp theo và một tập siêu dữ liệu dùng để phát hiện dấu thủy vân. Các siêu dữ liệu dùng để nhúng là vị trí các khối dữ liệu có thể thay thế trong chuỗi bit và các giá trị thay thế tương ứng. Với mỗi vị trí sẽ có nhiều giá trị tương ứng để thay thế dữ liệu gốc. Đồng thời một gói tin đi qua bộ mã hóa sẽ được dùng để xác định trong số các giá trị thay thế giá trị nào sẽ được lựa chọn để thực hiện việc nhúng. Sau đó bộ nhúng thay thế sẽ sử dụng gói tin đã được mã hóa chọn ra các tổ hợp mã thích hợp dựa vào siêu dữ liệu và thực hiện việc thay thế. Bước khó nhất của thuật toán nằm ở việc sinh ra các siêu dữ liệu hợp lệ (phải tuân theo đúng chuẩn mã hóa entropy và chuẩn nén), các siêu dữ liệu này phải có khả năng nhúng được một gói tin và đảm bảo được tính chính xác yêu cầu về giấu tin. Nhận xét: Có thể nhận thấy rằng phương pháp giấu tin này có những ưu điểm và nhược điểm sau: - Ưu điểm: Độ phức tạp tính. - Nhược điểm: Bước tiền xử lý tạo ra các siêu dữ liệu phức tạp. Có thể gây ra va chạm + Chuỗi CAVLC sau khi được nhúng thủy vân có thể vô tình trùng khớp với một chuỗi CAVLC khác đã xuất hiện trong chuỗi bit được sử dụng. Trong trường hợp này chuỗi được nhúng thủy vân và chuỗi chưa được nhúng sẽ không thể phân biệt được dẫn đến việc khó tách tin + Hai chuỗi CAVLC được nhúng thủy vân cùng trùng với một chuỗi CAVLC khác dù chuỗi đó chưa được sử dụng. Việc khôi phục không tổn hao dấu thủy vân sẽ rất khó trong trường hợp này do chuỗi CAVLC có thể có nhiều chuỗi gốc ánh xạ tới. Ví dụ với chuỗi {7, 3, -1, -1, 1, 2, -2, 7, -8} có thể có chuỗi gốc là {7 0 -2 -1 1 ...} hoặc {7 1 -1 -2 1...}. Phương pháp nhúng thuỷ vân trong chế độ dự đoán nội khung và liên khung Với phương pháp nhúng thủy vân trong các nội khung và liên khung có khác nhau 2.2 giữa H264 và H265 vì có chế độ dự đoán khung hình khác nhau. Tuy nhiên về cơ bản ý tưởng và cách làm là giống nhau. Trong thuật toán này sẽ thực hiện nhúng thủy vân trên cả nội khung và liên khung bằng cách sử dụng các hệ số biến đổi khác 0 QTCs (Quantum Transform Coefficient- Hệ số biến đổi). Lưu ý rằng: Thực hiện nhúng thủy vân trên miền không gian có thể gây ra mất mát bởi các khung hình video sau khi bị lượng tử hóa đã bị tổn hao dữ liệu. Trong miền tần số nhúng thủy vân thường được thực hiện trong các QTC. Sự khác biệt trong thuật toán này là việc nhúng thủy vân được thực hiện cả trên các khung inter của H.264/H.265 và chỉ nhúng dữ liệu vào các QTC phù hợp với một số điều kiện, các điều kiện này phụ thuộc vào số lượng các bit thủy vân (WMBits) được nhúng. Quy trình thực hiện như sau: - Đầu vào: video đã giải nén theo chuẩn H.264/H.265. - Vị trí tách: tách thủy vân sẽ được thực hiện trên các hệ số QTCs trước khi trải qua quá trình mã hóa entropy. - Quá trình thực hiện: thực hiện tách thủy vân số bằng các hệ số QTC của AC (các hệ số này cần khác 0 và nên lớn hơn 1) theo công thức: 𝑌𝑊 = 𝑓 (𝑌, 𝑊, [𝐾]) trong đó f() là quá trình tách thủy vân, Y là khung video cần đã nhúng, W là dấu thủy vân và K là khóa (K không bắt buộc). Dựa trên những phân tích về quy trình giấu tin có thể nhận thấy rằng phương pháp giấu tin trong chuẩn H264/H265 dựa trên chế độ dự đoán nội khung và liên khung có những ưu điểm nhất định như: i) Độ phức tạp tính toán thấp ở bước nhúng đơn gian. Đồng thời ính xác thực cao. Ngoài ra phương pháp này cũng có nhược điểm là độ an toàn của phương pháp là không đủ cao do sử dụng thuật toán giấu tin đơn giản nên nếu bị kẻ tấn công tìm được quy luật giấu tin thì thông tin dễ bị lộ. 2.3.Phương pháp nhúng thủy vân trước khi mã hóa entropy Hình 4.24 dưới đây mô tả phương pháp giấu tin trong chuẩn H264/H265 trước khi thực hiện mã hóa entropy. Có Có là khung IDR Ảnh hiện tại Video gốc Không g + - Dự đoán chuyển động Ảnh trước đó Phần dư Bù chuyển động Chọn kiểu dự đoán nội suy Biến đổi nhị phân Biến đổi nguyên Lượng tử hóa Đảo Thông tin cần giấu ∑ Dự đoán nội suy Ảnh được dự đoán Nhúng thủy vân Mã hóa Entrop y Video chứa tin Hình 4.24. So đồ nhúng thủy vân trước khi mã hóa Entropy trong sơ đồ mã hóa video theo chuẩn H264/H265 Từ quy trình trên thấy được quá trình giấu tin trong chuẩn H264/H265 như sau: Bước 1: Từ video gốc tách thành các khung, lấy khung đầu tiên để mã hóa. Lúc này sẽ có các tình huống xảy ra: - Nếu khung được chọn đã là khung IDR (Instantaneous Decoder Refresh) thì đi thẳng vào quá trình biến đổi ICT và lượng tử hóa. Khung IDR là 1 loại khung I đặc biệt trong H.264/H.265. Vì các ảnh P trong H.264 và H265 sử dụng nhiều khung tham khảo, nên quá trình dùng bộ đệm để nhớ các ảnh tham khảo cần được thống nhất để tối ưu về tốc độ cũng như bộ nhớ cho quá trình mã hóa. Khung IDR được sinh ra là để làm nhiệm vụ này. Mỗi khi bộ mã hóa gặp khung IDR, chúng sẽ ngăn không cho các ảnh P tham khảo các ảnh I trước khung IDR đó. Và bộ đệm của các ảnh tham khảo sẽ được loại bỏ để tiếp tục lưu trữ các ảnh tham khảo khác. - Nếu khung được chọn không phải là khung IDR thì nó sẽ phải đi qua các giai đoạn tiền xử lý. Quy trình và thành phần các giai đoạn tiền xử lý được trình bày như sau: Giai đoạn 1: Khung được chọn sẽ được xử lý đồng thời bởi 2 kỹ thuật: - Dự đoán chuyển động: Trong chuẩn H264, các khối MB với kích thước 16x16 được chia nhỏ thành các khối con nhỏ hơn. Còn trong H.265 các khối MB này nhỏ hơn, có kích thước 4x4, ảnh được dự đoán chính xác hơn, chuyển động mượt hơn so với H.264. Sau khi khung hình được chọn qua quá trình dự đoán chuyển động sẽ được xử lý tiếp bằng kỹ thuật bù chuyển động. Nguyên tắc bù chuyển động của chuẩn H264 và H265 đã được trình bày ở trên. - Nội suy: Chi tiết quá trình nội suy trong H264 và H265 đã được trình bày trong mục 4.3.1 và 4.3.2 của giáo trình. Giai đoạn 2: Tổng hợp: Đây là giai đoạn khung ảnh được lựa chọn sẽ (có thể là ảnh sau khi đã được bù chuyển động hoặc ảnh đã được dự đoán nội suy) và khung ảnh hiện tại sẽ đi vào kỹ thuật tổng hợp để tính ra phần dư (sai khác). Phần dư này được tính bằng hiệu của khung ảnh hiện tại và khung ảnh được dự đoán. Bước 2: Biến đổi IDCT: Biến đổi IDCT (InDCT) là kỹ thuật biến đổi nguyên được thực hiện trên các khối 4x4 sau khi được dự đoán bù chuyển động hoặc dự đoán nội suy. Trong chương 2 của giáo trình đã trình bày chi tiết về DCT và InDCT. Bước 3: Lượng tử hóa: Trong các nội dung trước của giáo trình đã trình bày chi tiết quá trình lượng tử hóa này. Đối với chuẩn H264/H265 thì quá trình lượng tử hóa cũng diễn ra tương tự như các chuẩn khác. Bước 4: Giấu tin: Để giấu thông tin vào trong video cần phải thực hiện nhiều giai đoạn kiểm tra và tiền xử lý dữ liệu. Các giai đoạn cần thực hiện trong quá trình giấu tin vào trong video được thực hiện lần lượt như sau: Giai đoạn 1: xác định vị trí giấu tin: Trong nội dung này, giáo trình áp dụng mô hình giấu tin sau khi đã được lượng tử hóa như mô tả trong hình 4.24. Để giấu tin vào video theo chuẩn H264/265 cần thực hiện nhiều biện pháp và kỹ thuật xử lý. Đầu tiên cần kiểm tra định dang thông tin cần giấu là văn bản hay ảnh. Hình 4.25 mô tả quy trình phát hiện định dạng thông tin cần giấu. Hình 4.25: Kiểm tra định dạng thông tin cần giấu Như vậy, với thông tin cần nhúng nhập vào, hệ thống giấu tin sẽ kiểm tra định dạng của thông tin cần giấu. Quá trình kiểm tra định dạng này giúp cho việc xác định vị trí giấu tin về sau. Song song với quá trình kiểm tra định dạng, hệ thống giấu tin cũng cần kiểm tra và so sánh giữa thông tin cần giấu và khung ảnh vật chứa. Nếu số lượng thông tin cần giấu quá dài và một khung ảnh không thể chứa hết thì hệ thống sẽ tính toán để lựa chọ các khung tiếp theo để chứa thông tin. Cách thức giấu tin vào video chuẩn H264/H265 như sau: Đối với dạng hình ảnh: Xác định đường chéo chính. Đường chéo chính được thể hiện như hình 4.26. Mỗi khối con có 16 hệ số. Thông tin cần giấu được giấu ở hệ số vị trí thứ 10 hoặc 15. Nếu số lượng bit cần dấu là lẻ thì nhúng ở vị trí 10. Nếu số lượng bit cần dấu là chẵn thì nhúng ở vị trí 15. Đối với dạng văn bản: Xác định đường chéo ab. Đường chéo ab được thể hiện như hình 4.26. Mỗi khối con có 16 hệ số. Thông tin cần giấu được giấu ở hệ số vị trí thứ 10 hoặc 15. Nếu số lượng bit cần dấu là lẻ: thì nhúng ở vị trí 10. Nếu số lượng bit cần dấu là chẵn: thì nhúng ở vị trí 15. Hình 4. 26. Xác định vị trí cần giấu với đường chéo chính / đường chéo ab Giai đoạn 2: kỹ thuật giấu tin: Sau khi đã xác định được định dạng thông tin cần giấu và lựa chọn được vị trí cần giấu. Tiếp theo cần thực hiện kỹ thuật để giấu thông tin vào các vị trí đã được lựa chọn đó. Quy trình giấu thông tin vào trong video được thể hiện như hình 4.27. Quy trình giấu tin vào vị trí đã được lựa chọn thực hiện theo thứ tự là: Đầu tiên hệ thống sẽ tính số lượng bit cần giấu, giả sử thông tin cần giấu là N bit. Sau đó lưu N bit này vào mảng Wn gồm N byte. Tiếp theo sẽ kiểm tra bit cần giấu hiện tại đang là bit 0 hay bit 1. Nếu bit cần giấu đang là bit 0 thì sẽ lưu 0 vào Wn. Nếu bit cần giấu là 1 sẽ lưu vào Wn số ngẫu nhiên X có giá trị bằng roundup(Qstep) với Qstep là giá trị tương ứng với bước nhảy QP tại block 4x4 hiện tại. Sau khi có mảng Wn gồm N phần tử, mỗi phần tử gồm 8 bit. Tiếp tục xét: - Nếu giá trị Wn[i] > 0 (tức bit cần giấu là 1): sẽ tính giá trị lượng tử của hệ số Wn[i] này với QP. Trong đó giá trị QP bằng với giá trị QP của hàm lượng tử block 4x4 đó. Sau đó, thay thế hệ số AC ở vị trí đã chọn bằng giá trị lớn nhất của Q(Wn[i]) và │Q(Y[u, v]), nếu giá trị Q(Y[u, v]) được lựa chọn thì khi thay thế vào hệ số AC phải giữ nguyên. - Nếu giá trị Wn[i] = 0 (tức là bit cần giấu là 0): thay hệ số AC ở vị trí đã chọn bằng 0. Hình 4.27: Quy trình giấu tin vào các vị trí đã lựa chọn Bước 5: Mã hóa Entropy. Sau khi được lượng tử hóa, kết quả sẽ được đưa vào mã hóa Entropy. Một số phương pháp được sử dụng trong mã hóa Entropy được trình bày trong mục 4.3.1 và 4.3.2 của giáo trình. Ưu điểm và nhược điểm của kỹ thuật giấu tin theo phương pháp này như sau: - Ưu điểm :Độ an toàn của phương pháp là cao do sử dụng thuật toán giấu tin phức tạp nên kẻ tấn công khó tìm được quy luật giấu tin. Đồng thời phương pháp này cũng đảm bảo khả năng xác thực. - Nhược điểm : Một nhược điểm của phương pháp là sự phức tạp của thuật toán nhúng thủy vân tăng lên rất nhiều. Dẫn đến việc tách tin cũng trở nên khó khăn hơn và ta cũng cần các thiết bị hiện đại và dung lượng lớn hơn mới đảm bảo sự chính xác khi thực hiện thuật toán.