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 block hiện tại so với Frame tham
chiếu Phân chia block
8x16 hoặc 16x8 thành 2 block 8x8
(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 8x8
I
Frame tham chiếu
Frame tham chiếu
I
MSE<ngưỡng
Giữ nguyên kích thước block vừa
phân chia
Tìm block phù hợp 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 trong Frame
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 block hiện tại so với Frame tham
chiếu Phân chia block
8x16 hoặ 16x8 thành 2 block 8x8
(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 8x8
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 trong Frame
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 block hiện tại so với Frame tham
chiếu MSE(8x8)
<ngưỡng Phân chia block
8x8 thành 2 block 4x8 hoặc 8x4 (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 4x8 hoặc 8x4 MSE<ngưỡng Giữ nguyên kích thước block vừa
phân chia
Tìm block phù hợp Lưu thông tin vị trí Phân chia block
4x8 hoặc thành 2 block 4x4 (Lưu lại thông tin về cách
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 trong Frame hiện tại và Frame
tham chiếu
Trừ các giá trị mẫu Lưu thông tin về
Frame tham chiếu
Frame tham chiếu Đúng Sai Đúng Sai Đúng Sai
Việc lọc Deblocking được thực hiện theo sơ đồ đã chỉ ra trong chương 3.
4.3. Các kết quả lối ra của chƣơng trình
Lối ra của chương trình bao gồm các hình ảnh (thành phần độ chói) sau mỗi quá trình biến đổi và các giá trị PSNR của các ảnh sau khi thực hiện biến đổi khi sử dụng bộ lọc và khi không sử dụng bộ lọc.
Sau đây là một số hình ảnh kết quả sau khi thực hiện các phép biến đổi trong chương trình với các thông số: QP = 18, kích thước cửa sổ tìm kiếm là 8, sử dụng mode dự đoán Intra và mode dự đoán Inter với các kích thước block thay đổi.
4.3.1. Kết quả hình ảnh thu đƣợc trong quá trình phân tích khung hình đầu tiên
Ảnh khung hình đầu tiên nguyên bản:
Ảnh dữ liệu dư thừa của khung hình đầu tiên sau khi thực hiện dự đoán Intra:
Hình vẽ 4.8: Khung hình thành phần độ chói sau khi dự đoán Intra4x4 mode DC
Sau thực hiện biến đổi ngược IDCT:
Hình vẽ 4.10: Khung hình thành phần độ chói sau khi thực hiện IDCT và lượng tử hóa ngược
Khung hình khôi phục lại không sử dụng Filter:
Hình vẽ 4.11: Khung hình thành phần độ chói sau khi khôi phục lại nhưng không sử dụng bộ lọc
Khung hình khôi phục lại có sử dụng bộ lọc:
Hình vẽ 4.12: Khung hình thành phần độ chói sau khi khôi phục lại có sử dụng bộ lọc