Download as pdf or txt
Download as pdf or txt
You are on page 1of 53

NÉN ẢNH

VŨ NGỌC THANH SANG


KHOA CÔNG NGHỆ THÔNG TIN
ĐẠI HỌC SÀI GÒN
I – Giới thiệu

• Hình ảnh số yêu cầu lượng lớn không gian lưu trữ và băng
thông lớn để truyền tải.
• Tính bộ nhớ yêu cầu cho một bộ phim SD (720 x 480 tiêu
chuẩn) dài 2 giờ với tốc độ 30 hình/giây...!!
I – Giới thiệu

Memory Required
= (Frame Size x Bit Depth x Frame Rate x Duration) / 8
= ( 720x480 x 8 x 30 x 7,200 ) / 8
= 74,649,600,000 bytes
= 69.52 GB
I – Giới thiệu

• Chụp một tấm ảnh bằng điện thoại, gửi tấm ảnh đó cho bạn
bè qua Facebook và qua Zalo. Download các tấm ảnh đã gửi
và so sánh kích thước, chất lượng ảnh so với ảnh gốc.
I – Giới thiệu – Nén dữ liệu

• Nén dữ liệu (Data Compression) là quá trình giảm thiểu lượng


dữ liệu cần thiết để biểu diễn một lượng thông tin nhất định.
• Các phương pháp nén dữ liệu bao gồm nén không mất mát
(lossless) và nén có mất mát (lossy), tùy thuộc vào yêu cầu của
ứng dụng sử dụng.
• Khi nén dữ liệu, thông tin dư thừa, trùng lặp, hoặc không cần
thiết sẽ được loại bỏ hoặc thay thế bằng mã ngắn hơn để
giảm kích thước tệp.
I – Giới thiệu – Nén dữ liệu

Transmit

𝑓(𝑥, 𝑦) Compress Decompress ' 𝑦)


