Uploaded by hoangbui0801

Nhóm-14 Báo-cáo-giữa-kỳ

advertisement
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.
Download