bài tập lớn môn học đại số tuyến tính đại học bách khoa năm học 2021 thành phố hồ chí minh miền nam việt nam khoa học nhóm 10 đảm bảo uy tínádasdasdasdasdasdasdasdádasdasdasdasdasdasdsdasdasdasdasdadadasdasdasd
CƠ SỞ LÍ THUYẾT CỦA PHÂN TÍCH SVD
M A TRẬN
a) Định nghĩa 1: Ma trận một bảng gồm mxn số thực được sắp xếp thành m dòng, n cột và gọi là ma trận cấp mxn.
A = ( a ij) mxn Trong đó aij là phần tử của ma trận nằm trên dòng i, cột j, i=1,2, ,m , j=1,2, ,n
Các phần tử aii trong ma trận được gọi là phần tử nằm trên đường chéo chính Ma trận đơn vị là loại ma trận mà tất cả các phần tử trên đường chéo chính đều bằng 1, trong khi các phần tử khác đều bằng 0 Ma trận đơn vị có cấu trúc đặc biệt và được biểu diễn như sau:
Ma trận đường chéo là một loại ma trận vuông, trong đó các phần tử trên đường chéo chính có giá trị khác 0, trong khi tất cả các phần tử nằm ngoài đường chéo chính đều bằng 0.
Ma trận đường chéo có dạng
D = ( a 0 0 ⋮ 11 a 0 0 ⋮ 22 ⋱ ⋯ … … a 0 0 ⋮ nn ) d) Ma trận dòng, cột
Ma trận dòng có dạng:
Ma trận cột có dạng:
Ma trận chuyển vị A^T của ma trận A được định nghĩa là ma trận có các dòng là các cột của ma trận A, giữ nguyên thứ tự.
M A TRẬN TRỰC GIAO
Định nghĩa 5: Ma trận vuông A được gọi là ma trận trực giao nếu
A T A = I Tính chất: a) Ma trận A = [ a ij ] là ma trận trực giao khi và chỉ khi
Ma trận trực giao A có đặc điểm là khả nghịch với A -1 = A T Điều này đồng nghĩa với việc các vec tơ cột và hàng của A tạo thành các hệ trực chuẩn Ngoài ra, định thức của A thỏa mãn | A T A | = |I| = 1, dẫn đến |A| = ±1.
V EC TƠ RIÊNG – G IÁ TRỊ RIÊNG
Định nghĩa 6: Cho A là ma trận vuông cấp n
Đa thức bậc n của biến λ :
= (-1) n λ n + an-1 λ n-1 +….+ a1 λ 1 + a0 được gọi là đa thức đặc trưng của ma trận A.
Các nghiệm của đa thức đặc trưng PA(λ) gọi là giá trị riêng của ma trận A.
Nếu λ là một giá trị riêng của A thì det (A- λ I) = 0 Khi đó hệ phương trình thuần nhất:
Không gian của hệ (1) gọi là không gian con riêng của ma trận A tương ứng với giá trị riêng λ
Các vec tơ khác không là nghiệm của hệ (1) gọi là vec tơ riêng của ma trận A ứng với giá trị riêngλ
Các vec tơ tạo thành hệ nghiệm cơ bản của hệ (1) được gọi là các vec tơ riêng độc lập tuyến tính tương ứng với giá trị riêng λ, đóng vai trò quan trọng trong việc hình thành không gian riêng.
C HUẨN CỦA VEC TƠ
Chuẩn của vectơ x, ký hiệu là ‖x‖, là một số không âm với các tính chất sau: (a) ‖x‖≥0 và ‖x‖=0 chỉ khi x=0; (b) ‖αx‖=|α|‖x‖ cho mọi α∈R; và (c) bất đẳng thức tam giác ‖x+y‖≤‖x‖+‖y‖.
Chuẩn Euclide của vec tơ x được xác định như sau:
C HUẨN CỦA MA TRẬN
Chuẩn của ma trận A kích thước m×n, ký hiệu là ‖A‖, là một số không âm với các tính chất sau: (a) ‖A‖≥0 và ‖A‖=0 chỉ khi A=0; (b) ‖αxA‖=|αx|‖A‖ với mọi αx∈R; (c) ‖A+B‖≤‖A‖+‖B‖, thể hiện bất đẳng thức tam giác.
Cho A =( a ij) mxn ta định nghĩa chuẩn F của ma trận A là
H ẠNG CỦA MA TRẬN
Định nghĩa 9: (Định thức con của ma trận)
Ma trận A = (a_ij) m x n cho phép chúng ta lấy các phần tử tại giao điểm của s dòng và s cột, tạo thành một ma trận vuông con cấp s Ở đây, s là số nguyên dương và s ≤ min(m, n) Định thức của ma trận vuông con này được gọi là định thức con cấp s của ma trận A.
Kí hiệu D i 1 i 2 i s j 1 j 2 j s được gọi là định thức con cấp s của ma trận A Theo định nghĩa, hạng của ma trận A được xác định bởi định thức con cấp cao nhất khác không của nó, được gọi là định thức con cơ sở.
Một ma trận A có thể có nhiều định thức con cơ sở đều có cùng cấp. Hạng của ma trận A là cấp của định thức con cơ sở.
Ký hiệu hạng của ma trận A là rank (A) hay r(A).
Một số tính chất về hạng của ma trận:
- rank ( A mxn B nxl )=rank ( A mxn ) nếu rank (B nxl )= n
- rank (C mxn A nxk )=rank ( A nxk ) nếu rank (C mxn )=n
V ẾT CỦA MA TRẬN
Vết của ma trận vuông A bậc nxn được tính bằng tổng các phần tử trên đường chéo chính, được biểu diễn bằng công thức tr(A) = a11 + a22 + + ann = ∑ i=1 n aii, trong đó aii là phần tử tại hàng i và cột i Vết của ma trận cũng tương đương với tổng các trị riêng của nó và không thay đổi khi cơ sở được thay đổi Đặc trưng hóa này có thể áp dụng để xác định vết cho các toán tử tuyến tính trong trường hợp tổng quát.
Ký hiệu của nó thường là Sp hoặc Tr
PHÂN TÍCH SVD
S Ơ LƯỢC VỀ SVD
Cho A là ma trận thực mxn, chúng ta sẽ chứng minh rằng tập hợp các trị riêng khác không của A A T và A T A là giống nhau Giả sử λ o là một trị riêng khác 0 của A A T, và X o là vector riêng tương ứng của A A T.
A A T X o =λ o X o ➪ Suy ra: A T A A T X o =A T λ o X o Điều này tương đương với A T A(A T X 0 )=λ o (A¿ ¿T X o )¿ Vì λ o khác 0 nên A T X o khác 0 Suy ra λ o là trị riêng của A T A và A T X 0 là vector riêng của A T A.
Vì ma trận A A T và A T A là 2 ma trận đối xứng, nên chúng chéo hóa trực giao được Khi đó:
A A T ¿(QΣΣ P T ) (QΣΣ P T ) T ¿QΣΣ P T P Σ T QΣ T ¿QΣΣ Σ T QΣ T (vì P T P=I, I là ma trận đơn vị) ¿QΣ D 1 QΣ T
A T A=(QΣΣ P T ) T (QΣΣ P T ) ¿PΣ T QΣ T QΣΣ P T ¿PΣ T Σ P T (vì QΣ T QΣ=I, I là ma trận đơn vị) ¿P D 2 P T
Các cột của ma trận QΣ đại diện cho các cơ sở của các không gian con riêng của ma trận A A T sau khi thực hiện quá trình trực giao hóa Gram-Schmidt Các trị riêng khác 0 của A A T được biểu diễn bằng các σ 1 2, σ 2 2, …, σ r 2.
Các cột của ma trận P đại diện cho các cơ sở của không gian con riêng của ma trận A^T A sau khi thực hiện quy trình trực giao hóa Gram-Schmidt Các giá trị riêng khác 0 của A^T A được ký hiệu là σ₁², σ₂², …, σᵣ².
- D 1 , D 2 là ma trận chéo với trị riêng tương ứng của A A T và A T A là σ 1 2 , σ 2 2 , … σ r 2 Ta sắp xếp các σ 1 2 , σ 2 2 , … σ r 2 sao cho σ 1 2 >σ 2 2 >…¿σ r 2
C OMPACT SVD
Viết lại biểu thức dưới dạng tổng với Rank (A) = 1
Với mỗi q i p i T là một ma trận có hạng bằng 1
Ma trận A có thể được phân tích dựa vào r cột đầu tiên của QΣ và r phần tử khác không trên đường chéo của Σ Phân tích này dẫn đến một dạng gọn hơn của A, được gọi là Compact SVD.
QΣ r và P r là các ma trận được hình thành từ các cột của QΣ và P, trong khi Σ r là ma trận con được tạo từ r hàng đầu tiên và r cột đầu tiên của Σ Khi ma trận A có hạng thấp hơn nhiều so với số hàng và số cột (r ≪ m, n), việc lưu trữ sẽ trở nên hiệu quả hơn.
Dưới đây là ví dụ minh hoạ với m=4, n=6, r=2.
(Hình ảnh 1 : 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.)
P HÂN TÍCH SVD
2.3.1 Mục tiêu của phân tích SVD
Phương pháp SVD xác định ma trận xấp xỉ tốt nhất cho một ma trận cho trước dựa trên khoảng cách norm Frobenios Ma trận xấp xỉ này được biểu diễn dưới dạng tích của hai ma trận trực giao và một ma trận đường chéo, trong đó các phần tử của ma trận đường chéo là các căn giá trị riêng của ma trận gốc Quá trình nhân ma trận thực hiện việc biến đổi dữ liệu thông qua phép xoay trục và thay đổi độ lớn, tạo ra dữ liệu mới trong không gian mới SVD cho phép giữ lại 100% thông tin hoặc một phần lớn thông tin của dữ liệu ban đầu thông qua các phép truncate Bằng cách sắp xếp các trị riêng giảm dần, SVD đạt được ma trận xấp xỉ tốt nhất với hạng thấp hơn và kích thước ma trận nhân tử tối ưu, giúp tiết kiệm thời gian và chi phí tính toán, đồng thời cung cấp giá trị dự báo chính xác cho ma trận gốc.
2.3.2 Quá trình phân tích SVD :
Phân tích Giá trị Đặc biệt (Singular Value Decomposition - SVD) là một ứng dụng quan trọng trong Đại số tuyến tính Mọi ma trận A có kích thước mxn, không cần phải là ma trận vuông, đều có thể được phân tách thành dạng SVD.
Trong đó, Q và P là các ma trận trực giao, còn Σ là ma trận chéo không vuông (cấp mxn) với các phần tử trên đường chéo thoả mãn điều kiện σ 1 ≥ σ 2 ≥⋯≥ σ r ≥0 và các phần tử còn lại bằng 0 Mặc dù Σ không phải là ma trận vuông, nhưng nó vẫn được coi là ma trận chéo vì các phần tử khác 0 chỉ xuất hiện trên đường chéo Rank(A), ký hiệu là r, được xác định bằng số lượng phần tử khác 0 trong ma trận đường chéo Σ.
*Chú ý rằng cách biểu diễn (!) không là duy nhất, vì ta chỉ cần đổi dấu
Q và P thì vẫn thỏa mãn.
2.3.3 Biểu diễn SVD qua các trường hợp của ma trận A:
Trong hình ảnh 2 và 3, chúng ta thấy sự phân tích giá trị riêng (SVD) của ma trận A trong hai trường hợp: khi số hàng m nhỏ hơn số cột n (hình trên) và khi m lớn hơn n (hình dưới) Ma trận Σ là một ma trận đường chéo với các phần tử giảm dần và không âm, trong đó màu đỏ đậm biểu thị giá trị cao hơn Các ô màu trắng trong ma trận này thể hiện giá trị bằng 0.
C ÁC BƯỚC PHÂN TÍCH SVD
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 : A A T =QΣ D 1 QΣ T
Để viết phương trình đặc trưng của ma trận A A^T, chúng ta cần xác định các giá trị riêng của A A^T Sau khi tính toán, chúng ta sẽ có ma trận đường chéo D1 chứa các giá trị riêng đã tìm được, được sắp xếp theo thứ tự giảm dần.
2.2 : Tìm vecto riêng của A A T Từ đó ta tính được ma trận QΣ , các cột của QΣ là các vecto riêng của A A T
Bước 3 : Thực hiện chéo hóa trực giao A T A=P D 2 P T
Tương tự các bước 2.1, 2.2 ta tính được P và D 2.
Chọn Σ m ×n bằng cách chọn ma trận cỡ tương ứng phù hợp với D 1 hay D 2. Sau đó lấy căn bậc 2 của tất cả những phần tử trên đường chéo.
Bước 4 : Vậy phân tích SVD của ma trận A sẽ là : A m × n =QΣ m × n Σ m × n ( P n × n ) T
Dựa trên dữ liệu ban đầu, chúng ta có thể cấu trúc thông tin dưới dạng một ma trận Qua quá trình chéo hóa trực giao và ma trận chuyển vị, chúng ta thực hiện phân tích SVD Phân tích này có thể được áp dụng hiệu quả trong nhiều lĩnh vực khác nhau trong khoa học.
C ÁC ĐỊNH LÝ LIÊN QUAN
Trong chương này sẽ trình bày khai triển SVD, một số tính chất và hệ quả liên quan.
Với mọi ma trận A m × n bất kỳ, khi đó mọi giá trị riêng của ma trận A T A đều không âm.
Gọi λ là giá trị riêng của ma trận A T A và v là vec tơ riêng tương ứng Dễ thấy: ‖AX‖ 2 =¿
Do λ là giá trị riêng của ma trận A T A:
Như ta đã chứng minh trên mọi giá trị riêng của A T A đều không âm.
Ta có định nghĩa và cách xác định của giá trị kì dị của ma trận A: σ i = √ λ i = ‖ A X i ‖
2.5.2 Định lý 2 (Về sự phân tích SVD của ma trận)
Với mọi ma trận A m × n bất kỳ đều có thể phân tích dưới dạng:
Với U và V T là các ma trận trực giao Ma trận ∑ được xây dựng:
Tìm khai triển SVD của ma trận A = [ 1 1 0 0 0 1 ]
Ta tìm các giá trị riêng của ma trận A T A.
Giải phương trình det (A- λ I) = 0 ta được các giá trị riêng của ma trận A T A là λ 1 = 2, λ 2 = 1, λ 3= 0.
Với mỗi giá trị riêng λ i , giải phương trình (A - λ i I)x = 0 ta được các vec tơ riêng tương ứng là: v 1 = [ 1/ 1/ 0 √ √ 2 2 ], v 2 = [ 0 0 1 ], v 3 =[ −1/ 1/ 0 √ √ 2 2 ]
Các giá trị kì dị của ma trận A là σ 1= √ 2 , σ 2 = 1, σ 3 = 0
Từ đó ta được ma trận Σ = [ √ 0 2 0 0 1 0 ]
⇒ Phân tích SVD của ma trận A là:
2.5.3 Định lý 3 (Về dạng khai triển của phân tích SVD)
Mọi ma trận A có dạng khai triển: A= U Σ V T = σ 1 u 1 v 1 T
Với σ i , u i , v i là các giá trị đã được nói đến ở định lí 2.
Với ‖A‖ F là chuẩn Frobeneous của ma trận A và σ 1, σ 2, … , σ r > 0 là các giá trị kì dị của A.
2+…+σ r 2 CHỨNG MINH: Đầu tiên ta chứng minh tính chất sau:
‖QΣA‖ F = ‖A‖ F với QΣ m × m là ma trận trực giao và A m × n là ma trận bất kì.
Xét ma trận A m × n bất kì với SVD của nó là U Σ V T :
‖A‖ F 2 = ‖ U Σ V T ‖ F 2 =‖ Σ V T ‖ F 2 (U là ma trận trực giao) =‖ ( Σ V T ) T ‖ F
2 = ‖ V Σ T ‖ 2 F = ‖ Σ T ‖ F 2 (V là ma trận trực giao) = σ 1 2 + … + σ r 2
Cho ma trận A với dạng khai triển của phân tích SVD là:
Ta viết A k về dưới dạng:
V Í DỤ
Tìm phân tích SVD của ma trận A= ( 3 22 3 −22)
- Ta có:AA T =( 178 178 ) Chéo hóa trực giao AA T =QΣ D 1 QΣ T , với D 1=( 25 00 9) , QΣ= 1 ( 11 −11 )
- Chéo hóa trực giao A T A=P D 2 P T , với D 2=( 25 0 0 0 0 9 0 0 0 )
Vậy phân tích Svd của A là A=QΣ ∑ P T , Với Q,P ở trên và
ỨNG DỤNG CỦA PHÂN TÍCH SVD TRONG VIỆC KHỬ NHIỄU HÌNH ẢNH
N GUYÊN LÝ KHỬ NHIỄU ẢNH
Một ứng dụng đơn giản của SVD là giảm nhiễu trong hình ảnh Ví dụ ở đây là hình ảnh của một hình chữ nhật màu đen và trắng:
Hình ảnh có thể được xem như một ma trận với 1 đại diện cho màu trắng và 0 cho màu đen Khi áp dụng phân tích giá trị riêng (SVD), chúng ta thu được ba giá trị riêng quan trọng là 14,72, 5,13 và 3,314, phản ánh thứ hạng của ma trận là 3 Để làm phong phú thêm nội dung hình ảnh, chúng ta sẽ thêm một số nhiễu ngẫu nhiên đồng nhất vào ma trận này.
Ma trận hình ảnh mới hiện có xếp hạng 15 Sử dụng phân tích giá trị kỳ dị (SVD), ba giá trị kỳ dị đầu tiên của ma trận hình ảnh này lần lượt là 13,17, 3,85 và 2,52, trong khi phần còn lại đều nhỏ hơn 0,6 Khi chúng ta thay thế tất cả các giá trị kỳ dị nhỏ hơn 0,6 bằng 0, hình ảnh thu được sẽ như sau:
Bằng cách thiết lập tất cả các giá trị riêng nhỏ hơn 0,6 thành 0, chúng ta đã giảm thiểu nhiễu trong hình ảnh Mặc dù hình nhiễu vẫn còn hiện hữu, nhưng mức độ của nó đã giảm đáng kể.
T ÌNH HÌNH ỨNG DỤNG TRONG THỰC TẾ
-Trong thực tế, việc khử nhiễu hình ảnh bằng svd rất đa dạng :
Phân tích SVD là một phương pháp có nhiều ứng dụng, nổi bật nhất là trong việc hiệu chỉnh hình ảnh kỹ thuật số Nhờ vào SVD, hình ảnh kỹ thuật số có thể được truyền tải hiệu quả qua vệ tinh và internet.
3.2.1 Ảnh sạch và ảnh bị nhiễu
Chúng tôi bắt đầu với ảnh chụp cộng hưởng từ MRI gốc Bằng cách sử dụng công cụ toán học Matlab, chúng tôi đã thêm nhiễu vào ảnh này, tạo ra ảnh chụp MRI bị nhiễu.
Ma trận biểu diễn ảnh chụp được, được gọi là X, chứa nhiễu do nhiều nguyên nhân như phóng xạ Trong đó, X true là ma trận thể hiện các thành phần nhiễu trên ảnh gốc Ảnh thu được là sự tổng hợp của hai ma trận X true và X noise.
X = X true + XℽX noise ( là mức độ nhiễu )ℽX
Từ giá trị r = 150 trở về trước, ảnh được khử nhiễu hiệu quả và rõ nét Tuy nhiên, từ giá trị r = 250 trở đi, ảnh mặc dù vẫn rõ nét nhưng bắt đầu xuất hiện dấu hiệu nhiễu trở lại.
Hình ảnh 7: Bên trái là ảnh chụp MRI gốc, bên phải là ảnh chụp
Hình ảnh 8: Kết quả chạy chương trình khử nhiễu SVD MATLAB nét.
+Với những giá trị r nhỏ (r = 20), ảnh thu được hoàn toàn không rõ nét, và cũng gần như khử được nhiễu.
Mối liên hệ giữa độ phức tạp và độ chính xác trong việc khôi phục ảnh ban đầu là rất quan trọng Khi giữ lại nhiều giá trị singular, độ chính xác của ảnh khôi phục sẽ cao, nhưng độ phức tạp cũng tăng, dẫn đến việc có nhiều nhiễu Ngược lại, nếu chỉ giữ lại một số ít giá trị singular, độ phức tạp sẽ giảm, nhưng điều này cũng làm giảm độ chính xác của ảnh, như trong trường hợp r = 20.
Để đạt được một bức ảnh có độ chính xác và độ phức tạp phù hợp cho việc nhận diện và sử dụng, chúng ta cần xác định giá trị r thích hợp.
Phân tích SVD không chỉ được ứng dụng trong việc khử nhiễu ảnh chụp cộng hưởng từ MRI, mà còn hiệu quả trong việc xử lý các loại ảnh khác như PET và XRAY.
Hình ảnh 9: Khử nhiễu ảnh scan
3.2.3 Trong lĩnh vực trí tuệ nhân tạo
Trong trí tuệ nhân tạo, machine learning, nhiễu hình ảnh, tín hiệu và âm thanh có thể ảnh hưởng đến quá trình xử lý thông tin, do đó khử nhiễu, đặc biệt là khử nhiễu ảnh, là rất quan trọng Trước khi dữ liệu được đưa vào máy tính, quá trình làm sạch dữ liệu (Data Cleaning) cần được thực hiện để nâng cao hiệu quả xử lý thông tin Ví dụ, khi máy học nhận diện khuôn mặt, bước đầu tiên là khử nhiễu cho từng ảnh trong tập dữ liệu chứa khuôn mặt của hàng triệu người, nhằm đạt được hiệu quả học máy tốt nhất.
Hình ảnh 10: PET bằng SVD
3.2.4 Trong lĩnh vực giám sát giao thông
Khử nhiễu ảnh bằng phân tích SVD là một công cụ hữu ích trong giám sát giao thông Chất lượng hình ảnh từ camera hoặc máy ảnh giám sát rất quan trọng để xác định đúng người và hành vi vi phạm Việc áp dụng phân tích SVD giúp giảm thiểu thời gian và công sức trong quá trình xử lý hình ảnh giám sát, nâng cao hiệu quả công tác giám sát giao thông.
Hình ảnh 11 : Khử nhiễu ảnh nhận diện Barrack Obama sử dụng SVD
Hình ảnh 12: Ảnh chụp biển số xe vi phạm được khử nhiễu
G IAO DIỆN CODE XỬ LÍ NHIỄU HÌNH ẢNH
Hình ảnh 13: Giao diện xử lí nhiễu ảnh được hiện ra sau khi chạy code
Nút chọn ảnh để khử nhiễu từ file
Nút khử nhiễu ảnh gốc và hiển thị ảnh vào ô ảnh khử nhiễu
Nút thêm nhiễu ảnh gốc và hiển thị ảnh vào ô ảnh Ô để nhập giá trị r từ bàn phím
Nút lưu ảnh đã được xử lí nhiễu vào file Nút khử ảnh gốc và hiển thị 2 ảnh vào 2 ô tương ứng
Thanh trượt để thay đổi giá tri r
Giao diện xử lý nhiễu bao gồm các chức năng quan trọng như hiển thị ảnh bị thêm nhiễu, hiển thị ảnh gốc lấy từ file và hiển thị ảnh đã được khử nhiễu.
P HẦN CODE ĐỀ TÀI
Tạo giao diện người dùng function varargout = BTL_L07_10(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename,
'gui_OpeningFcn', @BTL_L07_10_OpeningFcn, 'gui_OutputFcn', @BTL_L07_10_OutputFcn, 'gui_LayoutFcn', [] ,
'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end
% End initialization code - DO NOT EDIT
Tạo giao diện người dùng
% - Executes just before BTL_L07_10 is made visible. function BTL_L07_10_OpeningFcn(hObject, ~, handles, varargin) handles.output = hObject;
% Update handles structure guidata(hObject, handles);
% - Outputs from this function are returned to the command line. function varargout = BTL_L07_10_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
Hiển thị ảnh ra “Ảnh gốc” function nuthienthianh_Callback(hObject, eventdata, handles) global fig
{'*.jpg;*.png;*.jpeg', 'All MATLAB Files (*.jpg, *.png,*.jpeg)';
'Choose the figure'); full = strcat(path, name); %ghep name va path voi nhau fig = imread(full); imshow(fig,'Parent',handles.anhgoc);
To select the value of 'r' from the slider, the function Rvalue_Callback retrieves the slider's current value using `get(handles.Rvalue,'value')` It then updates the string of the edit box by setting it to the string representation of the retrieved 'r' value with `set(handles.editValue,'string',num2str(rvalue))`.
Điều chỉnh giao diện thanh slider function Rvalue_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 9 9]); end
To adjust the value of R, input a number in the text field The function editValue_Callback retrieves the string from the editText and sets the Rvalue to the corresponding slider value using str2num.
Điều chỉnh giao diện thanh text function editValue_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
Tạo nhiễu cho ảnh và Hiển thị ra khung “ Ảnh nhiễu” function nutnhieuanh_Callback(hObject, eventdata, handles) global fig global fig_noise
The code snippet checks the dimensions of the variable 'fig' to determine if it is an RGB image, indicated by a length of 3 If 'fig' is RGB, it converts it to grayscale using 'rgb2gray' Subsequently, it adds Gaussian noise to the image with a mean of 0 and variance of 0.01, and displays the noisy image using 'imshow' in the specified parent handle.
Khử nhiễu ảnh gốc chưa qua “ nhiễu ảnh” function KhuAnhGoc_Callback(hObject, eventdata, handles) global fig global rvalue global fig_result
X= size(fig); if (length(X)==3) tmp = rgb2gray(fig); else tmp = fig; end rvalue = get(handles.Rvalue,'value'); rvalue = round(rvalue);
The Singular Value Decomposition (SVD) of a matrix is computed using the command [U,S,V] = svd(double(tmp)) The diagonal elements of matrix S are extracted into a vector called matrixS, and its length is determined with sizeS = length(matrixS) To reduce the dimensionality, values from rvalue onward in matrixS are set to zero An approximation of S is created, where the diagonal matrix is constructed using the modified matrixS The final result is obtained by multiplying U, the diagonal approximation of S, and the transpose of V, resulting in fig_result This image is then converted to an unsigned 8-bit format and displayed using imshow(fig_result,'Parent',handles.anh1).
The function nutkhunhieu_Callback is designed to denoise images affected by noise It utilizes global variables fig_noise, rvalue, and fig_result to manage the denoising process The function retrieves the value from the Rvalue slider and rounds it to ensure precise adjustments for effective noise reduction.
[U,S,V] = svd(double(fig_noise)); % chuyen fig_noise ve anh so
Phân tích ma trận SVD được thực hiện bằng cách sử dụng hàm diag để lấy đường chéo chính của ma trận S Đầu tiên, độ dài của vector matrixS được xác định, sau đó các giá trị từ vị trí rvalue trở xuống được gán bằng 0 Cuối cùng, ma trận xấp xỉ approx_S được tạo ra bằng cách chuyển đổi vector thành ma trận, với các giá trị trong ma trận được lấy từ vector đã điều chỉnh.
The updated image is computed using the formula fig_result = U * approx_S * V', where fig_result represents the reconstructed image matrix The noise matrix is defined as a double type, and the resulting image is converted to an 8-bit format with fig_result = uint8(fig_result) for proper display Finally, the image is shown using imshow(fig_result, 'Parent', handles.anh1).
Lưu ảnh sau khi đã khử nhiễu function nutluuanh_Callback(hObject, eventdata, handles) global fig_result filter = {'*.jpg';'*.png';'*.jepg';'*.*'};
[name, path] = uiputfile(filter,'Choose the folder'); % lay duong dan va ten hinh anh full = strcat(path,name); % ghep name va path imwrite(fig_result,full) % luu anh
G IẢI THÍCH MỘT SỐ CÂU LỆNH
- Function: tạo thêm hàm mới
- Global: tạo 1 biến cho có thể sử dụng liên tục, nhiều lần về sau
- Varagout: là một biến đầu ra trong câu lệnh định nghĩa hàm cho phép hàm trả về bất kỳ số lượng đối số đầu ra nào
Uigetfile là một công cụ hiển thị hộp thoại cho phép người dùng truy xuất một hoặc nhiều tệp Hộp thoại này sẽ liệt kê tất cả các tệp và thư mục có trong thư mục hiện tại, giúp người dùng dễ dàng lựa chọn tệp mong muốn.
- Strcat: 1 hàm để ghép tên file và đường dẫn lại với nhau
- Imread : đọc hình ảnh, phân tích hình ảnh
- Imshow: Hiển thị ra màn hình
- Size: trả về một vectơ hàng có các phần tử là độ dài của các kích thước tương ứng của A
- Length: trả về độ dài của kích thước mảng lớn nhất trong X Đối với vectơ, độ dài chỉ đơn giản là số phần tử
- rbg2ray: biến ảnh màu thành ảnh trắng đen
- imnoise: thêm nhiễu, Gausian : kiểu nhiễu.
- Get: lấy đi giá trị đã gắn
- Set: hiện giá trị đã gắn
- Num2str : chuyển giá trị num thành str
- Str2num: chuyển giá trị từ string sang num
- Round: đưa biến về số nguyên
- Diag : lệnh lấy đường chéo chính của matrixS thành các vecto
- hObject: xử lý đối tượng đã tạo ra lệnh gọi lại
- eventdata: dữ liệu này lưu trữ dữ liệu đặc biệt cho một số lệnh gọi lại cụ thể như các thao tác nhấn phím hoặc cuộn
- Handles: nội dung hiện tại của dữ liệu được lưu trữ với hình Điều này được truy xuất với dữ liệu hướng dẫn (hObject) tại thời điểm gọi lại.
K ẾT QUẢ SAU KHI CHẠY CHƯƠNG TRÌNH
Ta thấy với các giá trị khác nhau của tham số r , chương trình sẽ cho ra các ảnh hiệu chỉnh có độ nét khác nhau: r = 10 r = 50 r = 100 r 0 Ảnh nhiễu:
Với những giá trị r nhỏ như r ;15;20;…việc khử nhiễu gần như hoàn toàn nhưng ảnh lại không rõ nét
Từ giá trị r = 100 trở đi ảnh được khử nhiễu nhưng không có gì thay đổi nhiều.
Từ giá trị r = 100 trở xuống việc khử nhiễu ảnh có sự thay đổi rõ rệt
Khai triển và phân tích SVD là một đề tài thú vị mà nhóm đã thực hiện, cho thấy SVD là công cụ quan trọng trong khối ngành kỹ thuật và công nghệ hiện đại Sau khi áp dụng SVD để khử nhiễu ảnh, chúng em nhận thấy nó còn có nhiều ứng dụng tiềm năng khác trong trí tuệ nhân tạo, y tế, nén ảnh, hồi quy tuyến tính và giám sát giao thông Mặc dù nhóm đã nỗ lực hết mình, nhưng do kiến thức còn hạn chế, chúng em vẫn còn nhiều thiếu sót và mong nhận được sự bổ sung từ thầy cô để hoàn thiện sản phẩm.