Đề tài Tìm hiểu về các chuẩn nén video ITU và ứng dụng thử nghiệm
- Ưu điểm
o Chương trình đã áp dụng kĩ thuật nén theo chuẩn H.261 với khá đầy đủ các
bước.
o Thực hiện truyền dữ liệu tới địa chỉ IP qua TCP có thể sử dụng truyền video
qua mạng (LAN) giữa các máy với nhau
o Có khả năng điều khiển thông số, chất lượng
- Nhược điểm
o Chưa có bộ lọc và mã hóa Huffman sẽ cho hiệu quả nén cao hơn (hiện tại
yêu cầu tốc độ còn quá lớn ~3Mbps, sử dụng mã hóa Huffman sẽ giảm đi
rất nhiều ~200-500Kbps)
o Giải thuật tìm kiếm 3 bước có hiệu năng chưa cao, nên sử dụng các giải
thuật tiên tiến hơn trong việc tìm vectơ chuyển động
o Sai số lớn dẫn tới chất lượng hình ảnh chưa cao, đặc biệt trong xử lí ảnh
RGB
o Tốc độ xử lí còn rất chậm, chưa đáp ứng yêu cầu 30 frame/s
29 trang |
Chia sẻ: tienthan23 | Lượt xem: 3473 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đề tài Tìm hiểu về các chuẩn nén video ITU và ứng dụng thử nghiệm, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BỘ GIÁO DỤC - ĐÀO TẠO
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ý tín hiệu đa phương tiện
Đề tài: Tìm hiểu về các chuẩn nén video ITU và ứng dụng thử nghiệm
Giảng viên hướng dẫn : PGS.TS. Nguyễn Thị Hoàng Lan
Sinh viên thực hiện : Vũ Anh Vũ 20093331
Nguyễn Hồng Lam 20091535
Đào Hà Thanh 20092378
Lê Vinh Hiển 20091059
Nguyễn Lê Khôi 20091485
Nguyễn Anh Tuấn 20092989
Table of Contents
Phân công công việc
Phần 1: Tìm hiểu về các chuẩn nén ITU
Vũ Anh Vũ 20093331
Tổng quan về các chuẩn nén H.26x
Đào Hà Thanh 20092378
So sánh chuẩn H.26x với MPEG
Nguyễn Hồng Lam 20091535
Phân tích sơ đồ nén của H.261 và MPEG-1
Phần 2: Thử nghiệm nén theo chuẩn H.261
Lê Vinh Hiển 20091059
Nguyễn Anh Tuấn 20092989
Nén video theo chuẩn H.261 trên Matlab
Nguyễn Lê Khôi 20091485
Chương trình nén video theo chuẩn H.261 trên Java
Phần I. Tổng quan về chuẩn nén video ITU
1.1. Giới thiệu về tổ chức ITU
ITU là Tổ chức viễn thông quốc tế thuộc Liên hiệp quốc, được thành lập vào năm 1865 (với
tên gọi tiền thân là Liên minh Điện báo quốc tế - International Telegraph Union). Các 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 gồm có
điều phối các quốc gia trên toàn cầu trong việc chia sẻ và sử dụng các tài nguyên Viễn thông 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 đang 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 có 3 lĩnh vực hoạt động chính gồm: ITU-T (Viễn thông - Telecom), ITU-R (Thông tin vô
tuyến - Radio), ITU-D (Phát triển viễn thông - Telecommunications Development).
1.2. Tổng quan về các chuẩn video
Hiện nay trên thế giới có hai tổ chức chịu trách nhiệm chính trong việc đưa ra các
chuẩn về nén và giải nén video đó là ITU và ISO.
• Tổ chức ITU – International Telecommunications Union
o Chuyên tập trung vào các ứng dụng truyền thông với dòng video chuẩn H.26x,
với dung lượng lưu trữ nhỏ và hiệu quả cao trong việc truyền tải trên mạng.
o Dòng H.26x bao gồm các chuẩn H.261, H.262, H.263, và H.264.
• Tổ chức ISO – International Standards Organization
o Đưa ra dòng MPEG chủ yếu tập trung phát triển các ứng dụng đa người dùng
(phim, video,...).
o Dòng MPEG bao gồm các chuẩn MPEG-1, MPEG-2, MPEG- 4.
Hai tổ chức này cùng nhau lập nên nhóm JVT-Joint Video Team để đưa ra chuẩn
H.264 - là chuẩn nén video mới nhất hiện nay và được xem là dòng nén video thế hệ thứ
3.
Quá trình phát triển các dòng video H.26x và MPEG
1.3. Các chuẩn nén video của ITU
1.3.1. Chuẩn H.261
Chuẩn H.261 là chuẩn nén video hoàn chỉnh đầu tiên trên thế giới, được giới thiệu vào
năm 1993 bởi tổ chức ITU. H.261 nằm trong chuẩn khuyến nghị H.323 của ITU.
Ban đầu H.261 được thiết kế cho mạng ISDN, cho những ứng dụng hội nghị trực
tuyến video hai chiều với tốc độ truyền dữ liệu bằng cấp số nhân của 64Kbit/s, độ trễ đầu
cuối thấp và bitrate cố định.
H.261 hỗ trợ hai độ phân giải là CIF (352x288) và QCIF (176x144), sử dụng kĩ thuật
lấy mẫu 4:2:0.
Thuật toán nén của chuẩn này không phức tạp do yêu cầu việc nén và giải nén phải
được thực hiện theo thời gian thực.
1.3.2. Chuẩn H.263
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 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.
Những cải tiến của H.263 so với chuẩn 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 ưu hơn nhiều so với các chuẩn trước đó.
• Vector chuyể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
Các độ phân giải mà H.263 hỗ trợ
1.3.3. Ưu điểm và nhược điểm của các chuẩn video H.26x
H.26x được thiết kế với mục đích sử dụng cho dịch vụ hội nghị trực tuyến, vì thế
nó co những ưu điểm phù hợp với nhu cầu trên:
• Độ 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ào nội dung của video
Bên cạnh đó, chuẩn nén H.26x cũng có một số mặt hạn chế:
• Không được thiết kế cho việc ghi lại và xem lại video.
o Không có cách nào để quay ngược hoặc tua nhanh video, vì ta không mã hóa
các khung từ toàn bộ các block intra-coded của nó.
o Tuy vậy vẫn có thể khắc phục được việc này, nhưng nó sẽ ảnh hưởng đến sự cố
định của bitrate, nhất là với mạng ISDN
• 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). Có
thể xử lý bằng cách:
o Dừng giải mã, tìm đến GOB tiếp theo để giải mã tiếp.
o Intra blocks sẽ dần hồi phục vài giây sau đó.
Phần II. So sánh chuẩn nén H.26x và MPEG
2.1. Sơ đồ khối của H.261 và MPEG-1
Nhìn chung, quá trình nén và giải nén của H.261 và MPEG-1 không có sự khác biệt
nào đáng kể.
2.1.1. Quá trình nén
• Control : điểu khiển tốc độ dòng bit
• Memory : Sử dụng để chứa các ảnh được tái tạo (block) cho mục đích của vecto
chuyển động để tìm ra P-frame tiếp theo.
• Quantization: nén tốt hơn bằng các hệ số DCT (Discrete Cosine
Transform) để đạt được chất lượng đòi hỏi.
• Entropy: gán những từ mã ngắn hơn cho những sự kiện phổ biến và sử dụng
những sự kiện ít phổ biến hơn.
Quá trình nén theo chuẩn MPEG-1
• Ảnh đầu vào được đưa vào bộ trừ và bộ đoán chuyển động
• Bộ đoán chuyển động sẽ so sánh các khối ảnhmới được đưa vào này với các
khối ảnh đã được đưa vào trước đó và được lưu lại như là cácảnh dùng để tham
khảo (Reference Picture). Kết quả là bộ đoán chuyển động sẽ tìm ra các
khốiảnh trong ảnh tham khảo gần giống nhất với khối ảnh mới này .Motion
Vector sẽ đặc trưng cho sự dịch chuyểntheo cả hai chiều dọc và ngang của khối
ảnh mới cần mã hoá so với ảnh tham khảo
• Bộ đoán chuyển động cũng đồng thời gửi các khối ảnh tham khảo này mà
chúng thường đượcgọi là các khối tiên đoán (Predicted macroblock) tới bộ trừ
để trừ với khối ảnh mới cần mã hoá(thực hiện trừ từng điểm ảnh tương ứng tức
là Pixel by pixel) chúng sẽ đặc trưng cho sự sai khác giữa khối ảnh cần tiên
đoán và khối ảnh thực tế cần mã hoá
• Bộ bù chuyển động gửi các Predicted macroblock đến bộ trừ để tính sai số dự
đoán.
• Sai số tiên đoán này sẽ đc biến đổi DCT sau đó lượng tử hóa rồi cùng với
vector chuyển động được mã hóa entropy
Cái gốc của sự khác nhau giữa MPEG1 và H26X là chủ yếu nằm ở khâu tiên đoán các
frame mới và cách thức tính toán sai lệch giữa các frame hiện tại và frame phỏng đoán.
Điều này sẽ dẫn tới các khác nhau về chất lượng hình ảnh cũng như bit rates. MPEG1 sử
dụng B-picture vì thế sơ đồ mã hóa cần dùng đến 2 frame memory để lưu trữ frame cho
việc tiên đoán 2 chiều
MPEGx có tốc độ quét,độ phân giải cao hơn h26x cùng thế hệ nên tôc độ truyền tín
hiệu cao hơn_bit rate cao hơn, chất lượng hình ảnh tốt hơn, điều này thể hiện trong quá
trình lấy mẫu và lượng tử hóa
2.2.2. Quá trình giải nén
Quá trình giải nén theo chuẩn H.261
Quá trình giải nén theo chuẩn MPEG-1
• Ngược lại với quá trình nén
• Vector chuyển động được tách ra và đưa vào bộ bù chuyển động.
• Các hệ số được đưa vào bộ lượng tử hóa ngược và bộ biến đổi ngược IDCT để
biến tín hiệu từ miền tần số thành tín hiệu ở miền không gian
• Kết hợp với ảnh tham khảo để ra được ảnh gốc.
2.2. So sánh với phương pháp nén theo chuẩn H26X với chuẩn MPEG
Các chuẩn H26X: H261 ,H262, H263, H264 ... được đưa ra trong các khuyến nghị
của ITU-T. Còn các chuẩn MPEG: MPEG1, MPEG2, MPEG3, MPEG4 - Part2, MPEG4-
Part 10 được đưa ra trong các khuyến nghị của ISO. Tuy nhiên, các chuẩn MPEG và
H26X lại có quan hệ chặt chẽ với nhau: cả MPEG1 và MPEG2 cùng có nguồn gốc từ
chuẩn H261; chuẩn MPEG2 giống chuẩn H262; chuẩn MPEG 4- part10 giống chuẩn
H264.
2.2.1. Những điểm giống nhau
Các phương pháp nén theo chuẩn MPEG và H26x có nhiều điểm giống nhau. Có thể
kể ra một số điểm giống nhau cơ bản như :
• 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à H26X đề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).
• 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, H26X đề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
Những điểm giống nhau trong quá trình nén:
• Đề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. Điều nà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ủ đề.
• Giảm độ dư thừa không gian trong các khung hình video bằng cách mã hóa một
số khối gốc thông qua việc dự báo về không gian, lượng tử hóa, các phé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ằng cá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 ứng ban đầ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.
2.2.3. Những điểm khác nhau
Các chuẩn H26X thường được tối ưu hóa cho truyền tải video thời gian thực như hội
nghi truyền hình, truyền tải video giữa các thiết bị di động. Còn chuẩn MPEG chủ yếu
thiết kế cho việc lưu trữ và trình chiếu nên có chất lượng tốt hơn.
Những điểm khác nhau trong quá trình nén theo chuẩn H26X và MPEG:
• MPEG có tốc độ quét, độ phân giải cao hơn H26X cùng thế hệ nên tốc độ
truyền tín hiệu cao hơn_bit rate cao hơn, chất lượng hình ảnh tốt hơn, điều này
thể hiện trong quá trình lấy mẫu và lượng tử hóa.
• Trong H26X có điều chỉnh tốc độ dòng bít, phù hợp với môi trường
truyền dẫn tin mạng viễn thông. Kỹ thuật nén trong hầu hết các phiên bản
H26X dựa trên việc nén theo đối tượng, các đối tượng trong các cảnh
video được theo dõi riêng rẽ và được nén lại cùng nhau. H26X sử dụng bit rate
control dùng để quản lý bộ đệm,kiểm soát quá trình lượng tử hóa. Đây là
công đoạn dùng để kiểm soát chất lượng video cũng như bit rate đầu ra thông
qua kiểm soát quá trình lượng tử hóa và quản lý dữ liệu nén trong bộ đệm.
Chìa khoá để điều khiển tốc độ truyền là trật tự dữ liệu đã nén trong bộ đệm
(buffer). Việc nén có thể được tiến hành với việc loại bỏ một vài thông tin
đã được lựa chọn. Ảnh hưởng nhỏ nhất đối với chất lượng toàn bộ khung hình
có thể đạt được bằng cách bỏ bớt các thông tin chi tiết. Điều này đảm bảo giới
hạn tỉ lệ nén dữ liệu trong khi chất lượng của khung hình suy giảm tối thiểu.
• Trong H26X, các bộ mã hóa video thường hỗ trợ một khoảng khá rộng tốc độ
nén, điều này cho phép những lựa chọn khác nhau giữa chất lượng và băng
thông. Phần lớn các phương pháp nén video đều dựa vào việc mã khác nhau
giữa các frame (inter-frame). Điều này có nghĩa là, thay vì phải gửi đi tất cả
các frame, thì chỉ gửi đi sự sai khác của một frame với frame trước đó.
Phương pháp mã hóa này làm việc tốt với những video có những thay đổi hình
ảnh ít, tuy nhiên sẽ là ảnh hưởng đáng kể đến chất lượng hình ảnh và băng
thông nếu có sự thay đổi lớn giữa các frame hình ảnh. Đa số các chuẩn mã hóa
vừa cho phép mã hóa với tốc độ bít cố định (chất lượng hình ảnh thay đổi) hay
tốc bít thay đổi (chất lượng hình ảnh ít thay đổi). Các phương pháp mã hóa
video nói chung thường kết hợp cảkiểu mã hóa intra-frame và inter-frame.
Trong kiểu mã hóa intra-frame, một frame ảnh được chia thành các khối,
mỗi khối này được biến đổi thành tập các hệ số thông qua biến đổi Cosin rời
rạc. Một nhóm các khối được kết hợp lại thành một thực thể duy nhất (slice),
và đôi khi được đóng gói vào một gói. Nếu có lỗi trên đường truyền xảy ra thì
có thể cảmột nhóm các khối sẽ bị mất, tạo nên “sọc” trong các ảnh giải mã.
Điều này xảy ra bởi vì các hệ số của biển đổi Cosin rời rạc trong mỗi
khối được tính toán dựa trên khối đầu tiên trong slice, nếu lỗi làm mất thông tin
của khối đầu tiên thì tất cả các khối còn lại trong slice là không xác định. Một
vài lỗi có thể làm hỏng cấu trúc của frame, do đó không có khả năng tái tạo lại
frame. Với kiểu mã hóa inter-frame (motion based coding), các vector chuyển
động được xác định và mã hóa cho mỗi khối. Trong các hệ thống mã hóa kiểu
inter-frame, việc mất một frame có thể làm cho các frame theo sau nó trở nên
không sử dụng được cho đến khi I-frame tiếp theo được nhận, kết quả là
có thể thu được hình ảnh video trắng hay hình ảnh bị đông cứng, chất
lượng video bị suy giảm đáng kể.
• Trong hầu hết các trường hợp các tiêu chuẩn mã hóa video H26X đều cung
cấp khả năng linh động ở cả bộ mã hóa và giải mã cho việc cân bằng
giữa chất lượng và tốc độ. Việc hiểu biết rõ ràng về ảnh hưởng của các bộ mã
hóa và giải mã video là yếu tố quan trọng góp phần vào việc đánh giá chính
xác các ảnh hưởng của mạng đến chất lượng truyền video trên mạng.
Tóm lại, chuẩn nén H26X thường có tốc độ mã hoá tín hiệu thấp hơn MPEG (khoảng
1.5 Mbit/s với độ phân giải hình 352 x 288) do dùng chủ yếu trong viễn thông, truyền tải
video giữa các thiết bị di động. Trong khi đó, 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 III. Cài đặt thử nghiệm
3.1. Mô phỏng nén video theo chuẩn H.261 bằng Matlab
3.1.1. Mô hình thực nghiệm:
INPUT
Video
OUTPUTSYSTEM
Video
Pattern
Input
H.261
Compression
Video
Compressed
3.1.2. Kịch bản mô phỏng
- Như đã trình bày ở sơ đồ trên, kịch bản thử nghiệm sẽ được xây dựng như sau:
• Đầu vào Input sẽ là file video mẫu để nén cho qua khối nén theo chuần
H.261 . Ở đây file mẫu đầu vào chúng em đã phân tích thành 181 ảnh liên tục
của video, là dạng file .bmp và có độ phân giải là 352x288
• Khối nén theo chuẩn H.261 sẽ được trình bày theo mô hình kết hợp với phần
kết quả mô phỏng ở dưới.
• Kết quả output: 1 là dòng video mẫu không đổi (tức không cho qua khối nén
H.261), 2 là dòng video đã nén bởi H.261 sẽ được so sánh với dòng video
mẫu ban đầu.
3.1.3. Kết quả mô phỏng
- Sơ đồ cấu trúc nén H.261:
- Chương trình mô phỏng gồm có 9 file định dạng code của Matlab, sự tương ứng
của nó với chức năng của các khối trong sơ đồ nén sẽ được trình bày dưới đây:
o Khối DCT và Quantize: hàm DCT_Quantize trong file DCT_Quantize.m
o Khối IDCT và DeQuantize: hàm I_DCT_Quantize trong file
I_DCT_Quantize.m
o Khối ước lượng chuyển động: có 2 hàm tương ứng với 2 giải thuật tìm kiếm
vector chuyển động khác nhau:
Hàm MCPredict_3Step: tìm kiếm vector chuyển động bằng giải thuật 3
bước (Three Step Search-TSS). Hàm này sử dụng hàm TSS để tìm kiếm
vector chuyển động cho 1 MacroBlock trong 1 cửa sổ kích thước 30x30
Hàm MCPredict_Full: tìm kiếm vector chuyển động bằng giải thuật tìm
kiếm toàn bộ (Full Search)
o Khối bù chuyển động: hàm MotionCompenstion
o Phần mã hóa Runlength và Huffman: phần này chưa làm được, mới chỉ
quét ZigZac, hàm ZigzacScan
o Hàm phụ trợ:
Hàm ShowMotionVector: vẽ vector chuyển động vừa tìm ra tường ứng
với mỗi MacroBlock của ảnh Frame tham chiếu.
o Chương trình chính: file H261_Compress: sử dụng các khối trên mô phỏng
lại quy trình nén video H261.
- Kết quả mô phỏng:
o Ví dụ 1 frame được xem xét đầu tiên:
o Ước lượng chuyển động trong frame đó bằng vector chuyển động: ( các nét
gạch chính là hướng di chuyển của các MacroBlock 16x16)
o So sánh bù chuyển động của giá trị Y giữa 2 frame liên tiếp:
o So sánh bù chuyển động của 2 giá trị Cr và Cb giữa 2 frame liên tiếp:
o So sánh giữa 2 video trước và sau khi nén H261:
3.2. Chương trình nén video theo chuẩn H.261 trên Java
3.2.3. Sơ đồ mã hóa
Trong chương trình chưa có bộ lọc.
Đầu vào là ảnh hệ màu YUV 4:2:0 (Chương trình Converter với file video tại
“C:\foreman_qcif.y4m”) hoặc RGB24 (Chương trình Converter_RGB với file video tại
“C:\ foreman_qcif.y4m.176x144.RGB24.avi” - chương trình chưa hoàn chỉnh).
File có độ dài 10 giây, 30 frame/s => tổng số 300 frame
Đối với hệ RGB24 có thêm phần chuyển đổi hệ màu RGB sang YUV 4:2:0.
Hoạt động của chương trình bên phía server có nhiệm vụ đọc file, nén và truyền TCP:
Vòng lặp:
1 Đọc file: 1 frame sẽ có 176x144=25344 byte dữ liệu kênh Y và 88x72=6336 dữ
liệu cho mỗi kênh Cb & Cr
2 Trường hợp Intraframe: thực hiện lần lượt
a Chia thành các macroblock 16x16
b Thực hiện biến đổi DCT (khối DCT)
i hàm DCT() nhận đầu vào là giá trị từng điểm trong macroblock
ii trả về mảng phần tử đã biến đổi DCT
c Thực hiện lượng tử hóa (khối Q)
i hàm Q() nhận đầu vào là mã tương ứng với mỗi kênh (Y=0; Cb &
Cr=1) cùng với dữ liệu sau khi biến đổi DCT. Sử dụng bảng lượng
tử qtableY hoặc qtableCb, qtableCr tương ứng.
ii trả về mảng phần tử đã lượng tử hóa
d Thực hiện quét zigzag
i Hàm Z() nhận đầu vào là mảng sau khi lượng tử hóa rồi thực hiện
sắp xếp lại theo thứ tự zigzag nhờ bảng ztable
ii trả về mảng phần tử đã sắp xếp zigzag
e Thực hiện mã hóa RLE (khối VLC)
i Tách riêng thành phần DC, áp dụng DPCM và lưu sang 1 mảng
riêng
ii 63 phần tử AC còn lại được mã hóa RLE, đầu ra là mảng byte tương
ứng
f Truyền dữ liệu dòng qua socket
g Chuyển sang bước 4
3 Trường hợp Intraframe:
a Ước lượng chuyển động (khối Motion Estimation)
i Chia thành từng macroblock 16x16, sử dụng tính toán MAD bằng
hàm mad() để tìm ra vectơ chuyển động
b Bù chuyển động (khối Motion Compensation)
i Sử dụng dữ liệu kênh Y trong mảng nhớ trong bước 4 của vòng lặp
trước
ii dịch chuyển các khối theo vectơ
iii chỉ lấy sự sai khác kênh Y giữa khung hình tham chiếu và khung
hình tính toán được (đối với dữ liệu 2 kênh Cb & Cr lấy giá trị vectơ
bằng ½ giá trị vectơ của kênh Y và thực hiện tương tự, tuy nhiên
trong chương trình không thực hiện bù chuyển động cho 2 kênh Cb
& Cr)
c Lặp lại các bước từ 2a đến 2g
4 Lưu dữ liệu kênh Y vào mảng nhớ để so sánh trong trường hợp interframe (khối
Frame Memory)
3.2.2. Sơ đồ giải mã
Việc giải mã được thực hiện bên phía client với các thao tác ngược lại so với bên
phía server, chỉ khác là client không thực hiện đọc file mà sau khi nhận dữ liệu sẽ
thực hiện chuyển đổi hệ màu từ YUV 4:2:0 sang RGB888 bằng hàm YcbCr2RGB()
để hiển thị bằng hàm showimage(). Bên phía server cũng sử dụng hàm này để hiển thị
kết quả để so sánh với bên client. Một điểm nữa là khác với bên server đã biết trước
số lượng frame thì bên client chỉ liên tục nhận dữ liệu cho đến hết.
3.2.3. Điều khiển thông số
Một đặc điểm của chương trình là ta có thể điều khiển các thông số như chất lượng
(dựa trên kiểu dữ liệu truyền đi hay giá trị lượng tử hóa), số lượng khung hình dự
đoán p-frame từ phía client.
• Data Type: giá trị 0 cho kiểu short (2 byte) hay giá trị 1 cho kiểu byte (1 byte).
Thông số này liên quan tới giá trị các phần tử bảng lượng tử hóa. Nếu giá trị
bảng lượng tử hóa nhỏ, sau khi thực hiện tính toán bằng hàm trong chương
trình các giá trị sau khi lượng tử hóa sẽ đủ nhỏ để giới hạn trong khoảng 1 byte
[0,255]. Tuy nhiên trường hợp ngược lại khi giá trị vượt quá khoảng này, kiểu
short sẽ phải được sử dụng để tránh sự mất mát thông tin quá lớn. Với kiểu
short sẽ thực hiện với bảng lượng tử hóa toàn các giá trị 1, khi đó chất lượng
ảnh sẽ rất tốt, gần với ảnh gốc nhưng tốc độ xử lí rất chậm.
• Q Value: giá trị số thực dương, mặc định là 1. Tăng giá trị lượng tử hóa đồng
nghĩa với việc kết quả sau khi lượng tử hóa cũng tăng (quyết định bởi chương
trình) giúp làm giảm thiểu sự sai lệch và mất mát nhưng có thể sẽ vượt quá
phạm vi thế hiện của kiểu dữ liệu byte. Giá trị từ 1.5-2 cho kết quả chất lượng
chấp nhận được.
• P-frame: số frame dự đoán (predicted frame) giữa 2 i-frame (intra frame). Chất
lượng của p-frame không bằng i-frame do tồn tại sai số, tuy nhiên kích thước
giảm đi đáng kể.
3.2.4. Demo chương trình
Chương trình Converter
Khởi động với server cửa sổ màu ghi, client cửa sổ màu xanh
Click Load bên phía server rồi click Wait bên phía client để bắt đầu
Ta có thể thấy chất lượng với kiểu dữ liệu byte, giá trị Q là 1 tại i-frame là không tốt,
điều này do sai số trong việc tính toán, làm tròn cũng như lưu trữ của java (ví dụ ở các
điểm ảnh màu trắng (R=G=B=255) có sự sai lệch rất lớn, điều này là do khi tính toán chỉ
cần sai lệch 1 đơn vị ta đã có 0 => 0 & -1 => 255)
Kích thước dữ liệu gửi đi có giảm so với không nén: Y=25344 Cb=6336 Cr=6336 (đơn
vị: byte)
Y=18696 Cb=2296 Cr=1018 Intraframe=true
Tại p-frame
Chất lượng giảm đi hơn so với i-frame, tuy nhiên kích thước (kênh Y) cũng giảm đi
đáng kể, giúp làm tăng tỉ lệ nén
Y=8274 Cb=2050 Cr=900 Intraframe=false
Tạm dừng bằng click Pause, thay đổi giá trị Q Value thành 2, Submit rồi Continue
(quá trình áp dụng cho mọi lần thay đổi thông số:Pause-thay đổi-Submit-Continue)
Ta thấy chất lượng có tăng lên, tuy nhiên vấn đề này sinh là một số macroblock có giá
trị sai khác hoàn toàn do phạm vi lượng tử hóa vượt quá phạm vi biểu diễn của byte
Tuy nhiên kích thước dữ liệu còn lớn, hiệu quả nén thấp
Y=24938 Cb=3618 Cr=2278 Intraframe=true
Giảm giá trị Q về mức 0.5
Chất lượng ảnh giảm đi đáng kể, tuy nhiên kích thước dữ liệu cũng giảm
Y=12770 Cb=1486 Cr=912 Intraframe=true
Thay đổi kiểu dữ liệu Data Type về 0
Ta thấy chất lượng rất tốt, không khác nhiều so với ảnh gốc
Tuy nhiên do bảng lượng tử lúc này đã gồm toàn giá trị 1 (coi như bỏ qua bước lượng
tử hóa) thì kích thước dữ liệu là rất lớn, thậm chí còn lớn hơn cả ảnh không nén (do kích
thước kiểu short lớn gấp đôi kiểu byte)
Y=40844 Cb=8286 Cr=5848 Intraframe=true
Chương trình Converter_RGB
Do sai số ngay từ quá trình chuyển đổi hệ màu dẫn tới chất lượng ảnh phía bên server
(sau khi thực hiện RGB2YCbCr-DCT-Q-Z-RLE-IRLE-IZ-IQ-IDCT-YCbCr2RGB) đã
không có được chất lượng tốt dẫn tới ảnh nhận được bên client cũng không tốt.Ngoài ra
thì chương trình vẫn chưa hoàn chỉnh.
3.2.5. Nhận xét
- Ưu điểm
o Chương trình đã áp dụng kĩ thuật nén theo chuẩn H.261 với khá đầy đủ các
bước.
o Thực hiện truyền dữ liệu tới địa chỉ IP qua TCP có thể sử dụng truyền video
qua mạng (LAN) giữa các máy với nhau
o Có khả năng điều khiển thông số, chất lượng
- Nhược điểm
o Chưa có bộ lọc và mã hóa Huffman sẽ cho hiệu quả nén cao hơn (hiện tại
yêu cầu tốc độ còn quá lớn ~3Mbps, sử dụng mã hóa Huffman sẽ giảm đi
rất nhiều ~200-500Kbps)
o Giải thuật tìm kiếm 3 bước có hiệu năng chưa cao, nên sử dụng các giải
thuật tiên tiến hơn trong việc tìm vectơ chuyển động
o Sai số lớn dẫn tới chất lượng hình ảnh chưa cao, đặc biệt trong xử lí ảnh
RGB
o Tốc độ xử lí còn rất chậm, chưa đáp ứng yêu cầu 30 frame/s
o
Tài liệu tham khảo
1. Video Compression and Communications: From Basics to H.261, H.263, H.264,
MPEG4 for DVB and HSDPA-Style Adaptive Turbo-Transceivers – Wiley – 11/2007
2. H.263 - Germain Adriaan – 2/2012
3. Introduction to MPEG; MPEG-1, MPEG-2 and MPEG-4 - Lawrence Harte -
8/2006
Các file đính kèm theo tài liệu này:
- _123doc_vn_tim_hieu_cac_chuan_nen_itu_0316.pdf