Tải bản đầy đủ

Mã hóa dự đoán, kỹ thuật DPCM và ứng dụng

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 BÀI TẬP LỚN
XỬ LÝ DỮ LIỆU ĐA PHƯƠNG TIỆN
Đề tài: Mã hóa dự đoán Kỹ thuật DPCM và ứng dụng

Giáo viên hướng dẫn:
Sinh viên:

PGS.TS. Nguyễn Thị Hoàng Lan

Vũ Ngọc Bình - 20111178
Nguyễn Thành Trung - 20112384
Đinh Hải Anh – 20111106
Nguyễn Huy Lăng – 20121966


Hà Nội, 5-2016
MỤC LỤC


2


Phần 1: Phương Pháp Mã Hóa DPCM
I.

Nguyên lý
Điều xung mã sai phân (DPCM – Differentical Pulse Code Modulation) là phương
pháp nén dữ liệu có mất mát thông tin. Cơ sở của phương pháp này dựa trên mã hóa dự
đoán, thường đước sử dụng đối với các tín hiệu lấy mẫu có độ tương quan mạnh (nghĩa là
hai mẫu gần nhau là khá tương tự nhau), có quan hệ lân cận giữa các mẫu, như tín hiệu
ảnh video, tín hiệu tiếng nói… Như vậy sẽ có nhiều lợi ích khi mã hóa sự khác nhau giữa
các mẫu kế cận thay cho mã hóa giá trị tuyệt đối của mỗi mẫu.
Nguyên tắc của mã hóa dự đoán :

- Mã hóa sự sai khác giữa các mẫu : mẫu dự đoán theo thời điểm trước và mẫu hiện tại.
- Giá trị mẫu được giải mã dựa trên sự sai khác và giá trị dự đoán ở thời điểm trước nó.
Như vậy có thể thấy rằng thay vì truyền đi toàn bộ thông tin của các mẫu, ta chỉ
truyền đi sự sai lệch giữa các mẫu. Điều này cho phép đạt được hiệu quả nén cao hơn
nhiều so với việc mã hóa và truyền đi giá trị của từng mẫu riêng biệt

Hình 1 : Sơ đồ nguyên lý DPCM

1.

Lấy mẫu ( Sampling)
3


Lấy mẫu chính là quá trình rời rạc hoá tín hiệu tương tự. Đây là bước chuyển tín
hiệu mang thông tin dạng liên tục thành tín hiệu mang thông tin rời rạc, bằng phương
pháp lấy mẫu (Sampling). Sao cho tín hiệu rời rạc phải mang đẩy đủ thông tin của tín
hiệu tương tự, để tái tạo được thông tin một cách trung thực ở đầu thu.

Hình 2 Quá trình lấy mẫu tính hiệu
Ở đầu thu để phục hồi lại được tín hiệu ban đầu, người ta dùng bộ lọc. Tín hiệu rời
rạc khi qua bộ lọc thông thấp, với tần số cơ bản của tín hiệu sẽ cho ra tín hiệu ban đầu.
Quá trình phục hồi đó được minh hoạ ở hình 3


Hình 3 : Quá trình phục hồi tín hiệu

2.

Lượng tử hóa
Là thay thế một tín hiệu tương tự đã được lấy mẫu bằng tập hữu hạn của các mức
tín hiệu biên độ rời rạc. Ưu điểm của lượng tử hóa tín hiệu đã lấy mẫu là giảm được ảnh
hưởng của nhiễu.
Các mức tín hiệu rời rạc này gọi là mức lượng tử hoá, khoảng cách giữa hai mức
lượng tử hoá gọi là bước lượng tử hoá.

4


3.

Bộ dự đoán
Do độ tương quan giữa các mẫu tín hiệu như tín hiệu tiếng nói, tín hiệu video… là
khá lớn nên có thể thực hiện dự đoán một cách gần đúng một giá trị mẫu nào đó từ một
số mẫu trước đó.
Bộ dự đoán được sử dụng để tính toán dự đoán ra các mẫu tín hiệu theo mẫu tại
thời điểm trước (tín hiệu tham chiếu). Trong quá trình dự đoán sẽ có sai số dự
đoán(Pridection error). Cần phân biệt giữa sai số dự đoán và sai số lượng tử. Hai khái
niệm này có bản chất khác nhau :

