Tải bản đầy đủ (.docx) (21 trang)

Nén ảnh video theo chuẩn MPEG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (753.46 KB, 21 trang )

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: XỬ LÝ DỮ LIỆU ĐA PHƯƠNG TIỆN
ĐỀ TÀI 12: NÉN ẢNH VIDEO THEO CHUẨN MPEG
Sinh viên thực hiện:

Giảng viên hướng dẫn:

Hà Nội, tháng 05 năm 2016

1. Lê Công Tú

20122765

2. Trần Thanh Tĩnh

20122568

3. Đỗ Gia Việt

20122784

4. Nguyễn Ngọc Thịnh

20122510

PGS.TS Nguyễn Thị Hoàng Lan



MỤC LỤC

2


DANH MỤC BẢNG BIỂU, HÌNH ẢNH

Hình 1.1:Các loại Frame trong nén ảnh video theo chuẩn MPEG.
Hình 3.1: Cấu trúc dữ liệu trong quá trình nén video theo chuẩn MPEG-1.
Hình 3.2: Thứ tự frame hiển thị và mã hóa.
Hình 3.3: Cấu trúc lấy mẫu 4:2:0.
Hình 3.4: Bảng lượng tử hóa.
Hình 3.5: Cửa sổ tìm kiếm của 1 khối macroblock 16 pixel với tham số tìm kiếm là
7 pixel.
Hình 3.6: Ước lượng chuyển động và bù chuyển động.
Hình 3.7: Tính sự sai khác

3


LỜI MỞ ĐẦU
Với đề tài: “NÉN ẢNH VIDEO THEO CHUẨN MPEG”, chúng em trình bày
báo cáo với những nội dung sau:
I.
II.
III.
IV.

Khái quát chuẩn nén video MPEG

Phân tích sơ đồ nén MPEG-1
Xây dựng sơ đồ thuật toán theo chuẩn MPEG-1
Cài đặt thử nghiệm giải pháp nén video MPEG-1.

Do thời gian hoàn thành báo cáo khá ngắn, kiến thức của chúng em về các vấn
đề liên quan đến MPEG-1 còn nhiều hạn chế nên không tránh được những thiếu sót.
Chúng em mong cô chỉ dẫn để có báo cáo chính xác và hoàn thiện hơn.
Nhóm xin chân thành cảm ơn!

4


I.

KHÁI QUÁT CHUẨN NÉN VIDEO MPEG.
MPEG(motion picture experts group) là một nhóm các chuyên gia về hình ảnh
được thành lập từ tháng 2 năm 1998 với nhiệm vụ xây dựng tiêu chuẩn cho tín hiệu
Audio và Video số. Ngày nay, MPEG đã trở thành một kỹ thuật nén Audio và
Video phổ biến nhất vì nó không chỉ là một tiêu chuẩn riêng biệt mà tùy thuộc vào
từng yêu cầu cụ thể của thiết bị sẽ có một tiêu chuẩn thích hợp nhưng vẫn trên
nguyên lý thống nhất.
Các thế hệ của chuẩn MPEG:







MPEG 1 là thế hệ lưu trữ và phục hồi ảnh động và Audio trong lưu trữ

Media. MPEG-1 có thể nén tín hiêu video tới 1.5 Mbps với chất lượng
VHS và âm thanh lập thể (stereo audio) với tốc độ 192 bps. Được dùng
để lưu trữ video và âm thanh trên CD-ROM.
MPEG 2 là thế hệ cho TV số.
MPEG 4 là thế hệ cho các ứng dụng Multmedia. MPEG-4 trở thành 1
tiêu chuẩn cho nén ảnh kỹ thuật truyền hình số, các ứng dụng về đồ họa
và video tương tác hai chiều (Games, Video conferencing) và các ứng
dụng Multimedia tương tác hai chiều (world wide web hoặc các ứng
dụng nhằm phân phát dữ liệu video như truyền hình cáp, internet
video…). MPEG-4 đã trở thành một tiêu chuẩn công nghệ trong quá
trình sản xuất, phân phố và truy cập vào các hệ thống video. Nó đã góp
phần giải quyết vấn đề dung lượng cho các thiết bị lưu trữ, giải quyết
vấn đề về băng thông của đường truyền tín hiệu video hoặc kết hợp cả
hai vấn đề trên.
MPEG 7 chứa đặc tả thông tin, giao diện cho việc tìm kiếm thông tin.

