You are on page 1of 43

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

─────── * ───────

BÁO CÁO MÔN HỌC

XỬ LÝ DỮ LIỆU ĐA PHƯƠNG TIỆN

Đề tài: Nén video theo chuẩn ITU-T

Giảng viên hướng dẫn: PGS. TS Nguyễn Thị Hoàng Lan

Nhóm sinh viên: Nguyễn Công Tuấn Anh 20140120


Nguyễn Tuấn Anh 20140177
Nguyễn Văn Dân 20140649

Hà Nội, tháng 5 năm 2018


Phân công công việc

Tên sinh viên Công việc


Nguyễn Văn Dân 1. Tìm hiểu chung về các chuẩn nén ITU-T, chuẩn
H. 26X
2. Phân tích, so sánh sơ đồ nén video H.261 với
MPEG-1
Nguyễn Công Tuấn Anh 1. Tìm hiểu về dòng dữ liệu, sơ đồ nén và giải nén
trong chuẩn nén video H. 261
2. Xây dựng sơ đồ thuật toán nén ảnh video theo
chuẩn H. 261
Nguyễn Tuấn Anh 1. Cài đặt thử nghiệm thuật toán nén video H.
261, đo lường hiệu năng giải pháp nén này
LỜI NÓI ĐẦU

Trong truyền thông, xử lí dữ liệu đa phương tiện thì việc nén dữ liệu là vô
cùng quan trọng, và video là một trong số đó. Có nhiều phương pháp nén
video khác nhau như MPEG, ITU-T, SVC. Với mong muốn tìm hiểu về chuẩn
nén video H. 261 nói riêng và H. 26x nói chung, chúng em lựa chọn đề tài
để tìm hiểu là: “Nén ảnh video theo chuẩn H. 261”.
Báo cáo gồm 5 phần:
- Phần 1: Tìm hiểu chung về các chuẩn nén ITU-T, chuẩn H26X (H. 261, H.
263, H. 264).
- Phần 2: Tìm hiểu về dòng dữ liệu, sơ đồ nén và giải nén trong chuẩn nén
video H. 261.
- Phần 3: Phân tích so sánh sơ đồ nén video H. 261 với video MPEG-1.
- Phần 4: Xây dựng sơ đồ thuật toán nén ảnh video theo chuẩn H. 261.
- Phần 5: Cài đặt thử nghiệm thuật toán nén video H. 261, đo lường hiệu
năng giải pháp nén này.
Mặc dù đã có những cố gắng để hoàn thành đề tài, nhưng do chúng em
chưa có nhiều kinh nghiệm trong lĩnh vực này nên không thể tránh khỏi
những thiếu sót. Chúng em rất mong nhận được ý kiến đóng góp của cô để
hoàn thành tốt hơn đề tài, chúng em xin trân thành cám ơn.
Nhóm sinh viên thực hiện.
PHẦN 1: Tìm hiểu chung về các chuẩn nén ITU-T,
chuẩn H26X (H. 261, H. 263, H. 264)
1. Tổ chức ITU-T
- Liên hiệp (liên minh) viễn thông quốc tế, viết tắt là ITU (International
Telecommunication Union) là một tổ chức của liên hiệp quốc nhằm tiêu chuẩn
hóa viễn thông quốc tế.
- Năm thành lập: 1865.
- Trụ sở: Geneva, Thụy Sĩ.
- Mục tiêu hoạt động: Hoạt động của ITU bao trùm tất cả các vấn đề thuộc ngành
Công nghệ viễn thông và Thông tin như: tần số vô tuyến điện, quỹ đạo vệ tinh,
hỗ trợ phát triển cơ sở hạ tầng viễn thông tại các nước đang phát triển và xây
dựng các tiêu chuẩn chung trên thế giới về kết nối các hệ thống liên lạc. ITU
cũng tham gia nghiên cứu và tìm giải pháp cho các thách thức chung trên toàn
cầu trong thời đại hiện nay như: biến đổi khí hậu và bảo mật, an toàn thông tin.
- Bộ phận:
+ ITU- T (T: Telecom -Viễn thông).
+ ITU- R (T: Radio -Vô tuyến).
+ ITU- D (D: Telecommunications Development -Phát triển viễn thông).
- Các chuẩn nén của ITU-T: Chuẩn H. 26x là chuẩn mã hóa và nén video được
đưa ra trong các khuyến nghị của ITU. Chuẩn nén video H. 26x: là chuẩn mã
hóa và nén video được đưa ra trong các khuyến nghị của ITU.
+ H. 261.
+ H. 263.
+ H. 264 (được biết đến là chuẩn MPEG – 4Part 10/AVC (Advanced Video
Coding)) do ITU – T hợp tác với ISO/ISE cùng phát triển.

Lịch sử phát triển của các chuẩn nén video