• Sai số dự đoán (prediction error) chỉ là sự chênh lệch giữa giá trị dự đoán và giá trị thực.
Nó không làm tổn thất thông tin dẫn đến suy giảm chất lượng ảnh. Giá trị sai số này
quyết định tốc độ bit giảm đi nhiều hay ít, tức ảnh hưởng đến hiệu suất nén.

• Sai số lượng tử (quantization error) là sai số đặc trưng cho sự tổn thất dữ liệu dẫn đến làm
suy giảm chất lượng ảnh phục hồi.

4.

Bộ mã hóa
Bộ mã hóa sẽ mã hóa các sai số dự đoán thành các từ mã nhị phân và được truyền
đi qua kênh truyền.
Ở đâu thu, bộ giải mã sẽ tiến hành giải mã các bit nhị phân nhận được , sau đó tiến
hành lượng tử hóa ngược và khôi phục lại tín hiệu ban đầu

5


II.

Các phương pháp mã hóa DPCM

1. DPCM vòng mở (Open-loop DPCM)

Hình 5 Open-loop DPCM
Gọi q là sai số lượng tử hóa, ta có d^ [n] = d[n] + q[n]
Mã hóa : d[n] = x[n] - x[n-1]

Như vậy có thể thấy với kỹ thuật Open-Loop DPCM, sau mỗi vòng lặp sai số lượng tử
hóa q[i] lại được cộng thêm vào (Quantization error Accumulation) :

6


Tức là sai số lượng tử hóa sau khi mã hóa sẽ rất lớn.

2. DPCM vòng đóng ( Closed-loop DPCM)

Hình 7 Closed-loop DPCM

Với cách bố trí như trong sơ đồ ta có

7


Như vậy sai số lượng tử hóa đã không có sự tích lũy (accumulation) sau mỗi vòng lặp =>
giảm được đáng kể sai số lượng tử hóa.

3. DPCM tuyến tính

Hình 7 : DPCM với Linear Pridiction
Cả 2 phương pháp Open-loop DPCM và Closed-loop DPCM ở trên đều có chung
một cách tính sự sai khác. Đó là tính sự sai khác của mẫu hiện tại chỉ dựa trên mẫu dự
đoán của tín hiệu đứng ngay trước nó. Nếu như có thể tính sự sai khác từ tất cả các mẫu
dự đoán trước mẫu hiện tại thì sai số lượng tử hóa còn được giảm xuống nữa. Như vậy sẽ

8


đạt được độ nén cao hơn. Đây chính là ý tưởng của phương pháp DPCM dùng bộ dự
đoán tuyến tính (Linear Pridection).
DPCM sử dụng hàm P(Z) được xác định bẳng tổng của tất cả các mẫu dự đoán
tính đến thời điểm đang xét. Vì sử dụng hàm tuyến tính nên P(Z) sẽ có dạng

9


Phần 2: Bộ Dự Đoán Và Bộ Lượng Tử Hóa Trong DPCM
I. Bộ dự đoán
1. Bộ dự đoán sai số

Công nghệ DPCM thực hiện loại bỏ tính có nhớ và các thông tin dư thừa của
nguồn tín hiệu bằng một bộ lọc đặc biệt có đáp ứng đầu ra là hiệu số giữa mẫu đầu vào và
giá trị dự đoán của chính nó. Rất nhiều giá trị vi sai này gần 0 nếu các điểm ảnh biến đổi
đồng đều. Còn với ảnh có nhiều chi tiết, giá trị sai số dự đoán có thể lớn. Khi đó có thể
lượng tử hoá chúng bằng bước lượng tử cao hơn do đặc điểm của mắt người không nhạy
cảm với những chi tiết có độ tương phản cao, thay đổi nhanh. Sự giảm tốc độ bit ở đây
thu được từ quá trình lượng tử hoá và mã hoá.

