Professional Documents
Culture Documents
─────── * ───────
Trong truyền thông, xử lí dữ liệu đa phương tiện thì việc nén dữ liệu là vô
cùng quan trọng, và video là một trong số đó. Có nhiều phương pháp nén
video khác nhau như MPEG, ITU-T, SVC. Với mong muốn tìm hiểu về chuẩn
nén video H. 261 nói riêng và H. 26x nói chung, chúng em lựa chọn đề tài
để tìm hiểu là: “Nén ảnh video theo chuẩn H. 261”.
Báo cáo gồm 5 phần:
- Phần 1: Tìm hiểu chung về các chuẩn nén ITU-T, chuẩn H26X (H. 261, H.
263, H. 264).
- Phần 2: Tìm hiểu về dòng dữ liệu, sơ đồ nén và giải nén trong chuẩn nén
video H. 261.
- Phần 3: Phân tích so sánh sơ đồ nén video H. 261 với video MPEG-1.
- Phần 4: Xây dựng sơ đồ thuật toán nén ảnh video theo chuẩn H. 261.
- Phần 5: Cài đặt thử nghiệm thuật toán nén video H. 261, đo lường hiệu
năng giải pháp nén này.
Mặc dù đã có những cố gắng để hoàn thành đề tài, nhưng do chúng em
chưa có nhiều kinh nghiệm trong lĩnh vực này nên không thể tránh khỏi
những thiếu sót. Chúng em rất mong nhận được ý kiến đóng góp của cô để
hoàn thành tốt hơn đề tài, chúng em xin trân thành cám ơn.
Nhóm sinh viên thực hiện.
PHẦN 1: Tìm hiểu chung về các chuẩn nén ITU-T,
chuẩn H26X (H. 261, H. 263, H. 264)
1. Tổ chức ITU-T
- Liên hiệp (liên minh) viễn thông quốc tế, viết tắt là ITU (International
Telecommunication Union) là một tổ chức của liên hiệp quốc nhằm tiêu chuẩn
hóa viễn thông quốc tế.
- Năm thành lập: 1865.
- Trụ sở: Geneva, Thụy Sĩ.
- Mục tiêu hoạt động: 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 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 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.
- Bộ phận:
+ ITU- T (T: Telecom -Viễn thông).
+ ITU- R (T: Radio -Vô tuyến).
+ ITU- D (D: Telecommunications Development -Phát triển viễn thông).
- Các chuẩn nén của ITU-T: 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: là chuẩn mã
hóa và nén video được đưa ra trong các khuyến nghị của ITU.
+ H. 261.
+ H. 263.
+ H. 264 (được biết đến là chuẩn MPEG – 4Part 10/AVC (Advanced Video
Coding)) do ITU – T hợp tác với ISO/ISE cùng phát triển.
-
3.4. Hệ màu
- Chuẩn H.263 sử dụng hệ màu YUV.
3.5. Phân loại các frame trong H. 263
- H .263 có hai loại frame là I-Frame và P-Frame và có thêm PB Frame. PB
frame có nguồn gốc từ P và B frame và là sự kết hợp của cả hai.
- Một video bao gồm nhiều ảnh tĩnh liên tục (Frame-Khung).
- Kích thước QCIF là 176x144 pixel, kích thước của CIF là 352x288 pixel.
- Mỗi khung ảnh CIF (352 x 288 pixel) được chia thành 12 GOB.
- Nếu là khung ảnh QCIF (176x144 pixel) thì sẽ được chia thành 3 GOB.
- Mỗi GOB lại được chia tiếp thành khối 11x3 MB .
- Picture Start Code (PSC) gồm 20 bit thông báo khởi động (0x00010). Dùng để
phân định ranh giới giữa các Frame với nhau.
- Temporal Reference (TR) gồm 5 bit là nhãn thời gian của hình ảnh (được sử
dụng sau này để đồng bộ hóa âm thanh).
- Picture Type (PType) gồm 6 bit:
+ Bit 1: Dấu hiệu chia màn hình. “1” là bật, “0” là tắt.
+ Bit 2: Dấu hiệu tài liệu camera. “1” là bật, “0” là tắt.
+ Bit 3: Có ảnh cứng hay không? “1” là bật, “0” là tắt.
+ Bit 4: Format nguồn. “1” là QCIF, “0” là CIF.
+ Bit 5: Tùy chọn chế độ ảnh tĩnh HI_RES. “1” là tắt, “0” là bật.
+ Bit 6: Bit bổ sung.
- Extra insertion information (PEI) gồm 1 bit: Được đặt là “1” để thông báo sự
hiện diện của trường dữ liệu tùy chọn.
- Spare Information (PSPARE) (0/8/16… bit): Nếu PEI là “1” thì 9 bit sau đó gồm
8 bit dữ liệu (PSPARE) và sau đó một bit PEI khác để cho biết liệu 9 bit sau đó
có tiếp tục như thế hay không? Bộ mã hóa không được chèn. PSPARE cho
đến khi được chỉ định bởi CCITT. Bộ giải mã phải được thiết kế để loại bỏ
PSPARE nếu PEI được đặt là “1”. Điều này sẽ cho phép CCITT chỉ định tương
thích ngược trong tương lai bổ sung trong PSPARE.
2.2. Lớp Group of Block (GOB)
- GOB Start Code (GBSC) gồm 16 bit chỉ ra sự bắt đầu của GOB (0x0001).
- Group Number (GN) gồm 4 bit chỉ ra vị trí của GOB trong ảnh.
- Group Quantization Step (Gquant): Bước lượng tử GOB gồm 5 bit được đặt
cố định cho đến khi được thay đổi bởi MQUANT.
- Extra Insertion Information (GEI) dài 1 bit và nếu bit này đặt thành 1 thì báo
hiệu sự hiện diện của trường dữ liệu tùy chọn sau.
- Spare Information (GSPARE) (0/8/16/… bit): Nếu GEI được đặt thành “1” thì 9
bit sau gồm 8 bit dữ liệu (GSPARE) và sau đó 1 bit GEI khác để cho biết liệu
có thêm 9 bit khác không và cứ tiếp tục như vậy. Bộ mã hóa được chèn
GSPARE cho đến khi được chỉ định bởi CCITT. Bộ giải mã phải được thiết kế
để loại bỏ GSPARE nếu GEI = “1”. Điều này cho phép CCITT chỉ định tương
thích “lùi” trong tương lai và bổ sung trong GSPARE.
2.3. Lớp Macro Block
- Macro Block Address (MBA): Địa chỉ chỉ vị trí của MB. MB đầu tiên có địa chỉ
tuyệt đối, địa chỉ của các BB kế tiếp được tính thông qua địa chỉ MB đầu tiên.
Một tử mã thêm dùng để nhồi bit ngay lập tức sau một tiêu đề GOB hoặc một
MB được mã hóa (Từ mã này được gọi là nhồi MBA). Nhồi MBA này được loại
bỏ bởi bộ giải mã VLC cho bảng mã khởi đầu.
- Macro Block Type (Mtype): Các từ mã có chiều dài thay đổi cung cấp thông tin
về MB và các thành phần dữ liệu nào có mặt.
- Macro Block Quantization (Mquant): Là một từ mã 5 bit, dùng để thay thế cho
GQUANT đến cuối GOB hoặc tạo ra một MQUANT mới.
- Motion Vector Data (MVD): Dữ liệu về vector chuyển động.
- Code Block Pattern (CBP): Chỉ xuất hiện khi được chỉ ra bởi MTYPE. Từ mã
cho một số mẫu biểu thị các khối đó trong MB mà ít nhất một hệ số biến đổi
được truyền đi.
2.4. Block
- Một MB gồm 4 khối Y, 1 khối Cb, 1 khối Cr. Dữ liệu cho một khối bao gồm các
từ mã cho các hệ số biến đổi, theo sau là điểm kết thúc (EOB). Thứ tự truyền
như hình sau:
- Coeff (Hệ số): là kiểu Run-length. Đối với khối Intra Block thì tất cả 64 hệ số
đều được truyền đi. Tất cả các trường hợp còn lại thì trường CBP sẽ chặn sự
truyền đi. Hệ số này là mã Run-Level (Do sau khi lượng tử, hầu hết các hệ số
AC ở vị trí tần số cao của khối B sẽ biến thành nhiều số 0. Do đó nó sẽ tạo ra
chuỗi nhiều số 0 dọc theo đường quét zig-zag của một khối. Một hệ số AC
không phải là zero được mã hóa thành một ký tự có cấu trúc Run/Level. Run
đại diện cho hệ số zero nằm trước hệ số AC khác zero. Level đại diện cho giá
trị biên độ của hệ số AC khác zero) .
- Mỗi block sẽ kết thúc bằng mã (0x1).
3. Sơ đồ nén và giải nén trong chuẩn H. 261
3.1. Sơ đồ nén trong chuẩn H. 261
- Để giải thích cho cách hoạt động của sơ đồ nén này, ta sẽ sử dụng một kịch
bản và ký hiệu giống như phần “2.3. Sơ đồ nén trong chuẩn H. 261”.
1 2 3 4
I I* 0 I*
P1 D1* P’1 P’1 P’1*
P2 D2* P’2 P’2 P’2*
- Đối với bộ giải mã, mã đầu vào cho các frame sẽ được giải mã trước. Đầu tiên
là giải mã Entropy, kế đến là lượng tử hóa ngược và IDCT. Đối với chế độ
Intra-frame. Khung được giải mã đầu tiên có giá trị là I* xuất hiện tại điểm số
1. Kết hợp với điểm số 5 có đầu vào là 0 (do công tắc đang ở chế độ Intra-
frame) nên đầu ra ở điểm số 4 sẽ vẫn là I*. Nó được gửi dưới dạng frame đầu
ra và cũng đồng thời được lưu trữ trong Frame Memory.
- Sau đó, mã đầu vào cho frame P1 sẽ được giải mã và lỗi dự đoán D1 sẽ được
nhận tại điểm số 1. Vì vector chuyển động cho MB hiện tại cũng được giải mã
entropy và được gửi đến bộ bù chuyển động nên MB dự đoán tương ứng là
P’1 có thể được đặt trong frame I là đầu ra tại điểm số 2 và là đầu vào của bộ
cộng (tại điểm số 3). Lúc này đầu ra tại điểm số 4 sẽ là P’1* = P’1 + D1 và nó
được gửi ra như một khung đã giải mã (khung đầu ra), và cũng tương tự nó
cũng đồng thời lại được lưu trữ trong Frame Memory. Các bước giải mã cho
P2 tương tự như P1.
4. Quá trình nén các frame
4.1. Quá trình nén frame I
- Quá trình thực hiện tương tự nén ảnh JPEG.
4.2. Quá trình nén frame P
- Như đã đề cập ở trên, frame P liên quan tới 2 bộ trong sơ đồ nén của chuẩn
H. 261 là bộ đánh giá ước lượng chuyển động và bộ bù chuyển động, vì thế
đây chính là 2 bộ phận quan trọng nhất trong quá trình nén frame P.
4.2.1. Kỹ thuật đánh giá chuyển động
- Đây là kỹ thuật dùng để xác định vector chuyển động.
- Để dễ hình dung, ta sử dụng điểm ở góc trên bên trái (x,y) là điểm nguồn của
MB trong khung đích (target). Gọi điểm C(x+k, y+l) là pixel trong MB trong
khung đích (hiện tại) và điểm R(x+k+i, y+j+l) là pixel trong MB trong khung tham
chiếu. Trong đó 2 giá trị k và l là các chỉ số cho pixel trong MB. 2 giá trị i và j là
chuyển vị ngang và dọc tương ứng. Sự khác biệt giữa 2 MB sau đó có thể đo
bằng sự khác biệt trung bình tuyệt đối của chúng (MAD) được định nghĩa bởi
công thức sau:
- Trong đó, N là kích thước của MB.
- Mục tiêu của việc tìm kiếm là tìm 1 vector (i,j) làm vector chuyển động MV (u,v)
sao cho MAD (i, j) là nhỏ nhất.
- Ngoài ra chúng ta có thể sử dụng trung bình bình phương nhỏ nhất (MSE) để
làm hàm tính toán chi phí như hàm MAD.
- Từ đó, ta sẽ có các cách dùng để đánh giá chuyển động như:
+ Block matching: Kỹ thuật đối sánh khối.
+ Hierarchical block matching: Kết hợp khối phân cấp.
+ Pel-recursive motion estimation: Ước tính chuyển động đệ quy Pels.
+ Direct optical flow methods: Phương pháp lưu lượng quang học trực tiếp.
+ Mesh-matching methods: Phương pháp kết hợp lưới.
- Trong đó, H. 261 sử dụng Một trong rất nhiều kỹ thuật Đối sánh khối, đó là
Thuật toán tìm kiếm ba bước (TSS).
4.2.2. Thuật toán tìm kiếm ba bước (TSS)
- Là phương pháp tìm kiếm rất thô sơ, nhưng rất phổ biến vì thuật toán này đơn
giản nhưng có hiệu suất rất tốt. TSS tìm kiếm vector chuyển động tốt để làm
cho mô hình tìm kiếm chính xác. TSS giới hạn số lượng kiểm tra trong một khu
vực tìm kiếm. Như ví dụ dưới đây là minh họa cho quy trình của TSS với w=7.
3. So sánh
- Giống nhau:
+ 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.
+ Hầu hết các sơ đồ nén theo chuẩn H.26X và MPEG đề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).
+ Đề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.
+ Các tín hiệu video thành phần được lấy mẫu và số hóa để tạo nên các điểm
ảnh rời rạc theo tỷ lệ 4:2:0.
+ Các sơ đồ nén theo H.261 và MPEG-1 đều dùng kỹ thuật subsampling và
lượng tử hóa trước khi mã hóa nhằm giảm kích thước bức ảnh đầu vào theo
cả chiều ngang và chiều dọc.
- Khác nhau:
+ 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à: I và P.Còn MPEG-1 sử dụng cả frame I, P, B. 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 dang. Mỗi frame của
chuẩ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).
+ Định dạng video: H.261 sử dụng 2 chuẩn định dạng CIF (352x288 pixels)
và QCIF (176x144 pixels) trong khi MPEG-1 sử dụng các chuẩn định dạng CIF,
SIF (Source Input Format) và có thể thiết lập độ phân giải lên đến 4095x4095
pixels.
+ 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. Nhung chuẩn MPEG-1 sử dụng 2 bảng lượng tử hóa khác
nhau cho các block của intraframe và các block cua interframe.
+ Độ 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.
- Kết luận:
+ Chuẩn H.26X thường được tối ưu hóa cho truyền tải video thời gian thực
như hội nghị truyền hình, truyền tải video giữa các thiết bị di động.
- + 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 4: Xây dựng sơ đồ thuật toán nén ảnh
video theo chuẩn H. 261
- Theo sơ đồ nén H. 261, ta sẽ xây dựng sơ đồ thuật toán cho từng khối
-
+ Đầu ra: 3 ma trận Y, Cr, Cb.
2. Khối lấy mẫu
- Theo chuẩn H. 261, cấu trúc lấy mẫu là 4:2:0 vì thế, ma trận Y được lấy toàn
bộ các giá trị trong khi ma trận Cr, Cb sẽ được lấy tại những điểm mà cả 2 tọa
độ của nó đều chia hết cho 2.
- Các bước thực hiện như sau:
+ Đầu vào: 3 ma trận Y, Cr, Cb.
+ Xét từng ma trận. Nếu đó là ma trận Y, lưu ma trận Y, Nếu đó là ma trận
Cr hoặc Cb. Lấy giá trị mà tại đó cả 2 tọa độ đều chia hết cho 2. Sau đó lưu
ma trận Cr, Cb đã được lấy mẫu.
+ Đầu ra: 3 ma trận Y, Cr, Cb đã được lấy mẫu với cấu trúc lấy mẫu 4:2:0
gồm 4 khối Y, 1 khối Cb, 1 khối Cr. Kích thước mỗi khối là 8x8.
- Sau khi kết thúc 2 khối này, ta đã làm xong bước tiền xử lý. Quy ước vẫn gọi
các ma trận đã được lấy mẫu là Y, Cr, Cb (Mặc dù kích thước đã thay đổi trước
khi lấy mẫu).
3. Khối DCT
- Là khối có nhiệm vụ chuyển đổi tín hiệu từ miền không gian, thời gian sang
miền tần số và ngược lại.
- Duyệt toàn bộ frame để có được các ma trận 8x8 và sử dụng công thức biến
đổi cosi rời rạc với các ma trận 8x8. Sau quá trình này, ta thu được frame với
các ma trận 8x8 đã được biến đổi DCT. Dưới đây là công thức của biến đổi
cosi.
Và bảng lượng tử hóa cho các thành phần độ Y, Cb, Cr (chung bảng).
- Các bước thực hiện như sau:
+ Đầu vào: Ma trận DCT.
+ Duyệt các giá trị trong ma trận DCT và ma trận lượng tử hóa cho thành
phần chói Y, Cr, Cb, sau đó áp dụng công thức trên.
+ Đầu ra: Ma trận sau khi được lượng tử hóa.
5. Khối 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:
6. Khối IDCT
- Quá trình Q−1 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.
- Để thực hiện IDCT ta sử dụng công thức:
+ 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.
+ 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.
+ 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.
+ lưu lại vector chuyển động tìm được của macroblock hiện tại.
- Sau đó, ta cần phải tạo Frame dự đoán để tiến hành quá trình bù chuyển
động.
- Các bước thực hiện như sau:
+ Đầu vào: Frame tham chiếu và tập các vector chuyển động của MB.
+ 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.
+ 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 đó.
+ 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 đó.
+ Duyệt xong toàn bộ, trả về P’ là frame dự đoán.
8. Khối bù chuyển động
- Kỹ thuật bù chuyển động (Motion Compensation) được sử dụng nhằm mục
đích khôi phục lại frame dựa trên vector chuyển động và sai số dự đoán (phần
sai lệch nhỏ nhất giữa 2 frame). Từ sai số dự đoán và frame dự đoán ta sẽ thu
được frame kết quả.
- Quá trình tạo frame kết quả thực hiện bằng cách cộng frame dự đoán trong
bước đánh giá chuyển động với sai số dự đoán.
- Các bước thực hiện như sau:
+ Đầu vào: Frame dự đoán và sai số dự đoán tương ứng.
+ Đầu ra: Frame kết quả là frame đã được bù chuyển động.
9. Khối mã hóa Entropy (VLE)
- Đầu vào:
+ 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.
- Đầu ra: byte BS[]: chuỗi bit sau khi nén.
- 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.
9.1. Mã hóa Macroblock
- 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;
- 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];}
- 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= ∆DC𝑛 - ∆DC𝑛−1 ;
- Cat: hạng của ∆DC trong bảng mã Huffman
+ 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);
+ 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;
+ Mã hóa nhị phân giá trị ∆DC;
+ 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.
- 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.
- Hàm DCT
+ Sử dụng hàm dct2 có sẵn trong Matlab để tính DCT
function frame_dct = dct_function(frame)
[m n] = size(frame);
for a = 1:8:m
for b = 1:8:n
frame_dct(a:a+7,b:b+7) =
dct2(frame(a:a+7,b:b+7));
end
end
[m n] = size(frame);
for i=1:8:m
for j=1:8:n
dequantize_frame_os(i:i+7,j:j+7) =
frame(i:i+7,j:j+7).*qtz_mtrx;
end
end
- Hàm dự đoán (tiến) với đầu vào là hai frame, một frame cần đánh giá chuyển
động và một frame tham chiếu. Đầu ra của hàm là vector chuyển động và frame
được dự đoán (tiến). Trong hàm này sử dụng thuật toán đối sánh khối TSS
function [motion_vector,new_P_frame] =
forwardprediction(I_frame,P_frame)
global mb_MAD mb_MAD_3d prediction_error mb range
[m n] = size(I_frame);
threshold = 16;
mb = 16;
range = 20;
vector_size = (m*n)/(mb^2);
motion_vector = zeros(3,vector_size);
mb_MAD = 256*ones(15,15);
% Thuat toan doi sanh khoi TSS
count = 1;
for i=1:mb:m-mb+1
for j=1:mb:n-mb+1
min = 512;
k1 = 0;
l1 = 0;
for k = -range:range
for l = -range:range
if ((i+k)<1||(j+l)<1||(i+k)+mb-1>m||(j+l)+mb-1>n)
continue;
end
min_MAD = MAD(B_frame(i:i+mb-1,j:j+mb-
1),I_frame((i+k):(i+k+mb-1),(j+l):(j+l+mb-1)));
if min_MAD < min
min = min_MAD;
k1 = k;
l1 = l;
end
end
end
if min > threshold
new_P_frame(i:i+mb-1,j:j+mb-1) = I_frame(i:i+mb-1,j:j+mb-
1);
motion_vector(1,count) = 0;
motion_vector(2,count) = 0;
motion_vector(3,count) = 0;
else
new_P_frame(i:i+mb-1,j:j+mb-1) = I_frame((i+k1):(i+k1+mb-
1),(j+l1):(j+l1+mb-1));
motion_vector(1,count) = k1;
motion_vector(2,count) = l1;
motion_vector(3,count) = 0;
end
count = count+1;
end
End
KẾT LUẬN
Qua việc tìm hiểu đề tài này, chúng em đã hiểu thêm các đặc điểm chuẩn nén MPEG-1,
MPEG-2, MPEG-4. Hiểu hơn về sơ đồ nén ảnh video MPEG-1, cơ bản đã xây dựng
được sơ đồ thuật toán, để từ đó nắm vững những thuật toán trong nén ảnh video
MPEG-1 như thuật toán đối sánh khối TSS, thuật toán bù chuyển động.
Bên cạnh đó chúng em còn những mặt hạn chế trong việc cài đặt thuật toán, mới chỉ
cài đặt được một số hàm cơ bản trong thuật toán nén ảnh video MPEG-1, mà chương
trình chưa cho ra video được nén theo chuẩn MPEG-1.
Trong tương lai, chúng em sẽ cố gắng hoàn thiện chương trình để đạt kết quả tốt hơn.
TÀI LIỆU THAM KHẢO
[1] Bài giảng môn học Xử lí dữ liệu đa phương tiện – PSG.TS Nguyễn Thị Hoàng
Lan, Viện Công Nghệ Thông Tin và Truyền Thông, Đại Học Bách Khoa Hà Nội.
[2] H.261 Video Slide, Mark Handley, Department of Computer Science, London's
Global University.
[3] Video Compression 1: H.261 Coding Basics Slide, Multimedia Systems Concepts
Standards and Practice Course, Ramesh Yerraballi
[4] Chapter 11. MPEG Video Coding I — MPEG-1 and 2, CMPT 820: Multimedia
Systems Course, Mohamed Hefeeda
[5] http://www-i6.informatik.rwth-
aachen.de/web/Misc/Coding/365/li/material/notes/Chap4/Chap4.3/Chap4.3.html
[6] https://www.wisdomjobs.com/e-university/multimedia-tutorial-270/h-dot-261-
12867.html
[7]
https://graphics.cmlab.csie.ntu.edu.tw/~itct/slide/Data_Compression_Motion_Estimation
_for_Video_Coding_Standards.pdf
[8]
http://www.img.lx.it.pt/~fp/Klagenfurt/Slides/6_Digital_Video_Compression_Oct2008.pdf
[9] Download tài liệu gốc của ITU về H. 261 tại đường link: https://www.itu.int/rec/T-
REC-H.261-199303-I/en