Mục lục:
I. Tổng quan về nén dữ liệu ảnh và chuẩn JPEG:
1.1.Tổng quan về nén dữ liệu ảnh:
1.1.1. Sự cần thiết phải nén dữ liệu ảnh:
1.1.2. Một số khái niệm:
1.1.3. Phân loại phơng pháp nén ảnh
1.1.3.1.Nén không mất mát thông tin
1.1.3.2.Nén ảnh tĩnh dựa trên phép biến đổi ảnh
1.2.Kĩ thuật nén ảnh JPEG:
1.2.1.Không gian màu:
1.2.2.Chuẩn JPEG
1.2.2.1. Biến đổi Cosin rời rạc:
1.2.2.2.Sắp xếp Zigzag:
1.2.2.3.Lợng tử hoá.
1.2.2.4.Mã hoá dữ liệu ảnh.
1.2.3. Cấu trúc ảnh JPEG:
II.Nén ảnh theo chuẩn JPEG:
2.1. Biến đổi Cosin rời rạc:
4.1.
4.2.
2.2. Sắp xếp Zigzag:
5.2
2.3.Lợng tử hoá
6.1
6.1
2.4.Mã hoá ảnh
7.1
7.2
III.Phụ lục:
3.1.Các tài liệu tham khảo và chơng trình
3.2.Các thuật ngữ.
I. Tổng quan về nén dữ liệu ảnh và chuẩn JPEG:
1.1.Tổng quan về nén dữ liệu ảnh:
Sự cần thiết phải nén dữ liệu ảnh:
Nén ảnh là một kỹ thuật mã hoá hiệu suất cao ảnh số nhằm làm giảm số
bit cần cho biểu diễn ảnh. Chức năng của kỹ thuật này là giảm độ lớn dữ liệu
phải lu trữ cùng với thời gian truyền trong khi vẫn giữ nguyên chất lợng của
ảnh. Để đánh giá sự cần thiết của nén ảnh, chúng ta xem xét về yêu cầu bộ
nhớ và thời gian truyền khi dùng một modem 9600 baud (bit/s) cho các ảnh
sau đây:
Một ảnh 512 ì 512 điểm, 8 bit cho một điểm, ảnh mức xám yêu cầu
2,097,152 bit cho lu giữ và mất 3.64 phút để truyền.
Một ảnh màu RGB có cùng các bớc xử lý nh trờng hợp trên yêu cầu xấp
xỉ 6 triệu bít cho lu trữ và mất gần 11 phút để truyền.
Một phim âm bản có kích thớc 24 ì 36 mm (35 mm) chia bằng các
khoảng cách nhau 12 àm, vào khoảng 3000 ì 2000 điểm, 8 bit cho một điểm,
yêu cầu 48 triệu bit cho lu giữ ảnh và 83 phút để truyền. Một phim âm bản
màu sẽ yêu cầu một số lớn gấp ba lần cho lu giữ và truyền.
Rõ ràng, việc truyền và lu giữ các ảnh sẽ có nhiều vấn đề. Có rất nhiều ví
dụ khác mà sẽ dễ dàng làm sáng tỏ vai trò của nén ảnh, và rất có nhiều
nghiên cứu tập trung vào lĩnh vực này. Fax, một tài liệu đồ hoạ đợc truyền
qua đờng dây điện thoại, nén dữ liệu ảnh y học, truyền hình là một vài trong
số nhiều ứng dụng tiềm tàng của nén ảnh. Sự phát triển của kỹ thuật vi điện
tử và sự phát triển của rất nhiều ứng dụng thơng mại dẫn dắt sự phát triển
cho các tiêu chuẩn và phần cứng của bộ nén ảnh theo thời gian thực.
1.1.2.Một số khái niệm:
*Nén dữ liệu ảnh:
-Biến đổi dòng thông tin ảnh thành từ mã nhằm giảm độ d thừa thông
tin.
*Các độ d thừa thông tin:
-D thừa thông tin về không gian, về thời gian, đô d thừa phổ và d thừa
do độ cảm thụ.
*ảnh tĩnh :
*ảnh động:
Các tham số chất lợng nén ảnh
*Tỷ số nén :
-Tỷ số: C
R
=
-Tỷ số bít:
-Tốc độ dòng bít(đối với ảnh động):bit/s
*Chất lợng nén:
-Nén có mất mát thông tin(lossless).
-Nén không mất mát thông tin(lossy).
*Độ phức tạp:
-Về thời giannén: Nén thời gian thực/ không thời gian thực.
-Về không gian bộ nhớ.
1.1.3. Phân loại ph ơng pháp nén ảnh:
1.1.3.1.Nén không mất mát thông tin :
-Mã loạt dài (RLE):Dùng số đếm để thay thế các điểm giống nhau lặp
lại.
-Mã Shannon-Fano:Dùng cụm bít có độ dài thay đổi để mã hoá .
-Mã Hufman:Sử dụng đặc điểm mã hoá của Shannon-Fano với ý t-
ởng:kí hiệu có xác suât xuất hiện nhiều thì đợc mã hoá với từ mã ngắn.
-Mã Lemple-Ziv:Dựa trên việc xây dựng và tra từ điển.
-Mã dự đoán (prediction): Dựa trên quá trình tạo điểm tuần tự và luật
dự đoán.
1.3.2.Nén ảnh tĩnh dựa trên phép biến đổi ảnh
-Phép biến đổi Cosin rời rạc (DCT):biểu diễn các giá trị điểm ảnh trên
miền tần số, tập trung năng lợng vào một số hệ số, DCT cho phép áp dụng
trong các chuẩn JPEG va MPEG.
-Phép biến đổi Wavelet rời rạc (DWT):Sử dụng các bộ lọc thông giải
xử lý đa phân giải trong phép DWt.
Phép biến đổi dựa trên hình học Fractal (Phép biến đổi Fractal): Sử
dụng các phép biến đổi hình học.
1.3.Kĩ thuật nén ảnh JPEG :
1.3.1.Chuẩn JPEG :
Trong chuẩn JPEG ảnh đợc nén nh sau:
1. Khối điểm kích thớc 8 ì 8 của DCT trên ảnh nguyên gốc đợc tính.
2. Hệ số chuyển đổi đợc tiêu chuẩn hoá bằng cách áp dụng một mảng
do ngời sử dụng định nghĩa nó đợc định trớc cho tất cả các khối.
3. Hệ số DC đợc mã hóa với lợc đồ DPCM.
4. Mỗi khối đợc sắp xếp lại sử dụng mã zigzag (xem hình 13.21). Điều
này là theo RLC và lợc đồ mã Huffman.
Để nén một ảnh màu, JPEG đề xuất rằng mỗi thành phần đợc mã hoá một
cách độc lập với nhau.
1.2.1.1. Biến đổi Cosin rời rạc:
1.2.1.2.Sắp xếp Zigzag:
1.2.1.3.Lợng tử hoá.
1.2.1.4.Mã hoá dữ liệu ảnh.
1.3.2.Cấu trúc ảnh JPEG:
Các byte đánh dấu GiảI thích
Bắt đầu File
Chú giảI-có thể không có
Byte đánh dấu dữ liệu ứng dụng
( thông thờng không dùng)
Định nghĩa bảng lợng tử
Bắt đầu của
Định nghĩa bảng Huffman
Bắt đầu dữ liệu ảnh
Kết thúc dữ liệu ảnh
Kết thúc File ảnh
Ví dụ:
ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff fe 00 46
76 77 78 79 7a 83 84 85 86 b5 b6 b7 b8 b9 ba c2 03 00 04 ff db 00 43
00 08 06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14 0d 0c 0b 0b 0c 19 12
13 0f 14 1d 1a 1f 1e 1d 1a 1c 1c 20 24 2e 27 20 22 2c 23 1c 1c 28 37 29
2c 30 31 34 34 34 1f 27 39 3d 38 32 3c 2e 33 34 32 ff c0 00 0b 08 01 00
01 00 01 01 11 00 ff c4 00 1f 00 00 01 05 01 01 01 01 01 01 00 00 00 00
00 00 00 00 01 02 03 04 05 06 07 08 09 0a 0b ff c4 00 b5 10 00 02 01 03
03 02 04 03 05 05 04 04 00 00 01 7d 01 02 03 00 04 11 05 12 21 31 41 06
13 51 61 07 22 71 14 32 81 91 a1 08 23 42 b1 c1 15 52 d1 f0 24 33 62 72
82 09 0a 16 17 18 19 1a 25 26 27 28 29 2a 34 35 36 37 38 39 3a 43 44 45
46 47 48 49 4a 53 54 55 56 57 58 59 5a 63 64 65 66 67 68 69 6a 73 74 75
76 77 78 79 7a 83 84 85 86 87 88 89 8a 92 93 94 95 96 97 98 99 9a a2 a3
a4 a5 a6 a7 a8 a9 aa b2 b3 b4 b5 b6 b7 b8 b9 ba c2 c3 c4 c5 c6 c7 c8 c9
ca d2 d3 d4 d5 d6 d7 d8 d9 da e1 e2 e3 e4 e5 e6 e7 e8 e9 ea f1 f2 f3 f4
f5 f6 f7 f8 f9 fa ff da 00 08 01 01 00 00 3f 00 xx xx xx xx xx xx xx xx
xx xx xx xx xx xx xx xx xx xx xx xx ff d9
II.Nén ảnh theo chuẩn JPEG:
2.1. Biến đổi Cosin rời rạc:
Biến đổi cosin
Biến đổi một chiều cosin rời rạc (DCT-Discrete Cosin Transform) cho bởi
=
+
=
1
0
2
)12(
cos)(
2
)(
N
n
k
N
kn
nx
N
kX
(13.4)
ở đây
(13.46)
Vì vậy, tín hiệu ra từ các bớc cuối cùng của các thao tác bớm có thể tính d-
ới dạng các hệ số của FCT nh trong hình 13.7. Nếu chúng ta sắp xếp lại vị trí
của các giá trị bít dùng dịch chuyển bít, chúng ta rút ra tín hiệu ra nh hình
(13.8). Sau đó,các tín hiệu ra này có thể đợc dùng để rut ra FCT nh hình
(13.9). Bớc cuối cùng này gọi là bớc cộng truy hồi.
Có rất nhiều bớc (các thao tác bớm, dịch chuyển bít, và cộng truy hồi) bây
giờ có thể nằm trong một bớc trong hình 13.10. Từ sơ đồ này, chơng trình
FCT có thể phát triển. Chơng trình này dùng các thuật toán phát triển cho
FFT. Chơng trình dùng một bảng tra cứu để chứa các giá trị cosin, một bảng
cho dịch chuyển bit. Chi tiết của chơng trình này để lại cho ngời dùng nh một
bài tập.
Thuật toán cho 2-D FCT có thể phát triển dùng phơng pháp hàng-cột bình
thờng nh thuật toán 2-D FFT. Chơng trình 13.5 rút ra biến đổi FCT của các
khối ngời dùng tự xác định kích thớc, thông thờng là 8 ì 8 hoặc là 16 ì 16,
bằng các chia nhỏ các khối của ảnh.
!"#$ %&"#'()*"# %(+,
-'.$/-#0--12) -0$/2%-'3#4567 2-'8
-2-'*
Hình 13.10 Biểu đồ chuyển đổi cosin nhanh.
Biến đổi ngợc DCT đợc cho bỏi
=
+
=
1
0
2
)12(
cos)()(
N
k
k
N
nk
kXnx
(13.48)
ở đây
=
1-N , 1,2,=k cho 1
0=k cho
2
1
k
Thay vì lập lại cả một chơng trình để tính biến đổi ngợc FCT, chúng ta sẽ
dùng lu đồ của FCT tiến (forward). Để rút ra FCT ngợc, tất cả các việc mà
chúng ta cần làm là đảo ngợc biểu đồ ở hình 13.10. Hình 13.11 giới thiệu
phép biến đổi ngợc của một bớm. Kết quả của thuật toán biến đổi ngợc của l-
u đồ FCT cho trong hình 13.12. Từ lu đồ của hình 13.11 biến đổi ngợc của
FCT có thể phát triển bình thờng từ FCT tiến. Chơng trình tính 2-D FCT ngợc
cho trong chơng trình 13.6. Giá trị của khối ảnh gốc phải đợc cho trớc bởi ng-
ời dùng.
9
16
2C
2
1
2
1
2
1
:#;<%-
47
47
47
4=7
47
47
497
4>7
8
2C
5
8
2C
5
8
2C
5
16
2C
9
16
2C
13
16
2C
9
?@
?47
?9@A47
?9A47
Hình 13.11 Phép đổi ngợc của một bớm.
Hình 13.12 Biểu đồ đảo ngợc giải thuật FCT.
Tiếp theo tôi sẽ giới thiệu một chơng trình mà sẽ hiển thị các khối 8 ì 8 của
kết quả đã chuyển đổi trên màn hình văn bản. Chú ý rằng giá trị sẽ giảm
xuống một cách nhanh chóng kể từ góc trái của màn hình, hay là điểm tần số
(0,0). Để thoát khỏi chơng trình này, bấm ESC.
Chơng trình 13.7 "DISPFCT.C". Chơng trình hiển thị khối 2-D FCT.
Một mẫu của 2-D FCT từ một khối rút ra từ ảnh IKRAM.IMG giới thiệu
trong hình 13.13. Các thành phần một chiều (các khối có tần số 0,0) có giá trị
lớn nhất. Thành phần này biểu diễn giá trị trung bình của khối. Các thành
phần khác (đợc hiểu là các thành phần xoay chiều) phải có các giá trị nhỏ
hơn.
2.2. Sắp xếp Zigzag:
5.2
2.3.L ợng tử hoá
6.1
6.1
>
A
13
16
1
C
9
16
1
C
9
5
16
1
C
16
1
C
8
4
1
C
5
8
4
1
C
8
4
1
C
8
4
1
C
4
2
1
C
4
2
1
C
4
2
1
C
4
2
1
C
9
9
9
9
9
9
9
9
9
9
9
@
@
@
@
@
:#;<%-
4
7
4
7
4
7
4
7
4
7
4>
7
4=
7
(0)x
~
(1)x
~
(2)x
~
(3)x
~
(4)x
~
(6)x
~
(7)x
~
49
7
(5)x
~
Lợng tử hoá
Trong toàn bộ cuốn sách này chúng ta làm việc với các ảnh đã lợng tử
hoá. Chúng ta coi rằng các ảnh đợc chia làm các mức xám dùng 8 bit với các
giá trị từ 0 đến 255. Tuy vậy, chúng ta không bao giờ để ý đến các giá trị này.
Lý do là các giá trị này bản thân nó không có ý nghĩa gì cả. Cái mà chúng ta
thật sự quan tâm là biểu diễn dới dạng nhị phân của giá trị cờng độ sáng tín
hiệu lấy mẫu. Tất cả các bít biểu diễn khoảng của tín hiệu chói. Nếu tín hiệu
chói có giá trị trong khoảng từ giá trị nhỏ nhất y
L
cho đến giá trị lớn nhất y
u
, thì
hàm lợng tử hoá sẽ chia tín hiệu ra thành N miền và gán cho mỗi miền một
giá trị nhị phân nh trong hình 13.14. Sự biểu diễn này không có ý nghĩa gì về
mặt vật lý, và chức năng của sự biểu diễn này, nh chúng ta muốn, chỉ dùng
trong lĩnh vực xử lý tín hiệu số. Tất cả các tín hiệu số này gọi là điều mã
xung (Pulse Code Modulated - PCM). Để có thể thực sự thấy giá trị các mức
xám chúng ta cần lợng tử hoá ngợc. Trong bớc này, các giá trị nhị phân biểu
diễn một độ chói cụ thể. Các bớc thực sự của quá trình này biểu diễn trong
hình 13.15. Trong lĩnh vực tơng tự và lĩnh vực số quá trình này gọi là chuyển
đổi từ tơng tự sang số (A/D) và chuyển đổi từ số sang tơng tự (D/A).
Trong các ứng dụng nh trờng hợp biến đổi cosin 2-D thì có một chút khác
biệt. Cái mà chúng ta cần làm trong trờng hợp này là biến đổi từ một tập hợp
các dấu phẩy động sang một tập hợp các bít nhị phân và ngợc lại. Biểu vì
biến đổi ngợc của lợng tử hoá là biến đổi từ nhiều vào một, nên quá trình này
không thể tiến hành một cách thông thờng đợc. May mắn thay, có một số ph-
ơng pháp để lợng tử hoá và lợng tử hoá ngợc. Chúng ta sẽ nghiên cứu các
phơng pháp này ở phần dới đây.
=
$
B
$
B
$
9
$
$
$
$
$
B
B
C
6
C
5
D1-EF#
8-0GGH
8:GH
$
I?JJK 2L3
Hình 13.14 Lợng tử hoá.
Lợng tử hoá đồng đều
Đây là dạng đơn giản nhất của lợng tử hoá. Trong dạng lợng tử hoá này,
khoảng (y
u
- y
L
) đợc chia thành N khoảng cách đều nhau (xem trong hình
13.14). Các giá trị từ d
0
đến d
N
đợc gọi là các mức chia. Các mức lợng tử biểu
diễn giá trị thực của các mức chia trong khoảng từ d
i
đến d
i+1
dới dạng số nhị
phân bằng i.
Vì vậy, nếu nh d
i+1
< y
d
i
thì giá trị của lợng tử đầu ra = i.
Mức lợng tử đầu ra có thể biểu diễn theo công thức:
= )1(N
yy
yy
i
Lv
L
ở đây dấu
có nghĩa là làm tròn thành số nguyên gần nhất.
Lợng tử hoá ngợc dùng một bảng biến đổi ngợc giữa giá trị lợng tử i và
biến đổi ngợc của nó r
i
2
1+
+
=
ii
i
dd
r
Tuy nhiên lợng tử hoá đồng đều không quan tâm đến khả năng xảy ra của
sự kiện với các giá trị đợc đa ra. Tổng quát, quá trình lợng tử hoá này áp
dụng cho trờng hợp tất cả các mức có khả năng xuất hiện bằng nhau. Điều
này, trong hầu hết các trờng hợp là không đúng. Dễ nhận thấy là các mức l-
ợng tử hoá tập trung nhiều nhất vào miền mà khả năng xuất hiện của các
mức xám nhiều nhất. Điều này dẫn chúng ta đến phơng pháp thiết kế lợng tử
hoá dới đây.
Hình 13.15 Lợng tử hoá ngợc.
Lợng tử hoá không đồng đều
Trong phần này chúng ta sẽ xem xét phơng pháp lợng tử hoá không đồng
đều tối u nhất trong hệ thống PCM. Các nghiên cứu cho phơng pháp này đã
đợc Panter và Dite đa ra trong một cuốn sách xuất bản vào năm 1949. Trong
cuốn sách này họ đã đa giải thuật cho lợng tử hoá không đồng đều. Họ đa ra
một phơng pháp xấp xỉ tối u cho lợng tử hoá không đồng đều. Giải thuật này
sẽ không đúng cho các trờng hợp quá trình lợng tử hoá có quá ít mức chia.
Tuy nhiên các giải thuật này đợc phát triển một các trọn vẹn trong một báo
cáo cha đợc xuất bản của Lloyd vào năm 1957 và đợc Max kiểm nghiệm vào
năm 1960. Một phơng pháp lợng tử hoá kết hợp cả hai phơng pháp của Lloyd
và Max thờng đợc gọi là phơng pháp lợng tử hoá Lloyd-Max. Trong phần báo
cáo xuất bản sau đó của Lloyd xuất bản vào năm 1982 đã cho thấy có rất
nhiều ứng dụng rất thú vị của phơng pháp này. Bản báo cáo này có hai ph-
ơng pháp thiết kế, một phơng pháp trong đó giống phơng pháp của Max. Ph-
ơng pháp này gọi là phơng pháp II. Phơng pháp I tỏ ra có nhiều ứng dụng và
dễ tính toán hơn phơng pháp II. Cả hai phơng pháp thiết kế này đều đợc trình
bày ở phần dới đây.
Nếu chúng ta coi rằng các mức lợng tử hoá đợc cho bởi
d
i
, i = 0 N
(xem hình 13.16) và các mức khôi phục cho bởi
r
i
, i = 0 N
và giá trị đo của tất cả các mức này cho bởi:
=
+
=
N
k
d
d
k
k
k
dyypryE
0
2
1
)()(
(13.49)
ở đây y là tín hiệu đầu vào còn p(y) là khả năng xuất hiện của y.
E F#
22
E F#
-M,-N
-
-
5M
-12
M
;
%OP
Q
-M,
-N
(R
-S
-TG
EF#
$8:
GH
U3M
-2
-O-
Hình 13.16 Các mức lấy mẫu và khôi phục.
Hình 13.17 Các xử lý lấy mẫu và khôi phục.
Hình 13.17 cung cấp sơ đồ khối của quá trình lợng tử hoá và lợng tử hoá
ngợc. Tín hiệu vào y(t) phải đợc coi là đã biết khả năng xuất hiện. Vấn đề đặt
ra là phải xác định các mức lấy mẫu và các mức khôi phục sao cho méo tín
hiệu là nhỏ nhất.
Viết lại biểu thức (13.49 ):
+++=
i
i
d
d
i
d
d
dyyprydyypryE
1
1
0
)()( )()(
2
1
2
0
++
++
11
)()( )()(
22
n
N
i
i
d
d
N
d
d
i
dyyprydyypry
(13.50)
$
B
$
B
$
9
$
$
$
$
$
2L3
;
5
;
#
;
LV#
5M-12 5M-12
M
;4-7
'
B
UV#
'
'
B'
B
561M
-12M
Vi phân (13.50) theo d
I
và cho biểu thức này bằng không chúng ta đợc
d
r r
i
i i
=
+
1
2
(13.51)
i = 1,2,3, ,N
Lấy vi phân (13.50) theo r
i
chúng ta đợc.
+
=
1
)()(2
i
i
d
d
i
i
dyypry
r
E
+
+
=
1
1
)(
)(
i
i
i
i
d
d
d
d
i
dyyp
dyyyp
r
(13.52)
i = 0, 1, , N - 1.
Hình 13.18 Phơng pháp Newton-Raphson cho tính các biểu thức trong
ngoặc.
Biểu thức (13.50) và biểu thức (13.51) đa ra phơng pháp xác định các
mức lấy mẫu và các mức khôi phục dùng cho cả phơng pháp của Lloyd-Max
hoặc là phơng pháp Lloyd.
Phơng pháp Lloyd-Max Lloyd và Max đã phát triển độc lập thuật toán để
giải quyết biểu thức (13.50) và (13.51). Các chi tiết của thuật toán này vẫn
cha đợc cung cấp. Trong phần này tôi sẽ cung cấp cho bạn một thuật toán
dựa trên thuật toán Lloyd-Max nhng có các chi tiết cụ thể hơn. Tôi cũng sẽ
cung cấp cho bạn phần mềm thiết kế N mức lấy mẫu và khôi phục.
Thuật toán này gồm các bớc sau:
1. Chọn một giá trị cho r
0
. d
0
và d
N
đợc coi là đã biết.
2. Cho i = 1,2, ,N - 1.
a. Tính d
i
từ
=
i
i
i
ii
d
d
d
d
i
dyyp
dyyyp
r
1
1
)(
)(
1
b. Tính r
i
từ
r d r
i i i
=
2
1
3. Tính
=
N
N
N
N
d
d
d
d
dyyp
dyyyp
r
1
1
)(
)(
/
4. Nếu r
N-1
r
/
, thay đổi lại r
0
và lặp lại các bớc từ bớc 2 cho đến bớc 4.
Bây giờ tôi sẽ cung cấp cho bạn các chi tiết cần thiết để tạo ra thuật toán
trên.
Chi tiết cho việc tính d
i
trong bớc 2a của thuật toán Lloyd-Max. d
i
có thể
tính theo hàm sau đây:
=
i
i
i
i
d
d
d
d
ii
dyyp
dyyyp
rdf
1
1
)(
)(
)(
1
(13.53)
Có thể rút ra biểu thức gốc theo công thức lặp Newton-Raphon đợc cho
bởi:
)(
)(
/
1
l
i
l
i
l
i
l
i
df
df
dd =
+
(13.54)
ở đây l là số lần lặp và f
/
(d
i
) là đạo hàm của f(d
i
) theo d
i
cho theo công
thức:
=
i
i
i
i
i
i
d
d
d
d
i
d
d
i
i
dyyp
dyyyp
d
dyyp
dp
df
1
1
1
)(
)(
)(
)(
)(
/
(13.50)
d
0
i
là giá trị ban đầu. Phép lặp diễn ra cho đến khi
f d
i
( ) <
Giá trị ban đầu cho d
1
là d
0
+ , cho d
2
là d
1
+ , , ở đây là một giá trị
nhỏ. Giá trị gốc của f(d
i
) có thể tính theo dùng phơng pháp nửa lặp
(bisection). Ưu điểm của phơng pháp Newton-Raphson là khả năng hội tụ
nhanh. Nhợc điểm là đạo hàm của một hàm thờng có giá trị rất nhỏ và dễ dẫn
đến giá trị zero gây nên sự không ổn định của các số.
Các chi tiết cho việc thay đổi r
0
. Giá trị r
0
có thể thay đổi lại nếu chúng ta
nhận thấy rằng giá trị gốc của hàm:
g r r r
N
( )
/
0 1
=
(13.56)
Giá trị gốc này có thể rút ra dùng các giả thiết của Newton-Raphson theo:
r r
g r
g r
l l
l
l0
1
0
0
0
+
=
( )
( )
/
(13.57)
Đạo hàm của g(r
0
) có thể rất khó khăn cho việc phân tích. Trong trờng hợp
này cần có một công cụ tính toán khác. Chúng ta có thể thay thế đạo hàm
bằng một giá trị hằng số có cùng dấu nh biểu thức trong dấu ngoặc (xem
hình 13.8). Trong trờng hợp này thì tích phân lâu hội tụ hơn.
Tiếp theo là một chơng trình cho tính các mức lợng tử hoá theo phơng
pháp Lloyd-Max. Tích phân đợc đa ra dùng phơng pháp tích phân Romberg
bởi vì nó chính xác hơn phơng pháp tích phân Simpson. Chơng trình cho phép
bạn thiết kế lợng tử hoá đồng đều, Gauss hoặc là Laplace.
Gauss
)2/(
2
22
2
1
)(
y
eyp
=
Laplace
p y e
y
( ) =
2
=
2
Đồng dạng:
=
0
1|<=y| 1
)(
lại còn hợp trờng các
yp
Chơng trình này có thể thay kiểm tra trên cả ba loại phân bố (với = 1) với
6 bit cụ thể là 64 mức lợng tử hoá. Bạn cần chú ý khi bạn chạy chơng trình
này bạn cần cho số của lựa chọn. Lựa chọn đầu tiên là số bit bạn muốn xây
dựng cho mức lợng tử, lựa chọn thứ hai là lựa chọn về các mức phân bố
(phân bố Gauss, phân bố đồng đều, hoặc phân bố Laplace), và thứ ba cũng
là lựa chọn cuối cùng là lựa chon trong khi tính biểu thức trong ngoặc của
g(r
0
). Lựa chọn của g(r
0
) có thể là lựa chọn cho một số, một giá trị hoặc là một
giá trị tăng dần. Lý do của sự lựa chọn này là kết quả của phơng pháp tính
toán có thể là một số không thể tính đợc, ví dụ khi ta chia cho một số quá
nhỏ. Qua kinh nghiệm tôi nhận thấy rằng phân bố Gauss và phân bố đồng
đều thờng cho kết quả tính toán rất tốt. Còn cho phân bố Laplace, khi dùng
tăng giá trị của biểu thức trong ngoặc sẽ không gặp một khó khăn nào việc
tạo mã 6 bit.
Chơng trình 13.9 MAXQ1.C Chơng trình cho tính các mức lợng tử
Lloyd-Max.
Phơng pháp Lloyd Lloyd cũng đa ra một phơng pháp thứ hai cho phép
xác định các mức lợng tử mà ông gọi là phơng pháp Lloyd I. Phơng pháp này
có nhiều u điểm hơn phơng pháp II (giải thuật Lloyd-Max), vì nó dễ dàng cho
tính toán và các vector lợng tử hoá có thể mở rộng. Chú ý là vấn đề mà
chúng ta quan tâm ở đây là khoảng cách lợng tử hoá, lợng tử hoá của hàm
một biến đã biết đợc phân tán. Vector lợng tử hoá là một vector của nhiều
biến mà với các biến này ta đã biết đợc phân tán.
Thuật toán Lloyd theo các bớc sau:
1. Rút ra ớc lợng cho phạm vi của các biến
d
i
{i = 0, 1, 2, , N}
(Một ớc lợng có thể rút ra bằng cách dùng các giá trị từ lợng tử hoá đồng
đều hoặc từ các mức lợng tử trớc mà ta cần một kết quả tốt hơn).
2. Đặt một biến D
1
= 0. D
1
dùng để lu lại tình trạng không chính xác lúc tr-
ớc.
3. Tính
+
+
=
1
1
)(
)(
i
i
i
i
d
d
d
d
i
dyyp
dyyyp
r
i = 0, 1, , N - 1.
4. Tính
d
r r
i
i i
=
+
1
2
i = 0, 1, , N - 1
5. Tính tình trạng không chính xác
=
+
=
1
0
2
2
1
)()(
N
k
d
d
k
k
k
dyypryD
Có thể dễ dàng mở rộng biểu thức trạng thái không chính xác theo
=
+=
+++
1
0
22
111
)()(2)(
N
k
d
d
d
d
k
d
d
k
k
k
k
k
k
k
dyyprdyyyprypyD
(13.58)
6. Nếu
D D
D
2 1
1
thì một giải pháp đã đợc tìm ra. Lu lại kết quả và thoát khỏi chơng trình.
7. Đặt D
1
= D
2
8. Quay lại bớc 3.
Một chơng trình C cho giải thuật trên đợc đề cập đến ở dới đây.
Từ biểu thức (13.52) và (13.58) chúng ta có thể phát triển một chơng trình
cho tình trạng méo tối thiểu:
=
=
++
1
0
22
min
11
)()(
N
k
d
d
d
d
k
k
k
k
k
dyyprdyypyD
(13.59)
Lợng tử hoá các hệ số của FCT
Trong phần 13.4 chúng ta đã bắt đầu vấn đề của biến đổi cho mã hoá. Ph-
ơng pháp chúng ta áp dụng là chia ảnh thành các khối hình vuông; mỗi khối
có kích thớc 8 ì 8 và 16 ì 16. Biến đổi cosin nhanh cho mỗi khối này đã đợc
rút ra. Chúng ta nhận thấy rằng hầu hết các hệ số này có biên độ rất nhỏ so
với các giá trị xung quanh khối (một chiều) DC. Câu hỏi đặt ra lúc này là các
hệ số nào chúng ta cần lu giữ và bằng phơng pháp nào chúng ta có thể lu giữ
tốt nhất các giá trị này? Câu trả lời cho vấn đề này có thể tìm thấy trong phần
lợng tử hoá mà chúng ta đã nghiên cứu ở trên.
Chú ý là các hệ số của FCT xác định một dạng biến dạng. Cho ví dụ, một
ảnh có 256 ì 256 điểm và kích thớc của các khối là 8 ì 8 điểm, có tất cả 64
hệ số cho mỗi khối và 32 ì 32 khối. Mỗi hệ số có 1024 giá trị khi chúng ta
xem xét tất cả các khối, và tạo nên một biến dạng riêng. Đánh giá biến dạng
cho hệ số thứ j có thể cho bởi
=
+
=
1
0
,
1
)()(
J
j
k
j
k
N
k
d
d
jjkj
dyypryD
(13.60)
j = 0, 1, 2, , L - 1.
ở đây L là số các hệ số cho một khối và N
j
số các mức lợng tử cho hệ số j.
Tổng số các biến dạng sẽ là
=
=
1
0
L
j
j
DD
(13.61)
Làm theo các bớc trong phần 13.5 chúng ta đợc
9
dyyp
dyyyp
r
j
d
d
d
d
j
jk
jk
kj
j
k
j
k
)(
)(
,1
1
,
+
+
=
(13.62)
và
2
,1,
,
jkjk
jk
rr
d
+
+
=
(13.63)
Nếu chúng ta coi rằng bất kỳ hệ số nào có thể xác định bằng cùng một
hàm khả năng xuất hiện độ sáng, thì thay thế giá trị các hệ số này (mà đợc
biểu diễn trong biểu thức trên là y) bằng
y
j
j
à
(13.64)
Chúng ta sẽ cho tất cả các hệ số với các phân bố xuất hiện giống nhau,
với giá trị trung bình và chuẩn của độ lệch cho bởi à = 0 và = 1. Kết quả
sau khi tính toán cho ta các mức chia và các mức khôi phục cho tất cả hệ số
chia . Điều này tất nhiên chỉ áp dụng với điều kiện là các hệ số có cùng một
số các bit. Trớc khi đa ra các mức lợng tử chúng ta có thể bỏ bớt một số hệ
số. Nếu hệ số (0, 0) hay còn gọi là thành phần một chiều DC biểu diễn cho
giá trị trung bình của độ sáng của một khối, chúng ta không thể bỏ điểm này
đi đợc. Các hệ số khác trong một khối (còn gọi là các hệ số xoay chiều AC)
mang các thông tin về các chi tiết của ảnh. Có thể nhận thấy là các chi tiết có
độ lệch lớn hơn độ lệch chuẩn thì mang nhiều tin tức hơn các chi tiết có độ
lệch ít hơn độ lệch chuẩn. Vì vậy mà chúng ta bắt đầu lợc bỏ các hệ số bắt
đầu từ vùng có trải rộng ít nhất. Vậy bao nhiêu hệ số sẽ đợc chúng ta giữ lại?
Điều này phụ thuộc vào mức độ mà chúng ta muốn nén ảnh và phụ thuộc
vào bao nhiêu các chi tiết bị mất trên ảnh mà chúng ta có thể chấp nhận đợc.
Dựa trên các giả thiết trên chúng ta có thể phát triển một thuật toán cho
nén ảnh và lợng tử hoá. Các bớc sau mô tả cho cả việc lợng tử hoá các hệ số
FCT.
1. Tính à và cho tất cả các hệ số FCT. (Chú ý là độ lệch chuẩn và trung
bình có thể tính trong một dải thông của ảnh dùng biểu thức sau cho :
( )
)1(
2
2
2
=
nn
xxn
ii
ở đây x
i
biểu diễn các giá trị cho một trong các hệ số). à đợc tính từ tổng
của x
i
.
2. áp dụng các hệ số cho các chi tiết đợc giữ lại cụ thể là 0.25 , 0.5.
3. Giữ lại các hệ số đã nhân thêm phân số chia có sai lệch cao hơn sai
lệch chuẩn.
>
4. Định dạng một ma trận T có dạng
=
lại còn hợp trờng các 0
mất không j)(i, số hệ nếu1
ij
T
5. Chia khoảng cách các hệ số c
ij
(cụ thể một cho các giá trị mà T
ij
= 1)
trong tất cả các khối, ngoại trừ các giá trị một chiều cho mỗi khối, nh sau:
ij
ijij
c
à
(13.65)
6. Tính phân bố của các giá trị AC chia cho mảng FCT.
7. Tính
s
của phân bố rút ra từ các bớc trớc.
8. Dùng lợng tử hoá Lloyd-Max mức N, và sửa lại các mức chia và khôi
phục các mức theo:
d d
i i s
ì
(13.66)
i = 0, 1, 2, , N - 1.
chú ý d
N
= -d
0
Hàm phân bố Laplace cung cấp một xấp xỉ tốt hơn cho phân bố của các
hệ số chia nh chúng ta thấy ở phần dới đây. Sự lựa chọn của N cũng nh
các hệ số chia của các hệ số phụ thuộc mức độ nén.
9. Lợng tử các hệ số AC chia dùng l ợng tử hoá của bớc 8.
10. Chia mỗi giá trị một chiều với 2. Điều này đảm bảo rằng các giá trị một
chiều không vợt quá 255 (một biểu diễn 8 bit).
11. Định dạng một phần đầu file chứa đầy đủ thông tin để khôi phục lại
ảnh bị nén. Phần này chứa thông tin về các mức chia và các mức một
chiều bị cắt bớt và tập hợp các giá trị AC cho các hệ số giữ lại.
12. áp dụng mà mã hoá Huffman cho file chứa các giá trị AC.
Ma trận T thờng gọi là ma trận khu vực, và cần cung cấp các hệ số cho
chức năng khôi phục. Phần đầu file dùng bốn thông tin theo thứ tự sau.
Chiều rộng của khối (ta coi khối là một hình vuông): 1byte.
Số các mức lợng tử: 1 byte.
Chiều rộng của ảnh: 2 byte.
Ma trận T: 1 bit cho một phần tử.
=
Độ lệch chuẩn, trung bình: 4 byte trong biểu diễn số thực ì số các hệ số.
Các mức khôi phục: 4 byte trong biểu diễn số thực/ mức.
Chơng trình 13.11 đa ra lợng tử của các hệ số biến đổi cosin dùng các bớc
trên. Kết quả của chơng trình là 3 file có cùng tên do ngời dùng xác định, nh-
ng có phần mở rộng khác nhau. Nếu ngời dùng cho tên image1q khi trả lời
cho thông báo Enter file name to store quantized image xuất hiện khi
chạy chơng trình, ba file sau đây đợc tạo ra:
1. image1q.hdr , là file chứa thông tin về header.
2. image1q.dc là file chứa thông tin về các hệ số một chiều bị cắt bớt
của một loạt các khối.
3. image1q.ac file chứa một loạt các l ợng tử cho các hệ số AC của một
loạt các khối. Phần này không chứa thông tin về các giá trị bị loại bỏ,
nếu chúng ta coi rằng nó có giá trị 0 và ma trận vùng chỉ ra vị trí của nó
trong khối.
Chơng trình nhập các tên sau đây do ngời dùng đặt:
1. Tên file chứa biến đổi cosin của một ảnh bị nén, và kích thớc của khối
dùng trong FCT.
2. Tên file chứa dữ liệu lợng tử Lloyd-Max. Nếu bạn chạy MAXQ1.EXE
(xem bài tập 13.8), và cho tên file chứa các mức lợng tử mà bạn muốn
dùng. Lợng tử 5 bit Laplace cho kết quả tuyệt vời. Lợng tử 4 bit Laplace
cho bạn một kết quả có thể chấp nhận đợc, nh là một kinh nghiệm cho
bạn.
3. Phần trăm của các hệ số AC đợc giữ lại. Bạn có thể lựa chọn bất kỳ giá
trị nào: thông thờng là 0.25 hoặc là 0.5. Các phân số nhỏ hơn hay mức
thấp hơn các mức lợng tử gây nên một sai số cao hơn khi khôi phục lại
ảnh.
4. Tên file chứa các lợng tử hoá của ảnh. Để trả lời, bạn cho tên file không
có phần mở rộng nh đã nói trớc đây.
Chơng trình 13.11 QUANTIZE.C Chơng trình cho lợng tử hoá và nén
kết quả của biến đổi FCT.
Trớc khi bạn dùng chơng trình 13.11 bạn cần thiết kế lợng tử hoá Lloyd-
Max nh các bớc trong bài tập 13.8. Bạn cũng sẽ cần chạy FCT2D.EXE trên
ảnh đã bị nén.
Bài tập 13.11
Bạn sẽ tìm thấy trên đĩa đi kèm theo cuốn sách này ảnh KAREN.IMG .
Đa ra các bớc sau:
Chạy 2-D FCT trên ảnh KAREN.IMG dùng một khối 8 ì 8. File FCT
này có tên là KARENFCT.IMG .
2. Chạy chơng trình QUANTIZE.EXE trên KARENFCT.IMG dùng các
bớc sau:
a. Tỷ lệ các hệ số giữ lại là 0.25.
b. Lợng tử hoá 32 mức (5 bit). Chứa ảnh đã lợng tử hoá và nén trong
KarenQ .
3. Chạy chơng trình mã hoá Huffman trên KarenQ.AC .
Bài tập 13.11 cho kết quả sau đây:
Kích thớc ảnh gốc: 65536 byte.
Kích thớc file chứa các điểm AC: 15360 byte.
Kích thớc file chứa các điểm DC: 1024 byte.
Kích thớc của header: 652 byte.
Kích thớc của file mã hoá Huffman: 8973 byte.
Tỷ lệ nén thờng đợc tính theo bit trên điểm ảnh (bpp). Giá trị này có thể
tính từ các biểu thức trên theo:
8
65536
65210248973
ì
++
=bpp
1.3
Giá trị này chứng tỏ rằng 83.75 phần trăm kích thớc của ảnh gốc đã đợc
nén lại. Bạn có thể giảm kích thớc của file chứa các điểm DC một chút dùng
RLC. Nếu bạn làm nh vậy kích thớc của file này sẽ là 1017 bit. Mã RLC có
thể cho kết quả tốt trên ảnh có kích thớc lớn.
Nếu bạn dùng lợng tử hoá 4 bit thì tỷ lệ nén là 1.1 bpp.
Nếu bạn trả lời y để tính dữ liệu l ợc đồ mức xám cho các khối AC (chỉ
các dứ liệu còn giữ lại), bạn sẽ có đợc file dữ liệu dùng để in ra. Kết quả dữ
liệu lợc đồ mức xám của ảnh KARENFCT.IMG cho trong hình 13.19. L ợc
đồ mức xám này biểu diễn phân bố Laplace nh tôi đã đề cập ở phần đầu
cuốn sách này.
Để nghiên cứu ảnh lợng tử hoá bạn cần hiện tất cả các khối một lúc. Ch-
ơng trình sau thực hiện chính xác điều đó. Chơng trình này sẽ in các dữ liệu
không giữ lại là các điểm zero.
Chơng trình 13.12 QUANCHK.C Chơng trình hiện thị các khối lợng
tử hoá.
/*Program 13.12 "QUANCHK.C". Program to display quantized blocks.*/
/* This program displays the quantized file block by block.
Values that were not retained by the quantizer
program are typed out as zeros. */
Hình 13.19 Lợc đồ mức xám của các hệ số AC đã đợc chia.
Thuật toán khôi phục lợng tử hoá đợc mô tả bởi chơng trình C sau đây.
Chú ý là biểu thức khôi phục đợc mô tả bằng
ijijijij
crc
à
+= )
~
(
(13.67)
ở đây
ij
c
~
là các hệ số lợng tử.
Chơng trình 13.13 "DEQUANTZ.C" Chơng trình đảo ngợc lợng tử hoá
của tệp đ đã ợc lợng tử hoá trớc.
/*Program 13.13 "DEQUANTZ.C". Program to dequantize a
previously quantized file.*/
/* This program restores a file quantized
by program 'QUANTIZE.EXE' . The output file
can be used as input to IFCT2D.EXE to obtain
the original image.*/
Một phơng pháp nén ảnh khác bằng mã hoá ảnh là phơng pháp định vị bit.
Với phơng pháp này bạn không cần mã hoá Huffman. Phơng pháp này dựa
trên sự định vị số khác nhau của các bit cho hệ số dựa trên giá trị đóng góp
của các hệ số này khi khôi phục lại ảnh từ các giá trị FCT của nó. Cũng nh
các chú ý từ phần trên, các hệ số với sai lệch cao hơn sai lệch chuẩn thì sẽ
mang nhiều tin tức hơn các hệ số có sai lệch ít hơn sai lệch chuẩn. Vì vậy số
bit cho các hệ số phụ thuộc vào sai lệch chuẩn của nó. Nếu bpp đợc cho,
tổng số các bit xác định cho khối đợc cho bởi
B = bpp ì NB ì NB (13.68)
ở đây NB
ì
NB là kích thớc của khối ảnh; và bit quy đổi đợc cho là
=
2
2
log
2
1
,0.0max)(
ij
ij
b
(13.69)
ở đây b
ij
là số các bit quy đổi cho hệ số (i,j) và là một biến đợc thay đổi cho
đến khi biểu thức sau thoả mãn:
= =
=
NB
i
NB
j
ij
Bb
0 0
(13.70)
Hình 13.20 Trình bày các bớc thực hiện mã hoá nén ảnh và giải nén ảnh.
Một thuật toán dựa trên giả thiết một nửa quãng cho thiết kế một ma trận
xác định bit, mà ma trận này chứa phân bố bit cho các hệ số bộ lọc trong các
khối đợc trình bày nh sau:
1. Xác định bpp.
Tính B = bpp ì NB
ì
NB.
Bắt đầu với các giá trị vị trí nhỏ cho . Chúng ta dùng 0.01.
4. Tính phân bố bit dựa trên biểu thức (13.69).
5. Tính Bs = tổng của các phân bố bit đợc rút ra.
6. Tính Error = Bs - B.
= Nếu Error > 0.0 thì xn = , nếu không xp = .
ảW
ảW
ả
5M
-12
UX12
Y#ZZL1
FQ
[5+F
Q
\LX
Y#ZZLFQ
\LX[5
+FQ
5M -
12 M
]1
ảW
Tăng bằng một giá trị cố định, và lặp lại các bơc từ bớc 4 đến bớc 6, cho
đến khi Error đạt đến giá trị thích hợp.
9. Bắt đầu giả thiết một nửa quãng theo:
Tính một nửa quãng cụ thể = (xp + xn)/2.
b. Lặp lại các bớc từ bớc 3 đến bớc 4 để tính Erro.
Nếu |Error| < lu lại ma trận phân bố bit và thoát.
$ Nếu Error > 0.0 thì xp = ;
Ngợc lại xn = .
e. Quay lại bớc 9.a.
Chơng trình 13.14 tính ma trận phân bố bit dựa trên thuật toán trên. Chơng
trình này đòi hỏi FCT của ảnh nh là một giá trị đầu vào, và số các khối đợc
dùng. Hội tụ nhanh cho trong trờng hợp này, đợc coi nh là một bài tập để bạn
có kinh nghiệm.
Chơng trình 13.14. "BITALLOC.C". Phân bố bit.
/* Program for bit allocation.*/
}
Chạy chơng trình 13.14 trên KARENFCT.IMG, chúng ta rút ra ma trận
phân bố bit giới thiệu trong bảng 13.2 với bpp lần lợt bằng 1 và 0.5.
Nh bạn đã thấy, đây là chơng dài nhất trong cuốn sách này. Nguyên nhân
chủ đề này liên quan nhiều đến công nghiệp và các lĩnh vực nghiên cứu công
nghiệp. Tuy nhiên, tôi không nói đến tất cả các phơng pháp viết về lĩnh vực
này nh lợng tử hoá vector với hệ code-book, phơng pháp này có giá trị của
nó, và điều mã xung có phân biệt (DPCM). Những phơng pháp tôi đề cập đến
trong chơng này là những phơng pháp đợc sử dụng rộng rãi. Những độc giả
quan tâm đến những thông tin hơn nữa có thể tìm kiếm và tham khảo những
sách và báo đề cập đến chủ đề này. Có thể tham khảo trang có liên quan
đến lợng tử hoá vector ở phần 15. Chủ đề lợng tử hoá vector đợc nói đến
trong phần 14. DPCM đề cập đến ở phần 4 và 16.
Bảng 13.12 Phân bố bit cho karen.img. (a) 1 bpp; (b) 0.5 bpp.
6 4 3 2 2 1 1 0
4 3 2 2 1 1 0 0
3 3 2 2 1 1 0 0
2 2 2 1 1 0 0 0
2 2 1 1 0 0 0 0
1 1 1 1 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
(a)
5 3 2 1 1 0 0 0
3 2 2 1 0 0 0 0
2 2 1 1 0 0 0 0
2 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
(b)
Có nhiều chuẩn trong việc nén ảnh; đặc biệt là chuẩn đợc đợc JPEG (Joint
Photographic Experts Group) đề xuất đang bắt đầu áp dụng trong một số
ứng dụng. Trong chuẩn JPEG ảnh đợc nén nh sau:
1. Khối điểm kích thớc 8 ì 8 của DCT trên ảnh nguyên gốc đợc tính.
2. Hệ số chuyển đổi đợc tiêu chuẩn hoá bằng cách áp dụng một mảng do
ngời sử dụng định nghĩa nó đợc định trớc cho tất cả các khối.
3. Hệ số DC đợc mã hóa với lợc đồ DPCM.
4. Mỗi khối đợc sắp xếp lại sử dụng mã zigzag (xem hình 13.21). Điều này
là theo RLC và lợc đồ mã Huffman.
Để nén một ảnh màu, JPEG đề xuất rằng mỗi thành phần đợc mã hoá một
cách độc lập với nhau.
Trong chuẩn JPEG, ngời sử dụng cần phải cung cấp mảng tiêu chuẩn hoá.
Điều này là một phần khó khăn của bài toán còn để lại cho ngời sử dụng.
Hai mục trên nói về vi mạch đã đợc phát triển trong công nghệ phục vụ việc
nén/giải nén ảnh thời gian thực đợc đề cập trong phần tham khảo 18 và 19.
Chúng đợc dựa trên cơ sở những chuẩn đợc đề xuất bởi JPEG.
Hình 13.21 Mã Zigzag.
7.Kỹ thuật nén ảnh
M thống kêã
Những ảnh mà chúng ta thu nhận đợc mã hoá và lu giữ dới dạng "mã tự
nhiên". Một mức xám của giá trị đợc mã hoá bằng 8 bit nhị phân bằng nhau.
Ví dụ một mức xám giá trị 6 đợc mã hoá là 0000 0110. Một sự sắp xếp mã
hoá luân phiên nhau đợc dùng trong mã mức xám. Loại mã này có đặc tính là
bất kỳ hai từ mã liền nhau nào cũng chỉ khác nhau một vị trí. Bảng 13.1 trình
bày hai kiểu mã khác nhau cho một tín hiệu mẫu có giá trị vào khoảng từ 0
đến 7. Một kiểu cho ta thấy rằng tín hiệu không nhất thiết phải có giá trị thực
sự từ 0 đến 7, nhng phải có 8 mức riêng biệt.
Bảng 13.1 Các m khoảng cách bằng nhauã
Vào Mã tự nhiên Mã mức
xám
0
1
2
3
4
5
6
7
000
001
010
011
100
101
110
111
111
110
100
101
001
000
010
011
Những loại mã này thờng gọi là m khoảng cách bằng nhauã . Mã khoảng
cách bằng nhau không đợc dùng trong trong thống kê dữ liệu. Sự thừa nhận
này đợc tạo ra khi ta coi rằng tất cả các mức xám (hoặc giá trị tín hiệu chói)
có cùng số lần xuất hiện trong ảnh. Nếu điều này không đúng, dạng mã này
không phải tốt nhất. Nếu chúng ta phát triển một mã mà một số ít bít hơn đợc
kí hiệu cho các từ mã biểu diễn các mức xám có khả năng xuất hiện cao hơn,
thì trung bình độ dài từ mã sẽ nhỏ nhất và loại mã mà chúng ta vừa phát triển
là cơ bản cho mã phần thừa tối thiểu. Tất cả các loại mã này đợc biết với tên
m có độ dài thay đổiã hoặc đôi khi gọi là m entropyã . Câu hỏi đặt ra cho
chúng ta lúc này là :
Chiều dài từ mã trung bình tối thiểu mà có thể dùng giải mã để sửa lại
mã chính xác là gì?
Làm cách nào chúng ta tạo ra mã này?
Câu trả lời cho câu hỏi đầu tiên có thể tìm thấy trong lý thuyết thông tin.
Nếu ta cho rằng một mức xám g của xác suất p(g) đợc cho bằng từ mã dài
L(g) bit. Chiều dài từ mã trung bình, trong một ảnh mức xám 8 bit, đợc cho bởi
=
255
0
)()( gLgpL
bit/ pixel (13.1)
Một thừa nhận hợp lý nữa có thể suy ra là sự kiện có số lần xuất hiện ít, thì
sẽ cung cấp nhiều thông tin hơn sự kiện số lần xuất hiện nhiều hơn. Sự thừa
nhận này dẫn chúng ta đến mối quan hệ
)(log
1
)(
2
gp
gL =
(13.2)
Cơ số 2 dùng khi L(g) đợc cho dới dạng đơn vị nhị phân hoặc bit. Chiều dài
từ nhỏ nhất mà có thể đợc dùng cho bởi
=
=
255
0
2min
)(log)(
g
gpgpL
bít/pixel (13.3)
Biểu thức này gọi là entropy của tín hiệu. Entropy thì không bao giờ âm vì
p(g) nằm trong khoảng [0,1]. Đạo hàm của biểu thức entropy có thể tìm thấy
trong các sách nói về tin học hoặc thông tin. Chú ý rằng cho một ảnh 256
mức xám mà tất cả các mức có khả năng xuất hiện bằng nhau khi dùng biểu
thức (13.3) chúng ta có:
==
255
0
2min
8)
256
1
(log
256
1
L
bit/pixel
Điều này có nghĩa là một mã có độ dài bằng nhau có thể dùng trên một
ảnh mà có hàm phân bố cờng độ sáng đồng đều.
Câu trả lời cho câu hỏi thứ hai đề cập đến mã có phần thừa nhỏ nhất (mã
tối u) đợc Huffman tìm ra. Loại mã này gọi là mã Huffman và đợc áp dụng
rộng rãi trong các kỹ thuật mã hoá bằng phần cứng cũng nh bằng phần mềm
trong các ứng dụng thơng mại. Bây giờ chúng ta sẽ xem xét sơ đồ mã hoá
Huffman.
Thuật toán mã hoá Huffman tuân theo các giới hạn sau:
1. Không có hai thông báo nào có sự sắp xếp của từ mã giống nhau.
2. Từ mã của thông báo đợc mã hóa theo cách mà không cần một sự chỉ
dẫn nào thêm để chỉ ra đâu là nơi bắt đầu và đâu là nơi kết thúc của từ
mã.
Hạn chế thứ hai chỉ ra rằng không có thông báo nào đợc mã hoá theo
cách mà khi từ mã xuất hiện, bit nối bit, nh là một phần của từ mã lớn hơn. Ví
dụ, 01, 102, và 202 là các từ mã hợp lệ. Một dãy của các từ mã xuất hiện có
dạng 1111022020101111102 có thể tách ra thành 111-102-202-01-01-111-
102. Tất cả các vấn đề mà chúng ta cần quan tâm khi giải mã là bộ mã gốc.
Nếu nh một bộ mã bao gồm 11, 111, 102, 02 thì khi một thông báo bắt đầu
vói 11, ta sẽ không biết liệu đây là thông báo 11 hay đây là phần bắt đầu của
thông báo 111. Nếu một thông báo 11102 xuất hiện thì ta sẽ không biết liệu
đây là 111-02 hoặc là 11-102 đợc truyền đi.
Mã Huffman đợc mã hoá theo hai hạn chế trên đây và gọi là mã có độ d
thừa tối thiểu hay gọi là mã tối u. Phơng pháp mã hoá này theo hai bớc: bớc
thu gọn và bớc mở rộng. Để xem xét phơng pháp mã hoá này ta coi rằng các
thông báo để xây dựng từ mã đợc sắp xếp theo thứ tự xác suất xuất hiện
giảm dần.
p(0) p(1) p(2) p(N - 1)
9