2. Kỹ thuật dự đoán
Nếu trực tiếp lượng tử hoá và mã hoá các mẫu của một nguồn ảnh với đầy đủ
thông tin dư thừa và quan hệ tương hỗ giữa các điểm ảnh thì hiệu suất nén sẽ rất thấp do
lượng thông tin của nguồn quá lớn. Do vậy trong các công nghệ nén, cần loại bỏ đi tính
có nhớ của nguồn tín hiệu, tức thực hiện “giải tương hỗ” (deccorelation) giữa các mẫu
điểm lân cận nhau. Trong công nghệ nén “điều xung mã vi sai” DPCM, quá trình giải
tương hỗ được thực hiện bằng một bộ lọc có đáp ứng đầu ra là hiệu số giữa các mẫu điểm

10


liên tiếp đầu vào và một giá trị “dự đoán” của mẫu điểm đó tạo được dựa trên giá trị các
mẫu lân cận theo một qui luật nhất định.
Sai số dự đoán: Bộ tạo dự đoán có nhiệm vụ tạo ra giá trị điểm tiếp theo từ giá trị các
điểm đã truyền tải trước đó được lưu trữ. Quá trình tạo dự đoán càng tốt thì sự sai khác
giữa giá trị thực của mẫu hiện hành và trị dự đoán cho nó (gọi là sai số dự đoán) càng
nhỏ. Khi đó, tốc độ dòng bit càng được giảm nhiều. Phân biệt giữa sai số dự đoán và sai
số lượng tử như đã trình bày ở phần trên

3. Ảnh hưởng của bộ dự đoán đến chất lượng nén
Kỹ thuật nén ảnh số đang đóng một vai trò cực kỳ quan trọng trong các hệ thống viễn
thông và multimedia để giải quyết vấn đề băng thông của đường truyền.
Các kỹ thuật nén video đều cố gắng làm giảm lượng thông tin cần thiết cho một
chuỗi các bức ảnh mà không làm giảm chất lượng của nó đối với người xem. Nói chung,
tín hiệu video thường chứa đựng một lượng lớn các thông tin thừa, chúng thường được
chia thành hai loại: thừa tĩnh bên trong từng frame (statistical) và thừa động giữa các
frame (subjective). Mục đích của nén video là nhằm làm giảm số bit khi lưu trữ và khi
truyền bằng cách phát hiện để loại bỏ các lượng thông tin dư thừa này và dùng các kỹ
thuật Entropy mã hoá để tối thiểu hoá lượng tin quan trọng cần giữ lại. Và bộ dự đoán là
một phần quan trọng trong việc tối ưu hóa chất lượng nén video
Như đã giới thiệu trong kỹ thuật nén video DPCM, ảnh hưởng của bộ dự đoán đến
chất lượng nén video chính là sai số dự đoán (prediction error) mà bộ dự đoán tạo ra. Sai
số này quyết định hiệu suất cũng như chất lượng nén.
Video về bản chất là những khung ảnh có quan hệ về thời gian, vậy nên xử lý nén
video cũng là xử lý trên từng khung hình riêng biệt. Giá trị của điểm ảnh có thể được dự
đoán từ giá trị hàng xóm lân cận.
Các kỹ thuật dự đoán thường dùng là dự đoán một chiều (1-dimensional
prediction) và dự đoán hai chiều (2- dimensional prediction).

11


Trong dự đoán một chiều, thứ tự của các điểm ảnh có giá trị tượng tự sẽ được tìm
thấy cùng một hàng hay cột của hình ảnh. Còn trong dự đoán 2 chiều sẽ gồm có dự đoán
hàng và cột.

Sự ảnh hưởng tới chất lượng ảnh của các kiểu dự đoán trên có thể được thấy khá
rõ qua các ví dụ dưới đây:

12


Ta thấy như ảnh trên thì giá trị điểm ảnh ban đầu được ký hiệu s[x,y]. Với dự đoán
một chiều theo chiều ngang (horizontal – uH[x,y]) có thể thấy dự đoán này cho giá trị tốt
với phần ảnh có rìa theo chiều ngang. Phần ảnh có rìa đứng (theo chiều ngang giá trị
điểm ảnh biến đổi nhiều) thì sai số tạo ra sẽ lớn (nổi rõ hơn và khác nhiều hơn so với
phần ảnh có rìa theo chiều ngang).
Cũng tương tự khi quan sát ảnh được dự đoán một chiều theo chiều dọc
(vertical – uV[x,y]), các phần ảnh có rìa theo chiều dọc mờ hơn và gần đúng với giá trị
ảnh gốc hơn là các phần ảnh có rìa hướng theo chiều ngang.
Cuối cùng là ảnh dự đoán hai chiều (2-dimensional – uD[x,y]), ta có thể
thấy được sự đồng nhất tương đối giữa cả phần ảnh chiều ngang và dọc.
Ví dụ với một bức ảnh khác:

