Qui trình giải nén

Một phần của tài liệu xây dựng engine giải mã video h.264 trên hệ thống nhúng (Trang 79)

Hình 4-7: Quy trình giải nén video chuẩn H.264

Bộ giải nén (11)

nhận luồng bit nén được truyền dẫn bởi bộ nén, thực hiện giải nén entropy và tái sắp xếp các thành phần dữ liệu để tạo tập các hệ số biến đổi đã lượng tử X. Sau đó, tập hệ số X này sẽ được lượng tử ngược và biến đổi ngược để tạo

block sai khác D‟n (Hình 4-7).

Bộ giải nén dùng các thông tin có được từ việc giải nén luồng bit để tạo một

block dự đoán PRED bằng 1 trong 2 phương pháp dự đoán (Inter hoặc Intra), block này sẽ giống với block dự đoán PRED được tạo ra trong bộ nén. Block PRED sẽ cộng với block sai khác D‟n để tạo thành block uF‟n (u có nghĩa block này chưa được lọc). Block uF‟n sẽ được lọc tách khối để tạo thành block F‟n đã lọc để dùng cho việc hiển thị.

4.2.2.1 Giải mã luồng bit nén

Bộ giải nén sẽ nhận luồng bit nén định dạng H.264, tiến hành giải nén các thành phần dữ liệu, tái tạo lại các thông tin đã được nén bởi bộ nén như các hệ số biến đổi đã lượng tử hóa, thông tin dự đoán,... Sau đó thông tin này được được dùng để thực hiện lại quá trình biến đổi và lượng tử ngược nhằm tái xây dựng lại chuỗi các ảnh video.

4.2.2.2 Lƣợng tử ngƣợc (rescaling) và biến đổi ngƣợc

Các hệ số biến đổi đã lượng tử hóa sẽ được lượng tử ngược (rescaled), bằng cách nhân mỗi hệ số với một giá trị nguyên để phục hồi lại giá trị ban đầu của nó.

80

4.2.2.3 Quá trình tái xây dựng

Với mỗi macroblock, bộ giải nén tạo ra một block dự đoán PRED giống với block PRED được tạo ra bởi bộ nén. Bộ giải nén sẽ cộng block này với phần block sai khác được tạo thành trong quá trình giải nén để tái xây dựng block. Các block này được dùng để hiển thị như một phần của ảnh video.

4.2.3 So sánh với các chuẩn nén video trƣớc đây

Ưu điểm nổi bật nhất của H.264 so với các chuẩn video trước đây là nó có tỷ lệ

nén rất tốt (12). Một bộ nén H.264 có thể làm giảm kích thước của tập tin video số

xuống hơn 80% so với chuẩn Motion JPEG và 50% so với chuẩn MPEG-4 Part 2. H.264 có thể cung cấp:

 Chất lượng ảnh tốt hơn với cùng một bitrate

 Hệ số bitrate thấp hơn với cùng chất lượng nén ảnh.

81 Đồ thị này so sánh bitrate của một luồng video dài 115 giây, các chuẩn cho ra chất lượng ảnh như nhau. Bộ nén H.264 hiệu quả cao hơn gấp 3 lần so với bộ nén MPEG-4 Part 2 và gấp 6 lần so với chuẩn Motion JPEG.

Hình 4-9: So sánh chất lƣợng ảnh đƣợc nén cùng bitrate khi dùng chuẩn MPEG-2 (trái), MPEG-4 (giữa) và H.264 (phải)

Ưu điểm này giúp giảm được không gian lưu trữ và băng thông đường truyền nhưng hình vẫn có được độ phân giải cao. Tuy nhiên, tỷ lệ nén cao đồng nghĩa với chi phí tính toán của H.264 sẽ lớn hơn, phức tạp hơn so với các chuẩn nén video trước đây. Điều này cũng có nghĩa là H.264 sử dụng nhiều tài nguyên để xử lý hơn trong quá trình nén và giải nén video.

4.3 Cấu trúc H.264

