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ÁO CÁO 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: Đỗ Xn 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
Mục lục
1
Lời nói đầu
3
CHƯƠNG 1. TỔNG QUAN VỀ H.264
4
1. Lịch sử hình thành và phát triển
4
2. Kỹ thuật mã hoá theo chuẩn H.264
4
3. Cấu trúc chuẩn H.264
7
4. Mã hoá Entropy
CHƯƠNG 2: Tổng quan về chuẩn H265
12
31
1. Lịch sử phát triển của chuẩn nén H.265/HEVC
31
2. Kỹ thuật nén vide H265/HEVC
31
3. Cấu trúc H.265/HEVC
32
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
41
41
1.2.1
Trong H.264/AVC
43
1.2.2
Trong HEVC
45
1.2.3
So sánh HEVC và H.264/AVC
48
CHƯƠNG 4: Giấu tin trong video chuẩn H.2645/H.265
56
1. Giới thiệu chung
56
2. Các phương pháp mã hoá
56
Chương 5: DEMO
65
1 Giấu tin trong video .flv
65
2. Sử dụng công cụ OpenPuff để giấu tin trong video nén H264
69
3. DEMO sử dụng cơng cụ HandBrake để chuyển đổi, mã hóa video sang
H265
73
4. DEMO giấu tin trong video sử dụng công cụ Our Secret
74
5. Sử dụng công cụ Openpuff để giấu tin
76
Lời nói đầu
Chuẩn nén hình ảnh được hiểu đơn giản đó là một phương thức nén hình
ảnh nhằm làm giảm lượng dữ liệu của một tập tài liệu video. Phương thức
nén này được các tổ chức có uy tín trên thế giới cơng nhận và đưa vào sử
dụng. Vì vậy nó được coi là một chuẩn. Tên của chuẩn nén do tổ chức phát
triển, quy định và đặt tên.
Trong những năm gần đây khi mà lĩnh vực công nghệ và truyền thông ngày
càng phát triển. Cùng với sự phát triển mạnh của internet tồn cầu thì việc
truyển tải và lưu trữ video cũng ngày càng trở nên phổ biến hơn. Cùng với
đó chất lượng của phần cứng ngày càng được nâng cao và giá thành lại
ngày càng hợp lí giúp cho việc tải hay trải nghiệm một chương trình, bộ
phim ngày càng trở nên dễ dàng nhanh chóng và mượt mà hơn.
Tuy nhiên chỉ xem thơi thì chưa đủ, khi chất lượng cuộc sống ngày càng
nâng cao kéo theo nhu cầu nghe nhìn vì đó cũng ngày càng khắt khe hơn.
Vì thế nhu cầu một chuẩn nén video mới hiệu quả hơn nhằm giảm tải áp
lực cho hệ thống ngày càng bức thiết hơn. Và các chuẩn nén H264, H265
đã được cho ra đời nhằm đáp ứng những nhu cầu trên.
Dưới sự gợi ý và giúp đỡ của thầy Đỗ Xuân Chợ chúng em đã quyết định
tìm hiểu nội dung giấu tin trong chuẩn nén h264 và h265.
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à MPEG-4 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....Ngồ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ả q trình mã hóa video trong chuẩn H264.
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); q
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 qt 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ự đốn, các khối trong khung hình dự đố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ự đố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ự đốn nội khung,
phương pháp dự đố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 q trình
lượng tử hóa Q là q 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 ngun 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ự đố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ự đố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ự đốn nội khung ảnh
hưởng tới hai vấn đề chính: hiệu quả dự đốn và chi phí để thể hiện các chế
độ dự đố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ự đố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ự đốn thấp hơn thì chi phí để thể hiện chế độ dự đốn sẽ
nhỏ hơn. =>Vì vậy, việc chọn kích thước khối thế nào để dự đố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ự đốn. Nói cách khác, nó sẽ
dự đố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ự đốn
- Với các khối 16x16 thì chỉ có 4 chế độ dự đốn.
3.2
Phương pháp tói ưu hố 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ự đốn có khả năng nhất của X
● 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 tốn dựa trên chế độ dự đố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ự đốn của khối bị thiếu
đó là bằng 2.
MPMx = min {MA, MB}
- Sau khi có kết quả dự đố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ự đốn liên khung tạo ra một mơ hình dự đố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 tốn chuyển động
và bù trừ chuyển động.
- Mục đích chính của việc dự đố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ự đốn
liên khung sẽ tính tố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ữ tồ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
I-Frames. 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 ln 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ự đốn cũng là sự đánh đổi giữa chi phí để dự đốn và chất
lượng dự đố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ự đố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 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ự đố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ự đố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ự đố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 tố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ã hố 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
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. Ngồ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)
T1s
Tổng hệ số
khác 0
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ữ hồn tồ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 tố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
Mã bit stream
1s
Hệ số ( Coeffcient)
+-1
2-3
4-5
...
28-29
>=30
01s
001s
...
000000000000001s
00000000000000001xxxxxxxxxxxxs
+-2
+-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
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”
4.3
Mã hóa nhị phân số học ứng ngữ cảnh (CABAC)
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á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ã”
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