13


Quá trình tạo dự đoán luôn tồn tại một sai số dự đoán nào đó.

Chất lượng nén không đơn thuần dựa vào sai số dự đoán trong quá trình mã hóa,
nó còn phụ thuộc quá trình tái tạo các tín hiệu dự đoán ở bộ giải mã. Quá trình nén còn
được thực hiện cả trong quá trình lượng tử hóa và hiệu quả nén cũngđược quyết định bởi
cách lượng tử hóa mẫu tín hiệu ban đầu.

14


Khả năng dự đoán tốt sẽ giảm số bít phải truyền đi, ngược lại khả năng dự báo
kém sẽ khiến cho số lượng bít phải truyền tăng lên, ảnh hưởng tới hiệu suất nén. Một số
lỗi với sai số dự đoán làm giảm chất lượng ảnh sau sau khi khôi phục:

Hình 22. Nhiễu hạt

15


Với số bit khác nhau:

16


II.

Bộ lượng tử hóa và ảnh hưởng của bộ lượng tử hóa đến chất
lượng nén video

Lượng tử hóa là ánh xạ không tuyến tính có tổn hao từ khoảng biểu diễn liên tục
biên độ tín hiệu vào khoảng biểu diễn bởi các giá trị rời rạc của các mức giá trị hay các từ
mã.
Với R bits chúng ta có thể biểu diễn 2R mã khác nhau trên mỗi mẫu, mỗi mã có thể
biểu diễn một mức biên độ của tín hiệu. Biên độ của tín hiệu có cả giá trị âm và dương do
đó chúng ta phải định nghĩa mã để miêu tả cả giá trị biên độ âm và dương. Chúng ta chọn
các giá trị điển hình sao cho ở đó có sự cân bằng các mức lượng tử cho cả giá trị âm và
dương. Có hai cách chọn: Chọn sử dụng có mức lượng tử bằng không (midtread) hoặc
không có mức lượng tử bằng không (midrise). “Midrise” không có mức không do vậy với
một tín hiệu đầu vào sẽ cho một số chẵn mức lượng tử ở đầu ra. Ngược lại lượng tử hóa
“midtread” sẽ cho ra một số lẻ mức lượng tử ở đầu ra. Với R bits thì lượng tử hóa
“midtread” sẽ cho 2R-1 giá trị khác nhau ngược lại lượng tử hóa “midrise” cho 2R mã.
Mặc dù cho số mức lượng tử nhỏ hơn nhưng lượng tử hóa “midtread” trong quá trình xử
lý tín hiệu audio cho kết quả tốt hơn

1. Lượng tử hóa tuyến tính
Lượng tử hóa tuyến tính là một kiểu lượng tử hóa đơn giản nhất. Lượng tử hóa
tuyến tính là lượng tử với các mức lượng tử bằng nhau. Trong một kiểu lượng tử, phạm vi
giá trị đầu vào là một số được biểu diễn bằng ký pháp nhị phân và mã cho một tín hiệu
đầu ra là một số nhị phân trong khoảng mà giá trị đầu vào rơi vào.
Để định nghĩa phạm vi và mức lượng tử chúng ta cần các thông tin sau:
- lượng tử hóa theo kiểu “midtread” hay “midrise”
- giá trị lớn nhất của giá trị đầu vào xmax
- mức lượng tử Δ

17


Thành phần dữ liệu thứ ba định nghĩa số bits cần thiết để biểu diễn một mã ví dụ
như R bít cho phép chúng ta biểu diễn 2mũR mã khác nhau. Với kiểu lượng tử hóa
“midrise”, R bits cho phép chúng ta một tập các phạm vi đầu vào là Δ=2*xmax/2R
Kiểu lượng tử hóa “midtread” sẽ có phạm vi lớn hơn một chút là =2*xmax/(2R -1)
Khoảng giá trị đầu vào là tử -xmax đến xmax, vậy điều gì sẽ xẩy ra khi giá trị đầu
vào vượt quá khoảng này? Với các giá trị cao hơn giá trị cao nhất của khoảng thì sẽ được
gán giá trị bằng giá trị cao nhất của khoảng, còn các giá trị nhỏ hơn giá trị nhỏ nhất của
khoảng thì sẽ được gán giá trị bằng giá trị nhỏ nhất của khoảng.
Midrise quantizers

