Xác định các mẫu nội suy

Một phần của tài liệu Thuật toán deblocking trong xử lý video nén theo chuẩn h 264 (Trang 29)

Các mẫu được nội suy từ các mẫu ở vị trí giữa các điểm (1/2 khoảng cách) trong thành phần độ chói của khung hình tham chiếu được tạo ra trước tiên (ô màu xám trong hình vẽ 2.8). Mỗi mẫu ở vị trí giữa các điểm và liền kề với hai mẫu hiện hữu (ví dụ: b, h, m, s) được nội suy từ các mẫu có vị trí là số nguyên bằng việc sử dụng một bộ lọc 6-tap FIR với các trọng số (1/32, -5/32, 5/8, 5/8, -5/32, 1/32). Ví dụ: mẫu b

được tính toán từ 6 mẫu E, F, G, H, I và J (theo chiều dọc):

Hình vẽ 2.8: Nội suy các vị trí giữa các điểm ảnh

Một cách tương tự, h được nội suy bằng việc lọc A, C, G, M, R và T. Khi tất cả các mẫu nội suy theo chiều dọc và chiều ngang đã được tính toán, giá trị của mẫu j sẽ được tạo ra bằng việc lọc cc, dd, h, m, eeff. Bộ lọc nội suy 6-tap là tương đối phức tạp nhưng tạo ra sự chính xác phù hợp với dữ liệu mẫu là các giá trị số nguyên và khi đó mức độ thực hiện bù chuyển động tốt hơn.