2. Chuẩn H. 261
2.1. Giới thiệu
- H. 261 là chuẩn nén video đầu tiên được ITU giới thiệu vào năm 1990, là một
phần của bộ giao thức H. 320 mô tả các thành phần khác nhau của một hệ
thống hội nghị thông qua video, được thiết kế cho các ứng dụng video
telephone và hội nghị truyền hình qua đường ISDN.
- Thiết kế cho dữ liệu ở các tốc độ bằng cấp số nhân của 64Kbit/s (Còn gọi là
p*64Kbit/s) với 1<= p <= 30 nên tốc độ dữ liệu nằm trong khoảng từ 64Kbit/s
đến 1920 Kbit/s. Với độ trễ tối đa là 150 ms. Với p=1, p=2 thì phù hợp cho
videophone, giao tiếp trực quan qua máy tính để bàn. Với p>= 6 thì phù hợp
cho hội nghị thông qua video.
- Thuật toán mã hóa: Sự lai ghép giữa việc dự đoán trước hình ảnh, biến đổi
mã, bù lại các chuyển động: Giúp làm giảm độ dư thừa về không gian và thời
gian của chuỗi video để đạt được tỷ số nén cao.
- Hỗ trợ cho hai độ phân giải: Chuỗi video được định nghĩa theo 2 chuẩn định
dạng QCIF (Quarter Common Intermediate Format) và CIF (Common
Intermediate Format). Với CIF là tiêu chuẩn cho kích thước video và hình ảnh
chứa 352x288 điểm ảnh (pixel). QCIF là tiêu chuẩn có độ phân giải bằng ¼
tiêu chuẩn CIF 172x144 pixel.
- Khi chưa nén, với định dạng CIF (yêu cầu 30fps) cần (288 x 352 x 8 + 144 x
176 x 8 + 144 x 176 x 8) x 30 = 37 Mbps. Với định dạng QCIF (yêu cầu 15fps)
cần (144 x 176 x 8 + 72 x 88 x 8 + 72 x 88 x 8) x 15 = 4.7 Mbps. Trong khi
ISDN chỉ hỗ trợ 1 x 64 Kbps tới 30 x 64 Kbps = 2 Mbps. Do đó băng thông
không đủ và nén là bắt buộc.
- Sử dụng kỹ thuật lấy mẫu 4:2:0 (trong chuẩn H.261 sử dụng hệ màu YUV, kỹ
thuật lấy mẫu này là lấy mẫu theo tỷ lệ giữa độ chói Y và 2 thành phần màu U
và V còn lại).
- Tốc độ Frame tối đa là 30 fps nhưng cũng có thể được giảm xuống phụ thuộc
vào các ứng dụng và băng thông đường truyền khác nhau.
2.2. Định dạng
- H.261 hỗ trợ hai độ phân giải là CIF (352x288) và QCIF (176x144).
- CIF được sử dụng khi p>=6, và đó là lúc sử dụng cho ứng dụng video hội nghị.
Hỗ trợ 4 kiểu: 30 fps, 15fps, 10 fps hoặc 7.5 fps.
- QCIF thường được sử dụng khi p=1 cho các ứng dụng tốc độ bit thấp như
videophone. Cũng hỗ trợ 4 kiểu 30, 15, 10, 7.5 fps.
2.3. Hệ màu và kỹ thuật lấy mẫu
- Chuẩn H.261 sử dụng hệ màu YUV, trong đó Y là tín hiệu độ chói, U và V là
hai thành phần tín hiệu màu sắc.
- Sử dụng kỹ thuật lấy mẫu 4:2:0.
2.4. Phân loại các frame
- Frame I (Intra frame): là frame đầu tiên trong chuỗi video. Nó được mã hóa
như một ảnh JPEG.
- Frame P (Predictive Frame): là frame ảnh được mã hóa dự đoán trên cơ sở
frame tham chiếu trước đó (có thể là frame Ihoặc frame P) và frame hiện tại.
- Trong H. 261 không có frame B.
2.5. Cấu trúc phân cấp
- H. 261 có một hệ thống phân cấp bao gồm
+ Image (Frame)
+ Group of Block (GOB)
+ MacroBlock (MB)
+ Block (Chứa thông tin về Y, Cb, Cr).
3. Chuẩn H. 263
3.1. Giới thiệu
- H. 263 là chuẩn mã hóa video/audio do nhóm VCEG (Video Coding Experts
Group) thuộc tổ chức ITU đưa ra vào năm 1998. H. 263 được coi là thế hệ tiếp
theo của chuẩn H. 261, cũng được dùng cho các hội nghị video trực tuyến.
- Năm 1998, ITU cải tiến chuẩn này và cho ra chuẩn H. 263v2 (còn gọi là H.
263+ hay H. 263 1998). Năm 2000, chuẩn H.263v3 ra đời (còn gọi là H. 263++
hay H. 263 2000).
- H.263 được phát triển dựa trên những kinh nghiệm được rút ra từ các chuẩn
H.261, MPEG-1 và MPEG-2. Thiết kế cơ bản giống với H.261, cộng thêm nhiều
cải tiến về khả năng nén và tính linh hoạt.
3.2. Những cải tiến của H. 263 so với H. 261
- H.263 có chất lượng video tốt hơn và tốc độ bit (lượng bit lưu trữ cho một đơn
vị thời gian ) nhỏ hơn.
- Mục tiêu của H.263 là truyền được video chất lượng chấp nhận được trên
đường truyền điện thoại với tốc độ 28.8Kbps.
- H.263 hỗ trợ độ phân giải từ 128x96 đến 1408x1152.
- H.263 có những cải tiến trong việc dự đoán các chuyển động và thuật toán
giảm dữ liệu dư thừa, phân lớp được tối hơn nhiều so với các chuẩn trước đó.
- Vector chuẩn động có độ chính xác nửa pixel.
- Thuật toán mã hóa mới, thay thế RLE và Huffman.
- Tiên đoán nâng cao: sử dụng 4 blocks 8x8 thay vì 1 block 16x16 => chi tiết
hơn.
- Tiên đoán dựa vào frame trước và sau, tương tự như MPEG.
3.3. Định dạng
- H.263 hỗ trợ độ phân giải từ 128x96 đến 1408x1152.

-
3.4. Hệ màu
- Chuẩn H.263 sử dụng hệ màu YUV.
3.5. Phân loại các frame trong H. 263
- H .263 có hai loại frame là I-Frame và P-Frame và có thêm PB Frame. PB
frame có nguồn gốc từ P và B frame và là sự kết hợp của cả hai.

3.6. Cấu trúc phân cấp


- H.263 cũng có một hệ thống phân cấp bao gồm:
+ Image (frame).
+ Group of Blocks (GOB).
+ Macroblock (MB).
+ Block (chứa thông tin về Y, Cr, Cb).
3.7. Quá trình nén
- H.263 có những cải tiến trong việc dự đoán các chuyển động và thuật toán
giảm dữ liệu dư thừa, phân lớp được tối ưu hơn nhiều so với các chuẩn trước
đó.
- Vector chuyển động trong H.263 có độ chính xác nửa pixel.

Vị trí pixel thường (1 pixel).


Vị trí một nửa pixel.
- H.263 sử dụng bù chuyển động với độ chính xác sub-pixel thay vì sử dụng bộ
lọc vòng để làm mượt các frame như trong H.261.
- Thuật toán mã hóa mới.
- Trong ước lượng chuyển động, H.263 sử dụng 4 blocks 8x8 pixels thay vì 1
block 16x16 pixels => chi tiết hơn.
- H.263 có sử dụng PB framedự đoán dựa vào frame trước và sau, tương tự
như MPEG. Do đó độ chính xác cao hơn, chất lượng video tốt hơn.
- Chuẩn H.263 có sử dụng nhiều cấu trúc GOB khác nhau hơn là H.261.
4. Chuẩn H. 264
4.1. Giới thiệu
- H.264 hay còn gọi là MPEG-4 Part 10 Advanced Video Coding (AVC) được
phát triển và chuẩn hóa bởi ISO/IEC và ITU-T. H.264/AVC bắt đầu nghiên cứu
từ năm 1998. Mục đích của H.264/AVC là nén với hiệu quả cao dựa vào bù
chuyển động dựa trên block.
- Chuẩn H.264 là một chuẩn mã hóa/ giải mã và định dạng video đang được sử
dụng rộng rãi nhất hiện nay để ghi, nén và chia sẻ video phân giải cao dựa trên
việc bù trừ chuyển động trên từng block.
- Chuẩn H. 264 được giới thiệu lần đầu vào năm 2004 và đã trở thành một trong
những chuẩn nén video phổ biến hiện nay trong việc ghi, nén và phát hình ảnh
với chất lượng hiển thị cao và tiết kiệm băng thông.
- H.264 được chấp thuận bởi ITU-T và ISO/IEC. Đây đều là những tổ chức hàng
đầu thế giới trong việc đưa ra những bộ quy chuẩn chung nhằm đồng bộ và
giúp cho các thiết bị có thể truyền tải nội dung dữ liệu qua lại với chất lượng
hiển thị tốt và tiết kiệm băng thông. Chịu trách nhiệm chính cho việc nghiên
cứu và phát triển về mảng chuẩn hóa quá trình thu, nén và phát video của 2 tổ
chức trên lần lược là các nhóm: VCEG (Video Coding Experts Group) và
MPEG (Moving Picture Experts Group).
- Một số ứng dụng của H.264 trong thực tế:
+ Ứng dụng trong đĩa Blu-ray.
+ Đầu ghi hình camera.
+ Máy quay phim.
+ Đầu thu kĩ thuật số.
+ Các dịch vụ phát video như: Youtube, Vimeo, iTunes Store…
+ Các phần mềm web như: Adobe Flash, HTML5…
+ Sử dụng trong các dịch vụ truyền hình HDTV mặt đất, cáp và vệ tinh.
4.2. Hệ màu và cấu trúc lấy mẫu
- Chuẩn H.264 sử dụng hệ màu YUV.
- Chuẩn H. 264 có các cấu trúc lấy mẫu 4:2:2, 4:1:1, 4:2:0
4.3. Cấu trúc phân cấp
- H.264/AVC Codec gồm 2 khối:Video Coding Layer và Network Abstraction
Layer (NAL).
4.4. Quá trình nén
- Bù chuyển động với khối có kích thước nhỏ được sử dụng, thường sử dụng
khối 4x4.
- Bù chuyển động với độ chính xác ¼ pixel. H.264 còn làm giảm độ phức tạp
của quá trình nội suy.
- Picture đa tham chiếu được sử dụng trong bù chuyển động và dự đoán: P-
picture và B-picture. Số lượng picture tham chiếu có thể lên tới 15 cho mức
3.0 hoặc thấp hơn và 4 picture tham chiếu cho mức cao hơn 3.0. Khi picture
đa tham chiếu được sử dụng cho dự đoán bù chuyển động, sự đóng góp của
dự báo từ các tham chiếu khác nhau nên được coi trọng và được bù bằng
lượng định trước bởi bộ mã hóa. Điều này có thể cải thiện hiệu năng nén cho
những cảnh mờ.
- Định hướng không gian dự đoán cho mã hóa intra được sử dụng để nâng cao
hiệu quả nén.
- Trong H.264 có một vài công cụ được sử dụng để nâng cao khả năng chống
lỗi.
- Trong H.264 không sử dụng khái niệm I-picture, P-picture, B-picture nữa thay
vào đó là I-slice, P-slice và B-slice.
5. Ưu điểm và nhược điểm của các chuẩn video H. 26x
5.1. Ưu điểm
- Độ trễ thấp.
- Mã hóa từng khung hình.
- Chỉ sử dụng một phần nhỏ trong bộ đệm để làm mượt (gây ra một chút trễ).
- Bitrate cố định.
- Chỉ gửi một số lượng ít các block được mã hóa intra trong mỗi khung, do đó
sự biến đổi của tốc đọ dữ liệu chỉ phụ thuộc và nội dung của video.
5.2. Nhược điểm
- Không được thiết kế cho việc ghi lại và xem lại video (quay ngược, tua nhanh).
- Hạn chế trong việc xử lý bit lỗi.
- Những lỗi có thể phá hủy đoạn video ( Ví dụ lỗi giải mã Huffman của GOB).
PHẦN 2: Tìm hiểu về dòng dữ liệu, sơ đồ nén và
giải nén trong chuẩn nén video H. 261
1. Cấu trúc phân cấp trong H. 261

