Khi sử dụng một biến đổi block cho việc nén dư thừa, các lỗi trong quá trình nén càng gần biên càng lớn. Các con số sau chỉ ra một ví dụ về lỗi phân bố trong block 4x4:
Bảng 3.2: Ví dụ về các giá trị mẫu trong một block
Với mỗi block có thể thấy rằng các mẫu bên trong và một vài mẫu xung quanh bổ sung làm trọng số cho việc xây dựng lại các mẫu ở đường biên tốt hơn. Đó cũng là lý do mà một mẫu ở phía biên có trọng số ít hơn. Dẫn đến một kết quả là sự phân bố lỗi không đồng đều, đây là một tiềm năng cho sự cải tiến chất lượng bằng việc lọc các đường biên của block.
Bộ lọc Deblocking theo chuẩn H.264/MPEG-4 AVC phù hợp với một vài mức:
Ở mức Slice: chiều dài toàn bộ của bộ lọc có thể được điều chỉnh theo các đặc tính riêng của các chuỗi video.
Ở mức đường biên block: chiều dài bộ lọc tuỳ thuộc vào quyết định dự đoán Intra/Inter, sự khác nhau về chuyển động, sự có mặt của các dư thừa được mã hoá trong từng block cụ thể. Bộ lọc mạnh nhất được áp dụng cho các MB với các đặc tính phẳng để loại bỏ các “tiling artifacts”.
Ở mức điểm ảnh (mẫu): các giá trị mẫu và các ngưỡng (phụ thuộc vào bộ lượng tử hóa) mà có thể xác định dừng việc lọc cho mỗi điểm riêng rẽ.
3.2.2. Tính thích ứng mức đƣờng biên của bộ lọc
122 107 106 111 103 102 101 112 106 100 98 108 118 105 106 120
Bảng 3.3: Các điều kiện xác định giá trị BS
Các điều kiện và các kiểu block BS
Một trong các block là Intra và biên của
nó cũng là biên của MB 4
Một trong các block là Intra 3 Một trong các block được mã hoá dư
thừa 2
Sự dịch chuyển của block ≥ khoảng
cách 1 mẫu thành phần độ chói 1 Bù chuyển động từ các khung hình tham
chiếu khác nhau 1
Các trường hợp khác 0
Trong thuật toán lọc thực tế, BS xác định chiều dài của bộ lọc. Giá trị BS = 4 có nghĩa là một mode đặc biệt của bộ lọc được áp dụng, nó cho phép lọc mạnh nhất. Giá trị BS = 0 có nghĩa là việc lọc không được áp dụng cho đường biên này. Chế độ lọc bình thường được áp dụng cho các đường biên với BS đạt giá trị từ 1†3.
Sự thay đổi giá trị của BS cho thấy các blocking artifact mạnh nhất có thể gây ra chủ yếu bởi việc sử dụng mode dự đoán Intra trong bộ nén và giảm dần đối các dự đoán và bù chuyển động trong mã hóa Inter.
3.2.3. Tính thích ứng mức mẫu của bộ lọc
Trong bộ lọc, một điều khá quan trọng là khả năng phân biệt giữa đường biên thực tế của hình ảnh với những đường biên được tạo ra bởi việc lượng tử hóa các hệ số DCT. Để giữ nguyên được độ nét của hình ảnh thì những đường biên thực của ảnh phải được giữ nguyên và không được lọc bỏ trong khi các đường biên giả thì cần phải được giảm thiểu và loại bỏ.
Để phân loại được hai trường hợp này, các điểm ảnh qua các đường biên phải được phân tích và so sánh. Các giá trị mẫu bên trong hai khối 4x4 liền kề: p3, p2, p1, p0 và q0, q1, q2, q3 với đường biên thực tế giữa p0 và q0 được chỉ ra trong hình vẽ 3.3. Có thể có tới ba giá trị mẫu cho thành phần độ chói và một cho thành phần sắc độ ở mỗi phía của đường biên là có thể bị sửa đổi bởi quá trình lọc.
q0 q1 q2 p2 p1 p0 p3 q3
Hình vẽ 3.3: Mô tả đường biên giữa các block mang tính trực quan
Như đã đề cập trong phần trước, việc lọc không được thực hiện đối với các đường biên có giá trị BS = 0. Đối với các đường biên mà các giá trị BS khác 0, một cặp thông số phụ thuộc quá trình lượng tử hóa được sử dụng để làm tham chiếu cho việc xác định khi nào thì tập hợp các mẫu được lọc là α và β. Việc lọc được thực hiện trên một dòng các mẫu chỉ thực hiện nếu thỏa mãn ba điều kiện sau:
|p0-q0| < α(IndexA) (3.1) |p1-p0| < β(IndexB) (3.2) |q1-q0| < β(IndexB) (3.3) Trong các điều kiện này, cả hai bảng giá trị ngưỡng α và β đều phụ thuộc vào thông số lượng tử hóa được áp dụng qua đường biên, cũng như là bộ nén lựa chọn các giá trị offset có thể được sử dụng để điều khiển các tính chất của bộ lọc ở mức slice. Các giá trị chỉ số bảng này có thể được tính toán như sau:
IndexA = Min(Max(0, QP+OffsetA), 51) (3.4) IndexB = Min(Max(0, QP+OffsetB), 51) (3.5) Ở đây: (0†51) biểu diễn khoảng giá trị có nghĩa của QP.
với các nội dung khác nhau. Trong thực tế, với các giá trị được làm tròn thì khi các chỉ số IndexA < 16 hoặc IndexB tương ứng thì các hệ số α và β sẽ có giá trị là 0 và như thế bộ lọc coi như ngừng hoạt động.
Các giá trị α và β phụ thuộc vào QP và liên quan tới chiều dài của bộ lọc. Khi các giá trị ngưỡng tăng cùng với QP, các biên chứa thông tin chi tiết về nội dung sẽ có lỗi mã hóa tăng (kích thước của các artifact tăng). Số mũ của α phản ánh sự phụ thuộc của QP vào kích thước blocking artifact.
Dưới đây là bảng các giá trị của α và β được sử dụng trong chuẩn nén H.264 tương ứng với từng thông số lượng tử hoá [4]:
3.2.4. Lƣu đồ thuật toán tính giá trị BS
p và/hoặc q được
mã hoá Intra? p và q được mã hoá Intra?
Là đường biên của
MB? p và q được mã
các hệ số?
p và q với Frame tham chiếu khác nhau/có sự khác nhau về véctơ chuyển động? Đúng Sai Sai Sai BS=2 BS=3 BS=4 Đúng Đúng Sai Đúng Đúng Sai BS=0 BS=1
Hình vẽ 3.4: Lưu đồ thuật toán tính giá trị BS
3.3. Hoạt động của bộ lọc
3.3.1. Tổng quan về hoạt động lọc
Việc lọc Deblocking được thực hiện trên bốn đường biên độ dài 16 đối với thành phần độ chói và hai đường biên độ dài 8 đối với thành phần sắc độ theo chiều dọc và theo chiều ngang một cách tương ứng. Các quy tắc sau được áp dụng cho quá trình triển khai bộ lọc:
Các giá trị điểm ảnh phía trên và bên trái của MB hiện hành có thể đã được sửa đổi bởi bộ lọc thực hiện trên MB trước đó sẽ được sử dụng như là lối vào đối với bộ lọc thực hiện trên MB hiện hành và có thể bị sửa đổi tiếp trong suốt quá trình lọc đối với MB hiện hành.
Việc lọc diễn ra trên một MB được thực hiện theo thứ tự như sau: hướng ngang của các đường biên dọc được thực hiện trước tiên, sau đó là theo hướng dọc của các đường biên ngang. Cả hai hướng lọc trên mỗi MB phải được kiểm soát trước khi di chuyển sang MB kế tiếp. Các MB được lọc theo thứ tự quét lần lượt qua mỗi khung hình.
Đối với mỗi MB thành phần độ chói, đường biên bên trái của MB được lọc đầu tiên sau đó lần lượt từ trái qua phải là ba đường biên tiếp theo bên trong của MB. Tương tự, đường biên trên cùng của MB được lọc trước tiên và theo sau đó lần lượt từ trên xuống dưới là ba đường biên phía bên trong của MB. Thành phần sắc độ cũng được lọc theo thứ tự tương tự với một đường biên bên ngoài và một đường biên bên trong theo mỗi hướng đối với mỗi block 8x8 của thành phần sắc độ.
Hai chế độ lọc được lựa chọn dựa vào thông số BS: mode lọc đặc biệt cho phép lọc mạnh nhất được áp dụng khi BS=4 và mode lọc thông thường được áp dụng cho các trường hợp khác với BS<4.
Đối với cả hai mode, giá trị ngưỡng β được sử dụng tương đương với hai điều kiện bổ xung theo khía cạnh không gian để xác định sự mở rộng của việc lọc trong trường hợp các mẫu của thành phần độ chói:
|p2-p0| < β(IndexB) (3.8) |q2-q0| < β(IndexB) (3.9)
Khi những điều kiện này thỏa mãn, nghĩa là ít có thay đổi về cường độ ở mỗi phía của đường biên, chiều dài của bộ lọc được tăng lên.
3.3.2. Việc lọc đối với các đƣờng biên có BS từ 1÷3
Trong chế độ lọc này, các giá trị sau khi được lọc của p0 và q0 là:
p0‟=p0 + ∆0 (3.10)
q0‟=q0 - ∆0 (3.11)
Ở đây ∆0 được tính toán theo quá trình hai bước, bắt đầu với việc tính toán giá trị khởi tạo ∆0i. Giá trị khởi tạo ∆0i được tính toán dựa trên các giá trị mẫu ngang qua các đường biên:
∆0i = (4(q0-p0)+(p1-q1)+4) >> 3 (3.12) Các giá trị của p1 và q1 chỉ được sửa đổi nếu điều kiện (3.8) hoặc (3.9) tương ứng là đúng. Ngược lại, các giá trị đó sẽ không bị thay đổi.
Nếu điều kiện (3.8) đúng, khi đó giá trị p1‟ là giá trị được lọc của p1 sẽ được tính toán như sau:
p1‟= p1 + ∆p1 (3.13)
Một cách tương tự, nếu điều kiện (3.9) đúng, q1‟ sẽ được lọc và được tính như sau:
q1‟= q1 + ∆q1 (3.14)
Các giá trị này cũng được tính toán theo quá trình hai bước. Giá trị khởi tạocho việc tính toán p1‟ như sau:
∆p1i = (p2 + ((p0 + q0 + 1) >> 1) - 2p1) >> 1 (3.15). Giá trị ∆q1i thu được theo cách thay thế q2 và q1 cho p2 và p1 một cách tương ứng.
Nếu các giá trị trung gian ∆0i, ∆p1i và ∆q1i được sử một cách trực tiếp trong các phương trình lọc sẽ dẫn đến kết quả sai khác nhiều. Một phần có ý nghĩa của tính thích ứng của bộ lọc (đạt được bằng việc giới hạn các giá trị ∆ này) được gọi là cắt (clipping).
Các giá trị ∆ sử dụng cho việc lọc các mẫu bên trong sẽ bị cắt nếu nằm ngoài khoảng (-c1, c1). Ở đây c1 là thông số được xác định dựa trên bảng thông số mà được chỉ thị theo hai hướng, với giá trị của IndexA khi được tính toán để xác định α được sử dụng theo một hướng và giá trị BS được sử dụng trong hướng khác. Giá trị c1 tăng khi việc lọc mạnh hơn, khi giá trị của IndexA và BS tăng. Cuối cùng, các giá trị để lọc p1 và q1 được tính toán như sau:
∆p1 = Min(Max(-c1, ∆p1i ), c1) (3.16) ∆q1 = Min(Max(-c1, ∆q1i ), c1) (3.17)
Đối với việc lọc các mẫu ở đường biên p0 và q0, khoảng cắt áp dụng đối với ∆0i được xác định dựa vào giá trị c1 và các điều kiện (3.8) và (3.9). Việc cắt thực hiện với giá trị c0 trước tiên được đặt bằng c1 và sau đó được tăng lên 1 mỗi khi điều kiện (3.8)
Đối với việc lọc thành phần sắc độ, chỉ các giá trị p0 và q0 là có thể được sửa đổi. các giá trị này được lọc theo cùng cách với các giá trị mẫu của thành phần độ chói. Giá trị cắt c0 được đặt bằng c1+1. Theo cách này, người ta không cần các điều kiện tương đương (3.8) và (3.9) đối với các đường biên với BS<4, và do đó không cần phải truy nhập đến các giá trị mẫu p2 và q2.
Bảng 3.5: Các giá trị c0 sử dụng trong H.264
3.3.3. Việc lọc đối với các đƣờng biên có BS = 4
Mã hóa Intra trong H.264/MPEG-4 AVC sử dụng các mode dự đoán Intra16x16 đối với thành phần độ chói khi mã hóa các vùng hình ảnh gần như đồng nhất. Điều này gây ra các blocking artifacts biên độ nhỏ ở biên của MB. Để bù lại ảnh hưởng của các hiệu ứng này, các bộ lọc mạnh hơn được áp dụng trên các biên giữa hai MB.
Đối với các thành phần độ chói, quyết định lựa chọn giữa một bộ lọc rất mạnh 4 hay 5-tap (sửa đổi mẫu đường biên và hai mẫu bên trong trên mỗi phía) hoặc một bộ lọc 3-tap yếu hơn (sửa đổi chỉ với mẫu ở đường biên) được dựa trên nội dung của hình ảnh.
Bộ lọc mạnh được áp dụng khi điều kiện ràng buộc sau được thỏa mãn: |p0-q0| < (α >> 2) + 2. (3.19) Chú ý rằng điều kiện (3.19) tương đương với điều kiện (3.1) nhưng ràng buộc chặt hơn ở giá trị mẫu lớn nhất ngang qua đường biên.
p0‟= (p2+2p1+2p0+2q0+2q1+q1+4) >> 3 (3.20) p1‟= (p2+p1+p0+q0+2) >> 2 (3.21) p2‟= (2p3+3p2+p1+p0+q0+ 4) >> 3 (3.22) Các giá trị q bị thay đổi theo cùng một cách tương tự.
3.3.4. Lƣu đồ thuật toán của bộ lọc Deblocking
Start (BS>0)&&(|p0-q0|<α) &&(|p1-p0|<β) |p2-p0|<β |q2-q0|<β BS BS p0'=p0+∆0 q0'=q0-∆0 p0‟=(2p1+p0+q1+2)>>2 q0‟=(2q1+q0+p1+2)>>2 p0'=p0+∆0 q0'=q0-∆0 q1'=q1+∆q1 |p2-p0|<β p0‟=(2p1+p0+q1+2)>>2 q0‟=(2q1+q0+p1+2)>>2 p0‟=(2p1+p0+q1+2)>>2 q0‟=(q2+2q1+2q0+2p0+p1+4)>>3 q1'=(2q2+q1+q0+p0+2)>>2 q2'=(2q3+3q2+q1+q0+p0+4)>>3 Sai Đúng Sai Đúng Đúng Sai BS=4 0<BS<4 BS=4 Đúng Sai I 0<BS<4
|q2-q0|<β BS BS p0'=p0+∆0 q0'=q0-∆0 p1'=p1+∆p1 p0‟=(2p1+p0+q1+2)>>2 q0‟=(2q1+q0+p1+2)>>2 p0'=p0+∆0 q0'=q0-∆0 p1'=p1+∆p1 q1'=q1+∆q1 p0‟=(2p1+p0+q1+2)>>2 q0‟=(2q1+q0+p1+2)>>2 p0‟=(p2+2p1+2p0+2q0+q1+4)>>3 p1‟=(2p1+p0+q1+2)>>2 p2‟=(2p3+3p2+p1+p0+q0+4)>>3 q0‟=(q2+2q1+2q0+2p0+p1+4)>>3 q1'=(q2+q1+q0+p0+2)>>2 q2'=(2q3+3q2+q1+q0+p0+4)>>3 Đúng Sai BS=4 0<BS<4 BS=4 Đúng Sai I |p0-q0| <(α>>2)+2 p0‟=(2p1+p0+q1+2)>>2 q0‟=(q2+2q1+2q0+2p0+p1+4)>>3 q1'=(2q2+q1+q0+p0+2)>>2 q2'=(2q3+3q2+q1+q0+p0+4)>>3 |p0-q0| <(α>>2)+2 Sai Đúng 0<BS<4
CHƢƠNG 4: CHƢƠNG TRÌNH MÔ PHỎNG
4.1. Giới thiệu
Chương trình mô phỏng được xây dựng dựa trên ngôn ngữ lập trình Visual C++ 6.0.
Chương trình thực hiện một số chức năng sau:
Từ một file video: “Test.avi” được ghi lại bởi một PC camera theo định dạng YUY2 không nén, 30 khung hình/s, độ phân giải 640x480. Chương trình thực hiện phân tách dòng dữ liệu thành các khung hình của thành phần độ chói Y, hai thành phần sắc độ U và V riêng rẽ. Sau đó, để đơn giản hoá chương trình chỉ tập trung vào phân tích và mô phỏng các thuật toán dựa trên các khung hình hình đặc trưng là thành phần độ chói Y.
Từ khung hình đầu tiên đọc được, chương trình thực hiện việc nén theo miền không gian (Intra coding) với kích thước block 4x4 ở mode DC. Dữ liệu dư thừa thu được sau mã hoá Intra được biến đổi và lượng tử hoá sẽ được biến đổi và lượng tử hoá ngược để xây dựng lại dữ liệu sai khác. Phần dữ liệu này sau đó lại được kết hợp lại với các giá trị trọng số trung bình để thu được khung hình ảnh ban đầu như là kết quả của quá trình giải nén. Khung hình xây dựng lại sau đó sẽ được lọc theo thuật toán Deblocking và được sử dụng làm khung hình tham chiếu cho quá trình nén của khung hình tiếp theo.
Các khung hình tiếp theo sẽ được thực hiện nén sử dụng dự đoán Inter: Khung hình được phân chia thành các block với kích thước thay đổi 4x4, 4x8, 8x4, 8x8, 8x16, 16x8 hoặc 16x16 tuỳ thuộc vào mức độ đồng đều hoặc chi tiết của hình ảnh. Các block này sau đó được tìm kiếm trong vùng tìm kiếm đã được xác định trước trong khung hình tham chiếu để tìm ra block tương ứng phù hợp nhất. Sau đó, lấy hiệu các giá trị mẫu tương ứng trong mỗi block của hai khung hình này. Thông tin lối ra sẽ bao gồm: vị trí block trong khung hình hiện tại so với khung hình tham chiếu. Khung hình dư thừa sau khi đã thực hiện các phép biến đổi và biến đổi ngược (DCT và
Giao diện của chương trình:
Chương trình gồm một cửa sổ chính: có hai thanh công cụ Parameter và Run:
Hình vẽ 4.1: Giao diện chính của chương trình
Thanh công cụ Parameter cho phép thiết lập các thông số của bộ nén bao gồm:
Thông số lượng tử hoá (QP): Trong chương trình các thông số này được lược bớt chỉ sử dụng một số giá trị tiêu biểu bao gồm: QP = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 18, 24, 36, 42, 48, 51.
Kích thước cửa sổ search: cho phép thiết lập kích thước vùng tìm kiếm block phù hợp trong khung hình tham chiếu.
Các thông số ngưỡng: Alpha_MB, Alpha_8x16/16x8, Alpha_8x8, Alpha_4x8, Alpha_4x4 xác định các ngưỡng để phân chia MB thành các block với các kích thước thay đổi 4x4, 4x8, 8x4, 8x8, 8x16, 16x8 hoặc 16x16.
Hình vẽ 4.2: Giao diện chính nhập thông số cho chương trình
Khung hình_Y (Khung hình thành phần độ chói): xác định thứ tự khung hình quan sát ở chế độ dự đoán Inter trong một chuỗi các khung hình tính từ khung hình đầu tiên.
Các ô chọn MB và 4x4, 4x8, 8x8, 8x16, 16x16: cho phép chương trình thực hiện chế độ dự đoán Inter với kích thước duy nhất MB hoặc các kích