Khi tất cả các mẫu ở vị trí 1/2 đã được tính toán, các mẫu ở vị trí 1/4 tiếp tục được tính bằng một phương pháp nội suy tuyến tính. Các vị trí 1/4 với hai mẫu ở vị trí 1/2 hoặc vị trí là số nguyên theo chiều dọc hoặc theo chiều ngang (a, c, i, kd, f, n,

q trong hình vẽ 2.9 được nội suy từ các mẫu liền kề. Ví dụ: a = round((G+b)/2)

Hình vẽ 2.9: Nội suy của các vị trí ¼ khoảng cách điểm ảnh

Các vị trí 1/4 còn lại (e, g, pr ) được nội suy từ các cặp mẫu đối diện theo đường chéo. Ví dụ: e được dự đoán từ bh.

Hình vẽ 2.10 biểu diễn ví dụ về kết quả của việc nội suy vùng tham chiếu với độ phân giải 1/4.

Hình vẽ 2.10: Vùng hình ảnh được nội suy của các vị trí ¼ pixel

Các véc-tơ chuyển động độ phân giải 1/4 của thành phần độ chói sẽ đi liền với các véc-tơ có độ phân giải 1/8 của thành phần sắc độ (giả sử việc lấy mẫu theo tỷ lệ 4:2:0). Các mẫu nội suy được tạo ra ở các vị trí 1/8 từ các mẫu ở vị trí là số nguyên trong mỗi thành phần sắc độ bằng việc sử dụng nội suy tuyến tính (mẫu a trong hình vẽ 2.11). Mỗi vị trí a là một sự kết hợp tuyến tính của các vị trí là số nguyên: A, B, C và D.

a = round([s-dx)(s-dy)A+dx(s-dy)B+(s-dxdyC+dxdyD]/s2

) (2.2) Trong hình vẽ 2.11: s = 8, dx = 2 và dy = 3, do đó:

Hình vẽ 2.11: Vị trí nội suy 1/8 của các thành phần sắc độ

2.3.2.3. Ƣớc lƣợng véc-tơ chuyển động và bù chuyển động

Để thực hiện bù chuyển động, sự chuyển động của các đối tượng chuyển động được ước lượng trước tiên. Điều này được gọi là ước lượng véctơ chuyển động. Thông thường kỹ thuật ước lượng véc-tơ chuyển động trong tất cả các chuẩn nén video sử dụng là thuật toán phù hợp khối BMA. Với một block kích thước MxN điểm ảnh (trong đó MxN có thể là: 16x16, 16x8, 8x16, 8x8, 8x4, 4x8 hoặc 4x4) trong khung hình hiện tại sẽ được tìm kiếm trong một vùng tìm kiếm với sự dao động kích thước w pixel quanh một vị trí mẫu (kích thước cửa sổ tìm kiếm là w) như được mô tả trong hình vẽ dưới đây [2,5]:

M+2w N + 2 w N M (m+i, n+j) (m, n) w w

Cửa sổ tìm kiếm trong Frame tham chiếu

Block MxN trong Frame hiện hành

Block MxN phù hợp trong Frame

tham chiếu

Hình vẽ 2.12: Mô tả hoạt động ước lượng véc-tơ chuyển động

Để ước lượng véc-tơ chuyển động có hai phương pháp thường được sử dụng đó là: phương pháp MSE - sử dụng trung bình của bình phương các sai khác giữa các mẫu, và MAE - trung bình của các sai khác tuyệt đối giữa các mẫu.

MSE được tính bằng công thức sau:

 2 1 1 2 ) , ( 1 f(m,n) g(m i,n j) N M N n M m j i         , wi,jw. (2.4)

MAE được tính bằng công thức sau:

) , ( ) , ( 1 1 1 2 ) , ( f m n g m i n j N M N n M m j i         , wi,jw. (2.5) Trong đó: f(m,n) biểu diễn giá trị của điểm ảnh trong block hiện tại ở vị trí

Việc mã hoá một véc-tơ chuyển động cho mỗi định dạng của block có thể mất một số bit. Các véc-tơ chuyển động của các block liền kề thường có tính tương quan cao hơn. Vì vậy, véc-tơ chuyển động của một block thường được được dự đoán từ các véc-tơ chuyển động của các block lân cận đã được mã hoá trước đó. Một véc-tơ dự đoán MVp được thực hiện dựa trên các véc-tơ chuyển động đã được tính toán trước đó là MVD. Sự sai khác giữa véc-tơ chuyển động hiện tại và véc-tơ được dự đoán sẽ được mã hoá và truyền đi. Phương pháp thực hiện dự đoán MVpphụ thuộc vào kích cỡ định dạng bù chuyển động và khả năng có sẵn của các véctơ liền kề [1].

Đặt E là block hiện tại (có thể là MB hoặc block con của MB), đặt A là block ngay bên trái của E, đặt B block ngay phía trên E và đặt C là block phía trên bên phải của E. Nếu có nhiều hơn một block phía trên E, block ngoài cùng bên trái trong số đó sẽ được chọn là B. Hình vẽ 2.13 minh hoạ sự lựa chọn của các block lân cận khi tất cả các block có cùng kích cỡ (trong trường hợp này là 16x16) và hình 2.14 chỉ ra một ví dụ của việc lựa chọn của việc dự đoán các block có các kích cỡ khác nhau so với block

E hiện tại:

Hình vẽ 2.13: Vị trí của block hiện tại và vị trí của các block kế cận (cùng kích thước block) (adsbygoogle = window.adsbygoogle || []).push({});

Hình vẽ 2.14: Vị trí của block hiện tại và vị trí của các block kế cận (khác kích thước)

a. Nếu các block được truyền bao gồm cả kích thước 16x8 và 8x16, MVp là trung bình của các véc-tơ chuyển động của các block A, BC.

b. Đối với các block 16x8, MVp của block 16x8 phía trên được dự đoán từ B

và MVp của block 16x8 phía dưới được dự đoán từ A.

c. Đối với các block 8x16, MVp của block 8x16 bên trái được dự đoán từ A và MVp của block 8x16 phía dưới được dự đoán từ C

d. Đối với các MB được giữ nguyên, một véctơ 16x16 được tạo ra như trong trường hợp (a) ở trên.

Nếu một hoặc nhiều hơn các block được truyền đi trước đó (hình vẽ 2.14) không có sẵn thì việc chọn lựa MVp sẽ được sửa đổi theo. Ở bộ giải mã, véc-tơ được dự đoán MVp được hình thành theo cùng cách và được bổ sung vào véc-tơ sai khác đã được giải mã MVD. Trong trường hợp MB được giữ nguyên và không có sai khác, véc-tơ được giải mã và một MB bù chuyển động được tạo ra bằng việc sử dụng MVp như là véc-tơ chuyển động.

Bộ nén lựa chọn mode dự đoán cho mỗi block dựa vào sự khác nhau tối thiểu giữa block cần được dự đoán và block sau khi đã được dự đoán.

2.3.3.1. Các mode dự đoán cho block 4x4 (đối với thành phần độ chói)

Hình vẽ 2.15 chỉ ra một block 4x4 (thành phần độ chói) cần được dự đoán. Các mẫu a, b, c,…, p của block dự đoán P được tính toán dựa trên các mẫu A, ..., M. Các mẫu A, .., M là các mẫu nằm phía trên và bên trái của P (là các mẫu đã được giải mã hoá và được khôi phục lại) được sử dụng làm thông tin tham chiếu cho dự đoán.

Hình vẽ 2.15: Gán nhãn các mẫu dự đoán (4x4)

Các mode dự đoán trong trường hợp này bao gồm:

­ Mode 0: Các mẫu trên A, B, C, D được ngoại suy theo chiều dọc.

­ Mode 1: Các mẫu bên trái I, J, K, L được ngoại suy theo chiều ngang.

­ Mode 2: Tất cả các mẫu trong P đươc dự đoán là trung bình của các mẫu A,…,

DI,…, L.

­ Mode 3: Các mẫu được nội suy ở góc 450

giữa phía dưới bên trái và phía trên bên phải.

­ Mode 4: Các mẫu được ngoại suy ở góc 450 xuống và bên phải.

­ Mode 5: Các mẫu được ngoại suy ở góc xấp xỉ 26,60 phía bên trái theo chiều dọc.

­ Mode 6: Ngoại suy ở góc xấp xỉ 26,60 phía bên dưới theo chiều ngang.

­ Mode 7: Ngoại suy hoặc nội suy ở góc xấp xỉ 26,60 phía bên phải theo chiều dọc.

Hình vẽ 2.16: Các mode dự đoán Intra4x4 (thành phần độ chói)

Các mũi tên trong hình vẽ 2.16 chỉ ra hướng dự đoán trong mỗi mode. Đối với các mode 3, .., 8, các mẫu dự đoán tạo nên từ một giá trị trung bình mang trọng số của các mẫu dự đoán A, ..., M. Ví dụ, nếu mode 4 được lựa chọn mẫu phía trên bên phải của P (gán nhãn “d”) được dự đoán bởi: d = round(B/4 + C/2+D/4).

2.3.3.2. Các mode dự đoán Intra16x16 (đối với thành phần độ chói)

Khác với dự đoán Intra4x4, mode dự đoán Intra16x16 của thành phần độ chói được thực hiện theo bốn mode như sau:

­ Mode 0: Ngoại suy từ các mẫu phía trên (H)

­ Mode 1: Ngoại suy từ các mẫu bên trái (V)

­ Mode 2: Trung bình của các mẫu phía trên và bên trái (H+V)

­ Mode 3: Một hàm tuyến tính “phẳng” sử dụng để lọc đối với các mẫu phía trên, bên trái H và V. Điều này được thực hiện trong các vùng có sự thay đổi rất ít của thành phần chói. (adsbygoogle = window.adsbygoogle || []).push({});

Hình vẽ 2.18: Các mode dự đoán Intra16x16 (thành phần độ chói)

2.3.3.3. Các mode dự đoán Intra8x8 (đối với thành phần sắc độ)

Mỗi block 8x8 của thành phần sắc độ sử dụng phương pháp dự đoán Intra được dự đoán từ các mẫu thành phần sắc độ phía trên và bên trái đã được giải mã trước đó. Cả hai thành phần sắc độ đều sử dụng cùng một mode dự đoán. Có bốn mode dự đoán tương tự với bốn mode dự đoán Intra16x16 của thành phần độ chói như đã được trình bày trong phần trước.

2.3.3.4. Báo hiệu trong các mode dự đoán Intra

Việc chọn mode dự đoán Intra cho mỗi block 4x4 phải được thông báo cho bộ giải nén và điều này có thể yêu cầu một lượng lớn bit. Tuy nhiên, các mode Intra đối với các block 4x4 lân cận thường có liên quan với nhau. Chẳng hạn: đặt A, B và E là các block bên trái, phía trên và hiện tại một cách tương ứng (như trong hình 2.13). Nếu các A và B được mã hoá và được dự đoán trước đó bằng việc sử dụng mode 1 thì mode phù hợp nhất cho block E (block hiện tại) cũng là mode 1.

Đối với mỗi block E hiện tại, bộ nén và giải nén lựa chọn các mode dự đoán phù hợp nhất có thể. Nếu như các block lân cận này không có sẵn (bên ngoài slice hiện thời hoặc không được mã hoá trong mode Intra4x4), giá trị tương ứng A hoặc B được đặt là 2 (mode dự đoán DC).

Bộ giải nén gửi một cờ thông báo cho mỗi block 4x4 (prev-intra4x4-pred-mode). Nếu cờ là “1”, mode dự đoán có khả năng nhất được sử dụng. Nếu cờ là 0, một thông số khác (rem-intra4x4-pred-mode) được gửi để chỉ thị về sự thay đổi mode. Nếu rem- intra4x4-pred-mode nhỏ hơn mode hiện thời khả dụng nhất thì khi đó mode dự đoán được đặt là rem-intra4x4-pred-mode. Ngược lại, mode dự đoán được đặt là (rem- intra4x4-pred-mode+1). Theo cách này, chỉ có tám giá trị của rem-intra4x4-pred-mode là được sử dụng (từ 0 tới 7) để báo hiệu cho mode Intra hiện thời (từ mode 0 tới mode 8).

Mode dự đoán Intra đối với thành phần độ chói hoặc thành phần sắc độ được báo hiệu hoá trong tiêu đề của MB và việc mã hoá của mode là không cần thực hiện trong các trường hợp này.

Trong bộ nén, tuỳ thuộc vào đặc tính của các MB trong mỗi khung hình cũng như các khung hình tham chiếu tương ứng mà mode dự đoán Intra hay Inter được lựa chọn. Nếu vùng hình ảnh là đồng nhất thì mode dự đoán Intra là phù hợp. Nếu vùng hình ảnh chứa các thông tin chi tiết hơn thì phương pháp dự đoán Inter là phù hợp [3].

Trong mode dự đoán Intra có 13 mode dự đoán khác nhau còn trong mode dự đoán Inter cũng có 7 mode dự đoán khác nhau. Việc lựa chọn mode thích hợp nhất cho mỗi tình huống dự đoán cho phép bộ nén tối ưu hoá được hiệu quả nén của nó. Tuy nhiên, việc sử dụng nhiều mode cũng đồng nghĩa với việc làm tăng độ phức tạp trong tính toán của nén.

Đối với chuẩn H.264 các thuật toán quyết định mode được đưa ra cho phép cải thiện được tốc độ tính toán và nâng cao hiệu quả của bộ nén.

Các thuật toán quyết định mode của H.264/AVC có thể được phân làm hai loại:

­ Lựa chọn mode thích hợp bằng việc sử dụng một số đặc tính của dữ liệu video.

­ Sử dụng mối tương quan giữa các mode và dự đoán mode tốt nhất thông qua các mode đã được kiểm tra.

Trong thực tế, thuật toán quyết định mode thường bao gồm cả loại trên.

Do sự phức tạp trong tính toán của việc xác định mode, nhiều thuật toán quyết định mode nhanh được đề cập nhằm giảm độ phức tạp tính toán và thời gian mã hóa. Mục tiêu là giảm số mode được kiểm tra bằng việc sử dụng các đặc trưng của dữ liệu hỗ trợ cho việc đưa ra và thực hiện các quyết định mode.

Chuẩn nén H.264 sử dụng các phân dạng MB theo cấu trúc cây: tất cả các mode có thể được phân vào 4 nhóm như sau: {SKIP}, {16x16, 16x8, 8x16}, {8x8, 8x4, 4x8, 4x4} và {INTRA4x4, INTRA16x16}. Thông thường mode SKIP được kiểm tra trước tiên bởi vì với mode này có nghĩa là MB 16x16 chuyển động bằng không và không cần mã hoá dữ liệu dư thừa. Đây là một mode đơn giản nhất. Như vậy ở giai đoạn ban đầu ta có thể loại bỏ hết các tính toán, bù chuyển động và dự đoán intra. Nếu mode SKIP được lựa chọn nó sẽ được xem như mode tối ưu nhất.

Ngược lại mode tối ưu sẽ được xác định dựa vào thông số:

COSTmode =SAD(cur,ref,mode))+λmode*R(cur,rec,mode) (2.6)