- Một video bao gồm nhiều ảnh tĩnh liên tục (Frame-Khung).

- Kích thước QCIF là 176x144 pixel, kích thước của CIF là 352x288 pixel.

- Mỗi khung ảnh CIF (352 x 288 pixel) được chia thành 12 GOB.

- Nếu là khung ảnh QCIF (176x144 pixel) thì sẽ được chia thành 3 GOB.
- Mỗi GOB lại được chia tiếp thành khối 11x3 MB .

- Một MB có kích thước 16x16.


- Trong 1 MB có 6 khối B kích thước 8x8. Trong đó gồm 4 khối Y, 1 khối Cr, 1
khối Cb.
2. Sơ đồ tổng thể về dòng dữ liệu

2.1. Lớp Picture (Image/Frame)

- Picture Start Code (PSC) gồm 20 bit thông báo khởi động (0x00010). Dùng để
phân định ranh giới giữa các Frame với nhau.
- Temporal Reference (TR) gồm 5 bit là nhãn thời gian của hình ảnh (được sử
dụng sau này để đồng bộ hóa âm thanh).
- Picture Type (PType) gồm 6 bit:
+ Bit 1: Dấu hiệu chia màn hình. “1” là bật, “0” là tắt.
+ Bit 2: Dấu hiệu tài liệu camera. “1” là bật, “0” là tắt.
+ Bit 3: Có ảnh cứng hay không? “1” là bật, “0” là tắt.
+ Bit 4: Format nguồn. “1” là QCIF, “0” là CIF.
+ Bit 5: Tùy chọn chế độ ảnh tĩnh HI_RES. “1” là tắt, “0” là bật.
+ Bit 6: Bit bổ sung.
- Extra insertion information (PEI) gồm 1 bit: Được đặt là “1” để thông báo sự
hiện diện của trường dữ liệu tùy chọn.
- Spare Information (PSPARE) (0/8/16… bit): Nếu PEI là “1” thì 9 bit sau đó gồm
8 bit dữ liệu (PSPARE) và sau đó một bit PEI khác để cho biết liệu 9 bit sau đó
có tiếp tục như thế hay không? Bộ mã hóa không được chèn. PSPARE cho
đến khi được chỉ định bởi CCITT. Bộ giải mã phải được thiết kế để loại bỏ
PSPARE nếu PEI được đặt là “1”. Điều này sẽ cho phép CCITT chỉ định tương
thích ngược trong tương lai bổ sung trong PSPARE.
2.2. Lớp Group of Block (GOB)

- GOB Start Code (GBSC) gồm 16 bit chỉ ra sự bắt đầu của GOB (0x0001).
- Group Number (GN) gồm 4 bit chỉ ra vị trí của GOB trong ảnh.
- Group Quantization Step (Gquant): Bước lượng tử GOB gồm 5 bit được đặt
cố định cho đến khi được thay đổi bởi MQUANT.
- Extra Insertion Information (GEI) dài 1 bit và nếu bit này đặt thành 1 thì báo
hiệu sự hiện diện của trường dữ liệu tùy chọn sau.
- Spare Information (GSPARE) (0/8/16/… bit): Nếu GEI được đặt thành “1” thì 9
bit sau gồm 8 bit dữ liệu (GSPARE) và sau đó 1 bit GEI khác để cho biết liệu
có thêm 9 bit khác không và cứ tiếp tục như vậy. Bộ mã hóa được chèn
GSPARE cho đến khi được chỉ định bởi CCITT. Bộ giải mã phải được thiết kế
để loại bỏ GSPARE nếu GEI = “1”. Điều này cho phép CCITT chỉ định tương
thích “lùi” trong tương lai và bổ sung trong GSPARE.
2.3. Lớp Macro Block

- Macro Block Address (MBA): Địa chỉ chỉ vị trí của MB. MB đầu tiên có địa chỉ
tuyệt đối, địa chỉ của các BB kế tiếp được tính thông qua địa chỉ MB đầu tiên.
Một tử mã thêm dùng để nhồi bit ngay lập tức sau một tiêu đề GOB hoặc một
MB được mã hóa (Từ mã này được gọi là nhồi MBA). Nhồi MBA này được loại
bỏ bởi bộ giải mã VLC cho bảng mã khởi đầu.
- Macro Block Type (Mtype): Các từ mã có chiều dài thay đổi cung cấp thông tin
về MB và các thành phần dữ liệu nào có mặt.

- Macro Block Quantization (Mquant): Là một từ mã 5 bit, dùng để thay thế cho
GQUANT đến cuối GOB hoặc tạo ra một MQUANT mới.
- Motion Vector Data (MVD): Dữ liệu về vector chuyển động.
- Code Block Pattern (CBP): Chỉ xuất hiện khi được chỉ ra bởi MTYPE. Từ mã
cho một số mẫu biểu thị các khối đó trong MB mà ít nhất một hệ số biến đổi
được truyền đi.
2.4. Block