Hình trên minh họa lượng tử hóa tuyến tính kiểu “midrise” 2 bits. Phía tay trái của
hình biểu diễn khoảng biên độ đầu vào từ -1 đến 1. Từ 2 bits lượng tử hóa midrise, chúng
ta có thể chia khoảng giá trị đầu vào thành 4 mức. Như đã biết thì 4 mức này sẽ có độ
rộng bằng nhau. Mỗi mức được biểu diễn bằng giá trị nhị phân tương ứng: [11], [10],
[00], [01] lần lượt tương ứng với các giá trị -1, -0. +0, +1.
Chúng ta đã lượng tử hóa tín hiệu đầu vào với 2 bits mã, chúng ta cũng có thể
chuyển đổi chúng về dạng biên độ của tín hiệu. Ví dụ với mức [00] là mức nằm trong
khoảng biên độ từ 0.0 đến 0.5 của tín hiệu đầu vào. Giả sử rằng các giá trị biên độ được
phân bố đều trong mỗi khoảng, chọn mức đầu ra với mức lỗi nhỏ nhất sẽ là giá

18


trị trung tâm của khoảng nghĩa là 0.25. Do đó các mã [11], [10], [00], [01] sẽ lần lượt là
-0.75, -0.25, 0.25, 0.75
Lượng tử hóa tuyến tính kiểu midrise với nhiều hơn 2 bits cũng được làm tương tự.
Giải thuật lượng tử hóa và lượng tử hóa ngược đối với lượng tử hóa
tuyến tính kiểu Midrise R bit
Ví dụ: biên độ đầu vào là 0.6 thì sau quá trình lượng tử 2 bits sẽ là
INT (2*0.6) = INT (1.2) =1
Ta chuyển đổi ngược lại sẽ là
(1+ 0.5)/2 = 1.512 = 0.75
Như vậy ta thấy có một khoảng chênh lệch giữa biên độ của tín hiệu ban đầu và
biên độ của tín hiệu sau khi được khôi phục lại.
Midtread quantizers

Hình trên minh họa lượng tử hóa tuyến tính kiểu midtread 2 bits. Với 2 bits chúng
ta chỉ biểu diễn được 3 mức biên độ của tín hiệu đầu vào. Có nghĩa là chúng ta chỉ có thể
chia khoảng giá trị đầu vào thành 3 mức đo đó sẽ có độ rộng lớn hơn so với trường hợp
của midrise. Các mức chúng ta có là [11], [00], [01] lần lượt tương ứng với các giá trị -1,
0, +1, và mã [10] không được sử dụng. Giá trị lượng tử hóa ngược vẫn là trung tâm của

19


khoảng giá trị trong trường hợp này sẽ lần lượt là -2/3, 0, và +2/3. Chú ý rằng giá trị 0
vẫn được giữ. Tín hiệu audio thường có khoảng lặng do đó lượng tử hóa có thể biểu diễn
tín hiệu với biên độ bằng 0 rất phù hợp trong xử lý tín hiệu audio.
Giải thuật lượng tử hóa và lượng tử hóa ngược đối với lượng tử hóa tuyến tính
kiểu Midtread R bit.
Ví dụ: biên độ đầu vào là 0.6 thì sau quá trình lượng tử 2 bits sẽ là
INT ((3*0.6+1)/2) = INT (1.4) =1
Ta chuyển đổi ngược lại sẽ là
2*1/3 = 2/3
Như vậy ta thấy có một khoảng chênh lệch giữa biên độ của tín hiệu ban đầu và
biên độ của tín hiệu sau khi được khôi phục lại. Lượng tử hóa tuyến tính có giá trị làm
tròn lỗi lớn nhất bằng nửa độ rộng của khoảng giá trị tại mọi nơi, mức đầu vào không tải
chồng. Tuy nhiên lỗi này sẽ chở nên nghiêm trọng đối với các tín hiệu có biên độ nhỏ.

