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 thước thay đổi.
Ô chọn Intra: cho phép chương trình thực hiện phép biến đổi trực tiếp trên khung hình hoặc thực hiện dự đoán Intra trên các block 4x4 ở mode DC. Lối ra của chương trình là các file ảnh theo định dạng BITMAP.
4.2. Sơ đồ khối của chƣơng trình mô phỏng
Sơ đồ khối tổng quan:
Start Đọc Frame, phân tách Frame chứa thành phần độ chói Y Frame Y đầu tiên? Thực hiện nén
theo miền không gian (Intra coding)
Thực hiện nén theo miền thời gian (Inter coding)
Biến đổi và lượng tử hoá
Biến đổi và lượng tử hoá ngược
Deblocking Filter Biến đổi và lượng
tử hoá
Bộ đệm Frame tham chiếu
+ +
Frame chứa thông tin dư thừa
Đúng Sai
Thông tin về Frame dự đoán Intra
Khôi phục lại Frame dự đoán
Intra
Điều khiển đọc Frame
Khôi phục lại Frame dự đoán
Inter Thông tin về Frame dự đoán Inter
Deblocking Filter Biến đổi và lượng
tử hoá ngược
Sơ đồ khối mô tả quá trình Intra coding mode dự đoán DC 4x4 được sử dụng trong chương trình mô phỏng:
Phân chia Frame Y đầu vào thành 160x120 block4x4
Trừ giá trị của các mẫu trong block cho giá trị trung Tính toán giá trị trung bình mẫu cho từng block4x4
Frame chứa các thông tin sai khác Các giá trị DC (giá
trị trung bình) tương ứng của các
block4x4
Đi tới bộ biến đổi và lượng tử hoá Đi tới bộ khôi phục lại
Frame dự đoán Intra
Hình vẽ 4.4: Sơ đồ khối thực hiện chức năng Intra coding
Sơ đồ khối mô tả quá trình nén liên ảnh (Inter coding) được sử dụng trong chương trình mô phỏng:
Phân chia Frame Y đầu vào thành các Macroblock 16x16 MSE(MB) <ngưỡng Frame thứ n được đọc từ file Tính toán giá trị MSE của từng MB Giữ nguyên MB Tìm kiếm MB phù hợp nhất trong vùng tìm kiếm của Frame tham chiếu so với MB hiện tại Khởi tạo các giá trị
ngưỡng, kích thước cửa sổ tìm
kiếm….
Lưu thông tin vị trí tương đối giữa MB
trongFrame hiện tại và Frame tham
chiếu
Trừ các giá trị mẫu trong MB hiện tại cho MB tìm được
Lưu thông tin về sự sai khác gữa MB hiện tại so với Frame tham chiếu Phân chia MB
thành 2 block 8x16 hoặc 16x8 (Lưu lại thông tin về cách phân chia) Tính toán giá trị MSE của các block 8x16 MSE(8x16)< ngưỡng Giữ nguyên kích thước block vừa
phân chia Tìm block phù hợp
nhất trong vùng tìm kiếm của Frame tham chiếu
so với block hiện tại
Lưu thông tin vị trí tương đối giữa block trongFrame hiện tại và Frame
tham chiếu Trừ các giá trị mẫu
trong block hiện tại cho block tìm
được
Lưu thông tin về sự sai khác gữa