tiểu luận môn matlab chủ đề tìm hiểu nén ảnh bằng giải thuật phân tích giá trị riêng

11 3 0
tiểu luận môn matlab chủ đề tìm hiểu nén ảnh bằng giải thuật phân tích giá trị riêng

Đ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

ĐẠI HỌC THÁI NGUYÊN ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG KHOA CÔNG NGHỆ ĐIỆN TỬ VÀ TRUYỀN THÔNG - BÁO CÁO TIỂU LUẬN MƠN: MATLAB Chủ đề: TÌM HIỂU NÉN ẢNH BẰNG GIẢI THUẬT PHÂN TÍCH GIÁ TRỊ RIÊNG Giảng viên: Th.s Vũ Thúy Hằng Sinh viên thực hiện: Vũ Đình Cường Hoàng Quang Vinh Nguyễn Bùi Bảo Nguyễn Cơng Trình Đinh Lương Bình Lớp : Kỹ thuật Y sinh Khóa: 13 Thái Nguyên, tháng 10, năm 2016 MỞ ĐẦU Mục đích việc nén ảnh số mã hoá 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 frames 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 tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng PHƯƠNG PHÁP PHÂN TÍCH GIÁ TRỊ RIÊNG (SVD) I, Cơ sở lý thuyết 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 m x n 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 = USV T (4.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 > s > > s r > s r +1 = = s p = với r hạng ma trận A p = min{m,n} tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng  Để 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 T A vào hai vế (4.1), ta có: AT A = (USVT )T USVT = V.ST UT U.S.V T = V.ST S.V T = V.S2.V T 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ừ (4.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 (4.1) với AT sử dụng: VTV = I ta có : AAT = U.S2 U T Vậy cột U vector riêng T AA Cuối cùng, ta phân tích ma trận A dạng sau:   … V T1 … A=(u1 … ur … um) r V Tr … … VTn A S ma trận kích thước mxn, U ma trận mxm V ma trận nxn tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng II Ứng dụng SVD để nén ảnh số Bằng cách phân tích ma trận ảnh A dạng A=USVT , 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 (4.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 tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng Ta có hàm svdcompr() : function [im] = svdcompr (infile,singvals,outfile) % IMCOMPR (infile,singvals,outfile) % Image compression based on Singular Value Decomposition % Written by Luigi Rosa – L’Aquila - Italia % infile is input file name present in the current directory % singvals is the number of largest singular values (positive integer) % outfile is output file name which will be created % Compression ratio is equal to k(n+m+k) / n*m % where k is the number of singular values (singvals) % and [n,m]=size(input_image) %***************************************************** if (exist(infile)==2) a = imread(infile); figure('Name','Input image'); imshow(a); else warndlg('The file does not exist.',' Warning '); im=[]; return end if isrgb(a) if isa(a(:,:,1),'uint8') red = double(a(:,:,1)); green = double(a(:,:,2)); blue = double(a(:,:,3)); [u,s,v] = svds(red, singvals); imred = uint8(u * s * transpose(v)); [u,s,v] = svds(green, singvals); imgreen = uint8(u * s * transpose(v)); [u,s,v] = svds(blue, singvals); imblue = uint8(u * s * transpose(v)); im(:,:,1) = imred; tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng im(:,:,2) = imgreen; im(:,:,3) = imblue; imwrite(im, outfile); figure('Name','Output image'); imshow(im); return; end if isa(a(:,:,1),'uint16') red = double(a(:,:,1)); green = double(a(:,:,2)); blue = double(a(:,:,3)); [u,s,v] = svds(red, singvals); imred = uint16(u * s * transpose(v)); [u,s,v] = svds(green, singvals); imgreen = uint16(u * s * transpose(v)); [u,s,v] = svds(blue, singvals); imblue = uint16(u * s * transpose(v)); im(:,:,1) = imred; im(:,:,2) = imgreen; im(:,:,3) = imblue; imwrite(im, outfile); figure('Name','Output image'); imshow(im); return; end if isa(a(:,:,1),'double') red = double(a(:,:,1)); green = double(a(:,:,2)); blue = double(a(:,:,3)); [u,s,v] = svds(red, singvals); imred = (u * s * transpose(v)); [u,s,v] = svds(green, singvals); imgreen = (u * s * transpose(v)); [u,s,v] = svds(blue, singvals); imblue = (u * s * transpose(v)); im(:,:,1) = imred; tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng im(:,:,2) = imgreen; im(:,:,3) = imblue; imwrite(im, outfile); figure('Name','Output image'); imshow(im); return; end end if isgray(a) dvalue=double(a); [u,s,v] = svds(dvalue, singvals); if isa(a,'uint8') im = uint8(u * s * transpose(v)); end if isa(a,'uint16') im = uint16(u * s * transpose(v)); end if isa(a,'double') im = (u * s * transpose(v)); end imwrite(im, outfile); figure('Name','Output image'); imshow(im); return; end tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng III Ví dụ : Ví dụ 1 : Thực giải thuật nén SVD dùng hàm svdcompr: Trong ví dụ ta giữ lại 30 số hạng phương trình (4.2) in = imread(‘2.bmp’) ; out=svdcompr(‘2.bmp’,30,’svd.bmp’); imshow(in),figure, imshow(out); tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng tieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.riengtieu.luan.mon.matlab.chu.de.tim.hieu.nen.anh.bang.giai.thuat.phan.tich.gia.tri.rieng Ví dụ 2: close all [A,map]=imread(‘lena.gif’); B=im2double(A,’indexed’); imshow(B,map) [u,s,v]=svd(B); C=zeros(size(B)); for j=1:k C=C+s(j,j)*u(:,j)*v(:,j).’; end C=floor(C); imshow(C,map) k=find(C

Ngày đăng: 03/01/2024, 00:46

Tài liệu cùng người dùng

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

Tài liệu liên quan