Tải bản đầy đủ (.pdf) (29 trang)

Tìm hiểu về các chuẩn nén video ITU và ứng dụng thử nghiệm

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 (1003.68 KB, 29 trang )

Header Page 1 of 126.

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

Footer Page 1 of 126.

:

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


Header Page 2 of 126.

Table of Contents

Footer Page 2 of 126.


Header Page 3 of 126.

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

Footer Page 3 of 126.


Header Page 4 of 126.

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.

Footer Page 4 of 126.



Header Page 5 of 126.

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

Footer Page 5 of 126.


Header Page 6 of 126.

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

Footer Page 6 of 126.



Header Page 7 of 126.

• 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 đó.

Footer Page 7 of 126.


Header Page 8 of 126.

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.

Footer Page 8 of 126.


Header Page 9 of 126.

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ử

Footer Page 9 of 126.


Header Page 10 of 126.

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

Footer Page 10 of 126.


Header Page 11 of 126.

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, MPEG4Part 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).
Footer Page 11 of 126.


Header Page 12 of 126.

• 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

Footer Page 12 of 126.


Header Page 13 of 126.


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
Footer Page 13 of 126.


Header Page 14 of 126.

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


SYSTEM

OUTPUT
Video

Video
Pattern
Input

Footer Page 14 of 126.

H.261
Compression

Video
Compressed


Header Page 15 of 126.

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.

Footer Page 15 of 126.


Header Page 16 of 126.

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.

Footer Page 16 of 126.


Header Page 17 of 126.

-

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)

Footer Page 17 of 126.


Header Page 18 of 126.

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:

Footer Page 18 of 126.



Header Page 19 of 126.

Footer Page 19 of 126.


Header Page 20 of 126.

o So sánh giữa 2 video trước và sau khi nén H261:

Footer Page 20 of 126.


Header Page 21 of 126.

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)

Footer Page 21 of 126.


Header Page 22 of 126.

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ã

Footer Page 22 of 126.


Header Page 23 of 126.

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

Footer Page 23 of 126.


Header Page 24 of 126.

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

Footer Page 24 of 126.


Header Page 25 of 126.

đ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)

Footer Page 25 of 126.


×