1. Trang chủ
  2. » Thể loại khác

BTL ĐSTT - SVD trong xử lí ảnh

18 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ứng Dụng SVD Giảm Chiều Dữ Liệu
Tác giả Huỳnh Tấn Dương, Huỳnh Thiên Phú, Huỳnh Minh Quang, Huỳnh Hoàng Trân, Huỳnh Ngọc Thanh Trúc
Người hướng dẫn Đặng Văn Vinh
Trường học Trường Đại Học Bách Khoa
Chuyên ngành Đại Số Tuyến Tính
Thể loại Báo cáo BTL
Năm xuất bản 2023
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 18
Dung lượng 427,93 KB

Nội dung

Mục đích của việc nén ảnh số là mã hoá các dữ liệu ảnh về một dạng thu gọn, tối thiểu hoá cả số bit dùng để biểu diễn ảnh, nhằm giảm dung lượng lưu trữ và giảm tối thiểu thời gian truyền

Trang 1

Nhóm-04 BTL-ĐSTT - Bài tập lớn phần ứng dụng SVD

Đại số tuyến tính (Đại học Bách khoa Tphcm)

Scan to open on Studocu

Nhóm-04 BTL-ĐSTT - Bài tập lớn phần ứng dụng SVD

Đại số tuyến tính (Đại học Bách khoa Tphcm)

Scan to open on Studocu

Trang 2

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA

ĐẠI SỐ TUYẾN TÍNH (MT1015)

BÁO CÁO BÀI TẬP LỚN ĐỀ TÀI SỐ 4

Ứng Dụng SVD Giảm Chiều Dữ Liệu

LỚP: P01 - Nhóm 04 Giáo Viên: Đặng Văn Vinh

SV thực hiện: Huỳnh Tấn Dương - 2310586

Huỳnh Thiên Phú - 2312648 Huỳnh Minh Quang - 2312788 Huỳnh Hoàng Trân - 2313546 Huỳnh Ngọc Thanh Trúc - 2313690

Tp Hồ Chí Minh, Tháng 12/2023

Trang 3

Mục lục

2.1 Một số khái niệm cơ bản 3

2.1.1 Trị riêng và vector riêng của ma trận vuông 3

2.1.2 Ma trận trực giao 4

2.1.3 Chéo hóa ma trận 6

2.1.4 Singular Values 6

2.2 Phát biểu SVD 7

3 ÁP DỤNG SVD VÀO NÉN DỮ LIỆU 8 3.1 Các bước cụ thể để giảm chiều dữ liệu 8

3.2 Ví dụ cụ thể 9

3.3 Ứng dụng của SVD vào nén ảnh 11

4 ÁP DỤNG TRÊN MATLAB 12 4.1 Phần code matlab 12

4.2 Ví dụ minh họa 13

Trang 4

1 Giới thiệu về đề tài

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 để biểu diễn ảnh Mục đích của việc nén ảnh số là mã hoá các

dữ liệu ảnh về một dạng thu gọn, tối thiểu hoá cả số bit dùng để biểu diễn ảnh, nhằm giảm dung lượng lưu trữ và giảm tối thiểu thời gian truyền ảnh

và đồng thời chúng ta vẫn đảm bảo được chất lượng của ảnh Có hai cách nén ảnh là nén không mất thông tin (lossless image compression) và nén

có mất thông tin (lossy image compression) Trong thực tế, để có thể nén được nhiều ảnh số, người ta thường áp dụng các phương pháp nén có mất mát thông tin vì việc này không đồng nghĩa với việc làm mất nét của ảnh SVD (Singular Value Decomposition) là một phương pháp để phân tích một ma trận bất kỳ thành tích của ba ma trận thành phần Phương pháp này được phát triển dựa trên những kiến thức đã biết từ ma trận trực giao

và ma trận đường chéo để tìm được một ma trận xấp xỉ mới ma trận gốc Phân tích SVD thường được dùng để trích chọn các đặc trưng bền vững