4.3.1 Không gian màu YCbCr và kiểu lấy mẫu 4:2:0

Hệ thống thị giác của con người (human visual system) thường nhạy cảm với ánh sáng hơn màu sắc. Do đó, hệ thống truyền dẫn video, hệ thống tivi analog và kỹ thuật số thông thường đều được thiết kế dựa trên đặc điểm này.

Trong H.264 cũng như trong các chuẩn video trước, điều này được thực hiện bằng cách sử dụng không gian màu YCbCr. Không gian màu YCbCr chia một màu hiển thị thành 3 thành phần Y, Cr, và Cb. Trong đó, Y được gọi là thành phần luma – đại diện cho độ sáng của hình ảnh. Cb và Cr là các thành phần chroma - đại diện cho thông tin màu của hình ảnh.

82 Và cũng vì hệ thống thị giác của con người kém nhạy cảm màu sắc hơn ánh sáng, mà lượng thông tin về màu sắc có thể giảm đi nhưng vẫn không gây ảnh hưởng đến chất lượng hình ảnh được nhìn thấy.

H.264 sử dụng cấu trúc lấy mẫu ở đó các thành phần chroma có số điểm ảnh chỉ bằng ¼ so với số điểm ảnh của thành phần luma. Đây là kiểu lấy mẫu 4:2:0

(hay còn được gọi là YV12). Kiểu lấy mẫu này được sử dụng phổ biến trong các ứng dụng như là hội nghị trực tuyến, truyền hình số và đĩa DVD.

4.3.2 Macroblock

Một ảnh khi xử lý được chia thành nhiều macroblock. Macroblock là đơn vị xử lý cơ bản cho dự đoán bù chuyển động trong một số chuẩn nén video thông dụng như MPEG-1, MPEG-2, MPEG-4, H.261, H.263 và H.264. (adsbygoogle = window.adsbygoogle || []).push({});

Chuẩn H.264 thực hiện lấy mẫu theo định dạng 4:2:0. Vì thế, một macroblock 16x16 điểm ảnh sẽ bao gồm bởi 256 thành phần luma Y (được sắp xếp trong 4 block

8x8), 64 thành phần chroma màu xanh Cb (được sắp xếp trong 1 block 8x8), và 64

thành phần chroma màu đỏ Cr (được sắp xếp trong 1 block 8x8) như hình sau. Do

đó, một macroblock có thể được thay thế bởi 6 block 8x8 gồm các thành phần Y, Cr, và Cb.

Hình 4-10: Macroblock 16x16 đƣợc đại diện bởi các thành phần Y, Cr, Cb

Trong một khung hình, các macroblock được đánh số theo raster scan order.

Trong chuẩn H.264, một macroblock chứa các phần tử cú pháp sau:

mb_type: xác định macroblock được mã hóa theo kiểu Inter hay Intra; xác định kích thước các phân hoạch của macroblock.

83

mb_pred: xác định các mode được lựa chọn trong dự đoán Intra; xác định danh sách các ảnh tham chiếu; xác định các vectơ cho mỗi phân hoạch macroblock trong trường hợp mã hóa Inter, ngoại trừ phân hoạch macroblock mã hóa Inter có kích thước 8x8.

sub_mb_pred: chỉ dùng cho các phân hoạch macroblock được mã hóa Inter có kích thước 8x8. Xác định kích thước các phân hoạch con của phân hoạch macroblock này và các vectơ chuyển động của các phần chia phụ này.

code_block_pattern: xác định block 8x8 (luma hay chroma) chứa các hệ số biến đổi được mã hóa.

mb_qb_delta: thông tin thay đổi biến lượng tử

residual: các hệ số biến đổi được mã hóa ứng với các mẫu ảnh sai khác sau quá trình dự đoán.

4.3.3 Slice

Ảnh video sau khi mã hóa được chia thành một hoặc nhiều slice. Mỗi slice chứa một hoặc nhiều macroblock. Trong trường hợp ảnh chỉ có một slice, slice sẽ chứa tất cả các macroblock trong ảnh đó. Số lượng macroblock trong mỗi slice của ảnh không nhất thiết phải giống nhau.