- Một MB gồm 4 khối Y, 1 khối Cb, 1 khối Cr. Dữ liệu cho một khối bao gồm các
từ mã cho các hệ số biến đổi, theo sau là điểm kết thúc (EOB). Thứ tự truyền
như hình sau:
- Coeff (Hệ số): là kiểu Run-length. Đối với khối Intra Block thì tất cả 64 hệ số
đều được truyền đi. Tất cả các trường hợp còn lại thì trường CBP sẽ chặn sự
truyền đi. Hệ số này là mã Run-Level (Do sau khi lượng tử, hầu hết các hệ số
AC ở vị trí tần số cao của khối B sẽ biến thành nhiều số 0. Do đó nó sẽ tạo ra
chuỗi nhiều số 0 dọc theo đường quét zig-zag của một khối. Một hệ số AC
không phải là zero được mã hóa thành một ký tự có cấu trúc Run/Level. Run
đại diện cho hệ số zero nằm trước hệ số AC khác zero. Level đại diện cho giá
trị biên độ của hệ số AC khác zero) .
- Mỗi block sẽ kết thúc bằng mã (0x1).
3. Sơ đồ nén và giải nén trong chuẩn H. 261
3.1. Sơ đồ nén trong chuẩn H. 261

- Trong đó bao gồm các khối:


+ Khối DCT thực hiện phép biến đổi Cosin rời rạc đối với đối tượng là sự sai
khác giữa frame hiện tại và frame được dự đoán (đối với frame I, DCT thực
hiện biến đổi ngay trên các khối điểm ảnh của frame). IDCT thực hiện phép
biến đổi Cosin ngược, phục hồi lại sự sai khác đã được mã hóa, sử dụng cho
quá trình dự đoán bù chuyển động.
+ Khối lượng tử hóa: rời rạc hóa tín hiệu theo các bước lượng tử, ở đây là
rời rạc hóa các giá trị của khối điểm ảnh đã qua biến đổi DCT.
+ MC-based prediction: Khối bù chuyển động dựa trên sự dự đoán.
+ Motion estimation: Khối ước lượng chuyển động.
+ Frame Memory: Bộ đệm cho các frame tham chiếu .
+ Control Coding: Bộ điều khiển, sử dụng để kiểm soát tốc độ tạo dữ liệu
video được mã hóa. Bao gồm việc xử lý trước bộ mã nguồn, bộ lượng tử…
+ Bộ lọc vòng lặp: Làm mượt quá trình dự đoán.
+ VLE: Variable Length Encode: Bộ cấp từ mã có độ dài thay đổi.
- Để giải thích cho cách hoạt động của sơ đồ nén này, ta sẽ sử dụng một kịch
bản trong đó các khung I, P1, P2, được mã hóa (nghĩa là IPPIPP…..). Dữ liệu
sẽ đi qua các điểm quan sát được đánh số trên hình sẽ được tóm tắt trong
bảng dưới đây. Ta sẽ dùng ký hiệu I, P1, P2, cho dữ liệu gốc. Và P’1, P’2 cho
các dự đoán trong chế độ Inter-Frame. (Dấu * thể hiện cho sự mất mát thông
tin)
1 2 3 4 5 6
I I I* +0 I*
P1 P1 P’1 D1 D1* P’1 P’1*
P2 P2 P’2 D2 D2* P’2 P’2*
- Khi frame hiện tại là frame-I thì điểm số 1 nhận được các MB từ frame-I. Công
tắc sẽ chuyển về chế độ Intra-frame. Qua các bước DCT, lượng tử hóa và
Entropy Coding thì kết quả sẽ được gửi tới bộ đệm ở đầu ra, sẵn sàng truyền
đi.
- Không chỉ thế, mà các hệ số DCT sau khi được lượng tử hóa, lại gửi tiếp tới
bộ lượng tử hóa ngược và bộ IDCT. Do đó xuất hiện giá trị I* tại điểm số 4 của
bộ cộng. Kết hợp với điểm số 5 (đầu vào bằng 0 do công tắc đang ở chế độ
Intra-frame). Thì đầu ra tại điểm số 6 vẫn là I* và nó được lưu trong Frame
Memory, chờ để được sử dụng cho bước đánh giá chuyển động và bù chuyển
động cho khung P kế tiếp.
- Bộ Control coding(CC) hoạt động như một sự phản hồi. Tức là nếu bộ đệm ở
đầu ra quá đầy, thì bộ CC sẽ tăng kích thước bước lượng tử để giảm kích
thước dữ liệu được mã hóa. Đây là quá trình kiểm soát tốc độ mã hóa.
- Kế tiếp là khung P1 sẽ đến điểm số 1. Công tắc sẽ chuyển sang chế độ Inter-
frame. Lúc này, quá trình ước lượng chuyển động sẽ được gọi để tìm vector
chuyển động cho MB phù hợp nhất trong frame I cho mỗi MB trong P1. Vector
ước lượng chuyển động này được gửi tới cả 2 bộ bù chuyển động và bộ VLE.
Bộ bù chuyển động sẽ tạo ra một MB phù hợp nhất trong P1 (Ký hiệu là P’1 và
sẽ xuất hiện tại điểm số 2).
- Tại điểm “Lỗi dự đoán” sẽ thu được giá trị D1 = P1 – P’1. D1 lúc này lại trả qua
quá trình DCT và lượng tử hóa và qua bộ Entropy Coding, và kết quả lại được
gửi tới bộ đệm đầu ra, sẵn sàng chuyển đi. Không chỉ thế, các hệ số DCT của
D1 cũng lại được gửi tới bộ lượng tử hóa ngược và bộ IDCT, vì thế tại điểm
thứ 4 sẽ xuất hiện giá trị D1*. Kết hợp với điểm số 5 (Giá trị P’1 được gửi từ
đầu ra của bộ bù chuyển động sẽ tới điểm số 5), thì đầu ra của điểm thứ 6 sẽ
là P’1* = D1* + P’1 và giá trị này lại được lưu ở trong Frame Memory, chờ để
được sử dụng cho bước đánh giá chuyển động và bù chuyển động cho khung
P kế tiếp.
- Các bước để mã hóa khung P2 giống hệt với các bước thực hiện P1. Chỉ có
điều lúc này P2 trở thành khung hiện tại, còn khung P1 trở thành khung tham
chiếu mới.
3.2. Sơ đồ giải nén trong chuẩn H. 261