𝑓(𝑥,

Strore Retrive

Storage
Devide
I – Giới thiệu – Dữ liệu VS Thông tin

• Dữ liệu (data) là tập hợp các ký tự, số hoặc các giá trị khác mà
không có ý nghĩa nếu không được sắp xếp hoặc xử lý.
• Thông tin (information) là dữ liệu được xử lý và có ý nghĩa. Nó
đề cập đến các kiến thức hoặc hiểu biết mà một người hay
một hệ thống có được từ việc xử lý dữ liệu.
I – Giới thiệu – Dữ liệu VS Thông tin
I – Giới thiệu – Dữ liệu VS Thông tin

Một lượng thông tin giống nhau có thể được biểu diễn bằng
dữ liệu khác nhau

• Lưu trữ một bức ảnh ở nhiều độ phân giải khác nhau.
• Tăng cường ảnh
• Cân bằng sáng tối
• Làm rõ các đường viền
• Loại bỏ nhiễu
I – Giới thiệu – Tỉ lệ nén

• Tỉ lệ nén (compression ratio) là tỉ lệ giữa kích thước dữ liệu


trước khi nén và kích thước dữ liệu sau khi nén.
• Ảnh gốc: 𝑛! bits
• Ảnh nén: 𝑛" bits
$!
• Tỉ lệ nén 𝐶# = $
"
II – Dư thừa dữ liệu

• Dư thừa dữ liệu (Data Redundancy) là tình trạng trong đó một


tập hợp dữ liệu chứa các thông tin trùng lặp hoặc trùng lắp
một phần.
!
• Dư thừa dữ liệu tương đối 𝑅% = 1 −
&!

!
• Ví dụ: nếu 𝐶# = 10, 𝑅% = 1 − !' = 0.9

90 % dữ liệu là dư thừa
II – Dư thừa dữ liệu

Các loại dư thừa dữ liệu phổ biến


(1) Coding redundacy
(2) Interpixel redundacy
(3) Psychovisual redundacy
Nén ảnh là làm giảm một hoặc nhiều loại dư thừa dữ liệu.
II – Dư thừa dữ liệu

(1) Coding Redundancy


Giả sử một ảnh có 4 pixel, mỗi pixel có giá trị màu là RGB (255,
255, 255), tức là màu trắng.
Pixel 1: 11111111 11111111 11111111
Pixel 2: 11111111 11111111 11111111
Pixel 3: 11111111 11111111 11111111
Pixel 4: 11111111 11111111 11111111
Þ Có sự lặp lại giữa các pixel
Þ Coding Redundancy
II – Dư thừa dữ liệu

(2) Interpixel Redundancy


Dư thừa liên điểm ảnh là tình trạng khi có một mối quan hệ giữa
các pixel trong một tấm ảnh.
• Spatial Redundacy (dư thừa không gian): Sự lặp lại của thông
tin giữa các phần của một tấm ảnh.
• Temporal Redundacy (dư thừa thời gian): Sự lặp lại của các
khung hình trong một đoạn video.
II – Dư thừa dữ liệu

Ví dụ về dư thừa không gian


II – Dư thừa dữ liệu

(2) Psychovisual Redundancy


• Mắt người không đáp ứng với mọi thông tin hình ảnh một cách
nhạy bén và đồng đều.
• Mắt người đáp ứng tốt hơn với các tần số thấp hơn so với các
tần số cao hơn trong phổ màu sắc.
• Ý tưởng: Loại bỏ dữ liệu không quan trọng đối với thị giác của
mắt người.
III – Nén ảnh – Các loại nén ảnh

Dựa trên mức độ mất mát trong quá trình nén, các kỹ thuật nén
dữ liệu được phân loại thành hai loại chính sau:
• Lossless (không mất mát): giữ nguyên toàn bộ thông tin và dữ
liệu ban đầu sau khi giải nén.
• Lossy (mất mát): dữ liệu được nén bằng cách giảm bớt một số
thông tin không quan trọng và không ảnh hưởng đến sự hiểu biết
hoặc giá trị của dữ liệu ban đầu.
III – Nén ảnh – Các loại nén ảnh

Tính chất Kỹ thuật nén Kỹ thuật nén


Lossless Lossy
Giữ nguyên chất Giảm chất lượng
Chất lượng hình
lượng hình ảnh ban hình ảnh để giảm
ảnh
đầu kích thước tệp
Tỷ lệ nén dữ liệu Thấp Cao
Giữ nguyên thông
Có Không
tin ban đầu
Sử dụng cho loại Văn bản, tài liệu y
Hình ảnh, video
dữ liệu tế
III – Nén ảnh – Các loại nén ảnh

• Trong quá trình sử dụng các kỹ thuật nén dữ liệu, ta phải cân
nhắc giữa chất lượng hình ảnh và tỷ lệ nén dữ liệu
• Nếu muốn giữ chất lượng hình ảnh: Lossless
• Nếu muốn giảm kích thước hình ảnh: Lossy
III – Nén ảnh – Tiêu chí đánh giá

• Fidelity Criteria (tiêu chí trung thực) là các tiêu chí được sử
dụng để đánh giá chất lượng của dữ liệu được nén so với dữ
liệu ban đầu.

𝑓(𝑥, 𝑦) Compress Decompress ' 𝑦)


𝑓(𝑥,

• Subjective (chủ quan): dựa vào cảm nhận cá nhân


• Objective (khách quan): dựa vào các độ đo toán học
III – Nén ảnh – Tiêu chí đánh giá – Chủ quan

Tiêu chí Mô tả
Excellent Dữ liệu nén gần như không khác biệt với dữ liệu ban đầu.
Sự khác biệt giữa dữ liệu nén và dữ liệu ban đầu khá nhỏ và
Fine
không đáng kể.
Sự khác biệt giữa dữ liệu nén và dữ liệu ban đầu có thể
Passable
được chấp nhận.
Sự khác biệt giữa dữ liệu nén và dữ liệu ban đầu đáng kể và
Marginal
không chấp nhận được trong một số trường hợp.
Dữ liệu nén có chất lượng kém hơn đáng kể so với dữ liệu
Inferior
ban đầu.
Dữ liệu nén không đủ chất lượng để sử dụng và không có
Unusable
giá trị.
III – Nén ảnh – Tiêu chí đánh giá – Khách quan

• Root-mean-square (RMS): đo lường sự khác biệt trung bình


giữa dữ liệu ban đầu và dữ liệu nén.
• rms = np.sqrt(np.mean((img1 - img2)**2))
• Signal-to-noise ratio (SNR): đo lường chất lượng hình ảnh
dựa trên tỷ lệ tín hiệu-độ ồn.
• snr = 10 * np.log10(np.mean(img1 ** 2) /
np.mean((img1 - img2) ** 2))
III – Nén ảnh

• Trong nén không mất mát (lossless compression), yêu cầu rằng
0 𝑦).
𝑓(𝑥, 𝑦) = 𝑓(𝑥,
• Điều này có nghĩa là tài liệu gốc luôn có thể được khôi phục
chính xác từ tài liệu nén.
• Ví dụ
• Huffman coding
• Lempel - Ziv và Welch (LWZ)
III – Nén ảnh

• Trong nén có mất mát (lossy compression),


0 𝑦).
𝑓(𝑥, 𝑦) ≈ 𝑓(𝑥,
• 𝑓(𝑥, 𝑦) gần giống nhưng không nhất thiết phải giống với
0 𝑦).
𝑓(𝑥,
• Ví dụ
• âm thanh (mp3)
• hình ảnh (jpg)
• video (mpg)
III – Nén ảnh – Kỹ thuật nén ảnh

• Nén không thích nghi (non-adaptive)


• Ta có kiến thức trước về dữ liệu được nén, chẳng hạn như tần
suất xuất hiện của các ký tự trong văn bản.
• Kỹ thuật này sử dụng một bảng thống kê trước để giảm kích
thước dữ liệu.
• Ví dụ: Huffman coding.
III – Nén ảnh – Kỹ thuật nén ảnh

• Nén thích nghi (adaptive):


• Ta không có bất kỳ kiến thức trước về dữ liệu nén.
• Kỹ thuật này xây dựng một bảng thống kê dựa trên dữ liệu đầu
vào khi dữ liệu được nén.
• Ví dụ: Lempel-Ziv.
III – Nén ảnh

• Mã hóa (Coding) là hệ thống các ký hiệu được sử dụng để biểu


diễn một tập thông tin hoặc một tập sự kiện.
• Mỗi thông tin hoặc sự kiện được gán một chuỗi các ký hiệu gọi
là từ mã (codeword).
• Số lượng các ký hiệu trong mỗi từ mã được gọi là độ dài từ mã
(code length).
III – Nén ảnh

Mã hóa độ dài cố định (fixed-length code)


• Kỹ thuật mã hóa trong đó mỗi ký tự trong tập dữ liệu được mã
hóa thành một chuỗi bit có độ dài cố định.
• Ví dụ, mỗi ký tự ASCII có 8 bit, do đó độ dài mã hóa của mỗi ký
tự là 8 bit.
III – Nén ảnh

Ví dụ: Cho tập dữ liệu


{ a , b , c , d , e , f , g , h }
Ta có thể sử dụng mã nhị phân với độ dài 3 bit để mã hóa
{000, 001, 010, 011, 100, 101, 110, 111
Ta có thể dễ dàng mã hóa và giải mã dữ liệu
baba = 001|000|001|000
III – Nén ảnh

Run-length encoding (RLE)


• Kỹ thuật nén dữ liệu đơn giản, nó hoạt động bằng cách mã
hóa các chuỗi dữ liệu lặp lại thành một cặp giá trị (value,
count), trong đó value là giá trị của dữ liệu và count là số lần
xuất hiện của giá trị đó liên tiếp.
III – Nén ảnh

Ví dụ: Cho chuỗi kí tự


“BBBBBBWAAADDDD”
Mã hóa RLE: (B, 6) (W, 1), (A, 3), (D, 4)
• (B, 6): "B" xuất hiện liên tiếp 6 lần trong chuỗi
• (W, 1): "W" xuất hiện 1 lần
• (A, 3): "A" xuất hiện liên tiếp 3 lần trong chuỗi
• (D, 4): ”D" xuất hiện liên tiếp 4 lần trong chuỗi
III – Nén ảnh

Mã hóa độ dài biến đổi (Variable-length code)


• Kỹ thuật mã hóa trong đó mỗi ký tự trong tập dữ liệu được mã
hóa thành một chuỗi bit có độ dài khác nhau.
• Sử dụng các mã ngắn hơn cho các ký tự xuất hiện thường
xuyên và các mã dài hơn cho các ký tự xuất hiện hiếm.
III – Nén ảnh

Character a b c d e f
Frequency (%) 45 13 12 16 9 5
Codeword 0 101 100 111 1101 1100
Bits 1 3 4

Số bit trung bình dùng để mã hóa 100 kí tự là


(45)1+(13)3+(12)3+(16)3+(9)4+(5)4 = 224.
III – Nén ảnh – Huffman Coding

Ta được cho một bảng chữ cái {ai} với tần số xuất hiện tương
ứng {f(ai)}. Chúng ta muốn tìm một tập các từ mã nhị phân C =
{c(a1),...,c(an)} sao cho số lượng trung bình các bit được
sử dụng để biểu diễn dữ liệu là nhỏ nhất
III – Nén ảnh – Huffman Coding
III – Nén ảnh – LZW

• LZW là viết tắt của Lempel-Ziv-Welch


• Thuật toán LZW sử dụng một bảng mã để lưu trữ các từ đang
được sử dụng trong dữ liệu và đưa ra mã hóa cho chúng.
• Khi nén một tập tin, thuật toán sẽ tìm kiếm các chuỗi liên tiếp
các ký tự xuất hiện trong tập tin và thêm chúng vào bảng mã.
• Khi thuật toán tìm thấy một chuỗi ký tự không xuất hiện trong
bảng mã, nó sẽ tạo một mã hóa cho chuỗi đó và thêm chuỗi
và mã hóa tương ứng vào bảng mã.
III – Nén ảnh – LZW

Giả sử chúng ta có một ảnh 4x4 pixel với các giá trị pixel như sau:

0 128 0 128

128 255 128 0

0 128 0 128

128 255 128 0

Chúng ta sẽ chuyển đổi ma trận này thành một chuỗi giá trị pixel:
{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,
128, 255, 128, 0}
III – Nén ảnh – LZW

Bước 1: Khởi tạo từ điển các giá trị pixel cơ sở (0-255)


Ký tự Mã hóa
0 0
1 2
… …
255 255
Bước 2: Bắt đầu xử lý chuỗi giá trị pixel.
{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,
128, 255, 128, 0}
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0}

Read isExist Action Encoded Ký tự Mã hóa


Output 0 0
0 Yes Tiếp tục
1 2
Thêm vào từ điển (256),
0, 128 No 0 … …
xuất mã cho 0
255 255
0, 128 256
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0, 128}

Read isExist Action Encoded Ký tự Mã hóa


Output … …
128 Yes Tiếp tục
255 255
Thêm vào từ điển (257),
128, 0 No 128 0, 128 256
xuất mã cho 128
128, 0 257
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0, 128, 256}

