Nén ảnh số với matlab

Ngày nay cùng với sự tiến bộ của khoa hoc kỹ thuật công nghệ điện tử được ứng dụng và phát triển. Đặc biệt là sự bùng nổ của ngành công nghệ thông tin bưu chính viễn thông. Trong công nghệ truyền thông, thông tin được truyền dẩn trên các đường truyền hữu tuyến hay vô tuyến. Dù truyền dẫn trong môi trường nào đi nữa thì tốc độ, độ bảo mật của thông tin vô cùng quan trọng. Tốc độ của đường truyền phụ thuộc vào hai yếu tố đó là: ü Phương pháp truyền của hệ thống truyền tin. ü Dung lượng của thông tin cần truyền. Không những trong khi truyền thông tin mới xem xét vấn đề về dung lượng của thông tin mà ngay cả khi lưu trử người ta củng quan tâm đến nó. Chính vì thế, vì sự cần thiết của vấn đề này mà hôm nay chúng em xin chọn một đề tài nói về nén dữ liệu của thông tin đó là đề tài: “Sử dụng phần mềm Matlab trong xử lý nén ảnh số”. Mục đích của đồ án này giới thiệu về ứng dụng của phần mềm Malab trong nén nén ảnh số. Đồ án gồm 4 chương: Chương 1: Giới thiệu Matlab Chương 2: Nén ảnh số Chương 3: Chương trình nén ảnh Chương 4: Kết luận. MỤC LỤC Trang Chương 1 : GIỚI THIỆU MATLAB 1 1.1 Tổng quan về Matlab . 1 1.1.1 Khái niệm về Matlab . 1 1.1.2 Tổng quan về cấu trúc dữ liệu Matlab, các ứng dụng 1 1.1.3 Hệ thống Matlab . 2 1.1.4 Làm quen với Matlab 3 1.1.5 Các cửa sổ làm việc của Matlab 4 1.2 Các hàm chuyển đổi kiểu ảnh 7 1.3 Giao diện đồ họa GUI . 7 1.3.1 Khái niệm 8 1.3.2 Cách tạo GUI . 8 1.3.2.1 Tạo GUI bằng lệnh 8 1.3.2.2 Tạo GUI bằng công cụ đồ họa . 13 Chương 2: NÉN ÀNH SỐ . 16 2.1 Các khái niệm về ảnh . 16 2.1.1 Điểm ảnh (Picture Element ) . 16 2.1.2 Mức xám của ảnh 16 2.1.3 Định nghĩa ảnh số . 18 2.2 Một số khái niệm nén ảnh số . 19 2.2.1 Nén dữ liệu . 19 2.2.2 Tỉ lệ nén 19 2.2.3 Các loại dư thừa dữ liệu . 20 2.2.4 Phân loại các phương pháp nén 21 2.3 Biến đổi cosine rời rạc (DCT- Discrete cosine Transform) 23 2.3.1 Phương pháp biến đổi . 23 2.3.2 Nén tổn hao dựa vào DCT . 24 Chương 3: CHƯƠNG TRÌNH NÉN ẢNH . 31 3.1 Giao diện chương trình 31 3.2 Mô hình nén . 31 3.3 Quá trình nén và giải nén DCT 32 3.4 Các đoạn mã lệnh . 34 3.4.1 Chọn ảnh . 34 3.4.2 Nén DCT 34 3.4.3 Xem pixel ảnh gốc 35 3.4.4 Xem pixel ảnh nén 36 3.4.5 Xem giá trị từng pixel . 36 3.5 Kết quả khi chạy chương trình 38 3.5.1 Chọn ảnh . 38 3.5.2 Nén DCT 38 3.5.3 Pixel ảnh gốc . 39 3.5.4 Pixel DCT . 39 3.5.5 Kết quả . 40 Chương 4: Kết Luận . 41 TÀI LIỆU THAM KHẢO