Hình 4-11: Một cách phân hoạch slice trong ảnh

Nhóm slice (slice group) chứa một hoặc nhiều slice. Trong mỗi slice của một nhóm slice, các macroblock được mã hóa theo thứ tự raster scan order.

84

Hình 4-12: Nhóm slice trong một ảnh

5 loại slice và một ảnh có thể chứa nhiều loại slice khác nhau. Các ảnh được mã hóa của profile cơ bản chứa các slice loại P và I, các ảnh được mã hóa của

profile chínhprofile mở rộng có thể chứa tập các slice kiểu I, P, và B, SI và SP.

Loại slice Mô tả Profile hỗ trợ

I (Intra) Chỉ chứa các macroblock I

(mỗi block hoặc macroblock được dự đoán từ dữ liệu được mã hóa trước đó trong cùng một slice)

Tất cả các profile

P (Predicted) Chứa macroblock P (mỗi macroblock hay phân hoạch của macroblock được dự đoán từ

list 0) và/hoặc macroblock I

Tất cả các profile

B (B-predictive) Chứa các macroblock B (mỗi (adsbygoogle = window.adsbygoogle || []).push({});

macroblock hay phân hoạch của macroblock được dự đoán từ

list 0 và/hoặc list 1) và/hoặc macroblock I.

Profile mở rộng và profile chính

SP (Switching P) Chứa các macroblock I và/hoặc P, cung cấp khả năng chuyển đổi dễ dàng giữa những luồng bit được mã hóa.

85 SI (Switching I) Chứa các macroblock SI (loại

maroblock đặc biệt trong mã hóa Intra), cung cấp khả năng chuyển đổi dễ dàng giữa những luồng bit được mã hóa.

Profile mở rộng

Các loại slice trong chuẩn H.264

Hình 4-13 mô tả cấu trúc đơn giản của một slice. Phần thông tin mở đầu (header) cho biết loại slice, ảnh đã mã hóa chứa slice đó, ngoài ra còn có chỉ dẫn liên quan đến việc quản lý ảnh tham chiếu. Phần dữ liệu của slice bao gồm tập các macroblock được mã hóa và/hoặc chỉ số của một macroblock không được mã hóa (skipped macroblock). Mỗi macroblock chứa một tập các thông tin mở đầu (header) và thông tin về phần sai khác đã mã hóa.

Hình 4-13: Cấu trúc một slice

4.3.4 Profile

Chuẩn H.264 gồm 3 profile: profile cơ bản, profile chính và profile mở rộng.

Tên profile Mô tả

Profile cơ bản

(Baseline profile(13))

 Hỗ trợ mã hóa Inter và mã hóa Intra (dùng các slice I và slice P), nén entropy sử dụng thuật toán mã hóa chiều dài tùy biến theo ngữ cảnh (CAVLC – Context-Based

86 Adaptive Variable Length Coding (14)).

 Profile này được ứng dụng trong điện thoại video, hội nghị trực tuyến và các hệ thống truyền thông không dây. Profile chính (Main

profile)

 Ngoài các slice I, P đuợc mã hóa, profile này còn mã hóa video dùng các slice B. Mã hóa entropy dùng thuật toán mã hóa nhị phân số học theo ngữ cảnh (CABAC – Context-Based Adaptive Binary Arithmetic Coding (15)).

 Profile chính được ứng dụng cho các hệ thống broadcast như truyền hình kỹ thuật số, các hệ thống lưu trữ dữ liệu.

Profile mở rộng (Extended profile)

 Ngoài các kỹ thuật được sử dụng trong profile cơ bản và một phần của profile chính, profile mở rộng còn sử dụng thêm các sile SI và SP trong mã hóa ảnh.

 Profile mở rộng được dùng trong các ứng dụng xem hoặc truyền tải video trực tuyến, có khả năng nén cao và một số cải tiến riêng để xử lý việc mất dữ liệu và đồng bộ hóa các dòng dữ liệu khi gặp sự cố về đường truyền Internet.