Read isExist Action Encoded Ký tự Mã hóa


Output … …
0 Yes Tiếp tục
0, 128 256
0, 128 Yes Tiếp tục
Thêm vào từ điển (258), 128, 0 257
0, 128, 128 No 256 0, 128,
xuất mã cho 0, 128 258
128
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0, 128, 256, 128}

Read isExist Action Encoded Ký tự Mã hóa


Output … …
128 Yes Tiếp tục
0, 128 256
Thêm vào từ điển (259),
128, 255 No 128 128, 0 257
xuất mã cho 128
0, 128,
258
128
128, 255 259
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0, 128, 256, 128, 255}
Ký tự Mã hóa
Read isExist Action Encoded … …
Output 0, 128 256
255 Yes Tiếp tục
128, 0 257
Thêm vào từ điển (260),
255, 128 No 255 0, 128,
xuất mã cho 255 258
128
128, 255 259
255, 128 260
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0, 128, 256, 128, 255, 257}
Ký tự Mã hóa
Read isExist Action Encoded … …
Output 0, 128 256
128 Yes Tiếp tục
128, 0 257
128, 0 Yes Tiếp tục
Thêm vào từ điển 0, 128, 128 258
257 128, 255 259
128, 0, 0 No (261), xuất mã cho
257 255, 128 260
128, 0, 0 261
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0, 128, 256, 128, 255, 257, 256} Ký tự Mã hóa
… …
Read isExist Action Encoded 0, 128 256
Output 128, 0 257
0 Yes Tiếp tục 0, 128, 128 258
0, 128 Yes Tiếp tục
128, 255 259
Thêm vào từ điển
0, 128, 0 No (262), xuất mã cho 256 255, 128 260
256 128, 0, 0 261
0, 128, 0 262
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0} Ký tự Mã hóa
… …
{0, 128, 256, 128, 255, 257, 256, 258}
0, 128 256
128, 0 257
Read isExist Action Encoded 0, 128, 128 258
Output
128, 255 259
0 Yes Tiếp tục
0, 128 Yes Tiếp tục 255, 128 260
0, 128, 128 Yes Tiếp tục 128, 0, 0 261
Thêm vào từ điển 0, 128, 0 262
0, 128, 128,
No (263), xuất mã cho 258 0, 128, 128,
255 263
258 255
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0, 128, 256, 128, 255, 257, 256, 258, 260}
Ký tự Mã hóa
Read isExist Action Encoded … …
Output
255, 128 260
255 Yes Tiếp tục
255, 128 Yes Tiếp tục 128, 0, 0 261
Thêm vào từ điển 0, 128, 0 262
255, 128, 0 No (264), xuất mã cho 260 0, 128, 128,
263
260 255
255, 128, 0 264
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0, 128, 256, 128, 255, 257, 256, 258, 260, 0}
Ký tự Mã hóa
Read isExist Action Encoded … …
Output
255, 128 260
0 Yes Xuất mã cho 0
128, 0, 0 261
0, 128, 0 262
0, 128, 128,
263
255
255, 128, 0 264
III – Nén ảnh – LZW