Trong đó:

­ SAD là tổng các sai khác tuyệt đối giữa các mẫu trong các block được kiểm tra.

­ mode: xác định các kích thước block: 16x16, 16x8, 8x16, 8x8, 8x4, 4x8, 4x4.

­ λmode: hệ số điều chỉnh (liên quan tới thông số lượng tử hoá)

­ R: biểu thị số bít dùng cho việc mã hoá.

Phần dưới đây là mô tả thuật toán và lưu đồ của quyết định mode: Mô tả thuật toán:

1- Quyết định mode SKIP

Nếu COSTskip < TSKIP (ngưỡng quyết định) mode SKIP được chọn như là mode thích hợp nhất và chuyển sang bước 6, ngược lại chuyển sang bước 2.

2- Quyết định mode Intra hay Inter

So sánh giữa hai mode để tìm ra mode phù hợp nhất là Intra hay Inter:

­ Đối với mode Intra: nhóm mode phù hợp nhất được lựa chọn là {INTRA4x4 và INTRA16x16} (adsbygoogle = window.adsbygoogle || []).push({});

­ Đối với mode Inter: nhóm mode phù hợp nhất được lựa chọn trong bước 3 sẽ là nhóm mode phù hợp nhất.

3- Chọn nhóm mode Inter tốt nhất