và có nhiều ứng dụng trong lĩnh vực hình học vi phân, hồi qui tuyến tính, khử nhiễu âm thanh, xử lý hình ảnh, các thuật toán nén và giảm chiều dữ liệu Hiện nay được ứng dụng phổ biến trong hệ thống giao thông vận tải của nhiều nước nhằm đảm bảo truyền thông tin được nhanh chóng, giảm

độ trễ, tiết kiệm dung lượng cho các camera giám sát, nhận diện biển số, kiểm soát ra vào bãi đỗ xe, nhận diện tắc nghẽn giao thông, đều ứng dụng SVD để nén dữ liệu hình ảnh

Ở đây, chúng ta sẽ nói về ứng dụng của SVD trong việc giảm chiều dữ liệu, đặc biệt trong nén ảnh, nén file

Trang 5

2 CƠ SỞ LÝ THUYẾT

2.1 Một số khái niệm cơ bản

2.1.1 Trị riêng và vector riêng của ma trận vuông

Cho A là một ma trận cấp n, nếu số vô hướng λ và vector x ̸= 0 ∈ Rn thỏa mãn:

Ax= λx thì λ được gọi là **trị riêng** của A và x là **vector riêng** tương ứng với trị riêng đó

Tính chất

1.Nếu x là một vector riêng của A ứng với λ thì kx, k ̸= 0 cũng là vector riêng ứng với trị riêng đó

Chứng minh Ta có:

Ax= λx

kx∗ Ax = kx ∗ λx

⇒ k ∗ λx = λ ∗ kx

⇒ λ ∗ kx = λx

Do k ̸= 0 nên ta có:

λ∗ kx = λx

⇒ kx = x Vậy kx cũng là một vector riêng của A ứng với trị riêng λ

2.Mọi ma trận vuông bậc n đều có n trị riêng (kể cả lặp) và có thể là các số phức

Chứng minh Ta có thể sử dụng định lý Cayley-Hamilton Định lý này cho biết rằng:

Trang 6

P(A) = 0 với P (x) là đa thức đặc trưng của A

Mặt khác, đa thức đặc trưng của A có n hệ số Do đó, P (A) có n nghiệm, bao gồm nghiệm thực và nghiệm ảo

x1, x2, , xn

là các nghiệm của P (x) Nếu x1, x2, , xm là các nghiệm thực và xm+

1, , xn là các nghiệm ảo, thì các nghiệm thực là các trị riêng của A Vậy mọi ma trận vuông bậc n đều có n trị riêng (kể cả lặp) và có thể

là các số phức

3.Với ma trận đối xứng, tất cả các trị riêng đều là các số thực

Chứng minh Ta có thể sử dụng định lý spectral cho ma trận đối xứng Định lý này cho biết rằng:

A = U · D · UT với U là ma trận các vector riêng của A và D là ma trận đường chéo chứa các trị riêng của A

Do U là ma trận thực nên UT cũng là ma trận thực Do đó, ma trận D cũng là ma trận thực

Vậy tất cả các trị riêng của A đều là các số thực

2.1.2 Ma trận trực giao

Ma trận vuông A bậc được gọi là ma trận trực giao nếu:

AT = A−1 hoặc

ATA = AAT = I Trong đó I là ma trận đơn vị bậc tương ứng với bậc của ma trận A

Ma trận trực giao thể hiện phép xoay của một vectơ (phép xoay không làm thay đổi tích vô hướng giữa 2 vector):

Trang 7

Ví dụ, cho ma trận

A = 3 4

2 5



là ma trận trực giao

vectx = 1

0



bị xoay 90 độ theo chiều kim đồng hồ bởi ma trận A

vecty = 0

1



bị xoay 90 độ theo chiều ngược kim đồng hồ bởi ma trận A

Chứng minh:

Để chứng minh rằng A là ma trận trực giao, ta cần chứng minh rằng A thỏa mãn hai phương trình sau:

ATA = AAT = I (2) Chứng minh phương trình (1):

Ta có:

AT = (AT)−1

= (A−1)T

= A−1 Chứng minh phương trình (2): Ta có:

ATA= A(AT)A

= A(A−1)A

