Với đầu vào là các frame đã được chia thành các MB, sử dụng hai kỹthuật: - Kỹ thuật ước lượng chuyển động: nhằm mục đích tính ra vector chuyểnđộng, sử dụng frame tham chiếu frame I để tì
Trang 1TRƯỜ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: TRUYỀN THÔNG ĐA PHƯƠNG TIỆN
ĐỀ TÀI: NÉN VIDEO THEO CHUẨN ITU-T
Trang 2Mục lục
Trang 3Danh mục hình ảnh
Trang 4Lời nói đầu
Công nghệ thông tin ngày càng phát triển, truyền thông đa phương tiện là mộtnhu cầu không thể thiếu Trong truyền thông đa phương tiện, công nghệ nén video
là vô cùng quan trọng Những video có dung lượng lớn muốn được truyền tải rộngrãi qua mạng internet thì phải được nén Tùy từng nhu cầu, mục đích cụ thể sẽ cónhiều chuẩn nén video khác nhau
Trong báo cáo này, chúng em sẽ trình bày về chuẩn nén video ITU (H.26x) và
so sánh chuẩn nén H.261 với MPEG-1
Chúng em xin cảm ơn cô Nguyễn Thị Hoàng Lan đã giúp chúng em hoàn thànhbáo cáo này
Trang 5CHƯƠNG 1
Tìm hiểu chung về các chuẩn nén ITU-T, chuẩn H.26X (H.261, H.263, H.264)
I Giới thiệu tổ chức ITU
ITU là Liên minh viễn thông quốc tế thuộc Liên hiệp quốc, được thành lập vàonăm 1865 (tiền thân là Liên minh Điện báo quốc tế - International TelegraphUnion)
Hoạt động của ITU bao trùm tất cả các vấn đề thuộc ngành Công nghệ viễnthô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ẩnchung 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
ITU hoạt động trên 3 lĩnh vực chính:
- Telecom - Viễn thông
- Radio - Thông tin vô tuyến
- Telecommunications Development - Phát triển viễn thông
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 gồm có các chuẩn H.261, H.263, H.264, H.265.Trong đó, chuẩn H.264 được biết đến là chuẩn MPEG – 4 Part 10/AVC (AdvancedVideo Coding) do ITU – T hợp tác với ISO/ISE cùng phát triển ITU tập trung vàocác ứng dụng với dòng video chuẩn H.26x như: H.261, H.263, H.264 và mới đây làchuẩn H.265
II Tổng quan về chuẩn nén video H.261
1 Tổng quan
- Chuẩn 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 nhaucủa một hệ thống video conference, được thiết kế cho các ứng dụng videotelephony và video conference qua đường ISDN
- Chuẩn này ban đầu được thiết kế cho mạng ISDN với tốc độ truyền dữ liệu
là bội số của 64Kbit/s (p*64Kbit/s)
- Thuật toán nén theo chuẩn H.261 giúp 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
Trang 6- Trong chuẩn này, chuỗi video được định nghĩa theo 2 chuẩn định dạng làCIF và QCIF Trong đó: CIF là tiêu chuẩn cho kích thước video và hình ảnhtrong máy tí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 176x144 pixel.
- 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àucò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ộcvào các ứng dụng và băng thông đường truyền khác nhau
2 Kĩ thuật mã hóa trong chuẩn nén video H.261
- Dự đoán trước hình ảnh: nhằm loại bỏ việc lặp lại, giảm sự dư thừa thờigian
- Biễn đổi mã: nhằm loại bỏ lặp lại, giảm sự dư thừa về không gian
- Bù lại các chuyển động: sử dụng các véc tơ chuyển động để bù lại cácchuyển động
3 Cấu trúc phân cấp video trong chuẩn H.261
- Chuẩn H.261 tổ chức dữ liệu theo dòng frame, với 2 loại frame là I và Pframe:
Hình 1: Dòng frame theo chuẩn H.261
- Cấu trúc phân cấp trong mỗi frame:
Trang 7Hình 2: Cấu trúc phân cấp trong từng frame theo chuẩn H.261
- Tùy theo tín hiệu đầu vào được định dạng theo CIF hay QCIF, nếu định dạngtheo định dạng CIF thì mỗi frame sẽ có 12 GOBs và theo định dang QCIF thìmỗi frame có 3 GOBs
Hình 3: Số GOB theo định dạng CIF
Hình 4: Số GOB theo định dạng QCIF
- Mỗi GOB gồm có 11 x 3 = 33 MB (Macro Block)
Trang 8- Mỗi MB sẽ được tổ chức thành các Block, trong đó có 4 block Y có kíchthước 16x16 pixels, 1 block U có kích thước 8x8 pixels và 1 block V có kíchthước 8x8 pixels.
Hình 5: Cấu trúc Macro Block
4 Cấu trúc phân lớp dữ liệu video theo chuẩn H.261
Hình 6: Cấu trúc phân lớp dữ liệu video theo chuẩn H.261
- Picture-layer: gồm PSC (start of picture code - mã đầu của ảnh), TR (time
stamp reference - nhãn thời gian tham chiếu), picture type (I/P) và các GOB
- GOB layer: gồm GOB start (GOB start code - mã bắt đầu GOB), group
number (số nhóm), group quant (group quantization value - giá trị lượng tử)
và các MB
- MB layer: gồm MBA (macroblock address- địa chỉ macroblock), MTYPE
(intra/inter), MQUANT (quantizer), MVD (motion vector data- vecto chuyểnđộng), CBP (coded block pattern- mẫu block được mã hóa) và các Block
- Block- layer: gồm quét zig-zag với cặp hệ số (run, level), và kết thúc block
EOB
5 Sơ đồ nén theo chuẩn H.261
Trang 9Hình 7: Sơ đồ nén theo chuẩn H.261
5.1 Nén Intraframe (frame I)
Mã hóa frame đầu tiên (frame tham chiều) của chuỗi các frame của video, tương
tự như mã hóa ảnh JPEG
Hình 8: Sơ đồ nén intraframe Đặc điểm:
- Quá trình biến đổi DCT: từ các block có kích 8x8 pixel, qua phép biếnđổi cosin rời rạc để biến đổi tập giá trị từ miền không gian sang tập giá trịtrong miền tần số
- Quá trình lượng tử hóa: không giống như JPEG, chuẩn H.261 sử dụngmột bảng lượng tử hóa thống nhất cho tất cả các block
- Ma trận dữ liệu thu được sau quá trình lượng tử hóa được quét zig-zacnhằm mục đích tăng hiệu quả quét do dữ liệu tập trung chủ yếu ở cácphần tử đầu tiên Sau đó sử dụng phương pháp nén RLC, Huffman
Trang 105.2 Nén Interframe
Nén Interframe nhằm mục đích giảm độ dư thừa thời gian giữa các frame trongchuỗi video Nén interframe là mã hóa sự sai khác giữa frame hiện tại và frametham chiếu Với đầu vào là các frame đã được chia thành các MB, sử dụng hai kỹthuật:
- Kỹ thuật ước lượng chuyển động: nhằm mục đích tính ra vector chuyểnđộng, sử dụng frame tham chiếu (frame I) để tìm frame dự đoán (frameP)
- Kỹ thuật bù chuyển động: nhằm mục đích khôi phục lại ảnh sau nén
6 Sơ đồ giải nén theo chuẩn H.261
Hình 9: Sơ đồ giải nén theo chuẩn H.261
Trang 11CHƯƠNG 2
Phân tích, so sánh các sơ đồ nén video H.261
với video MPEG-1
Hình 10: Sơ đồ nén theo chuẩn H.261
Trang 12Hình 11: Sơ đồ nén theo chuẩn MPEG-1
I Giống nhau
Các phương pháp nén theo chuẩn MPEG và H.26x có nhiều điểm giống nhau
Có thể kể ra một số điểm giống nhau cơ bản như:
- 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
- Do mắt người có thể phân biệt sự thay đổi về độ sáng của ảnh (brightness)tốt hơn so với sự thay đổi về màu (chromaticity) nên hầu hết các sơ đồnén theo chuẩn MPEG và H.26X đều tiến hành chia bức ảnh thành mộtthành phần về độ sáng Y (luminance) và hai thành phần về độ màu UV(chrominance)
- Các tín hiệu video thành phần được lấy mẫu (samples) và số hoá (digitised)
để tạo nên các điểm ảnh rời rạc theo tỷ lệ 4:2:2, 4:2:0 và 4:1:1
- Các sơ đồ nén theo MPEG, H.26X đều dùng kỹ thuật subsampling và lượng
tử hoá trước khi mã hoá nhằm giảm kích thước bức ảnh đầu vào theo cảchiều ngang và chiều dọc
- Đều tiến hành chia khung hình thành các khối điểm ảnh để việc xử lý cáckhung 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 Điềunày thực hiện bằng các kỹ thuật ước lương chuyển động và bù chuyển động.Đối với bất kì khối nào, việc tìm kiếm được thực hiện trong các khung mãhóa trước đó để xác định vector chuyển động mà sau đó được sử dụng bởi bộ
mã hóa và giải mã để dự đoán khối chủ đề
Trang 13- Giảm độ dư thừa không gian trong các khung hình video bằng cách mã hóamột số khối gốc thông qua việc dự báo về không gian, lượng tử hóa, cácphép biến đổi và mã hóa dữ liệu ngẫu nhiên, mã hóa độ dài thay đổi.
- Giảm không gian dư thừa còn lại tồn tại trong các khung hình video bằngcách mã hóa các khối còn lại… tức là sự sai khác giữa các khối tương ứngban đầu và các khối dự đoán, một lần nữa thông qua biến đổi, lượng tử hóa
và mã hóa dữ liệu ngẫu nhiên
II Khác nhau
Điều khác biệt đầu tiên là trong sơ đồ nén của chuẩn nén video H.261 có sử dụng bộ Control Coding (điều chỉnh lượng tử hóa, tốc độ bit)
1 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à:frame I và frame P, còn MPEG-1 sử dụng cả frame I, P, B
Hình 12: Chuỗi frame theo chuẩn H.261
Trang 14Hình 13: Chuỗi frame theo chuẩn MPEG-1
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 dạng Mỗi frame củachuẩ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
Hình 14: Cấutr úc phân lớp dữ liệu theo chuẩn H.261
Trang 15Hình 15: Cấu trúc phân lớp dữ liệu theo chuẩn MPEG-1
3 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 Nhưng chuẩnMPEG-1 sử dụng hai bảng lượng tử hóa khác nhau cho các block của intraframe vàcác block của interframe
4 Độ 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
Trang 16CHƯƠNG 3
Xây dựng sơ đồ thuật toán nén ảnh video theo
chuẩn H.261
- Đầu vào: Video chuỗi các Frame
- Ảnh màu trong không gian RGB được biến đổi về hệ YUV (YCbCr).
- Tách chuỗi frame trên thành từng frame và qui ước cứ 4 frame là 1 nhóm gồm: frame đầu tiên của nhóm là frame I, 3 frame còn lại là frame P.
- Nén Frame I (kỹ thuật nén intra frame):
Quá trình nén Frame I tương tự như nén ảnh Jpeg như sau:
Trang 18- Đối với thành phần AC: Zig-Zag
Tác dụng của sắp xếp lại theo thứ tự ZigZag là tạo ra nhiều loại hệ số giống nhau Chúng ta biết rằng năng lượng của khối hệ số giảm dần từ góc trên bên trái xuống góc dưới bên phải nên việc sắp xếp lại các hệ số theo thứ tự ZigZag sẽ tạo điều kiện cho các hệ số xấp xỉ nhau (cùng mức lượng tử) nằm trên một dòng Mỗi khối ZigZag này được mã hóa theo phương pháp RLE Cuối mỗi khối đầu ra của RLE, ta đặt dấu kết thúc khối EOB (End Of Block).
Trang 19Sau đó, các khối được dồn lại và mã hóa một lần bằng phương pháp mã Huffman.
Giá trị mẫu được giải mã dựa trên giải mã sự sai khác và giá trị dự đoán ở thời điểm trước.
- Huffman
Thuật toán bao gồm 2 bước chính:
- Giai đoạn thứ nhất: tính tần suất của các ký tự trong dữ liệu gốc: duyệt tệp gốc một cách tuần tự từ đầu đến cuối để xây dựng bảng mã Tiếp sau đó là sắp xếp lại bảng mã theo thứ tự tần suất giảm dần.
- Giai đoạn thứ hai: mã hóa: duyệt bảng tần suất từ cuối lên đầu để thực hiện ghép 2 phần tử có tần suất xuất hiện thấp nhất thành một phần tử duy nhất Phần tử này có tần suất bằng tổng 2 tần suất thành phần Tiến hành cập nhật lại bảng và đương nhiên loại bỏ 2 phần tử đã xét Quá trình được lặp lại cho đến khi bảng chỉ có một phần tử Quá trình này gọi là quá trình tạo cây mã Huffman vì việc tập hợp được tiến hành nhờ một cây nhị phân 2 nhánh Phần
tử có tần suất thấp ở bên phải, phần tử kia ở bên trái Với cách tạo cây này, tất
cả các bit dữ liệu/ký tự là nút lá; các nút trong là các nút tổng hợp Sau khi cây đã tạo xong, người ta tiến hành gán mã cho các nút lá Việc mã hóa rất đơn giản: mỗi lần xuống bên phải ta thêm 1 bit “1” vào từ mã; mỗi lần xuống bên trái ta thêm một bit “0”.
Trang 20- Frame P (mục tiêu nén là nén vector chuyển động và sai số dự đoán)
Ước lượng chuyển động
Hầu hết các frame liên tiếp trong video tương tự với frame trước đó.Khi nén tất cả các frame trong video theo cùng phương pháp sẽ dẫn đến dư thừa, tốn tài nguyên Để giảm thiểu sự dư thừa đó ta sử dụng kỹ thuật ước lượng và
bù chuyển động để nén frame P.
Sơ đồ nén Frame-P Frame P được chia thành các MB kích thước 16x16 Mỗi 4 block Y và 1 block Cr, 1 block Cb Các MB tạo thành ma trận Macroblock Mỗi MB của frame hiện tại sẽ được tìm kiếm trong vùng tìm kiếm của frame tham chiếu để tìm ra MB có giá trị gần giống nhất, từ đó tính ra vector chuyển động Sự sai khác (kết quả phép trừ 2 Macroblock 6 thành phần YUV tương ứng 8x48) và vector chuyển động được nén và truyền đi.
Trang 21+ C: Macroblock của frame hiện tại
+ R: Macroblock của frame tham chiếu
+ (i, j): vector chuyển động tương ứng với từng cặp C,R
Giải thuật Three Step Search
Trang 22 B1: Xác định kích thước bước dịch chuyển ban đầu (4) Tạo 9 vị trí trong cửa sổ tìm kiếm Tính toán MAE tương ứng với mỗi điểm Trung tâm của vùng tìm kiếm được chuyển đến vị trí có MAE nhỏ nhất.
B2: Trung tâm của vùng tìm kiếm được chuyển đến vị trí có MAE nhỏ nhất Giảm kích thước bước dịch chuyển (2) Tạo 8 vị trí trong của sổ tìm kiếm Và thực hiện các bước tính toán MAE
B3: Lặp lại bước 2.
KQ: Vector cần tìm là vector nối vị trí ban đầu của MB frame hiện tại
và điểm có MAE nhỏ nhất của kết quả bước 3
MB Layer
Phân lớp dữ liệu MB layer:
- MBA: macroblock address - địa chỉ macroblock
- MTYPE: intra/inter
- MQUANT: quantizer
- MVD: motion vector data - vecto chuyển động
- CBP: coded block pattern - mẫu block được mã hóa
- B0 B5: Các Block Vector chuyển động và sự sai khác (kết quả phép trừ 2 Macroblock, 6 block YUV tương ứng 8x48) được nén và truyền theo phân lớp dữ liệu.
- Đầu ra: dòng bit đã mã hóa (frame I đã nén, vector chuyển động đã
mã hóa, sai số dự đoán đã mã hóa).
Trang 23CHƯƠNG 5
Cài đặt thử nghiệm thuật toán nén H.261, đo
lượng hiệu năng giải pháp nén này
width và height là kích thước của định dạng theo định dạng QCIF.
số frame trong video là nFrame=20;
- Chuyển đổi ảnh màu sang hệ màu YUV bằng cách sử dụng hàm
reshape(frame(1:kích thước của frame, chiều dài frame, chiều rộng frame) và
với kỹ thuật lấy mẫu 4:2:0.
sử dụng vòng lặp for với tham số iFrame thuộc khoảng [1, nFrame] Trong
vòng lặp tiến hành chuyển đổi hệ màu, với thành phần Y thì sử dụng
frame(1:width*height), thành phần U thì sử dụng frame(width*height+1:1.25*width*height), chiều dài và rộng đều chia 2.
Tương tự với thành phần U là thành phần V, nhưng sử dụng
frame(1.25*width*height+1:1.5*width*height) Ta được các thành phần yImage, uImage và vImage
- Đọc các frame, gọi hàm yuvRead, tiến hành đọc theo các thành phần YUV,
sử dụng hàm unit8 với tham số là yImage, uImage và vImage.
Ta thu được các y,v, u
- Chọn nhóm frame-distanceI=4 (theo qui ước là 4 frame thành 1 nhóm,
frame đầu tiên của nhóm là frame I, 3 thành phần còn lại là frame P) Để tìm được frame I và frame P như đã qui ước thì:
tiến hành vòng lặp for với tham số iFrame từ 1 đến nFrame Như vậy
mod(iFrame, distanceI) == 1 thì frame đó là frame I và các frame còn lại
frame P Sau đó tiến hành nén từng frame.
Trang 24ma trận m là ma trận lượng tử hóa mặc định.
sử dụng hàm blkproc với tham số y đã tính ở trên, m, round(x./P1) tính được
ma trận y đã được lượng tử hóa là ma trận yy.
+ Mã hóa Huffman
Gọi hàm huffencode với tham số là ảnh đã được lượng tử hóa ở trên Kết quả
thu được frame I đã nén.
Để lấy frame tham chiếu ta thực hiện giải mã huffman với frame I đã nén Ở
đây sử dụng hàm huffdecode.
- Nén frame P (nén vector chuyển động và sai số ước lượng)
+ Nén vector chuyển động
Ước lượng vector chuyển động sử dụng thuật toán Three Step Search Với đầu
vào là imP là ảnh ta muốn tìm các vector chuyển động tương ứng với mỗi
macroblock có kích thước là mbSize, ta cần tìm ma trận các vector ứng với từng macroblock có góc trên bên trái là (x,y) Vị trí tương ứng trên vector
tham chiếu là (x1,y1) vectors = zeros(2,row*col/mbSize^2); Ta sử dụng mảng các vectors để lưu các vector chuyển động(dx,dy)
trong đó:
+ stepSize ban đầu được gán bằng 4
+ vectors[1,i] lưu giá trị dx vector chuyển động của macroblock có thứ tự i + vectors[2,i] lưu giá trị dy vector chuyển động của macroblock có thứ tự i
costs = ones(3, 3) Ma trận 3x3 lưu giá trị tính MAD tương ứng với các điểm
tìm kiếm tương ứng từng bước nhảy Sau khi tìm được giá trị nhỏ nhất trong
ma trận costs(3x3)tại vị trí (a,b) Ta tìm được
Để nén vector chuyển động, sử dụng hàm huffencode.
+ Nén sai số ước lượng
Từ vector chuyển động đã tính được với frame tham chiếu, sử dụng hàm
motionComp để tính curFrame là frame dự đoán Được tính như sau:
imgComp từ frame tham chiếu ImgI, ma trận vectors
imgComp imgComp refBlkVer = i + dy;
refBlkHor = j + dx;
imageComp(i:i+mbSize-1,j:j+mbSize-1) = imgI(refBlkVer:refBlkVer+mbSize-1, refBlkHor:refBlkHor+mbSize-1);
Trong đó i: [1 row-mbSize] j: [1 row-mbSize] (dx,dy): vector chuyển động
sai số dự đoán difFrame được tính là sự sai khác của frame I và curFrame Nén sai số dự đoán difFrame tương tự với nén frame I, sử dụng hàm
jpegencode
Vậy thu được cả vector chuyển động và sai số dự đoán đã mã hóa.