Quy định hệ màu trong MPEG: Hệ màu chuẩn sử dụng là hệ màu YUV và
YCbCr:
YUV: quy định một không gian màu được tạo bởi một thành phần độ
chói (Y) và hai thành phần màu (U, V).
• Sau khi nén xong thì màu sắc MPEG1 chuyển sang Y'CbCr. Trong đó
thành phần Y được chú ý: vì mắt người nhạy với độ sáng hơn là màu
sáng thành phần ( Cb, Cr ).
Frame: MPEG có 3 loại Frame:







Frame I: là frame đầu tiên của chuỗi video, mã hóa JPEG.
Frame P: frame được dự đoán tiếp theo.
Frame B: frame được dự đoán nội suy 2 chiều.

Hình 1.1:Các loại Frame trong nén ảnh video theo chuẩn MPEG.

5


II.

PHÂN TÍCH SƠ ĐỒ NÉN ẢNH VIDEO THEO CHUẨN MPEG-1.

Hình 2.1: Sơ đồ nén ảnh video theo chuẩn MPEG-1.
II.1.

II.2.

Sơ đồ nén gồm 3 khối chính trong MPEG1
• Khối mã hóa DCT, IDCT.
• Khối lượng tử hóa & lượng tử hóa ngược.
• Khối dự đoán, bù chuyển động
Phân tích sơ đồ nén
• Bước 1: Kiểm tra frame vào, nếu frame vào là frame I thực hiện tiếp tới
bước 4, nếu frame vào là frame B hoặc P thì thực hiện từ bước 5, nếu hết
frame thì kết thúc.
• Bước 2: Frame sẽ được lấy mẫu, DCT, lượng tử hóa ra ma trận đã được
lượng tử hóa.
• Bước 3: Ma trận đã được lượng tử hóa sẽ được mã hóa theo mã
Huffman tạo chuỗi bit.

• Bước 4: Ma trận đã được lượng tử hóa được lượng tử hóa ngược, DCT
ngược lưu vào bộ đệm chứa frame tham chiếu, sau đó quay lại bước 1.
• Bước 5: Đánh giá chuyển động giữa frame vào và frame tham chiếu tìm
ra vector chuyển động. Vector chuyển động được đưa ra mã hóa
entropy.
• Bước 6: Bù chuyển động: dựa vào vector chuyển động tìm được và
frame tham chiếu ta sẽ xây dựng lên frame dự đoán cho frame đầu vào.
• Bước 7: Frame vào trừ đi frame dự đoán tìm được ra một ma trận chứa
các giá trị sai khác giữa 2 frame.
• Bước 8: Ma trận sai khác sẽ được DCT, lượng tử hóa ra một ma trận sai
khác đã lượng tử hóa.
• Bước 9: Ma trận sai khác đã lượng tử hóa sẽ được mã hóa entropy thành
các chuỗi bit.

6


Bước 10: Nếu frame vào là P thì thực hiện bước 11, nếu là frame B thì
quay lại bước 1 luôn .
• Bước 11: Ma trận sai khác đã lượng tử hóa được lượng tử hóa ngược và
DCT ngược thu lại ma trận các sai khác. Ma trận các sai khác sẽ cộng
với ma trận giá trị điểm ảnh của frame tham chiếu thu được frame đầu
vào lưu vào bộ đệm chứa các frame tham chiếu, sau đó quay trở lại bước
1.
Chức năng của 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.

• 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.
• Khối dự đoán chuyển động: thực hiện tìm vector chuyển động của khối
điểm ảnh dựa theo frame hiện tại và frame tham chiếu(frame được dự
đoán trước nó). Vector chuyển động cũng sẽ được mã hóa và truyền đi.
• Khối bù chuyển độngcó nhiệm vụ khôi phục lại frame dự đoán bằng
vector chuyển động và frame tham chiếu của nó. Từ frame dự đoán và
frame hiện tại, ta lấy được thông tin về sự sai khác, thông tin này được
đưa đến bộ mã hóa DCT.
• Ngoài ra ,MPEG1 còn áp dụng giải thuật mã hóa Macroblock (MB). Ý
tưởng của giải thuật là khi một MB (đã qua biến đổi DCT) không thay
đổi trong 2 frame liên tiếp thì frame sau không cần phải truyền đi MB
đó. Có 3 loại mã hóa Macroblock(MB) khác nhau:


II.3.



Skipped MB: khi dự đoán từ các frame trước với vector dự đoán
chuyển động bằng 0, không có thông tin nào cần truyền đi.



Inter MB: khi dự đoán bù chuyển động từ các frame trước đó được
sử dụng. Khi đó cần truyền đi: kiểu mã hóa MB, địa chỉ của MB,
vector chuyển động, các hệ số của DCT, bước lượng tử hóa.