2. Lượng tử hóa phi tuyến
Lượng tử với các bước lượng tử không yêu cầu phải bằng nhau, với độ
rộng của mỗi bước thay đổi tương ứng với biên độ của tín hiệu đầu vào gọi là lượng tử
hóa phi tuyến.
Lượng tử hóa phi tuyến thường sử dụng phương thức co giãn.
Trong phương thức co giãn, có một đầu vào x được truyền vào thông qua một hàm
đơn điệu tăng
y = c(x)
Lượng tử hóa ngược sẽ được thực hiện:
x’=c-1(y’)
Trong đó hàm c(x) không đối xứng xung quanh x=0 do đó giá trị x âm sẽ được
biểu diễn bằng giá trị âm. Chúng ta có thể định nghĩa c(x) thông qua c(|x|). Nếu xét tín
hiệu đầu vào và lượng tử hóa tuyến tính thì tín hiệu thuộc khoản -1.0 đến 1.0, sau đó
dùng hàm co giãn c(|x|) sẽ cho một biểu đồ đầu vào từ 0 đến 1.0 trên khoảng từ 0 đến 1.0.
Với yêu cầu c(x) đơn điệu tăng do đó c(x) dễ dàng có thể đảo ngược lại.
Để có một hình dung về sự co giãn ảnh hưởng như thế nào đến lượng tử hóa,
chúng ta xem kích cỡ của các bước lượng tử thay đổi như thế nào đối với mức tín hiệu
đầu vào x.

20


Như chúng ta đã biết các bước lượng tử trong lượng tử hóa tuyến tính là đều nhau.
Nếu chúng ta lượng tử sử dụng một lượng lớn các bít thì bước lượng tử sẽ nhỏ, y=c(x)
xấp xỉ tuyến tính và chúng ta có
y(x) ≈ c(x0) + dc/dx(x-x0)
Với x0 cố định trong mỗi mức. Độ rộng trong x của một mức lượng tử được thu
nhỏ bởi tỷ số giữa dc và dx từ độ rộng trong y. Ví dụ, nếu chúng ta chọn một hàm c(x) có
độ dốc cao cho giá trị x nhỏ thì chúng ta có lượng tử hóa nhiễu nhỏ hơn so với lượng tử
hóa tuyến tính. Tuy nhiên, hàm c(|x|) phải chạy tuyến tính từ 0 đến 1.0, độ dốc cao cho
giá trị x thấp bao hàm độ dốc thấp hơn và nhiều hơn lượng tử hóa nhiễu cho các giá trị x
cao hơn. Do đó, chúng ta có sử dụng hàm co giãn để di chuyển lượng tử hóa nhiễu từ
biên độ đầu vào thấp đến biên độ đầu vào cao hơn. Lượng tử hóa phi tuyến có thể được
sử dụng để làm giảm tỷ lệ nhiễu trên tạp âm (SNR)

21


Phần 3: Thuật Toán DPCM Áp Dụng Mã Hóa
Thành Phần DC Trong Nén Ảnh JPEG
I.

DPCM trong nén ảnh JPEG

Quy trình nén ảnh JPEG:
b1: Biến đổi ảnh từ bộ màu RGB thành bộ màu YUV (hoặc YIQ) và chia ảnh thành các
block (khối điểm ảnh – ví dụ 8x8 như sơ đồ trên).
b2: Thực hiện biến đổi cosi rời rạc (DCT) trên các khối điểm ảnh.
b3: Lượng tử hóa và sắp xếp zig-zag ta thu được thành phần DC và thành phần AC mang
hầu hết thông tin chứa trong ảnh gốc. Trong đó, DC là thành phần quan trọng nhất mang
độ chói trung bình của ảnh, thành phần AC chứa các thông tin về chi tiết của ảnh.
- Thành phần AC được thực hiện mã hóa RLC.
- Thành phần DC sẽ được thực hiện mã hóa theo DPCM
Nhận xét: Trong nén ảnh JPEG mã hóa dự đoán DPCM được áp dụng để mã hóa
thành phần DC của ảnh. Phương pháp mã hóa này được sử dụng là do thành phần DC
trong JPEG là lớn và khác nhau, các thành phần DC kế tiếp thường gần bằng nhau. Vì
vậy độ tương quan giữa mẫu hiện tại và mẫu ở thời điểm trước là lớn. Nên áp dụng

