Professional Documents
Culture Documents
1
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
MỤC LỤC
Lời mở đầu……………………………………………………………...…..3
I. Cơ sở lý thuyết……………………………………………………........….4
1. Trị riêng – vector riêng của ma trận…………………………………..........4
2. Chéo hóa trực giao………………………………………………….....…..5
3. Phân tích SVD……………………………………………………………8
II. Ứng dụng phân tích SVD trong khử nhiễu hình ảnh và code MATLAB….11
1. Các bộ nhiễu ảnh………………………………………………………....11
2. Các loại bộ lọc ảnh……………………………………………………….13
2
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
LỜI MỞ ĐẦU
Đại số tuyến tính bao hàm nhiều lý thuyết có tính ứng dụng cao trong thực tế và hầu hết các ngành khoa
học: công nghệ thông tin, kỹ thuật công nghiệp, kinh tế, môi trường, đồ họa, xử lý tín hiệu,… Tiêu biểu
phải kể đến công nghệ khử nhiễu hình ảnh ứng dụng phương pháp phân tích SVD – hay còn gọi là phân
tích suy biến (Singular value decomposition).
SVD là một trong những phương pháp thuộc nhóm Ma trận thừa số hóa (Matrix factorization) được phát
triển bởi những nhà nghiên cứu hình học vi phân. Ban đầu mục đích của phương pháp này là tìm ra một
phép xoay không gian sao cho tích vô hướng của các vector không thay đổi. Từ mối liên hệ này khái niệm
về ma trận trực giao đã hình thành để tạo ra các phép xoay đặc biệt. Phương pháp SVD đã được phát triển
dựa trên những tính chất của ma trận trực giao và ma trận đường chéo để tìm ra một ma trận xấp xỉ với ma
trận gốc. Phương pháp này sau đó đã được ứng dụng rộng rãi trong các lĩnh vực như hình học vi phân, hồi
qui tuyến tính, xử lý hình ảnh, clustering, các thuật toán nén và giảm chiều dữ liệu. Nhờ có sự hướng dẫn
tận tình của giảng viên, trong bài báo cáo sau đây nhóm chúng em xin được phép giới thiệu về ứng dụng
của SVD trong khử nhiễu hình ảnh.
3
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
+ Tất cả các nghiệm của phương trình là tất cả các trị riêng của A.
Bước 2: tìm vector riêng
+ Tương ứng với trị riêng λ . Giải hệ phương trình (A-λ 𝐼)𝑥 = 0
+ Tất cả các nghiệm khác 0 của hệ là tất cả các vector riêng của A ứng với trị riêng λ .
+ Tương tự tìm vector riêng của A ứng với các trị riêng còn lại.
2. Chéo hóa trực giao
2.1 Cơ sở lý thuyết:
Định nghĩa 1. Ma trận AMₙ(R) gọi là ma trận đối xứng thực, nếu AT = A
1 2 3
Ví dụ 1: Ma trận A= 2 5 7 . Kiểm tra thấy AT = A. Như vậy A là ma trận đối xứng. Các phần tử của
3 7 4
A đối xứng với nhau qua đường chéo chính.
Định nghĩa 2: Ma trận A∈Mₙ(R) gọi là ma trận trực giao, nếu A-1 = AT.
-Từ định nghĩa ta có A.A-1 = A.AT A.AT = I. Như vậy nếu tích của A và AT là ma trận đơn vị I, thì A là
ma trận trực giao.
Mệnh đề 1: Ma trận A là ma trận trực giao khi và chỉ khi họ vector cột (hoặc họ vector hàng) của A là họ
trực chuẩn.
Chứng minh
- Cho A là ma trận trực giao. Tức là A.AT= I. Để ý phép nhân hai ma trận với nhau, ta thấy: hàng i của A
nhân với cột j của ma trận A ta được phần tử ở hàng i và cột j của ma trận đơn vị. Cột j của AT là hàng j
của A.
, ế
Ta có: Ai*A*j= { , ế
5
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
c) Chia một vector hàng trong F cho độ dài của nó ta có cơ sở trực chuẩn Q. Tạo ma trận A có họ
vector hàng(hoặc họ vector cột) là Q.
Khi đó ma trận A trực giao.
Ví dụ 2: Trong R3, chọn cơ sở E={ (1;1;1), (1;2;1), (1;1;2) }.
Dùng quá tình trực giao hóa Gram-Schmidt, ta được họ trực giao: F={ (1;1;1), (1;-2;1), (-1;0;1) }
Chia mỗi vector cho độ dài của nó, ta có họ trực chuẩn:
√ √ √
⎛ ⎞
A=⎜√ √
0⎟
⎝√ √ √ ⎠
Định nghĩa 3: Ma trận vuông, thực A gọi là chéo hoá trực giao được nếu A = PDP-1 = PDPT, với D là ma
trận chéo và P là ma trận trực giao.
Định lý 1: Cho A là ma trận đối xứng thực.
-Các khẳng định sau đây là đúng
1/ Trị riêng của A là các số thực.
2/ A luôn chéo hóa trực giao được.
3/ Hai vector riêng ứng với các giá trị riêng khác nhau vuông góc với nhau.
Mệnh đề 2: Nếu ma trận A chéo hóa trực giao được, thì A là ma trận đối xứng.
-Chứng minh:
Giả sử A chéo hóa trực giao được. Khi đó A= PDPT.
Suy ra, AT = (PDPT)T = (PT)TDTPT = PDPT = A. Hay A là ma trận đối xứng. Như vậy chỉ có ma trận đối
xứng thực mới chéo hóa trực giao được.
2.2 Chéo hóa trực giao ma trận đối xứng A
Bước 1: Tìm trị riêng của A.
Bước 2: Tìm một cơ sở của trực chuẩn của từng không gian con riêng.
6
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
-Để tìm cơ sở trực chuẩn của không gian con riêng E , ta theo các bước sau:
a) Chọn cơ sở Ek tùy ý của E .
b) Dùng quá trình Gram-Schmidt (nếu cần) để tìm cơ sở trực giao Fk.
c) Chia mỗi vector trong Fk cho độ dài của nó ta có cơ sở trực chuẩn Qk của E
Bước 3: Kết luận.
Ma trận A luôn chéo hóa trực giao được. Tức là A= PDPT, trong đó ma trận chéo D có các phần tử trên
đương chéo là các trị riêng của A, họ vector cột của ma trận trực giao P từ các vector riêng trong các cơ sở
trực chuẩn ở bước 2.
Ví dụ 3: Chéo hóa trực giao ma trận đối xứng thực:
2 −4
A=
−4 17
Lời giải
Bước 1: Tìm các trị riêng của A
A có hai trị riêng là λ = 1, λ = 18
Bước 2: Tìm cơ sở trực chuẩn của các không gian con riêng
-Ứng với λ = 1
-Giải hệ (A-𝜆𝐼)𝑥 = 0 X=(4α; α) . Cơ sở của E là (4; 1) .
-Ứng với λ = 18
-Giải hệ (A- λ 𝐼)𝑋 = 0 X=(α; −4α) . Cơ sở của E là (1; −4) .
7
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
√ √
P=
√ √
8
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
+ TH2: m>n
Hình 1: SVD cho ma trận A khi: m<n (hình trên), và m>n (hình dưới). ∑ là một ma trận đường
chéo với các phần tử trên đó giảm dần và không âm. Màu đỏ càng đậm thể hiện giá trị càng cao.
Các ô màu trắng trên ma trận này thể hiện giá trị 0.
9
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
Hình 2: Biểu diễn SVD dạng thu gọn và biểu diễn ma trận dưới dạng tổng các ma trận có rank bằng 1.
3.4 Các bước phân tích SVD của một ma trận bất kì
Bước 1: Xác định ma trận A(cỡ bao nhiêu) để tiến hành phân tích SVD
Bước 2: Thực hiện chéo hóa trực giao : AA = QD Q
2.1 : Viết phương trình đặc trưng của AA . Từ đó chúng ta sẽ tính được các giá trị riêng của AA . Viết
được ma trận đường chéo D có các phần tử là những giá trị riêng, ta vừa tìm được.(Lưu ý phải sắp xếp nó
theo thứ tự giảm dần)
2.2 : Tìm vector riêng của AA . Từ đó ta tính được ma trận Q, các cột của Q là các vector riêng của AA .
Bước 3: Thực hiện chéo hóa trực giao A A = P𝐷 P .
Tương tự các bước 2.1, 2.2 ta tính được P và 𝐷 .
Chọn Σ bằng cách chọn ma trận cỡ tương ứng phù hợp với D hay D .
Sau đó lấy căn bậc 2 của tất cả những phần tử đường chéo.
Bước 4: : Vậy phân tích SVD của ma trận A sẽ là :
A =Q Σ (𝑃 ) .
Nhận xét: Như vậy từ dữ liệu ban đầu, chúng ta có thể viết nó dưới dạng một ma trận. Quá trình chéo hóa
trực giao ma trận và ma trận chuyển vị của nó, chúng ta được phân tích SVD. Trên cơ sở đó, ta có thể dễ
dàng ứng dụng chúng vào nhiều lĩnh vực khác nhau trong khoa học.
10
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
11
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
b.Nhiễu Gaussian:
- Là một dạng lý tưởng của nhiễu trắng, được gây ra bởi những dao động ngẫu
nhiên của tín hiệu. Nhiễu Gaussian là nhiễu trắng có phân bố chuẩn.
1
𝑝(𝑧) = 𝑒( ) /
√2𝜋𝛿
- Nếu ta có ảnh I, nhiễu Gaussian là N ta sẽ có ảnh nhiễu = I +N. Để tạo ra ảnh với
nhiễu Gaussian ta dùng câu lệnh sau : t = imnoise(image,’gaussian’)
- Giá trị mặc định của kỳ vọng và phương sai của nhiễu là 0 và 0.01.
c. Nhiễu Speckle:
- Có thể được mô hình bằng cách nhân các giá trị ngẫu nhiên với giá trị của các pixel. Nhiễu Speckle là
vấn đề quan tâm chủ yếu trong các ứng dụng radar.
- Trong MATLAB ảnh với nhiễu Speckle được tính toán : I*(1 + N)
t = imnoise(t,’speckle’)
- Nhiễu N có phân phối chuẩn với giá trị trung bình =0. Có thể cung cấp thêm thông số để xác định giá trị
kỳ vọng của N, giá trị mặc định của nó là 0.04.
12
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
- Nếu tín hiệu hình ảnh là tín hiệu tuần hoàn, chúng ta có thể có ảnh bị ảnh hưởng bởi nhiễu tuần hoàn.
- Hàm imnoise không có tùy chọn để tạo ra nhiễu tuần hoàn. Ta có thể tạo ra một dạng đơn giản của nhiễu
tuần hoàn bằng cách cộng vào ảnh một ma trận tuần hoàn.
13
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
Isp = imnoise(I,'salt & pepper'); % add 3% (0.03) salt and pepper noise
Ig = imnoise(I,'gaussian',0.02); % add Gaussian noise (with 0.02 variance)
I_m = medfilt2(I,[3 3]); % apply to original image
Isp_m = medfilt2(Isp,[3 3]); % apply to salt and pepper image
Ig_m =medfilt2(Ig,[3 3]); % apply tp gaussian image
subplot(1,3,1), imshow(I_m); % Display result image
title('loc anh goc');
subplot(1,3,2), imshow(Isp_m); % Display result image
title('loc salt and pepper');
subplot(1,3,3), imshow(Ig_m); % Display result image
title('loc gaussian');
KẾT QUẢ
15
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
c. Rank filtering
- Các bộ lọc trung vị chỉ là một trường hợp đặc biệt của bộ lọc Rank. Bộ lọc Rank
là một bộ lọc phi tuyến tính với các bước thực hiện như sau:
(1) Xác định các vùng lân cận của điểm ảnh mục tiêu (N × N).
(2) Sắp xếp chúng theo thứ tự tăng dần (đầu tiên là giá trị thấp nhất, (N × N), giá trị
cao nhất).
(3) Chọn bậc của các bộ lọc (từ 1 đến N).
(4) Thiết lập giá trị lọc bằng với giá trị của điểm ảnh đã chọn.
CODE MATLAB
I=imread('eight.tif'); % Read in image
Isp = imnoise(I,'salt & pepper'); % add 3% (0.03) salt and pepper noise
Ig = imnoise(I,'gaussian',0.02); % add Gaussian noise (with 0.02 variance)
I_m = ordfilt2(I,25,ones(5,5)); % apply to original image
Isp_m = ordfilt2(Isp,25,ones(5,5)); % apply to salt and pepper image
Ig_m =ordfilt2(Ig,25,ones(5,5)); % apply tp gaussian image
subplot(1,3,1), imshow(I_m); % Display result image
title('loc anh goc');
subplot(1,3,2), imshow(Isp_m); % Display result image
title('loc salt and pepper');
subplot(1,3,3), imshow(Ig_m); % Display result image
16
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
title('loc gaussian');
d. Lọc Gaussian
- Bộ lọc Gaussian rất quan trọng đối với cả lý thuyết và thực tiễn. Chúng ta lọc hình ảnh bằng cách sử dụng
một kernel dạng đối xứng xuyên tâm của hàm Gauss 2-D liên tục.
- Xấp xỉ rời rạc để hàm liên tục này sử dụng hai tham số tự do là :
(1) các kích thước mong muốn của các kernel (như là một mặt nạ lọc N × N);
(2) giá trị độ lệch chuẩn của hàm Gaussian.
- Ứng dụng của bộ lọc Gaussian là làm mịn ảnh, nó khác với bộ lọc trung bình ở chỗ là: thứ nhất, mức độ
làm mịn được điều khiển bởi sự lựa chọn các tiêu chuẩn thông số độ lệch, chứ không phải bởi giá trị tuyệt
đối của kích thước hạt nhân. Thứ 2, hàm Gaussian có một thuộc tính khá đặc biệt, đó là biến đổi Fourier
của nó là một hàm Gaussian, điều đó rất thuận tiện cho việc phân tích miền tần số của bộ lọc.
17
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
- Một hàm Gauss với giá trị lớn của s là một ví dụ về bộ lọc thông thấp, trong đó hàm lượng tần số không
gian cao(ví dụ: các tính năng cạnh sắc nét) của hình ảnh được loại bỏ. Để hiểu được điều này đòi hỏi chúng
ta có nền tảng tốt trong các biến đổi Fourier và phân tích trong miền tần số.
CODE MATLAB
I=imread('eight.tif'); % Read in image
Isp = imnoise(I,'salt & pepper'); % add 3% (0.03) salt and pepper noise
Ig = imnoise(I,'gaussian',0.02); % add Gaussian noise (with 0.02 variance)
12
18
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
Bộ lọc tính điểm trung bình giữa giá trị Max và giá trị Min trong vùng bao quanh
bởi Sxy.
19
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
Hình 16. Ảnh chụp biển số xe vi phạm được khử nhiễu nhờ SVD
Hình 17. Ảnh chụp tàu hỏa được khử nhiễu SVD
20
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
Không chỉ áp dụng vào lĩnh vực giao thông vận tải mà ứng dụng để khử nhiễu ảnh còn áp dụng,
ứng dụng trong những lĩnh vực như: Y tế, trí tuệ nhân tạo,... Ứng dụng này đã giúp cho nhiều người biết
rõ bệnh mình (lĩnh vực y tế), giúp cảnh sát bắt được những tội phạm qua những chiếc camera quay mờ,
hay bị nhiễu,...
Chú thích:
Các lệnh Matlab
STT Lệnh Ý nghĩa
1 imread(filename) Đọc ảnh được chỉ định bởi filename.
2 Imshow(I) Hiển thị hình ảnh I.
3 subplot(m,n,p) Chia màn hình thành lưới m x n, và tạo
các trục ở vị trí p.
imnoise(image,’salt & pepper’,d) Thêm nhiễu salt & pepper vào ảnh với
d là độ dày đặc của nhiễu (mặc định :
0.05).
4 imnoise(image,’gaussian’, m, var_gause) Thêm nhiễu Gaussian vào ảnh với kì
vọng m, phương sai var_gause (mặc
định : 0, 0.01).
5 imnoise(t,’speckle’, var_speckle) Thêm nhiễu speckle với phương sai
var_speckle.
6 ones(sz1,...,szN) Trả về 1 mảng gồm toàn số 1 với kích
thước các chiều sz1,sz2,…,szN.
7 imfilter(A,h) Lọc mảng đa chiều A với bộ lọc đa
chiều h.
8 medfilt2(I,[m n]) Thực hiện lọc trung vị ảnh I trong 2
chiều, mỗi điểm ảnh xuất ra chứa giá
trị giữa của m x n điểm ảnh xung
quanh từ ảnh đầu vào.
9 ordfilt2(A,order,domain) Thay thế mỗi thành phần trong A bởi
thành phần order trong tập được chỉ
định bởi các thành phần khác không
trong domain
10 fspecial('gaussian',hsize,sigma) Trả về bộ lọc tần số thấp đối xứng
xoay có kích thước hsize với độ lệch
chuẩn sigma
21
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
Nhất là đối với những ngành kĩ thuật. Và bên cạnh việc ứng dụng để khử nhiễu hình ảnh thì từ cơ sở lý
thuyết phân tích SVD cũng có nhiều ứng dụng giúp ích cho xã hội này vô cùng:
+ Nén ảnh
HẾT
22
ỨNG DỤNG PHÂN TÍCH SVD TRONG KHỬ NHIỄU HÌNH ẢNH
LỜI CẢM ƠN
Trong suốt quá trình học tập, chúng em đã nhận được rất nhiều sự giúp đỡ từ các anh chị khóa trên, các
bạn sinh viên cùng khóa và đặc biệt là giảng viên hướng dẫn – thầy Nguyễn Hữu Hiệp. Vì kiến thức của
bản thân vẫn còn hạn hẹp nên chúng em rất mong nhận được sự đóng góp của thầy cô.
Lời cuối nhóm chúng em xin cảm ơn quý thầy/cô đã dành thời gian cho đề tài của nhóm.
23