Intra MB: khi không dự đoán từ các frame trước đó (frame I), chỉ
cần truyền đi: kiểu mã hóa MB, địa chỉ MB, các hệ số DCT, bước
lượng tử hóa được truyền đi.

7


III. SƠ ĐỒ THUẬT
III.1.
Cấu trúc dữ liệu.

TOÁN NÉN VIDEO THEO CHUẨN MPEG-1.

Đầu tiên mỗi frame gồm mảng các slice, có loại frame, chiều dài và chiều rộng.
Mỗi slice gồm mảng các Macroblock, có số thứ tự slice.Mỗi Macroblock gồm
mảng 6 phần tử, mỗi phần tử là 1 ma trận 8x8, có giá trị x,y là tọa độ của điểm đầu
tiên của Macroblock trong frame. Trong đó có 4 ma trận lưu trữ giá trị độ chói Y và
2 ma trận lưu trữ giá trị màu Cr,Cb, do quá trình lấy mẫu 4:2:0 của MPEG-1

Hình 3.1: Cấu trúc dữ liệu trong quá trình nén video theo chuẩn MPEG-1.
III.2.

Tiền xử lý trước khi bước vào quá trình nén
Đầu vào là 1 chuỗi các frame từ camera.
Đầu ra là 1 video dưới chuẩn MPEG-1.
Chuỗi các frame đầu vào và chuỗi các frame xử lý

Hình 3.2: Thứ tự frame hiển thị và mã hóa.

8



Ta sử dụng mảng để lưu các frame theo thứ tự mã hóa và truyền.
Trong MPEG-1, mỗi video là một chuỗi bức ảnh, mỗi bức ảnh coi là một mảng
2 chiều các điểm, màu sắc mỗi điểm gồm 3 thành phần: Y, Cb, Cr.
Bức ảnh khi được chụp khi biểu diễn trên màn hình chứa các điểm thuộc không
gian màu RGB. Vì vậy trong MPEG-1 phải chuyển không gian màu RGB ->
YCbCr trước khi xử lý
Mắt người nhạy nhất với thành phần Y (độ sáng) và kém nhạy với Cb, Cr (màu
sắc) nên Y được nén với độ phân giải không đổi còn Cb, Cr giảm chiều ngang, dọc
đi một nửa (gọi là cấu trúc lấy mẫu 4:2:0)
Mỗi frame được chia làm các slice: là một hàng các macroblock từ trái qua phải.
Mỗi macroblock là một khối điểm ảnh, kích thước 16x16.
Các macroblock có thể chia tiếp làm các block 8x8 trước quá trình nén tùy vào
phương pháp thực hiện ở quá trình nén
Cấu trúc lấy mẫu trong MPEG-1 là 4:2:0
Trên mỗi macroblock, lấy mẫu tín hiệu Y tại tất cả các điểm ảnh của dòng, còn
tín hiệu màu thì cứ 4Y, có 2 màu CR và CB cách nhau theo từng hàng.

Hình 3.3: Cấu trúc lấy mẫu 4:2:0.
III.3.

Xây dựng thuật toán nén MPEG-1
Quá trình lấy mẫu 4:2:0:

III.3.1.

Sau khi chuyển đổi hệ màu từ BGR sang YCrCb ta có ma trận các điểm ảnh,
mỗi điểm là 1 vector 3 chiều (Y,Cr,Cb).
Sau đó ta chia thành các slice và từ các slice đó ta chia thành các ma trận 16x16

với mỗi phần tử là 1vector 3 chiều (Y,Cr,Cb).
Sử dụng vòng lặp for, lấy các giá trị Y tại mọi điểm, lấy giá trị Cr, Cb tại các
điểm mà cả 2 tọa độ của nó chia hết cho 2.
Quá trình biến đổi Discrete Cosine Transforms

III.3.2.

Với mỗi block 8x8 ta thực hiện phép biến đổi DCT với công thức:

;

9


III.3.3.

Thiết kế thuật toán DCT.

Do quá trình tính hàm cos rất phức tạp và tốn thời gian. Ta xây dựng 2 ma trận
để lưu trữ các giá trị cos đã được tính toán sẵn.
Ma trận đầu tiên là ma trận 8x8 Cosin[m][p] để lưu trữ các giá trị:
Cos
Sau đó ta lập ma trận 64x64 MultiCosin[8*m+p][8*n+q] lưu trữ các giá trị:

Sau khi có ma trận MultiCosin lưu trữ các giá trị:
Ta duyệt toàn bộ frame để có được các ma trận 8x8. Sử dụng công thức DCT
trên với các ma trận 8x8. Sau quá trình DCT ta thu được frame với các ma trận 8x8
đã được biến đổi DCT.
Trong đó là giá trị tại vị trí m,n của ma trận trước khi biến đổi DCT.
Trong đó là giá trị tại vị trí p,q của ma trận sau khi biến đổi DCT.

III.3.4.

Quá trình Lượng tử hóa:

Sau khi thu được các block 8x8 đã thực hiện biến đổi DCT. Ta thực hiện lượng
tử hóa với chúng.
Ta sử dụng công thức:
=Floor()
Trong đó là giá trị của ma trận lượng tử hóa tại vị trí p,q.
giá trị của ma trận sau khi lượng tử hóa tại p,q.
Bảng lượng tử hóa được sử dụng:




Hình 3.4: Bảng lượng tử hóa.
III.3.5.

Quá trình 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:
= *.

10


III.3.6.

Quá trình IDCT
Ta sử dụng công thức IDCT:


Với mỗi block 8x8 ta thực hiện phép biến đổi DCT với công thức:

Thuật toán được thiết kế gộp 2 khối DCT và lượng tử hóa thành 1 để việc xử lý
với các khối 8x8 thuận tiện hơn.
Đầu vào là frame theo cấu trúc dữ liệu sau đó duyệt ta có các block 8x8. Với
frame I thì nó là ma trận các giá trị (Y,Cb,Cr), còn nếu là frame P,B thì nó là ma
trận sự sai khác khi lấy (P-P’) hoặc (B-B’). Thưc hiện DCT và lượng tử hóa với các
block 8x8 kết quả thu được là 1 frame với các ma trận 8x8 đã thay được biến đổi
DCT và lượng tử hóa.
Quá trình 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.
III.3.7.

Quá trình đánh giá chuyển động

Input: 2 frame: 1 frame cần đánh giá chuyển động, 1 frame tham chiếu, tham số
tìm kiếm là p=7.
Output: tập hợp các vector chuyển động của mỗi macroblock trong frame.
Thuật toán: Dùng Block Matching Algorithm – Three Step Search (TSS).
• Bước 1: Chia frame thành nhiều macroblock 16x16. Ta chỉ tìm với
thành phần độ chói Y.

Bước 2: 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.

Bước 3: 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.

11


Hình 3.5: Cửa sổ tìm kiếm của 1 khối macroblock
16 pixel với tham số tìm kiếm là 7 pixel.


Bước 4: 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:

Bước 5: 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.
• Bước 6: 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
• Bước 7: lưu lại vector chuyển động tìm được của macroblock hiện tại.
Quá trình bù chuyển động


III.3.8.




Bước 1: tạo frame dự đoán từ frame tham chiếu và các vector chuyển
động. Kết quả trả về là frame dự đoán
Bước 2: tạo frame kết quả bằng cách cộng frame dự đoán với sai số dự

đoán.

12


Hình 3.6: Ước lượng chuyển động và bù chuyển động.
1. Tạo frame dự đoán
Input: frame tham chiếu ( P hoặc I ), tập các vector chuyển động của các
macroblock trong frame.
Output: frame dự đoán.
Thuật toán:
• Bước 1: 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.

Bước 2: 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 đó.

Bước 3: 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 đó.

Bước 4: duyệt xong toàn bộ, trả về P’ là frame dự đoán.
2. Tạo frame kết quả
Frame kết quả tạo ra bằng cách thực hiện cộng frame dự đoán với sai số dự
đoán.
Input: frame dự đoán và sai số dự đoán tương ứng.
Output: frame kết quả là frame đã hoàn tất bù chuyển động


13


Hình 3.7: Tính sự sai khác
Quét zigzag
Input: Một Frame đã được DCT, lượng tử hóa;
Output: ma trận 2 chiều khi tất cả lưu kết quả của zigzac của từng block trong
mỗi MB của frame.
Thuật toán:
- Dựa theo cấu trúc dữ liệu, ta sẽ quét zigzag cho từng khối 8*8 của một
Macroblock, 1 khối MB có 6 khối block 8*8.
- cur_row=0,cur_col =0 là chỉ số hàng và cột trong một block
• Bước 1: Quét từ phần tử đầu tiên của của từng block 8*8
• Bước 2: Dựa theo chỉ số hàng và cột để quét phần tử tiếp theo.
- (cur_col==0 ) &&(cur_row+ cur_col)mod 2==1 và cur_row !=7 : quét
sang phải tại hàng đầu tiên
- (cur_row==7 ) &&(cur_row+ cur_col)mod 2==1 và cur_col !=7: quét
sang phải tại hàng cuối
- (cur_col==0 ) &&(cur_row+ cur_col)mod 2==1 và cur_row !=7: quét
xuống dưới bên trái.
- (cur_col==7 ) &&(cur_row+ cur_col)mod 2==0 và cur_row !=7: quét
xuống dưới bên phải
- (cur_col !=0 ) &&(cur_row+ cur_col)mod 2==1 và cur_row !=7: quét
xuống chéo trái.
- (cur_row != 0) &&(cur_row+ cur_col)mod 2==0 và cur_col !=7: quét
lên chéo phái
- ( cur_row==7 && cur_col==7) : lưu điểm cuối cùng vào mảng, kết
thúc quét zigzag block này.
III.3.9.


