Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
1,25 MB
Nội dung
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 Lê Công Tú 20122765 Trần Thanh Tĩnh 20122568 Đỗ Gia Việt 20122784 Nguyễn Ngọc Thịnh 20122510 PGS.TS Nguyễn Thị Hoàng Lan MỤC LỤC DANH MỤC BẢNG BIỂU, HÌNH ẢNH Hình 1.1:Các loại Frame nén ảnh video theo chuẩn MPEG Hình 3.1: Cấu trúc liệu trình nén video theo chuẩn MPEG-1 Hình 3.2: Thứ tự frame hiển thị 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 khối macroblock 16 pixel với tham số tìm kiếm pixel Hình 3.6: Ước lượng chuyển động bù chuyển động Hình 3.7: Tính sai khác 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 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 ngắn, kiến thức chúng em vấn đề liên quan đến MPEG-1 nhiều hạn chế nên không tránh thiếu sót Chúng em mong cô dẫn để có báo cáo xác hoàn thiện Nhóm xin chân thành cảm ơn! I KHÁI QUÁT CHUẨN NÉN VIDEO MPEG MPEG(motion picture experts group) nhóm chuyên gia hình ảnh thành lập từ tháng năm 1998 với nhiệm vụ xây dựng tiêu chuẩn cho tín hiệu Audio Video số Ngày nay, MPEG trở thành kỹ thuật nén Audio Video phổ biến không tiêu chuẩn riêng biệt mà tùy thuộc vào yêu cầu cụ thể thiết bị có tiêu chuẩn thích hợp nguyên lý thống Các hệ chuẩn MPEG: • • • • MPEG hệ lưu trữ phục hồi ảnh động Audio lưu trữ Media MPEG-1 nén tín hiêu video tới 1.5 Mbps với chất lượng VHS âm lập thể (stereo audio) với tốc độ 192 bps Được dùng để lưu trữ video âm CD-ROM MPEG hệ cho TV số MPEG hệ cho ứng dụng Multmedia MPEG-4 trở thành tiêu chuẩn cho nén ảnh kỹ thuật truyền hình số, ứng dụng đồ họa video tương tác hai chiều (Games, Video conferencing) ứng dụng Multimedia tương tác hai chiều (world wide web ứng dụng nhằm phân phát liệu video truyền hình cáp, internet video…) MPEG-4 trở thành tiêu chuẩn công nghệ trình sản xuất, phân phố truy cập vào hệ thống video Nó góp phần giải vấn đề dung lượng cho thiết bị lưu trữ, giải vấn đề băng thông đường truyền tín hiệu video kết hợp hai vấn đề MPEG 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 MPEG: Hệ màu chuẩn sử dụng hệ màu YUV YCbCr: YUV: quy định không gian màu tạo thành phần độ chói (Y) hai thành phần màu (U, V) • Sau nén xong màu sắc MPEG1 chuyển sang Y'CbCr Trong thành phần Y ý: mắt người nhạy với độ sáng màu sáng thành phần ( Cb, Cr ) Frame: MPEG có loại Frame: • • • • Frame I: frame chuỗi video, mã hóa JPEG Frame P: frame dự đoán Frame B: frame dự đoán nội suy chiều Hình 1.1:Các loại Frame nén ảnh video theo chuẩn MPEG 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 khối 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, frame vào frame I thực tiếp tới bước 4, frame vào frame B P thực từ bước 5, hết frame kết thúc • Bước 2: Frame lấy mẫu, DCT, lượng tử hóa ma trận lượng tử hóa • Bước 3: Ma trận lượng tử hóa mã hóa theo mã Huffman tạo chuỗi bit • Bước 4: Ma trận lượng tử hóa lượng tử hóa ngược, DCT ngược lưu vào đệm chứa frame tham chiếu, sau quay lại bước • Bước 5: Đánh giá chuyển động frame vào frame tham chiếu tìm vector chuyển động Vector chuyển động đưa mã hóa entropy • Bước 6: Bù chuyển động: dựa vào vector chuyển động tìm frame tham chiếu ta xây dựng lên frame dự đoán cho frame đầu vào • Bước 7: Frame vào trừ frame dự đoán tìm ma trận chứa giá trị sai khác frame • Bước 8: Ma trận sai khác DCT, lượng tử hóa 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 mã hóa entropy thành chuỗi bit Bước 10: Nếu frame vào P thực bước 11, frame B quay lại bước • Bước 11: Ma trận sai khác lượng tử hóa lượng tử hóa ngược DCT ngược thu lại ma trận sai khác Ma trận sai khác cộng với ma trận giá trị điểm ảnh frame tham chiếu thu frame đầu vào lưu vào đệm chứa frame tham chiếu, sau quay trở lại bước Chức khối • Khối DCT thực phép biến đổi Cosin rời rạc đối tượng sai khác frame frame dự đoán (đối với frame I, DCT thực biến đổi khối điểm ảnh frame) IDCT thực phép biến đổi Cosin ngược, phục hồi lại sai khác mã hóa, sử dụng cho 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 bước lượng tử, rời rạc hóa giá trị khối điểm ảnh qua biến đổi DCT • Khối dự đoán chuyển động: thực tìm vector chuyển động khối điểm ảnh dựa theo frame frame tham chiếu(frame dự đoán trước nó) Vector chuyển động mã hóa truyền • Khối bù chuyển độngcó nhiệm vụ khôi phục lại frame dự đoán vector chuyển động frame tham chiếu Từ frame dự đoán frame tại, ta lấy thông tin sai khác, thông tin đưa đến mã hóa DCT • Ngoài ,MPEG1 áp dụng giải thuật mã hóa Macroblock (MB) Ý tưởng giải thuật MB (đã qua biến đổi DCT) không thay đổi frame liên tiếp frame sau không cần phải truyền MB Có loại mã hóa Macroblock(MB) khác nhau: • II.3 − Skipped MB: dự đoán từ frame trước với vector dự đoán chuyển động 0, thông tin cần truyền − Inter MB: dự đoán bù chuyển động từ frame trước sử dụng Khi cần truyền đi: kiểu mã hóa MB, địa MB, vector chuyển động, hệ số DCT, bước lượng tử hóa − Intra MB: không dự đoán từ frame trước (frame I), cần truyền đi: kiểu mã hóa MB, địa MB, hệ số DCT, bước lượng tử hóa truyền III SƠ ĐỒ THUẬT III.1 Cấu trúc liệu TOÁN NÉN VIDEO THEO CHUẨN MPEG-1 Đầu tiên frame gồm mảng slice, có loại frame, chiều dài chiều rộng Mỗi slice gồm mảng Macroblock, có số thứ tự slice.Mỗi Macroblock gồm mảng phần tử, phần tử ma trận 8x8, có giá trị x,y tọa độ điểm Macroblock frame Trong có ma trận lưu trữ giá trị độ chói Y ma trận lưu trữ giá trị màu Cr,Cb, trình lấy mẫu 4:2:0 MPEG-1 Hình 3.1: Cấu trúc liệu trình nén video theo chuẩn MPEG-1 III.2 Tiền xử lý trước bước vào trình nén Đầu vào chuỗi frame từ camera Đầu video chuẩn MPEG-1 Chuỗi frame đầu vào chuỗi frame xử lý Hình 3.2: Thứ tự frame hiển thị mã hóa Ta sử dụng mảng để lưu frame theo thứ tự mã hóa truyền Trong MPEG-1, video chuỗi ảnh, ảnh coi mảng chiều điểm, màu sắc điểm gồm thành phần: Y, Cb, Cr Bức ảnh chụp biểu diễn hình chứa điểm thuộc không gian màu RGB Vì MPEG-1 phải chuyển không gian màu RGB -> YCbCr trước xử lý Mắt người nhạy với thành phần Y (độ sáng) nhạy với Cb, Cr (màu sắc) nên Y nén với độ phân giải không đổi Cb, Cr giảm chiều ngang, dọc nửa (gọi cấu trúc lấy mẫu 4:2:0) Mỗi frame chia làm slice: hàng macroblock từ trái qua phải Mỗi macroblock khối điểm ảnh, kích thước 16x16 Các macroblock chia tiếp làm block 8x8 trước trình nén tùy vào phương pháp thực trình nén Cấu trúc lấy mẫu MPEG-1 4:2:0 Trên macroblock, lấy mẫu tín hiệu Y tất điểm ảnh dòng, tín hiệu màu 4Y, có màu CR CB cách theo 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 chuyển đổi hệ màu từ BGR sang YCrCb ta có ma trận điểm ảnh, điểm vector chiều (Y,Cr,Cb) Sau ta chia thành slice từ slice ta chia thành ma trận 16x16 với phần tử 1vector chiều (Y,Cr,Cb) Sử dụng vòng lặp for, lấy giá trị Y điểm, lấy giá trị Cr, Cb điểm mà tọa độ chia hết cho Quá trình biến đổi Discrete Cosine Transforms III.3.2 Với block 8x8 ta thực phép biến đổi DCT với công thức: ; III.3.3 Thiết kế thuật toán DCT Do trình tính hàm cos phức tạp tốn thời gian Ta xây dựng ma trận để lưu trữ giá trị cos tính toán sẵn Ma trận ma trận 8x8 Cosin[m][p] để lưu trữ giá trị: Cos Sau ta lập ma trận 64x64 MultiCosin[8*m+p][8*n+q] lưu trữ giá trị: Sau có ma trận MultiCosin lưu trữ giá trị: Ta duyệt toàn frame để có ma trận 8x8 Sử dụng công thức DCT với ma trận 8x8 Sau trình DCT ta thu frame với ma trận 8x8 biến đổi DCT Trong giá trị vị trí m,n ma trận trước biến đổi DCT Trong giá trị vị trí p,q ma trận sau biến đổi DCT III.3.4 Quá trình Lượng tử hóa: Sau thu block 8x8 thực biến đổi DCT Ta thực lượng tử hóa với chúng Ta sử dụng công thức: =Floor() Trong giá trị ma trận lượng tử hóa vị trí p,q giá trị ma trận sau lượng tử hóa p,q Bảng lượng tử hóa 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 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 block 8x8 ta thực phép biến đổi DCT với công thức: Thuật toán thiết kế gộp khối DCT lượng tử hóa thành để việc xử lý với khối 8x8 thuận tiện Đầu vào frame theo cấu trúc liệu sau duyệt ta có block 8x8 Với frame I ma trận giá trị (Y,Cb,Cr), frame P,B ma trận sai khác lấy (P-P’) (B-B’) Thưc DCT lượng tử hóa với block 8x8 kết thu frame với ma trận 8x8 thay biến đổi DCT lượng tử hóa Quá trình IDCT cho ta frame theo cấu trúc liệu có sai khác so với frame ban đầu trình Lượng tử hóa gây III.3.7 Quá trình đánh giá chuyển động Input: frame: frame cần đánh giá chuyển động, frame tham chiếu, tham số tìm kiếm p=7 Output: tập hợp vector chuyển động macroblock 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 tìm với thành phần độ chói Y • Bước 2: Duyệt macroblock frame để tìm vector chuyển động cho 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 có kích thước mở rộng phía cạnh macroblock pixel -> kích cỡ cửa sổ tìm kiếm 30x30 • Bước 3: Xác định điểm trung tâm macroblock, vị trí khởi đầu tìm kiếm, với tham số tìm kiếm p=7 kích thước tìm kiếm ban đầu S=4, ta xác định điểm +/- S pixel quanh điểm trung tâm 11 Hình 3.5: Cửa sổ tìm kiếm khối macroblock 16 pixel với tham số tìm kiếm pixel • Bước 4: với điểm, ta tính sai khác tuyệt đối – MAD tương ứng theo công thức đây, với m=n=16 kích thước macroblock: Bước 5: xác định điểm có MAD nhỏ đặt làm gốc tìm kiếm mới, kích thước tìm kiếm giảm nửa S=S/2 • Bước 6: lặp lại trình bước kích thước tìm kiếm S=1 dừng lại, điểm có MAD nhỏ bước trung tâm macroblock phù hợp • Bước 7: lưu lại vector chuyển động tìm macroblock Quá trình bù chuyển động • III.3.8 • • Bước 1: tạo frame dự đoán từ frame tham chiếu vector chuyển động Kết trả frame dự đoán Bước 2: tạo frame kết 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 bù chuyển động Tạo frame dự đoán Input: frame tham chiếu ( P I ), tập vector chuyển động macroblock frame Output: frame dự đoán Thuật toán: • Bước 1: chia frame tham chiếu thành macroblock 16x16 Tạo frame P’ với giá trị ban đầu 0, sau chia thành block 16x16 • Bước 2: duyệt macroblock P’, macroblock bên trái, đồng thời lấy 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’ gán giá trị macroblock • Bước 4: duyệt xong toàn bộ, trả P’ frame dự đoán Tạo frame kết Frame kết tạo cách thực cộng frame dự đoán với sai số dự đoán Input: frame dự đoán sai số dự đoán tương ứng Output: frame kết frame hoàn tất bù chuyển động 13 Hình 3.7: Tính sai khác Quét zigzag Input: Một Frame DCT, lượng tử hóa; Output: ma trận chiều tất lưu kết zigzac block MB frame Thuật toán: - Dựa theo cấu trúc liệu, ta quét zigzag cho khối 8*8 Macroblock, khối MB có khối block 8*8 - cur_row=0,cur_col =0 số hàng cột block • Bước 1: Quét từ phần tử của block 8*8 • Bước 2: Dựa theo số hàng cột để quét phần tử - (cur_col==0 ) &&(cur_row+ cur_col)mod 2==1 cur_row !=7 : quét sang phải hàng - (cur_row==7 ) &&(cur_row+ cur_col)mod 2==1 cur_col !=7: quét sang phải hàng cuối - (cur_col==0 ) &&(cur_row+ cur_col)mod 2==1 cur_row !=7: quét xuống bên trái - (cur_col==7 ) &&(cur_row+ cur_col)mod 2==0 cur_row !=7: quét xuống bên phải - (cur_col !=0 ) &&(cur_row+ cur_col)mod 2==1 cur_row !=7: quét xuống chéo trái - (cur_row != 0) &&(cur_row+ cur_col)mod 2==0 cur_col !=7: quét lên chéo phái - ( cur_row==7 && cur_col==7) : lưu điểm cuối vào mảng, kết thúc quét zigzag block III.3.9 Mã hóa entropy Input: int MV[][]: ma trận vector chuyển động frame; int F[6*n][64]: ma trận lưu vector sau quét zigzac frame Với n số MB Output: byte BS[]: chuỗi bit sau nén 14 Thuật toán: • MB gồm block: MV,4 blockY, block Cb,1 block Cr.=> vector liên tiếp mảng kết zigzag MB frame • Ta mã hóa MB làm mẫu, MB làm tương tự, tổng hợp chuỗi mã hóa nhiều MB chuỗi bit sau nén Mã hóa macroblock B1: từ 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ừ vector ta tách thành phần DC AC MB thành mảng để mã hóa int DCL[4]={F[i][0],…F[i+3][0]}: ma trận lưu giá trị DC thành phần chói int DCC[2]={F[i+4][0],F[i+5][0]}: ma trận lưu giá trị DC thành phần màu int ACL[4][64]: ma trận lưu giá trị xoay chiều 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 giá trị xoay chiều 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 thành phần DC: DCL DCC sử dụng thuật toán DPCM mã hóa Huffman để chuỗi bit BoDC[6]: mảng lưu chuỗi bit thành phần DC Thuật toán: Hệ số DC mã hóa theo dạng (cat, value) Value: ∆DC= - ; Cat: hạng ∆DC bảng mã Huffman 1- Dò tìm bảng phân loại để tìm “cat” giá trị ∆DC ( “cat” 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 từ mã cho “cat” ∆DC tìm bước 1; – Mã hóa nhị phân giá trị ∆DC; – Ghép từ mã Huffman giá trị nhị phân ∆DC để 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 mảng thành phần AC: ACL[4][64] ACC[2][64] thuật toán RLE 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 – số lượng bit "0" đứng trước hệ số khác "0" mã hóa; Biên độ hệ số khác "0" nói Thuật toán Huffman: Từ mã Huffman ứng với cặp giá trị tìm bảng phân loại bảng mã Huffman cho thành phần AC Từ mã AC bao gồm từ mã Huffman giá trị biên độ (nhị phân) hệ số AC Sau hệ số khác "0" cuối cùng, đặt từ mã đặc biệt để báo hiệu kết thúc khối, từ mã có tên EOB – End Of Block Bảng mã Huffman cho thành phần AC 16 Bảng 4: Bảng Huffman Mã hóa vector chuyển động Input: MV[m*n][2]: mảng chiều chứa vector chuyển động MB frame; m: số slice frame, n số MB slice; Output: DC[m][2]: chuỗi bit mã hóa vector chuyển động Thuật toán: theo cấu trúc liệu ban đầu: frame có mảng slice chứa m slice, slice chứa n MB Ta mã hóa vector chuyển động 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 mảng : MVy[n] ={MV[i][0],…,MV[i][i+n-1]}: lưu trục y vector cđ MVx[n] ={MV[i][0],…,MV[i][i+n-1]}: lưu trục x vector cđ B2: mã hóa thành phần vector cđ sử dụng mã Huffman Thuật toán mã Huffman: Các giá trị mã theo độ lệch giá trị vector chuyển động ∆MVy= - ; Nếu -32range) { MVy[i]= MVy[i]-2*range; } 17 If(V1[i][...]... đệ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... 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 -32range) { MVy[i]= MVy[i]-2*range; } 17 If(V1[i] 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]... độ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... 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);