87

Hình 4-14: Các profile của chuẩn H.264

4.4 Quy trình mã hóa hình ảnh của chuẩn H.264 4.4.1 Dự đoán Inter 4.4.1 Dự đoán Inter

Dự đoán Inter hay dự đoán bù chuyển động (Motion Compensated Prediction) là dạng dự đoán được sử dụng thông dụng trong H.264.

Dự đoán Inter giả định rằng dữ liệu các điểm ảnh của ảnh cần được mã hóa có tính tương đồng cao với dữ liệu của các ảnh đã được mã hóa trước đó.

Với mỗi block kích thước MxN điểm ảnh, bộ nén sẽ tìm một vùng có cùng kích thước trong ảnh tham chiếu đã được mã hóa để lựa chọn vùng ảnh thích hợp nhất. Tiêu chuẩn để cho vùng ảnh tham chiếu được chọn là phần dư của việc trừ block MxN hiện tại cho vùng ảnh MxN này phải là nhỏ nhất. Quá trình tìm kiếm vùng ảnh tốt nhất để tham chiếu được gọi là quá trình ước lượng chuyển động (adsbygoogle = window.adsbygoogle || []).push({});

88 vùng đ ược c họn frame tham c hiếu vùng tì m kiếm frame hiện tạ i macro block hiện tạ i

Hình 4-15: Mô tả ƣớc lƣợng chuyển động trong dự đoán Inter

Vùng ảnh được chọn sẽ trở thành block dự đoán cho block MxN – block đang cần được mã hóa. Phần sai khác này cùng với thông tin về vị trí của block hiện tại và block tham chiếu sẽ được nén và truyền đi cho bộ giải nén.

Dự đoán Inter bao gồm 3 quy trình chính: quản lý danh sách ảnh tham chiếu, tính toán các vectơ chuyển động và nội suy các vị trí sub-sample.

4.4.1.1 Quản lý ảnh tham chiếu

Mỗi bộ nén và bộ giải nén quản lý danh sách các ảnh tham chiếu nhằm phục vụ cho dự đoán bù chuyển động tại các macroblock được mã hóa Inter trong các slice P. Danh sách list 0 chứa các ảnh đã được giải nén, các ảnh này có thể xuất hiện trước hoặc sau ảnh hiện tại theo thứ tự hiển thị. Có 2 loại ảnh khác nhau được lưu trong danh sách ảnh tham chiếu bao gồm:

 Ảnh ngắn hạn (shortterm picture): là ảnh nén được tái xây dựng trong bộ nén. Ảnh được xác định bởi số thứ tự khung hình.

 Ảnh dài hạn (longterm picture): ảnh được lưu lâu hơn trong bộ nhớ ảnh tham chiếu. Ảnh dài hạn được lưu trong danh sách các ảnh tham chiếu cho đến khi được thay thế hoặc loại bỏ. Ảnh được xác định bởi giá trị longtermpicnum.

89

 Các ảnh ngắn hạn được lưu trong bộ nhớ ảnh tham chiếu theo thứ tự giảm dần của số ảnh và các ảnh dài hạn được lưu sau ảnh ngắn hạn cuối cùng và theo thứ tự tăng dần của giá trị longtermpicnum.

 Khi tổng số các ảnh ngắn hạn và dài hạn bằng với số lượng tối đa các ảnh tham chiếu thì ảnh ngắn hạn lâu nhất trong sẽ được loại bỏ khỏi bộ nhớ các ảnh tham chiếu.

 Bộ nén sẽ gởi các lệnh điều khiển bộ nhớ thích ứng (adaptive memory control command) để quản lý các ảnh ngắn hạn hoặc dài hạn.

Danh sách ảnh tham chiếu

Hoạt động 0 1 2 3 4