Mã hóa entropy

Input: 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.
Output: byte BS[]: chuỗi bit sau khi nén.

14


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.
1. Mã hóa macroblock
B1: 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;
• B2: 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];}
• B3: 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= - ;
Cat: hạng của ∆DC trong bảng mã Huffman
1- 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);
2 – 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;
3 – Mã hóa nhị phân giá trị ∆DC;
4 – 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 3.1: Bảng mã Huffman cho thành phần DC.

15


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

Bảng 3.3: Bảng mã Huffman cho sai khác hệ số màu DC
 Bước 4:

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

16


Bảng 3. 4: Bảng Huffman
Mã hóa vector chuyển động
Input: 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;
Output: DC[m][2]: chuỗi bit mã hóa vector chuyển động
Thuật toán: 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.
 B1: 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 cđ
MVx[n] ={MV[i][0],…,MV[i][i+n-1]}: lưu trục x của các vector cđ
 B2: mã hóa từng thành phần của vector cđ 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= - ;
Nếu -32<∆MVy< 31 thì (MVy[i] >range) {
MVy[i]= MVy[i]-2*range;
}

17


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].

18


IV. CÀI ĐẶT THỬ NGHIỆM GIẢI PHÁP NÉN ẢNH VIDEO MPEG-1

Phần cài đặt thử nghiệm gồm:
Quá trình lấy mẫu 4:2:0 cho mỗi Frame đầu vào.
Quá trình Discrete Cosine Transforms
Quá trình IDCT
Quá trình lượng tử hóa
Quá trình lượng tử hóa ngược.
Đánh giá truyển động bằng thuật toán Three Step Search và Bù chuyển
động.

Chuỗi frame xử lý với n = 9, m = 3,







Mô tả xử lý từng frame:









Các frame vào sẽ được lấy mẫu 4:2:0
Frame thứ nhất vào là frame I được đưa vào biến đổi DCT, Lượng tử
hóa. Rồi được chia thành 2 nhánh:
o Nhánh thứ nhất được mã hóa Entropy thành dòng bit.
o Nhánh thứ hai được Lượng tử hóa ngược, IDCT. Rồi đưa vào bộ
đệm Frame tham chiếu.
Frame thứ hai (frame B) vào được đưa vào bộ đệm,
Frame thứ ba (frame B) vào được đưa vào bộ đệm,
Frame thứ tư vào được chia thành hai nhánh,
o Nhánh thứ nhất bù chuyển động với frame tham chiếu đưa ra một
frame dự đoán, vector chuyển động được đưa tới phần mã hóa
Entropy.

o Nhánh thứ hai trừ sai khác với frame dự đoán được tạo ra ở nhánh
thứ nhất.
Thực hiện DCT, Lượng tử hóa rồi chia thành 2 nhánh
o Nhánh thứ nhất được mã hóa Entropy thành dòng bit.
o Nhánh thứ hai được Lượng tử hóa ngược, IDCT. Rồi đưa vào bộ
đệm Frame tham chiếu.
Tiếp theo xử lý frame thứ hai, ba tương tự frame thứ tư nhưng khác ở chỗ
xác định vector chuyển động sử dụng dựa trên 2 frame tham chiếu I và P.

Hình 4.1: Chương trình mình họa.

19


KẾT LUẬN
Qua đề tài trên chúng em đã nắm rõ được các khái niệm cơ bản của chuẩn nén
video MPEG-1, hiểu được sơ đồ nén video theo chuẩn MPEG-1, nắm rõ các thuật
toán để nén video MPEG đặc biệt là thuật toán so sánh khối giữa các MacroBlock
để tìm ra vector chuyển động.
Nâng cao khả năng làm việc nhóm .

20


TÀI LIỆU THAM KHẢO
[1] The MPEG Representation of Digital Media - Leonardo Chiariglione
[2] An Introduction to Image Compression - Wei-Yi Wei
[3] Video Compression – MPEG - Roger Cheng
[4] />
21




×