Mục đích và sự cần thiết của “nén ảnh” - Nén ảnh là một kỹ thuật mã hóa các ảnh số hóa nhằm giảm số lượng các bit dữ liệu cần thiết để biểu diễn ảnh.. Ảnh số: là một hình ảnh có thể đượ
Trang 1ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC SÀI GÒN
BÁO CÁO ĐỀ TÀI
NÉN ẢNH
HỌC PHẦN: PHÂN TÍCH XỬ LÝ ẢNH
TP HỒ CHÍ MINH, THÁNG 5 NĂM 2022
Sinh viên thực hiện: LÊ NGUYỄN QUỲNH THƠ
BÙI THANH THÚY VY TRẦN CHIỀU XUÂN
Trang 2ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC SÀI GÒN
BÁO CÁO ĐỀ TÀI
NÉN ẢNH
HỌC PHẦN: PHÂN TÍCH XỬ LÝ ẢNH
TP HỒ CHÍ MINH, THÁNG 5 NĂM 2022
Sinh viên thực hiện: LÊ NGUYỄN QUỲNH THƠ
BÙI THANH THÚY VY TRẦN CHIỀU XUÂN
Trang 3MỤC LỤC
NÉN ẢNH - 1
I Giới thiệu tổng quan về nén ảnh - 1
1 Mục đích và sự cần thiết của “nén ảnh” - 1
2 Các khái niệm cơ bản - 2
II Các phương pháp nén ảnh - 3
1 Phân loại dựa vào nguyên lý nén: - 3
2 Phân loại dựa vào cách thức thực hiện nén: - 4
III Quá trình nén và giải nén - 4
IV Các phương pháp nén thế hệ thứ nhất - 5
1 Phương pháp mã hóa loạt dài - 5
1.1 Nguyên tắc: - 5
1.2 Thuật toán: - 6
2 Phương pháp mã hóa Huffman: - 7
2.1 Nguyên tắc: - 7
2.2 Thuật toán - 7
2.3 Một số hạn chế của mã Huffman: - 8
3 Phương pháp LZW - 8
3.1 Phương pháp nén LZW - 9
3.2 Quá trình giải nén - 10
3.3 Trường hợp đặc biệt - 10
TÀI LIỆU THAM KHẢO - 12
Trang 4NÉN ẢNH
I Giới thiệu tổng quan về nén ảnh
1 Mục đích và sự cần thiết của “nén ảnh”
- Nén ảnh là một kỹ thuật mã hóa các ảnh số hóa nhằm giảm số lượng các bit dữ liệu cần thiết để biểu diễn ảnh
- Mục đích là giảm đi những chi phí trong việc lưu trữ ảnh và chi phí thời gian để truyền ảnh đi xa trong truyền thông nhưng vẫn đảm bảo được chất lượng của ảnh
- Nén ảnh có nhiều ứng dụng trong thực tế như: truyền các văn bản đồ họa qua đường điện thoại (Fax), nén ảnh trong y tế và truyền hình cáp, … Chính sự ứng dụng trong nhiều lĩnh vực của nén ảnh cùng với sự tiến bộ trong lĩnh vực vi điện
tử dẫn đến sự ra đời các chuẩn nén ảnh
- Nén ảnh đạt được bằng cách loại bỏ các phần tử dư thừa trong ảnh đã được số hóa Dư thừa có thể là dư thừa thông tin về không gian, dư thừa về cấp xám hay
dư thừa về thời gian:
- Nén dữ liệu nhằm giảm lượng thông tin “dư thừa” trong dữ liệu gốc và do vậy, lượng thông tin thu được sau khi nén thường nhỏ hơn dữ liệu gốc rất nhiều Với
dữ liệu ảnh kết quả thường là 10:1 Một số phương pháp còn cho kết quả cao hơn
ví dụ như kỹ thuật nén fratal cho tỉ lệ nén 30 trên 1
- Ngoài thuật ngữ “nén dữ liệu”, do bản chất của kỹ thuật này nó còn có một số tên gọi khác như: giảm độ dư thừa; mã hóa ảnh gốc
Dư thừa về thông tin không gian: trong một bức ảnh luôn tồn tại sự tương quan giữa các điểm ảnh cạnh nhau
Dư thừa thông tin về cấp xám: là dư thừa dựa vào sự tương quan giữa các màu sắc cạnh nhau
Dư thừa thông tin về thời gian: trong một chuỗi ảnh video, tồn tại sự tương quan giữa các điểm ảnh của các frame khác nhau
Trang 52
2 Các khái niệm cơ bản
a Ảnh số: là một hình ảnh có thể được định nghĩa là hàm hai chiều, f (x, y), trong đó
x và y là tọa độ không gian (mặt phẳng) và biên độ của f tại bất kỳ cặp tọa độ (x, y) nào được gọi là cường độ hoặc mức độ màu xám của hình ảnh tại điểm đó Khi x, y và các giá trị cường độ của f đều là các đại lượng hữu hạn, rời rạc, chúng ta gọi hình ảnh là hình ảnh
kỹ thuật số Có thể hiểu đơn giản rằng “Ảnh số là số hóa làm cho một hình ảnh kỹ thuật số trở thành một xấp xỉ của một cảnh thực”; “ảnh là tập hợp các điểm ảnh được biểu diễn với mức xám phù hợp để mô tả ảnh gần với ảnh thực”
Hình 1 Hình ảnh minh họa về ảnh và điểm ảnh
b Điểm ảnh: Ảnh trong thực tế là một ảnh liên tục về không gian và giá trị độ sáng
Để có thể xử lý ảnh bằng máy tính thì cần thiết phải tiến hành số hóa ảnh Trong quá trình
số hóa, người ta biến đổi tín hiệu liên tục sang tín hiệu rời rạc thông qua quá trình lấy mẫu (rời rạc hóa về không gian) và lượng hóa thành phần gia trị (rời rạc hóa biên độ giá trị) mà bằng mắt thường ta khó phân biệt được hai mức xám kề nhau Trong trường hợp này, người
ta sử dụng khái niệm phần tử ảnh hay là điểm ảnh (Picture Element – Pixel) Trong khuôn khổ ảnh hai chiều, mỗi điểm ảnh gồm có một cặp tọa độ (x; y) và giá trị biểu diễn độ sáng (cấp sáng) cụ thể Các cặp tọa độ (x; y) tạo nên độ phân giải (resolution) Chẳng hạn như màn hình máy tính có độ phân giải là 480x640 nghĩa là trên màn hình có 480x640 điểm ảnh (x; y), chiều rộng 480 điểm ảnh, chiều dài có 640 điểm ảnh
Điểm ảnh (pixel) là một phần tử của ảnh số tại tọa độ (x; y) với độ xám hoặc màu nhất định
Trang 6c Mức xám (Graylevel): là kết quả sự mã hóa tương ứng của mỗi cường độ sáng
của mỗi điểm ảnh với một giá trị số - kết quả của quá trình lượng hóa
d Dữ liệu: trong một bài toán, dữ liệu bao gồm một tập các phần tử cơ sở mà ta gọi
là dữ liệu nguyên tử Nó có thể là một chữ số, một ký tự,… nhưng cũng có thể là một con
số, một từ,… điều đó phụ thuộc vào từng bài toán
e Nén dữ liệu: là quá trình giảm dung lượng thông tin “dư thừa” trong dữ liệu gốc
và làm cho lượng thông tin thu được sau nén thường nhỏ hơn dữ liệu gốc rất nhiều Do vậy, tiết kiệm được bộ nhớ và giảm thời gian trao đổi dữ liệu trên mạng thông tin mà lại cho phép chúng ta khôi phục dữ liệu ban đầu
f Tỷ lệ nén: là một trong các đặc trung quan trọng của mọi phương pháp nén Tỷ lệ
nén được định nghĩa như sau:
- Tỷ lệ nén = 1/r*% với r là tỷ số nén
- r = kích thước dữ liệu gốc / kích thước dữ liệu nén
- Như vậy, hiệu suất nén = (1- tỷ lệ nén)*100%
Đối với ảnh tĩnh, kích thước chính là số bit biểu diễn toàn bộ bức ảnh
Đối với ảnh video, kích thước chính là số bit để biểu diễn một khung hình video (video frame)
II Các phương pháp nén ảnh
1 Phân loại dựa vào nguyên lý nén:
- Nén bảo toàn thông tin (Losses compression): bao gồm các phương pháp nén mà sau khi giải nén sẽ thu được chính xác dữ liệu gốc Tuy nhiên né bảo toàn thông tin chỉ đạt hiệu quả nhỏ so với phương pháp nén không bảo toàn thông tin
- Nén không bảo toàn thông tin (Lossy compression): bao gồm các phương pháp nén sau khi giải nén sẽ không thu được dữ liệu như bản gốc Các phương pháp này được gọi là “tâm lý thị giác” đó là lợi dụng tính chất của mắt người chấp nhận một số vặn xoắn trong ảnh khi khôi phục lại Phương pháp này luôn đem lại hiệu quả cao do loại bỏ đi những thông tin dư thừa không cần thiết
Trang 74
2 Phân loại dựa vào cách thức thực hiện nén:
- Phương pháp không gian (Spatial Data Compression): các phương pháp này thực hiện nén bằng cách tác động trực tiếp lên việc lấy mẫu ảnh trong miền không gian
- Phương pháp sử dụng biến đổi (Transform Coding): gồm các phương pháp tác động lên sự biến đổi của ảnh gốc chứ không tác động trực tiếp
- Phân loại dựa vào lý thuyết mã hóa:
- Các phương pháp nén thế hệ thứ nhất: gồm các phương pháp có mức độ tính toán đơn giản như lấy mẫu, gán từ mã, …
- Các phương pháp nén thế hệ thứ hai: gồm các phương pháp dựa vào mức độ bão hòa của tỷ lệ nén bằng cách sử dụng các phép toán tổ hợp đầu ra một cách hợp lý hoặc sử dụng biểu diễn ảnh như: phương pháp kim tự tháp Laplace, phương pháp dựa vào vùng gia tăng, phương pháp tách hợp
III Quá trình nén và giải nén
Nén: dữ liệu gốc qua bộ mã hóa dữ liệu, bộ mã hóa này thực hiện nén dữ liệu đến một
mức thích hợp cho việc lưu trữ và truyền dẫn thông tin Quá trình này sẽ thực hiện việc loại bỏ hay cắt bớt nhũng dư thừa của ảnh để thu được thông tin cần thiết nhưng vẫn đảm bảo được chất lượng ảnh
Giải nén: dữ liệu nén đi qua bộ giải mã dữ liệu, bộ giải mã sẽ thực hiện giải nén để thu
được dữ liệu gốc ban đầu Việc giải nén này thường phải dựa vào các thông tin đi kèm theo
dữ liệu nén, tùy thuộc vào kiểu nén hay phương pháp nén mà dữ liệu giải nén có hoàn toàn giống với dữ liệu gốc ban đầu hay không
Tóm lại quá trình nén và giải nén dữ liệu có thể mô tả một cách tóm tắt theo sơ đồ dưới đây:
Trang 8Hình 2 Sơ đồ quá trình nén và giải nén dữ liệu
IV Các phương pháp nén thế hệ thứ nhất
Trong lớp các phương pháp này, ta lần lượt xem xét các phương pháp:
- Mã hóa loạt dài RLC (Run Length Coding)
- Mã hóa Huffman
- Mã hóa LZW (Lempel Ziv-Wench)
- Mã hóa khối (Block Coding)
1 Phương pháp mã hóa loạt dài
Mã hóa RLC là một phương pháp nén ảnh dựa trên sự cắt bớt các dư thừa về không gian (một vài hình ảnh có vùng màu lớn không đổi đặc biệt với ảnh nhị phân) Loạt được định nghĩa là dãy các phần tử điểm ảnh (pixel) liên tiếp có cùng chung một giá trị
1.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:
o 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)
Trang 96
- Tỷ số nén = 20/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 quá ví dụ sau:
- Cho một chuỗi nguồn d:
o d = 0000000000000001111111111000000000011111111111000000000000000
- 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 1)
Lưu ý:
- Đối với ảnh, chiều dài của chuỗi lặp có thể lớn hơn 255 Nếu ta dùng 1 byte để mã hóa thí sẽ không đủ Giải pháp được dùng là tách các chuỗi đó thành hai chuỗi: một chuỗi có chiều dài 255, chuỗi kia là số bit còn lại
- Phương pháp nén RLC 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ách 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 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
Phương pháp RLC được sử dụng trong việc mã hóa lưu trữ các ảnh Bitmap theo dạngPCX, BMP
1.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ã tiếp phần còn lại Ngoài ra còn các chế độ khác nhau như : bắt đầu, kết thúc 1 dòng
Trang 10- Kết thúc khi gặp kí hiệu kết thúc bitmap (end – of – bitmap)
2 Phương pháp mã hóa Huffman:
2.1 Nguyên tắc:
Phương pháp mã hóa Huffman là phương pháp dựa vào mô hình thông kê Người ta tính tần suất xuất hiện của các ký tự bằng cách duyệt tuần tự tệp gốc từ đầu đến cuối Việc xử
lý ở đây tính theo bit Trong phương pháp này người ta gán cho các ký tự có tần suất cao một từ mã ngắn, các ký tự có tần suất thấp từ mã dài Như vậy ta đã làm giảm chiều dài trung bình của từ mã hóa bằng cách dùng chiều dài biến đổi Tuy nhiên cũng có trường hợp
bị thiệt 1 ít bit khi tần suất là rất thấp., trong một số tình huống khi tần suất là rất thấp, ta
có thể không được lợi một chút nào, thậm chí còn bị thiệt một ít bit
2.2 Thuật toán
2.2.1 Thuật toán nén
Thuật toán bao gồm 2 bước chính:
- Giai đoạn thứ nhất: tính tần suất của các ký tự trong dữ liệu gốc: duyệt tệp
gốc một cách tuần tự từ đầu đến cuối để xây dựng bảng mã Tiếp sau đó là sắp xếp lại bảng mã theo thứ tự tần suất giảm dần
- Giai đoạn thứ hai: mã hóa: duyệt bảng tần suất từ cuối lên đầu để thực hiện
ghép 2 phần tử có tần suất xuất hiện thấp nhất thành một phần tử duy nhất Phần tử này có tần suất bằng tổng 2 tần suất thành phần Tiến hành cập nhật lại bảng và đương nhiên loại bỏ 2 phần tử đã xét Quá trình được lặp lại cho đến khi bảng chỉ có một phần tử Quá trình này gọi là quá trình tạo cây mã Huffman vì việc tập hợp được tiến hành nhờ một cây nhị phân 2 nhánh Phần
tử có tần suất thấp ở bên phải, phần tử kia ở bên trái Với cách tạo cây này, tất
cả các bit dữ liệu/ký tự là nút lá; các nút trong là các nút tổng hợp Sau khi cây
đã tạo xong, người ta tiến hành gán mã cho các nút lá Việc mã hóa rất đơn giản: mỗi lần xuống bên phải ta thêm 1 bit “1” vào từ mã; mỗi lần xuống bên trái ta thêm một bit “0” Tất nhiên có thể làm ngược lại, chỉ có giá trên mã thay
Trang 118
đổi còn tổng chiều dài là không đổi Cũng chính do lý do này mà cây có tên gọi là cây mã Huffman như trên đã gọi
2.2.2 Thuật toán giải nén
Quá trình giải nén tiến hành theo chiều ngược lại khá đơn giản Người ta phải dựa vào bảng
mã tạo ra trong giai đoạn nén (bảng này được giữ lại trong cấu trúc của tệp nén cùng với
dữ liệu nén)
Thuật toán giải nén:
- Bước 1: Đọc lần lượt từng bit trong tập tin nén và duyệt cây nhị phân đã được xác định cho đến khi hết một lá Lấy kí tự ở lá đó ghi ra tệp giải nén
- Bước 2: Trong khi chưa hết tập tin nén thì thực hiện bước một, ngược lại thì thực hiện bước 3
- Bước 3: kết thúc thuật toán
2.3 Một số hạn chế của mã Huffman:
- Mã Huffman chỉ thực hiện được khi biết được tần suất xuất hiện của các ký tự
- Mã Huffman chỉ giải quyết được độ dư thừa phân bố ký tự
- Huffman tĩnh đòi hỏi phải xây dựng cây nhị phân sẵn chứa các khả năng
- Điều này đòi hỏi thời gian không ít do ta không biết trước kiểu dữ liệu sẽ được thực hiện nén
- Quá trình giải nén phức tạp do chiều dài mã không biết trước cho đến khi ký tự đầu tiên được tìm ra
3 Phương pháp LZW
- Khái niệm nén từ điển được Jacob Lampel và Abraham Ziv đưa ra lần đầu tiên vào năm 1977 Sau đó phát triển thành một họ giải thuật nén từ điển LZ Năm 1984 Terry Welch đã cải tiến thuật giải LZ thành một họ giải thuật mới hiệu quả hơn và đặt tên là LZW
Trang 12- Phương pháp LZW dựa trên việc xây dựng từ điển cho các “chuỗi ký tự” đã từng xuất hiện trong văn bản, những “chuỗi ký tự” xuất hiện sau đó sẽ được thay thế bằng
mã của nó trong bảng từ điển
- Giải thuật LZW được sử dụng cho tất cả các loại file nhị phân Nó thường được dùng để nén các loại văn bản, ảnh đen trắng, ảnh màu … và là chuẩn nén cho các dạng ảnh GIF, TIFF… Mức độ hiệu quả của LZW không phụ thuộc vào số bít màu của ảnh
3.1 Phương pháp nén LZW
- Phương pháp nén LZW hoạt động theo nguyên tắc là tạo ra một từ điển động theo
dữ liệu của file ảnh Từ điển là tập hợp những cặp Khóa và nghĩa của nó Trong đó khóa được sắp xếp theo thứ tự nhất định, nghĩa là một chuỗi con trong dữ liệu ảnh
- Từ điển được xây dựng đồng thời với quá trình đọc dữ liệu Sự có mặt của một chuỗi con trong từ điển khẳng định rằng chuỗi đó đã từng xuất hiện trong phần dữ liệu đã đọc Thuật toán liên tục tra cứu và cập nhật từ điển sau mỗi lần đọc một ký tự ở dữ liệu đầu vào
- Do kích thước bộ nhớ không phải là vô hạn và để đảm bảo tốc độ tìm kiếm, người
ta thường dùng từ điển với kích thước 4096 (212) phần tử
- Cấu trúc từ điển có dạng như sau:
Khóa Ý nghĩa Ghi chú
255 255
256 256 (Clear code)
257 257 (end of information)
258 Chuỗi
259 Chuỗi