Thực hiện ước lượng chuyển động trên các kích cỡ block 16x16 và 8x8 để xác định COST16x16, COST8x8.

Nếu (COST16x16 < COST8x8) thì nhóm mode Inter tốt nhất là {8x8, 8x4, 4x8, 4x4}, ngược lại sẽ là nhóm {16x16, 16x8, 8x16}.

Xác định dữ liệu dư thừa của các mode khác nhau.

4- Sử dụng đặc tính dữ liệu để tạo dự đoán mode phù hợp nhất trong nhóm mode

Quyết định mode Inter: Sử dụng dữ liệu dư thừa để dự đoán mode phù hợp nhất trong nhóm mode.

6- Chọn mode tốt nhất giữa tất cả các mode đƣợc chọn

Thực hiện so sánh giữa tất cả các chi phí mode được chọn trong các bước trước và chọn ra một mode tối ưu:

­ Bƣớc 1: Đối với quyết định mode SKIP, chúng ta sử dụng một ngưỡng là TSKIP. Ngưỡng này sẽ thay đổi một cách thích ứng với các tham số lượng tử hóa (TSKIP=QP*delta). Giá trị của delta là một giá trị được tìm theo kinh

Một phần của tài liệu Thuật toán deblocking trong xử lý video nén theo chuẩn h 264 (Trang 29)