22


phương pháp mã hóa dự đoán DPCM để mã hóa thành phần DC sẽ mang lại tỉ số nén
cao.

II.

Thuật toán DPCM áp dụng mã hóa thành phần DC
Thuật toán sử dụng phương pháp mã hóa DPCM vòng mở (Open-loop DPCM) để mã
hóa các thành phần DC.
Đầu vào: thành phần DC
Đầu ra: các từ mã

Thuật toán DPCM áp dụng mã hóa thành phần DC được mô tả bởi các bước:
B1: Cho tín hiệu DC[1] đi qua
B2: d[1] = DC[1], gán i = 2
B3: Nếu i <= N(là số lượng thành phần DC) thì đi đến B4. Ngược lại i>N thì đi đến
B6
B4: Tính sai khác giữa 2 mẫu liên tiếp d[i] = DC[i] – DC[i-1] đi đến B5
B5: i = i+1 quay lại B3
B6: Lượng tử hóa dãy d[n] đi đến B7
B7: Mã hóa và kết thúc.

23


Sơ đồ khối thuật toán DPCM áp dụng mã hóa thành phần DC trong nén ảnh JPEG

III.

Đánh giá nhận xet thuật toán DPCM áp dụng trong nén ảnh
JPEG

Trong nén ảnh JPEG thành phần DC là thành phần quan trọng nhất mang độ chói trung
bình của ảnh, thành phần AC chứa các thông tin về chi tiết của ảnh. Việc áp dụng DPCM
để mã hóa thành phần DC trong nén ảnh JPEG sẽ làm tăng tỉ số nén ảnh. Vì trong JPEG
thành phần DC có độ tương quan mạnh giữa các mẫu kế tiếp nhau. Nên thay vì ta phải xử
lý mã hóa với các mẫu giá trị tuyệt đối của DC khác nhau thì ta sẽ mã hóa sự khác nhau
giữa các mẫu kế cận. Điều này cho phép nén ảnh JPEG đạt được hiệu quả nén cao hơn
nhiều so với việc xừ lý với các giá trị tuyệt đối của mẫu. Kết luận: thuật toán DPCM áp
dụng mã hóa thành phần DC trong nén ảnh JPEG giúp tăng hiệu quả nén ảnh JPEG.

24


Phần 4: Xây Dựng Ứng Dụng Thử Nghiệm DPCM Trong
Nén Ảnh JPEG Với Matlab
I.

Giới thiệu về Matlab

Matlab là một ngôn ngữ lập trình thực hành bậc cao được sử dụng để giải các bài
toán về kỹ thuật. Matlab tích hợp được việc tính toán, thể hiện kết quả, cho phép lập
trình, giao diện làm việc rất dễ dàng cho người sử dụng. Dữ liệu cùng với thư viện được
lập trình sẵn cho phép người sử dụng có thể có được những ứng dụng sau đây.

• Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường.
• Cho phép lập trình tạo ra những ứng dụng mới.
• Cho phép mô phỏng các mô hình thực tế.
• Phân tích, khảo sát và hiển thị dữ liệu.
• Với phần mềm đồ hoạ cực mạnh.
• Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran
II.

Lập trình thử nghiệm
Chương trình thử nghiệm của em sẽ gồm 2 chương trình nhỏ:
• Một chương trình nén ảnh JPEG có sử dụng mã hóa DPCM đối với thành
phần DC (nằm trong folder matlab_JPEG_have_dpcm trong file đính
kèm)
• Một chương trình nén ảnh JPEG không sử dụng mã hó DPCM đối với
thành phần DC DC (nằm trong folder matlab_JPEG_not_dpcm trong file
đính kèm)
Mỗi chương trình sau khi chạy sẽ có đo lường hiệu năng nén (tỉ số nén, độ tổn
hao). Từ đó đưa ra kết luận:

Đầu vào

Chương trình nén ảnh JPEG
có DPCM

Chương trình nén ảnh JPEG
không có DPCM

Dữ liệu ảnh lưu trong file
lena.mat

Dữ liệu ảnh lưu trong file
lena.mat

25


x

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×