- Để giải thích cho cách hoạt động của sơ đồ nén này, ta sẽ sử dụng một kịch
bản và ký hiệu giống như phần “2.3. Sơ đồ nén trong chuẩn H. 261”.
1 2 3 4
I I* 0 I*
P1 D1* P’1 P’1 P’1*
P2 D2* P’2 P’2 P’2*
- Đối với bộ giải mã, mã đầu vào cho các frame sẽ được giải mã trước. Đầu tiên
là giải mã Entropy, kế đến là lượng tử hóa ngược và IDCT. Đối với chế độ
Intra-frame. Khung được giải mã đầu tiên có giá trị là I* xuất hiện tại điểm số
1. Kết hợp với điểm số 5 có đầu vào là 0 (do công tắc đang ở chế độ Intra-
frame) nên đầu ra ở điểm số 4 sẽ vẫn là I*. Nó được gửi dưới dạng frame đầu
ra và cũng đồng thời được lưu trữ trong Frame Memory.
- Sau đó, mã đầu vào cho frame P1 sẽ được giải mã và lỗi dự đoán D1 sẽ được
nhận tại điểm số 1. Vì vector chuyển động cho MB hiện tại cũng được giải mã
entropy và được gửi đến bộ bù chuyển động nên MB dự đoán tương ứng là
P’1 có thể được đặt trong frame I là đầu ra tại điểm số 2 và là đầu vào của bộ
cộng (tại điểm số 3). Lúc này đầu ra tại điểm số 4 sẽ là P’1* = P’1 + D1 và nó
được gửi ra như một khung đã giải mã (khung đầu ra), và cũng tương tự nó
cũng đồng thời lại được lưu trữ trong Frame Memory. Các bước giải mã cho
P2 tương tự như P1.
4. Quá trình nén các frame
4.1. Quá trình nén frame I
- Quá trình thực hiện tương tự nén ảnh JPEG.
4.2. Quá trình nén frame P
- Như đã đề cập ở trên, frame P liên quan tới 2 bộ trong sơ đồ nén của chuẩn
H. 261 là bộ đánh giá ước lượng chuyển động và bộ bù chuyển động, vì thế
đây chính là 2 bộ phận quan trọng nhất trong quá trình nén frame P.
4.2.1. Kỹ thuật đánh giá chuyển động
- Đây là kỹ thuật dùng để xác định vector chuyển động.

- Để dễ hình dung, ta sử dụng điểm ở góc trên bên trái (x,y) là điểm nguồn của
MB trong khung đích (target). Gọi điểm C(x+k, y+l) là pixel trong MB trong
khung đích (hiện tại) và điểm R(x+k+i, y+j+l) là pixel trong MB trong khung tham
chiếu. Trong đó 2 giá trị k và l là các chỉ số cho pixel trong MB. 2 giá trị i và j là
chuyển vị ngang và dọc tương ứng. Sự khác biệt giữa 2 MB sau đó có thể đo
bằng sự khác biệt trung bình tuyệt đối của chúng (MAD) được định nghĩa bởi
công thức sau:
- Trong đó, N là kích thước của MB.
- Mục tiêu của việc tìm kiếm là tìm 1 vector (i,j) làm vector chuyển động MV (u,v)
sao cho MAD (i, j) là nhỏ nhất.
- Ngoài ra chúng ta có thể sử dụng trung bình bình phương nhỏ nhất (MSE) để
làm hàm tính toán chi phí như hàm MAD.
- Từ đó, ta sẽ có các cách dùng để đánh giá chuyển động như:
+ Block matching: Kỹ thuật đối sánh khối.
+ Hierarchical block matching: Kết hợp khối phân cấp.
+ Pel-recursive motion estimation: Ước tính chuyển động đệ quy Pels.
+ Direct optical flow methods: Phương pháp lưu lượng quang học trực tiếp.
+ Mesh-matching methods: Phương pháp kết hợp lưới.
- Trong đó, H. 261 sử dụng Một trong rất nhiều kỹ thuật Đối sánh khối, đó là
Thuật toán tìm kiếm ba bước (TSS).
4.2.2. Thuật toán tìm kiếm ba bước (TSS)
- Là phương pháp tìm kiếm rất thô sơ, nhưng rất phổ biến vì thuật toán này đơn
giản nhưng có hiệu suất rất tốt. TSS tìm kiếm vector chuyển động tốt để làm
cho mô hình tìm kiếm chính xác. TSS giới hạn số lượng kiểm tra trong một khu
vực tìm kiếm. Như ví dụ dưới đây là minh họa cho quy trình của TSS với w=7.

- Dưới đây là sơ đồ khối của thuật toán TSS.


- Mô tả thuật toán như sau:
+ Bước 1: Chọn kích thước đầu vào. Tám khối xung quanh khối được chọn
dùng để so sánh.
+ Bước 2: Kích thước bước sẽ được giảm đi một nửa. Vị trí trung tâm lúc
này sẽ được chuyển đến điểm có méo tối thiểu.
+ Các bước 1 và 2 được lặp lại cho đến khi kích thước bước nhỏ hơn 1.
- Dưới đây là ví dụ cụ thể:
- Sau đó, ta cần phải tạo Frame dự đoán để tiến hành quá trình bù chuyển động.
- Các bước thực hiện như sau:
+ Đầu vào: Frame tham chiếu và tập các vector chuyển động của MB.
+ Chia frame tham chiếu thành các macroblock 16x16. Tạo 1 frame P’ với
các giá trị ban đầu đều bằng 0, sau đó cũng chia thành các block 16x16.
+ Duyệt lần lượt từng macroblock trong P’, bắt đầu từ macroblock trên cùng
bên trái, đồng thời lấy ra vector chuyển động ứng với vị trí macroblock đó.
+ Dựa vào vector chuyển động, tách lấy macroblock 16x16 từ frame tham
chiếu. Macroblock tương ứng ở P’ sẽ được gán giá trị bằng macroblock đó.
+ Duyệt xong toàn bộ, trả về P’ là frame dự đoán.
4.2.3. Kỹ thuật bù chuyển động
- Vùng khớp nhất được tìm thấy trong ảnh tham chiếu được trừ với macroblock
hiện hành để cho ra một macroblock chứa giá trị dư thừa (Gọi là Residual
Macroblock- RMB), phép trừ được thực hiện trên cả 3 khối Y, Cr, Cb. RMB sau
đó được mã hóa và gửi đi cùng với một vector chuyển động trỏ đến vị trí khớp
nhất đã được tìm thấy trong quá trình dự đoán chuyển động. Bên trong bộ giải
mã, tín hiệu dư thừa lại được đưa về để giải mã và cộng lại vào vùng khớp để
cho ra một macroblock tái dựng và được lưu trữ cho các hoạt động bù chuyển
động sau này. Lý do cho việc phải tái lập lại macroblock nhằm mục đích đảm
bảo cả bộ giải mã lẫn mã hóa sử dụng cùng một vùng tham chiếu cho quá trình
bù chuyển động, từ đó làm cho tất cả bộ giải mã cùng sinh ra các nội dung
video tương tự nhau khi đưa vào cùng một tín hiệu video mã hóa.
- Dưới đây là một ví dụ minh họa:
PHẦN 3: Phân tích so sánh sơ đồ nén video H.
261 với video MPEG-1
1. Sơ đồ nén và giải nén video H. 261

Sơ đồ nén video H. 261


Sơ đồ giải nén video H. 261

2. Sơ đồ nén và giải nén video MPEG-1

Sơ đồ nén video MPEG-1


Sơ đồ giải nén video MPEG-1