Trạng thái ban đầu Nén ảnh 250 Nén ảnh 251 Nén ảnh 252 Nén ảnh 253 Gán 251 đến LongTermPicNum 0 Nén ảnh 254 Gán 253 đến LongTermPicNum 4 Nén ảnh 255 Gán 255 đến LongTermPicNum 3 Nén ảnh 256 - 250 251 252 253 253 254 254 255 254 256 - - 250 251 252 252 253 252 254 252 254 - - - 250 251 250 252 250 252 0 0 - - - - 250 0 250 0 0 3 3 - - - - - - 0 4 4 4 4

Tổ chức bộ nhớ ảnh tham chiếu với ảnh hiện tại là 250, số ảnh tham chiếu là 5 4.4.1.2 Bù chuyển động theo cấu trúc cây

Thành phần luma của mỗi macroblock (các mẫu 16x16) có thể được chia theo 4 cách thành các macroblock partition (như hình sau) và bù chuyển động được thực hiện hoặc cho một phần 16x16, hai phần 8x16 hoặc cho hai phần 16x8 hoặc cho bốn phần 8x8. Các maroblock partition có kích thước 8x8 có thể được chia thành 4 phần

90 nhỏ hơn được gọi là các sub-macroblock partition. Mỗi sub-macroblock partition có kích thước 4x4 điểm ảnh.

Hình 4-16: Các dạng phân hoạch macroblock

Sự lựa chọn kích thước của các maroblock partition hoặc sub-macroblock partition khi chia ảnh là yếu tố quan trọng ảnh hưởng đến tỷ lệ nén ảnh. Thông thường, phân hoạch ảnh thành các phần có kích thƣớc lớn tại những vùng ảnh ít chuyển động, có tính đồng nhất cao, và thành những vùng có kích thƣớc nhỏ tại

những ảnh chuyển động có nhiều chi tiết biến đổi.

Hình 4-17: Phần sai khác (chƣa bù chuyển động) xác định cách phân hoạch ảnh

Trong một macroblock của H.264 (lấy mẫu 4:2:0) có thể tính kích thước các phân hoạch của thành phần chroma từ các phân hoạch của thành phần luma. Trong macroblock, thành phần chroma có độ phân giải theo chiều ngang và chiều đứng

91 phần với tỷ lệ giống với thành phần luma, ngoại trừ kích thước phân hoạch bằng ½ so với các block của thành phần luma.

Chẳng hạn, phân hoạch 8x16 trong luma tương ứng với phân hoạch 4x8 trong phần chroma. Các giá trị (x, y) của các vectơ chuyển động ứng với mỗi partition trong các block luma cũng giảm ½ khi đối với các block chroma.

4.4.1.3 Vectơ chuyển động

Mỗi maroblock partition hoặc sub-macroblock partition của một macroblock mã hóa Inter được dự đoán từ vùng ảnh có cùng kích thước trong ảnh tham chiếu. Vectơ chuyển động thể hiện sự dịch chuyển giữa hai vùng ảnh – hiện tại và tham chiếu – có vị trí các tọa độ bằng ¼ khoảng cách 2 pixel ứng với thành phần luma và bằng 1/8 ứng với các thành phần chroma (Cr và Cb).

Tuy nhiên, các điểm ảnh tại các vị trí này (còn gọi là sub-sample) không tồn tại trong ảnh tham chiếu nên cần phải tính bằng phép nội suy từ các điểm ảnh lân cận đã được mã hóa trong ảnh tham chiếu.

Hình 4-18a mô tả block 4x4 (16 hình tròn tô đen) trong ảnh hiện tại được dự đoán từ một vùng trong ảnh tham chiếu. Nếu các giá trị của vectơ chuyển động là số nguyên, các vị trí điểm ảnh thực sự tồn tại (Hình 4-18b). Nếu các giá trị của vectơ chuyển động không nguyên, các vị trí điểm ảnh của block tham chiếu không tồn tại trong ảnh tham chiếu và sẽ được nội suy từ các điểm ảnh lân cận. (Hình 4-18c).

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu xây dựng engine giải mã video h.264 trên hệ thống nhúng (Trang 79)