doc15 trang | Chia sẻ: lvcdongnoi | Lượt xem: 6506 | Lượt tải: 5download
Bạn đang xem nội dung tài liệu Nén ảnh số với matlab, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Chương 1 GIỚI THIỆU MATLAB 1.1 Tổng quan về Matlab 1.1.1 Khái niệm về Matlab Matlab là một ngôn ngữ lập trình thực hành bậc cao được sử dụng để giải các bài toán về kỹ thuật. Matlab tích hợp được việc tính toán, thể hiện kết quả, cho phép lập trình, giao diện làm việc rất dễ dàng cho người sử dụng. Dữ liệu cùng với thư viện được lập trình sẵn cho phép người sử dụng có thể có được những ứng dụng sau đây. Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường. Cho phép lập trình tạo ra những ứng dụng mới. Cho phép mô phỏng các mô hình thực tế. Phân tích, khảo sát và hiển thị dữ liệu. Với phần mềm đồ hoạ cực mạnh. Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran. 1.1.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (mảng này không đòi hỏi về kích thước). Chúng cho phép giải quyết các vấn đề liên quan đến lập trình bằng máy tính, đặc biệt sử dụng các phép tính về ma trận hay vector và có thể sử dụng ngôn ngữ C hoặc Fortran lập trình rồi thực hiện ứng dụng lập trình đó bằng các câu lệnh gọi từ Matlab. Matlab được viết tắt từ chữ “MATrix LABoratory” tức là thư viện về ma trận, từ đó phần mềm Matlab được viết nhằm cung cấp cho việc truy cập vào phần mềm ma trận một cách dễ dàng, phần mềm ma trận này được phát triển bởi các công trình Linpack và Eispack. Ngày nay Matlab được phát triển bởi Lapack và Artpack tạo nên một nghệ thuật phần mềm cho ma trận. a. Dữ liệu Dữ liệu của MATLAB thể hiện dưới dạng ma trận (hoặc mảng–tổng quát), và có các kiểu dữ liệu được liệt kê sau đây: Kiểu đơn single, kiểu này có lợi về bộ nhớ dữ liệu vì nó đòi hỏi ít byte nhớ hơn, kiểu dữ liệu này không được sử dụng trong các phép tính toán học, độ chính xác kém hơn. Kiểu double kiểu này là kiểu thông dụng nhất của các biến trong Matlab. Kiểu Sparse. Kiểu uint8, uint16. . . Kiểu char ví dụ ‘Hello’ Kiểu cell. Kiểu Structure. Trong MATLAB kiểu dữ liệu double là kiểu mặc định sử dụng trong các phép tính số học. b. Ứng dụng MATLAB tạo điều kiện thuận lợi cho: Các khoá học về toán học. Các kỹ sư, các nhà nghiên cứu khoa học. Dùng MATLAB để tính toán, nghiên cứu tạo ra các sản phẩm tốt nhất trong sản xuất. c. Toolbox là một công cụ quan trọng trong Matlab Công cụ này được MATLAB cung cấp cho phép bạn ứng dụng các kỹ thuật để phân tích, thiết kế, mô phỏng các mô hình. Ta có thể tìm thấy toolbox ở trong mô trường làm việc của. Mạng nơron. Logic mờ. Simulink. 1.1.3 Hệ thống MATLAB Hệ thống giao diện của MATLAB được chia thành 5 phần: • Môi trường phát triển. Đây là nơi đặt các thanh công cụ, các phương tiện giúp chúng ta sử dụng các lệnh và các file, ta có thể liệt kê một số như sau. + Desktop. + Command Window. + Command History. + Browsers for viewinghelp. • Thư viện, các hàm toán học bao gồm các cấu trúc như tính tổng, sin cosin, atan, atan2 etc..., các phép tính đơn giản đến các phép tính phức tạp như tính ma trận nghịch đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library. • Ngôn ngữ MATLAB. Đó là các ngôn ngữ cao về ma trận và mảng, với các dòng lệnh, các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng đối tượng. • Đồ họa trong MATLAB. Bao gồm các câu lệnh thể hiện đồ hạo trong môi trường 2D và 3D, tạo các hình ảnh chuyển động, cung cấp các giao diện tương tác giữa người sử dụng và máy tính. • Giao tiếp với các ngôn ngữ khác. MATLAB cho phép tương tác với các ngôn ngữ khác như C, Fortran … 1.1.4 Làm quen với matlab Hình 1. 1 Cửa sổ desktop (cửa sổ lớn nhất), và các cửa sổ phụ của nó. Trước tiên để khởi động MATLAB bạn click vào biểu tượng MATLAB.exe, trên màn hình xuất hiện cửa sổ sau. (Xem hình vẽ 1.1) Cửa sổ đó chứa các thanh công cụ (Giao diện người và máy) cần thiết cho việc quản lý các files, các biến, cửa sổ lệnh, có thể coi desktop là các panel gồm các ô, vùng, quản lý và tác dụng của từng cửa sổ nhỏ được quản lý bởi desktop. 1.1.5 Các cửa sổ Làm việc của MATLAB a. Cửa sổ Command window Là cửa sổ giao tiếp chính của Matlab bởi đây là nơi nhập giá trị các biến, hiển thị giá trị, tính toán giá trị của biểu thức, thực thi các hàm có sẵn trong thư viện (dạng lệnh), hoặc các hàm (dạng function) do người dùng lập trình ra trong M_files. Các lệnh được nhập sau dấu nhắc ‘ >> ‘, và nếu có sai sót trong quá trình gõ (nhập) lệnh thì hãy nhấn phím Enter cho đến khi nhận được dấu nhắc >>. Thực thi lệnh bằng nhấn phím Enter. Gõ các lệnh sau: >> A= pi/2 ; >> B= sin(A) B=1 Hoặc chương trình soạn thảo trong M-file dưới đây: % Chuong trinh trong M-file x= 0:pi/6:2*pi; y=sin(x); plot(x, y); % chuong trinh được lưu với tên file là “ve_sin.m” b. Cửa sổ command History Các dòng mà bạn nhập vào trong cửa sổ Command window (các dòng này có thể là dòng nhập biến, hoặc có thể là dòng lệnh thực hiện hàm nào đó) được giữ lại trong cửa sổ Command History, và cửa sổ này cho phép ta sử dụng lại những lệnh đó bằng cách click chuột lên các lệnh đó hoặc các biến, nếu như bạn muốn sử dụng lại biến đó. click đôi chuột lên lênh hoặc biến để sử dụng lại c. Cửa sổ Workspace Là cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích thước vùng nhớ (số bytes), kiểu dữ liệu (lớp), các biến được giải phóng sau mỗi lần tắt chương trình. Click đôi chuột lên biến để xem dữ liệu(hoặc thay đổi giá trị) Ngoài ra nó cho phép thay đổi giá tri, cũng như kích thước của biến bằng cách click đôi chuột lên các biến. Hoặc click vào nút bên trái ngay cạnh nút save Ví dụ khi chọn biến (giả thử là biến b) rồi click (hoặc click chuột vào nút cạnh nút save) ta được cửa sổ sau gọi là Array Editor. Tiêu đề là tên biến b, định dạng dữ liệu ở ô có tên là: Numeric format, mặc định là dạng short, Kích thước size là 1 by 3 (tức là một hàng và 3 cột) ta có thể thay đổi kích thước này bằng cách thay đổi số có trong ô kích thước size. Dùng cửa sổ này để lưu các biến ở dưới là dữ liệu của biến b, ta có thể thay đổi chúng bằng cách thay đổi giá trị trong các ô đó Tất cả các biến đều được lưu trong Workspace trong đó thể hiện cả kích thước (Size), số Bytes và kiểu dữ liệu (class) (8 bytes cho mỗi phần tử dữ liệu kiểu double cụ thể là 24 bytes dành cho b và 8 bytes dành cho a). d. Cửa sổ M-file Là một cửa sổ dùng để soạn thảo chương trình ứng dụng, để thực thi chương trình viết trong M-file bằng cách gõ tên của file chứa chương trình đó trong cửa sổ Commandwindow. Khi một chương trình viết trong M-file, thì tuỳ theo ứng dụng cụ thể, tuỳ theo người lập trình mà chương trình có thể viết dưới dạng sau: Dạng Script file: Tức là chương trình gồm tập hợp các câu lệnh viết dưới dạng liệt kê, không có biến dữ liệu vào và biến lấy giá trị ra. Dạng hàm function: có biến dữ liệu vào và biến ra. 1.2 Các hàm chuyển đổi kiểu ảnh Với các thao tác nhất định, sẽ thật hữu ích khi có thể chuyển đổi ảnh từ dạng này sang dạng khác. Chẳng hạn, nếu ta muốn lọc một ảnh màu được lưu trữ dưới dạng ảnh số, đầu tiên ta nên chuyển đổi nó thành dạng ảnh RGB. Khi ta áp dụng phép lọc tới ảnh RGB, Matlab sẽ lọc giá trị cường độ tương ứng trong ảnh. Nếu ta lọc ảnh số Matlab đơn giản chỉ áp đặt phép lọc tới ma trận ảnh số và kết quả sẽ không có ý nghĩa. Chú ý: Khi chuyển đổi một ảnh từ dạng này sang dạng khác, ảnh kết quả có thể khác ảnh ban đầu. Chẳng hạn, nếu ta chuyển đổi một ảnh màu chỉ số sang một ảnh cường độ, kết quả ta sẽ thu được một ảnh đen trắng. Danh sách sau đây sẽ liệt kê các hàm được sử dụng trong việc chuyển đổi ảnh: + dither: Tạo một ảnh nhị phân từ một ảnh cường độ đen trắng bằng cách trộn, tạo một ảnh chỉ số từ một ảnh RGB bằng cách trộng (dither). + gray2id: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng . + grayslice: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng bằng cách đặt ngưỡng. + im2bw: Tạo một ảnh nhị phân từ một ảnh cường độ, ảnh chỉ số hay ảnh RGB trên cơ sở của ngưỡng ánh sáng. + ind2gray: Tạo một ảnh cường độ đen trắng từ một ảnh chỉ số. + ind2rgb: Tạo một ảnh RGB từ một ảnh chỉ số. + mat2gray: Tạo một ảnh cường độ đen trắng từ dữ liệu trong một ma trận bằng cách lấy tỉ lệ giữ liệu. + rgb2gray: Tạo một ảnh cường độ đen trắng từ một ảnh RGB. + rgb2ind: Tạo một ảnh chỉ số từ một ảnh RGB. Ta cũng có thể thực hiện các phép chuyển đổi kiểu chỉ sử dụng cú pháp của Matlab. Chẳng hạn , ta có thể convert một ảnh cường độ sang ảnh RGB bằng cách ghép nối 3 phần copy của ma trận ảnh gốc giữa 3 chiều: RGB=cat(3,I,I,I ); Ảnh RGB thu được có các ma trận đồng nhất cho các mặt phẳng R,G,B vì vậy ảnh hiển thị giống như bóng xám. 1.3 Giao diện đồ hoạ GUI 1.3.1 Khái niệm Để tiện cho việc sử dụng các ứng dụng hay chương trình mà ta đã viết chúng ta có thể tạo ra giao diện đồ họa GUI (Graphic User Interface) giữa ngưới dùng và matlab. Trong giao diện này ta có thể xuất dữ liệu dưới hai dạng văn bản và đồ họa. Mỗi một GUI có thể có một hay nhiều giao diện. Việc tạo GUI tạo nên một công cụ nhập xuất dữ liệu một cách trực quan, nhanh chóng và rất thuận tiện. Ngoài ra có thể dùng GUI để giám sát các quá trình, hiển thị các đối tượng… 1.3.2 Cách tạo GUI Có hai cách để tạo ra GUI: Tạo GUI bằng cách viết lệnh trực tiếp trong M-file và tạo GUI bằng công cụ đồ họa. 1.3.2.1 Tạo GUI bằng lệnh Để tạo giao diện GUI như hình bên dưới ta làm các bước sau: Hình 1.2 Giao diện GUI B1: Tạo khung giao diện và đặt tên cho GUI với tên “Welcome to GUI” với những dòng lệnh sau: namefig = 'Welcome to GUI'; figpos = get(0,'DefaultFigurePosition'); % lay vi tri mac nhien figpos(1)= figpos(1)-10; figpos(2)= figpos(2)-10; figpos(3)= figpos(3)+10; figpos(4)= figpos(4)+10; % Tao figure fig=figure( ... 'Name', namefig, ... 'NumberTitle','off', ... 'Position',figpos); Ta thu được hình bên: B2: Tạo khung đồ họa truy xuất ảnh và dòng chử “Interface Matlab” axs=axes('Position',[0.05 0.4 0.65 0.55]); % text txtpos=[10 50 425 50]; txt=uicontrol(... 'Style','text',... 'BackgroundColor',[0.8 0.8 0.8],... 'ForegroundColor',[0 0 1],... 'String','Interface Matlab ',... 'Position',txtpos,... 'Fontname','Times New Roman',... 'FontWeight','Bold',... 'FontSize',34); B3: Tạo các nút nhấn có tên “Sphere”, “Picture”, “Close” và viết lệnh cho chúng. % Close button closeHndl=uicontrol(... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',[p1+0.01 p4-0.35 p3-0.025 0.05], ... 'String','Close', ... 'Foregroundcolor','b',... 'Fontsize',9,... 'Callback','close'); % Sphere button sph=uicontrol( ... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',[p1+0.01 p4-0.1 p3-0.025 0.05], ... 'String','Sphere', ... 'Foregroundcolor','b',... 'Fontsize',9,... 'Callback',['[x,y,z]=sphere(35);', 'surfl(x,y,z);', 'axis equal']); % Picture button pic=uicontrol(... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',[p1+0.01 p4-0.225 p3-0.025 0.05], ... 'String','Picture', ... 'Foregroundcolor','b',... 'Fontsize',9,... 'Callback','imshow(uigetfile(''*.bmp;*.BMP;*.tif;*.TIF;*.jpg''))'); Kết quả ta thu được: Hình 1.3 Kết quả thu được bằng lệnh 1.3.2.2 Tạo GUI bằng công cụ đồ họa Trên đây ta đã xem xét cách tạo GUI bằng phương pháp thủ công. Ta có thể tạo GUI bằng công cụ đồ hoạ. Bằng hai cách như sau:. Hình 1.4: Tạo giao diện GUI Cách 1: Gõ lệnh guide trong của sổ command Window Cách 2: Click chuột vào biểu tượng guide()trên thanh công cụ. Khi gõ lệnh guide ta thấy xuất hiện một hộp thư thoại như hình sau: Create New GUI: tạo giao diện GUI mới. Open Existing GUI: mở những giao diện đã có trước. Chúng ta chọn Create New GUI sau đó chọn Blank GUI (Default) để tạo GUI trắng và thiết lập các thông số theo yêu cầu. Kết quả cho ra một layout rỗng như hình bên: Soạn thảo thuộc tính Chạy thử Soạn Menu Các phần tử thiết kế Vùng thiết kế Viết lệnh Sau khi mở hộp thoai tạo GUI ta làm các bước sau: B1: thiết kế giao diện GUI như bài trên có hình sau: Hình 1.5 Cửa sổ thiết kế giao diện GUI B2: Viết lệnh cho các nút nhấn (button). Function sph_Callback(hObject, eventdata, handles) [x,y,z]=sphere(35); surfl(x,y,z); axis equal Function pic_Callback(hObject, eventdata, handles) imshow(uigetfile({'*.tif;*.bmp;*.gif;*.jpg'},'pick an image file')) Function clo_Callback(hObject, eventdata, handles) Close Kết quả thu được: Hình 1.6 Kết quả thu được bằng công cụ đồ họa

Các file đính kèm theo tài liệu này:

  • docchuong 1.doc
  • docchuong 2.doc
  • docchuong 3.doc
  • docchuong 4.doc