3. So sánh
- Giống nhau:
+ Sử dụng DCT để giảm thiểu độ dư thừa intraframe.
+ Nén interframe dựa trên kỹ thuật ước lượng chuyển động và kỹ thuật bù
chuyển động.
+ Hầu hết các sơ đồ nén theo chuẩn H.26X và MPEG đều tiến hành chia bức
ảnh thành một thành phần về độ sáng Y (luminance) và hai thành phần về độ
màu UV (Chrominance).
+ Đều tiến hành chia khung hình thành các khối điểm ảnh để việc xử lý các
khung hình có thể được thực hiện ở cấp độ block.
+ Giảm thời gian phụ thuộc giữa các khối trong các khung hình kế tiếp.
+ Các tín hiệu video thành phần được lấy mẫu và số hóa để tạo nên các điểm
ảnh rời rạc theo tỷ lệ 4:2:0.
+ Các sơ đồ nén theo H.261 và MPEG-1 đều dùng kỹ thuật subsampling và
lượng tử hóa trước khi mã hóa nhằm giảm kích thước bức ảnh đầu vào theo
cả chiều ngang và chiều dọc.
- Khác nhau:
+ Cấu trúc phân lớp dữ liệu: Chuẩn nén H.261 tổ chức dữ liệu theo dòng các
frame, với hai loại frame là: I và P.Còn MPEG-1 sử dụng cả frame I, P, B. Trong
mỗi frame của chuẩn H.261, dữ liệu được tổ chức thành các GOB (Group Of
Block có kích thước giống nhau theo từng chuẩn định dang. Mỗi frame của
chuẩn MPEG-1 được tổ chức thành các GOP (Group Of Picture) có kích thước
có thể không giống nhau).
+ Định dạng video: H.261 sử dụng 2 chuẩn định dạng CIF (352x288 pixels)
và QCIF (176x144 pixels) trong khi MPEG-1 sử dụng các chuẩn định dạng CIF,
SIF (Source Input Format) và có thể thiết lập độ phân giải lên đến 4095x4095
pixels.
+ Quá trình lượng tử hóa: Chuẩn H.261 sử dụng một bảng lượng tử hóa cho
tất cả các block. Nhung chuẩn MPEG-1 sử dụng 2 bảng lượng tử hóa khác
nhau cho các block của intraframe và các block cua interframe.
+ Độ chính xác của kỹ thuật bù chuyển động: Độ chính xác của kỹ thuật bù
chuyển động trong chuẩn nén video MPEG-1 lên đến ½ pixel, còn chuẩn nén
H.261 là 1 pixel.
- Kết luận:
+ Chuẩn H.26X thường được tối ưu hóa cho truyền tải video thời gian thực
như hội nghị truyền hình, truyền tải video giữa các thiết bị di động.
- + Chuẩn MPEG dùng cho thị trường giải trí hay truyền hình chất lượng cao
nên có độ phân giải hình cao hơn và mang lại chất lượng hình ảnh tốt hơn.
Phần 4: Xây dựng sơ đồ thuật toán nén ảnh
video theo chuẩn H. 261
- Theo sơ đồ nén H. 261, ta sẽ xây dựng sơ đồ thuật toán cho từng khối

1. Khối chuyển đổi hệ màu


- Video trong chuẩn H. 261 là một chuỗi các ảnh, mỗi ảnh là một mảng hai chiều
các điểm gồm 3 thành phần Y, Cb, Cr.
- Trong khi video nguồn thuộc hệ màu RGB. Vì thế ta cần phải chuyển hệ màu
từ RBG sang YcbCr trước khi xử lý.
- Các bước thực hiện như sau:
+ Đầu vào: 3 ma trận R, G, B.
+ Biến đổi sang hệ màu YCrCb sử dụng công thức:

-
+ Đầu ra: 3 ma trận Y, Cr, Cb.
2. Khối lấy mẫu
- Theo chuẩn H. 261, cấu trúc lấy mẫu là 4:2:0 vì thế, ma trận Y được lấy toàn
bộ các giá trị trong khi ma trận Cr, Cb sẽ được lấy tại những điểm mà cả 2 tọa
độ của nó đều chia hết cho 2.
- Các bước thực hiện như sau:
+ Đầu vào: 3 ma trận Y, Cr, Cb.
+ Xét từng ma trận. Nếu đó là ma trận Y, lưu ma trận Y, Nếu đó là ma trận
Cr hoặc Cb. Lấy giá trị mà tại đó cả 2 tọa độ đều chia hết cho 2. Sau đó lưu
ma trận Cr, Cb đã được lấy mẫu.
+ Đầu ra: 3 ma trận Y, Cr, Cb đã được lấy mẫu với cấu trúc lấy mẫu 4:2:0
gồm 4 khối Y, 1 khối Cb, 1 khối Cr. Kích thước mỗi khối là 8x8.
- Sau khi kết thúc 2 khối này, ta đã làm xong bước tiền xử lý. Quy ước vẫn gọi
các ma trận đã được lấy mẫu là Y, Cr, Cb (Mặc dù kích thước đã thay đổi trước
khi lấy mẫu).
3. Khối DCT
- Là khối có nhiệm vụ chuyển đổi tín hiệu từ miền không gian, thời gian sang
miền tần số và ngược lại.
- Duyệt toàn bộ frame để có được các ma trận 8x8 và sử dụng công thức biến
đổi cosi rời rạc với các ma trận 8x8. Sau quá trình này, ta thu được frame với
các ma trận 8x8 đã được biến đổi DCT. Dưới đây là công thức của biến đổi
cosi.

- Các bước thực hiện như sau:


- + Đầu vào: Các ma trận 8x8.
+ Sử dụng công thức, ta được ma trận 8x8 mới.
+ Đầu ra: Các ma trận 8x8 sau khi DCT.
4. Khối lượng tử hóa
- Khối lượng tử hóa Q sẽ giúp loại bỏ những thông tin dư thừa trong ảnh.
- Sau khi thu được các block 8x8 đã thực hiện biến đổi DCT thì ta thực hiện
lượng tử hóa với chúng. Ta sử dụng công thức.

Và bảng lượng tử hóa cho các thành phần độ Y, Cb, Cr (chung bảng).
- Các bước thực hiện như sau:
+ Đầu vào: Ma trận DCT.
+ Duyệt các giá trị trong ma trận DCT và ma trận lượng tử hóa cho thành
phần chói Y, Cr, Cb, sau đó áp dụng công thức trên.
+ Đầu ra: Ma trận sau khi được lượng tử hóa.
5. Khối lượng tử hóa ngược
- Sau khi có được ma trận đã lượng tử hóa D(8,8).
- Ta sử dụng bảng lượng tử hóa cũ để lượng tử hóa ngược với công thức:

6. Khối IDCT
- Quá trình Q−1 và IDCT cho ta 1 frame theo cấu trúc dữ liệu có sự sai khác so
với frame ban đầu do quá trình Lượng tử hóa gây ra.
- Để thực hiện IDCT ta sử dụng công thức:

7. Khối đánh giá chuyển động


- Đầu vào: 1 Frame tham chiếu và 1 frame đánh giá chuyển động. Tham số tìm
kiếm w=7 và chia frame thành các MB 16x16.
- Đầu ra: Tập các vector chuyển động của mỗi MB trong frame.
- Như đã trình bày ở phần trên. Ta sử dụng thuật toán Three Step Search (Nằm
trong kỹ thuật đối sánh khối: Block Matching).
- Các bước thực hiện như sau:
+ Chia frame thành các MB kích thước 16x16.
+ Duyệt lần lượt từng macroblock trong frame để tìm vector chuyển động
cho từng macroblock. Xác định kích cỡ cửa sổ tìm kiếm. Với p=7, cửa sổ tìm
kiếm sẽ có kích thước mở rộng về phía 4 cạnh của macroblock 7 pixel -> kích
cỡ cửa sổ tìm kiếm là 30x30.
+ Xác định điểm trung tâm của macroblock, đó là vị trí khởi đầu tìm kiếm,
với tham số tìm kiếm p=7 thì kích thước tìm kiếm ban đầu là S=4, tiếp theo ta
xác định 8 điểm +/- S pixel quanh điểm trung tâm.

