TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
XỬ LÝ DỮ LIỆU ĐA PHƢƠNG TIỆN
Đề 4: Mã hóa nén ảnh JPEG-LS và ứng dụng
Giáo viên hướng dẫn:
PGS.TS. Nguyễn Thị Hoàng Lan
Sinh viên thực hiện:
Hoàng Đình Hiệp
20111584
Trần Trọng Dũng
20114630
Nguyễn Thanh Tùng
20112140
Đinh Hồng Đạt
2010
Hà Nội, 5/2016
MỤC LỤC
LỜI NÓI ĐẦU ...........................................................................................................1
I. Tìm hiểu chung về chuẩn nén JPEG-LS..............................................................2
1.1. Khái niệm ......................................................................................................2
1.2. Chuấn nén ảnh JPEG-LOSSLESS ................................................................2
1.2.1. Giới thiệu.................................................................................................2
1.2.2. Các đặc điểm của nén IPEG-LOSSLESS ...............................................2
1.3. Phạm vi ứng dụng của chuẩn nén JPEG-LS. ................................................3
II. Sơ đồ nén ảnh không tổn hao JPEG-LS. .............................................................4
2.1. Giải thuật dự đoán. ........................................................................................4
2.2. Thuật toán LOCO-I. ......................................................................................6
2.3. Thuật toán mã hóa Rice-Golomb. .................................................................7
2.4. Mã hóa loạt dài RLE. ....................................................................................9
2.4.1. Nguyên tắc. ...........................................................................................10
2.4.2. Thuật toán..............................................................................................11
III.
Xây dựng ứng dụng thử nghiệm thuật toán mã hóa ảnh JPEG-LS. ...............12
3.1. Môi trường xây dựng...................................................................................12
3.1.1. Ngôn ngữ lập trình Java ........................................................................12
3.1.2. Môi trường lập trình Eclipse .................................................................12
3.1.3. Kiểm thử................................................................................................13
3.2. Triển khai.....................................................................................................13
3.3. Kết quả.........................................................................................................13
KẾT LUẬN ..............................................................................................................15
Tài liệu tham khảo....................................................................................................16
LỜI NÓI ĐẦU
Trong thời đại hiện nay, khi internet phát triển. Nhu cầu trao đổi thông tin của con
người cực kì lớn. Để đáp ứng nhu cầu trao đổi thông tin, phù hợp với hạ tầng cơ sở
mà thỏa mãn nhu cầu người dung, đặc biệt là các ứng dụng giải trí, các chuẩn và
giao thức về nén và truyền thông tin đã ra đời.
Xuất phát từ thực tế đó, chúng em đã tìm hiểu đề tài “ Tìm hiểu về chuẩn JPEG
không tổn hao “ nhằm học hỏi về phương pháp nén dữ liệu ảnh trong xử lý dữ liệu
đa phương tiện.
Chúng em xin chân thành cảm ơn cô Nguyễn Thị Hoàng Lan đã giúp chúng em
hoàn thành đề tài. Do kiến thức còn hạn chế nên báo cáo còn thiếu sót, chúng em
xin nhận được ý kiến bổ sung để tiến bộ.
1
I.
Tìm hiểu chung về chuẩn nén JPEG-LS
1.1.
Khái niệm
Nén ảnh không tổn hao là phương pháp nén ảnh mà file sản phẩm sau khi nén
có thể được giải nén và phục hồi thành ảnh chính xác như ảnh gốc.
Nén ảnh không tổn hao đảm bảo sự chính xác nhất có thể so với ảnh gốc. Chính
vì đảm bảo yêu cầu đó mà phương pháp nén ảnh này không có tỉ số nén cao như
nén ảnh có tổn hao.
1.2.
Chuấn nén ảnh JPEG-LOSSLESS
1.2.1. Giới thiệu
JPEG-LS là một định dạng file ảnh và định dạng dữ liệu nén theo phương pháp
nén không tổn hao, được giới thiệu năm 1999 với mục đích tạo ra chuẩn nén có
độ phức tạp thấp mà hiệu quả cao.
Phương pháp nén ảnh không tổn hao được sử dụng để nén các ảnh quan trọng
cần thiết cho các quá trình phân tích và biến đổi sau này, vì vậy lượng mất mát
thông tin là rất nhỏ giúp cho ảnh có thể giữ được chất lượng tốt nhất. Hay nói
một cách khác, phương pháp này được dùng trong các trường hợp cần có độ
chính xác cao của ảnh.
1.2.2. Các đặc điểm của nén IPEG-LOSSLESS
- Không sử dụng lượng tử hóa.
2
Như chúng ta đã biết, quá trình lượng tử hóa là quá trình làm mất mát thông tin
của ảnh, trong khi yêu cầu của kỹ thuật nén JPEG LossLess là không gây ra mất
mát thông tin, vì thế ký thuật này không sử dụng lượng tử hóa.
- Sử dụng thuật toán dự đoán.
Kỹ thuật JPEG lossless sử dụng một chương trình dự đoán dự trên ba điểm ảnh
hàng xóm gần nhất (phía trên, phía bên trái và phía bên phải) và sử dụng mã
hóa entropy khi dự báo lỗi. Điển hình trong JPEG Lossless là JPEG-LS sử dụng
thuật toán LOCO-I.
1.3.
Phạm vi ứng dụng của chuẩn nén JPEG-LS.
Thuật toán sử dụng trong JPEG thể hiện sự ưu việt của nó trên các bức tranh,
ảnh chụp lại cảnh vật thực tế nhờ sự biến đổi khá mịn màng các mức độ khác
nhau của màu sắc. Khi sử dụng trên Web, hoặc những trường hợp cần quan tâm
đến dung lượng sử dụng, JPEG đặc biệt thể hiện tính ưu viêt.
Tuy nhiên trên thực tế JPEG không được sử dụng trong các trường hợp yêu cầu
sự tương phản rõ rệt giữa các pixel cạnh nhau. JPEG LS được bổ sung vào năm
1993 cho phép nén ảnh không tổn hao để khắc phục vấn đề trên nhưng cách này
hầu như không được hỗ trợ trên các thiết bị thực tế.
JPEG LS hiện nay không được sử dụng rộng rãi, chỉ được dùng phổ biến trong
hình ảnh y tế, âm bản kĩ thuật số (DNG – Digital Negative) và trong một số
máy ảnh kĩ thuật số để nén ảnh thô.
3
II.
Sơ đồ nén ảnh không tổn hao JPEG-LS.
Sơ đồ nén ảnh JPEG-LS:
Hình 2.1. Sơ đồ nén ảnh JPEG – LS
2.1.
Giải thuật dự đoán.
Để hiểu rõ hơn giải thuật dự đoán chúng ta sẽ tìm hiểu rõ hơn trong sơ đồ nén
ảnh JPEG-LS. Điểm ảnh đang cần xét là X(i,j); i,j = [0;N-1], X=X(i,j), A=X(i,j1), B=(i-1,j), C=(i-1,j-1), D=(i-1,j+1), mô phỏng như hình dưới.
4
Hình 2.2. Điểm ảnh cần xét X và các điểm ảnh lân cận.
- Bƣớc 1: đầu tiên ta xem khu vực điểm ảnh đang xét có phải là một khu vực
bằng phẳng hay không
Ta có:
g1=D-B; g2=B-C; g3=C-A
- Bƣớc 2: Nếu tất cả các gi đều bằng 0, ta giả định đây là một khu vực bằng
phẳng, chúng ta bỏ qua dự đoán và giá trị của X sẽ được gán bằng A và đi
vào “Run Mode”.
Như sơ đồ trên, trong Run Mode có 2 khối là khối Run Counter và Run
Coder. Trong đó:
Run Counter có nhiệm vụ kiểm tra giá trị X=A cho đến khi không thỏa
mãn điều kiện ban đầu là các gi =0 hoặc đã đi hết hàng.
Run Coder là bộ mã hóa có nhiệm vụ mã hóa những X vừa tìm được
bằng mã hóa loạt dài RLE sử dụng bảng mã Huffman.
- Bƣớc 3: Nếu tất cả các gi không đồng thời bằng 0, vùng ảnh đang xét là
một vùng không bằng phẳng, giá trị của X sẽ phải dự đoán.
Giá trị của X sẽ được dự đoán trong khối Fixed Predictor, ở đây giá trị của X
sẽ được dự đoán bằng giải thuật LOCO-I (Giải thuật LOCO-I chúng ta sẽ
trình bày cụ thể hơn trong các phần sau).
- Bƣớc 4: Sau khi được dự đoán, giá trị này sẽ được tính toán sự sai khác so
với giá trị thực của ảnh ban đầu. Giá trị sai khác giữa giá trị được dự đoán và
giá trị ảnh thực ban đầu sẽ được lưu vào một context (ta tạm gọi là
5
).
- Bƣớc 5: Với mỗi context sẽ bao gồm giá trị
và bộ giá trị gi tương ứng.
Có nghĩa là sau khi xét xong 1 điểm ảnh bất kỳ khi xét sang khu vực ảnh
khác nếu gặp lại bộ giá trị gi này thì chúng ta sẽ đưa ra ngay được giá trị sai
khác là
mà không phải sự đoán hay tính toán sự sai khác nữa.
- Bƣớc 6: Sau khi lưu lại các giá trị
thì giá trị này sẽ được mã hóa trong
bộ mã hóa Golomb Coder sử dụng giải thuật mã hóa không tổn hao RiceGolomb.
Như vậy chúng ta đã phần nào hiểu được các bước thực hiện giải thuật dự đoán
trong kỹ thuật nén ảnh JPEG-LS. Để hiểu rõ hơn về Giải thuật LOCO-I cũng
như Giải thuật Rice-Golomb và Mã hóa loạt dài RLE chúng ta sẽ tìm hiểu trong
cụ thể trong các phần tiếp theo.
2.2.
Thuật toán LOCO-I.
JPEG-LS có 2 quá trình cơ bản là dự đoán và mã hóa, thuật toán Loco-I được
sử dụng trong khối Predictor để dự đoán giá trị của một pixel dụa vào các pixel
đã biết lân cận nó. Loco-I (LOw COmplexity LOssless COmpression for
Images) là thuật toán có độ phức tạp thấp, dựa trên bối cảnh và là thuật toán nén
ảnh không tổn hao, được đề xuât bởi HP Labs năm 1996, do M.J. Weinberger,
G. Seroussi và G. Sapiro phát triển.
Quá trình dự đoán giá trị của pixel X sẽ dựa trên 3 giá trị pixel lân cận đã biết là
A, B và C như hình 2.2. Giá trị của X (Px) được dự đoán như sau:
Px = {
A,
A,
n
n
A,
A,
Giá trị Px được dùng cho khối Adaptive Correction tính toán sai khác so với giá
trị X thực của ảnh ban đầu. Gọi giá trị sai khác này là ΔX, giá trị sai khác ΔX sẽ
6
được mã hóa trong khối Golomb Coder, thuật toán mã hóa sẽ được trình bày
trong phần Golomb coding phía dưới.
2.3.
Thuật toán mã hóa Rice-Golomb.
Quá trình mã hóa được thực hiện trong khối Golomb Coder, sử dụng mã hóa
không tổn hao Rice-Golomb. Giá trị của ΔX là một số thập phân, ta sử dụng
một tham số m để chia ΔX thành 2 phần:
- Q (quotient : thương của phép chia ΔX cho m.
- R (remainder): số dư trong phép chia trên.
Khi đó ΔX sẽ được biểu diễn dưới dạng: <Mã Quotient><Mã Remainder>
Quá trình mã hóa:
Các ký hiệu:
-
m: tham số mã hóa.
q: phần thương của s chia cho m.
r: phần dư của s chia cho m.
s: giá trị biến cần mã hóa.
k: số bit dùng để mã hóa phần dư r.
Đầu vào: số nguyên s và tham số mã hóa m.
Đầu ra: Chuỗi nhị phân là giá trị mã hóa của s.
Thuật toán:
B1: Tính k = ⌈log2(m)⌉ (số nguyên bé nhất không bé hơn log2(m)).
B2: Tính r = s mod m (số dư của s chia cho m).
B3: Tính t = 2k – m.
B4: Mã hóa phần thương q sử dụng mã unary (Mã unary của một số
nguyên N được biểu diễn dưới dạng N bit 1 và kết thúc bằng 1 bit 0)
- B5: Nếu r < t thì mã hóa r dưới dạng nhị phân sử dụng k-1 bit.
Ngược lại tính r = r + t sau đó mã hóa r dưới dạng nhị phân sử dụng k bit.
-
7
- Kết quả mã hóa số nguyên s là <mã q><mã r>.
Ví dụ:
Mã hóa số s = 37 với tham số m = 7.
-
B1: k = ⌈log2(m)⌉ = ⌈log2(7)⌉ = 3.
B2: r = 37mod7 = 2.
B3: t = 23 – 7 = 1.
B4: q = 37div7 = 5. Mã unary giá trị q = 5 là 111110.
B5: r = 2 > t => r = r + t = 2 + 1 = 3. Mã nhị phân của r = 3 sử dụng k = 3
bit là 011.
Như vậy mã Golomb của s = 37 với tham số m = 7 là 111110011.
Quá trình giải mã:
Quá trình giải mã không được sử dụng trong khối Golomb coder này mà nó sẽ
được sử dụng khi muốn khôi phục lại tín hiệu ảnh.
Đầu vào: Chuỗi nhị phân cần giải mã và tham số mã hóa m.
Đầu ra: Giá trị giải mã được (s).
Thuật toán:
- B1: Tính k = ⌈log2(m)⌉ (số nguyên bé nhất không bé hơn log2(m)).
- B2: Tính t = 2k – m.
- B3: Đặt s = số lượng các bit 1 liên tiếp đầu tiên cho đến khi gặp bit 0
trong giá trị đầu vào.
- B4: Gán cho x giá trị bằng giá trị thập phân của (k – 1) bit tiếp theo trong
giá trị đầu vào.
- B5: Nếu x < t thì s = s×m + x.
- B6: Ngược lại thì:
x = x×2 + bit tiếp theo trong đầu vào.
s = s×m + x – t.
Ví dụ: Giải mã 111110011 với tham số m = 7.
- B1: k = ⌈log2(m)⌉ = ⌈log2(7)⌉ = 3.
8
-
B2: t = 2k – m = 23 – 7 = 1.
B3: s = 5. (111110011)
B4: x = 012 = 110
B5: x = 1 ≮ t = 1.
B6:
x = 1×2 + 1 = 3.
s = 5×7 + 3 – 1 = 37.
Như vậy giả mã giá trị 111110011 ta được giá trị ban đầu là s = 37.
ΔX sau khi được mã hóa sẽ được lưu trữ và gửi đi, khi muốn khôi phục lại tính
hiệu ảnh sẽ giải mã giá trị ΔX này kết hợp với dự đoán theo Loco-I để tính
chính xác giá trị của X ban đầu.
2.4.
Mã hóa loạt dài RLE.
Nén dữ liệu hàng loạt – Run Length Encoding (RLE là phương pháp nén
không mất dữ liệu. RLE hoạt động làm việc bằng cách giảm kích thước vật lý
của chuỗi các ký tự lặp lại trong một chuỗi dữ liệu bằng cách biểu diễn khác.
Nén dữ liệu hàng loạt có thể áp dụng cho mọi loại dữ liệu mà không phụ thuộc
vào nội dung thông tin của dữ liệu đó, tuy nhiên mức độ hiệu quả của việc nén
hay tỷ lệ nén rất phụ thuộc vào nội dung dữ liệu. Với những loại dữ liệu mà
thông tin trong đó ít lặp lại, việc áp dụng nén RLE có thể gây hiệu ứng ngược –
tạo ra dữ liệu sau khi nén dung lượng lớn hơn cả dữ liệu gốc. Bởi vậy, RLE
thường chỉ được áp dụng trong việc nén ảnh BMP, TIFF, loại dữ liệu còn nhiều
“loạt” dữ liệu lặp lại.
Ý tưởng của phương pháp nén dữ liệu hàng loạt là tìm loạt dữ liệu liền nhau lặp
lại, thay nó bằng một dữ liệu đại diện khác, mục đích để giảm kích thước dữ
liệu gốc. Loạt dữ liệu liền nhau được gọi là “Run Length”. Chúng ta sẽ tìm hiểu
ứng dụng của phương pháp trong việc nén dữ liệu ảnh.
9
RLE là ứng viên tự nhiên trong việc nén dữ liệu đồ họa. Một ảnh số chứa những
chấm nhỏ là pixel. Mỗi pixel có thể là 1 bit, xác định màu, đen hoặc có thể là
nhiều bit để quy định nhiều màu khác nhau cho pixel. Ta có thể coi rằng những
pixels được lưu trữ trong một mảng gọi là bitmap trong bộ nhớ. Pixels thường
được sắp xếp trong bitmap dưới dạng các dòng, pixels đầu tiên là ở phía trên
cùng bên trái, pixel cuối cùng ở dưới cùng bên phải.
2.4.1. Nguyên tắc.
Nguyên tắc của phương pháp này là phát hiện một loạt các điểm ảnh lặp lại liên
tiếp, ví dụ: 110000000000000011. Ta thấy điểm ảnh có giá trị 0 xuất hiện nhiều
lần liên tiếp thay vì phải lưu trữ toàn bộ các điểm ảnh có giá trị 0 ta chỉ cần lưu
trữ chúng bằng cách sử dụng các cặp (độ dài loạt, giá trị). Ví dụ: Cho một chuỗi
nguồn d = 5 5 5 5 5 5 5 5 5 5 19 19 19 19 19 0 0 0 0 0 0 0 23 23 23 23 23 23 23
23, ta sẽ có chuỗi mới: (10 5) (5 19) (7 0) (8 23), tỷ số nén = 30/8 = 2.5
Đối với ảnh đen trắng chỉ sử dụng 1 bit để biểu diễn 1 điểm ảnh thì phương
pháp này tỏ ra rất hiệu quả, ta thấy điều đó qua ví dụ sau. Ví dụ: Cho một chuỗi
nguồn
d:
000000000000000111111111100000000001111111111000000000000000,
ta
có chuỗi mới: (15, 10, 10, 10, 15), tỷ số nén = 60 bit / (5*4 bit) = 3 (chỉ sử dụng
4 bit để thể hiện độ dài loạt và không thể hiện giá trị loạt vì ảnh đen trắng chỉ có
2 giá trị bit là 0 hoặc là 1).
Đối với ảnh chiều dài của một dãy lặp có thể lớn hơn 255, nếu ta dùng 1 byte để
lưu trữ chiều dài thì sẽ không đủ. Giải pháp được dùng là tách chuỗi đó thành 2
chuỗi: một chuỗi có chiều dài là 255, chuỗi kia có chiều dài còn lại.
Phương pháp nén RLE chỉ đạt hiệu quả khi chuỗi lặp lớn hơn 1 ngưỡng nhất
định nào đó hay nói các khác trong ảnh cần nén phải có nhiều điểm ảnh kề nhau
có cùng giá trị màu. Do đó phương pháp này không đem lại cho ta kết quả một
10
cách ổn định vì nó phụ thuộc hoàn toàn vào ảnh nén chỉ thích hợp cho những
ảnh đen trắng hay ảnh đa cấp xám. Ví dụ: Ta có một chuỗi nguồn: d=5 7 9 11
13 18 28 38 48 58 30 35 40 45. Chuỗi kết quả sau khi mã hoá: 1 5 1 7 1 9 1 11
1 13 1 18 1 28 1 38 1 48 1 58 1 30 1 35 1 40 1 45. Tỷ số nén = 14 / 28 = 0.2.
Như vậy chuỗi sau khi mã hoá đã lớn hơn nhiều chuỗi nguồn ban đầu. Do đó
cần phương pháp cải tiến để xử lý những trường hợp như trên tránh làm mở
rộng chuỗi dữ liệu nguồn nghĩa là chỉ mã hoá độ dài loạt dữ liệu lặp lại. Người
ta đã đưa ra cách đó là thêm kí tự tiền tố vào trước độ dài loạt, việc giải mã
được thực hiện nếu gặp kí tự tiền tố với độ dài loạt và giá trị điểm ảnh theo sau.
Ví dụ: Ta có chuỗi nguồn: d = 5 8 4 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10.
Giả sử kí tự tiền tố là dấu “ ” ta có: 5 8 4 +8 8 + 9 10. Tỷ số nén = 19 / 9 = 2.1.
Tuy nhiên trong một số trường hợp các điểm ảnh có độ tương quan với nhau vể
giá trị mức xám như trong ví dụ dưới đây ta có thể tiến hành xử lý như sau. Ví
dụ ta có một chuỗi nguồn: d = 5 7 9 11 13 18 28 38 48 58 55 60 65 70 75 80 85
90 95 100. Ta có dựa vào độ tương quan này để có được hiệu quả nén cao, bằng
việc áp dụng e(i) = d(i) - d(i-1) sẽ thu được : 5 2 2 2 2 5 10 10 10 10 -3 5 5 5 5 5
5 5 5 5. Áp dụng phương pháp nén loạt dài ta dễ dàng thu được: (5 1) (2 4) (5 1)
(10 5) (-3 1) (5 9).
2.4.2. Thuật toán.
- Tiến hành duyệt trên từng hàng cho đến khi kết thúc vùng dữ liệu ảnh, trong
quá trình duyệt tiến hành kiểm tra để tìm ra những loạt có cùng giá trị đồng
thời chú ý những kí hiệu xuống dòng (hay kết thúc dòng), kết thúc ảnh
Bitmap, …
- Khi gặp loạt có độ dài > 3 thì nhảy đến chế độ nén ngược lại nhảy đến chế
độ không nén tuy nhiên nếu loạt > 255 thì sẽ tách ra chỉ mã < 255 sau đó mã
11
tiếp phần còn lại. Ngoài ra còn các chế độ khác như: bắt đầu, kết thúc 1
dòng.
- Kết thúc khi gặp kí hiệu kết thúc bitmap (end – of bitmap).
III. Xây dựng ứng dụng thử nghiệm thuật toán mã hóa ảnh
JPEG-LS.
3.1. Môi trƣờng xây dựng
3.1.1. Ngôn ngữ lập trình Java
Khái niệm về Java:
Java là một ngôn ngữ lập trình hướng đối tượng và dựa trên các lớp. Khác
với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn
thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để
biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường
thực thi chạy.
Cú pháp Java được vay mượn nhiều từ C và C nhưng có cú pháp hướng
đối tượng đơn giản hơn và ít tính năng xử lý cấp thấp hơn. Do đó việc viết
một chương trình bằng Java dễ hơn, đơn giản hơn, đỡ tốn công sức hơn.
Trong Java, hiện tượng rò rỉ bộ nhớ hầu như không xảy ra do bộ nhớ được
quản lý bới Java Virtual Machine (FVM) bằng cách tự động dọn dẹp “rác”.
Người dùng không phải quan tâm đến việc cấp phát và xóa bộ nhớ như C,
C++. Tuy nhiên khi sử dụng những tài nguyên mạng, file IO, database (nằm
ngoài kiểm soát của FVM) thì hiện tượng rò rỉ bộ nhớ vẫn có thể xảy ra khi
người dùng không đóng các streams.
Phiên bản và tải về:
Hiện nay phiên bản mới nhất của Java là: version 8 update 91, cập nhật
ngày19/4/2016.
Liên kết tải Java: />3.1.2. IDE Eclipse
Eclipse là môi trường phát triển tích hợp (IDE được thiết kế sử dụng như
một phần mềm máy tính. Nó chứa một không gian làm việc cơ sở và một hệ
12
thống plug-in mở rộng dễ dàng tùy biến cho các môi trường phát triển khác
nhau.
Eclipse được viết phần lớn bằng java và mục đích sử dụng chính của nó là
phát triển các ứng dụng java, nhưng nó cũng có thể được sử dụng để phát
triển các ứng dụng trong các ngôn ngữ lập trình khác thông qua việc sử dụng
các plug-in. Môi trường phát triển của eclipse bao gồm: Eclipse Java
development tools (JDT) cho Java và Scala, Eclipse CDT for C/C++ và
Eclipse PDT for PHP,....
Liên kết tải Eclipse: />3.1.3. Kiểm thử
Infranview
Phần mềm cho phép nén ảnh dưới nhiều định dạng.
Liên kết tải: />3.2. Triển khai
Đầu vào: ảnh BMP với kích thước 373 x 277.
Tiến hành:
Đưa ảnh đầu vào qua chương trình được xây dựng mã hóa nén
JPEG-LS cho ra file text, từ file text này ta xây dựng lại ảnh ban
đầu. Tính tỉ số nén.
Đưa ảnh đầu vào qua phần mềm Infranview nén ảnh thành file JLS
(định dạng của JPEG-LS). Tính tỉ số nén.
So sánh 2 tỉ số nén thu được.
3.3. Kết quả
13
Hình 3.1: ảnh đầu vào định dạng BMP
Hình 3.2: ảnh đầu ra, sau khi qua ứng dụng thử nghiệm
Tính tỉ số nén dựa trên dung lượng dữ liệu (bỏ qua phần header của file
tương ứng).
Tỉ số nén khi dùng ứng dụng thử nghiệm được xây dựng:
Tỉ số nén khi dùng phần mềm Infranview:
Nhận xét: tỉ số nén của phần mềm chuyên dụng lớn hơn nhiều so với ứng
dụng thử nghiệm.
Giải thích: do trong ứng dụng thử nghiệm chúng em chỉ dùng mã hóa loạt
dải RLE để thực hiện mã hóa và một vài khối lập trình chưa chuẩn nên
không đạt được tỉ số tối ưu như của phần mềm chuyên dụng.
14
KẾT LUẬN
Phương pháp nén ảnh không tổn hao Lossless được sử dụng để nén các ảnh
quan trọng cần thiết trong các quá trình phân tích và biến đổi sau này, vì vậy
lượng thông tin mất mát là rất nhỏ giúp cho ảnh có thể giữ được chất lượng tốt
nhất. Tuy nhiên phương pháp nén ảnh Lossless ít được sử dụng trên thế giới do
không ưu việt bằng các định dạng ảnh không mất mát thông tin khác như MP
hay GIF, do vậy hầu nhưu không có chương trình nào hỗ trợ định dạng này.
Gần đây ủy ban ISO JPEG đã phát triển một định dạng nén ảnh không mất mát
thông tin là JPEG-LS, cung cấp một phương pháp mã hóa nhanh hơn và tốt
hơn, nhưng cũng không gây được nhiều sự chú ý. Có lẽ sẽ rất lâu nữa phương
pháp nén ảnh này mới trở nên thông dụng và được nhiều người biết đến nếu
không có những cải tiến vượt bậc để cạnh tranh với các định dạng khác.
15
Tài liệu tham khảo
1. The LOCO-I Lossless Image Compression Algorithm: Principles and
Standardization into JPEG-LS. (download tại:
www.labs.hp.com/research/info_theory/loco/HPL-98-193R1.pdf)
2. Trang web
/>ng/09-Golomb_coding/index.html
16