= A2

= I Như vậy, ta đã chứng minh được rằng A là ma trận trực giao

Trang 8

2.1.3 Chéo hóa ma trận

Cho A là một ma trận vuông cấp n, xét ma trận khả nghịch P cấp n và

ma trận đường chéo D, ta có:

D = P AP−1

P là ma trận làm chéo hóa ma trận A, còn D là dạng chéo của ma trận A Quá trình chéo hóa là quá trình tìm các ma trận P và D ở trên

Trong đó,

* A là ma trận vuông cấp n * P là ma trận khả nghịch cấp n * D là

ma trận đường chéo cấp n

Giải thích:

Phương trình D = P AP−1 được gọi là phương trình chéo hóa của ma trận A

Ma trận P là ma trận làm chéo hóa ma trận A Nó có các cột là các vector riêng của ma trận A, được chuẩn hóa theo vectơ đơn vị

Ma trận D là dạng chéo của ma trận A Nó có các phần tử trên đường chéo là các giá trị riêng của ma trận A

Quá trình chéo hóa:

Quá trình chéo hóa là quá trình tìm các ma trận P và D thỏa mãn phương trình D = P AP−1

Có nhiều cách để thực hiện quá trình chéo hóa Một cách phổ biến là

sử dụng phương pháp Jacobi

Phương pháp Jacobi:

- Phương pháp Jacobi được thực hiện như sau:

1 Khởi tạo ma trận P là ma trận đơn vị

2 Lặp lại các bước sau cho đến khi ma trận A được chéo hóa:

* Chọn một giá trị riêng λi của ma trận A

* Tìm vector riêng vi của ma trận A tương ứng với giá trị riêng λi

* Cập nhật ma trận P theo công thức sau:

Pij =

v T

i v j

λ i λ j nếu i ̸= j

−1 =

"

1

√ 2

1

√ 2

−1

√ 2

1

√ 2

# "

2 1

1 2

# "

1

√ 2 1

√ 2

1

√ 2

#

=

"

3 0

0 1

#

2.1.4 Singular Values

det(A − λI) = 0

Trang 9

Trong đó,

* A là ma trận vuông cấp n * λ là giá trị riêng của ma trận A * I là

ma trận đơn vị cùng bậc với ma trận A

Lấy căn bậc hai của λ, ta được các giá trị được gọi là Singular Value của ma trận A:

σi = pλi

Giải thích:

Phương trình detA − ΛI= 0 là phương trình đặc trưng của ma trận A

Nó có n nghiệm, tương ứng với n giá trị riêng của ma trận A

Lấy căn bậc hai của các giá trị riêng λi, ta được các giá trị σi Các giá trị này được gọi là các giá trị riêng của ma trận A

Ví dụ:

Giả sử ma trận A có dạng sau:

A = 1 2

2 1



Ta có: det(A − λI) = 0

1 − λ 2

2 1 − λ

= (1 − λ)2 − 4 = 0 Giải phương trình:

λ2 − 3λ + 3 = 0 <=> (λ − 1)(λ − 3) = 0

Vậy λ1 = 1 ; λ2 = 3

σ1 = √

λ1 = √

1 σ2 = √

λ2 = √

3 2.2 Phát biểu SVD

Một ma trận Am ×n bất kỳ đều có thể được phân tích thành dạng:

Am ×n = Um ×mΣVnT×n(1) Trong đó:

• A là ma trận đầu vào bất kỳ

• U và V là ma trận trực giao (từ phép tính AAT và ATA)

Trang 10

• Σ là ma trận đường chéo không vuông có cùng kích thước với ma trận

A, với các phần tử nằm trên đường chéo là Singular values của ma trận A

Trong đó, σ1 ≥ σ2 ≥ · · · ≥ σr ≥ 0 (với r là rank của ma trận A)

3 ÁP DỤNG SVD VÀO NÉN DỮ LIỆU

3.1 Các bước cụ thể để giảm chiều dữ liệu