+ Với mỗi một trong 8 điểm, ta tính sai khác tuyệt đối – MAD tương ứng
theo công thức dưới đây, với m=n=16 là kích thước 1 macroblock.
+ Xác định điểm có MAD nhỏ nhất và đặt làm gốc tìm kiếm mới, kích thước
tìm kiếm giảm đi 1 nửa S=S/2.

+ lặp lại quá trình như bước 3 cho tới khi kích thước tìm kiếm S=1 thì dừng
lại, điểm có MAD nhỏ nhất ở bước này chính là trung tâm của macroblock
phù hợp nhất.
+ lưu lại vector chuyển động tìm được của macroblock hiện tại.
- Sau đó, ta cần phải tạo Frame dự đoán để tiến hành quá trình bù chuyển
động.
- Các bước thực hiện như sau:
+ Đầu vào: Frame tham chiếu và tập các vector chuyển động của MB.
+ Chia frame tham chiếu thành các macroblock 16x16. Tạo 1 frame P’ với
các giá trị ban đầu đều bằng 0, sau đó cũng chia thành các block 16x16.
+ Duyệt lần lượt từng macroblock trong P’, bắt đầu từ macroblock trên cùng
bên trái, đồng thời lấy ra vector chuyển động ứng với vị trí macroblock đó.
+ Dựa vào vector chuyển động, tách lấy macroblock 16x16 từ frame tham
chiếu. Macroblock tương ứng ở P’ sẽ được gán giá trị bằng macroblock đó.
+ Duyệt xong toàn bộ, trả về P’ là frame dự đoán.
8. Khối bù chuyển động
- Kỹ thuật bù chuyển động (Motion Compensation) được sử dụng nhằm mục
đích khôi phục lại frame dựa trên vector chuyển động và sai số dự đoán (phần
sai lệch nhỏ nhất giữa 2 frame). Từ sai số dự đoán và frame dự đoán ta sẽ thu
được frame kết quả.

- Quá trình tạo frame kết quả thực hiện bằng cách cộng frame dự đoán trong
bước đánh giá chuyển động với sai số dự đoán.
- Các bước thực hiện như sau:
+ Đầu vào: Frame dự đoán và sai số dự đoán tương ứng.
+ Đầu ra: Frame kết quả là frame đã được bù chuyển động.
9. Khối mã hóa Entropy (VLE)
- Đầu vào:
+ int MV[][]: ma trận các vector chuyển động của một frame;
+ int F[6*n][64]: ma trận lưu các vector sau khi quét zigzac của cả một
frame. Với n là số MB.
- Đầu ra: byte BS[]: chuỗi bit sau khi nén.
- Thuật toán
+ 1 MB gồm 6 block: 1 MV,4 blockY, 1 block Cb,1 block Cr.=> cứ 6 vector
liên tiếp trong mảng là kết quả zigzag của một MB trong một frame.
+ Ta mã hóa 1 MB làm mẫu, các MB làm tương tự, tổng hợp chuỗi mã hóa
của nhiều MB sẽ ra được chuỗi bit sau khi nén.
9.1. Mã hóa Macroblock
- Từ 6 vector liên tiếp lấy ra: F[i][64] tới F[i+5] từ mà trận F[6n][64] thỏa mãn
i%6=0;
- Từ 6 vector ta tách thành phần DC và AC của một MB thành 4 mảng để mã
hóa
+ int DCL[4]={F[i][0],…F[i+3][0]}: ma trận lưu các giá trị DC của thành phần
chói
+ int DCC[2]={F[i+4][0],F[i+5][0]}: ma trận lưu các giá trị DC của thành phần
màu
+ int ACL[4][64]: ma trận lưu các giá trị xoay chiều của thành phần chói
{0,F[i][1],… F[i][63];
……….
0,F[i+3][1],… F[i+3][63];}
+ int ACC[2][64]: ma trận lưu các giá trị xoay chiều của thành phần màu
{0,F[i+4][1],… F[i+4][63]
0,F[i+5][1],… F[i+5][63];}
- Với mảng các thành phần DC: DCL và DCC sử dụng thuật toán DPCM và
mã hóa Huffman để ra chuỗi bit.
+ BoDC[6]: mảng lưu chuỗi bit của từng thành phần DC.
+ Thuật toán: Hệ số DC được mã hóa theo dạng (cat, value)
Value: ∆DC= ∆DC𝑛 - ∆DC𝑛−1 ;
- Cat: hạng của ∆DC trong bảng mã Huffman
+ Dò tìm trong bảng phân loại để tìm “cat” của giá trị ∆DC. ( “cat” chính là
chiều dài từ mã dùng để mã hóa thành phần ∆DC);
+ Dùng bảng mã Huffman cho thành phần DC để tìm ra từ mã cho “cat”
∆DC tìm được ở bước 1;
+ Mã hóa nhị phân giá trị ∆DC;
+ Ghép các từ mã Huffman và giá trị nhị phân của ∆DC để có được từ mã
cho thành phần DC.
- Bảng mã Huffman cho thành phần DC.

- Bảng mã Huffman cho sai khác hệ số độ chói DC.


- Bảng mã Huffman cho sai khác hệ số màu DC.

- Mã hóa các mảng của thành phần AC: ACL[4][64] và ACC[2][64] bằng thuật
toán RLE và thuật toán Huffman. Lưu giá trị chuỗi bit vào BoAC[6].
- Thuật toán RLE:
+ Giá trị chạy – là số lượng bit "0" đứng trước hệ số khác "0" đang được
mã hóa.
+ Biên độ của hệ số khác "0" nói trên.
- Thuật toán Huffman:
+ Từ mã Huffman ứng với cặp giá trị trên được tìm ra trong bảng phân loại
và bảng mã Huffman cho thành phần AC. Từ mã AC sẽ bao gồm từ mã
Huffman và giá trị biên độ (nhị phân) của hệ số AC.
+ Sau hệ số khác "0" cuối cùng, chúng ta đặt từ mã đặc biệt để báo hiệu
kết thúc khối, từ mã này có tên là EOB – End Of Block.
- Bảng mã Huffman cho thành phần AC.

9.2. Mã hóa vector chuyển động


- Đầu vào: MV[m*n][2]: mảng 2 chiều chứa vector chuyển động của các MB
trong frame; m: số slice trong một frame, n là số MB trong slice.
- Đầu ra: DC[m][2]: chuỗi bit mã hóa vector chuyển động.
- Theo cấu trúc dữ liệu ban đầu: 1 frame có 1 mảng các slice chứa m slice, 1
slice chứa n MB. Ta sẽ mã hóa các vector chuyển động trong cùng 1 slice.
+ Lấy n vector từ MV[m*n][2] : MV[i]…MV[i+n-1]; với i thỏa mãn i%n=0;
+ Tạo 2 mảng :
MVy[n] ={MV[i][0],…,MV[i][i+n-1]}: lưu trục y của các vector chuyển động
MVx[n] ={MV[i][0],…,MV[i][i+n-1]}: lưu trục x của các vector cđ
+ Mã hóa từng thành phần của vector chuyển động sử dụng mã Huffman
- Thuật toán mã Huffman:
+ Các giá trị được mã theo độ lệch giữa 2 giá trị của vector chuyển động.
∆MVy= ∆𝑀𝑉𝑦𝑛 - ∆𝑀𝑉𝑦−1 ;
Nếu -32<∆MVy< 31 thì (MVy[i] >range) {
MVy[i]= MVy[i]-2*range;
}
If(V1[i]<-range){
MVy[i]= MVy[i]+2*range;
}
- Tra bảng mã Huffman tìm ra chuỗi bit cho ∆MVy.
- Làm tương tự với MVx[n].
Phần 5: Cài đặt thử nghiệm thuật toán nén video
H. 261, đo lường hiệu năng giải pháp nén này
- Công cụ sử dụng: Matlab
- Chương trình được chia thành các hàm tương ứng với các khối trong sơ đồ
nén MPEG-1 như hàm DCT, IDCT, hàm lượng tử hóa, hàm lượng tử hóa
ngược, đánh giá chuyển động.
- Tiền xử lý
+ Video đầu vào được chia thành các frame, và chuyển sang ảnh xám
I_frame = double(rgb2gray(video(1).cdata));
B_frame = double(rgb2gray(video(30).cdata));
P_frame = double(rgb2gray(video(80).cdata));