{0, 128, 0, 128, 128, 255, 128, 0, 0, 128, 0, 128,


128, 255, 128, 0}
{0, 128, 256, 128, 255, 257, 256, 258, 260, 0}

Ký tự Mã hóa Ký tự Mã hóa
… … 255, 128 260
0, 128 256 128, 0, 0 261
128, 0 257 0, 128, 0 262
0, 128, 0, 128, 128,
258 263
128 255
128, 255 259 255, 128, 0 264
III – Nén ảnh – LZW – Giải nén

{0, 128, 256, 128, 255, 257, 256, 258, 260, 0}

Read Decoded Value Action Decoded Pixel Values


0 0 Output 0 0
128 128 Output 128 0,128
256 0, 128 Output 0, 128 0, 128, 0, 128
0, 128, 0, 128,
128 128 Output 128
128
0, 128, 0, 128,
255 255 Output 255
128, 255
III – Nén ảnh – LZW – Giải nén

{0, 128, 256, 128, 255, 257, 256, 258, 260, 0}

Read Decoded Value Action Decoded Pixel Values


0, 128, 0, 128,
256 0, 128 Output 0, 128 128, 255, 128, 0,
0, 128
0, 128, 0, 128,
Output 0, 128, 128, 255, 128,
258 0, 128, 128
128 0, 0, 128, 0,
128, 128
III – Nén ảnh – LZW – Giải nén

{0, 128, 256, 128, 255, 257, 256, 258, 260, 0}

Read Decoded Value Action Decoded Pixel Values


0, 128, 0, 128,
Output 255, 128, 255, 128, 0,
260 255, 128
128 0, 128, 0,128,
128, 255, 128
0, 128, 0, 128,
128, 255, 128, 0,
0 0 Output 0
0, 128, 0, 128,
128, 255, 128, 0
THANK YOU FOR YOUR ATTENTIONS

You might also like