Ở đây chúng ta sẽ sử dụng phương pháp cắt ngắn ma trận (Truncated SVD) được coi là phương pháp xấp xỉ hạng ma trận tốt nhất (Best low-rank Approximation)

Viết lại biểu thức (1) dưới dạng tổng các ma trận:

A = σ1u1v1T + σ2u2vT2 + · · · + σrurvrT

với σ1 ≥ σ2 ≥ · · · ≥ σr ≥ 0

Chú ý rằng mỗi uivTi , với 1 ≤ i ≤ r, là một ma trận có rank bằng 1

Trang 11

Với 1 ≤ k ≤ r, đặt Ak = σ1u1vT1 + σ2u2vT2 + · · · + σkukvkT.

Chú ý rằng trong ma trận Σ, các giá trị trên đường chéo là không âm

và có giá trị giảm dần σ1 ≥ σ2 ≥ · · · ≥ σr ≥ 0 Đa số khi chúng ta phân tích ma trận A thì chỉ một lượng nhỏ σi mang giá trị lớn, các giá trị còn lại thường rất nhỏ và gần bằng 0 Khi chúng ta bỏ bớt một số giá trị σi

(k < i < r) rất bé phía sau thì giá trị của A gần như không thay đổi Do

đó ta có thể xấp xỉ ma trận A bằng tổng của k (k < r) ma trận có rank bằng 1:

A≈ Ak = UkΣk(Vk)T = σ1u1v1T + σ2u2v2T + · · · + σkukvkT

Như vậy ta thấy ta có thể chọn độ sai số của dữ liệu phụ thuộc vào k Với k càng lớn thì sai số của dữ liệu càng ít nhưng k vẫn bé hơn rank A 3.2 Ví dụ cụ thể

Cho ma trận:

A = 3 4

2 5



SVD của ma trận A được xác định bởi A = UΣVT, trong đó U là ma trận trực giao bên trái, Σ là ma trận chứa các singular values trên đường chéo chính, và VT là ma trận trực giao bên phải

Trang 12

Bước 1: Xây dựng ma trận U và V

- Ma trận U:

+ Tính AT

A

AT · A = 3 2

4 5



·3 4

2 5



= 13 22

22 41



+ Tìm vectơ riêng của AT

A

**Trị riêng:

det(AT

· A − λI) = 0

det13 − λ 22

22 41 − λ



= 0

=> λ1 = 53.07, λ2 = 0.92

**Vector riêng tương ứng:

det(AT

· A − λI)X = 0 Giải phương trình trên ta được 2 vector với các giá trị tương ứng:

x1 = u1

y1



x2 = u2

y2



Ma trận U:

U = u1 y1

u2 y2



- Ma trận V:

+ Tính AAT

A· AT = 3 4

2 5



·3 2

4 5



= 25 26

26 29



Trang 13

Tương tự, ta cũng tìm trị riêng và vectơ riêng của AAT

Ma trận V:

V = u′1 y1′

u′2 y2′



Bước 2: Xây dựng ma trận Σ

Vì ma trận A có kích thước 2x2 nên ma trận Σ cũng có kích thước tương

tự với đường chéo là các singular values của AAT hoặc AT

A Chúng ta cần tính các singular values từ trị riêng của AT

A hoặc AAT

ATA = 13 22

22 41



Do đó, các trị của AT

A là λ1 = 53.07 và λ2 = 0.92

Các singular values được tính bằng cách lấy căn bậc hai của các trị riêng này:

σ1 = √

53.07, σ2 = √

0.92

Σ = √53.07 0

0 √

0.92



Vậy, ta có thể phân rã A bằng phương pháp SVD:

A= U ΣVT

= u1 y1

u2 y2



·√53.07 0

0 √

0.92



·uy′1′ u′2

1 y2′



3.3 Ứng dụng của SVD vào nén ảnh

Chúng ta có thể nén ảnh vì thông tin trong bức ảnh sắp xếp ngẫu nhiên