- Hàm DCT
+ Sử dụng hàm dct2 có sẵn trong Matlab để tính DCT
function frame_dct = dct_function(frame)
[m n] = size(frame);
for a = 1:8:m
for b = 1:8:n
frame_dct(a:a+7,b:b+7) =
dct2(frame(a:a+7,b:b+7));
end
end

- Hàm DCT ngược


+ Sử dụng hàm idct2 có sẵn trong Matlab để tính
DCT ngược
function frame_idct = idct_function(frame)
[m n] = size(frame);
for a=1:8:m
for b=1:8:n
frame_idct(a:a+7,b:b+7) =
idct2(frame(a:a+7,b:b+7));
end
end

- Hàm lượng tử hóa


function quantize_frame = quant_funct(frame)
qtz_mtrx=[8 16 19 22 26 27 29 34;
16 16 22 24 27 29 34 37;
19 22 26 27 29 34 34 38;
22 22 26 27 29 34 37 40;
22 26 27 29 32 35 40 48;
26 27229 32 35 40 48 58;
26 27 29 34 38 46 56 69;
27 29 35 38 46 56 69 83];
[m n] = size(frame);
img_os = frame+200;
for i=1:8:m
for j=1:8:n
quantize_frame(i:i+7,j:j+7) =
round(img_os(i:i+7,j:j+7)./qtz_mtrx);
end
end

- Hàm lượng tử hóa ngược


-
function dequantize_frame = dequant_funct(frame)
qtz_mtrx=[8 16 19 22 26 27 29 34;
16 16 22 24 27 29 34 37;
19 22 26 27 29 34 34 38;
22 22 26 27 29 34 37 40;
22 26 27 29 32 35 40 48;
26 27229 32 35 40 48 58;
26 27 29 34 38 46 56 69;
27 29 35 38 46 56 69 83];

[m n] = size(frame);
for i=1:8:m
for j=1:8:n
dequantize_frame_os(i:i+7,j:j+7) =
frame(i:i+7,j:j+7).*qtz_mtrx;
end
end

- Hàm tính MAD để áp dụng trong đối sánh khối TSS


function mb_MAD = MAD(P_block,I_block)
global mb
mb_MAD = sum(sum(abs((P_block-I_block))))/mb^2;

- Hàm dự đoán (tiến) với đầu vào là hai frame, một frame cần đánh giá chuyển
động và một frame tham chiếu. Đầu ra của hàm là vector chuyển động và frame
được dự đoán (tiến). Trong hàm này sử dụng thuật toán đối sánh khối TSS
function [motion_vector,new_P_frame] =
forwardprediction(I_frame,P_frame)
global mb_MAD mb_MAD_3d prediction_error mb range
[m n] = size(I_frame);
threshold = 16;
mb = 16;
range = 20;
vector_size = (m*n)/(mb^2);
motion_vector = zeros(3,vector_size);
mb_MAD = 256*ones(15,15);
% Thuat toan doi sanh khoi TSS
count = 1;
for i=1:mb:m-mb+1
for j=1:mb:n-mb+1
min = 512;
k1 = 0;
l1 = 0;
for k = -range:range
for l = -range:range
if ((i+k)<1||(j+l)<1||(i+k)+mb-1>m||(j+l)+mb-1>n)
continue;
end
min_MAD = MAD(B_frame(i:i+mb-1,j:j+mb-
1),I_frame((i+k):(i+k+mb-1),(j+l):(j+l+mb-1)));
if min_MAD < min
min = min_MAD;
k1 = k;
l1 = l;
end
end
end
if min > threshold
new_P_frame(i:i+mb-1,j:j+mb-1) = I_frame(i:i+mb-1,j:j+mb-
1);
motion_vector(1,count) = 0;
motion_vector(2,count) = 0;
motion_vector(3,count) = 0;
else
new_P_frame(i:i+mb-1,j:j+mb-1) = I_frame((i+k1):(i+k1+mb-
1),(j+l1):(j+l1+mb-1));
motion_vector(1,count) = k1;
motion_vector(2,count) = l1;
motion_vector(3,count) = 0;
end
count = count+1;
end
End
KẾT LUẬN
Qua việc tìm hiểu đề tài này, chúng em đã hiểu thêm các đặc điểm chuẩn nén MPEG-1,
MPEG-2, MPEG-4. Hiểu hơn về sơ đồ nén ảnh video MPEG-1, cơ bản đã xây dựng
được sơ đồ thuật toán, để từ đó nắm vững những thuật toán trong nén ảnh video
MPEG-1 như thuật toán đối sánh khối TSS, thuật toán bù chuyển động.
Bên cạnh đó chúng em còn những mặt hạn chế trong việc cài đặt thuật toán, mới chỉ
cài đặt được một số hàm cơ bản trong thuật toán nén ảnh video MPEG-1, mà chương
trình chưa cho ra video được nén theo chuẩn MPEG-1.
Trong tương lai, chúng em sẽ cố gắng hoàn thiện chương trình để đạt kết quả tốt hơn.
TÀI LIỆU THAM KHẢO
[1] Bài giảng môn học Xử lí dữ liệu đa phương tiện – PSG.TS Nguyễn Thị Hoàng
Lan, Viện Công Nghệ Thông Tin và Truyền Thông, Đại Học Bách Khoa Hà Nội.
[2] H.261 Video Slide, Mark Handley, Department of Computer Science, London's
Global University.
[3] Video Compression 1: H.261 Coding Basics Slide, Multimedia Systems Concepts
Standards and Practice Course, Ramesh Yerraballi
[4] Chapter 11. MPEG Video Coding I — MPEG-1 and 2, CMPT 820: Multimedia
Systems Course, Mohamed Hefeeda
[5] http://www-i6.informatik.rwth-
aachen.de/web/Misc/Coding/365/li/material/notes/Chap4/Chap4.3/Chap4.3.html
[6] https://www.wisdomjobs.com/e-university/multimedia-tutorial-270/h-dot-261-
12867.html
[7]
https://graphics.cmlab.csie.ntu.edu.tw/~itct/slide/Data_Compression_Motion_Estimation
_for_Video_Coding_Standards.pdf
[8]
http://www.img.lx.it.pt/~fp/Klagenfurt/Slides/6_Digital_Video_Compression_Oct2008.pdf
[9] Download tài liệu gốc của ITU về H. 261 tại đường link: https://www.itu.int/rec/T-
REC-H.261-199303-I/en

You might also like