Phương pháp này có nhiều ứng dụng thực tế,một trong số đó là ứng dụng trong kỹ thuật nén ảnh.. Ma trận U là matrận gồm các vector riêng trái của A, ma trận V là ma trận gồm các vector ri
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA BÁO CÁO BÀI TẬP LỚN MÔN: ĐẠI SỐ TUYẾN TÍNH GVHD: ThS Nguyễn Xuân Mỹ SVTH: Đinh Văn Linh 1812806 Nguyễn Trương Hoàng Minh 2114064 Nguyễn Châu Long 2111666 Nguyên Lê Khánh Minh 2114058 Lý Minh Luân 2111701 Tống Phước Hoàng Minh 2111764 Nguyễn Vương Long 1911520 TP HỒ CHÍ MINH, 3/2022 ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA BÁO CÁO BÀI TẬP LỚN MƠN: ĐẠI SỐ TUYẾN TÍNH GVHD: ThS Nguyễn Xuân Mỹ SVTH: Đinh Văn Linh 1812806 Nguyễn Trương Hoàng Minh 2114064 Nguyễn Châu Long 2111666 Nguyên Lê Khánh Minh 2114058 Lý Minh Luân 2111701 Tống Phước Hoàng Minh 2111764 Nguyễn Vương Long 1911520 TP HỒ CHÍ MINH, 3/2022 MỤC LỤC MỤC LỤC i CHƯƠNG CƠ SỞ LÝ THUYẾT 1.1 Phương pháp phân tích trị riêng .1 1.2 Cách tìm ma trận S, U, V CHƯƠNG VÍ DỤ CHƯƠNG ỨNG DỤNG PHÂN TÍCH SVD ĐỂ NÉN DỮ LIỆU 3.1 Ứng dụng phân tích SVD để nén ảnh số 3.2 Nội dung code 3.3 Giải thích code i CHƯƠNG CƠ SỞ LÝ THUYẾT 1.1 Phương pháp phân tích trị riêng Phương pháp phân tích trị riêng (SVD – Singular Value Decomposition) đề tài quan tâm đại số tuyến tính Phương pháp có nhiều ứng dụng thực tế, số ứng dụng kỹ thuật nén ảnh Đặc điểm quan trọng phương pháp áp dụng cho ma trận thực mxn Nội dung là: phân tích ma trận A cho trước thành ma trận U, S, V, cho A = USVT (1) U V ma trận trực giao S ma trận đường chéo Ma trận U ma trận gồm vector riêng trái A, ma trận V ma trận gồm vector riêng phải A ma trận S ma trận đường chéo, phần tử đường chéo trị riêng A Các trị riêng đường chéo theo thứ tự sau: s1 > s2 > > sr > sr+1 = = sp = với r hạng ma trận A p = min{m,n} 1.2 Cách tìm ma trận S, U, V Để tìm ma trận S, U, V, ta thực bước sau: Bước 1: Tìm ma trận V Nhân AT vào hai vế (1), ta có: AT.A = (USVT )T USVT = V.ST UT U.S.VT = V.ST S.VT = V.S2.VT Do UT.U=I Như vậy, để tìm ma trận S V, ta cần tìm trị riêng vector riêng AT.A từ (1) ta thấy trị riêng AT.A bình phương phần tử S cịn vector riêng AT.A cột V Bước 2: Tìm ma trận U Nhân hai (1) với AT sử dụng: VTV = I ta có : AAT = U.S2 UT Vậy cột U vector riêng A.AT Cuối cùng, ta phân tích ma trận A dạng sau: [] T A=(u1 … ur … um) [ σ1 ¿ ¿ ¿ σ ¿¿¿¿¿ ¿ …¿¿¿¿¿ ¿ 0¿ ¿… ¿ ¿ ] V1 … T Vr … T Vn A S ma trận kích thước mxn, U ma trận mxm V ma trận nxn CHƯƠNG (3 2 Chọn ma trận A= −2 VÍ DỤ ) Đầu tiên tính giá trị đơn lẻ σ i cách tìm giá trị riêng A AT ( 17 T AA = 17 ) Đa thức đặc trưng det( AA T - λ I ) = λ 2−34 λ+ 225=(λ−25)(λ−9) Vì giá trị đơn lẻ σ = √ 25=5 σ 2=√ 9=3 Bây tìm vector đơn lẻ ( cột V) cách tìm trực chuẩn vector riêng AT A Nó tiếp tục cách tìm vector đơn lẻ bên trái ( cột U) thay vào Các giá trị riêng AT A 25, 9, 0, kể từ T A A đối xứng vector đơn lẻ trực giao Đối với λ=25 ta có: ( −12 12 T A A−25 I = 12 −12 −2 −2 −17 ( ) ) −1 0 Một vector độ dài đơn vị nhân ma trận 0 Hàng giảm xuống ( ) 1/ √ v 1= 1/ √ Đối với λ=9 ta có: ( ) ( ) 12 −1/4 T A A−9 I = 12 −2 hàng giảm xuống 1/4 −2 −1 0 ( ) / √18 v = −1 / √18 Một vector độ dài đơn vị nhân ma trận / √ 18 Đối với vector đơn lẻ cuối tính tốn hạt nhân AT A tìm () a v v v = vector đơn vị vng góc với 1và Để vng góc với b cần −a=b c , điều kiện sau ( ) a T v v 3=0 trở thành a/ √ 18+ c / √ 18=0 hoặc−a=2 c v 3= −a để −a/2 ( ) 2/3 v = a=2/3 −2/3 chiều dài đơn vị cần −1/3 Vì thời điểm biết T A=U Σ V =U ( ( 1/ √ 1/ √ 0 1/ √ 18 −1/ √ 18 / √ 18 2/3 −2 /3 −1/3 ) ) σ Cuối tính U theo công thức σ ui =A v i ui= A v i Dẫn đến ( ) U = 1/ √ / √2 Vì SVD ma trận A là: 1/ √ −1 / √2 ( 1/ √ 1/ √ 1/ √ 1/ √ 0 A=U Σ V = 1/ √ 18 −1/ √ 18 / √ 18 1/ √ −1/ √ 2/3 −2 /3 −1/3 T ( )( ) ) CHƯƠNG ỨNG DỤNG PHÂN TÍCH SVD ĐỂ NÉN DỮ LIỆU 3.1 Ứng dụng phân tích SVD để nén ảnh số Mục đích việc nén ảnh số mã hố liệu ảnh dạng thu gọn, tối thiểu hoá số bit dùng để biểu diễn ảnh lẫn sai khác trình nén gây Tầm quan trọng vấn đề nén ảnh thấy rõ qua số liệu cụ thể: với ảnh trắng đen kích thước 512x512 pixels, pixel biểu diễn bits (biểu diễn 256 giá trị mức xám), cần khoảng 256 Kbytes liệu Với ảnh màu cần gấp ba lần số Với liệu video, cần 25 khung hình giây, đoạn video 30s phải cần đến 540MB liệu, số lớn Do vấn đề nén ảnh cần thiết Nói chung, phương pháp nén ảnh chủ yếu phân thành nhóm: nhóm khơng tổn hao nhóm có tổn hao Các phương pháp nén ảnh không tổn hao cho phép biểu diễn ảnh với chất lượng hoàn toàn ngang với ảnh gốc Các phương pháp dựa giải thuật nén áp dụng cho tất đối tượng liệu nói chung khơng riêng liệu ảnh, ví dụ mã Huffman, mã số học, mã Golomb, Tuy nhiên, phương pháp không lợi dụng đặc tính riêng liệu ảnh tỷ lệ nén thấp Do đó, thực tế, phương pháp nén có tổn hao phương pháp sử dụng chủ yếu Với phương pháp này, ln có đánh đổi dung lượng ảnh với chất lượng ảnh Bằng cách phân tích ma trận ảnh A dạng A=USV T , ta biểu diễn xấp xỉ ma trận A phần tử Nếu hạng ma trận A r [U,S,V] = svd(A) Chúng ta sử dụng hàm kết hợp với phương trình (2) để viết hàm nén ảnh dùng giải thuật SVD Ví dụ hàm svdcompr Cú pháp là: >> im = svdcompr (infile,singvals,outfile) infile outfile tên file ảnh gốc ảnh nén, singvals số trị riêng lớn giữ lại 3.2 Nội dung code close all clear all clc %doc va chuyen doi hinh anh inImage=imread('Hinh_anh.jpg'); inImage=rgb2gray(inImage); inImageD=double(inImage); % phan tich hinh anh vua roi bang SVD [U,S,V]=svd(inImageD); % Su dung cac he so k khac de % nen anh dispEr = []; numSVals = []; for N=5:25:300 % Luu cac gia tri singular values vao mot bien C C = S; % Bo cac gia tri k khong can thiet de nen anh C(N+1:end,:)=0; C(:,N+1:end)=0; % Tao lai anh moi su dung gia tri k moi D=U*C*V'; % bieu dien hinh anh va tinh toan loi sai figure; buffer = sprintf('Anh nen sau su dung %d gia tri singular values', N) imshow(uint8(D)); title(buffer); % luu cac gia tri de bieu dien len thi error=sum(sum((inImageD-D).^2)); dispEr = [dispEr; error]; numSVals = [numSVals; N]; end % bieu dien thi figure; title('Khac biet nen'); plot(numSVals, dispEr); grid on xlabel('So gia tri Singular Values su dung'); ylabel('Su khac biet giua anh ban dau va sau nen'); 3.3 Giải thích code Các câu lệnh thuật tốn sử dụng sau: - close all: đóng tất đồ thị - clear all: xóa tất biến, hàm, khỏi nhớ Lệnh làm cho nhớ trống hồn tồn - clc: Xóa cửa sổ lệnh - imread: đọc file thành ma trận - rgb2gray: chuyển đổi hình ảnh RGB thành trắng đen cách loại bỏ thông tin màu sắc độ bão hòa giữ độ sáng - double: chuyển đổi sang số thập phân với độ xác kép - [U, S, V]=sdv(A): thực phân rã giá trị đơn lẻ ma trận A, cho A = U * S * V ' - figure: Tạo hình ảnh (đồ thị) - sprintf: hiển thị thơng tin lên hình - %d: đối số số nguyên viết dạng thập phân - imshow: cho hình ảnh định dạng tiêu chuẩn 8-bit, giống trình duyệt web - sum: tính tổng - title: đặt tiêu đề cho đồ thị - plot (numSVals, dispEr): Vẽ đồ thị tuyến tính không gian chiều (vẽ giá trị numSVals theo giá trị dispEr) - grid on: hiển thị lưới tọa độ - xlable, ylable: đặt tên cho trục x,y