mà có trật tự, có cấu trúc cụ thể tùy thuộc vào từng ảnh Vì thế, nếu phân tích, số hóa được tính trật tự, cấu trúc đó thì chúng ta có thể bỏ bớt những phần thông tin kém quan trọng để biểu diễn và truyền đi với số lượng ít bit hơn so với ảnh gốc mà vẫn đảm bảo tính đầy đủ cần thiết của ảnh Khi nhận được thông tin về ảnh, quá trình giải mã sẽ sắp xếp, tổ chức lại được bức ảnh xấp xỉ gần chính xác so với ảnh gốc và vẫn thỏa mãn chất lượng yêu cầu Nén ảnh (nén mất thông tin) là phương pháp giảm dung lượng

Trang 14

ảnh bằng cách loại bỏ các phần ít quan trọng trong ảnh đã được số hóa.

Phân tích SVD với đặc tính xác định được các phần tử có sự tập trung

thông tin cao của ảnh nên có thể được sử dụng trong nén ảnh Khi một

hình ảnh được chuyển đổi bằng SVD, nó không bị nén Nhưng do dữ liệu

sau khi phân tích thì những giá trị đầu tiên đã có một lượng lớn thông tin

hình ảnh, chúng ta có thể chỉ sử dụng một vài giá trị lớn nhất để thể hiện

hình ảnh thì kết quả đạt được cũng sẽ không có nhiều khác biệt so với bản

gốc

4 ÁP DỤNG TRÊN MATLAB

4.1 Phần code matlab

‘tenfile’ là tên của file ta nhập vào

img = imread(’tenfile’);

img_gray = rgb2gray(img);

[U, S, V] = svd(double(img_gray));

k1 = 5; % Số lượng giá trị singular để giữ lại lần 1

k2 = 10; % Số lượng giá trị singular để giữ lại lần 2

k3 = 20; % Số lượng giá trị singular để giữ lại lần 3

U_approx1 = U(:, 1:k1);

S_approx1 = S(1:k1, 1:k1);

V_approx1 = V(:, 1:k1);

img_approx1 = U_approx1 * S_approx1 * V_approx1’;

approx_error1 = norm(double(img_gray) - img_approx1, ’fro’) / norm(double(img_gray), U_approx2 = U(:, 1:k2);

S_approx2 = S(1:k2, 1:k2);

V_approx2 = V(:, 1:k2);

img_approx2 = U_approx2 * S_approx2 * V_approx2’;

approx_error2 = norm(double(img_gray) - img_approx2, ’fro’) / norm(double(img_gray), U_approx3 = U(:, 1:k3);

S_approx3 = S(1:k3, 1:k3);

V_approx3 = V(:, 1:k3);

img_approx3 = U_approx3 * S_approx3 * V_approx3’;

approx_error3 = norm(double(img_gray)-img_approx3,’fro’) / norm(double(img_gray),’fro’);

Trang 15

fprintf(’Sai số xấp xỉ lần 1: %e\n’, approx_error1);

fprintf(’Sai số xấp xỉ lần 2: %e\n’, approx_error2);

fprintf(’Sai số xấp xỉ lần 3: %e\n’, approx_error3);

figure;

subplot(2, 2, 1), imshow(img), title(’Hình ảnh gốc’);

subplot(2, 2, 2), imshow(uint8(img_approx1)), title(’Lần 1 giảm chiều’); subplot(2, 2, 3), imshow(uint8(img_approx2)), title(’Lần 2 giảm chiều’); subplot(2, 2, 4), imshow(uint8(img_approx3)), title(’Lần 3 giảm chiều’);

4.2 Ví dụ minh họa

- Ví dụ 1:

+ Đánh giá sai số:

Sai số xấp xỉ lần 1: 1.837305e-01

Sai số xấp xỉ lần 2: 1.709546e-01

Sai số xấp xỉ lần 3: 1.563930e-01

+ Tổng quát:

Trang 16

- Ví dụ 2:

+ Đánh giá sai số:

Sai số xấp xỉ lần 1: 9.306113e-02

Sai số xấp xỉ lần 2: 6.696519e-02

Sai số xấp xỉ lần 3: 4.522223e-02

+ Tổng quát:

Ngày đăng: 18/08/2024, 20:26

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN